]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/frame.cpp
Committing in .
[wxWidgets.git] / src / gtk1 / frame.cpp
index f4e2970ad0f81c1d099e0ed9e174c3ed8655bda0..8816caaa2b5c773ce27e49fe2cb4e7735c0bb0aa 100644 (file)
     #pragma implementation "frame.h"
 #endif
 
     #pragma implementation "frame.h"
 #endif
 
+#ifdef __VMS
+#define XIconifyWindow XICONIFYWINDOW
+#endif
+
 #include "wx/frame.h"
 #include "wx/dialog.h"
 #include "wx/control.h"
 #include "wx/frame.h"
 #include "wx/dialog.h"
 #include "wx/control.h"
@@ -216,7 +220,7 @@ gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *ev
 
     if (!win->m_hasVMT)
         return FALSE;
 
     if (!win->m_hasVMT)
         return FALSE;
-    
+
 #if (GTK_MINOR_VERSION > 0)
     int x = 0;
     int y = 0;
 #if (GTK_MINOR_VERSION > 0)
     int x = 0;
     int y = 0;
@@ -243,12 +247,12 @@ gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *ev
    so we do this directly after realization */
 
 static gint
    so we do this directly after realization */
 
 static gint
-gtk_frame_realized_callback( GtkWidget *widget, wxFrame *win )
+gtk_frame_realized_callback( GtkWidget * WXUNUSED(widget), wxFrame *win )
 {
     if (g_isIdle)
         wxapp_install_idle_handler();
 
 {
     if (g_isIdle)
         wxapp_install_idle_handler();
 
-    if ((win->m_miniEdge > 0) || (win->HasFlag(wxSIMPLE_BORDER)))
+    if ((win->m_miniEdge > 0) || (win->HasFlag(wxSIMPLE_BORDER)) || (win->HasFlag(wxNO_BORDER)))
     {
         /* This is a mini-frame or a borderless frame. */
         gdk_window_set_decorations( win->m_widget->window, (GdkWMDecoration)0 );
     {
         /* This is a mini-frame or a borderless frame. */
         gdk_window_set_decorations( win->m_widget->window, (GdkWMDecoration)0 );
@@ -283,7 +287,7 @@ gtk_frame_realized_callback( GtkWidget *widget, wxFrame *win )
            func |= GDK_FUNC_RESIZE;
            decor |= GDK_DECOR_RESIZEH;
         }
            func |= GDK_FUNC_RESIZE;
            decor |= GDK_DECOR_RESIZEH;
         }
-        
+
         gdk_window_set_decorations( win->m_widget->window, (GdkWMDecoration)decor);
         gdk_window_set_functions( win->m_widget->window, (GdkWMFunction)func);
     }
         gdk_window_set_decorations( win->m_widget->window, (GdkWMDecoration)decor);
         gdk_window_set_functions( win->m_widget->window, (GdkWMFunction)func);
     }
@@ -394,7 +398,6 @@ void wxFrame::Init()
     m_menuBarDetached = FALSE;
     m_toolBarDetached = FALSE;
     m_insertInClientArea = TRUE;
     m_menuBarDetached = FALSE;
     m_toolBarDetached = FALSE;
     m_insertInClientArea = TRUE;
