[gtk/wip/baedert/resize2: 325/325] asdf



commit 3b089714738d30df53adf3466237556b5f0fc466
Author: Timm Bäder <mail baedert org>
Date:   Tue Jun 2 09:53:28 2020 +0200

    asdf

 gtk/gtkroot.c           | 62 ++++++++++++++++++++++++++++++++++++++-----------
 gtk/gtkwidget.c         | 23 ++++++++++++++----
 gtk/gtkwindow.c         | 11 ++++++---
 tests/testwidgetfocus.c | 19 +++++++++++----
 4 files changed, 89 insertions(+), 26 deletions(-)
---
diff --git a/gtk/gtkroot.c b/gtk/gtkroot.c
index e9753bfb5f..1e5169cae0 100644
--- a/gtk/gtkroot.c
+++ b/gtk/gtkroot.c
@@ -177,7 +177,7 @@ gtk_root_needs_layout (GtkRoot *self)
   if (resize_widgets && resize_widgets->len > 0)
     return TRUE;
 
-  return gtk_widget_needs_allocate (GTK_WIDGET (self));
+  return FALSE;
 }
 
 static void
@@ -205,19 +205,19 @@ gtk_root_layout_cb (GdkFrameClock *clock,
 
   resize_widgets = g_object_get_qdata (G_OBJECT (self), quark_resize_widgets);
 
-  /*g_print ("===================\n");*/
+  g_print ("===================\n");
 
-  if (!resize_widgets)
+  if (!resize_widgets || resize_widgets->len == 0)
     {
       gtk_root_stop_layout (self);
       return;
     }
 
-  /*g_message ("Resize widgets: ");*/
+  g_message ("Resize widgets: ");
   for (guint p = 0; p < resize_widgets->len; p++)
     {
       GtkWidget *w = g_ptr_array_index (resize_widgets, p);
-      /*g_message ("%u: %s %p", p, G_OBJECT_TYPE_NAME (w), w);*/
+      g_message ("%u: %s %p", p, G_OBJECT_TYPE_NAME (w), w);
     }
 
   for (int i = 0; i < MAX_RESIZE_ITERATIONS; i++)
@@ -238,25 +238,49 @@ gtk_root_layout_cb (GdkFrameClock *clock,
         }
 
       gtk_root_unqueue_resize (self, GTK_WIDGET (self));
-
       gtk_native_check_resize (GTK_NATIVE (self));
 
+      g_message ("After Iteration %d:", i);
+      for (guint p = 0; p < resize_widgets->len; p++)
+        {
+          GtkWidget *w = g_ptr_array_index (resize_widgets, p);
+          g_message ("%p: %u: %s %p", self, p, G_OBJECT_TYPE_NAME (w), w);
+        }
+
+      if (resize_widgets->len > 0)
+        {
+          g_warning ("Resize widgets added during size-allocate:");
+          for (guint p = 0; p < resize_widgets->len; p++)
+            {
+              GtkWidget *w = g_ptr_array_index (resize_widgets, p);
+              g_message ("\t %s %p", G_OBJECT_TYPE_NAME (w), w);
+            }
+        }
+
+
+
+
       if (!gtk_root_needs_layout (self))
         {
           gtk_root_stop_layout (self);
           break;
         }
+      else {
+        g_message ("Need another layout iteration..");
+      }
     }
 
   g_object_set_qdata (G_OBJECT (self), quark_resize_iteration, NULL);
 
