[gtk/text: 3/12] spin button: Implement and use editable interface



commit 66748550004bf781c94f1d2b29bac175f55fb69f
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Feb 14 00:54:07 2019 -0500

    spin button: Implement and use editable interface

 gtk/gtkspinbutton.c | 117 +++++++++++++++-------------------------------------
 1 file changed, 33 insertions(+), 84 deletions(-)
---
diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c
index f290391964..68a30a1f34 100644
--- a/gtk/gtkspinbutton.c
+++ b/gtk/gtkspinbutton.c
@@ -35,6 +35,7 @@
 #include "gtkbutton.h"
 #include "gtkcssstylepropertyprivate.h"
 #include "gtkeditable.h"
+#include "gtkeditableprivate.h"
 #include "gtkentry.h"
 #include "gtkeventcontrollerkey.h"
 #include "gtkeventcontrollermotion.h"
@@ -221,9 +222,6 @@ enum {
   PROP_WRAP,
   PROP_UPDATE_POLICY,
   PROP_VALUE,
-  PROP_WIDTH_CHARS,
-  PROP_MAX_WIDTH_CHARS,
-  PROP_TEXT,
   NUM_SPINBUTTON_PROPS,
   PROP_ORIENTATION,
 };
@@ -385,33 +383,9 @@ gtk_spin_button_class_init (GtkSpinButtonClass *class)
                          -G_MAXDOUBLE, G_MAXDOUBLE, 0.0,
                          GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
 