-    m_isFrame = FALSE;
 }
 
 bool wxFrame::Create( wxWindow *parent,
 }
 
 bool wxFrame::Create( wxWindow *parent,
@@ -408,7 +411,7 @@ bool wxFrame::Create( wxWindow *parent,
     wxTopLevelWindows.Append( this );
 
     m_needParent = FALSE;
     wxTopLevelWindows.Append( this );
 
     m_needParent = FALSE;
-    m_isFrame = TRUE;
+    m_fsIsShowing = FALSE;
 
     if (!PreCreation( parent, pos, size ) ||
         !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
 
     if (!PreCreation( parent, pos, size ) ||
         !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
@@ -422,6 +425,9 @@ bool wxFrame::Create( wxWindow *parent,
     m_insertCallback = (wxInsertChildFunction) wxInsertChildInFrame;
 
     GtkWindowType win_type = GTK_WINDOW_TOPLEVEL;
     m_insertCallback = (wxInsertChildFunction) wxInsertChildInFrame;
 
     GtkWindowType win_type = GTK_WINDOW_TOPLEVEL;
+    
+    if (style & wxFRAME_TOOL_WINDOW)
+        win_type = GTK_WINDOW_POPUP;
 
     m_widget = gtk_window_new( win_type );
 
 
     m_widget = gtk_window_new( win_type );
 
@@ -475,7 +481,7 @@ bool wxFrame::Create( wxWindow *parent,
     if ((m_x != -1) || (m_y != -1))
         gtk_widget_set_uposition( m_widget, m_x, m_y );
     gtk_widget_set_usize( m_widget, m_width, m_height );
     if ((m_x != -1) || (m_y != -1))
         gtk_widget_set_uposition( m_widget, m_x, m_y );
     gtk_widget_set_usize( m_widget, m_width, m_height );
-        
+
     /*  we cannot set MWM hints and icons before the widget has
         been realized, so we do this directly after realization */
     gtk_signal_connect( GTK_OBJECT(m_widget), "realize",
     /*  we cannot set MWM hints and icons before the widget has
         been realized, so we do this directly after realization */
     gtk_signal_connect( GTK_OBJECT(m_widget), "realize",
@@ -510,6 +516,48 @@ wxFrame::~wxFrame()
     }
 }
 
     }
 }
 
+bool wxFrame::ShowFullScreen(bool show, long style )
+{
+    if (show == m_fsIsShowing) return FALSE; // return what?
+
+    m_fsIsShowing = show;
+    
+    if (show)
+    {
+        m_fsSaveStyle = m_windowStyle;
+        m_fsSaveFlag = style;
+        GetPosition( &m_fsSaveFrame.x, &m_fsSaveFrame.y );
+        GetSize( &m_fsSaveFrame.width, &m_fsSaveFrame.height );
+        
+        gtk_widget_hide( m_widget );
+        gtk_widget_unrealize( m_widget );
+        
+        m_windowStyle = wxSIMPLE_BORDER;
+        
+        int x;
+        int y;
+        wxDisplaySize( &x, &y );
+        SetSize( 0, 0, x, y );
+        
+        gtk_widget_realize( m_widget );
+        gtk_widget_show( m_widget );
+    }
+    else
+    {
+        gtk_widget_hide( m_widget );
+        gtk_widget_unrealize( m_widget );
+    
+        m_windowStyle = m_fsSaveStyle;
+        
+        SetSize( m_fsSaveFrame.x, m_fsSaveFrame.y, m_fsSaveFrame.width, m_fsSaveFrame.height );
+        
+        gtk_widget_realize( m_widget );
+        gtk_widget_show( m_widget );
+    }
+    
+    return TRUE;
+}
+
 // ----------------------------------------------------------------------------
 // overridden wxWindow methods
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // overridden wxWindow methods
 // ----------------------------------------------------------------------------
@@ -535,7 +583,7 @@ void wxFrame::DoMoveWindow(int WXUNUSED(x), int WXUNUSED(y), int WXUNUSED(width)
 {
     wxFAIL_MSG( wxT("DoMoveWindow called for wxFrame") );
 }
 {
     wxFAIL_MSG( wxT("DoMoveWindow called for wxFrame") );
 }
-    
+
 void wxFrame::DoSetSize( int x, int y, int width, int height, int sizeFlags )
 {
     wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") );
 void wxFrame::DoSetSize( int x, int y, int width, int height, int sizeFlags )
 {
     wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") );
@@ -625,12 +673,12 @@ void wxFrame::DoGetClientSize( int *width, int *height ) const
 
 #if wxUSE_STATUSBAR
         /* status bar */
 
 #if wxUSE_STATUSBAR
         /* status bar */
-        if (m_frameStatusBar) (*height) -= wxSTATUS_HEIGHT;
+        if (m_frameStatusBar && m_frameStatusBar->IsShown()) (*height) -= wxSTATUS_HEIGHT;
 #endif // wxUSE_STATUSBAR
 
 #if wxUSE_TOOLBAR
         /* tool bar */
 #endif // wxUSE_STATUSBAR
 
 #if wxUSE_TOOLBAR
         /* tool bar */
-        if (m_frameToolBar)
+        if (m_frameToolBar && m_frameToolBar->IsShown())
         {
             if (m_toolBarDetached)
             {
         {
             if (m_toolBarDetached)
             {
@@ -676,12 +724,12 @@ void wxFrame::DoSetClientSize( int width, int height )
 
 #if wxUSE_STATUSBAR
         /* status bar */
 
 #if wxUSE_STATUSBAR
         /* status bar */
-        if (m_frameStatusBar) height += wxSTATUS_HEIGHT;
+        if (m_frameStatusBar && m_frameStatusBar->IsShown()) height += wxSTATUS_HEIGHT;
 #endif
 
 #if wxUSE_TOOLBAR
         /* tool bar */
 #endif
 
 #if wxUSE_TOOLBAR
         /* tool bar */
-        if (m_frameToolBar)
+        if (m_frameToolBar && m_frameToolBar->IsShown())
         {
             if (m_toolBarDetached)
             {
         {
             if (m_toolBarDetached)
             {
@@ -738,23 +786,22 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y),
     if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
     if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_maxWidth;
     if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_maxHeight;
     if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
     if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_maxWidth;
     if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_maxHeight;
-    
-    /* set size hints */
-    gint flag = 0; // GDK_HINT_POS;
-    if ((m_minWidth != -1) || (m_minHeight != -1)) flag |= GDK_HINT_MIN_SIZE;
-    if ((m_maxWidth != -1) || (m_maxHeight != -1)) flag |= GDK_HINT_MAX_SIZE;
-    GdkGeometry geom;
-    geom.min_width = m_minWidth;
-    geom.min_height = m_minHeight;
-    geom.max_width = m_maxWidth;
-    geom.max_height = m_maxHeight;
-    gtk_window_set_geometry_hints( GTK_WINDOW(m_widget), 
-                                   (GtkWidget*) NULL,
-                                   &geom,
-                                   (GdkWindowHints) flag );
 
     if (m_mainWidget)
     {
 
     if (m_mainWidget)
     {
+        /* set size hints */
+        gint flag = 0; // GDK_HINT_POS;
+        if ((m_minWidth != -1) || (m_minHeight != -1)) flag |= GDK_HINT_MIN_SIZE;
+        if ((m_maxWidth != -1) || (m_maxHeight != -1)) flag |= GDK_HINT_MAX_SIZE;
+        GdkGeometry geom;
+        geom.min_width = m_minWidth;
+        geom.min_height = m_minHeight;
+        geom.max_width = m_maxWidth;
+        geom.max_height = m_maxHeight;
+        gtk_window_set_geometry_hints( GTK_WINDOW(m_widget),
+                                       (GtkWidget*) NULL,
+                                       &geom,
+                                       (GdkWindowHints) flag );
 
         /* I revert back to wxGTK's original behaviour. m_mainWidget holds the
          * menubar, the toolbar and the client area, which is represented by
 
         /* I revert back to wxGTK's original behaviour. m_mainWidget holds the
          * menubar, the toolbar and the client area, which is represented by
@@ -780,7 +827,7 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y),
         }
 
 #if wxUSE_TOOLBAR
         }
 
 #if wxUSE_TOOLBAR
-        if ((m_frameToolBar) &&
+        if ((m_frameToolBar) && m_frameToolBar->IsShown() &&
             (m_frameToolBar->m_widget->parent == m_mainWidget))
         {
             int xx = m_miniEdge;
             (m_frameToolBar->m_widget->parent == m_mainWidget))
         {
             int xx = m_miniEdge;
@@ -836,7 +883,7 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y),
     }
 
 #if wxUSE_STATUSBAR
     }
 
 #if wxUSE_STATUSBAR
-    if (m_frameStatusBar)
+    if (m_frameStatusBar && m_frameStatusBar->IsShown())
     {
         int xx = 0 + m_miniEdge;
         int yy = m_height - wxSTATUS_HEIGHT - m_miniEdge - client_area_y_offset;
     {
         int xx = 0 + m_miniEdge;
         int yy = m_height - wxSTATUS_HEIGHT - m_miniEdge - client_area_y_offset;
@@ -926,7 +973,7 @@ void wxFrame::SetMenuBar( wxMenuBar *menuBar )
             gtk_signal_disconnect_by_func( GTK_OBJECT(m_frameMenuBar->m_widget),
                 GTK_SIGNAL_FUNC(gtk_menu_detached_callback), (gpointer)this );
         }
             gtk_signal_disconnect_by_func( GTK_OBJECT(m_frameMenuBar->m_widget),
                 GTK_SIGNAL_FUNC(gtk_menu_detached_callback), (gpointer)this );
         }
-        
+
         gtk_container_remove( GTK_CONTAINER(m_mainWidget), m_frameMenuBar->m_widget );
         gtk_widget_ref( m_frameMenuBar->m_widget );
         gtk_widget_unparent( m_frameMenuBar->m_widget );
         gtk_container_remove( GTK_CONTAINER(m_mainWidget), m_frameMenuBar->m_widget );
         gtk_widget_ref( m_frameMenuBar->m_widget );
         gtk_widget_unparent( m_frameMenuBar->m_widget );
@@ -971,9 +1018,6 @@ wxToolBar* wxFrame::CreateToolBar( long style, wxWindowID id, const wxString& na
 
     m_frameToolBar = wxFrameBase::CreateToolBar( style, id, name );
 
 
     m_frameToolBar = wxFrameBase::CreateToolBar( style, id, name );
 
-    if (m_frameToolBar)
-        GetChildren().DeleteObject( m_frameToolBar );
-
     m_insertInClientArea = TRUE;
 
     m_sizeSet = FALSE;
     m_insertInClientArea = TRUE;
 
     m_sizeSet = FALSE;