]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/dialog.cpp
Added wxAccelerationTable class
[wxWidgets.git] / src / gtk / dialog.cpp
index f472f31e6c3e6a66976492b7f2d8f6c451263a8f..6411ba19302f836e7a5db86312cefe0263ad1c1c 100644 (file)
@@ -54,7 +54,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxDialog,wxWindow)
 wxDialog::wxDialog(void)
 {
   m_title = "";
-  m_modalShowing = TRUE;
+  m_modalShowing = FALSE;
   wxTopLevelWindows.Insert( this );
 };
 
@@ -63,6 +63,7 @@ wxDialog::wxDialog( wxWindow *parent,
       const wxPoint &pos, const wxSize &size, 
       long style, const wxString &name )
 {
+  m_modalShowing = FALSE;
   wxTopLevelWindows.Insert( this );
   Create( parent, id, title, pos, size, style, name );
 };
@@ -76,8 +77,6 @@ bool wxDialog::Create( wxWindow *parent,
   
   PreCreation( parent, id, pos, size, style, name );
   
-  m_modalShowing = ((m_windowStyle & wxDIALOG_MODAL) == wxDIALOG_MODAL);
-  
   m_widget = gtk_window_new( GTK_WINDOW_TOPLEVEL );
   GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
  
@@ -189,7 +188,7 @@ void wxDialog::OnCloseWindow(wxCloseEvent& event)
 
 bool wxDialog::Show( bool show )
 {
-  if (!show && m_modalShowing)
+  if (!show && IsModal() && m_modalShowing)
   {
     EndModal( wxID_CANCEL );
   };
@@ -198,25 +197,31 @@ bool wxDialog::Show( bool show )
   
   if (show) InitDialog();
   
-  if (show && m_modalShowing)
-  {
-    gtk_grab_add( m_widget );
-    gtk_main();
-    gtk_grab_remove( m_widget );
-  };
-  
   return TRUE;
 };
 
 int wxDialog::ShowModal(void)
 {
+  if (m_modalShowing) return GetReturnCode();
+
   Show( TRUE );
+  
+  m_modalShowing = TRUE;
+  
+  gtk_grab_add( m_widget );
+  gtk_main();
+  gtk_grab_remove( m_widget );
+  
   return GetReturnCode();
 };
 
 void wxDialog::EndModal( int retCode )
 {
   SetReturnCode( retCode );
+  
+  if (!m_modalShowing) return;
+  m_modalShowing = FALSE;
+  
   gtk_main_quit();
 };