[gtk+] entry: Move spinbutton size hack



commit 3982f05be4c228c3ec754a9783913b55d1ecef4d
Author: Benjamin Otte <otte redhat com>
Date:   Mon Jan 25 15:42:18 2016 +0100

    entry: Move spinbutton size hack
    
    If we want to do special sizing for the text, we need to do it for the
    text. Otherwise paddings, borders and entyr icons will screw up
    everything.

 gtk/gtkentry.c        |   14 ++++++++---
 gtk/gtkentryprivate.h |    4 +++
 gtk/gtkspinbutton.c   |   58 ++++++++++++++++++++++++------------------------
 3 files changed, 43 insertions(+), 33 deletions(-)
---
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index f4335eb..4e16870 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -148,7 +148,6 @@
  * .insertion-cursor.
  */
 
-
 #define MIN_ENTRY_WIDTH  150
 
 #define MAX_ICONS 2
@@ -3509,12 +3508,19 @@ gtk_entry_measure (GtkCssGadget   *gadget,
       char_pixels = (MAX (char_width, digit_width) + PANGO_SCALE - 1) / PANGO_SCALE;
 
       if (priv->width_chars < 0)
-        min = MIN_ENTRY_WIDTH;
+        {
+          if (GTK_IS_SPIN_BUTTON (entry))
+            min = gtk_spin_button_get_text_width (GTK_SPIN_BUTTON (entry));
+          else
+            min = MIN_ENTRY_WIDTH;
+        }
       else
-        min = char_pixels * priv->width_chars;
+        {
+          min = char_pixels * priv->width_chars;
+        }
 
       if (priv->max_width_chars < 0)
-        nat = MIN_ENTRY_WIDTH;
+        nat = min;
       else
         nat = char_pixels * priv->max_width_chars;
 
diff --git a/gtk/gtkentryprivate.h b/gtk/gtkentryprivate.h
index bc5e248..53a9078 100644
--- a/gtk/gtkentryprivate.h
+++ b/gtk/gtkentryprivate.h
@@ -24,6 +24,7 @@
 #include <gtk/gtkentrycompletion.h>
 #include <gtk/gtkentry.h>
 #include <gtk/gtkcssgadgetprivate.h>
+#include <gtk/gtkspinbutton.h>
 
 G_BEGIN_DECLS
 
@@ -91,6 +92,9 @@ GtkCssGadget* gtk_entry_get_gadget         (GtkEntry  *entry);
 void     _gtk_entry_grab_focus             (GtkEntry  *entry,
                                             gboolean   select_all);
 
+/* in gtkspinbutton.c (because I'm too lazy to create gtkspinbuttonprivate.h) */
+gint     gtk_spin_button_get_text_width    (GtkSpinButton *spin_button);
+
 G_END_DECLS
 
 #endif /* __GTK_ENTRY_PRIVATE_H__ */
diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c
index 3b619a7..dc39e38 100644
--- a/gtk/gtkspinbutton.c
+++ b/gtk/gtkspinbutton.c
@@ -1185,45 +1185,45 @@ gtk_spin_button_format_for_value (GtkSpinButton *spin_button,
   return buf;
 }
 
-static void
-gtk_spin_button_get_preferred_width (GtkWidget *widget,
-                                     gint      *minimum,
-                                     gint      *natural)
+gint
+gtk_spin_button_get_text_width (GtkSpinButton *spin_button)
 {
-  GtkSpinButton *spin_button = GTK_SPIN_BUTTON (widget);
   GtkSpinButtonPrivate *priv = spin_button->priv;
-  GtkEntry *entry = GTK_ENTRY (widget);
+  gint width, w;
+  PangoLayout *layout;
+  gchar *str;
 
-  GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->get_preferred_width (widget, minimum, natural);
+  layout = pango_layout_copy (gtk_entry_get_layout (GTK_ENTRY (spin_button)));
 
-  if (gtk_entry_get_width_chars (entry) < 0)
-    {
-      gint width, w;
-      PangoLayout *layout;
-      gchar *str;
+  /* Get max of MIN_SPIN_BUTTON_WIDTH, size of upper, size of lower */
+  width = MIN_SPIN_BUTTON_WIDTH;
 
-      layout = pango_layout_copy (gtk_entry_get_layout (entry));
+  str = gtk_spin_button_format_for_value (spin_button,
+                                          gtk_adjustment_get_upper (priv->adjustment));
+  w = measure_string_width (layout, str);
+  width = MAX (width, w);
+  g_free (str);
 
-      /* Get max of MIN_SPIN_BUTTON_WIDTH, size of upper, size of lower */
-      width = MIN_SPIN_BUTTON_WIDTH;
+  str = gtk_spin_button_format_for_value (spin_button,
+                                          gtk_adjustment_get_lower (priv->adjustment));
+  w = measure_string_width (layout, str);
+  width = MAX (width, w);
+  g_free (str);
 
-      str = gtk_spin_button_format_for_value (spin_button,
-                                              gtk_adjustment_get_upper (priv->adjustment));
-      w = measure_string_width (layout, str);
-      width = MAX (width, w);
-      g_free (str);
+  g_object_unref (layout);
 
-      str = gtk_spin_button_format_for_value (spin_button,
-                                              gtk_adjustment_get_lower (priv->adjustment));
-      w = measure_string_width (layout, str);
-      width = MAX (width, w);
-      g_free (str);
+  return width;
+}
 
-      *minimum = width;
-      *natural = width;
+static void
+gtk_spin_button_get_preferred_width (GtkWidget *widget,
+                                     gint      *minimum,
+                                     gint      *natural)
+{
+  GtkSpinButton *spin_button = GTK_SPIN_BUTTON (widget);
+  GtkSpinButtonPrivate *priv = spin_button->priv;
 
-      g_object_unref (layout);
-    }
+  GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->get_preferred_width (widget, minimum, natural);
 
   if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
     {


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