]> git.saurik.com Git - wxWidgets.git/commitdiff
Improvements for notebooks on various versions of GTK
authorRobert Roebling <robert@roebling.de>
Wed, 25 Nov 1998 07:42:11 +0000 (07:42 +0000)
committerRobert Roebling <robert@roebling.de>
Wed, 25 Nov 1998 07:42:11 +0000 (07:42 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1039 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/gtk/frame.cpp
src/gtk/mdi.cpp
src/gtk/notebook.cpp
src/gtk/window.cpp
src/gtk1/frame.cpp
src/gtk1/mdi.cpp
src/gtk1/notebook.cpp
src/gtk1/window.cpp

index b01dfd8ae7d72f0798f8ecdda35844af21f31224..894ef8ee347c045828c806a01a2d9545908b23c7 100644 (file)
@@ -186,15 +186,6 @@ bool wxFrame::Show( bool show )
   
     if (show && !m_sizeSet)
     {
-        // this yield call is required for a configure event
-        // to be sent by GTK to its windows. this will among
-       // others prompt all GtkScrolledWidgets to calculate
-       // if they need scrollbars which in turn is required
-       // for wxWindows to calculate the client size of its
-       // windows.
-       
-        wxYield();
-       
        // by calling GtkOnSize here, we don't have to call
        // either after showing the frame, which would entail
        // much ugly flicker nor from within the size_allocate
index 4b3a894b75f9bcebd156880f4ea4a5d7d00057f6..3d8f9cd8e45fd97e402f7ac01ddd31afd8dd6e2f 100644 (file)
@@ -38,7 +38,8 @@ static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation*
   if ((win->m_x == alloc->x) &&
       (win->m_y == alloc->y) &&
       (win->m_width == alloc->width) &&
-      (win->m_height == alloc->height))
+      (win->m_height == alloc->height) &&
+      (win->m_sizeSet))
   {
     return;
   }
index b1ece83c05e9c67417d29d35a45986fd5380e3c6..32f8f4744bc5bb2eab30c6d4e1f6eecbb4c2d13c 100644 (file)
@@ -73,8 +73,6 @@ static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget),
 
 static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxWindow *win )
 {
-  if (win->GetAutoLayout()) win->Layout();
-
   if ((win->m_x == alloc->x) &&
       (win->m_y == alloc->y) &&
       (win->m_width == alloc->width) &&
@@ -82,7 +80,7 @@ static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation*
   {
     return;
   }
-
+  
   win->SetSize( alloc->x, alloc->y, alloc->width, alloc->height );
 }
 
@@ -168,12 +166,10 @@ bool wxNotebook::Create(wxWindow *parent, wxWindowID id,
 
   gtk_notebook_set_scrollable( GTK_NOTEBOOK(m_widget), 1 );
 
-  m_idHandler = gtk_signal_connect
-                (
+  m_idHandler = gtk_signal_connect (
                   GTK_OBJECT(m_widget), "switch_page",
                   GTK_SIGNAL_FUNC(gtk_notebook_page_change_callback),
-                  (gpointer)this
-                );
+                  (gpointer)this );
 
   m_parent->AddChild( this );
 
@@ -193,6 +189,7 @@ int wxNotebook::GetSelection() const
   if (m_pages.Number() == 0) return -1;
 
   GtkNotebookPage *g_page = GTK_NOTEBOOK(m_widget)->cur_page;
+  if (!g_page) return -1;
 
   wxNotebookPage *page = (wxNotebookPage *) NULL;
 
@@ -200,8 +197,15 @@ int wxNotebook::GetSelection() const
   while (node)
   {
     page = (wxNotebookPage*)node->Data();
-    if (page->m_page == g_page)
-      break;
+    
+    if ((page->m_page == g_page) || (page->m_page == (GtkNotebookPage*)NULL))  
+    {
+        // page->m_page is NULL directly after gtk_notebook_append. gtk emits
+       // "switch_page" then and we ask for GetSelection() in the handler for
+       // "switch_page". otherwise m_page should never be NULL. all this
+       // might also be wrong.
+        break;
+    }
     node = node->Next();
   }
 
index aadf569ac2b85055e5a7b76725476a39968c58c5..b2b8e025a803d715a0c0823cbe5768481de15a03 100644 (file)
@@ -1082,7 +1082,7 @@ wxWindow::~wxWindow()
     if (m_wxwindow) gtk_widget_destroy( m_wxwindow );
 
     if (m_widget) gtk_widget_destroy( m_widget );
-
+    
     if (m_cursor) delete m_cursor;
 
     DeleteRelatedConstraints();
@@ -1315,56 +1315,64 @@ void wxWindow::SetSize( int x, int y, int width, int height, int sizeFlags )
     wxASSERT_MSG( (m_widget != NULL), "invalid window" );
     wxASSERT_MSG( (m_parent != NULL), "wxWindow::SetSize requires parent.\n" );
   
-    // Don't do anything for children of wxNotebook
-    if (m_parent->m_wxwindow == NULL) return;
-
     if (m_resizing) return; // I don't like recursions
     m_resizing = TRUE;
 
-    int old_width = m_width;
-    int old_height = m_height;
-  
-    if ((sizeFlags & wxSIZE_USE_EXISTING) == wxSIZE_USE_EXISTING)
-    {
-        if (x != -1) m_x = x;
-        if (y != -1) m_y = y;
-        if (width != -1) m_width = width;
-        if (height != -1) m_height = height;
-    }
-    else
+    if (m_parent->m_wxwindow == NULL) // i.e. wxNotebook
     {
+        // don't set the size for children of wxNotebook, just take the values.
         m_x = x;
         m_y = y;
         m_width = width;
-       m_height = height;
+        m_height = height;
     }
-
-    if ((sizeFlags & wxSIZE_AUTO_WIDTH) == wxSIZE_AUTO_WIDTH)
+    else
     {
-        if (width == -1) m_width = 80;
-    }
+        int old_width = m_width;
+        int old_height = m_height;
+  
+        if ((sizeFlags & wxSIZE_USE_EXISTING) == wxSIZE_USE_EXISTING)
+        {
+            if (x != -1) m_x = x;
+            if (y != -1) m_y = y;
+            if (width != -1) m_width = width;
+            if (height != -1) m_height = height;
+        }
+        else
+        {
+            m_x = x;
+            m_y = y;
+            m_width = width;
+            m_height = height;
+        }
 
-    if ((sizeFlags & wxSIZE_AUTO_HEIGHT) == wxSIZE_AUTO_HEIGHT)
-    {
-        if (height == -1) m_height = 26;
-    }
+        if ((sizeFlags & wxSIZE_AUTO_WIDTH) == wxSIZE_AUTO_WIDTH)
+        {
+             if (width == -1) m_width = 80;
+        }
+
+        if ((sizeFlags & wxSIZE_AUTO_HEIGHT) == wxSIZE_AUTO_HEIGHT)
+        {
+             if (height == -1) m_height = 26;
+        }
   
-    if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
-    if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
-    if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_minWidth;
-    if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_minHeight;
+        if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
+        if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
+        if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_minWidth;
+        if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_minHeight;
 
-    wxPoint pt( m_parent->GetClientAreaOrigin() );
-    gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), m_widget, m_x+pt.x, m_y+pt.y );
+        wxPoint pt( m_parent->GetClientAreaOrigin() );
+        gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), m_widget, m_x+pt.x, m_y+pt.y );
   
