Alexandre Julliard : winex11: Check if _NET_WM_MOVERESIZE is supported before using it.
Alexandre Julliard
julliard at winehq.org
Wed Mar 12 17:23:56 CDT 2008
Module: wine
Branch: master
Commit: cf76c7d65c7cb6d930c735f4fe5b7755e7f8d73f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=cf76c7d65c7cb6d930c735f4fe5b7755e7f8d73f
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Mar 12 17:29:28 2008 +0100
winex11: Check if _NET_WM_MOVERESIZE is supported before using it.
---
dlls/winex11.drv/winpos.c | 37 +++++++++++++++++++++++++++++++++++++
dlls/winex11.drv/x11drv.h | 1 +
dlls/winex11.drv/x11drv_main.c | 1 +
3 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/dlls/winex11.drv/winpos.c b/dlls/winex11.drv/winpos.c
index c30ef71..f215f41 100644
--- a/dlls/winex11.drv/winpos.c
+++ b/dlls/winex11.drv/winpos.c
@@ -639,6 +639,37 @@ void X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev )
/***********************************************************************
+ * is_netwm_supported
+ */
+static BOOL is_netwm_supported( Display *display, Atom atom )
+{
+ static Atom *net_supported;
+ static int net_supported_count = -1;
+ int i;
+
+ wine_tsx11_lock();
+ if (net_supported_count == -1)
+ {
+ Atom type;
+ int format;
+ unsigned long count, remaining;
+
+ if (!XGetWindowProperty( display, DefaultRootWindow(display), x11drv_atom(_NET_SUPPORTED), 0,
+ ~0UL, False, XA_ATOM, &type, &format, &count,
+ &remaining, (unsigned char **)&net_supported ))
+ net_supported_count = count * (format / 8) / sizeof(Atom);
+ else
+ net_supported_count = 0;
+ }
+ wine_tsx11_unlock();
+
+ for (i = 0; i < net_supported_count; i++)
+ if (net_supported[i] == atom) return TRUE;
+ return FALSE;
+}
+
+
+/***********************************************************************
* SysCommandSizeMove (X11DRV.@)
*
* Perform SC_MOVE and SC_SIZE commands.
@@ -656,6 +687,12 @@ BOOL X11DRV_SysCommandSizeMove( HWND hwnd, WPARAM wparam )
if (!(data = X11DRV_get_win_data( hwnd ))) return FALSE;
if (!data->whole_window || !data->managed) return FALSE;
+ if (!is_netwm_supported( display, x11drv_atom(_NET_WM_MOVERESIZE) ))
+ {
+ TRACE( "_NET_WM_MOVERESIZE not supported\n" );
+ return FALSE;
+ }
+
if (syscommand == SC_MOVE)
{
if (!hittest) dir = _NET_WM_MOVERESIZE_MOVE_KEYBOARD;
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index bdf6657..a685e64 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -567,6 +567,7 @@ enum x11drv_atoms
XATOM__ICC_PROFILE,
XATOM__MOTIF_WM_HINTS,
XATOM__KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR,
+ XATOM__NET_SUPPORTED,
XATOM__NET_SYSTEM_TRAY_OPCODE,
XATOM__NET_SYSTEM_TRAY_S0,
XATOM__NET_WM_MOVERESIZE,
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
index 9162857..0ea3a1b 100644
--- a/dlls/winex11.drv/x11drv_main.c
+++ b/dlls/winex11.drv/x11drv_main.c
@@ -131,6 +131,7 @@ static const char * const atom_names[NB_XATOMS - FIRST_XATOM] =
"_ICC_PROFILE",
"_MOTIF_WM_HINTS",
"_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR",
+ "_NET_SUPPORTED",
"_NET_SYSTEM_TRAY_OPCODE",
"_NET_SYSTEM_TRAY_S0",
"_NET_WM_MOVERESIZE",
More information about the wine-cvs
mailing list