+ m_font = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
+ ChangeFont(FALSE);
+
+ wxAddWindowToTable(dialogShell, this);
+
+ // Intercept CLOSE messages from the window manager
+ Atom WM_DELETE_WINDOW = XmInternAtom(XtDisplay(shell), "WM_DELETE_WINDOW", False);
+
+ /* Remove and add WM_DELETE_WINDOW so ours is only handler */
+ /* Why do we have to do this for wxDialog, but not wxFrame? */
+ XmRemoveWMProtocols(shell, &WM_DELETE_WINDOW, 1);
+ XmAddWMProtocols(shell, &WM_DELETE_WINDOW, 1);
+ XmActivateWMProtocol(shell, WM_DELETE_WINDOW);
+
+ // Modified Steve Hammes for Motif 2.0
+#if (XmREVISION > 1 || XmVERSION > 1)
+ XmAddWMProtocolCallback(shell, WM_DELETE_WINDOW, (XtCallbackProc) wxCloseDialogCallback, (XtPointer)this);
+#elif XmREVISION == 1
+ XmAddWMProtocolCallback(shell, WM_DELETE_WINDOW, (XtCallbackProc) wxCloseDialogCallback, (caddr_t)this);
+#else
+ XmAddWMProtocolCallback(shell, WM_DELETE_WINDOW, (void (*)())wxCloseDialogCallback, (caddr_t)this);
+#endif
+
+ XtTranslations ptr ;
+ XtOverrideTranslations(dialogShell,
+ ptr = XtParseTranslationTable("<Configure>: resize()"));
+ XtFree((char *)ptr);
+
+ // Can't remember what this was about... but I think it's necessary.
+
+ if (wxUSE_INVISIBLE_RESIZE)
+ {
+ if (pos.x > -1)
+ XtVaSetValues(dialogShell, XmNx, pos.x,
+ NULL);
+ if (pos.y > -1)
+ XtVaSetValues(dialogShell, XmNy, pos.y,
+ NULL);
+
+ if (size.x > -1)
+ XtVaSetValues(dialogShell, XmNwidth, size.x, NULL);
+ if (size.y > -1)
+ XtVaSetValues(dialogShell, XmNheight, size.y, NULL);
+ }
+
+ // This patch come from Torsten Liermann lier@lier1.muc.de
+ if (XmIsMotifWMRunning(shell))
+ {
+ int decor = 0 ;
+ if (m_windowStyle & wxRESIZE_BORDER)
+ decor |= MWM_DECOR_RESIZEH ;
+ if (m_windowStyle & wxSYSTEM_MENU)
+ decor |= MWM_DECOR_MENU;
+ if ((m_windowStyle & wxCAPTION) ||
+ (m_windowStyle & wxTINY_CAPTION_HORIZ) ||
+ (m_windowStyle & wxTINY_CAPTION_VERT))
+ decor |= MWM_DECOR_TITLE;
+ if (m_windowStyle & wxTHICK_FRAME)
+ decor |= MWM_DECOR_BORDER;
+ if (m_windowStyle & wxMINIMIZE_BOX)
+ decor |= MWM_DECOR_MINIMIZE;
+ if (m_windowStyle & wxMAXIMIZE_BOX)
+ decor |= MWM_DECOR_MAXIMIZE;
+
+ XtVaSetValues(shell,XmNmwmDecorations,decor,NULL) ;
+ }
+ // This allows non-Motif window managers to support at least the
+ // no-decorations case.
+ else
+ {
+ if ((m_windowStyle & wxCAPTION) != wxCAPTION)
+ XtVaSetValues((Widget) shell,XmNoverrideRedirect,TRUE,NULL);
+ }