+  g_message ("#############################################");
+
   if (resize_widgets->len > 0)
     {
       g_message ("After %d Iterations:", MAX_RESIZE_ITERATIONS);
       for (guint p = 0; p < resize_widgets->len; p++)
         {
           GtkWidget *w = g_ptr_array_index (resize_widgets, p);
-          g_message ("%p: %u: %s %p", self, p, G_OBJECT_TYPE_NAME (w), w);
+          g_warning ("%p: %u: %s %p", self, p, G_OBJECT_TYPE_NAME (w), w);
         }
 
       g_ptr_array_set_size (resize_widgets, 0);
@@ -309,15 +333,24 @@ gtk_root_queue_resize (GtkRoot   *self,
 
   if (iteration != 0)
     {
-      g_warning ("Adding widget %s %p to be resized while root %s %p is in resize iteration %d",
-                 G_OBJECT_TYPE_NAME (widget), widget,
-                 G_OBJECT_TYPE_NAME (self), self,
-                 iteration);
+      /*g_warning ("Adding widget %s %p to be resized while root %s %p is in resize iteration %d",*/
+                 /*G_OBJECT_TYPE_NAME (widget), widget,*/
+                 /*G_OBJECT_TYPE_NAME (self), self,*/
+                 /*iteration);*/
     }
 
+    g_message (">> Adding %s %p to resize widgets", G_OBJECT_TYPE_NAME (widget), widget);
   if (!g_ptr_array_find (resize_widgets, widget, NULL)) {
     g_ptr_array_add (resize_widgets, widget);
-    /*g_message ("Adding %s %p to resize widgets", G_OBJECT_TYPE_NAME (widget), widget);*/
+    /*g_message (">> Adding %s %p to resize widgets", G_OBJECT_TYPE_NAME (widget), widget);*/
+
+    /*if (strcmp (G_OBJECT_TYPE_NAME (widget), "GtkBox") == 0)*/
+      /*g_message ("BOX IN %s", G_OBJECT_TYPE_NAME (self));*/
+
+    /*if (strcmp (G_OBJECT_TYPE_NAME (widget), "GtkBox") == 0 &&*/
+        /*strcmp (G_OBJECT_TYPE_NAME (self), "GtkTooltipWindow") != 0)*/
+      /*g_warning ("HUH!");*/
+
   }
 }
 
@@ -331,11 +364,12 @@ gtk_root_unqueue_resize (GtkRoot   *self,
   if (!resize_widgets)
     return;
 
+  g_message (">> Removing %s %p from resize widgets", G_OBJECT_TYPE_NAME (widget), widget);
   if (g_ptr_array_find (resize_widgets, widget, &index)) {
-    /*g_message ("Removing %s %p from resize widgets", G_OBJECT_TYPE_NAME (widget), widget);*/
+    /*g_message (">> Removing %s %p from resize widgets", G_OBJECT_TYPE_NAME (widget), widget);*/
     g_ptr_array_remove_index_fast (resize_widgets, index);
   } else {
-    /*g_critical ("Removing %s %p not possible!", G_OBJECT_TYPE_NAME (widget), widget);*/
+    /*g_message ("Removing %s %p not possible!", G_OBJECT_TYPE_NAME (widget), widget);*/
   }
 }
 
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 81beb126d1..a00f4beacd 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -2721,7 +2721,6 @@ gtk_widget_hide (GtkWidget *widget)
 
   if (_gtk_widget_get_visible (widget))
     {
-      GtkWidget *parent;
       GtkRoot *root;
 
       g_object_ref (widget);
@@ -2744,11 +2743,17 @@ gtk_widget_hide (GtkWidget *widget)
       g_signal_emit (widget, widget_signals[HIDE], 0);
       g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_VISIBLE]);
 
-      parent = gtk_widget_get_parent (widget);
-      if (parent)
-       gtk_widget_queue_resize (parent);
 
-      gtk_widget_queue_allocate (widget);
+      if (root)
+        {
+          GtkWidget *parent;
+
+          /* Unqueue resize on this widget and queue one on the parent */
+          gtk_root_unqueue_resize (root, widget);
+          parent = gtk_widget_get_parent (widget);
+          if (parent)
+            gtk_widget_queue_resize (parent);
+        }
 
       gtk_widget_pop_verify_invariants (widget);
       g_object_unref (widget);
@@ -3547,6 +3552,8 @@ gtk_widget_apply_resize_stuff (GtkWidget *widget)
   if (priv->resize_needed)
     return;
 
+  g_message ("%s: %s %p", __FUNCTION__, G_OBJECT_TYPE_NAME (widget), widget);
+
   priv->resize_needed = TRUE;
   gtk_widget_set_alloc_needed (widget);
 
