/////////////////////////////////////////////////////////////////////////////
-// Name: dialog.cpp
+// Name: src/motif/dialog.cpp
// Purpose: wxDialog class
// Author: Julian Smart
// Modified by:
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "dialog.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#endif
#include "wx/dialog.h"
-#include "wx/utils.h"
-#include "wx/app.h"
-#include "wx/settings.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/app.h"
+ #include "wx/utils.h"
+ #include "wx/settings.h"
+#endif
+
#include "wx/evtloop.h"
#ifdef __VMS__
// for modal dialogs
wxList wxModalDialogs;
extern wxList wxModelessWindows; // Frames and modeless dialogs
-extern wxList wxPendingDelete;
#define wxUSE_INVISIBLE_RESIZE 1
IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxTopLevelWindow)
BEGIN_EVENT_TABLE(wxDialog, wxTopLevelWindow)
- EVT_BUTTON(wxID_OK, wxDialog::OnOK)
- EVT_BUTTON(wxID_APPLY, wxDialog::OnApply)
- EVT_BUTTON(wxID_CANCEL, wxDialog::OnCancel)
- EVT_CHAR_HOOK(wxDialog::OnCharHook)
- EVT_SYS_COLOUR_CHANGED(wxDialog::OnSysColourChanged)
- EVT_CLOSE(wxDialog::OnCloseWindow)
+ EVT_BUTTON(wxID_OK, wxDialog::OnOK)
+ EVT_BUTTON(wxID_APPLY, wxDialog::OnApply)
+ EVT_BUTTON(wxID_CANCEL, wxDialog::OnCancel)
+ EVT_CHAR_HOOK(wxDialog::OnCharHook)
+ EVT_SYS_COLOUR_CHANGED(wxDialog::OnSysColourChanged)
+ EVT_CLOSE(wxDialog::OnCloseWindow)
END_EVENT_TABLE()
m_foregroundColour = *wxBLACK;
Widget dialogShell = (Widget) m_mainWidget;
- Widget shell = XtParent(dialogShell) ;
SetTitle( title );
ChangeFont(false);
// 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);
- }
+#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);
+#endif
// Positioning of the dialog doesn't work properly unless the dialog
// is managed, so we manage without mapping to the screen.
// To show, we map the shell (actually it's parent).
- if (!wxUSE_INVISIBLE_RESIZE)
- XtVaSetValues(shell, XmNmappedWhenManaged, False, NULL);
+#if !wxUSE_INVISIBLE_RESIZE
+ Widget shell = XtParent(dialogShell) ;
+ XtVaSetValues(shell, XmNmappedWhenManaged, False, NULL);
+#endif
+
+#if !wxUSE_INVISIBLE_RESIZE
+ XtManageChild(dialogShell);
+ SetSize(pos.x, pos.y, size.x, size.y);
+#endif
- if (!wxUSE_INVISIBLE_RESIZE)
- {
- XtManageChild(dialogShell);
- SetSize(pos.x, pos.y, size.x, size.y);
- }
XtAddEventHandler(dialogShell,ExposureMask,False,
wxUniversalRepaintProc, (XtPointer) this);
}
bool wxDialog::XmDoCreateTLW(wxWindow* parent,
- wxWindowID id,
- const wxString& title,
- const wxPoint& pos,
- const wxSize& size,
- long style,
+ wxWindowID WXUNUSED(id),
+ const wxString& WXUNUSED(title),
+ const wxPoint& WXUNUSED(pos),
+ const wxSize& WXUNUSED(size),
+ long WXUNUSED(style),
const wxString& name)
{
Widget parentWidget = (Widget) 0;
void wxDialog::SetModal(bool flag)
{
-#ifdef __VMS
-#pragma message disable codcauunr
-#endif
if ( flag )
- m_windowStyle |= wxDIALOG_MODAL ;
- else
- if ( m_windowStyle & wxDIALOG_MODAL )
- m_windowStyle -= wxDIALOG_MODAL ;
-
- wxModelessWindows.DeleteObject(this);
- if (!flag)
- wxModelessWindows.Append(this);
-#ifdef __VMS
-#pragma message enable codcauunr
-#endif
+ wxModelessWindows.DeleteObject(this);
+ else
+ wxModelessWindows.Append(this);
}
wxDialog::~wxDialog()
}
m_modalShowing = false;
- if (!wxUSE_INVISIBLE_RESIZE && m_mainWidget)
+
+#if !wxUSE_INVISIBLE_RESIZE
+ if (m_mainWidget)
{
XtUnmapWidget((Widget) m_mainWidget);
}
+#endif
PreDestroy();
if (show)
{
- if (!wxUSE_INVISIBLE_RESIZE)
- XtMapWidget(XtParent((Widget) m_mainWidget));
- else
- XtManageChild((Widget)m_mainWidget) ;
+ // this usually will result in TransferDataToWindow() being called
+ // which will change the controls values so do it before showing as
+ // otherwise we could have some flicker
+ InitDialog();
+ }
- XRaiseWindow( XtDisplay( (Widget)m_mainWidget ),
+ if (show)
+ {
+#if !wxUSE_INVISIBLE_RESIZE
+ XtMapWidget(XtParent((Widget) m_mainWidget));
+#else
+ XtManageChild((Widget)m_mainWidget) ;
+#endif
+
+ XRaiseWindow( XtDisplay( (Widget)m_mainWidget ),
XtWindow( (Widget)m_mainWidget) );
}
else
{
- if (!wxUSE_INVISIBLE_RESIZE)
- XtUnmapWidget(XtParent((Widget) m_mainWidget));
- else
- XtUnmanageChild((Widget)m_mainWidget) ;
+#if !wxUSE_INVISIBLE_RESIZE
+ XtUnmapWidget(XtParent((Widget) m_mainWidget));
+#else
+ XtUnmanageChild((Widget)m_mainWidget) ;
+#endif
XFlush(XtDisplay((Widget)m_mainWidget));
XSync(XtDisplay((Widget)m_mainWidget), False);
// Shows a dialog modally, returning a return code
int wxDialog::ShowModal()
{
- m_windowStyle |= wxDIALOG_MODAL;
-
Show(true);
// after the event loop ran, the widget might already have been destroyed
m_modalShowing = false;
m_eventLoop->Exit();
+
+ SetModal(false);
}
// Standard buttons