X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/93fa69f84bb444e8d47a216a63f475b7ca8ef345..43b5058d590c7acf58e5f75ec015e717d03830a2:/src/gtk/frame.cpp?ds=sidebyside diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index c55604c5aa..c20496ef80 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -126,7 +126,7 @@ static void gtk_frame_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* win->m_width = alloc->width; win->m_height = alloc->height; - win->UpdateSize(); + win->GtkUpdateSize(); } } @@ -139,7 +139,7 @@ static gint gtk_frame_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WX if (g_isIdle) wxapp_install_idle_handler(); - if (g_openDialogs == 0) + if ((g_openDialogs == 0) && (win->IsEnabled())) win->Close(); return TRUE; @@ -154,7 +154,7 @@ static void gtk_menu_attached_callback( GtkWidget *WXUNUSED(widget), GtkWidget * if (!win->m_hasVMT) return; win->m_menuBarDetached = FALSE; - win->UpdateSize(); + win->GtkUpdateSize(); } //----------------------------------------------------------------------------- @@ -166,7 +166,7 @@ static void gtk_menu_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidget * if (!win->m_hasVMT) return; win->m_menuBarDetached = TRUE; - win->UpdateSize(); + win->GtkUpdateSize(); } #if wxUSE_TOOLBAR @@ -180,7 +180,7 @@ static void gtk_toolbar_attached_callback( GtkWidget *WXUNUSED(widget), GtkWidge win->m_toolBarDetached = FALSE; - win->UpdateSize(); + win->GtkUpdateSize(); } //----------------------------------------------------------------------------- @@ -195,7 +195,7 @@ static void gtk_toolbar_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidge if (!win->m_hasVMT) return; win->m_toolBarDetached = TRUE; - win->UpdateSize(); + win->GtkUpdateSize(); } #endif // wxUSE_TOOLBAR @@ -357,7 +357,7 @@ static void wxInsertChildInFrame( wxFrame* parent, wxWindow* child ) child->m_width, child->m_height ); -#if wxUSE_TOOLBAR && !wxUSE_TOOLBAR_SIMPLE +#if wxUSE_TOOLBAR_NATIVE /* we connect to these events for recalculating the client area space when the toolbar is floating */ if (wxIS_KIND_OF(child,wxToolBar)) @@ -386,7 +386,7 @@ static void wxInsertChildInFrame( wxFrame* parent, wxWindow* child ) } /* resize on OnInternalIdle */ - parent->UpdateSize(); + parent->GtkUpdateSize(); } // ---------------------------------------------------------------------------- @@ -504,8 +504,11 @@ wxFrame::~wxFrame() if (wxTheApp->GetTopWindow() == this) wxTheApp->SetTopWindow( (wxWindow*) NULL ); - if (wxTopLevelWindows.Number() == 0) + if ((wxTopLevelWindows.Number() == 0) && + (wxTheApp->GetExitOnFrameDelete())) + { wxTheApp->ExitMainLoop(); + } } // ---------------------------------------------------------------------------- @@ -529,6 +532,11 @@ bool wxFrame::Show( bool show ) return wxWindow::Show( show ); } +void wxFrame::DoMoveWindow(int WXUNUSED(x), int WXUNUSED(y), int WXUNUSED(width), int WXUNUSED(height) ) +{ + wxFAIL_MSG( wxT("DoMoveWindow called for wxFrame") ); +} + void wxFrame::DoSetSize( int x, int y, int width, int height, int sizeFlags ) { wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") ); @@ -826,6 +834,7 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), gtk_pizza_set_size( GTK_PIZZA(m_wxwindow), m_frameStatusBar->m_widget, xx, yy, ww, hh ); + gtk_widget_draw( m_frameStatusBar->m_widget, (GdkRectangle*) NULL ); } #endif @@ -890,33 +899,51 @@ void wxFrame::SetMenuBar( wxMenuBar *menuBar ) wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") ); wxASSERT_MSG( (m_wxwindow != NULL), wxT("invalid frame") ); + if (menuBar == m_frameMenuBar) + return; + + if (m_frameMenuBar) + { + m_frameMenuBar->UnsetInvokingWindow( this ); + + if (m_frameMenuBar->GetWindowStyle() & wxMB_DOCKABLE) + { + gtk_signal_disconnect_by_func( GTK_OBJECT(m_frameMenuBar->m_widget), + GTK_SIGNAL_FUNC(gtk_menu_attached_callback), (gpointer)this ); + + gtk_signal_disconnect_by_func( GTK_OBJECT(m_frameMenuBar->m_widget), + GTK_SIGNAL_FUNC(gtk_menu_detached_callback), (gpointer)this ); + } + + gtk_container_remove( GTK_CONTAINER(m_mainWidget), m_frameMenuBar->m_widget ); + gtk_widget_ref( m_frameMenuBar->m_widget ); + gtk_widget_unparent( m_frameMenuBar->m_widget ); + } + m_frameMenuBar = menuBar; if (m_frameMenuBar) { m_frameMenuBar->SetInvokingWindow( this ); - if (m_frameMenuBar->GetParent() != this) - { - m_frameMenuBar->SetParent(this); - gtk_pizza_put( GTK_PIZZA(m_mainWidget), + m_frameMenuBar->SetParent(this); + gtk_pizza_put( GTK_PIZZA(m_mainWidget), m_frameMenuBar->m_widget, m_frameMenuBar->m_x, m_frameMenuBar->m_y, m_frameMenuBar->m_width, m_frameMenuBar->m_height ); - if (menuBar->GetWindowStyle() & wxMB_DOCKABLE) - { - gtk_signal_connect( GTK_OBJECT(menuBar->m_widget), "child_attached", - GTK_SIGNAL_FUNC(gtk_menu_attached_callback), (gpointer)this ); - - gtk_signal_connect( GTK_OBJECT(menuBar->m_widget), "child_detached", - GTK_SIGNAL_FUNC(gtk_menu_detached_callback), (gpointer)this ); - } + if (menuBar->GetWindowStyle() & wxMB_DOCKABLE) + { + gtk_signal_connect( GTK_OBJECT(menuBar->m_widget), "child_attached", + GTK_SIGNAL_FUNC(gtk_menu_attached_callback), (gpointer)this ); - m_frameMenuBar->Show( TRUE ); + gtk_signal_connect( GTK_OBJECT(menuBar->m_widget), "child_detached", + GTK_SIGNAL_FUNC(gtk_menu_detached_callback), (gpointer)this ); } + + m_frameMenuBar->Show( TRUE ); } /* resize window in OnInternalIdle */ @@ -955,7 +982,7 @@ void wxFrame::SetToolBar(wxToolBar *toolbar) GetChildren().DeleteObject( m_frameToolBar ); gtk_widget_reparent( m_frameToolBar->m_widget, m_mainWidget ); - UpdateSize(); + GtkUpdateSize(); } } } @@ -977,6 +1004,13 @@ wxStatusBar* wxFrame::CreateStatusBar(int number, return wxFrameBase::CreateStatusBar( number, style, id, name ); } +void wxFrame::PositionStatusBar() +{ + if ( !m_frameStatusBar ) + return; + + m_sizeSet = FALSE; +} #endif // wxUSE_STATUSBAR // ----------------------------------------------------------------------------