X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/de8113d9a3b19159fe06e1f3321c799085c8d47d..32a95f9f1a4a0ed0f569394e379f220666a8e47f:/src/gtk1/dialog.cpp diff --git a/src/gtk1/dialog.cpp b/src/gtk1/dialog.cpp index 2c7594587c..2bb5127425 100644 --- a/src/gtk1/dialog.cpp +++ b/src/gtk1/dialog.cpp @@ -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;