-  spinbutton_props[PROP_WIDTH_CHARS] =
-    g_param_spec_int ("width-chars",
-                      P_("Width in chars"),
-                      P_("Number of characters to leave space for in the entry"),
-                      -1, G_MAXINT,
-                      0,
-                      GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
-
-  spinbutton_props[PROP_MAX_WIDTH_CHARS] =
-    g_param_spec_int ("max-width-chars",
-                      P_("Maximum width in characters"),
-                      P_("The desired maximum width of the entry, in characters"),
-                      -1, G_MAXINT,
-                      0,
-                      GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
-
-  spinbutton_props[PROP_TEXT] =
-    g_param_spec_string ("text",
-                         P_("Text"),
-                         P_("The contents of the entry"),
-                         "0",  /* Default value of the default adjustment */
-                         GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
-
   g_object_class_install_properties (gobject_class, NUM_SPINBUTTON_PROPS, spinbutton_props);
-  g_object_class_override_property (gobject_class,
-                                    PROP_ORIENTATION,
-                                    "orientation");
+  gtk_editable_install_properties (gobject_class);
+  g_object_class_override_property (gobject_class, PROP_ORIENTATION, "orientation");
 
   /**
    * GtkSpinButton::input:
@@ -552,6 +526,7 @@ gtk_spin_button_class_init (GtkSpinButtonClass *class)
 static void
 gtk_spin_button_editable_init (GtkEditableInterface *iface)
 {
+  gtk_editable_delegate_iface_init (iface);
   iface->insert_text = gtk_spin_button_insert_text;
 }
 
@@ -564,6 +539,9 @@ gtk_spin_button_set_property (GObject      *object,
   GtkSpinButton *spin_button = GTK_SPIN_BUTTON (object);
   GtkSpinButtonPrivate *priv = gtk_spin_button_get_instance_private (spin_button);
 
+  if (gtk_editable_delegate_set_property (object, prop_id, value, pspec))
+    return;
+
   switch (prop_id)
     {
       GtkAdjustment *adjustment;
@@ -602,15 +580,6 @@ gtk_spin_button_set_property (GObject      *object,
     case PROP_ORIENTATION:
       gtk_spin_button_set_orientation (spin_button, g_value_get_enum (value));
       break;
-    case PROP_WIDTH_CHARS:
-      gtk_spin_button_set_width_chars (spin_button, g_value_get_int (value));
-      break;
-    case PROP_MAX_WIDTH_CHARS:
-      gtk_spin_button_set_max_width_chars (spin_button, g_value_get_int (value));
-      break;
-    case PROP_TEXT:
-      gtk_spin_button_set_text (spin_button, g_value_get_string (value));
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -626,6 +595,9 @@ gtk_spin_button_get_property (GObject      *object,
   GtkSpinButton *spin_button = GTK_SPIN_BUTTON (object);
   GtkSpinButtonPrivate *priv = gtk_spin_button_get_instance_private (spin_button);
 
+  if (gtk_editable_delegate_get_property (object, prop_id, value, pspec))
+    return;
+
   switch (prop_id)
     {
     case PROP_ADJUSTMENT:
@@ -655,15 +627,6 @@ gtk_spin_button_get_property (GObject      *object,
     case PROP_ORIENTATION:
       g_value_set_enum (value, priv->orientation);
       break;
-    case PROP_WIDTH_CHARS:
-      g_value_set_int (value, gtk_spin_button_get_width_chars (spin_button));
-      break;
-    case PROP_MAX_WIDTH_CHARS:
-      g_value_set_int (value, gtk_spin_button_get_max_width_chars (spin_button));
-      break;
-    case PROP_TEXT:
-      g_value_set_string (value, gtk_spin_button_get_text (spin_button));
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -867,14 +830,14 @@ gtk_spin_button_init (GtkSpinButton *spin_button)
   gtk_widget_set_parent (priv->box, GTK_WIDGET (spin_button));
 
   priv->entry = gtk_entry_new ();
-  gtk_entry_set_width_chars (GTK_ENTRY (priv->entry), 0);
-  gtk_entry_set_max_width_chars (GTK_ENTRY (priv->entry), 0);
+  gtk_editable_set_delegate (GTK_EDITABLE (spin_button), GTK_EDITABLE (priv->entry));
+  gtk_editable_set_width_chars (GTK_EDITABLE (priv->entry), 0);
+  gtk_editable_set_max_width_chars (GTK_EDITABLE (priv->entry), 0);
   gtk_widget_set_hexpand (priv->entry, TRUE);
   gtk_widget_set_vexpand (priv->entry, TRUE);
   g_signal_connect (priv->entry, "activate", G_CALLBACK (gtk_spin_button_activate), spin_button);
   gtk_container_add (GTK_CONTAINER (priv->box), priv->entry);
 
-
   priv->down_button = gtk_button_new ();
   gtk_container_add (GTK_CONTAINER (priv->down_button), gtk_image_new_from_icon_name 
("value-decrease-symbolic"));
   gtk_style_context_add_class (gtk_widget_get_style_context (priv->down_button), "image-button");
@@ -970,7 +933,7 @@ gtk_spin_button_realize (GtkWidget *widget)
    * 'output' signal; and if we don't have any explicit 'text' set initially,
    * fallback to the default output. */
   if (!return_val &&
-      (priv->numeric || gtk_entry_get_text (GTK_ENTRY (priv->entry)) == NULL))
+      (priv->numeric || gtk_editable_get_length (GTK_EDITABLE (priv->entry)) == 0))
     gtk_spin_button_default_output (spin_button);
 }
 
@@ -1026,7 +989,7 @@ gtk_spin_button_set_orientation (GtkSpinButton  *spin,
                                  GtkOrientation  orientation)
 {
   GtkSpinButtonPrivate *priv = gtk_spin_button_get_instance_private (spin);
-  GtkEntry *entry = GTK_ENTRY (priv->entry);
+  GtkEditable *editable = GTK_EDITABLE (priv->entry);
 
   if (priv->orientation == orientation)
     return;
@@ -1036,11 +999,11 @@ gtk_spin_button_set_orientation (GtkSpinButton  *spin,
 
   /* change alignment if it's the default */
   if (priv->orientation == GTK_ORIENTATION_VERTICAL &&
-      gtk_entry_get_alignment (entry) == 0.0)
-    gtk_entry_set_alignment (entry, 0.5);
+      gtk_editable_get_alignment (editable) == 0.0)
+    gtk_editable_set_alignment (editable, 0.5);
   else if (priv->orientation == GTK_ORIENTATION_HORIZONTAL &&
-           gtk_entry_get_alignment (entry) == 0.5)
-    gtk_entry_set_alignment (entry, 0.0);
+           gtk_editable_get_alignment (editable) == 0.5)
+    gtk_editable_set_alignment (editable, 0.0);
 
   if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
     {
@@ -1348,11 +1311,6 @@ gtk_spin_button_insert_text (GtkEditable *editable,
 {
   GtkSpinButton *spin = GTK_SPIN_BUTTON (editable);
   GtkSpinButtonPrivate *priv = gtk_spin_button_get_instance_private (spin);
-  GtkEntry *entry = GTK_ENTRY (priv->entry);
-  GtkEditableInterface *parent_editable_iface;
-
-  parent_editable_iface = g_type_interface_peek (gtk_spin_button_parent_class,
-                                                 GTK_TYPE_EDITABLE);
 
   if (priv->numeric)
     {
@@ -1365,8 +1323,8 @@ gtk_spin_button_insert_text (GtkEditable *editable,
       gint entry_length;
       const gchar *entry_text;
 
-      entry_length = gtk_entry_get_text_length (entry);
-      entry_text = gtk_entry_get_text (entry);
+      entry_length = gtk_editable_get_length (GTK_EDITABLE (priv->entry));
+      entry_text = gtk_editable_get_text (GTK_EDITABLE (priv->entry));
 
       lc = localeconv ();
 
@@ -1444,8 +1402,8 @@ gtk_spin_button_insert_text (GtkEditable *editable,
         }
     }
 
-  parent_editable_iface->insert_text (editable, new_text,
-                                      new_text_length, position);
+  gtk_editable_insert_text (GTK_EDITABLE (priv->entry),
+                            new_text, new_text_length, position);
 }
 
 static void
@@ -1505,8 +1463,9 @@ gtk_spin_button_default_input (GtkSpinButton *spin_button,
 {
   GtkSpinButtonPrivate *priv = gtk_spin_button_get_instance_private (spin_button);
   gchar *err = NULL;
+  const char *text = gtk_editable_get_text (GTK_EDITABLE (priv->entry));
 
-  *new_val = g_strtod (gtk_entry_get_text (GTK_ENTRY (priv->entry)), &err);
+  *new_val = g_strtod (text, &err);
   if (*err)
     return GTK_INPUT_ERROR;
   else
@@ -1520,8 +1479,8 @@ gtk_spin_button_default_output (GtkSpinButton *spin_button)
   gchar *buf = gtk_spin_button_format_for_value (spin_button,
                                                  gtk_adjustment_get_value (priv->adjustment));
 
-  if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (priv->entry))))
-    gtk_entry_set_text (GTK_ENTRY (priv->entry), buf);
+  if (strcmp (buf, gtk_editable_get_text (GTK_EDITABLE (priv->entry))))
+    gtk_editable_set_text (GTK_EDITABLE (priv->entry), buf);
 
   g_free (buf);
 }
@@ -2260,7 +2219,7 @@ gtk_spin_button_get_text (GtkSpinButton *spin_button)
 
   g_return_val_if_fail (GTK_IS_SPIN_BUTTON (spin_button), NULL);
 
-  return gtk_entry_get_text (GTK_ENTRY (priv->entry));
+  return gtk_editable_get_text (GTK_EDITABLE (priv->entry));
 }
 
 /**
@@ -2279,9 +2238,7 @@ gtk_spin_button_set_text (GtkSpinButton *spin_button,
 
   g_return_if_fail (GTK_IS_SPIN_BUTTON (spin_button));
 
-  gtk_entry_set_text (GTK_ENTRY (priv->entry), text);
-
-  g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_TEXT]);
+  gtk_editable_set_text (GTK_EDITABLE (priv->entry), text);
 }
 
 /**
@@ -2303,7 +2260,7 @@ gtk_spin_button_get_max_width_chars (GtkSpinButton *spin_button)
 
   g_return_val_if_fail (GTK_IS_SPIN_BUTTON (spin_button), -1);
 
-  return gtk_entry_get_max_width_chars (GTK_ENTRY (priv->entry));
+  return gtk_editable_get_max_width_chars (GTK_EDITABLE (priv->entry));
 }
 
 /**
@@ -2323,11 +2280,7 @@ gtk_spin_button_set_max_width_chars (GtkSpinButton *spin_button,
 
   g_return_if_fail (GTK_IS_SPIN_BUTTON (spin_button));
 
-  if (max_width_chars != gtk_entry_get_max_width_chars (GTK_ENTRY (priv->entry)))
-    {
-      gtk_entry_set_max_width_chars (GTK_ENTRY (priv->entry), max_width_chars);
-      g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_MAX_WIDTH_CHARS]);
-    }
+  gtk_editable_set_max_width_chars (GTK_EDITABLE (priv->entry), max_width_chars);
 }
 
 /**
@@ -2347,7 +2300,7 @@ gtk_spin_button_get_width_chars (GtkSpinButton *spin_button)
 
   g_return_val_if_fail (GTK_IS_SPIN_BUTTON (spin_button), -1);
 
-  return gtk_entry_get_width_chars (GTK_ENTRY (priv->entry));
+  return gtk_editable_get_width_chars (GTK_EDITABLE (priv->entry));
 }
 
 /**
@@ -2366,9 +2319,5 @@ gtk_spin_button_set_width_chars (GtkSpinButton *spin_button,
 
   g_return_if_fail (GTK_IS_SPIN_BUTTON (spin_button));
 
-  if (width_chars != gtk_entry_get_width_chars (GTK_ENTRY (priv->entry)))
-    {
-      gtk_entry_set_width_chars (GTK_ENTRY (priv->entry), width_chars);
-      g_object_notify_by_pspec (G_OBJECT (spin_button), spinbutton_props[PROP_WIDTH_CHARS]);
-    }
+  gtk_editable_set_width_chars (GTK_EDITABLE (priv->entry), width_chars);
 }


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