]> git.saurik.com Git - wxWidgets.git/commitdiff
restructure fullscreen code dealing with hiding bars
authorPaul Cornett <paulcor@bullseye.com>
Sat, 26 May 2007 18:47:53 +0000 (18:47 +0000)
committerPaul Cornett <paulcor@bullseye.com>
Sat, 26 May 2007 18:47:53 +0000 (18:47 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46223 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/frame.h
include/wx/gtk/toplevel.h
src/gtk/frame.cpp
src/gtk/toplevel.cpp

index 9265754229a977090d59aaae9da215809698cbc3..f65413146ce68939fd4c37f5b67a5cbeb5ffa596 100644 (file)
@@ -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)
 };
 
index bb4fb338ebafc3a3ca5fba71ad688db8c5c78665..8b01a82e9edafb841c2be13e459864ee47a43f39 100644 (file)
@@ -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
index 79a8a40c51666ee72c816a5c97a5dd2b548653d6..e79ff78ec2ae21ee80b3bf94fbc09c63a1ded37a 100644 (file)
@@ -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;
index b32e2b0d5a4d6d8926d027a5cd6b92bdf156f479..3b7ad49c9653fa73ebd9d6ad8edf12ad25b11d2c 100644 (file)
@@ -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;