-    if ((old_width != m_width) || (old_height != m_height))
-        gtk_widget_set_usize( m_widget, m_width, m_height );
+        if ((old_width != m_width) || (old_height != m_height))
+             gtk_widget_set_usize( m_widget, m_width, m_height );
+    }
   
     m_sizeSet = TRUE;
 
     wxSizeEvent event( wxSize(m_width,m_height), GetId() );
     event.SetEventObject( this );
-    ProcessEvent( event );
+    GetEventHandler()->ProcessEvent( event );
 
     m_resizing = FALSE;
 }
index b01dfd8ae7d72f0798f8ecdda35844af21f31224..894ef8ee347c045828c806a01a2d9545908b23c7 100644 (file)
@@ -186,15 +186,6 @@ bool wxFrame::Show( bool show )
   
     if (show && !m_sizeSet)
     {
-        // this yield call is required for a configure event
-        // to be sent by GTK to its windows. this will among
-       // others prompt all GtkScrolledWidgets to calculate
-       // if they need scrollbars which in turn is required
-       // for wxWindows to calculate the client size of its
-       // windows.
-       
-        wxYield();
-       
        // by calling GtkOnSize here, we don't have to call
        // either after showing the frame, which would entail
        // much ugly flicker nor from within the size_allocate
index 4b3a894b75f9bcebd156880f4ea4a5d7d00057f6..3d8f9cd8e45fd97e402f7ac01ddd31afd8dd6e2f 100644 (file)
@@ -38,7 +38,8 @@ static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation*
   if ((win->m_x == alloc->x) &&
       (win->m_y == alloc->y) &&
       (win->m_width == alloc->width) &&
-      (win->m_height == alloc->height))
+      (win->m_height == alloc->height) &&
+      (win->m_sizeSet))
   {
     return;
   }
