X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c821db16e6e7675e00a2f87c0320ef75ed8a7ce1..c4e43bea7b24f7b7f58e3f87786490cd81abf0a7:/src/gtk/frame.cpp diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index 79a8a40c51..68adf5fb90 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -119,6 +119,8 @@ static void gtk_toolbar_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidge // InsertChild for wxFrame //----------------------------------------------------------------------------- +#if wxUSE_TOOLBAR + /* Callback for wxFrame. This very strange beast has to be used because * C++ has no virtual methods in a constructor. We have to emulate a * virtual function here as wxWidgets requires different ways to insert @@ -152,9 +154,11 @@ static void wxInsertChildInFrame(wxWindow* parent, wxWindow* child) parent); } } -#endif // wxUSE_TOOLBAR +#endif // wxUSE_TOOLBAR_NATIVE } +#endif // wxUSE_TOOLBAR + // ---------------------------------------------------------------------------- // wxFrame creation // ---------------------------------------------------------------------------- @@ -164,6 +168,7 @@ void wxFrame::Init() m_menuBarDetached = false; m_toolBarDetached = false; m_menuBarHeight = 2; + m_fsSaveFlag = 0; } bool wxFrame::Create( wxWindow *parent, @@ -197,8 +202,7 @@ void wxFrame::DoGetClientSize( int *width, int *height ) const { #if wxUSE_MENUS_NATIVE // menu bar - if (m_frameMenuBar && - GTK_WIDGET_VISIBLE(m_frameMenuBar->m_widget) && !m_menuBarDetached) + if (HasVisibleMenubar() && !m_menuBarDetached) { *height -= m_menuBarHeight; } @@ -235,6 +239,55 @@ 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[] = { +#if wxUSE_MENUS + m_frameMenuBar, +#else + NULL, +#endif +#if wxUSE_TOOLBAR + m_frameToolBar, +#else + NULL, +#endif +#if wxUSE_STATUSBAR + m_frameStatusBar, +#else + NULL, +#endif + }; + 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 @@ -266,33 +319,27 @@ void wxFrame::GtkOnSize() // area, which is represented by m_wxwindow. #if wxUSE_MENUS_NATIVE - if (m_frameMenuBar && !(m_fsIsShowing && (m_fsSaveFlag & wxFULLSCREEN_NOMENUBAR) != 0)) + int menubarHeight = 0; +#endif + +#if wxUSE_MENUS_NATIVE + if (HasVisibleMenubar()) { - 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; if (ww < 0) ww = 0; - int hh = m_menuBarHeight; - if (m_menuBarDetached) hh = wxPLACE_HOLDER; + menubarHeight = m_menuBarHeight; + if (m_menuBarDetached) menubarHeight = wxPLACE_HOLDER; m_frameMenuBar->m_x = xx; m_frameMenuBar->m_y = yy; m_frameMenuBar->m_width = ww; - m_frameMenuBar->m_height = hh; + m_frameMenuBar->m_height = menubarHeight; gtk_pizza_set_size( GTK_PIZZA(m_mainWidget), m_frameMenuBar->m_widget, - 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 ); - } + xx, yy, ww, menubarHeight); + client_area_y_offset += menubarHeight; } #endif // wxUSE_MENUS_NATIVE @@ -301,16 +348,11 @@ void wxFrame::GtkOnSize() (m_frameToolBar->m_widget->parent == m_mainWidget)) { int xx = m_miniEdge; - int yy = m_miniEdge + m_miniTitle; + int yy = m_miniEdge + m_miniTitle #if wxUSE_MENUS_NATIVE - if (m_frameMenuBar) - { - if (!m_menuBarDetached) - yy += m_menuBarHeight; - else - yy += wxPLACE_HOLDER; - } -#endif // wxUSE_MENUS_NATIVE + + menubarHeight +#endif + ; m_frameToolBar->m_x = xx; m_frameToolBar->m_y = yy; @@ -342,7 +384,7 @@ void wxFrame::GtkOnSize() yy = GetClientSize().y; #if wxUSE_MENUS_NATIVE yy += m_menuBarHeight; -#endif // wxUSE_MENU_NATIVE +#endif // wxUSE_MENUS_NATIVE m_frameToolBar->m_x = xx; m_frameToolBar->m_y = yy; ww = m_width - 2*m_miniEdge; @@ -387,12 +429,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; @@ -407,14 +445,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; @@ -557,6 +587,10 @@ void wxFrame::UpdateMenuBarSize() GtkUpdateSize(); } +bool wxFrame::HasVisibleMenubar() const +{ + return m_frameMenuBar && m_frameMenuBar->IsShown(); +} #endif // wxUSE_MENUS_NATIVE #if wxUSE_TOOLBAR