X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8febdd39057cf2b4984561cc2f55acc9a0d07aca..13588544c5fd50e15240c30b0d0e0b533ffe7d1a:/src/gtk/frame.cpp?ds=inline diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index cf54c400db..13d018c53b 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -126,6 +126,7 @@ static void gtk_frame_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* win->m_width = alloc->width; win->m_height = alloc->height; + win->m_queuedFullRedraw = TRUE; win->GtkUpdateSize(); } } @@ -139,7 +140,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; @@ -402,7 +403,7 @@ void wxFrame::Init() m_menuBarDetached = FALSE; m_toolBarDetached = FALSE; m_insertInClientArea = TRUE; - m_isFrame = TRUE; + m_isFrame = FALSE; } bool wxFrame::Create( wxWindow *parent, @@ -416,6 +417,7 @@ bool wxFrame::Create( wxWindow *parent, wxTopLevelWindows.Append( this ); m_needParent = FALSE; + m_isFrame = TRUE; if (!PreCreation( parent, pos, size ) || !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name )) @@ -834,6 +836,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 @@ -898,33 +901,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 */