]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/frame.cpp
fix for HP and IBM compilers, calls to static template functions must be qualified
[wxWidgets.git] / src / gtk / frame.cpp
index 79a8a40c51666ee72c816a5c97a5dd2b548653d6..48b111dc80732e6a1384238459cf86f242be9dd8 100644 (file)
@@ -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
@@ -257,6 +310,9 @@ void wxFrame::GtkOnSize()
 
     ConstrainSize();
 
+    int width, height;
+    GTKDoGetSize(&width, &height);
+
     if (m_mainWidget)
     {
         // TODO
@@ -266,33 +322,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;
+            int ww = 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 +351,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;
@@ -321,7 +366,7 @@ void wxFrame::GtkOnSize()
             {
                 ww = m_toolBarDetached ? wxPLACE_HOLDER
                                        : m_frameToolBar->m_width;
-                hh = m_height - 2*m_miniEdge;
+                hh = height - 2*m_miniEdge;
 
                 client_area_x_offset += ww;
             }
@@ -331,7 +376,7 @@ void wxFrame::GtkOnSize()
                ww = m_toolBarDetached ? wxPLACE_HOLDER
                                       : m_frameToolBar->m_width;
                xx = GetClientSize().x - 1;
-               hh = m_height - 2*m_miniEdge;
+               hh = height - 2*m_miniEdge;
                if( hh < 0 )
                   hh = 0;
 
@@ -342,16 +387,16 @@ 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;
+                ww = width - 2*m_miniEdge;
                 hh = m_toolBarDetached ? wxPLACE_HOLDER
                                        : m_frameToolBar->m_height;
             }
             else
             {
-                ww = m_width - 2*m_miniEdge;
+                ww = width - 2*m_miniEdge;
                 hh = m_toolBarDetached ? wxPLACE_HOLDER
                                        : m_frameToolBar->m_height;
 
@@ -370,8 +415,8 @@ void wxFrame::GtkOnSize()
 
         int client_x = client_area_x_offset + m_miniEdge;
         int client_y = client_area_y_offset + m_miniEdge + m_miniTitle;
-        int client_w = m_width - client_area_x_offset - 2*m_miniEdge;
-        int client_h = m_height - client_area_y_offset- 2*m_miniEdge - m_miniTitle;
+        int client_w = width - client_area_x_offset - 2*m_miniEdge;
+        int client_h = height - client_area_y_offset- 2*m_miniEdge - m_miniTitle;
         if (client_w < 0)
             client_w = 0;
         if (client_h < 0)
@@ -387,15 +432,11 @@ 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;
+        int yy = height - wxSTATUS_HEIGHT - m_miniEdge - client_area_y_offset;
+        int ww = width - 2*m_miniEdge;
         if (ww < 0)
             ww = 0;
         int hh = wxSTATUS_HEIGHT;
@@ -407,14 +448,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 +590,10 @@ void wxFrame::UpdateMenuBarSize()
     GtkUpdateSize();
 }
 
+bool wxFrame::HasVisibleMenubar() const
+{
+    return m_frameMenuBar && m_frameMenuBar->IsShown();
+}
 #endif // wxUSE_MENUS_NATIVE
 
 #if wxUSE_TOOLBAR