X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e36a8aff9a71a5478b029c9f5ced6a712ab6bd55..b9e7f0115d7a932932c8b2ee602ae28ceb74762d:/src/gtk/frame.cpp diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index c535e66b93..e79ff78ec2 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -124,49 +124,35 @@ static void gtk_toolbar_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidge * virtual function here as wxWidgets requires different ways to insert * a child in container classes. */ -static void wxInsertChildInFrame( wxFrame* parent, wxWindow* child ) +static void wxInsertChildInFrame(wxWindow* parent, wxWindow* child) { wxASSERT( GTK_IS_WIDGET(child->m_widget) ); - if (!parent->m_insertInClientArea) - { - // These are outside the client area - wxFrame* frame = (wxFrame*) parent; - gtk_pizza_put( GTK_PIZZA(frame->m_mainWidget), - child->m_widget, - child->m_x, - child->m_y, - child->m_width, - child->m_height ); + // These are outside the client area + wxFrame* frame = wx_static_cast(wxFrame*, parent); + gtk_pizza_put( GTK_PIZZA(frame->m_mainWidget), + child->m_widget, + child->m_x, + child->m_y, + child->m_width, + child->m_height ); #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)) + // We connect to these events for recalculating the client area + // space when the toolbar is floating + if (wxIS_KIND_OF(child,wxToolBar)) + { + if (child->HasFlag(wxTB_DOCKABLE)) { - wxToolBar *toolBar = (wxToolBar*) child; - if (toolBar->GetWindowStyle() & wxTB_DOCKABLE) - { - g_signal_connect (toolBar->m_widget, "child_attached", - G_CALLBACK (gtk_toolbar_attached_callback), - parent); - g_signal_connect (toolBar->m_widget, "child_detached", - G_CALLBACK (gtk_toolbar_detached_callback), - parent); - } + g_signal_connect (child->m_widget, "child_attached", + G_CALLBACK (gtk_toolbar_attached_callback), + parent); + g_signal_connect (child->m_widget, "child_detached", + G_CALLBACK (gtk_toolbar_detached_callback), + parent); } -#endif // wxUSE_TOOLBAR - } - else - { - // These are inside the client area - gtk_pizza_put( GTK_PIZZA(parent->m_wxwindow), - child->m_widget, - child->m_x, - child->m_y, - child->m_width, - child->m_height ); } +#endif // wxUSE_TOOLBAR } // ---------------------------------------------------------------------------- @@ -178,6 +164,7 @@ void wxFrame::Init() m_menuBarDetached = false; m_toolBarDetached = false; m_menuBarHeight = 2; + m_fsSaveFlag = 0; } bool wxFrame::Create( wxWindow *parent, @@ -188,11 +175,7 @@ bool wxFrame::Create( wxWindow *parent, long style, const wxString &name ) { - bool rt = wxTopLevelWindow::Create(parent, id, title, pos, sizeOrig, - style, name); - m_insertCallback = (wxInsertChildFunction) wxInsertChildInFrame; - - return rt; + return wxFrameBase::Create(parent, id, title, pos, sizeOrig, style, name); } wxFrame::~wxFrame() @@ -253,6 +236,41 @@ void wxFrame::DoGetClientSize( int *width, int *height ) const *height = 0; } +bool wxFrame::ShowFullScreen(bool show, long style) +{ + if (!wxFrameBase::ShowFullScreen(show, style)) + return false; + + wxWindow* const bar[] = { + m_frameMenuBar, m_frameToolBar, m_frameStatusBar + }; + const long fsNoBar[] = { + wxFULLSCREEN_NOMENUBAR, wxFULLSCREEN_NOTOOLBAR, wxFULLSCREEN_NOSTATUSBAR + }; + for (int i = 0; i < 3; i++) + { + if (show) + { + if (bar[i] && (style & fsNoBar[i])) + { + if (bar[i]->IsShown()) + bar[i]->Show(false); + else + style &= ~fsNoBar[i]; + } + } + else + { + if (bar[i] && (m_fsSaveFlag & fsNoBar[i])) + bar[i]->Show(true); + } + } + if (show) + m_fsSaveFlag = style; + + return true; +} + void wxFrame::GtkOnSize() { // avoid recursions @@ -284,10 +302,8 @@ void wxFrame::GtkOnSize() // area, which is represented by m_wxwindow. #if wxUSE_MENUS_NATIVE - if (m_frameMenuBar && !(m_fsIsShowing && (m_fsSaveFlag & wxFULLSCREEN_NOMENUBAR) != 0)) + if (m_frameMenuBar && m_frameMenuBar->IsShown()) { - if (!GTK_WIDGET_VISIBLE(m_frameMenuBar->m_widget)) - gtk_widget_show( m_frameMenuBar->m_widget ); int xx = m_miniEdge; int yy = m_miniEdge + m_miniTitle; int ww = m_width - 2*m_miniEdge; @@ -304,14 +320,6 @@ void wxFrame::GtkOnSize() xx, yy, ww, hh ); client_area_y_offset += hh; } - else - { - if (m_frameMenuBar) - { - if (GTK_WIDGET_VISIBLE(m_frameMenuBar->m_widget)) - gtk_widget_hide( m_frameMenuBar->m_widget ); - } - } #endif // wxUSE_MENUS_NATIVE #if wxUSE_TOOLBAR @@ -405,12 +413,8 @@ void wxFrame::GtkOnSize() } #if wxUSE_STATUSBAR - if (m_frameStatusBar && m_frameStatusBar->IsShown() && - !(m_fsIsShowing && (m_fsSaveFlag & wxFULLSCREEN_NOSTATUSBAR) != 0)) + if (m_frameStatusBar && m_frameStatusBar->IsShown()) { - if (!GTK_WIDGET_VISIBLE(m_frameStatusBar->m_widget)) - gtk_widget_show( m_frameStatusBar->m_widget ); - int xx = 0 + m_miniEdge; int yy = m_height - wxSTATUS_HEIGHT - m_miniEdge - client_area_y_offset; int ww = m_width - 2*m_miniEdge; @@ -425,14 +429,6 @@ void wxFrame::GtkOnSize() m_frameStatusBar->m_widget, xx, yy, ww, hh ); } - else - { - if (m_frameStatusBar) - { - if (GTK_WIDGET_VISIBLE(m_frameStatusBar->m_widget)) - gtk_widget_hide( m_frameStatusBar->m_widget ); - } - } #endif // wxUSE_STATUSBAR m_sizeSet = true; @@ -583,11 +579,10 @@ wxToolBar* wxFrame::CreateToolBar( long style, wxWindowID id, const wxString& na { wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") ); - m_insertInClientArea = false; - + InsertChildFunction save = m_insertCallback; + m_insertCallback = wxInsertChildInFrame; m_frameToolBar = wxFrameBase::CreateToolBar( style, id, name ); - - m_insertInClientArea = true; + m_insertCallback = save; GtkUpdateSize();