@@ -3623,6 +3630,9 @@ gtk_widget_queue_resize (GtkWidget *widget)
 {
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
+  if (!gtk_widget_get_mapped (widget))
+    return;
+
   if (_gtk_widget_get_realized (widget))
     gtk_widget_queue_draw (widget);
 
@@ -3903,6 +3913,8 @@ gtk_widget_allocate (GtkWidget    *widget,
       goto out;
     }
 
+  g_message ("%s: %s %p", __FUNCTION__, G_OBJECT_TYPE_NAME (widget), widget);
+
 #ifdef G_ENABLE_DEBUG
   if (GTK_DISPLAY_DEBUG_CHECK (_gtk_widget_get_display (widget), RESIZE))
     {
@@ -10547,6 +10559,7 @@ gtk_widget_ensure_resize (GtkWidget *widget)
 
   priv->resize_needed = FALSE;
   _gtk_size_request_cache_clear (&priv->requests);
+  gtk_root_unqueue_resize (priv->root, widget);
 }
 
 void
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 4e687fa680..b3e88e5e79 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -1902,10 +1902,13 @@ gtk_window_native_check_resize (GtkNative *native)
   GtkWidget *widget = GTK_WIDGET (native);
   gint64 before = g_get_monotonic_time ();
 
-  if (!_gtk_widget_get_alloc_needed (widget))
+  if (!_gtk_widget_get_alloc_needed (widget)) {
+    g_message ("%s: 1", __FUNCTION__);
     gtk_widget_ensure_allocate (widget);
-  else if (gtk_widget_get_visible (widget))
+  }  else if (gtk_widget_get_visible (widget)) {
+    g_message ("%s: 2", __FUNCTION__);
     gtk_window_move_resize (GTK_WINDOW (native));
+  }
 
   if (GDK_PROFILER_IS_RUNNING)
     gdk_profiler_end_mark (before, "size allocation", "");
@@ -5513,6 +5516,7 @@ gtk_window_move_resize (GtkWindow *window)
                           &min, NULL, NULL, NULL);
       allocation.height = MAX (min, current_height - shadow.top - shadow.bottom);
 
+      g_message ("%s: 1", __FUNCTION__);
       gtk_widget_size_allocate (widget, &allocation, -1);
 
       /* If the configure request changed, it means that
@@ -5551,7 +5555,7 @@ gtk_window_move_resize (GtkWindow *window)
            */
           info->last = saved_last_info;
           g_clear_pointer (&priv->layout, gdk_toplevel_layout_unref);
-          gtk_widget_queue_resize (widget);
+          /*gtk_widget_queue_resize (widget);*/
         }
 
       return; /* Bail out, we didn't really process the move/resize */
@@ -5635,6 +5639,7 @@ gtk_window_move_resize (GtkWindow *window)
       gtk_widget_measure (widget, GTK_ORIENTATION_VERTICAL, allocation.width,
                           &min_height, NULL, NULL, NULL);
       allocation.height = MAX (current_height - shadow.top - shadow.bottom, min_height);
+      g_message ("%s: 2", __FUNCTION__);
       gtk_widget_size_allocate (widget, &allocation, -1);
     }
 
diff --git a/tests/testwidgetfocus.c b/tests/testwidgetfocus.c
index 0d583fe30a..a5643c6532 100644
--- a/tests/testwidgetfocus.c
+++ b/tests/testwidgetfocus.c
@@ -232,13 +232,24 @@ gtk_focus_widget_init (GtkFocusWidget *self)
 {
   GtkEventController *controller;
 
-  self->child1 = gtk_button_new_with_label ("1");
+  /*self->child1 = gtk_button_new_with_label ("1");*/
+  self->child1 = gtk_spinner_new ();
+  gtk_spinner_set_spinning (GTK_SPINNER (self->child1), TRUE);
   gtk_widget_set_parent (self->child1, GTK_WIDGET (self));
-  self->child2 = gtk_button_new_with_label ("2");
+  /*self->child2 = gtk_button_new_with_label ("2");*/
+  self->child2 = gtk_spinner_new ();
+  gtk_spinner_set_spinning (GTK_SPINNER (self->child2), TRUE);
+
   gtk_widget_set_parent (self->child2, GTK_WIDGET (self));
-  self->child3 = gtk_button_new_with_label ("3");
+  /*self->child3 = gtk_button_new_with_label ("3");*/
+  self->child3 = gtk_spinner_new ();
+  gtk_spinner_set_spinning (GTK_SPINNER (self->child3), TRUE);
+
   gtk_widget_set_parent (self->child3, GTK_WIDGET (self));
-  self->child4 = gtk_button_new_with_label ("4");
+  /*self->child4 = gtk_button_new_with_label ("4");*/
+  self->child4 = gtk_spinner_new ();
+  gtk_spinner_set_spinning (GTK_SPINNER (self->child4), TRUE);
+
   gtk_widget_set_parent (self->child4, GTK_WIDGET (self));
 
   self->mouse_x = G_MININT;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]