diff options
author | Jon TURNEY <jon.turney@dronecode.org.uk> | 2011-09-29 15:05:27 +0100 |
---|---|---|
committer | Jon TURNEY <jon.turney@dronecode.org.uk> | 2012-01-26 14:40:30 +0000 |
commit | 9a709d5028094fcbeb7a49f47cb85e22cd772f36 (patch) | |
tree | bf3fdf7870529aea7c8c40c248ac1191e3c6906f | |
parent | b8b0b841a0e7cfcecaf0b6a5aa67e1b4499374d9 (diff) |
hw/xwin: Handle more motif window decoration hinting
Handle the MWM_DECOR_MINIMIZE, MWM_DECOR_MAXIMIZE and MWM_DECOR_MENU
decoration hints in a _MOTIF_WM_HINTS window property
Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Reviewed-by: Colin Harrison <colin.harrison@virgin.net>
-rw-r--r-- | hw/xwin/winmultiwindowwm.c | 18 | ||||
-rw-r--r-- | hw/xwin/winwindow.h | 11 |
2 files changed, 25 insertions, 4 deletions
diff --git a/hw/xwin/winmultiwindowwm.c b/hw/xwin/winmultiwindowwm.c index c82ffa5f9..70f53854c 100644 --- a/hw/xwin/winmultiwindowwm.c +++ b/hw/xwin/winmultiwindowwm.c @@ -1582,6 +1582,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) @@ -1640,6 +1642,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); @@ -1738,6 +1750,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; + SetWindowLongPtr (hWnd, GWL_STYLE, style); } diff --git a/hw/xwin/winwindow.h b/hw/xwin/winwindow.h index a6c8e05dd..229696ae4 100644 --- a/hw/xwin/winwindow.h +++ b/hw/xwin/winwindow.h @@ -127,10 +127,13 @@ typedef struct _winWMMessageRec{ #define MwmHintsDecorations (1L << 1) -#define MwmDecorAll (1l << 0) -#define MwmDecorBorder (1l << 1) -#define MwmDecorHandle (1l << 2) -#define MwmDecorTitle (1l << 3) +#define MwmDecorAll (1L << 0) +#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 */ |