[gtk+] spinbutton: Make the entry gadget be the entry's gadget
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] spinbutton: Make the entry gadget be the entry's gadget
- Date: Fri, 22 Jan 2016 14:29:03 +0000 (UTC)
commit a6845091f9a216ff825b0ed445a3bc8d9b438287
Author: Benjamin Otte <otte redhat com>
Date: Thu Jan 21 01:22:41 2016 +0100
spinbutton: Make the entry gadget be the entry's gadget
This is a big and somewhat evil hack: We replace the entry's gadget's
node with the spinbutton's entry node.
gtk/gtkcssgadget.c | 4 +++-
gtk/gtkcssgadgetprivate.h | 2 ++
gtk/gtkentry.c | 6 ++++++
gtk/gtkentryprivate.h | 2 ++
gtk/gtkspinbutton.c | 35 +++++++++++------------------------
5 files changed, 24 insertions(+), 25 deletions(-)
---
diff --git a/gtk/gtkcssgadget.c b/gtk/gtkcssgadget.c
index 4d350f9..7f734de 100644
--- a/gtk/gtkcssgadget.c
+++ b/gtk/gtkcssgadget.c
@@ -193,12 +193,14 @@ gtk_css_gadget_unset_node (GtkCssGadget *gadget)
}
}
-static void
+void
gtk_css_gadget_set_node (GtkCssGadget *gadget,
GtkCssNode *node)
{
GtkCssGadgetPrivate *priv = gtk_css_gadget_get_instance_private (gadget);
+ gtk_css_gadget_unset_node (gadget);
+
if (node != NULL)
priv->node = g_object_ref (node);
else
diff --git a/gtk/gtkcssgadgetprivate.h b/gtk/gtkcssgadgetprivate.h
index 6d49173..324c0f8 100644
--- a/gtk/gtkcssgadgetprivate.h
+++ b/gtk/gtkcssgadgetprivate.h
@@ -78,6 +78,8 @@ GtkCssNode * gtk_css_gadget_get_node (GtkCssGadget
GtkCssStyle * gtk_css_gadget_get_style (GtkCssGadget *gadget);
GtkWidget * gtk_css_gadget_get_owner (GtkCssGadget *gadget);
+void gtk_css_gadget_set_node (GtkCssGadget *gadget,
+ GtkCssNode *node);
void gtk_css_gadget_set_visible (GtkCssGadget *gadget,
gboolean visible);
gboolean gtk_css_gadget_get_visible (GtkCssGadget *gadget);
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index d6ec11d..1529145 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -6873,6 +6873,12 @@ _gtk_entry_get_im_context (GtkEntry *entry)
return entry->priv->im_context;
}
+GtkCssGadget *
+gtk_entry_get_gadget (GtkEntry *entry)
+{
+ return entry->priv->gadget;
+}
+
static gint
gtk_entry_find_position (GtkEntry *entry,
gint x)
diff --git a/gtk/gtkentryprivate.h b/gtk/gtkentryprivate.h
index fbc0efc..bc5e248 100644
--- a/gtk/gtkentryprivate.h
+++ b/gtk/gtkentryprivate.h
@@ -23,6 +23,7 @@
#include <gtk/gtkliststore.h>
#include <gtk/gtkentrycompletion.h>
#include <gtk/gtkentry.h>
+#include <gtk/gtkcssgadgetprivate.h>
G_BEGIN_DECLS
@@ -86,6 +87,7 @@ gchar* _gtk_entry_get_display_text (GtkEntry *entry,
void _gtk_entry_get_borders (GtkEntry *entry,
GtkBorder *borders);
GtkIMContext* _gtk_entry_get_im_context (GtkEntry *entry);
+GtkCssGadget* gtk_entry_get_gadget (GtkEntry *entry);
void _gtk_entry_grab_focus (GtkEntry *entry,
gboolean select_all);
diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c
index 7e256df..3b619a7 100644
--- a/gtk/gtkspinbutton.c
+++ b/gtk/gtkspinbutton.c
@@ -184,7 +184,6 @@ struct _GtkSpinButtonPrivate
GdkWindow *down_panel;
GdkWindow *up_panel;
- GtkCssNode *entry_node;
GtkCssGadget *down_button;
GtkCssGadget *up_button;
@@ -728,17 +727,6 @@ swipe_gesture_update (GtkGesture *gesture,
}
static void
-node_style_changed_cb (GtkCssNode *node,
- GtkCssStyleChange *change,
- GtkWidget *widget)
-{
- if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_SIZE | GTK_CSS_AFFECTS_CLIP))
- gtk_widget_queue_resize (widget);
- else
- gtk_widget_queue_draw (widget);
-}
-
-static void
update_node_ordering (GtkSpinButton *spin_button)
{
GtkSpinButtonPrivate *priv = spin_button->priv;
@@ -751,7 +739,7 @@ update_node_ordering (GtkSpinButton *spin_button)
{
if (gtk_widget_get_direction (GTK_WIDGET (spin_button)) == GTK_TEXT_DIR_LTR)
{
- first = priv->entry_node;
+ first = gtk_css_gadget_get_node (gtk_entry_get_gadget (GTK_ENTRY (spin_button)));
middle = gtk_css_gadget_get_node (priv->down_button);
last = gtk_css_gadget_get_node (priv->up_button);
}
@@ -759,13 +747,13 @@ update_node_ordering (GtkSpinButton *spin_button)
{
first = gtk_css_gadget_get_node (priv->up_button);
middle = gtk_css_gadget_get_node (priv->down_button);
- last = priv->entry_node;
+ last = gtk_css_gadget_get_node (gtk_entry_get_gadget (GTK_ENTRY (spin_button)));
}
}
else
{
first = gtk_css_gadget_get_node (priv->up_button);
- middle = priv->entry_node;
+ middle = gtk_css_gadget_get_node (gtk_entry_get_gadget (GTK_ENTRY (spin_button)));
last = gtk_css_gadget_get_node (priv->down_button);
}
@@ -777,7 +765,7 @@ static void
gtk_spin_button_init (GtkSpinButton *spin_button)
{
GtkSpinButtonPrivate *priv;
- GtkCssNode *widget_node;
+ GtkCssNode *widget_node, *entry_node;
spin_button->priv = gtk_spin_button_get_instance_private (spin_button);
priv = spin_button->priv;
@@ -805,12 +793,12 @@ gtk_spin_button_init (GtkSpinButton *spin_button)
widget_node = gtk_widget_get_css_node (GTK_WIDGET (spin_button));
- priv->entry_node = gtk_css_node_new ();
- gtk_css_node_set_name (priv->entry_node, I_("entry"));
- gtk_css_node_set_parent (priv->entry_node, widget_node);
- gtk_css_node_set_state (priv->entry_node, gtk_css_node_get_state (widget_node));
- g_signal_connect_object (priv->entry_node, "style-changed", G_CALLBACK (node_style_changed_cb),
spin_button, 0);
- g_object_unref (priv->entry_node);
+ entry_node = gtk_css_node_new ();
+ gtk_css_node_set_name (entry_node, I_("entry"));
+ gtk_css_node_set_parent (entry_node, widget_node);
+ gtk_css_node_set_state (entry_node, gtk_css_node_get_state (widget_node));
+ gtk_css_gadget_set_node (gtk_entry_get_gadget (GTK_ENTRY (spin_button)), entry_node);
+ g_object_unref (entry_node);
priv->down_button = gtk_icon_helper_new_named ("button",
GTK_WIDGET (spin_button));
@@ -1409,7 +1397,6 @@ gtk_spin_button_state_flags_changed (GtkWidget *widget,
GtkStateFlags previous_state)
{
GtkSpinButton *spin = GTK_SPIN_BUTTON (widget);
- GtkSpinButtonPrivate *priv = spin->priv;
if (!gtk_widget_is_sensitive (widget))
{
@@ -1417,7 +1404,7 @@ gtk_spin_button_state_flags_changed (GtkWidget *widget,
gtk_widget_queue_draw (GTK_WIDGET (spin));
}
- gtk_css_node_set_state (priv->entry_node, gtk_widget_get_state_flags (widget));
+ gtk_css_gadget_set_state (gtk_entry_get_gadget (GTK_ENTRY (widget)), gtk_widget_get_state_flags (widget));
update_node_state (spin);
GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->state_flags_changed (widget, previous_state);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]