From 7fae5492e3ef8e5fa15f742be4c2a15b9782e89a Mon Sep 17 00:00:00 2001 From: marha Date: Mon, 10 Oct 2011 08:27:21 +0200 Subject: Handle more motif window decorating handling --- xorg-server/hw/xwin/winmultiwindowwm.c | 20 +++++++++++++++++++- xorg-server/hw/xwin/winwindow.h | 3 +++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/xorg-server/hw/xwin/winmultiwindowwm.c b/xorg-server/hw/xwin/winmultiwindowwm.c index 4e4d52be8..bbc1f47b5 100644 --- a/xorg-server/hw/xwin/winmultiwindowwm.c +++ b/xorg-server/hw/xwin/winmultiwindowwm.c @@ -1529,6 +1529,8 @@ winDeinitMultiWindowWM (void) #define HINT_SIZEBOX (1l<<2) #define HINT_CAPTION (1l<<3) #define HINT_NOMAXIMIZE (1L<<4) +#define HINT_NOMINIMIZE (1L<<5) +#define HINT_NOSYSMENU (1L<<6) /* These two are used on their own */ #define HINT_MAX (1L<<0) #define HINT_MIN (1L<<1) @@ -1589,6 +1591,16 @@ winApplyHints (Display *pDisplay, Window iWindow, HWND hWnd, HWND *zstyle) if (mwm_hint->decorations & MwmDecorBorder) hint |= HINT_BORDER; if (mwm_hint->decorations & MwmDecorHandle) hint |= HINT_SIZEBOX; if (mwm_hint->decorations & MwmDecorTitle) hint |= HINT_CAPTION; + if (!(mwm_hint->decorations & MwmDecorMenu)) hint |= HINT_NOSYSMENU; + if (!(mwm_hint->decorations & MwmDecorMinimize)) hint |= HINT_NOMINIMIZE; + if (!(mwm_hint->decorations & MwmDecorMaximize)) hint |= HINT_NOMAXIMIZE; + } + else + { + /* + MwmDecorAll means all decorations *except* those specified by other flag + bits that are set. Not yet implemented. + */ } } if (mwm_hint) XFree(mwm_hint); @@ -1685,6 +1697,12 @@ winApplyHints (Display *pDisplay, Window iWindow, HWND hWnd, HWND *zstyle) if (hint & HINT_NOMAXIMIZE) style = style & ~WS_MAXIMIZEBOX; + if (hint & HINT_NOMINIMIZE) + style = style & ~WS_MINIMIZEBOX; + + if (hint & HINT_NOSYSMENU) + style = style & ~WS_SYSMENU; + if (!IsWindow (hWnd)) { ErrorF("Windows window 0x%x has become invalid, so returning without applying hints\n",hWnd); @@ -1696,7 +1714,7 @@ winApplyHints (Display *pDisplay, Window iWindow, HWND hWnd, HWND *zstyle) if (!(SizeHints.max_width&&SizeHints.max_height&&(SizeHints.min_width == SizeHints.max_width)&&(SizeHints.min_height == SizeHints.max_height) )) style|=WS_SIZEBOX; } - else + else style|=WS_SIZEBOX; SetWindowLongPtr (hWnd, GWL_STYLE, style); } diff --git a/xorg-server/hw/xwin/winwindow.h b/xorg-server/hw/xwin/winwindow.h index 0cf4af878..8dd76caa9 100644 --- a/xorg-server/hw/xwin/winwindow.h +++ b/xorg-server/hw/xwin/winwindow.h @@ -128,6 +128,9 @@ typedef struct _winWMMessageRec{ #define MwmDecorBorder (1l << 1) #define MwmDecorHandle (1l << 2) #define MwmDecorTitle (1l << 3) +#define MwmDecorMenu (1l << 4) +#define MwmDecorMinimize (1l << 5) +#define MwmDecorMaximize (1l << 6) /* This structure only contains 3 elements... the Motif 2.0 structure contains 5... we only need the first 3... so that is all we will define */ -- cgit v1.2.3