Added support for MWM hints.
This commit is contained in:
parent
b508a1dafe
commit
77e7fd7a24
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
* Motif Window Manager definitions
|
||||||
|
*
|
||||||
|
* Copyright 2001 Ove Kåven, TransGaming Technologies Inc.
|
||||||
|
* (these definitions were found in GTK+ 1.2, gdk/MwmUtil.h)
|
||||||
|
*/
|
||||||
|
#ifndef __WINE_MWM_H
|
||||||
|
#define __WINE_MWM_H
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned long flags;
|
||||||
|
unsigned long functions;
|
||||||
|
unsigned long decorations;
|
||||||
|
long input_mode;
|
||||||
|
unsigned long status;
|
||||||
|
} MotifWmHints, MwmHints;
|
||||||
|
|
||||||
|
#define MWM_HINTS_FUNCTIONS 1
|
||||||
|
#define MWM_HINTS_DECORATIONS 2
|
||||||
|
#define MWM_HINTS_INPUT_MODE 4
|
||||||
|
#define MWM_HINTS_STATUS 8
|
||||||
|
|
||||||
|
#define MWM_FUNC_ALL 0x01
|
||||||
|
#define MWM_FUNC_RESIZE 0x02
|
||||||
|
#define MWM_FUNC_MOVE 0x04
|
||||||
|
#define MWM_FUNC_MINIMIZE 0x08
|
||||||
|
#define MWM_FUNC_MAXIMIZE 0x10
|
||||||
|
#define MWM_FUNC_CLOSE 0x20
|
||||||
|
|
||||||
|
#define MWM_DECOR_ALL 0x01
|
||||||
|
#define MWM_DECOR_BORDER 0x02
|
||||||
|
#define MWM_DECOR_RESIZEH 0x04
|
||||||
|
#define MWM_DECOR_TITLE 0x08
|
||||||
|
#define MWM_DECOR_MENU 0x10
|
||||||
|
#define MWM_DECOR_MINIMIZE 0x20
|
||||||
|
#define MWM_DECOR_MAXIMIZE 0x40
|
||||||
|
|
||||||
|
#define MWM_INPUT_MODELESS 0
|
||||||
|
#define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1
|
||||||
|
#define MWM_INPUT_SYSTEM_MODAL 2
|
||||||
|
#define MWM_INPUT_FULL_APPLICATION_MODAL 3
|
||||||
|
#define MWM_INPUT_APPLICATION_MODAL 1
|
||||||
|
|
||||||
|
#define MWM_TEAROFF_WINDOW 1
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
long flags;
|
||||||
|
Window wm_window;
|
||||||
|
} MotifWmInfo, MwmInfo;
|
||||||
|
|
||||||
|
#define MWM_INFO_STARTUP_STANDARD 1
|
||||||
|
#define MWM_INFO_STARTUP_CUSTOM 2
|
||||||
|
|
||||||
|
#define _XA_MOTIF_WM_HINTS "_MOTIF_WM_HINTS"
|
||||||
|
#define _XA_MOTIF_WM_MESSAGES "_MOTIF_WM_MESSAGES"
|
||||||
|
#define _XA_MOTIF_WM_OFFSET "_MOTIF_WM_OFFSET"
|
||||||
|
#define _XA_MOTIF_WM_MENU "_MOTIF_WM_MENU"
|
||||||
|
#define _XA_MOTIF_WM_INFO "_MOTIF_WM_INFO"
|
||||||
|
|
||||||
|
#define _XA_MWM_HINTS _XA_MOTIF_WM_HINTS
|
||||||
|
#define _XA_MWM_MESSAGES _XA_MOTIF_WM_MESSAGES
|
||||||
|
#define _XA_MWM_MENU _XA_MOTIF_WM_MENU
|
||||||
|
#define _XA_MWM_INFO _XA_MOTIF_WM_INFO
|
||||||
|
|
||||||
|
#endif /* __WINE_MWM_H */
|
|
@ -26,6 +26,7 @@
|
||||||
#include "dce.h"
|
#include "dce.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "hook.h"
|
#include "hook.h"
|
||||||
|
#include "mwm.h"
|
||||||
|
|
||||||
DEFAULT_DEBUG_CHANNEL(x11drv);
|
DEFAULT_DEBUG_CHANNEL(x11drv);
|
||||||
|
|
||||||
|
@ -44,6 +45,7 @@ Atom wmTakeFocus = None;
|
||||||
Atom dndProtocol = None;
|
Atom dndProtocol = None;
|
||||||
Atom dndSelection = None;
|
Atom dndSelection = None;
|
||||||
Atom wmChangeState = None;
|
Atom wmChangeState = None;
|
||||||
|
Atom mwmHints = None;
|
||||||
Atom kwmDockWindow = None;
|
Atom kwmDockWindow = None;
|
||||||
Atom _kde_net_wm_system_tray_window_for = None; /* KDE 2 Final */
|
Atom _kde_net_wm_system_tray_window_for = None; /* KDE 2 Final */
|
||||||
|
|
||||||
|
@ -366,11 +368,36 @@ static void set_wm_hints( Display *display, WND *win )
|
||||||
{
|
{
|
||||||
int val = 1;
|
int val = 1;
|
||||||
if (kwmDockWindow != None)
|
if (kwmDockWindow != None)
|
||||||
TSXChangeProperty( display, data->whole_window, kwmDockWindow, kwmDockWindow,
|
XChangeProperty( display, data->whole_window, kwmDockWindow, kwmDockWindow,
|
||||||
32, PropModeReplace, (char*)&val, 1 );
|
32, PropModeReplace, (char*)&val, 1 );
|
||||||
if (_kde_net_wm_system_tray_window_for != None)
|
if (_kde_net_wm_system_tray_window_for != None)
|
||||||
TSXChangeProperty( display, data->whole_window, _kde_net_wm_system_tray_window_for,
|
XChangeProperty( display, data->whole_window, _kde_net_wm_system_tray_window_for,
|
||||||
XA_WINDOW, 32, PropModeReplace, (char*)&data->whole_window, 1 );
|
XA_WINDOW, 32, PropModeReplace, (char*)&data->whole_window, 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mwmHints != None)
|
||||||
|
{
|
||||||
|
MwmHints mwm_hints;
|
||||||
|
mwm_hints.flags = MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
|
||||||
|
mwm_hints.functions = 0;
|
||||||
|
if ((win->dwStyle & WS_CAPTION) == WS_CAPTION) mwm_hints.functions |= MWM_FUNC_MOVE;
|
||||||
|
if (win->dwStyle & WS_THICKFRAME) mwm_hints.functions |= MWM_FUNC_MOVE | MWM_FUNC_RESIZE;
|
||||||
|
if (win->dwStyle & WS_MINIMIZE) mwm_hints.functions |= MWM_FUNC_MINIMIZE;
|
||||||
|
if (win->dwStyle & WS_MAXIMIZE) mwm_hints.functions |= MWM_FUNC_MAXIMIZE;
|
||||||
|
if (win->dwStyle & WS_SYSMENU) mwm_hints.functions |= MWM_FUNC_CLOSE;
|
||||||
|
mwm_hints.decorations = 0;
|
||||||
|
if ((win->dwStyle & WS_CAPTION) == WS_CAPTION) mwm_hints.decorations |= MWM_DECOR_TITLE;
|
||||||
|
if (win->dwExStyle & WS_EX_DLGMODALFRAME) mwm_hints.decorations |= MWM_DECOR_BORDER;
|
||||||
|
else if (win->dwStyle & WS_THICKFRAME) mwm_hints.decorations |= MWM_DECOR_BORDER | MWM_DECOR_RESIZEH;
|
||||||
|
else if ((win->dwStyle & (WS_DLGFRAME|WS_BORDER)) == WS_DLGFRAME) mwm_hints.decorations |= MWM_DECOR_BORDER;
|
||||||
|
else if (win->dwStyle & WS_BORDER) mwm_hints.decorations |= MWM_DECOR_BORDER;
|
||||||
|
else if (!(win->dwStyle & (WS_CHILD|WS_POPUP))) mwm_hints.decorations |= MWM_DECOR_BORDER;
|
||||||
|
if (win->dwStyle & WS_SYSMENU) mwm_hints.decorations |= MWM_DECOR_MENU;
|
||||||
|
if (win->dwStyle & WS_MINIMIZE) mwm_hints.decorations |= MWM_DECOR_MINIMIZE;
|
||||||
|
if (win->dwStyle & WS_MAXIMIZE) mwm_hints.decorations |= MWM_DECOR_MAXIMIZE;
|
||||||
|
|
||||||
|
XChangeProperty( display, data->whole_window, mwmHints, mwmHints, 32,
|
||||||
|
PropModeReplace, (char*)&mwm_hints, sizeof(mwm_hints)/sizeof(long) );
|
||||||
}
|
}
|
||||||
|
|
||||||
wine_tsx11_unlock();
|
wine_tsx11_unlock();
|
||||||
|
@ -600,7 +627,8 @@ static void create_desktop( Display *display, WND *wndPtr, CREATESTRUCTA *cs )
|
||||||
wmTakeFocus = 0; /* not yet */
|
wmTakeFocus = 0; /* not yet */
|
||||||
dndProtocol = XInternAtom( display, "DndProtocol" , False );
|
dndProtocol = XInternAtom( display, "DndProtocol" , False );
|
||||||
dndSelection = XInternAtom( display, "DndSelection" , False );
|
dndSelection = XInternAtom( display, "DndSelection" , False );
|
||||||
wmChangeState = XInternAtom (display, "WM_CHANGE_STATE", False);
|
wmChangeState = XInternAtom( display, "WM_CHANGE_STATE", False );
|
||||||
|
mwmHints = XInternAtom( display, _XA_MWM_HINTS, False );
|
||||||
kwmDockWindow = XInternAtom( display, "KWM_DOCKWINDOW", False );
|
kwmDockWindow = XInternAtom( display, "KWM_DOCKWINDOW", False );
|
||||||
_kde_net_wm_system_tray_window_for = XInternAtom( display, "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", False );
|
_kde_net_wm_system_tray_window_for = XInternAtom( display, "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", False );
|
||||||
wine_tsx11_unlock();
|
wine_tsx11_unlock();
|
||||||
|
|
Loading…
Reference in New Issue