]> git.saurik.com Git - wxWidgets.git/commitdiff
wxScrolledWindow inherits from wxPanel to
authorRobert Roebling <robert@roebling.de>
Wed, 26 May 1999 09:03:25 +0000 (09:03 +0000)
committerRobert Roebling <robert@roebling.de>
Wed, 26 May 1999 09:03:25 +0000 (09:03 +0000)
    make tab travseral work.
  Work around for GTK scrolledwidget bug.

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

include/wx/generic/scrolwin.h
samples/scroll/scroll.cpp
src/generic/scrolwin.cpp
src/gtk/win_gtk.c
src/gtk/window.cpp
src/gtk1/win_gtk.c
src/gtk1/window.cpp

index f7478972ab56fae44efccef544ea1246668f672c..9a29985ec8c1909829fa2f02ed3345f949732a6c 100644 (file)
 #endif
 
 #include "wx/window.h"
+#include "wx/panel.h"
 
 WXDLLEXPORT_DATA(extern const wxChar*) wxPanelNameStr;
 
-class WXDLLEXPORT wxScrolledWindow: public wxWindow
+class WXDLLEXPORT wxScrolledWindow: public wxPanel
 {
   DECLARE_ABSTRACT_CLASS(wxScrolledWindow)
 
index 0199afdea35c0785347314c89c6fd7f4e4d4a07b..ef74ac887aa8185698eb454c1f8a296398a94d29 100644 (file)
@@ -19,6 +19,7 @@
 #endif
 
 #include "wx/image.h"
+#include "wx/listctrl.h"
 
 // derived classes
 
@@ -97,8 +98,24 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id,
   (void) new wxComboBox( this, -1, "This", wxPoint(10,130), wxDefaultSize, 5, choices );
   
   (void) new wxRadioBox( this, -1, "This", wxPoint(10,200), wxDefaultSize, 5, choices );
+
+  wxListCtrl *m_listCtrl = new wxListCtrl(
+       this, -1, wxPoint(200, 10), wxSize(180, 120),
+       wxLC_REPORT | wxSUNKEN_BORDER);
+
+  m_listCtrl->InsertColumn(0, "First", wxLIST_FORMAT_LEFT, 90);
+  m_listCtrl->InsertColumn(1, "Last", wxLIST_FORMAT_LEFT, 90);
+
+  for ( int i=0; i < 30; i++)
+  {
+      char buf[20];
+      sprintf(buf, "Item %d", i);
+      m_listCtrl->InsertItem(i, buf);
+  }
+
+  (void) new wxListBox( this, -1, wxPoint(200,180), wxSize(180,120), 5, choices, wxLB_ALWAYS_SB );
   
-  SetBackgroundColour( *wxWHITE );
+  SetBackgroundColour( "WHEAT" );
 }
 
 MyCanvas::~MyCanvas()
index 6786900ccd456d2c742adb7c7d36e7829c42a2d5..033b08913b6bc3d0136937f3a6c43773d86d283f 100644 (file)
 #endif
 
 #include "wx/generic/scrolwin.h"
+#include "wx/panel.h"
 
 #if !USE_SHARED_LIBRARY
-BEGIN_EVENT_TABLE(wxScrolledWindow, wxWindow)
+BEGIN_EVENT_TABLE(wxScrolledWindow, wxPanel)
     EVT_SCROLLWIN(wxScrolledWindow::OnScroll)
     EVT_SIZE(wxScrolledWindow::OnSize)
     EVT_PAINT(wxScrolledWindow::OnPaint)
 END_EVENT_TABLE()
 
-IMPLEMENT_DYNAMIC_CLASS(wxScrolledWindow, wxWindow)
+IMPLEMENT_DYNAMIC_CLASS(wxScrolledWindow, wxPanel)
 #endif
 
 #ifdef __WXMSW__
@@ -80,7 +81,7 @@ bool wxScrolledWindow::Create(wxWindow *parent, wxWindowID id,
     m_scaleX = 1.0;
     m_scaleY = 1.0;
 
-    return wxWindow::Create(parent, id, pos, size, style, name);
+    return wxPanel::Create(parent, id, pos, size, style, name);
 }
 
 /*
index 77fa36f8268bc381c404a8e1c2a44a3635132b15..1c885094af9c313fc7a753faa208501d680cdc78 100644 (file)
@@ -59,76 +59,75 @@ static GtkContainerClass *parent_class = NULL;
 guint
 gtk_myfixed_get_type ()
 {
-  static guint myfixed_type = 0;
+    static guint myfixed_type = 0;
 
-  if (!myfixed_type)
+    if (!myfixed_type)
     {
-      GtkTypeInfo myfixed_info =
-      {
-       "GtkMyFixed",
-       sizeof (GtkMyFixed),
-       sizeof (GtkMyFixedClass),
-       (GtkClassInitFunc) gtk_myfixed_class_init,
-       (GtkObjectInitFunc) gtk_myfixed_init,
+        GtkTypeInfo myfixed_info =
+        {
+          "GtkMyFixed",
+          sizeof (GtkMyFixed),
+          sizeof (GtkMyFixedClass),
+          (GtkClassInitFunc) gtk_myfixed_class_init,
+          (GtkObjectInitFunc) gtk_myfixed_init,
 #if (GTK_MINOR_VERSION > 0)
-       /* reserved_1 */ NULL,
-        /* reserved_2 */ NULL,
-        (GtkClassInitFunc) NULL,
+          /* reserved_1 */ NULL,
+           /* reserved_2 */ NULL,
+           (GtkClassInitFunc) NULL,
 #else
-        (GtkArgSetFunc) NULL,
-        (GtkArgGetFunc) NULL,
+           (GtkArgSetFunc) NULL,
+           (GtkArgGetFunc) NULL,
 #endif
-      };
-
-      myfixed_type = gtk_type_unique (gtk_container_get_type (), &myfixed_info);
+        };
+        myfixed_type = gtk_type_unique (gtk_container_get_type (), &myfixed_info);
     }
-
-  return myfixed_type;
+    
+    return myfixed_type;
 }
 
 static void
 gtk_myfixed_class_init (GtkMyFixedClass *klass)
 {
-  GtkObjectClass *object_class;
-  GtkWidgetClass *widget_class;
-  GtkContainerClass *container_class;
+    GtkObjectClass *object_class;
+    GtkWidgetClass *widget_class;
+    GtkContainerClass *container_class;
 
-  object_class = (GtkObjectClass*) klass;
-  widget_class = (GtkWidgetClass*) klass;
-  container_class = (GtkContainerClass*) klass;
+    object_class = (GtkObjectClass*) klass;
+    widget_class = (GtkWidgetClass*) klass;
+    container_class = (GtkContainerClass*) klass;
   
 #if (GTK_MINOR_VERSION > 0)
-  parent_class = gtk_type_class (GTK_TYPE_CONTAINER);
+    parent_class = gtk_type_class (GTK_TYPE_CONTAINER);
 #else
-  parent_class = gtk_type_class (gtk_container_get_type ());
+    parent_class = gtk_type_class (gtk_container_get_type ());
 #endif
 
-  widget_class->map = gtk_myfixed_map;
+    widget_class->map = gtk_myfixed_map;
 #if (GTK_MINOR_VERSION == 0)
-  widget_class->unmap = gtk_myfixed_unmap;
+    widget_class->unmap = gtk_myfixed_unmap;
 #endif
-  widget_class->realize = gtk_myfixed_realize;
-  widget_class->size_request = gtk_myfixed_size_request;
-  widget_class->size_allocate = gtk_myfixed_size_allocate;
-  widget_class->draw = gtk_myfixed_draw;
-  widget_class->expose_event = gtk_myfixed_expose;
-
-  container_class->add = gtk_myfixed_add;
-  container_class->remove = gtk_myfixed_remove;
+    widget_class->realize = gtk_myfixed_realize;
+    widget_class->size_request = gtk_myfixed_size_request;
+    widget_class->size_allocate = gtk_myfixed_size_allocate;
+    widget_class->draw = gtk_myfixed_draw;
+    widget_class->expose_event = gtk_myfixed_expose;
+
+    container_class->add = gtk_myfixed_add;
+    container_class->remove = gtk_myfixed_remove;
 #if (GTK_MINOR_VERSION > 0)
-  container_class->forall = gtk_myfixed_foreach;
+    container_class->forall = gtk_myfixed_foreach;
 #else
-  container_class->foreach = gtk_myfixed_foreach;
+    container_class->foreach = gtk_myfixed_foreach;
 #endif
 
 #if (GTK_MINOR_VERSION > 0)
-  container_class->child_type = gtk_myfixed_child_type;
+    container_class->child_type = gtk_myfixed_child_type;
 #endif
 
 #if (GTK_MINOR_VERSION > 0)
-  klass->set_scroll_adjustments = gtk_myfixed_scroll_set_adjustments;
+    klass->set_scroll_adjustments = gtk_myfixed_scroll_set_adjustments;
 
-  widget_class->set_scroll_adjustments_signal =
+    widget_class->set_scroll_adjustments_signal =
     gtk_signal_new ("set_scroll_adjustments",
                    GTK_RUN_LAST,
                    object_class->type,
@@ -142,124 +141,125 @@ gtk_myfixed_class_init (GtkMyFixedClass *klass)
 static GtkType
 gtk_myfixed_child_type (GtkContainer     *container)
 {
-  return GTK_TYPE_WIDGET;
+    return GTK_TYPE_WIDGET;
 }
 #endif
 
 static void
 gtk_myfixed_init (GtkMyFixed *myfixed)
 {
-  GTK_WIDGET_UNSET_FLAGS (myfixed, GTK_NO_WINDOW);
+    GTK_WIDGET_UNSET_FLAGS (myfixed, GTK_NO_WINDOW);
   
 #if (GTK_MINOR_VERSION == 0)
-  GTK_WIDGET_SET_FLAGS (myfixed, GTK_BASIC);
+    GTK_WIDGET_SET_FLAGS (myfixed, GTK_BASIC);
 #endif
 
 #if (GTK_MINOR_VERSION > 0)
-  myfixed->shadow_type = GTK_SHADOW_NONE;
+    myfixed->shadow_type = GTK_SHADOW_NONE;
 #endif
 
-  myfixed->children = NULL;
+    myfixed->children = NULL;
 }
 
 GtkWidget*
 gtk_myfixed_new ()
 {
-  GtkMyFixed *myfixed;
+    GtkMyFixed *myfixed;
 
-  myfixed = gtk_type_new (gtk_myfixed_get_type ());
+    myfixed = gtk_type_new (gtk_myfixed_get_type ());
   
-  return GTK_WIDGET (myfixed);
+    return GTK_WIDGET (myfixed);
 }
 
 #if (GTK_MINOR_VERSION > 0)
-void  gtk_myfixed_scroll_set_adjustments (GtkMyFixed     *myfixed,
-                                              GtkAdjustment *hadj,
-                                              GtkAdjustment *vadj)
+void  
+gtk_myfixed_scroll_set_adjustments (GtkMyFixed     *myfixed,
+                                   GtkAdjustment  *hadj,
+                                   GtkAdjustment  *vadj)
 {
    /* OK, this is embarassing, but this function has to be here */
 }
 
 void 
-gtk_myfixed_set_shadow_type (GtkMyFixed   *myfixed,
-                             GtkShadowType  type)
+gtk_myfixed_set_shadow_type (GtkMyFixed    *myfixed,
+                            GtkShadowType  type)
 {
-  g_return_if_fail (myfixed != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (myfixed));
+    g_return_if_fail (myfixed != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (myfixed));
 
-  if ((GtkShadowType) myfixed->shadow_type != type)
+    if ((GtkShadowType) myfixed->shadow_type != type)
     {
-      myfixed->shadow_type = type;
+        myfixed->shadow_type = type;
 
-      if (GTK_WIDGET_VISIBLE (myfixed))
+        if (GTK_WIDGET_VISIBLE (myfixed))
        {
-         gtk_widget_size_allocate (GTK_WIDGET (myfixed), &(GTK_WIDGET (myfixed)->allocation));
-         gtk_widget_queue_draw (GTK_WIDGET (myfixed));
+           gtk_widget_size_allocate (GTK_WIDGET (myfixed), &(GTK_WIDGET (myfixed)->allocation));
+           gtk_widget_queue_draw (GTK_WIDGET (myfixed));
        }
     }
 }
 #endif
 
 void
-gtk_myfixed_put (GtkMyFixed   *myfixed,
-                 GtkWidget      *widget,
+gtk_myfixed_put (GtkMyFixed    *myfixed,
+                 GtkWidget     *widget,
                  gint16         x,
                  gint16         y,
                 gint16         width,
                 gint16         height)
 {
-  GtkMyFixedChild *child_info;
-
-  g_return_if_fail (myfixed != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (myfixed));
-  g_return_if_fail (widget != NULL);
-
-  child_info = g_new (GtkMyFixedChild, 1);
-  child_info->widget = widget;
-  child_info->x = x;
-  child_info->y = y;
-  child_info->width = width;
-  child_info->height = height;
+    GtkMyFixedChild *child_info;
+
+    g_return_if_fail (myfixed != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (myfixed));
+    g_return_if_fail (widget != NULL);
+
+    child_info = g_new (GtkMyFixedChild, 1);
+    child_info->widget = widget;
+    child_info->x = x;
+    child_info->y = y;
+    child_info->width = width;
+    child_info->height = height;
   
-  gtk_widget_set_parent (widget, GTK_WIDGET (myfixed));
+    gtk_widget_set_parent (widget, GTK_WIDGET (myfixed));
 
-  myfixed->children = g_list_append (myfixed->children, child_info); 
+    myfixed->children = g_list_append (myfixed->children, child_info); 
 
-  if (GTK_WIDGET_REALIZED (myfixed))
-    gtk_widget_realize (widget);
+    if (GTK_WIDGET_REALIZED (myfixed))
+        gtk_widget_realize (widget);
 
-  if (GTK_WIDGET_VISIBLE (myfixed) && GTK_WIDGET_VISIBLE (widget))
+    if (GTK_WIDGET_VISIBLE (myfixed) && GTK_WIDGET_VISIBLE (widget))
     {
-      if (GTK_WIDGET_MAPPED (myfixed))
-       gtk_widget_map (widget);
+        if (GTK_WIDGET_MAPPED (myfixed))
+           gtk_widget_map (widget);
       
-      gtk_widget_queue_resize (GTK_WIDGET (myfixed));
+        gtk_widget_queue_resize (GTK_WIDGET (myfixed));
     }
 }
 
 void
-gtk_myfixed_move (GtkMyFixed     *myfixed,
-                  GtkWidget      *widget,
+gtk_myfixed_move (GtkMyFixed    *myfixed,
+                  GtkWidget     *widget,
                   gint16         x,
                   gint16         y)
 {
-  GtkMyFixedChild *child;
-  GList *children;
+    GtkMyFixedChild *child;
+    GList *children;
 
-  g_return_if_fail (myfixed != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (myfixed));
-  g_return_if_fail (widget != NULL);
+    g_return_if_fail (myfixed != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (myfixed));
+    g_return_if_fail (widget != NULL);
 
-  children = myfixed->children;
-  while (children)
+    children = myfixed->children;
+    while (children)
     {
-      child = children->data;
-      children = children->next;
+        child = children->data;
+        children = children->next;
       
-      if (child->widget == widget)
+        if (child->widget == widget)
         {
-           gtk_myfixed_set_size( myfixed, widget, x, y, child->width, child->height );
-          break;
+            gtk_myfixed_set_size( myfixed, widget, x, y, child->width, child->height );
+           break;
        }
     }
 }
@@ -270,78 +270,85 @@ gtk_myfixed_resize (GtkMyFixed     *myfixed,
                    gint16         width,
                    gint16         height)
 {
-  GtkMyFixedChild *child;
-  GList *children;
+    GtkMyFixedChild *child;
+    GList *children;
 
-  g_return_if_fail (myfixed != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (myfixed));
-  g_return_if_fail (widget != NULL);
+    g_return_if_fail (myfixed != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (myfixed));
+    g_return_if_fail (widget != NULL);
 
-  children = myfixed->children;
-  while (children)
+    children = myfixed->children;
+    while (children)
     {
-      child = children->data;
-      children = children->next;
+        child = children->data;
+        children = children->next;
       
-      if (child->widget == widget)
+        if (child->widget == widget)
         {
-           gtk_myfixed_set_size( myfixed, widget, child->x, child->y, width, height );
-          break;
+             gtk_myfixed_set_size( myfixed, widget, child->x, child->y, width, height );
+            break;
        }
     }
 }
 
 void
-gtk_myfixed_set_size (GtkMyFixed     *myfixed,
-                      GtkWidget      *widget,
+gtk_myfixed_set_size (GtkMyFixed    *myfixed,
+                      GtkWidget     *widget,
                       gint16         x,
                       gint16         y,
                      gint16         width,
                      gint16         height)
 {
-  GtkMyFixedChild *child;
-  GList *children;
-  GtkAllocation child_allocation;
+    GtkMyFixedChild *child;
+    GList *children;
+    GtkAllocation child_allocation;
 
-  g_return_if_fail (myfixed != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (myfixed));
-  g_return_if_fail (widget != NULL);
+    g_return_if_fail (myfixed != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (myfixed));
+    g_return_if_fail (widget != NULL);
 
-  children = myfixed->children;
-  while (children)
+    children = myfixed->children;
+    while (children)
     {
-      child = children->data;
-      children = children->next;
+        child = children->data;
+        children = children->next;
 
-      if (child->widget == widget)
+        if (child->widget == widget)
         {
-         if ((child->x == x) && 
-             (child->y == y) &&
-             (child->width == width) && 
-             (child->height == height)) return;
+           if ((child->x == x) && 
+               (child->y == y) &&
+               (child->width == width) && 
+               (child->height == height)) return;
          
-          child->x = x;
-          child->y = y;
-          child->width = width;
-          child->height = height;
-
-          if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (myfixed))
-         {
-             if ((child->width > 1) && (child->height > 1) && (GTK_WIDGET_REALIZED(widget)))
-            {
-                child_allocation.x = child->x;
-                child_allocation.y = child->y;
-                child_allocation.width = child->width;
-                child_allocation.height = child->height;
-                gtk_widget_size_allocate (widget, &child_allocation);
-             } 
-            else 
-            {
-                gtk_widget_queue_resize (GTK_WIDGET (myfixed));
-            }
-         }
-
-          break;
+            child->x = x;
+            child->y = y;
+            child->width = width;
+            child->height = height;
+
+            if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (myfixed))
+           {
+                if ((child->width > 1) && (child->height > 1) && (GTK_WIDGET_REALIZED(widget)))
+               {
+                    child_allocation.x = child->x;
+                    child_allocation.y = child->y;
+                    child_allocation.width = MAX( child->width, 1 );
+                    child_allocation.height = MAX( child->height, 1 );
+               
+                   /* work around for GTK bug when moving widgets outside
+                      the X window -> do NOT move them entirely outside */
+                   if (child_allocation.y + child_allocation.height < 0)
+                       child_allocation.y = -child_allocation.height;
+                   if (child_allocation.x + child_allocation.width < 0)
+                       child_allocation.x = -child_allocation.width;
+               
+                    gtk_widget_size_allocate (widget, &child_allocation);
+                } 
+               else 
+               {
+                    gtk_widget_queue_resize (GTK_WIDGET (myfixed));
+               } 
+           }
+            break;
         }
     }
 }
@@ -349,220 +356,224 @@ gtk_myfixed_set_size (GtkMyFixed     *myfixed,
 static void
 gtk_myfixed_map (GtkWidget *widget)
 {
-  GtkMyFixed *myfixed;
-  GtkMyFixedChild *child;
-  GList *children;
+    GtkMyFixed *myfixed;
+    GtkMyFixedChild *child;
+    GList *children;
 
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (widget));
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (widget));
 
-  GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
-  myfixed = GTK_MYFIXED (widget);
+    GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
+    myfixed = GTK_MYFIXED (widget);
 
-  children = myfixed->children;
-  while (children)
+    children = myfixed->children;
+    while (children)
     {
-      child = children->data;
-      children = children->next;
+        child = children->data;
+        children = children->next;
 
-      if (GTK_WIDGET_VISIBLE (child->widget) &&
-         !GTK_WIDGET_MAPPED (child->widget))
-       gtk_widget_map (child->widget);
+        if (GTK_WIDGET_VISIBLE (child->widget) && !GTK_WIDGET_MAPPED (child->widget))
+           gtk_widget_map (child->widget);
     }
     
-  gdk_window_show (widget->window);
+    gdk_window_show (widget->window);
 }
 
 #if (GTK_MINOR_VERSION == 0)
 static void
 gtk_myfixed_unmap (GtkWidget *widget)
 {
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (widget));
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (widget));
 
-  GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
+    GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
 }
 #endif
 
 static void
 gtk_myfixed_realize (GtkWidget *widget)
 {
-  GtkMyFixed *myfixed;
-  GdkWindowAttr attributes;
-  gint attributes_mask;
+    GtkMyFixed *myfixed;
+    GdkWindowAttr attributes;
+    gint attributes_mask;
 
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (widget));
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (widget));
 
-  myfixed = GTK_MYFIXED (widget);
+    myfixed = GTK_MYFIXED (widget);
   
-  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+    GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
 
-  attributes.window_type = GDK_WINDOW_CHILD;
+    attributes.window_type = GDK_WINDOW_CHILD;
   
 #if (GTK_MINOR_VERSION > 0)
-  attributes.x = widget->allocation.x;
-  attributes.y = widget->allocation.y;
-  attributes.width = widget->allocation.width;
-  attributes.height = widget->allocation.height;
-
-  if (myfixed->shadow_type != GTK_SHADOW_NONE)
-  {
-      attributes.x += 2;
-      attributes.y += 2;
-      attributes.width -= 4;
-      attributes.height -= 4;
-  }
+    attributes.x = widget->allocation.x;
+    attributes.y = widget->allocation.y;
+    attributes.width = widget->allocation.width;
+    attributes.height = widget->allocation.height;
+
+    if (myfixed->shadow_type != GTK_SHADOW_NONE)
+    {
+        attributes.x += 2;
+        attributes.y += 2;
+        attributes.width -= 4;
+        attributes.height -= 4;
+    }
     
-  if (attributes.width < 2) attributes.width = 2;
-  if (attributes.height < 2) attributes.height = 2;
+    if (attributes.width < 2) attributes.width = 2;
+    if (attributes.height < 2) attributes.height = 2;
 #else
-  attributes.x = widget->allocation.x;
-  attributes.y = widget->allocation.y;
-  attributes.width = 32000;
-  attributes.height = 32000;
+    attributes.x = widget->allocation.x;
+    attributes.y = widget->allocation.y;
+    attributes.width = 32000;
+    attributes.height = 32000;
 #endif
-  attributes.wclass = GDK_INPUT_OUTPUT;
-  attributes.visual = gtk_widget_get_visual (widget);
-  attributes.colormap = gtk_widget_get_colormap (widget);
-  attributes.event_mask = gtk_widget_get_events (widget);
-  attributes.event_mask |= 
-  GDK_EXPOSURE_MASK    |
-  GDK_POINTER_MOTION_MASK      |
-  GDK_POINTER_MOTION_HINT_MASK  |
-  GDK_BUTTON_MOTION_MASK       |
-  GDK_BUTTON1_MOTION_MASK      |
-  GDK_BUTTON2_MOTION_MASK      |
-  GDK_BUTTON3_MOTION_MASK      |
-  GDK_BUTTON_PRESS_MASK                |
-  GDK_BUTTON_RELEASE_MASK      |
-  GDK_KEY_PRESS_MASK           |
-  GDK_KEY_RELEASE_MASK         |
-  GDK_ENTER_NOTIFY_MASK                |
-  GDK_LEAVE_NOTIFY_MASK                |
-  GDK_FOCUS_CHANGE_MASK;
-
-  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-
-  widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, 
-                                  attributes_mask);
-  gdk_window_set_user_data (widget->window, widget);
+    attributes.wclass = GDK_INPUT_OUTPUT;
+    attributes.visual = gtk_widget_get_visual (widget);
+    attributes.colormap = gtk_widget_get_colormap (widget);
+    attributes.event_mask = gtk_widget_get_events (widget);
+    attributes.event_mask |= 
+       GDK_EXPOSURE_MASK       |
+       GDK_POINTER_MOTION_MASK |
+       GDK_POINTER_MOTION_HINT_MASK  |
+       GDK_BUTTON_MOTION_MASK  |
+       GDK_BUTTON1_MOTION_MASK |
+       GDK_BUTTON2_MOTION_MASK |
+       GDK_BUTTON3_MOTION_MASK |
+       GDK_BUTTON_PRESS_MASK   |
+       GDK_BUTTON_RELEASE_MASK |
+       GDK_KEY_PRESS_MASK      |
+       GDK_KEY_RELEASE_MASK    |
+       GDK_ENTER_NOTIFY_MASK   |
+       GDK_LEAVE_NOTIFY_MASK   |
+       GDK_FOCUS_CHANGE_MASK;
+    attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+
+    widget->window = gdk_window_new( gtk_widget_get_parent_window (widget), &attributes, 
+                                    attributes_mask);
+    gdk_window_set_user_data (widget->window, widget);
     
-  widget->style = gtk_style_attach (widget->style, widget->window);
-  gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
+    widget->style = gtk_style_attach (widget->style, widget->window);
+    gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
 }
 
 static void
 gtk_myfixed_size_request (GtkWidget      *widget,
-                       GtkRequisition *requisition)
+                         GtkRequisition *requisition)
 {
-  GtkMyFixed *myfixed;
-  GtkMyFixedChild *child;
-  GList *children;
-  GtkRequisition child_requisition;
+    GtkMyFixed *myfixed;
+    GtkMyFixedChild *child;
+    GList *children;
+    GtkRequisition child_requisition;
   
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (widget));
-  g_return_if_fail (requisition != NULL);
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (widget));
+    g_return_if_fail (requisition != NULL);
 
-  myfixed = GTK_MYFIXED (widget);
+    myfixed = GTK_MYFIXED (widget);
   
-  children = myfixed->children;
-  while (children)
+    children = myfixed->children;
+    while (children)
     {
-      child = children->data;
-      children = children->next;
+        child = children->data;
+        children = children->next;
 
-      if (GTK_WIDGET_VISIBLE (child->widget))
+        if (GTK_WIDGET_VISIBLE (child->widget))
        {
-          gtk_widget_size_request (child->widget, &child_requisition);
+            gtk_widget_size_request (child->widget, &child_requisition);
        }
     }
     
-  /* request very little, I'm not sure if requesting nothing
-     will always have positive effects on stability... */
-  requisition->width = 2;
-  requisition->height = 2;
+    /* request very little, I'm not sure if requesting nothing
+       will always have positive effects on stability... */
+    requisition->width = 2;
+    requisition->height = 2;
 }
 
 static void
 gtk_myfixed_size_allocate (GtkWidget     *widget,
                           GtkAllocation *allocation)
 {
-  GtkMyFixed *myfixed;
-  gint border;
-  GtkMyFixedChild *child;
-  GtkAllocation child_allocation; 
-  GList *children; 
+    GtkMyFixed *myfixed;
+    gint border;
+    GtkMyFixedChild *child;
+    GtkAllocation child_allocation; 
+    GList *children; 
 
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED(widget));
-  g_return_if_fail (allocation != NULL);
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED(widget));
+    g_return_if_fail (allocation != NULL);
 
-  myfixed = GTK_MYFIXED (widget);
+    myfixed = GTK_MYFIXED (widget);
   
     widget->allocation = *allocation;
 #if (GTK_MINOR_VERSION > 0)
-  if (myfixed->shadow_type == GTK_SHADOW_NONE)
-    border = 0;
-  else
-    border = 2;
+    if (myfixed->shadow_type == GTK_SHADOW_NONE)
+        border = 0;
+    else
+        border = 2;
 #else
-  border = 0;
+    border = 0;
 #endif
 
-  if (GTK_WIDGET_REALIZED (widget))
-  {
-    gdk_window_move_resize( widget->window, 
-                            allocation->x+border, allocation->y+border, 
+    if (GTK_WIDGET_REALIZED (widget))
+    {
+        gdk_window_move_resize( widget->window, 
+                                allocation->x+border, allocation->y+border, 
 #if (GTK_MINOR_VERSION > 0)
-                           allocation->width-border*2, allocation->height-border*2
+                               allocation->width-border*2, allocation->height-border*2
 #else
-                           32000, 32000
+                               32000, 32000
 #endif
-                           );
-  }
+                              );
+    }
 
-  children = myfixed->children;
-  while (children)
+    children = myfixed->children;
+    while (children)
     {
-      child = children->data;
-      children = children->next;
+        child = children->data;
+        children = children->next;
  
-      /* please look at the text in wxWindow::DoSetSize() on why the
-         test GTK_WIDGET_REALIZED() has to be here */
-      if (GTK_WIDGET_VISIBLE (child->widget))
-      { 
-/*
-        if (GTK_IS_NOTEBOOK(child->widget) && !GTK_WIDGET_REALIZED(child->widget))
-       {
-         gtk_widget_queue_resize( child->widget );
-       }
-       else
-*/
-       {
-         child_allocation.x = child->x;
-         child_allocation.y = child->y;
-         child_allocation.width = child->width;
-         child_allocation.height = child->height;
-         gtk_widget_size_allocate (child->widget, &child_allocation);
-       }
-     }
-   }
+        /* please look at the text in wxWindow::DoSetSize() on why the
+           test GTK_WIDGET_REALIZED() has to be here */
+        if (GTK_WIDGET_VISIBLE (child->widget))
+        { 
+/*          if (GTK_IS_NOTEBOOK(child->widget) && !GTK_WIDGET_REALIZED(child->widget))
+            {
+               gtk_widget_queue_resize( child->widget );
+           }
+           else */
+           {
+               child_allocation.x = child->x;
+               child_allocation.y = child->y;
+                child_allocation.width = MAX( child->width, 1 );
+                child_allocation.height = MAX( child->height, 1 );
+               
+               /* work around for GTK bug when moving widgets outside
+                  the X window -> do NOT move them entirely outside */
+               if (child_allocation.y + child_allocation.height < 0)
+                   child_allocation.y = -child_allocation.height;
+               if (child_allocation.x + child_allocation.width < 0)
+                   child_allocation.x = -child_allocation.width;
+         
+               gtk_widget_size_allocate (child->widget, &child_allocation);
+           }
+        }
+    }
 }
 
 static void
 gtk_myfixed_paint (GtkWidget    *widget,
                   GdkRectangle *area)
 {
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (widget));
-  g_return_if_fail (area != NULL);
-
-  if (GTK_WIDGET_DRAWABLE (widget))
-      gdk_window_clear_area (widget->window,
-                            area->x, area->y,
-                            area->width, area->height);
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (widget));
+    g_return_if_fail (area != NULL);
+
+    if (GTK_WIDGET_DRAWABLE (widget))
+        gdk_window_clear_area (widget->window,
+                              area->x, area->y,
+                              area->width, area->height);
 }
 
 static void
index cc9855afaeae11b3a635d3ff4a7bbdf7c3c502f4..ade9c04dc7857a12f8d12e87482365ffb4feedc9 100644 (file)
@@ -635,7 +635,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
         }
     }
 
-    // win is a control: tab can be propagated up
+    /* win is a control: tab can be propagated up */
     if ( (!ret) &&
          ((gdk_event->keyval == GDK_Tab) || (gdk_event->keyval == GDK_ISO_Left_Tab)) &&
          (win->HasFlag(wxTE_PROCESS_TAB) == 0))
index 77fa36f8268bc381c404a8e1c2a44a3635132b15..1c885094af9c313fc7a753faa208501d680cdc78 100644 (file)
@@ -59,76 +59,75 @@ static GtkContainerClass *parent_class = NULL;
 guint
 gtk_myfixed_get_type ()
 {
-  static guint myfixed_type = 0;
+    static guint myfixed_type = 0;
 
-  if (!myfixed_type)
+    if (!myfixed_type)
     {
-      GtkTypeInfo myfixed_info =
-      {
-       "GtkMyFixed",
-       sizeof (GtkMyFixed),
-       sizeof (GtkMyFixedClass),
-       (GtkClassInitFunc) gtk_myfixed_class_init,
-       (GtkObjectInitFunc) gtk_myfixed_init,
+        GtkTypeInfo myfixed_info =
+        {
+          "GtkMyFixed",
+          sizeof (GtkMyFixed),
+          sizeof (GtkMyFixedClass),
+          (GtkClassInitFunc) gtk_myfixed_class_init,
+          (GtkObjectInitFunc) gtk_myfixed_init,
 #if (GTK_MINOR_VERSION > 0)
-       /* reserved_1 */ NULL,
-        /* reserved_2 */ NULL,
-        (GtkClassInitFunc) NULL,
+          /* reserved_1 */ NULL,
+           /* reserved_2 */ NULL,
+           (GtkClassInitFunc) NULL,
 #else
-        (GtkArgSetFunc) NULL,
-        (GtkArgGetFunc) NULL,
+           (GtkArgSetFunc) NULL,
+           (GtkArgGetFunc) NULL,
 #endif
-      };
-
-      myfixed_type = gtk_type_unique (gtk_container_get_type (), &myfixed_info);
+        };
+        myfixed_type = gtk_type_unique (gtk_container_get_type (), &myfixed_info);
     }
-
-  return myfixed_type;
+    
+    return myfixed_type;
 }
 
 static void
 gtk_myfixed_class_init (GtkMyFixedClass *klass)
 {
-  GtkObjectClass *object_class;
-  GtkWidgetClass *widget_class;
-  GtkContainerClass *container_class;
+    GtkObjectClass *object_class;
+    GtkWidgetClass *widget_class;
+    GtkContainerClass *container_class;
 
-  object_class = (GtkObjectClass*) klass;
-  widget_class = (GtkWidgetClass*) klass;
-  container_class = (GtkContainerClass*) klass;
+    object_class = (GtkObjectClass*) klass;
+    widget_class = (GtkWidgetClass*) klass;
+    container_class = (GtkContainerClass*) klass;
   
 #if (GTK_MINOR_VERSION > 0)
-  parent_class = gtk_type_class (GTK_TYPE_CONTAINER);
+    parent_class = gtk_type_class (GTK_TYPE_CONTAINER);
 #else
-  parent_class = gtk_type_class (gtk_container_get_type ());
+    parent_class = gtk_type_class (gtk_container_get_type ());
 #endif
 
-  widget_class->map = gtk_myfixed_map;
+    widget_class->map = gtk_myfixed_map;
 #if (GTK_MINOR_VERSION == 0)
-  widget_class->unmap = gtk_myfixed_unmap;
+    widget_class->unmap = gtk_myfixed_unmap;
 #endif
-  widget_class->realize = gtk_myfixed_realize;
-  widget_class->size_request = gtk_myfixed_size_request;
-  widget_class->size_allocate = gtk_myfixed_size_allocate;
-  widget_class->draw = gtk_myfixed_draw;
-  widget_class->expose_event = gtk_myfixed_expose;
-
-  container_class->add = gtk_myfixed_add;
-  container_class->remove = gtk_myfixed_remove;
+    widget_class->realize = gtk_myfixed_realize;
+    widget_class->size_request = gtk_myfixed_size_request;
+    widget_class->size_allocate = gtk_myfixed_size_allocate;
+    widget_class->draw = gtk_myfixed_draw;
+    widget_class->expose_event = gtk_myfixed_expose;
+
+    container_class->add = gtk_myfixed_add;
+    container_class->remove = gtk_myfixed_remove;
 #if (GTK_MINOR_VERSION > 0)
-  container_class->forall = gtk_myfixed_foreach;
+    container_class->forall = gtk_myfixed_foreach;
 #else
-  container_class->foreach = gtk_myfixed_foreach;
+    container_class->foreach = gtk_myfixed_foreach;
 #endif
 
 #if (GTK_MINOR_VERSION > 0)
-  container_class->child_type = gtk_myfixed_child_type;
+    container_class->child_type = gtk_myfixed_child_type;
 #endif
 
 #if (GTK_MINOR_VERSION > 0)
-  klass->set_scroll_adjustments = gtk_myfixed_scroll_set_adjustments;
+    klass->set_scroll_adjustments = gtk_myfixed_scroll_set_adjustments;
 
-  widget_class->set_scroll_adjustments_signal =
+    widget_class->set_scroll_adjustments_signal =
     gtk_signal_new ("set_scroll_adjustments",
                    GTK_RUN_LAST,
                    object_class->type,
@@ -142,124 +141,125 @@ gtk_myfixed_class_init (GtkMyFixedClass *klass)
 static GtkType
 gtk_myfixed_child_type (GtkContainer     *container)
 {
-  return GTK_TYPE_WIDGET;
+    return GTK_TYPE_WIDGET;
 }
 #endif
 
 static void
 gtk_myfixed_init (GtkMyFixed *myfixed)
 {
-  GTK_WIDGET_UNSET_FLAGS (myfixed, GTK_NO_WINDOW);
+    GTK_WIDGET_UNSET_FLAGS (myfixed, GTK_NO_WINDOW);
   
 #if (GTK_MINOR_VERSION == 0)
-  GTK_WIDGET_SET_FLAGS (myfixed, GTK_BASIC);
+    GTK_WIDGET_SET_FLAGS (myfixed, GTK_BASIC);
 #endif
 
 #if (GTK_MINOR_VERSION > 0)
-  myfixed->shadow_type = GTK_SHADOW_NONE;
+    myfixed->shadow_type = GTK_SHADOW_NONE;
 #endif
 
-  myfixed->children = NULL;
+    myfixed->children = NULL;
 }
 
 GtkWidget*
 gtk_myfixed_new ()
 {
-  GtkMyFixed *myfixed;
+    GtkMyFixed *myfixed;
 
-  myfixed = gtk_type_new (gtk_myfixed_get_type ());
+    myfixed = gtk_type_new (gtk_myfixed_get_type ());
   
-  return GTK_WIDGET (myfixed);
+    return GTK_WIDGET (myfixed);
 }
 
 #if (GTK_MINOR_VERSION > 0)
-void  gtk_myfixed_scroll_set_adjustments (GtkMyFixed     *myfixed,
-                                              GtkAdjustment *hadj,
-                                              GtkAdjustment *vadj)
+void  
+gtk_myfixed_scroll_set_adjustments (GtkMyFixed     *myfixed,
+                                   GtkAdjustment  *hadj,
+                                   GtkAdjustment  *vadj)
 {
    /* OK, this is embarassing, but this function has to be here */
 }
 
 void 
-gtk_myfixed_set_shadow_type (GtkMyFixed   *myfixed,
-                             GtkShadowType  type)
+gtk_myfixed_set_shadow_type (GtkMyFixed    *myfixed,
+                            GtkShadowType  type)
 {
-  g_return_if_fail (myfixed != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (myfixed));
+    g_return_if_fail (myfixed != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (myfixed));
 
-  if ((GtkShadowType) myfixed->shadow_type != type)
+    if ((GtkShadowType) myfixed->shadow_type != type)
     {
-      myfixed->shadow_type = type;
+        myfixed->shadow_type = type;
 
-      if (GTK_WIDGET_VISIBLE (myfixed))
+        if (GTK_WIDGET_VISIBLE (myfixed))
        {
-         gtk_widget_size_allocate (GTK_WIDGET (myfixed), &(GTK_WIDGET (myfixed)->allocation));
-         gtk_widget_queue_draw (GTK_WIDGET (myfixed));
+           gtk_widget_size_allocate (GTK_WIDGET (myfixed), &(GTK_WIDGET (myfixed)->allocation));
+           gtk_widget_queue_draw (GTK_WIDGET (myfixed));
        }
     }
 }
 #endif
 
 void
-gtk_myfixed_put (GtkMyFixed   *myfixed,
-                 GtkWidget      *widget,
+gtk_myfixed_put (GtkMyFixed    *myfixed,
+                 GtkWidget     *widget,
                  gint16         x,
                  gint16         y,
                 gint16         width,
                 gint16         height)
 {
-  GtkMyFixedChild *child_info;
-
-  g_return_if_fail (myfixed != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (myfixed));
-  g_return_if_fail (widget != NULL);
-
-  child_info = g_new (GtkMyFixedChild, 1);
-  child_info->widget = widget;
-  child_info->x = x;
-  child_info->y = y;
-  child_info->width = width;
-  child_info->height = height;
+    GtkMyFixedChild *child_info;
+
+    g_return_if_fail (myfixed != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (myfixed));
+    g_return_if_fail (widget != NULL);
+
+    child_info = g_new (GtkMyFixedChild, 1);
+    child_info->widget = widget;
+    child_info->x = x;
+    child_info->y = y;
+    child_info->width = width;
+    child_info->height = height;
   
-  gtk_widget_set_parent (widget, GTK_WIDGET (myfixed));
+    gtk_widget_set_parent (widget, GTK_WIDGET (myfixed));
 
-  myfixed->children = g_list_append (myfixed->children, child_info); 
+    myfixed->children = g_list_append (myfixed->children, child_info); 
 
-  if (GTK_WIDGET_REALIZED (myfixed))
-    gtk_widget_realize (widget);
+    if (GTK_WIDGET_REALIZED (myfixed))
+        gtk_widget_realize (widget);
 
-  if (GTK_WIDGET_VISIBLE (myfixed) && GTK_WIDGET_VISIBLE (widget))
+    if (GTK_WIDGET_VISIBLE (myfixed) && GTK_WIDGET_VISIBLE (widget))
     {
-      if (GTK_WIDGET_MAPPED (myfixed))
-       gtk_widget_map (widget);
+        if (GTK_WIDGET_MAPPED (myfixed))
+           gtk_widget_map (widget);
       
-      gtk_widget_queue_resize (GTK_WIDGET (myfixed));
+        gtk_widget_queue_resize (GTK_WIDGET (myfixed));
     }
 }
 
 void
-gtk_myfixed_move (GtkMyFixed     *myfixed,
-                  GtkWidget      *widget,
+gtk_myfixed_move (GtkMyFixed    *myfixed,
+                  GtkWidget     *widget,
                   gint16         x,
                   gint16         y)
 {
-  GtkMyFixedChild *child;
-  GList *children;
+    GtkMyFixedChild *child;
+    GList *children;
 
-  g_return_if_fail (myfixed != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (myfixed));
-  g_return_if_fail (widget != NULL);
+    g_return_if_fail (myfixed != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (myfixed));
+    g_return_if_fail (widget != NULL);
 
-  children = myfixed->children;
-  while (children)
+    children = myfixed->children;
+    while (children)
     {
-      child = children->data;
-      children = children->next;
+        child = children->data;
+        children = children->next;
       
-      if (child->widget == widget)
+        if (child->widget == widget)
         {
-           gtk_myfixed_set_size( myfixed, widget, x, y, child->width, child->height );
-          break;
+            gtk_myfixed_set_size( myfixed, widget, x, y, child->width, child->height );
+           break;
        }
     }
 }
@@ -270,78 +270,85 @@ gtk_myfixed_resize (GtkMyFixed     *myfixed,
                    gint16         width,
                    gint16         height)
 {
-  GtkMyFixedChild *child;
-  GList *children;
+    GtkMyFixedChild *child;
+    GList *children;
 
-  g_return_if_fail (myfixed != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (myfixed));
-  g_return_if_fail (widget != NULL);
+    g_return_if_fail (myfixed != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (myfixed));
+    g_return_if_fail (widget != NULL);
 
-  children = myfixed->children;
-  while (children)
+    children = myfixed->children;
+    while (children)
     {
-      child = children->data;
-      children = children->next;
+        child = children->data;
+        children = children->next;
       
-      if (child->widget == widget)
+        if (child->widget == widget)
         {
-           gtk_myfixed_set_size( myfixed, widget, child->x, child->y, width, height );
-          break;
+             gtk_myfixed_set_size( myfixed, widget, child->x, child->y, width, height );
+            break;
        }
     }
 }
 
 void
-gtk_myfixed_set_size (GtkMyFixed     *myfixed,
-                      GtkWidget      *widget,
+gtk_myfixed_set_size (GtkMyFixed    *myfixed,
+                      GtkWidget     *widget,
                       gint16         x,
                       gint16         y,
                      gint16         width,
                      gint16         height)
 {
-  GtkMyFixedChild *child;
-  GList *children;
-  GtkAllocation child_allocation;
+    GtkMyFixedChild *child;
+    GList *children;
+    GtkAllocation child_allocation;
 
-  g_return_if_fail (myfixed != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (myfixed));
-  g_return_if_fail (widget != NULL);
+    g_return_if_fail (myfixed != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (myfixed));
+    g_return_if_fail (widget != NULL);
 
-  children = myfixed->children;
-  while (children)
+    children = myfixed->children;
+    while (children)
     {
-      child = children->data;
-      children = children->next;
+        child = children->data;
+        children = children->next;
 
-      if (child->widget == widget)
+        if (child->widget == widget)
         {
-         if ((child->x == x) && 
-             (child->y == y) &&
-             (child->width == width) && 
-             (child->height == height)) return;
+           if ((child->x == x) && 
+               (child->y == y) &&
+               (child->width == width) && 
+               (child->height == height)) return;
          
-          child->x = x;
-          child->y = y;
-          child->width = width;
-          child->height = height;
-
-          if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (myfixed))
-         {
-             if ((child->width > 1) && (child->height > 1) && (GTK_WIDGET_REALIZED(widget)))
-            {
-                child_allocation.x = child->x;
-                child_allocation.y = child->y;
-                child_allocation.width = child->width;
-                child_allocation.height = child->height;
-                gtk_widget_size_allocate (widget, &child_allocation);
-             } 
-            else 
-            {
-                gtk_widget_queue_resize (GTK_WIDGET (myfixed));
-            }
-         }
-
-          break;
+            child->x = x;
+            child->y = y;
+            child->width = width;
+            child->height = height;
+
+            if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (myfixed))
+           {
+                if ((child->width > 1) && (child->height > 1) && (GTK_WIDGET_REALIZED(widget)))
+               {
+                    child_allocation.x = child->x;
+                    child_allocation.y = child->y;
+                    child_allocation.width = MAX( child->width, 1 );
+                    child_allocation.height = MAX( child->height, 1 );
+               
+                   /* work around for GTK bug when moving widgets outside
+                      the X window -> do NOT move them entirely outside */
+                   if (child_allocation.y + child_allocation.height < 0)
+                       child_allocation.y = -child_allocation.height;
+                   if (child_allocation.x + child_allocation.width < 0)
+                       child_allocation.x = -child_allocation.width;
+               
+                    gtk_widget_size_allocate (widget, &child_allocation);
+                } 
+               else 
+               {
+                    gtk_widget_queue_resize (GTK_WIDGET (myfixed));
+               } 
+           }
+            break;
         }
     }
 }
@@ -349,220 +356,224 @@ gtk_myfixed_set_size (GtkMyFixed     *myfixed,
 static void
 gtk_myfixed_map (GtkWidget *widget)
 {
-  GtkMyFixed *myfixed;
-  GtkMyFixedChild *child;
-  GList *children;
+    GtkMyFixed *myfixed;
+    GtkMyFixedChild *child;
+    GList *children;
 
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (widget));
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (widget));
 
-  GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
-  myfixed = GTK_MYFIXED (widget);
+    GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
+    myfixed = GTK_MYFIXED (widget);
 
-  children = myfixed->children;
-  while (children)
+    children = myfixed->children;
+    while (children)
     {
-      child = children->data;
-      children = children->next;
+        child = children->data;
+        children = children->next;
 
-      if (GTK_WIDGET_VISIBLE (child->widget) &&
-         !GTK_WIDGET_MAPPED (child->widget))
-       gtk_widget_map (child->widget);
+        if (GTK_WIDGET_VISIBLE (child->widget) && !GTK_WIDGET_MAPPED (child->widget))
+           gtk_widget_map (child->widget);
     }
     
-  gdk_window_show (widget->window);
+    gdk_window_show (widget->window);
 }
 
 #if (GTK_MINOR_VERSION == 0)
 static void
 gtk_myfixed_unmap (GtkWidget *widget)
 {
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (widget));
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (widget));
 
-  GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
+    GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
 }
 #endif
 
 static void
 gtk_myfixed_realize (GtkWidget *widget)
 {
-  GtkMyFixed *myfixed;
-  GdkWindowAttr attributes;
-  gint attributes_mask;
+    GtkMyFixed *myfixed;
+    GdkWindowAttr attributes;
+    gint attributes_mask;
 
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (widget));
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (widget));
 
