diff --git a/include/ts_xutil.h b/include/ts_xutil.h index 41af0450448..01bef38f6c5 100644 --- a/include/ts_xutil.h +++ b/include/ts_xutil.h @@ -32,6 +32,7 @@ extern int TSXPointInRegion(Region, int, int); extern Region TSXPolygonRegion(XPoint*, int, int); extern int TSXRectInRegion(Region, int, int, unsigned int, unsigned int); extern int TSXSaveContext(Display*, XID, XContext, const char*); +extern int TSXSetClassHint(Display*, Window, XClassHint*); extern void TSXSetWMProperties(Display*, Window, XTextProperty*, XTextProperty*, char**, int, XSizeHints*, XWMHints*, XClassHint*); extern void TSXSetWMSizeHints(Display*, Window, XSizeHints*, Atom); extern int TSXSetRegion(Display*, GC, Region); diff --git a/tsx11/X11_calls b/tsx11/X11_calls index 78fd27bbdab..96350b07a86 100644 --- a/tsx11/X11_calls +++ b/tsx11/X11_calls @@ -113,6 +113,7 @@ XSaveContext XSendEvent XSetArcMode XSetBackground +XSetClassHint XSetClipMask XSetClipOrigin XSetClipRectangles diff --git a/tsx11/ts_xutil.c b/tsx11/ts_xutil.c index 0f17ea3d749..e9647f82603 100644 --- a/tsx11/ts_xutil.c +++ b/tsx11/ts_xutil.c @@ -219,6 +219,17 @@ int TSXSaveContext(Display* a0, XID a1, XContext a2, const char* a3) return r; } +int TSXSetClassHint(Display* a0, Window a1, XClassHint* a2) +{ + int r; + TRACE(x11, "Call XSetClassHint\n"); + EnterCriticalSection( &X11DRV_CritSection ); + r = XSetClassHint(a0, a1, a2); + LeaveCriticalSection( &X11DRV_CritSection ); + TRACE(x11, "Ret XSetClassHint\n"); + return r; +} + void TSXSetWMProperties(Display* a0, Window a1, XTextProperty* a2, XTextProperty* a3, char** a4, int a5, XSizeHints* a6, XWMHints* a7, XClassHint* a8) { TRACE(x11, "Call XSetWMProperties\n"); diff --git a/windows/x11drv/wnd.c b/windows/x11drv/wnd.c index b31a9d75cfb..cf5ae7b4bda 100644 --- a/windows/x11drv/wnd.c +++ b/windows/x11drv/wnd.c @@ -128,13 +128,20 @@ BOOL32 X11DRV_WND_CreateWindow(WND *wndPtr, CLASS *classPtr, CREATESTRUCT32A *cs if(!wndPtr->window) return FALSE; - if ((wndPtr->flags & WIN_MANAGED) && - (cs->dwExStyle & WS_EX_DLGMODALFRAME)) - { + if (wndPtr->flags & WIN_MANAGED) { + XClassHint *class_hints = TSXAllocClassHint(); + + if (class_hints) { + class_hints->res_name = "wineManaged"; + class_hints->res_class = "Wine"; + TSXSetClassHint( display, wndPtr->window, class_hints ); + TSXFree (class_hints); + } + + if (cs->dwExStyle & WS_EX_DLGMODALFRAME) { XSizeHints* size_hints = TSXAllocSizeHints(); - if (size_hints) - { + if (size_hints) { size_hints->min_width = size_hints->max_width = cs->cx; size_hints->min_height = size_hints->max_height = cs->cy; size_hints->flags = (PSize | PMinSize | PMaxSize); @@ -143,6 +150,7 @@ BOOL32 X11DRV_WND_CreateWindow(WND *wndPtr, CLASS *classPtr, CREATESTRUCT32A *cs TSXFree(size_hints); } } + } if (cs->hwndParent) /* Get window owner */ {