index b1ece83c05e9c67417d29d35a45986fd5380e3c6..32f8f4744bc5bb2eab30c6d4e1f6eecbb4c2d13c 100644 (file)
@@ -73,8 +73,6 @@ static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget),
 
 static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxWindow *win )
 {
-  if (win->GetAutoLayout()) win->Layout();
-
   if ((win->m_x == alloc->x) &&
       (win->m_y == alloc->y) &&
       (win->m_width == alloc->width) &&
@@ -82,7 +80,7 @@ static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation*
   {
     return;
   }
-
+  
   win->SetSize( alloc->x, alloc->y, alloc->width, alloc->height );
 }
 
@@ -168,12 +166,10 @@ bool wxNotebook::Create(wxWindow *parent, wxWindowID id,
 
   gtk_notebook_set_scrollable( GTK_NOTEBOOK(m_widget), 1 );
 
-  m_idHandler = gtk_signal_connect
-                (
+  m_idHandler = gtk_signal_connect (
                   GTK_OBJECT(m_widget), "switch_page",
                   GTK_SIGNAL_FUNC(gtk_notebook_page_change_callback),
-                  (gpointer)this
-                );
+                  (gpointer)this );
 
   m_parent->AddChild( this );
 
@@ -193,6 +189,7 @@ int wxNotebook::GetSelection() const
   if (m_pages.Number() == 0) return -1;
 
   GtkNotebookPage *g_page = GTK_NOTEBOOK(m_widget)->cur_page;
+  if (!g_page) return -1;
 
   wxNotebookPage *page = (wxNotebookPage *) NULL;
 
@@ -200,8 +197,15 @@ int wxNotebook::GetSelection() const
   while (node)
   {
     page = (wxNotebookPage*)node->Data();
-    if (page->m_page == g_page)
-      break;
+    
+    if ((page->m_page == g_page) || (page->m_page == (GtkNotebookPage*)NULL))  
+    {
+        // page->m_page is NULL directly after gtk_notebook_append. gtk emits
+       // "switch_page" then and we ask for GetSelection() in the handler for
+       // "switch_page". otherwise m_page should never be NULL. all this
+       // might also be wrong.
+        break;
+    }
     node = node->Next();
   }
 
index aadf569ac2b85055e5a7b76725476a39968c58c5..b2b8e025a803d715a0c0823cbe5768481de15a03 100644 (file)
@@ -1082,7 +1082,7 @@ wxWindow::~wxWindow()
     if (m_wxwindow) gtk_widget_destroy( m_wxwindow );
 
     if (m_widget) gtk_widget_destroy( m_widget );
-
+    
     if (m_cursor) delete m_cursor;
 
     DeleteRelatedConstraints();
@@ -1315,56 +1315,64 @@ void wxWindow::SetSize( int x, int y, int width, int height, int sizeFlags )
     wxASSERT_MSG( (m_widget != NULL), "invalid window" );
     wxASSERT_MSG( (m_parent != NULL), "wxWindow::SetSize requires parent.\n" );
   
-    // Don't do anything for children of wxNotebook
-    if (m_parent->m_wxwindow == NULL) return;
-
     if (m_resizing) return; // I don't like recursions
     m_resizing = TRUE;
 
-    int old_width = m_width;
-    int old_height = m_height;
-  
-    if ((sizeFlags & wxSIZE_USE_EXISTING) == wxSIZE_USE_EXISTING)
-    {
-        if (x != -1) m_x = x;
-        if (y != -1) m_y = y;
-        if (width != -1) m_width = width;
-        if (height != -1) m_height = height;
-    }
-    else
+    if (m_parent->m_wxwindow == NULL) // i.e. wxNotebook
     {
+        // don't set the size for children of wxNotebook, just take the values.
         m_x = x;
         m_y = y;
         m_width = width;
-       m_height = height;
+        m_height = height;
     }
-
-    if ((sizeFlags & wxSIZE_AUTO_WIDTH) == wxSIZE_AUTO_WIDTH)
+    else
     {
-        if (width == -1) m_width = 80;
-    }
+        int old_width = m_width;
+        int old_height = m_height;
+  
+        if ((sizeFlags & wxSIZE_USE_EXISTING) == wxSIZE_USE_EXISTING)
+        {
+            if (x != -1) m_x = x;
+            if (y != -1) m_y = y;
+            if (width != -1) m_width = width;
+            if (height != -1) m_height = height;
+        }
+        else
+        {
+            m_x = x;
+            m_y = y;
+            m_width = width;
+            m_height = height;
+        }
 
-    if ((sizeFlags & wxSIZE_AUTO_HEIGHT) == wxSIZE_AUTO_HEIGHT)
-    {
-        if (height == -1) m_height = 26;
-    }
+        if ((sizeFlags & wxSIZE_AUTO_WIDTH) == wxSIZE_AUTO_WIDTH)
+        {
+             if (width == -1) m_width = 80;
+        }
+
+        if ((sizeFlags & wxSIZE_AUTO_HEIGHT) == wxSIZE_AUTO_HEIGHT)
+        {
+             if (height == -1) m_height = 26;
+        }
   
-    if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
-    if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
-    if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_minWidth;
-    if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_minHeight;
+        if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
+        if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
+        if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_minWidth;
+        if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_minHeight;
 
-    wxPoint pt( m_parent->GetClientAreaOrigin() );
-    gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), m_widget, m_x+pt.x, m_y+pt.y );
+        wxPoint pt( m_parent->GetClientAreaOrigin() );
+        gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), m_widget, m_x+pt.x, m_y+pt.y );
   
-    if ((old_width != m_width) || (old_height != m_height))
-        gtk_widget_set_usize( m_widget, m_width, m_height );
+        if ((old_width != m_width) || (old_height != m_height))
+             gtk_widget_set_usize( m_widget, m_width, m_height );
+    }
   
     m_sizeSet = TRUE;
 
     wxSizeEvent event( wxSize(m_width,m_height), GetId() );
     event.SetEventObject( this );
-    ProcessEvent( event );
+    GetEventHandler()->ProcessEvent( event );
 
     m_resizing = FALSE;
 }