]> git.saurik.com Git - wxWidgets.git/commitdiff
Minor Reparent() and SetToolBar() fix for wxFrame.
authorRobert Roebling <robert@roebling.de>
Wed, 20 Oct 1999 15:30:42 +0000 (15:30 +0000)
committerRobert Roebling <robert@roebling.de>
Wed, 20 Oct 1999 15:30:42 +0000 (15:30 +0000)
  Corrected size reported by wxToolBar.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4078 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

12 files changed:
samples/text/text.cpp
src/gtk/frame.cpp
src/gtk/minifram.cpp
src/gtk/stattext.cpp
src/gtk/tbargtk.cpp
src/gtk/window.cpp
src/gtk1/frame.cpp
src/gtk1/minifram.cpp
src/gtk1/stattext.cpp
src/gtk1/tbargtk.cpp
src/gtk1/window.cpp
utils/wxPython/lib/floatbar.py

index 43a2a663e3cde27acca95812a16619825941e53c..bac4d8c3e96d4122ac6445967fa4aba2b2153b76 100644 (file)
@@ -358,6 +358,8 @@ void MyTextCtrl::OnChar(wxKeyEvent& event)
 {
     LogEvent( _T("Char"), event);
 
+/*  How are we supposed to test wxTE_PROCESS_TAB with this code?
+
     if ( event.KeyCode() == WXK_TAB )
     {
         WriteText("\t");
@@ -366,6 +368,8 @@ void MyTextCtrl::OnChar(wxKeyEvent& event)
     {
         event.Skip();
     }
+*/
+    event.Skip();
 }
 
 void MyTextCtrl::OnKeyUp(wxKeyEvent& event)
index 539fb6c9b7e03984ad78264d45c438dc855315c5..ab29ed1cb3a88cd0aea3830e1645897e048ba520 100644 (file)
@@ -85,6 +85,7 @@ static void gtk_frame_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation*
                                 (int)alloc->width,
                                 (int)alloc->height );
 */
+                               
         win->m_width = alloc->width;
         win->m_height = alloc->height;
         win->UpdateSize();
@@ -667,7 +668,7 @@ void wxFrame::DoSetClientSize( int width, int height )
         }
 #endif
 
-    wxWindow::DoSetClientSize( width + m_miniEdge*2, height  + m_miniEdge*2 + m_miniTitle );
+    DoSetSize( -1, -1, width + m_miniEdge*2, height  + m_miniEdge*2 + m_miniTitle, 0 );
 }
 
 void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height )
@@ -685,7 +686,7 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
 
     m_width = width;
     m_height = height;
-
+    
     /* space occupied by m_frameToolBar and m_frameMenuBar */
     int client_area_y_offset = 0;
 
@@ -979,16 +980,13 @@ void wxFrame::SetToolBar(wxToolBar *toolbar)
     if (m_frameToolBar)
     {
         /* insert into toolbar area if not already there */
-        if (m_frameToolBar->m_widget->parent != m_mainWidget)
+        if ((m_frameToolBar->m_widget->parent) &&
+            (m_frameToolBar->m_widget->parent != m_mainWidget))
         {
-           gtk_widget_ref( m_frameToolBar->m_widget );
-           gtk_widget_unparent( m_frameToolBar->m_widget );
-           
-            m_insertInClientArea = TRUE;
-           wxInsertChildInFrame( this, m_frameToolBar );
-            m_insertInClientArea = FALSE;
-           
-           gtk_widget_unref( m_frameToolBar->m_widget );
+            GetChildren().DeleteObject( m_frameToolBar );
+       
+           gtk_widget_reparent( m_frameToolBar->m_widget, m_mainWidget );
+           UpdateSize();
        }
     }
 }
