Roman Pisl : winex11: Implement NIM_SETVERSION.
Alexandre Julliard
julliard at winehq.org
Wed Oct 12 16:06:15 CDT 2016
Module: wine
Branch: master
Commit: 9f774ada6c4f5b1bd3ac56bd47f342758028e97a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9f774ada6c4f5b1bd3ac56bd47f342758028e97a
Author: Roman Pisl <rpisl at seznam.cz>
Date: Mon Oct 10 16:35:39 2016 +0200
winex11: Implement NIM_SETVERSION.
Signed-off-by: Roman Pisl <rpisl at seznam.cz>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winex11.drv/systray.c | 44 +++++++++++++++++++++++++++++++++++++-------
1 file changed, 37 insertions(+), 7 deletions(-)
diff --git a/dlls/winex11.drv/systray.c b/dlls/winex11.drv/systray.c
index c7e7013..794f2c6 100644
--- a/dlls/winex11.drv/systray.c
+++ b/dlls/winex11.drv/systray.c
@@ -65,6 +65,7 @@ struct tray_icon
UINT info_flags; /* flags for info balloon */
UINT info_timeout; /* timeout for info balloon */
HICON info_icon; /* info balloon icon */
+ UINT version; /* notify icon api version */
};
static struct list icon_list = LIST_INIT( icon_list );
@@ -484,15 +485,37 @@ static LRESULT WINAPI tray_icon_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPAR
case WM_LBUTTONDBLCLK:
case WM_RBUTTONDBLCLK:
case WM_MBUTTONDBLCLK:
- /* notify the owner hwnd of the message */
- TRACE("relaying 0x%x\n", msg);
- ret = PostMessageW(icon->owner, icon->callback_message, icon->id, msg);
- if (!ret && (GetLastError() == ERROR_INVALID_WINDOW_HANDLE))
{
- WARN( "application window was destroyed, removing icon %u\n", icon->id );
- delete_icon( icon );
+ WPARAM wpar;
+ BOOL oldver;
+
+ oldver = icon->version <= NOTIFY_VERSION;
+ if (oldver) {
+ /* 0 up to NOTIFYICON_VERSION (=3) */
+ wpar = icon->id;
+ } else {
+ /* NOTIFYICON_VERSION_4 */
+ RECT rect;
+ WORD x, y;
+
+ GetWindowRect( icon->window, &rect );
+ x = rect.left + LOWORD(lparam);
+ y = rect.top + HIWORD(lparam);
+ wpar = MAKEWPARAM(x, y);
+ }
+
+ /* notify the owner hwnd of the message */
+ TRACE("relaying 0x%x\n", msg);
+ ret = PostMessageW(icon->owner, icon->callback_message, wpar,
+ oldver ? msg : MAKELPARAM(msg, icon->id));
+
+ if (!ret && (GetLastError() == ERROR_INVALID_WINDOW_HANDLE))
+ {
+ WARN( "application window was destroyed, removing icon %u\n", icon->id );
+ delete_icon( icon );
+ }
+ return 0;
}
- return 0;
case WM_WINDOWPOSCHANGED:
update_systray_balloon_position();
@@ -834,6 +857,13 @@ int CDECL wine_notify_icon( DWORD msg, NOTIFYICONDATAW *data )
case NIM_MODIFY:
if ((icon = get_icon( data->hWnd, data->uID ))) ret = modify_icon( icon, data );
break;
+ case NIM_SETVERSION:
+ if ((icon = get_icon( data->hWnd, data->uID )))
+ {
+ icon->version = data->u.uVersion;
+ ret = TRUE;
+ }
+ break;
case 0xdead: /* Wine extension: owner window has died */
cleanup_icons( data->hWnd );
break;
More information about the wine-cvs
mailing list