[gtk/wip/chergert/dropdown-show-arrow] dropdown: add GtkDropDown:show-arrow property
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/dropdown-show-arrow] dropdown: add GtkDropDown:show-arrow property
- Date: Wed, 6 Oct 2021 02:06:58 +0000 (UTC)
commit 0edcc6db892daacacf484e06954c6e5b03ec8f98
Author: Christian Hergert <chergert redhat com>
Date: Tue Oct 5 14:27:14 2021 -0700
dropdown: add GtkDropDown:show-arrow property
This allows hiding the arrow on the dropdown which cannot otherwise be
controlled via CSS.
gtk/gtkdropdown.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++--
gtk/gtkdropdown.h | 5 ++++
gtk/ui/gtkdropdown.ui | 2 +-
3 files changed, 84 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtkdropdown.c b/gtk/gtkdropdown.c
index baf918179d..cff1257973 100644
--- a/gtk/gtkdropdown.c
+++ b/gtk/gtkdropdown.c
@@ -91,6 +91,7 @@ struct _GtkDropDown
GtkWidget *popup;
GtkWidget *button;
+ GtkWidget *arrow;
GtkWidget *popup_list;
GtkWidget *button_stack;
@@ -99,8 +100,10 @@ struct _GtkDropDown
GtkWidget *search_box;
GtkWidget *search_entry;
- gboolean enable_search;
GtkExpression *expression;
+
+ guint enable_search : 1;
+ guint show_arrow : 1;
};
struct _GtkDropDownClass
@@ -118,6 +121,7 @@ enum
PROP_SELECTED_ITEM,
PROP_ENABLE_SEARCH,
PROP_EXPRESSION,
+ PROP_SHOW_ARROW,
N_PROPS
};
@@ -307,6 +311,10 @@ gtk_drop_down_get_property (GObject *object,
gtk_value_set_expression (value, self->expression);
break;
+ case PROP_SHOW_ARROW:
+ g_value_set_boolean (value, gtk_drop_down_get_show_arrow (self));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -347,6 +355,10 @@ gtk_drop_down_set_property (GObject *object,
gtk_drop_down_set_expression (self, gtk_value_get_expression (value));
break;
+ case PROP_SHOW_ARROW:
+ gtk_drop_down_set_show_arrow (self, g_value_get_boolean (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -519,9 +531,24 @@ gtk_drop_down_class_init (GtkDropDownClass *klass)
P_("Expression to determine strings to search for"),
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+ /**
+ * GtkDropDown:show-arrow: (attributes org.gtk.Property.get=gtk_drop_down_get_show_arrow
org.gtk.Property.set=gtk_drop_down_set_show_arrow)
+ *
+ * Whether to show an arrow within the GtkDropDown widget.
+ *
+ * Since: 4.6
+ */
+ properties[PROP_SHOW_ARROW] =
+ g_param_spec_boolean ("show-arrow",
+ P_("Show arrow"),
+ P_("Whether to show an arrow within the widget"),
+ TRUE,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
g_object_class_install_properties (gobject_class, N_PROPS, properties);
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/ui/gtkdropdown.ui");
+ gtk_widget_class_bind_template_child (widget_class, GtkDropDown, arrow);
gtk_widget_class_bind_template_child (widget_class, GtkDropDown, button);
gtk_widget_class_bind_template_child (widget_class, GtkDropDown, button_stack);
gtk_widget_class_bind_template_child (widget_class, GtkDropDown, button_item);
@@ -657,6 +684,8 @@ gtk_drop_down_init (GtkDropDown *self)
gtk_widget_init_template (GTK_WIDGET (self));
+ self->show_arrow = gtk_widget_get_visible (self->arrow);
+
set_default_factory (self);
}
@@ -851,7 +880,7 @@ gtk_drop_down_set_list_factory (GtkDropDown *self,
if (!g_set_object (&self->list_factory, factory))
return;
-
+
if (self->list_factory != NULL)
gtk_list_view_set_factory (GTK_LIST_VIEW (self->popup_list), self->list_factory);
else
@@ -938,6 +967,8 @@ gtk_drop_down_set_enable_search (GtkDropDown *self,
{
g_return_if_fail (GTK_IS_DROP_DOWN (self));
+ enable_search = !!enable_search;
+
if (self->enable_search == enable_search)
return;
@@ -945,7 +976,7 @@ gtk_drop_down_set_enable_search (GtkDropDown *self,
gtk_editable_set_text (GTK_EDITABLE (self->search_entry), "");
gtk_widget_set_visible (self->search_box, enable_search);
-
+
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ENABLE_SEARCH]);
}
@@ -1014,3 +1045,47 @@ gtk_drop_down_get_expression (GtkDropDown *self)
return self->expression;
}
+
+/**
+ * gtk_drop_down_set_show_arrow: (attributes org.gtk.Method.set_property=show-arrow)
+ * @self: a `GtkDropDown`
+ * @show_arrow: whether to show an arrow within the widget
+ *
+ * Sets whether an arrow will be displayed within the widget.
+ *
+ * Since: 4.6
+ */
+void
+gtk_drop_down_set_show_arrow (GtkDropDown *self,
+ gboolean show_arrow)
+{
+ g_return_if_fail (GTK_IS_DROP_DOWN (self));
+
+ show_arrow = !!show_arrow;
+
+ if (self->show_arrow == show_arrow)
+ return;
+
+ self->show_arrow = show_arrow;
+
+ gtk_widget_set_visible (self->arrow, show_arrow);
+ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SHOW_ARROW]);
+}
+
+/**
+ * gtk_drop_down_get_show_arrow: (attributes org.gtk.Method.set_property=show-arrow)
+ * @self: a `GtkDropDown`
+ *
+ * Returns whether to show an arrow within the widget.
+ *
+ * Returns: %TRUE if an arrow will be shown.
+ *
+ * Since: 4.6
+ **/
+gboolean
+gtk_drop_down_get_show_arrow (GtkDropDown *self)
+{
+ g_return_val_if_fail (GTK_IS_DROP_DOWN (self), FALSE);
+
+ return self->show_arrow;
+}
diff --git a/gtk/gtkdropdown.h b/gtk/gtkdropdown.h
index 78438cab72..542b71f2a7 100644
--- a/gtk/gtkdropdown.h
+++ b/gtk/gtkdropdown.h
@@ -77,6 +77,11 @@ void gtk_drop_down_set_enable_search (GtkDropDown
gboolean enable_search);
GDK_AVAILABLE_IN_ALL
gboolean gtk_drop_down_get_enable_search (GtkDropDown *self);
+GDK_AVAILABLE_IN_4_6
+void gtk_drop_down_set_show_arrow (GtkDropDown *self,
+ gboolean show_arrow);
+GDK_AVAILABLE_IN_4_6
+gboolean gtk_drop_down_get_show_arrow (GtkDropDown *self);
G_END_DECLS
diff --git a/gtk/ui/gtkdropdown.ui b/gtk/ui/gtkdropdown.ui
index 2b789853db..40ba360767 100644
--- a/gtk/ui/gtkdropdown.ui
+++ b/gtk/ui/gtkdropdown.ui
@@ -33,7 +33,7 @@
</object>
</child>
<child>
- <object class="GtkBuiltinIcon">
+ <object class="GtkBuiltinIcon" id="arrow">
<property name="css-name">arrow</property>
</object>
</child>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]