index a59e05cd8d221f577a0e55237f2f1ac50ddc7bd1..9fa95cf91801c92effd3f79ef8f852924cf92a7b 100644 (file)
@@ -280,6 +280,8 @@ bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title
       long style, const wxString &name )
 {
     style = style | wxSIMPLE_BORDER;
+    style = style | wxCAPTION;
+    style = style | wxSYSTEM_MENU;
 
     if ((style & wxCAPTION) || (style & wxTINY_CAPTION_HORIZ) || (style & wxTINY_CAPTION_VERT))
         m_miniTitle = 13;
index eb35971c6a5328e0a11b150221aaf6dac8eacea5..f2340eaa85ec243e989dd27c0b50cd6b6986fbed 100644 (file)
@@ -71,11 +71,9 @@ bool wxStaticText::Create(wxWindow *parent,
       justify = GTK_JUSTIFY_LEFT;
     gtk_label_set_justify(GTK_LABEL(m_widget), justify);
 
-//#if GTK_MINOR_VERSION == 2
     // GTK_JUSTIFY_LEFT is 0, RIGHT 1 and CENTER 2
     static const float labelAlignments[] = { 0.0, 1.0, 0.5 };
     gtk_misc_set_alignment(GTK_MISC(m_widget), labelAlignments[justify], 0.0);
-//#endif // GTK 1.2.x
     
     GtkRequisition req;
     (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
index 6e5b301d48f62173e2bfca9d7e1c322de68a54bc..499cae0d70f94b6d967968ecae3ff8ed76f901a8 100644 (file)
@@ -309,6 +309,11 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap,
 
     tool->m_item = item;
 
+    GtkRequisition req;
+    (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
+    m_width = req.width;
+    m_height = req.height;
+
     gtk_signal_connect( GTK_OBJECT(tool->m_item),
                         "enter_notify_event", 
                         GTK_SIGNAL_FUNC(gtk_toolbar_enter_callback),
index e1172d0fdce89848642b98db22aaa8a172a94c98..c9001096b0565291e4b4197a00bc0b23b64a9acc 100644 (file)
    clicking on a scrollbar belonging to scrolled window will inevitably move
    the window. In wxWindows, the scrollbar will only emit an event, send this
    to (normally) a wxScrolledWindow and that class will call ScrollWindow()
-   which actually move the window and its subchildren. Note that GtkMyFixed
+   which actually moves the window and its subchildren. Note that GtkMyFixed
    memorizes how much it has been scrolled but that wxWindows forgets this
    so that the two coordinates systems have to be kept in synch. This is done
    in various places using the myfixed->xoffset and myfixed->yoffset values.
    and then iterates down the respective size events to all window. This has
    the disadvantage, that windows might get size events before the GTK widget
    actually has the reported size. This doesn't normally pose any problem, but
-   the OpenGl drawing routines rely in correct behaviour. Therefore, I have
+   the OpenGl drawing routines rely on correct behaviour. Therefore, I have
    added the m_nativeSizeEvents flag, which is true only for the OpenGL canvas,
    i.e. the wxGLCanvas will emit a size event, when (and not before) the X11
    window that is used for OpenGl output really has that size (as reported by
@@ -823,13 +823,12 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
     GdkModifierType state;
     if (gdk_event->window) gdk_window_get_pointer(gdk_event->window, &x, &y, &state);
 
+    bool ret = FALSE;
+    
     long key_code = map_to_unmodified_wx_keysym( gdk_event->keyval );
-
     /* sending unknown key events doesn't really make sense */
     if (key_code == 0) return FALSE;
 
-    bool ret = FALSE;
-
     wxKeyEvent event( wxEVT_KEY_DOWN );
     event.SetTimestamp( gdk_event->time );
     event.m_shiftDown = (gdk_event->state & GDK_SHIFT_MASK);
@@ -843,8 +842,6 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
     event.SetEventObject( win );
     ret = win->GetEventHandler()->ProcessEvent( event );
 
-    key_code = map_to_wx_keysym( gdk_event->keyval );
-
 #if wxUSE_ACCEL
     if (!ret)
     {
@@ -862,10 +859,14 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
         }
     }
 #endif // wxUSE_ACCEL
+
     /* wxMSW doesn't send char events with Alt pressed */
     /* Only send wxEVT_CHAR event if not processed yet. Thus, ALT-x
-       will only be sent if it is not a menu accelerator. */
-    if ((key_code != 0) && ! ret )
+       will only be sent if it is not in an accelerator table. */
+    key_code = map_to_wx_keysym( gdk_event->keyval );
+    
+    if ( (!ret) &&
+         (key_code != 0))
     {
         wxKeyEvent event2( wxEVT_CHAR );
         event2.SetTimestamp( gdk_event->time );
@@ -878,7 +879,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
         event2.m_x = x;
         event2.m_y = y;
         event2.SetEventObject( win );
-        ret = (ret || win->GetEventHandler()->ProcessEvent( event2 ));
+        ret = win->GetEventHandler()->ProcessEvent( event2 );
     }
 
     /* win is a control: tab can be propagated up */
@@ -906,6 +907,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
 
 #if (GTK_MINOR_VERSION > 0)
     /* pressing F10 will activate the menu bar of the top frame */
+/*
     if ( (!ret) &&
          (gdk_event->keyval == GDK_F10) )
     {
@@ -921,10 +923,9 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
                     wxNode *node = menubar->GetMenus().First();
                     if (node)
                     {
-                        // doesn't work correctly
-            // wxMenu *firstMenu = (wxMenu*) node->Data();
-                        // gtk_menu_item_select( GTK_MENU_ITEM(firstMenu->m_owner) );
-                        // ret = TRUE;
+                        wxMenu *firstMenu = (wxMenu*) node->Data();
+                        gtk_menu_item_select( GTK_MENU_ITEM(firstMenu->m_owner) );
+                        ret = TRUE;
                         break;
                     }
                 }
@@ -932,6 +933,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
             ancestor = ancestor->GetParent();
         }
     }
+*/
 #endif
 
 /*
@@ -2255,7 +2257,7 @@ void wxWindow::OnInternalIdle()
 
     if (cursor.Ok())
     {
-        /* I now set the cursor the anew in every OnInternalIdle call
+        /* I now set the cursor anew in every OnInternalIdle call
           as setting the cursor in a parent window also effects the
           windows above so that checking for the current cursor is
           not possible. */
@@ -2640,7 +2642,7 @@ bool wxWindow::Reparent( wxWindowBase *newParentBase )
 
     if (oldParent)
     {
-        gtk_container_remove( GTK_CONTAINER(oldParent->m_wxwindow), m_widget );
+        gtk_container_remove( GTK_CONTAINER(m_widget->parent), m_widget );
     }
 
     wxASSERT( GTK_IS_WIDGET(m_widget) );
index 539fb6c9b7e03984ad78264d45c438dc855315c5..ab29ed1cb3a88cd0aea3830e1645897e048ba520 100644 (file)
@@ -85,6 +85,7 @@ static void gtk_frame_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation*
                                 (int)alloc->width,
                                 (int)alloc->height );
 */
+                               
         win->m_width = alloc->width;
         win->m_height = alloc->height;
         win->UpdateSize();
@@ -667,7 +668,7 @@ void wxFrame::DoSetClientSize( int width, int height )
         }
 #endif
 
-    wxWindow::DoSetClientSize( width + m_miniEdge*2, height  + m_miniEdge*2 + m_miniTitle );
+    DoSetSize( -1, -1, width + m_miniEdge*2, height  + m_miniEdge*2 + m_miniTitle, 0 );
 }
 
 void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height )
@@ -685,7 +686,7 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
 
     m_width = width;
     m_height = height;
-
+    
     /* space occupied by m_frameToolBar and m_frameMenuBar */
     int client_area_y_offset = 0;
 
@@ -979,16 +980,13 @@ void wxFrame::SetToolBar(wxToolBar *toolbar)
     if (m_frameToolBar)
     {
         /* insert into toolbar area if not already there */
-        if (m_frameToolBar->m_widget->parent != m_mainWidget)
+        if ((m_frameToolBar->m_widget->parent) &&
+            (m_frameToolBar->m_widget->parent != m_mainWidget))
         {
-           gtk_widget_ref( m_frameToolBar->m_widget );
-           gtk_widget_unparent( m_frameToolBar->m_widget );
-           
-            m_insertInClientArea = TRUE;
-           wxInsertChildInFrame( this, m_frameToolBar );
-            m_insertInClientArea = FALSE;
-           
-           gtk_widget_unref( m_frameToolBar->m_widget );
+            GetChildren().DeleteObject( m_frameToolBar );
+       
+           gtk_widget_reparent( m_frameToolBar->m_widget, m_mainWidget );
+           UpdateSize();
        }
     }
 }
