IMPLEMENT_DYNAMIC_CLASS(wxDialog,wxPanel)
-wxDialog::wxDialog()
+void wxDialog::Init()
{
- m_title = "";
m_sizeSet = FALSE;
m_modalShowing = FALSE;
}
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 );
}
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 );
// 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()
}
}
-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" );
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 );
}
}
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
}
wxWindow::Show( show );
-
+
if (show) InitDialog();
return TRUE;
wxFAIL_MSG( "wxDialog:ShowModal called twice" );
return GetReturnCode();
}
-
+
Show( TRUE );
m_modalShowing = TRUE;