-#ifndef MWM_DECOR_BORDER
-/* bit definitions for MwmHints.flags */
-#define MWM_HINTS_FUNCTIONS (1L << 0)
-#define MWM_HINTS_DECORATIONS (1L << 1)
-#define MWM_HINTS_INPUT_MODE (1L << 2)
-#define MWM_HINTS_STATUS (1L << 3)
-
-#define MWM_DECOR_ALL (1L << 0)
-#define MWM_DECOR_BORDER (1L << 1)
-#define MWM_DECOR_RESIZEH (1L << 2)
-#define MWM_DECOR_TITLE (1L << 3)
-#define MWM_DECOR_MENU (1L << 4)
-#define MWM_DECOR_MINIMIZE (1L << 5)
-#define MWM_DECOR_MAXIMIZE (1L << 6)
-#endif
-
-struct MwmHints {
- long flags;
- long functions;
- long decorations;
- long input_mode;
-};
-
-#define PROP_MOTIF_WM_HINTS_ELEMENTS 5
-
-// Set the window manager decorations according to the
-// given wxWindows style
-bool wxSetWMDecorations(Window w, long style)
-{
-#if wxUSE_NANOX
- GR_WM_PROPERTIES wmProp;
-
- wmProp.flags = 0;
- wmProp.props = 0;
-
- if (style & wxRESIZE_BORDER)
- {
- wmProp.props |= GR_WM_PROPS_APPFRAME ;
- wmProp.flags |= GR_WM_FLAGS_PROPS ;
- }
-
- if (style & wxSYSTEM_MENU)
- {
- wmProp.props |= GR_WM_PROPS_CLOSEBOX ;
- wmProp.flags |= GR_WM_FLAGS_PROPS ;
- }
-
- if ((style & wxCAPTION) ||
- (style & wxTINY_CAPTION_HORIZ) ||
- (style & wxTINY_CAPTION_VERT))
- {
- wmProp.props |= GR_WM_PROPS_CAPTION ;
- wmProp.flags |= GR_WM_FLAGS_PROPS ;
-
- // The default dialog style doesn't include any kind
- // of border, which is a bit odd. Anyway, inclusion
- // of a caption surely implies a border.
- style |= wxTHICK_FRAME;
- }
-
- if (style & wxTHICK_FRAME)
- {
- wmProp.props |= GR_WM_PROPS_APPFRAME ;
- wmProp.flags |= GR_WM_FLAGS_PROPS ;
- }
-
- if (style & wxSIMPLE_BORDER)
- {
- wmProp.props |= GR_WM_PROPS_BORDER ;
- wmProp.flags |= GR_WM_FLAGS_PROPS ;
- }
-
- if (style & wxMINIMIZE_BOX)
- {
- }
-
- if (style & wxMAXIMIZE_BOX)
- {
- wmProp.props |= GR_WM_PROPS_MAXIMIZE ;
- wmProp.flags |= GR_WM_FLAGS_PROPS ;
- }
-
- if (((style & wxBORDER) != wxBORDER) && ((style & wxTHICK_FRAME) != wxTHICK_FRAME)
- && ((style & wxRESIZE_BORDER) != wxRESIZE_BORDER))
- {
- wmProp.props |= GR_WM_PROPS_NODECORATE ;
- wmProp.flags |= GR_WM_FLAGS_PROPS ;
- }
-
- GrSetWMProperties(w, & wmProp);
-
-#else
- if (!wxMWMIsRunning(w))
- return FALSE;
-
- Atom mwm_wm_hints = XInternAtom(wxGlobalDisplay(),"_MOTIF_WM_HINTS", False);
- MwmHints hints;
- hints.flags = 0;
- hints.decorations = 0;
-
- if (style & wxRESIZE_BORDER)
- {
- // wxLogDebug("MWM_DECOR_RESIZEH");
- hints.flags |= MWM_HINTS_DECORATIONS;
- hints.decorations |= MWM_DECOR_RESIZEH;
- }
-
- if (style & wxSYSTEM_MENU)
- {
- // wxLogDebug("MWM_DECOR_MENU");
- hints.flags |= MWM_HINTS_DECORATIONS;
- hints.decorations |= MWM_DECOR_MENU;
- }
-
- if ((style & wxCAPTION) ||
- (style & wxTINY_CAPTION_HORIZ) ||
- (style & wxTINY_CAPTION_VERT))
- {
- // wxLogDebug("MWM_DECOR_TITLE");
- hints.flags |= MWM_HINTS_DECORATIONS;
- hints.decorations |= MWM_DECOR_TITLE;
- }
-
- if ((style & wxTHICK_FRAME) || (style & wxCAPTION))
- {
- // wxLogDebug("MWM_DECOR_BORDER");
- hints.flags |= MWM_HINTS_DECORATIONS;
- hints.decorations |= MWM_DECOR_BORDER;
- }
-
- if (style & wxMINIMIZE_BOX)
- {
- // wxLogDebug("MWM_DECOR_MINIMIZE");
- hints.flags |= MWM_HINTS_DECORATIONS;
- hints.decorations |= MWM_DECOR_MINIMIZE;
- }
-
- if (style & wxMAXIMIZE_BOX)
- {
- // wxLogDebug("MWM_DECOR_MAXIMIZE");
- hints.flags |= MWM_HINTS_DECORATIONS;
- hints.decorations |= MWM_DECOR_MAXIMIZE;
- }
-
- XChangeProperty(wxGlobalDisplay(),
- w,
- mwm_wm_hints, mwm_wm_hints,
- 32, PropModeReplace,
- (unsigned char *) &hints, PROP_MOTIF_WM_HINTS_ELEMENTS);
-
-#endif
- return TRUE;
-}
-
-bool wxMWMIsRunning(Window w)
-{
-#if wxUSE_NANOX
- return FALSE;
-#else
- Display *dpy = (Display*)wxGetDisplay();
- Atom motifWmInfo = XInternAtom(dpy, "_MOTIF_WM_INFO", False);
-
- unsigned long length, bytesafter;
- unsigned char value[20];
- unsigned char *ptr = &value[0];
- int ret, format;
- Atom type;
-
- type = format = length = 0;
- value[0] = 0;
-
- ret = XGetWindowProperty(wxGlobalDisplay(), w, motifWmInfo,
- 0L, 2, False, motifWmInfo,
- &type, &format, &length, &bytesafter, &ptr);
-
- return (ret == Success);
-#endif
-}
-