Alexandre Julliard : winex11:
Move setting of the initial wm hints to a separate function.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Aug 20 07:42:44 CDT 2007
Module: wine
Branch: master
Commit: 7d9739e2b54919f6053565a5c42a655760946103
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7d9739e2b54919f6053565a5c42a655760946103
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Aug 20 14:04:36 2007 +0200
winex11: Move setting of the initial wm hints to a separate function.
---
dlls/winex11.drv/window.c | 83 ++++++++++++++++++++++++++------------------
1 files changed, 49 insertions(+), 34 deletions(-)
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index 459b8f9..1976c9b 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -461,6 +461,54 @@ static char *get_process_name(void)
/***********************************************************************
+ * set_initial_wm_hints
+ *
+ * Set the window manager hints that don't change over the lifetime of a window.
+ */
+static void set_initial_wm_hints( Display *display, struct x11drv_win_data *data )
+{
+ int i;
+ Atom protocols[3];
+ Atom dndVersion = 4;
+ XClassHint *class_hints;
+ char *process_name = get_process_name();
+
+ wine_tsx11_lock();
+
+ /* wm protocols */
+ i = 0;
+ protocols[i++] = x11drv_atom(WM_DELETE_WINDOW);
+ protocols[i++] = x11drv_atom(_NET_WM_PING);
+ if (use_take_focus) protocols[i++] = x11drv_atom(WM_TAKE_FOCUS);
+ XChangeProperty( display, data->whole_window, x11drv_atom(WM_PROTOCOLS),
+ XA_ATOM, 32, PropModeReplace, (unsigned char *)protocols, i );
+
+ /* class hints */
+ if ((class_hints = XAllocClassHint()))
+ {
+ static char wine[] = "Wine";
+
+ class_hints->res_name = process_name;
+ class_hints->res_class = wine;
+ XSetClassHint( display, data->whole_window, class_hints );
+ XFree( class_hints );
+ }
+
+ /* set the WM_CLIENT_MACHINE and WM_LOCALE_NAME properties */
+ XSetWMProperties(display, data->whole_window, NULL, NULL, NULL, 0, NULL, NULL, NULL);
+ /* set the pid. together, these properties are needed so the window manager can kill us if we freeze */
+ i = getpid();
+ XChangeProperty(display, data->whole_window, x11drv_atom(_NET_WM_PID),
+ XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&i, 1);
+
+ XChangeProperty( display, data->whole_window, x11drv_atom(XdndAware),
+ XA_ATOM, 32, PropModeReplace, (unsigned char*)&dndVersion, 1 );
+
+ wine_tsx11_unlock();
+}
+
+
+/***********************************************************************
* X11DRV_set_wm_hints
*
* Set the window manager hints for a newly-created window
@@ -468,16 +516,11 @@ static char *get_process_name(void)
void X11DRV_set_wm_hints( Display *display, struct x11drv_win_data *data )
{
Window group_leader;
- XClassHint *class_hints;
- Atom protocols[3];
Atom window_type;
MwmHints mwm_hints;
- Atom dndVersion = 4;
- int i;
DWORD style = GetWindowLongW( data->hwnd, GWL_STYLE );
DWORD ex_style = GetWindowLongW( data->hwnd, GWL_EXSTYLE );
HWND owner = GetWindow( data->hwnd, GW_OWNER );
- char *process_name = get_process_name();
if (data->hwnd == GetDesktopWindow())
{
@@ -500,35 +543,9 @@ void X11DRV_set_wm_hints( Display *display, struct x11drv_win_data *data )
wine_tsx11_lock();
- /* wm protocols */
- i = 0;
- protocols[i++] = x11drv_atom(WM_DELETE_WINDOW);
- protocols[i++] = x11drv_atom(_NET_WM_PING);
- if (use_take_focus) protocols[i++] = x11drv_atom(WM_TAKE_FOCUS);
- XChangeProperty( display, data->whole_window, x11drv_atom(WM_PROTOCOLS),
- XA_ATOM, 32, PropModeReplace, (unsigned char *)protocols, i );
-
- /* class hints */
- if ((class_hints = XAllocClassHint()))
- {
- static char wine[] = "Wine";
-
- class_hints->res_name = process_name;
- class_hints->res_class = wine;
- XSetClassHint( display, data->whole_window, class_hints );
- XFree( class_hints );
- }
-
/* size hints */
set_size_hints( display, data, style );
- /* set the WM_CLIENT_MACHINE and WM_LOCALE_NAME properties */
- XSetWMProperties(display, data->whole_window, NULL, NULL, NULL, 0, NULL, NULL, NULL);
- /* set the pid. together, these properties are needed so the window manager can kill us if we freeze */
- i = getpid();
- XChangeProperty(display, data->whole_window, x11drv_atom(_NET_WM_PID),
- XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&i, 1);
-
/* set the WM_WINDOW_TYPE */
window_type = x11drv_atom(_NET_WM_WINDOW_TYPE_NORMAL);
if (ex_style & WS_EX_TOOLWINDOW) window_type = x11drv_atom(_NET_WM_WINDOW_TYPE_UTILITY);
@@ -563,9 +580,6 @@ void X11DRV_set_wm_hints( Display *display, struct x11drv_win_data *data )
x11drv_atom(_MOTIF_WM_HINTS), 32, PropModeReplace,
(unsigned char*)&mwm_hints, sizeof(mwm_hints)/sizeof(long) );
- XChangeProperty( display, data->whole_window, x11drv_atom(XdndAware),
- XA_ATOM, 32, PropModeReplace, (unsigned char*)&dndVersion, 1 );
-
wine_tsx11_unlock();
/* wm hints */
@@ -797,6 +811,7 @@ static Window create_whole_window( Display *display, struct x11drv_win_data *dat
xim = x11drv_thread_data()->xim;
if (xim) data->xic = X11DRV_CreateIC( xim, display, data->whole_window );
+ set_initial_wm_hints( display, data );
X11DRV_set_wm_hints( display, data );
SetPropA( data->hwnd, whole_window_prop, (HANDLE)data->whole_window );
More information about the wine-cvs
mailing list