]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/dialog.cpp
mini frame rewrite (titlebar still missing)
[wxWidgets.git] / src / gtk1 / dialog.cpp
index 2c7594587cbe302778c66ed1edf0ed8ae43e0f1e..2bb5127425209927780dd287c4b9b6c613764ab9 100644 (file)
@@ -96,9 +96,8 @@ END_EVENT_TABLE()
 
 IMPLEMENT_DYNAMIC_CLASS(wxDialog,wxPanel)
 
-wxDialog::wxDialog()
+void wxDialog::Init()
 {
-    m_title = "";
     m_sizeSet = FALSE;
     m_modalShowing = FALSE;
 }
@@ -108,8 +107,8 @@ wxDialog::wxDialog( wxWindow *parent,
                     const wxPoint &pos, const wxSize &size,
                     long style, const wxString &name )
 {
-    m_modalShowing = FALSE;
-    m_sizeSet = FALSE;
+    Init();
+
     Create( parent, id, title, pos, size, style, name );
 }
 
@@ -143,9 +142,32 @@ bool wxDialog::Create( wxWindow *parent,
     if (m_parent) m_parent->AddChild( this );
 
     PostCreation();
-    
+
     gtk_widget_realize( m_widget );
 
+    /* all this is for Motif Window Manager "hints" and is supposed to be
+       recognized by other WM as well. not tested. */
+    long decor = (long) GDK_DECOR_ALL;
+    long func = (long) GDK_FUNC_ALL;
+    if ((m_windowStyle & wxCAPTION) == 0)
+       decor |= GDK_DECOR_TITLE;
+/*
+    if ((m_windowStyle & wxMINIMIZE) == 0)
+       func |= GDK_FUNC_MINIMIZE;
+    if ((m_windowStyle & wxMAXIMIZE) == 0)
+       func |= GDK_FUNC_MAXIMIZE;
+*/
+    if ((m_windowStyle & wxSYSTEM_MENU) == 0)
+       decor |= GDK_DECOR_MENU;
+    if ((m_windowStyle & wxMINIMIZE_BOX) == 0)
+       decor |= GDK_DECOR_MINIMIZE;
+    if ((m_windowStyle & wxMAXIMIZE_BOX) == 0)
+       decor |= GDK_DECOR_MAXIMIZE;
+    if ((m_windowStyle & wxRESIZE_BORDER) == 0)
+       func |= GDK_FUNC_RESIZE;
+    gdk_window_set_decorations(m_widget->window, (GdkWMDecoration)decor);
+    gdk_window_set_functions(m_widget->window, (GdkWMFunction)func);
+      
     gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
         GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this );
 
@@ -237,17 +259,17 @@ void wxDialog::OnCloseWindow(wxCloseEvent& event)
     // sure to destroy the dialog.
     // The default OnCancel (above) simply ends a modal dialog, and hides a modeless dialog.
 
-    static wxList closing;
+    static wxList s_closing;
 
-    if (closing.Member(this))
+    if (s_closing.Member(this))
         return;   // no loops
 
-    closing.Append(this);
+    s_closing.Append(this);
 
     wxCommandEvent cancelEvent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
     cancelEvent.SetEventObject( this );
     GetEventHandler()->ProcessEvent(cancelEvent);
-    closing.DeleteObject(this);
+    s_closing.DeleteObject(this);
 }
 
 bool wxDialog::Destroy()
@@ -290,7 +312,7 @@ void wxDialog::OnSize( wxSizeEvent &WXUNUSED(event) )
     }
 }
 
-void wxDialog::SetSize( int x, int y, int width, int height, int sizeFlags )
+void wxDialog::DoSetSize( int x, int y, int width, int height, int sizeFlags )
 {
     wxASSERT_MSG( (m_widget != NULL), "invalid dialog" );
     wxASSERT_MSG( (m_wxwindow != NULL), "invalid dialog" );
@@ -338,7 +360,7 @@ void wxDialog::SetSize( int x, int y, int width, int height, int sizeFlags )
         if ((m_x != old_x) || (m_y != old_y))
        {
             /* m_sizeSet = FALSE; */
-            gtk_widget_set_uposition( m_widget, m_x, m_y ); 
+            gtk_widget_set_uposition( m_widget, m_x, m_y );
        }
     }
 
@@ -350,11 +372,6 @@ void wxDialog::SetSize( int x, int y, int width, int height, int sizeFlags )
     m_resizing = FALSE;
 }
 
-void wxDialog::SetSize( int width, int height )
-{
-    SetSize( -1, -1, width, height, wxSIZE_USE_EXISTING );
-}
-
 void wxDialog::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height )
 {
     // due to a bug in gtk, x,y are always 0
@@ -419,7 +436,7 @@ bool wxDialog::Show( bool show )
     }
 
     wxWindow::Show( show );
-    
+
     if (show) InitDialog();
 
     return TRUE;
@@ -448,7 +465,7 @@ int wxDialog::ShowModal()
        wxFAIL_MSG( "wxDialog:ShowModal called twice" );
        return GetReturnCode();
     }
-    
+
     Show( TRUE );
 
     m_modalShowing = TRUE;