Jactry Zeng : winex11: Implement FlashWindowEx.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Oct 13 10:53:47 CDT 2015


Module: wine
Branch: master
Commit: c2dc6f3ef26fb18e7766956ef0a8cbadccc364d6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c2dc6f3ef26fb18e7766956ef0a8cbadccc364d6

Author: Jactry Zeng <jzeng at codeweavers.com>
Date:   Tue Oct 13 13:52:37 2015 +0800

winex11: Implement FlashWindowEx.

Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winex11.drv/window.c         | 29 +++++++++++++++++++++++++++++
 dlls/winex11.drv/winex11.drv.spec |  1 +
 dlls/winex11.drv/x11drv.h         |  1 +
 dlls/winex11.drv/x11drv_main.c    |  1 +
 4 files changed, 32 insertions(+)

diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index b7ec06e..b763677 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -2767,3 +2767,32 @@ failed:
     release_win_data( data );
     return -1;
 }
+
+void CDECL X11DRV_FlashWindowEx( PFLASHWINFO pfinfo )
+{
+    struct x11drv_win_data *data = get_win_data( pfinfo->hwnd );
+    XEvent xev;
+
+    if (!data)
+        return;
+
+    if (data->mapped)
+    {
+        xev.type = ClientMessage;
+        xev.xclient.window = data->whole_window;
+        xev.xclient.message_type = x11drv_atom( _NET_WM_STATE );
+        xev.xclient.serial = 0;
+        xev.xclient.display = data->display;
+        xev.xclient.send_event = True;
+        xev.xclient.format = 32;
+        xev.xclient.data.l[0] = pfinfo->dwFlags ?  _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE;
+        xev.xclient.data.l[1] = x11drv_atom( _NET_WM_STATE_DEMANDS_ATTENTION );
+        xev.xclient.data.l[2] = 0;
+        xev.xclient.data.l[3] = 1;
+        xev.xclient.data.l[4] = 0;
+
+        XSendEvent( data->display, DefaultRootWindow( data->display ), False,
+                    SubstructureNotifyMask, &xev );
+    }
+    release_win_data( data );
+}
diff --git a/dlls/winex11.drv/winex11.drv.spec b/dlls/winex11.drv/winex11.drv.spec
index d9bbebc..182b351 100644
--- a/dlls/winex11.drv/winex11.drv.spec
+++ b/dlls/winex11.drv/winex11.drv.spec
@@ -30,6 +30,7 @@
 @ cdecl EmptyClipboard() X11DRV_EmptyClipboard
 @ cdecl EndClipboardUpdate() X11DRV_EndClipboardUpdate
 @ cdecl EnumClipboardFormats(long) X11DRV_EnumClipboardFormats
+@ cdecl FlashWindowEx(ptr) X11DRV_FlashWindowEx
 @ cdecl GetClipboardData(long) X11DRV_GetClipboardData
 @ cdecl GetDC(long long long ptr ptr long) X11DRV_GetDC
 @ cdecl IsClipboardFormatAvailable(long) X11DRV_IsClipboardFormatAvailable
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index cb4b0bb..2694d23 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -421,6 +421,7 @@ enum x11drv_atoms
     XATOM__NET_WM_PING,
     XATOM__NET_WM_STATE,
     XATOM__NET_WM_STATE_ABOVE,
+    XATOM__NET_WM_STATE_DEMANDS_ATTENTION,
     XATOM__NET_WM_STATE_FULLSCREEN,
     XATOM__NET_WM_STATE_MAXIMIZED_HORZ,
     XATOM__NET_WM_STATE_MAXIMIZED_VERT,
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
index 85c69bf..d4f5c84 100644
--- a/dlls/winex11.drv/x11drv_main.c
+++ b/dlls/winex11.drv/x11drv_main.c
@@ -138,6 +138,7 @@ static const char * const atom_names[NB_XATOMS - FIRST_XATOM] =
     "_NET_WM_PING",
     "_NET_WM_STATE",
     "_NET_WM_STATE_ABOVE",
+    "_NET_WM_STATE_DEMANDS_ATTENTION",
     "_NET_WM_STATE_FULLSCREEN",
     "_NET_WM_STATE_MAXIMIZED_HORZ",
     "_NET_WM_STATE_MAXIMIZED_VERT",




More information about the wine-cvs mailing list