[libwnck/wip/muktupavels/tasklist: 4/5] tasklist: use minimum button size as minimum size




commit 58e28ed6f72166be667b681b7177d7bc3468fdd1
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Tue May 4 13:16:37 2021 +0300

    tasklist: use minimum button size as minimum size
    
    To make sure that container allocate enough size to fit at least
    one button in its minimum size.

 libwnck/tasklist.c | 46 +++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 43 insertions(+), 3 deletions(-)
---
diff --git a/libwnck/tasklist.c b/libwnck/tasklist.c
index ca32231..be6380a 100644
--- a/libwnck/tasklist.c
+++ b/libwnck/tasklist.c
@@ -1660,16 +1660,46 @@ wnck_tasklist_size_request  (GtkWidget      *widget,
     }
 }
 
+static void
+get_minimum_button_size (int *minimum_width,
+                         int *minimum_height)
+{
+  GtkWidget *button;
+
+  button = wnck_button_new ();
+  gtk_widget_show (button);
+
+  if (minimum_width != NULL)
+    gtk_widget_get_preferred_width (button, minimum_width, NULL);
+
+  if (minimum_height != NULL)
+    gtk_widget_get_preferred_height (button, minimum_height, NULL);
+
+  g_object_ref_sink (button);
+  g_object_unref (button);
+}
+
 static void
 wnck_tasklist_get_preferred_width (GtkWidget *widget,
                                    int       *minimum_width,
                                    int       *natural_width)
 {
+  WnckTasklist *self;
   GtkRequisition req;
 
+  self = WNCK_TASKLIST (widget);
+
   wnck_tasklist_size_request (widget, &req);
 
-  *minimum_width = *natural_width = req.width;
+  if (self->priv->windows == NULL &&
+      self->priv->startup_sequences == NULL)
+    {
+      *minimum_width = *natural_width = 0;
+      return;
+    }
+
+  get_minimum_button_size (minimum_width, NULL);
+  *natural_width = req.width;
 }
 
 static void
@@ -1677,13 +1707,23 @@ wnck_tasklist_get_preferred_height (GtkWidget *widget,
                                    int       *minimum_height,
                                    int       *natural_height)
 {
+  WnckTasklist *self;
   GtkRequisition req;
 
+  self = WNCK_TASKLIST (widget);
+
   wnck_tasklist_size_request (widget, &req);
 
-  *minimum_height = *natural_height = req.height;
-}
+  if (self->priv->windows == NULL &&
+      self->priv->startup_sequences == NULL)
+    {
+      *minimum_height = *natural_height = 0;
+      return;
+    }
 
+  get_minimum_button_size (NULL, minimum_height);
+  *natural_height = req.height;
+}
 
 /**
  * wnck_tasklist_get_size_hint_list:


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