+ if ( id == -1 )
+ m_windowId = (int)NewControlId();
+ else
+ m_windowId = id;
+
+ Widget parentWidget = (Widget) 0;
+ if (parent)
+ parentWidget = (Widget) parent->GetTopWidget();
+ if (!parent)
+ parentWidget = (Widget) wxTheApp->GetTopLevelWidget();
+
+ wxASSERT_MSG( (parentWidget != (Widget) 0), "Could not find a suitable parent shell for dialog." );
+
+ Arg args[2];
+ XtSetArg (args[0], XmNdefaultPosition, False);
+ XtSetArg (args[1], XmNautoUnmanage, False);
+ Widget dialogShell = XmCreateBulletinBoardDialog(parentWidget, (char*) (const char*) name, args, 2);
+ m_mainWidget = (WXWidget) dialogShell;
+
+ // We don't want margins, since there is enough elsewhere.
+ XtVaSetValues(dialogShell,
+ XmNmarginHeight, 0,
+ XmNmarginWidth, 0,
+ XmNresizePolicy, XmRESIZE_NONE,
+ NULL) ;
+
+ Widget shell = XtParent(dialogShell) ;
+ if (!title.IsNull())
+ {
+ XmString str = XmStringCreateSimple((char*) (const char*)title);
+ XtVaSetValues(dialogShell,
+ XmNdialogTitle, str,
+ NULL);
+ XmStringFree(str);
+ }
+
+ 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);