index a59e05cd8d221f577a0e55237f2f1ac50ddc7bd1..9fa95cf91801c92effd3f79ef8f852924cf92a7b 100644 (file)
@@ -280,6 +280,8 @@ bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title
       long style, const wxString &name )
 {
     style = style | wxSIMPLE_BORDER;
+    style = style | wxCAPTION;
+    style = style | wxSYSTEM_MENU;
 
     if ((style & wxCAPTION) || (style & wxTINY_CAPTION_HORIZ) || (style & wxTINY_CAPTION_VERT))
         m_miniTitle = 13;
index eb35971c6a5328e0a11b150221aaf6dac8eacea5..f2340eaa85ec243e989dd27c0b50cd6b6986fbed 100644 (file)
@@ -71,11 +71,9 @@ bool wxStaticText::Create(wxWindow *parent,
       justify = GTK_JUSTIFY_LEFT;
     gtk_label_set_justify(GTK_LABEL(m_widget), justify);
 
-//#if GTK_MINOR_VERSION == 2
     // GTK_JUSTIFY_LEFT is 0, RIGHT 1 and CENTER 2
     static const float labelAlignments[] = { 0.0, 1.0, 0.5 };
     gtk_misc_set_alignment(GTK_MISC(m_widget), labelAlignments[justify], 0.0);
-//#endif // GTK 1.2.x
     
     GtkRequisition req;
     (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
index 6e5b301d48f62173e2bfca9d7e1c322de68a54bc..499cae0d70f94b6d967968ecae3ff8ed76f901a8 100644 (file)
@@ -309,6 +309,11 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap,
 
     tool->m_item = item;
 
+    GtkRequisition req;
+    (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
+    m_width = req.width;
+    m_height = req.height;
+
     gtk_signal_connect( GTK_OBJECT(tool->m_item),
                         "enter_notify_event", 
                         GTK_SIGNAL_FUNC(gtk_toolbar_enter_callback),
index e1172d0fdce89848642b98db22aaa8a172a94c98..c9001096b0565291e4b4197a00bc0b23b64a9acc 100644 (file)
    clicking on a scrollbar belonging to scrolled window will inevitably move
    the window. In wxWindows, the scrollbar will only emit an event, send this
    to (normally) a wxScrolledWindow and that class will call ScrollWindow()
-   which actually move the window and its subchildren. Note that GtkMyFixed
+   which actually moves the window and its subchildren. Note that GtkMyFixed
    memorizes how much it has been scrolled but that wxWindows forgets this
    so that the two coordinates systems have to be kept in synch. This is done
    in various places using the myfixed->xoffset and myfixed->yoffset values.
    and then iterates down the respective size events to all window. This has
    the disadvantage, that windows might get size events before the GTK widget
    actually has the reported size. This doesn't normally pose any problem, but
-   the OpenGl drawing routines rely in correct behaviour. Therefore, I have
+   the OpenGl drawing routines rely on correct behaviour. Therefore, I have
    added the m_nativeSizeEvents flag, which is true only for the OpenGL canvas,
    i.e. the wxGLCanvas will emit a size event, when (and not before) the X11
    window that is used for OpenGl output really has that size (as reported by
@@ -823,13 +823,12 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
     GdkModifierType state;
     if (gdk_event->window) gdk_window_get_pointer(gdk_event->window, &x, &y, &state);
 
+    bool ret = FALSE;
+    
     long key_code = map_to_unmodified_wx_keysym( gdk_event->keyval );
-
     /* sending unknown key events doesn't really make sense */
     if (key_code == 0) return FALSE;
 
-    bool ret = FALSE;
-
     wxKeyEvent event( wxEVT_KEY_DOWN );
     event.SetTimestamp( gdk_event->time );
     event.m_shiftDown = (gdk_event->state & GDK_SHIFT_MASK);
@@ -843,8 +842,6 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
     event.SetEventObject( win );
     ret = win->GetEventHandler()->ProcessEvent( event );
 
-    key_code = map_to_wx_keysym( gdk_event->keyval );
-
 #if wxUSE_ACCEL
     if (!ret)
     {
@@ -862,10 +859,14 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
         }
     }
 #endif // wxUSE_ACCEL
+
     /* wxMSW doesn't send char events with Alt pressed */
     /* Only send wxEVT_CHAR event if not processed yet. Thus, ALT-x
-       will only be sent if it is not a menu accelerator. */
-    if ((key_code != 0) && ! ret )
+       will only be sent if it is not in an accelerator table. */
+    key_code = map_to_wx_keysym( gdk_event->keyval );
+    
+    if ( (!ret) &&
+         (key_code != 0))
     {
         wxKeyEvent event2( wxEVT_CHAR );
         event2.SetTimestamp( gdk_event->time );
@@ -878,7 +879,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
         event2.m_x = x;
         event2.m_y = y;
         event2.SetEventObject( win );
-        ret = (ret || win->GetEventHandler()->ProcessEvent( event2 ));
+        ret = win->GetEventHandler()->ProcessEvent( event2 );
     }
 
     /* win is a control: tab can be propagated up */
@@ -906,6 +907,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
 
 #if (GTK_MINOR_VERSION > 0)
     /* pressing F10 will activate the menu bar of the top frame */
+/*
     if ( (!ret) &&
          (gdk_event->keyval == GDK_F10) )
     {
@@ -921,10 +923,9 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
                     wxNode *node = menubar->GetMenus().First();
                     if (node)
                     {
-                        // doesn't work correctly
-            // wxMenu *firstMenu = (wxMenu*) node->Data();
-                        // gtk_menu_item_select( GTK_MENU_ITEM(firstMenu->m_owner) );
-                        // ret = TRUE;
+                        wxMenu *firstMenu = (wxMenu*) node->Data();
+                        gtk_menu_item_select( GTK_MENU_ITEM(firstMenu->m_owner) );
+                        ret = TRUE;
                         break;
                     }
                 }
@@ -932,6 +933,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
             ancestor = ancestor->GetParent();
         }
     }
+*/
 #endif
 
 /*
@@ -2255,7 +2257,7 @@ void wxWindow::OnInternalIdle()
 
     if (cursor.Ok())
     {
-        /* I now set the cursor the anew in every OnInternalIdle call
+        /* I now set the cursor anew in every OnInternalIdle call
           as setting the cursor in a parent window also effects the
           windows above so that checking for the current cursor is
           not possible. */
@@ -2640,7 +2642,7 @@ bool wxWindow::Reparent( wxWindowBase *newParentBase )
 
     if (oldParent)
     {
-        gtk_container_remove( GTK_CONTAINER(oldParent->m_wxwindow), m_widget );
+        gtk_container_remove( GTK_CONTAINER(m_widget->parent), m_widget );
     }
 
     wxASSERT( GTK_IS_WIDGET(m_widget) );
index fefca18e5985fcb7fc4a99fbde025bc71c4dc17a..ce846b4a2280c2642ae3c0f0e89b48fd0da7f8e6 100644 (file)
@@ -104,8 +104,9 @@ class wxFloatBar(wxToolBar):
             self.floatframe.SetToolBar(self)
             self.oldcolor = self.GetBackgroundColour()
             barsize = self.GetSizeTuple()
-            self.floatframe.SetSize(wxSize(barsize[0], barsize[1] + self.titleheight))
-            self.floatframe.SetClientSize(wxSize(barsize[0], barsize[1]))
+#            self.floatframe.SetSize(wxSize(barsize[0], barsize[1] + self.titleheight))
+#            self.floatframe.SetClientSize(wxSize(barsize[0], barsize[1]))
+            self.floatframe.SetClientSize(wxSize(50,200))
             newpos = self.parentframe.GetPosition()
             newpos.y = newpos.y + self.titleheight
             self.floatframe.SetPosition(newpos)