Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
wine
Manage
Activity
Members
Labels
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jason Beetham
wine
Commits
96388c85
Commit
96388c85
authored
26 years ago
by
Eric Kohl
Committed by
Alexandre Julliard
26 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Added tracking support and fixed loading of resource strings.
Added unregister code.
parent
37d68ef5
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
dlls/comctl32/tooltips.c
+157
-33
157 additions, 33 deletions
dlls/comctl32/tooltips.c
include/tooltips.h
+2
-1
2 additions, 1 deletion
include/tooltips.h
with
159 additions
and
34 deletions
dlls/comctl32/tooltips.c
+
157
−
33
View file @
96388c85
...
...
@@ -4,7 +4,8 @@
* Copyright 1998 Eric Kohl
*
* TODO:
* - Tracking tooltips (under construction).
* - Tracking tooltips (finished, except smart placement).
* - Transparent tooltips (under construction).
* - TTS_ALWAYSTIP (undefined).
* - Unicode support.
* - Custom draw support.
...
...
@@ -68,11 +69,11 @@ TOOLTIPS_Refresh (WND *wndPtr, HDC32 hdc)
static
VOID
TOOLTIPS_GetTipText
(
WND
*
wndPtr
,
TOOLTIPS_INFO
*
infoPtr
)
TOOLTIPS_GetTipText
(
WND
*
wndPtr
,
TOOLTIPS_INFO
*
infoPtr
,
INT32
nTool
)
{
TTTOOL_INFO
*
toolPtr
=
&
infoPtr
->
tools
[
infoPtr
->
nCurrent
Tool
];
TTTOOL_INFO
*
toolPtr
=
&
infoPtr
->
tools
[
n
Tool
];
if
(
toolPtr
->
hinst
)
{
if
(
(
toolPtr
->
hinst
)
&&
(
HIWORD
((
UINT32
)
toolPtr
->
lpszText
)
==
0
))
{
TRACE
(
tooltips
,
"get res string %x %x
\n
"
,
toolPtr
->
hinst
,
(
int
)
toolPtr
->
lpszText
);
LoadString32A
(
toolPtr
->
hinst
,
(
UINT32
)
toolPtr
->
lpszText
,
...
...
@@ -94,7 +95,7 @@ TOOLTIPS_GetTipText (WND *wndPtr, TOOLTIPS_INFO *infoPtr)
SendMessage32A
(
toolPtr
->
hwnd
,
WM_NOTIFY
,
(
WPARAM32
)
toolPtr
->
uId
,
(
LPARAM
)
&
ttnmdi
);
if
(
ttnmdi
.
hinst
)
{
if
(
(
ttnmdi
.
hinst
)
&&
(
HIWORD
((
UINT32
)
ttnmdi
.
szText
)
==
0
))
{
LoadString32A
(
ttnmdi
.
hinst
,
(
UINT32
)
ttnmdi
.
szText
,
infoPtr
->
szTipText
,
INFOTIPSIZE
);
if
(
ttnmdi
.
uFlags
&
TTF_DI_SETITEM
)
{
...
...
@@ -126,8 +127,10 @@ TOOLTIPS_GetTipText (WND *wndPtr, TOOLTIPS_INFO *infoPtr)
lstrcpy32A
(
toolPtr
->
lpszText
,
ttnmdi
.
lpszText
);
}
}
else
else
{
ERR
(
tooltips
,
"recursive text callback!
\n
"
);
infoPtr
->
szTipText
[
0
]
=
'\0'
;
}
}
else
lstrcpyn32A
(
infoPtr
->
szTipText
,
toolPtr
->
lpszText
,
INFOTIPSIZE
);
...
...
@@ -187,7 +190,7 @@ TOOLTIPS_Show (WND *wndPtr, TOOLTIPS_INFO *infoPtr)
TRACE
(
tooltips
,
"Show tooltip pre %d!
\n
"
,
infoPtr
->
nTool
);
TOOLTIPS_GetTipText
(
wndPtr
,
infoPtr
);
TOOLTIPS_GetTipText
(
wndPtr
,
infoPtr
,
infoPtr
->
nCurrentTool
);
if
(
infoPtr
->
szTipText
[
0
]
==
'\0'
)
{
infoPtr
->
nCurrentTool
=
-
1
;
...
...
@@ -208,11 +211,7 @@ TOOLTIPS_Show (WND *wndPtr, TOOLTIPS_INFO *infoPtr)
TOOLTIPS_CalcTipSize
(
wndPtr
,
infoPtr
,
&
size
);
TRACE
(
tooltips
,
"size %d - %d
\n
"
,
size
.
cx
,
size
.
cy
);
if
((
toolPtr
->
uFlags
&
TTF_TRACK
)
&&
(
toolPtr
->
uFlags
&
TTF_ABSOLUTE
))
{
rect
.
left
=
infoPtr
->
xTrackPos
;
rect
.
top
=
infoPtr
->
yTrackPos
;
}
else
if
(
toolPtr
->
uFlags
&
TTF_CENTERTIP
)
{
if
(
toolPtr
->
uFlags
&
TTF_CENTERTIP
)
{
RECT32
rc
;
if
(
toolPtr
->
uFlags
&
TTF_IDISHWND
)
...
...
@@ -236,7 +235,6 @@ TOOLTIPS_Show (WND *wndPtr, TOOLTIPS_INFO *infoPtr)
AdjustWindowRectEx32
(
&
rect
,
wndPtr
->
dwStyle
,
FALSE
,
wndPtr
->
dwExStyle
);
// SetWindowPos32 (wndPtr->hwndSelf, HWND_TOP, 1, 1,
SetWindowPos32
(
wndPtr
->
hwndSelf
,
HWND_TOP
,
rect
.
left
,
rect
.
top
,
rect
.
right
-
rect
.
left
,
rect
.
bottom
-
rect
.
top
,
SWP_SHOWWINDOW
);
...
...
@@ -271,6 +269,117 @@ TOOLTIPS_Hide (WND *wndPtr, TOOLTIPS_INFO *infoPtr)
}
static
VOID
TOOLTIPS_TrackShow
(
WND
*
wndPtr
,
TOOLTIPS_INFO
*
infoPtr
)
{
TTTOOL_INFO
*
toolPtr
;
RECT32
rect
;
SIZE32
size
;
NMHDR
hdr
;
if
(
infoPtr
->
nTrackTool
==
-
1
)
{
TRACE
(
tooltips
,
"invalid tracking tool (-1)!
\n
"
);
return
;
}
TRACE
(
tooltips
,
"show tracking tooltip pre %d!
\n
"
,
infoPtr
->
nTrackTool
);
TOOLTIPS_GetTipText
(
wndPtr
,
infoPtr
,
infoPtr
->
nTrackTool
);
if
(
infoPtr
->
szTipText
[
0
]
==
'\0'
)
{
infoPtr
->
nTrackTool
=
-
1
;
return
;
}
TRACE
(
tooltips
,
"show tracking tooltip %d!
\n
"
,
infoPtr
->
nTrackTool
);
toolPtr
=
&
infoPtr
->
tools
[
infoPtr
->
nTrackTool
];
hdr
.
hwndFrom
=
wndPtr
->
hwndSelf
;
hdr
.
idFrom
=
toolPtr
->
uId
;
hdr
.
code
=
TTN_SHOW
;
SendMessage32A
(
toolPtr
->
hwnd
,
WM_NOTIFY
,
(
WPARAM32
)
toolPtr
->
uId
,
(
LPARAM
)
&
hdr
);
TRACE
(
tooltips
,
"
\"
%s
\"\n
"
,
infoPtr
->
szTipText
);
TOOLTIPS_CalcTipSize
(
wndPtr
,
infoPtr
,
&
size
);
TRACE
(
tooltips
,
"size %d - %d
\n
"
,
size
.
cx
,
size
.
cy
);
if
(
toolPtr
->
uFlags
&
TTF_ABSOLUTE
)
{
rect
.
left
=
infoPtr
->
xTrackPos
;
rect
.
top
=
infoPtr
->
yTrackPos
;
if
(
toolPtr
->
uFlags
&
TTF_CENTERTIP
)
{
rect
.
left
-=
(
size
.
cx
/
2
);
rect
.
top
-=
(
size
.
cy
/
2
);
}
}
else
{
#if 0
/* FIXME: do smart placement */
RECT32 rcTool;
if (toolPtr->uFlags & TTF_IDISHWND)
GetWindowRect32 ((HWND32)toolPtr->uId, &rcTool);
else {
rcTool = toolPtr->rect;
MapWindowPoints32 (toolPtr->hwnd, (HWND32)0, (LPPOINT32)&rcTool, 2);
}
#endif
GetCursorPos32
((
LPPOINT32
)
&
rect
);
rect
.
top
+=
20
;
#if 0
/* smart placement */
if ((rect.left + size.cx > rcTool.left) && (rect.left < rcTool.right))
rect.left = rcTool.right;
if ((rect.top + size.cy > rcTool.top) &&
(rect.top < rcTool.bottom))
rect.top = rcTool.bottom;
if (toolPtr->uFlags & TTF_CENTERTIP) {
}
#endif
}
TRACE
(
tooltips
,
"pos %d - %d
\n
"
,
rect
.
left
,
rect
.
top
);
rect
.
right
=
rect
.
left
+
size
.
cx
;
rect
.
bottom
=
rect
.
top
+
size
.
cy
;
AdjustWindowRectEx32
(
&
rect
,
wndPtr
->
dwStyle
,
FALSE
,
wndPtr
->
dwExStyle
);
SetWindowPos32
(
wndPtr
->
hwndSelf
,
HWND_TOP
,
rect
.
left
,
rect
.
top
,
rect
.
right
-
rect
.
left
,
rect
.
bottom
-
rect
.
top
,
SWP_SHOWWINDOW
);
}
static
VOID
TOOLTIPS_TrackHide
(
WND
*
wndPtr
,
TOOLTIPS_INFO
*
infoPtr
)
{
TTTOOL_INFO
*
toolPtr
;
NMHDR
hdr
;
if
(
infoPtr
->
nTrackTool
==
-
1
)
return
;
toolPtr
=
&
infoPtr
->
tools
[
infoPtr
->
nTrackTool
];
TRACE
(
tooltips
,
"hide tracking tooltip %d!
\n
"
,
infoPtr
->
nTrackTool
);
hdr
.
hwndFrom
=
wndPtr
->
hwndSelf
;
hdr
.
idFrom
=
toolPtr
->
uId
;
hdr
.
code
=
TTN_POP
;
SendMessage32A
(
toolPtr
->
hwnd
,
WM_NOTIFY
,
(
WPARAM32
)
toolPtr
->
uId
,
(
LPARAM
)
&
hdr
);
SetWindowPos32
(
wndPtr
->
hwndSelf
,
HWND_TOP
,
0
,
0
,
0
,
0
,
SWP_NOZORDER
|
SWP_HIDEWINDOW
);
}
static
INT32
TOOLTIPS_GetToolFromInfoA
(
TOOLTIPS_INFO
*
infoPtr
,
LPTTTOOLINFO32A
lpToolInfo
)
{
...
...
@@ -387,7 +496,7 @@ TOOLTIPS_Activate (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
TRACE
(
tooltips
,
"activate!
\n
"
);
if
(
!
(
infoPtr
->
bActive
)
&&
(
infoPtr
->
nCurrentTool
!=
-
1
))
TOOLTIPS_Hide
(
wndPtr
,
infoPtr
);
TOOLTIPS_Hide
(
wndPtr
,
infoPtr
);
return
0
;
}
...
...
@@ -432,7 +541,7 @@ TOOLTIPS_AddTool32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
toolPtr
->
rect
=
lpToolInfo
->
rect
;
toolPtr
->
hinst
=
lpToolInfo
->
hinst
;
if
(
lpToolInfo
->
hinst
)
{
if
(
(
lpToolInfo
->
hinst
)
&&
(
HIWORD
((
INT32
)
lpToolInfo
->
lpszText
)
==
0
))
{
TRACE
(
tooltips
,
"add string id %x!
\n
"
,
(
int
)
lpToolInfo
->
lpszText
);
toolPtr
->
lpszText
=
lpToolInfo
->
lpszText
;
}
...
...
@@ -1042,7 +1151,8 @@ TOOLTIPS_SetToolInfo32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
toolPtr
->
rect
=
lpToolInfo
->
rect
;
toolPtr
->
hinst
=
lpToolInfo
->
hinst
;
if
(
lpToolInfo
->
hinst
)
{
if
((
lpToolInfo
->
hinst
)
&&
(
HIWORD
((
INT32
)
lpToolInfo
->
lpszText
)
==
0
))
{
TRACE
(
tooltips
,
"set string id %x!
\n
"
,
(
INT32
)
lpToolInfo
->
lpszText
);
toolPtr
->
lpszText
=
lpToolInfo
->
lpszText
;
}
else
if
(
lpToolInfo
->
lpszText
)
{
...
...
@@ -1081,17 +1191,19 @@ TOOLTIPS_TrackActivate (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
/* activate */
infoPtr
->
nTrackTool
=
TOOLTIPS_GetToolFromInfoA
(
infoPtr
,
lpToolInfo
);
if
(
infoPtr
->
nTrackTool
!=
-
1
)
{
TRACE
(
tooltips
,
"activated!
\n
"
);
infoPtr
->
bTrackActive
=
TRUE
;
/* FIXME : show tool tip ??? */
TOOLTIPS_TrackShow
(
wndPtr
,
infoPtr
);
}
}
else
{
/* deactivate */
/* FIXME : hide tool tip ??? */
TOOLTIPS_TrackHide
(
wndPtr
,
infoPtr
);
infoPtr
->
bTrackActive
=
FALSE
;
infoPtr
->
nTrackTool
=
-
1
;
TRACE
(
tooltips
,
"deactivated!
\n
"
);
}
return
0
;
...
...
@@ -1107,8 +1219,10 @@ TOOLTIPS_TrackPosition (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
infoPtr
->
yTrackPos
=
(
INT32
)
HIWORD
(
lParam
);
if
(
infoPtr
->
bTrackActive
)
{
TRACE
(
tooltips
,
"[%d %d]
\n
"
,
infoPtr
->
xTrackPos
,
infoPtr
->
yTrackPos
);
FIXME
(
tooltips
,
"set position!
\n
"
);
TOOLTIPS_TrackShow
(
wndPtr
,
infoPtr
);
}
return
0
;
...
...
@@ -1150,7 +1264,7 @@ TOOLTIPS_UpdateTipText32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
/* copy tool text */
toolPtr
->
hinst
=
lpToolInfo
->
hinst
;
if
(
lpToolInfo
->
hinst
)
{
if
(
(
lpToolInfo
->
hinst
)
&&
(
HIWORD
((
INT32
)
lpToolInfo
->
lpszText
)
==
0
))
{
toolPtr
->
lpszText
=
lpToolInfo
->
lpszText
;
}
else
if
(
lpToolInfo
->
lpszText
)
{
...
...
@@ -1294,12 +1408,13 @@ TOOLTIPS_GetFont (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
static
LRESULT
TOOLTIPS_MouseM
ov
e
(
WND
*
wndPtr
,
WPARAM32
wParam
,
LPARAM
lParam
)
TOOLTIPS_MouseM
essag
e
(
WND
*
wndPtr
,
UINT32
uMsg
,
WPARAM32
wParam
,
LPARAM
lParam
)
{
TOOLTIPS_INFO
*
infoPtr
=
TOOLTIPS_GetInfoPtr
(
wndPtr
);
TTTOOL_INFO
*
toolPtr
=
&
infoPtr
->
tools
[
infoPtr
->
nTool
];
if
(
toolPtr
->
uFlags
&
TTF_TRANSPARENT
)
{
FIXME
(
tooltips
,
"transparent tooltips not implemented yet!
\n
"
);
#if 0
POINT32 pt;
RECT32 rc;
...
...
@@ -1310,7 +1425,7 @@ TOOLTIPS_MouseMove (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
GetClientRect32 (toolPtr->hwnd, &rc);
ScreenToClient32 (toolPtr->hwnd, &pt);
if (PtInRect32 (&rc, pt))
SendMessage32A (toolPtr->hwnd,
WM_MOUSEMOVE
, wParam, lParam);
SendMessage32A (toolPtr->hwnd,
uMsg
, wParam, lParam);
#endif
}
else
...
...
@@ -1326,9 +1441,6 @@ TOOLTIPS_NcCreate (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
wndPtr
->
dwStyle
&=
0x0000FFFF
;
wndPtr
->
dwStyle
|=
(
WS_POPUP
|
WS_BORDER
|
WS_CLIPSIBLINGS
);
// FIXME (tooltips, "style 0x%08x\n", wndPtr->dwStyle);
// SetParent32 (wndPtr->hwndSelf, NULL);
return
TRUE
;
}
...
...
@@ -1339,7 +1451,7 @@ TOOLTIPS_Paint (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
HDC32
hdc
;
PAINTSTRUCT32
ps
;
hdc
=
wParam
==
0
?
BeginPaint32
(
wndPtr
->
hwndSelf
,
&
ps
)
:
(
HDC32
)
wParam
;
hdc
=
(
wParam
==
0
)
?
BeginPaint32
(
wndPtr
->
hwndSelf
,
&
ps
)
:
(
HDC32
)
wParam
;
TOOLTIPS_Refresh
(
wndPtr
,
hdc
);
if
(
!
wParam
)
EndPaint32
(
wndPtr
->
hwndSelf
,
&
ps
);
...
...
@@ -1602,11 +1714,15 @@ TOOLTIPS_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
// case WM_GETTEXT:
// case WM_GETTEXTLENGTH:
// case WM_LBUTTONDOWN:
// case WM_MBUTTONDOWN:
case
WM_LBUTTONDOWN
:
case
WM_LBUTTONUP
:
case
WM_MBUTTONDOWN
:
case
WM_MBUTTONUP
:
case
WM_RBUTTONDOWN
:
case
WM_RBUTTONUP
:
case
WM_MOUSEMOVE
:
return
TOOLTIPS_MouseM
ov
e
(
wndPtr
,
wParam
,
lParam
);
return
TOOLTIPS_MouseM
essag
e
(
wndPtr
,
uMsg
,
wParam
,
lParam
);
case
WM_NCCREATE
:
return
TOOLTIPS_NcCreate
(
wndPtr
,
wParam
,
lParam
);
...
...
@@ -1618,7 +1734,6 @@ TOOLTIPS_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
return
TOOLTIPS_Paint
(
wndPtr
,
wParam
,
lParam
);
// case WM_PRINTCLIENT:
// case WM_RBUTTONDOWN:
case
WM_SETFONT
:
return
TOOLTIPS_SetFont
(
wndPtr
,
wParam
,
lParam
);
...
...
@@ -1641,8 +1756,8 @@ TOOLTIPS_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
}
void
TOOLTIPS_Register
(
void
)
VOID
TOOLTIPS_Register
(
VOID
)
{
WNDCLASS32A
wndClass
;
...
...
@@ -1659,3 +1774,12 @@ TOOLTIPS_Register (void)
RegisterClass32A
(
&
wndClass
);
}
VOID
TOOLTIPS_Unregister
(
VOID
)
{
if
(
GlobalFindAtom32A
(
TOOLTIPS_CLASS32A
))
UnregisterClass32A
(
TOOLTIPS_CLASS32A
,
(
HINSTANCE32
)
NULL
);
}
This diff is collapsed.
Click to expand it.
include/tooltips.h
+
2
−
1
View file @
96388c85
...
...
@@ -54,6 +54,7 @@ typedef struct tagTOOLTIPS_INFO
}
TOOLTIPS_INFO
;
extern
void
TOOLTIPS_Register
(
void
);
extern
VOID
TOOLTIPS_Register
(
VOID
);
extern
VOID
TOOLTIPS_Unregister
(
VOID
);
#endif
/* __WINE_TOOLTIPS_H */
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment