]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/win_gtk.c
wxFileIn/OutputStream fix
[wxWidgets.git] / src / gtk1 / win_gtk.c
index 0477047b3c9db69d77c75d3235255aa08489fe15..e4fe2c1812ce0031f0b661f483f2e572b6b73d56 100644 (file)
@@ -202,9 +202,11 @@ gtk_myfixed_set_shadow_type (GtkMyFixed   *myfixed,
 
 void
 gtk_myfixed_put (GtkMyFixed   *myfixed,
-               GtkWidget      *widget,
-               gint16         x,
-               gint16         y)
+                 GtkWidget      *widget,
+                 gint16         x,
+                 gint16         y,
+                gint16         width,
+                gint16         height)
 {
   GtkMyFixedChild *child_info;
 
@@ -216,29 +218,90 @@ gtk_myfixed_put (GtkMyFixed   *myfixed,
   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));
 
   myfixed->children = g_list_append (myfixed->children, child_info); 
 
-  if (GTK_WIDGET_REALIZED (myfixed) && !GTK_WIDGET_REALIZED (widget))
+  if (GTK_WIDGET_REALIZED (myfixed))
     gtk_widget_realize (widget);
 
-  if (GTK_WIDGET_MAPPED (myfixed) && !GTK_WIDGET_MAPPED (widget))
-    gtk_widget_map (widget);
+  if (GTK_WIDGET_VISIBLE (myfixed) && GTK_WIDGET_VISIBLE (widget))
+    {
+      if (GTK_WIDGET_MAPPED (myfixed))
+       gtk_widget_map (widget);
+      
+      gtk_widget_queue_resize (GTK_WIDGET (myfixed));
+    }
+}
 
-  if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (myfixed))
-    gtk_widget_queue_resize (GTK_WIDGET (myfixed));
+void
+gtk_myfixed_move (GtkMyFixed     *myfixed,
+                  GtkWidget      *widget,
+                  gint16         x,
+                  gint16         y)
+{
+  GtkMyFixedChild *child;
+  GList *children;
+
+  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)
+    {
+      child = children->data;
+      children = children->next;
+      
+      if (child->widget == widget)
+        {
+           gtk_myfixed_set_size( myfixed, widget, x, y, child->width, child->height );
+          break;
+       }
+    }
+}
+
+void
+gtk_myfixed_resize (GtkMyFixed     *myfixed,
+                    GtkWidget      *widget,
+                   gint16         width,
+                   gint16         height)
+{
+  GtkMyFixedChild *child;
+  GList *children;
+
+  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)
+    {
+      child = children->data;
+      children = children->next;
+      
+      if (child->widget == widget)
+        {
+           gtk_myfixed_set_size( myfixed, widget, child->x, child->y, width, height );
+          break;
+       }
+    }
 }
 
 void
-gtk_myfixed_move (GtkMyFixed       *myfixed,
-                GtkWidget      *widget,
-                gint16         x,
-                gint16         y)
+gtk_myfixed_set_size (GtkMyFixed     *myfixed,
+                      GtkWidget      *widget,
+                      gint16         x,
+                      gint16         y,
+                     gint16         width,
+                     gint16         height)
 {
   GtkMyFixedChild *child;
   GList *children;
+  GtkAllocation child_allocation;
 
   g_return_if_fail (myfixed != NULL);
   g_return_if_fail (GTK_IS_MYFIXED (myfixed));
@@ -252,13 +315,31 @@ gtk_myfixed_move (GtkMyFixed       *myfixed,
 
       if (child->widget == widget)
         {
-         if ((child->x == x) && (child->y == y)) 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))
-            gtk_widget_queue_resize (GTK_WIDGET (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;
         }
@@ -385,12 +466,10 @@ gtk_myfixed_size_request (GtkWidget      *widget,
 
   myfixed = GTK_MYFIXED (widget);
   
-/*
-  requisition->width = 0;
-  requisition->height = 0;
-*/
-  requisition->width = widget->requisition.width;
-  requisition->height = widget->requisition.height;
+  /* request very little, I'm not sure if requesting nothing
+     will always have positive effects on stability... */
+  requisition->width = 2;
+  requisition->height = 2;
 
   children = myfixed->children;
   while (children)
@@ -407,7 +486,7 @@ gtk_myfixed_size_request (GtkWidget      *widget,
 
 static void
 gtk_myfixed_size_allocate (GtkWidget     *widget,
-                        GtkAllocation *allocation)
+                          GtkAllocation *allocation)
 {
   GtkMyFixed *myfixed;
   gint border;
@@ -457,8 +536,8 @@ gtk_myfixed_size_allocate (GtkWidget     *widget,
        {
          child_allocation.x = child->x;
          child_allocation.y = child->y;
-         child_allocation.width = child->widget->requisition.width;
-         child_allocation.height = child->widget->requisition.height;
+         child_allocation.width = child->width;
+         child_allocation.height = child->height;
          gtk_widget_size_allocate (child->widget, &child_allocation);
        }
     }
@@ -466,7 +545,7 @@ gtk_myfixed_size_allocate (GtkWidget     *widget,
 
 static void
 gtk_myfixed_paint (GtkWidget    *widget,
-                GdkRectangle *area)
+                  GdkRectangle *area)
 {
   g_return_if_fail (widget != NULL);
   g_return_if_fail (GTK_IS_MYFIXED (widget));
@@ -480,7 +559,7 @@ gtk_myfixed_paint (GtkWidget    *widget,
 
 static void
 gtk_myfixed_draw (GtkWidget    *widget,
-               GdkRectangle *area)
+                 GdkRectangle *area)
 {
   GtkMyFixed *myfixed;
   GtkMyFixedChild *child;
@@ -509,7 +588,7 @@ gtk_myfixed_draw (GtkWidget    *widget,
 
 static gint
 gtk_myfixed_expose (GtkWidget      *widget,
-                 GdkEventExpose *event)
+                   GdkEventExpose *event)
 {
   GtkMyFixed *myfixed;
   GtkMyFixedChild *child;
@@ -550,7 +629,7 @@ gtk_myfixed_add (GtkContainer *container,
   g_return_if_fail (GTK_IS_MYFIXED (container));
   g_return_if_fail (widget != NULL);
 
-  gtk_myfixed_put (GTK_MYFIXED (container), widget, 0, 0);
+  gtk_myfixed_put (GTK_MYFIXED (container), widget, 0, 0, 20, 20 );
 }
 
 static void