-  myfixed = GTK_MYFIXED (widget);
+    myfixed = GTK_MYFIXED (widget);
   
-  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+    GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
 
-  attributes.window_type = GDK_WINDOW_CHILD;
+    attributes.window_type = GDK_WINDOW_CHILD;
   
 #if (GTK_MINOR_VERSION > 0)
-  attributes.x = widget->allocation.x;
-  attributes.y = widget->allocation.y;
-  attributes.width = widget->allocation.width;
-  attributes.height = widget->allocation.height;
-
-  if (myfixed->shadow_type != GTK_SHADOW_NONE)
-  {
-      attributes.x += 2;
-      attributes.y += 2;
-      attributes.width -= 4;
-      attributes.height -= 4;
-  }
+    attributes.x = widget->allocation.x;
+    attributes.y = widget->allocation.y;
+    attributes.width = widget->allocation.width;
+    attributes.height = widget->allocation.height;
+
+    if (myfixed->shadow_type != GTK_SHADOW_NONE)
+    {
+        attributes.x += 2;
+        attributes.y += 2;
+        attributes.width -= 4;
+        attributes.height -= 4;
+    }
     
-  if (attributes.width < 2) attributes.width = 2;
-  if (attributes.height < 2) attributes.height = 2;
+    if (attributes.width < 2) attributes.width = 2;
+    if (attributes.height < 2) attributes.height = 2;
 #else
-  attributes.x = widget->allocation.x;
-  attributes.y = widget->allocation.y;
-  attributes.width = 32000;
-  attributes.height = 32000;
+    attributes.x = widget->allocation.x;
+    attributes.y = widget->allocation.y;
+    attributes.width = 32000;
+    attributes.height = 32000;
 #endif
-  attributes.wclass = GDK_INPUT_OUTPUT;
-  attributes.visual = gtk_widget_get_visual (widget);
-  attributes.colormap = gtk_widget_get_colormap (widget);
-  attributes.event_mask = gtk_widget_get_events (widget);
-  attributes.event_mask |= 
-  GDK_EXPOSURE_MASK    |
-  GDK_POINTER_MOTION_MASK      |
-  GDK_POINTER_MOTION_HINT_MASK  |
-  GDK_BUTTON_MOTION_MASK       |
-  GDK_BUTTON1_MOTION_MASK      |
-  GDK_BUTTON2_MOTION_MASK      |
-  GDK_BUTTON3_MOTION_MASK      |
-  GDK_BUTTON_PRESS_MASK                |
-  GDK_BUTTON_RELEASE_MASK      |
-  GDK_KEY_PRESS_MASK           |
-  GDK_KEY_RELEASE_MASK         |
-  GDK_ENTER_NOTIFY_MASK                |
-  GDK_LEAVE_NOTIFY_MASK                |
-  GDK_FOCUS_CHANGE_MASK;
-
-  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-
-  widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, 
-                                  attributes_mask);
-  gdk_window_set_user_data (widget->window, widget);
+    attributes.wclass = GDK_INPUT_OUTPUT;
+    attributes.visual = gtk_widget_get_visual (widget);
+    attributes.colormap = gtk_widget_get_colormap (widget);
+    attributes.event_mask = gtk_widget_get_events (widget);
+    attributes.event_mask |= 
+       GDK_EXPOSURE_MASK       |
+       GDK_POINTER_MOTION_MASK |
+       GDK_POINTER_MOTION_HINT_MASK  |
+       GDK_BUTTON_MOTION_MASK  |
+       GDK_BUTTON1_MOTION_MASK |
+       GDK_BUTTON2_MOTION_MASK |
+       GDK_BUTTON3_MOTION_MASK |
+       GDK_BUTTON_PRESS_MASK   |
+       GDK_BUTTON_RELEASE_MASK |
+       GDK_KEY_PRESS_MASK      |
+       GDK_KEY_RELEASE_MASK    |
+       GDK_ENTER_NOTIFY_MASK   |
+       GDK_LEAVE_NOTIFY_MASK   |
+       GDK_FOCUS_CHANGE_MASK;
+    attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+
+    widget->window = gdk_window_new( gtk_widget_get_parent_window (widget), &attributes, 
+                                    attributes_mask);
+    gdk_window_set_user_data (widget->window, widget);
     
