From: Paul Cornett Date: Sat, 26 May 2007 18:47:53 +0000 (+0000) Subject: restructure fullscreen code dealing with hiding bars X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/1529bc41dc2ce5d35cbcc19ca0d1f8b2f68d7010 restructure fullscreen code dealing with hiding bars git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46223 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/gtk/frame.h b/include/wx/gtk/frame.h index 9265754229..f65413146c 100644 --- a/include/wx/gtk/frame.h +++ b/include/wx/gtk/frame.h @@ -69,6 +69,7 @@ public: void SetToolBar(wxToolBar *toolbar); #endif // wxUSE_TOOLBAR + virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL); wxPoint GetClientAreaOrigin() const { return wxPoint(0, 0); } // implementation from now on @@ -104,6 +105,9 @@ public: #endif // wxUSE_MENUS_NATIVE +private: + long m_fsSaveFlag; + DECLARE_DYNAMIC_CLASS(wxFrame) }; diff --git a/include/wx/gtk/toplevel.h b/include/wx/gtk/toplevel.h index bb4fb338eb..8b01a82e9e 100644 --- a/include/wx/gtk/toplevel.h +++ b/include/wx/gtk/toplevel.h @@ -95,7 +95,6 @@ public: bool m_fsIsShowing; /* full screen */ long m_fsSaveGdkFunc, m_fsSaveGdkDecor; - long m_fsSaveFlag; wxRect m_fsSaveFrame; // m_windowStyle translated to GDK's terms diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index 79a8a40c51..e79ff78ec2 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -164,6 +164,7 @@ void wxFrame::Init() m_menuBarDetached = false; m_toolBarDetached = false; m_menuBarHeight = 2; + m_fsSaveFlag = 0; } bool wxFrame::Create( wxWindow *parent, @@ -235,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 @@ -266,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; @@ -286,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 @@ -387,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; @@ -407,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; diff --git a/src/gtk/toplevel.cpp b/src/gtk/toplevel.cpp index b32e2b0d5a..3b7ad49c96 100644 --- a/src/gtk/toplevel.cpp +++ b/src/gtk/toplevel.cpp @@ -390,7 +390,6 @@ void wxTopLevelWindowGTK::Init() m_mainWidget = (GtkWidget*) NULL; m_isIconized = false; m_fsIsShowing = false; - m_fsSaveFlag = 0; m_themeEnabled = true; m_gdkDecor = m_gdkFunc = 0; m_grabbed = false; @@ -648,7 +647,7 @@ bool wxTopLevelWindowGTK::EnableCloseButton( bool enable ) return true; } -bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style ) +bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long) { if (show == m_fsIsShowing) return false; // return what? @@ -667,15 +666,9 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style ) if ( (method == wxX11_FS_WMSPEC) && !gtk_check_version(2,2,0) ) { if (show) - { - m_fsSaveFlag = style; gtk_window_fullscreen( GTK_WINDOW( m_widget ) ); - } else - { - m_fsSaveFlag = 0; gtk_window_unfullscreen( GTK_WINDOW( m_widget ) ); - } } else #endif // GTK+ >= 2.2.0 @@ -684,7 +677,6 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style ) if (show) { - m_fsSaveFlag = style; GetPosition( &m_fsSaveFrame.x, &m_fsSaveFrame.y ); GetSize( &m_fsSaveFrame.width, &m_fsSaveFrame.height ); @@ -718,7 +710,6 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style ) } else // hide { - m_fsSaveFlag = 0; if (method != wxX11_FS_WMSPEC) { // don't do it always, Metacity hates it @@ -740,7 +731,7 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style ) // documented behaviour is to show the window if it's still hidden when // showing it full screen - if ( show && !IsShown() ) + if (show) Show(); return true;