-  widget->style = gtk_style_attach (widget->style, widget->window);
-  gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
+    widget->style = gtk_style_attach (widget->style, widget->window);
+    gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
 }
 
 static void
 gtk_myfixed_size_request (GtkWidget      *widget,
-                       GtkRequisition *requisition)
+                         GtkRequisition *requisition)
 {
-  GtkMyFixed *myfixed;
-  GtkMyFixedChild *child;
-  GList *children;
-  GtkRequisition child_requisition;
+    GtkMyFixed *myfixed;
+    GtkMyFixedChild *child;
+    GList *children;
+    GtkRequisition child_requisition;
   
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (widget));
-  g_return_if_fail (requisition != NULL);
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (widget));
+    g_return_if_fail (requisition != NULL);
 
-  myfixed = GTK_MYFIXED (widget);
+    myfixed = GTK_MYFIXED (widget);
   
-  children = myfixed->children;
-  while (children)
+    children = myfixed->children;
+    while (children)
     {
-      child = children->data;
-      children = children->next;
+        child = children->data;
+        children = children->next;
 
-      if (GTK_WIDGET_VISIBLE (child->widget))
+        if (GTK_WIDGET_VISIBLE (child->widget))
        {
-          gtk_widget_size_request (child->widget, &child_requisition);
+            gtk_widget_size_request (child->widget, &child_requisition);
        }
     }
     
-  /* request very little, I'm not sure if requesting nothing
-     will always have positive effects on stability... */
-  requisition->width = 2;
-  requisition->height = 2;
+    /* request very little, I'm not sure if requesting nothing
+       will always have positive effects on stability... */
+    requisition->width = 2;
+    requisition->height = 2;
 }
 
 static void
 gtk_myfixed_size_allocate (GtkWidget     *widget,
                           GtkAllocation *allocation)
 {
-  GtkMyFixed *myfixed;
-  gint border;
-  GtkMyFixedChild *child;
-  GtkAllocation child_allocation; 
-  GList *children; 
+    GtkMyFixed *myfixed;
+    gint border;
+    GtkMyFixedChild *child;
+    GtkAllocation child_allocation; 
+    GList *children; 
 
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED(widget));
-  g_return_if_fail (allocation != NULL);
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED(widget));
+    g_return_if_fail (allocation != NULL);
 
-  myfixed = GTK_MYFIXED (widget);
+    myfixed = GTK_MYFIXED (widget);
   
     widget->allocation = *allocation;
 #if (GTK_MINOR_VERSION > 0)
-  if (myfixed->shadow_type == GTK_SHADOW_NONE)
-    border = 0;
-  else
-    border = 2;
+    if (myfixed->shadow_type == GTK_SHADOW_NONE)
+        border = 0;
+    else
+        border = 2;
 #else
-  border = 0;
+    border = 0;
 #endif
 
-  if (GTK_WIDGET_REALIZED (widget))
-  {
-    gdk_window_move_resize( widget->window, 
-                            allocation->x+border, allocation->y+border, 
+    if (GTK_WIDGET_REALIZED (widget))
+    {
+        gdk_window_move_resize( widget->window, 
+                                allocation->x+border, allocation->y+border, 
 #if (GTK_MINOR_VERSION > 0)
-                           allocation->width-border*2, allocation->height-border*2
+                               allocation->width-border*2, allocation->height-border*2
 #else
-                           32000, 32000
+                               32000, 32000
 #endif
-                           );
-  }
+                              );
+    }
 
-  children = myfixed->children;
-  while (children)
+    children = myfixed->children;
+    while (children)
     {
-      child = children->data;
-      children = children->next;
+        child = children->data;
+        children = children->next;
  
-      /* please look at the text in wxWindow::DoSetSize() on why the
-         test GTK_WIDGET_REALIZED() has to be here */
-      if (GTK_WIDGET_VISIBLE (child->widget))
-      { 
-/*
-        if (GTK_IS_NOTEBOOK(child->widget) && !GTK_WIDGET_REALIZED(child->widget))
-       {
-         gtk_widget_queue_resize( child->widget );
-       }
-       else
-*/
-       {
-         child_allocation.x = child->x;
-         child_allocation.y = child->y;
-         child_allocation.width = child->width;
-         child_allocation.height = child->height;
-         gtk_widget_size_allocate (child->widget, &child_allocation);
-       }
-     }
-   }
+        /* please look at the text in wxWindow::DoSetSize() on why the
+           test GTK_WIDGET_REALIZED() has to be here */
+        if (GTK_WIDGET_VISIBLE (child->widget))
+        { 
+/*          if (GTK_IS_NOTEBOOK(child->widget) && !GTK_WIDGET_REALIZED(child->widget))
+            {
+               gtk_widget_queue_resize( child->widget );
+           }
+           else */
+           {
+               child_allocation.x = child->x;
+               child_allocation.y = child->y;
+                child_allocation.width = MAX( child->width, 1 );
+                child_allocation.height = MAX( child->height, 1 );
+               
+               /* work around for GTK bug when moving widgets outside
+                  the X window -> do NOT move them entirely outside */
+               if (child_allocation.y + child_allocation.height < 0)
+                   child_allocation.y = -child_allocation.height;
+               if (child_allocation.x + child_allocation.width < 0)
+                   child_allocation.x = -child_allocation.width;
+         
+               gtk_widget_size_allocate (child->widget, &child_allocation);
+           }
+        }
+    }
 }
 
 static void
 gtk_myfixed_paint (GtkWidget    *widget,
                   GdkRectangle *area)
 {
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_MYFIXED (widget));
-  g_return_if_fail (area != NULL);
-
-  if (GTK_WIDGET_DRAWABLE (widget))
-      gdk_window_clear_area (widget->window,
-                            area->x, area->y,
-                            area->width, area->height);
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (GTK_IS_MYFIXED (widget));
+    g_return_if_fail (area != NULL);
+
+    if (GTK_WIDGET_DRAWABLE (widget))
+        gdk_window_clear_area (widget->window,
+                              area->x, area->y,
+                              area->width, area->height);
 }
 
 static void
index cc9855afaeae11b3a635d3ff4a7bbdf7c3c502f4..ade9c04dc7857a12f8d12e87482365ffb4feedc9 100644 (file)
@@ -635,7 +635,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
         }
     }
 
-    // win is a control: tab can be propagated up
+    /* win is a control: tab can be propagated up */
     if ( (!ret) &&
          ((gdk_event->keyval == GDK_Tab) || (gdk_event->keyval == GDK_ISO_Left_Tab)) &&
          (win->HasFlag(wxTE_PROCESS_TAB) == 0))