[gtk+/wip/desrt/popover-iconic: 10/10] GtkMenuSectionBox: hack and slash iconic support
- From: Ryan Lortie <desrt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/desrt/popover-iconic: 10/10] GtkMenuSectionBox: hack and slash iconic support
- Date: Mon, 28 Apr 2014 16:16:20 +0000 (UTC)
commit 92d891e6ed620e6403bf3871aaad84fd9c4919b4
Author: Ryan Lortie <desrt desrt ca>
Date: Mon Apr 28 18:14:48 2014 +0200
GtkMenuSectionBox: hack and slash iconic support
A quick demo of what iconic support would look like....
gtk/gtkmenusectionbox.c | 21 ++++++++++++++++++++-
gtk/gtkmenutrackeritem.c | 10 ++++++++++
gtk/gtkmenutrackeritem.h | 2 ++
3 files changed, 32 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkmenusectionbox.c b/gtk/gtkmenusectionbox.c
index 61dbd3b..cabac40 100644
--- a/gtk/gtkmenusectionbox.c
+++ b/gtk/gtkmenusectionbox.c
@@ -45,6 +45,7 @@ struct _GtkMenuSectionBox
GtkBox *item_box;
GtkWidget *separator;
guint separator_sync_idle;
+ gboolean iconic;
};
G_DEFINE_TYPE (GtkMenuSectionBox, gtk_menu_section_box, GTK_TYPE_BOX)
@@ -230,7 +231,15 @@ gtk_menu_section_box_insert_func (GtkMenuTrackerItem *item,
widget = gtk_model_button_new ();
g_object_bind_property (item, "label", widget, "text", G_BINDING_SYNC_CREATE);
- g_object_bind_property (item, "icon", widget, "icon", G_BINDING_SYNC_CREATE);
+
+ if (box->iconic)
+ {
+ g_object_bind_property (item, "verb-icon", widget, "icon", G_BINDING_SYNC_CREATE);
+ g_object_set (widget, "iconic", TRUE, "centered", TRUE, NULL);
+ }
+ else
+ g_object_bind_property (item, "icon", widget, "icon", G_BINDING_SYNC_CREATE);
+
g_object_bind_property (item, "sensitive", widget, "sensitive", G_BINDING_SYNC_CREATE);
g_object_bind_property (item, "role", widget, "action-role", G_BINDING_SYNC_CREATE);
g_object_bind_property (item, "toggled", widget, "toggled", G_BINDING_SYNC_CREATE);
@@ -262,6 +271,7 @@ gtk_menu_section_box_init (GtkMenuSectionBox *box)
item_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
box->item_box = GTK_BOX (item_box);
gtk_box_pack_end (GTK_BOX (box), item_box, FALSE, FALSE, 0);
+ gtk_widget_set_halign (GTK_WIDGET (item_box), GTK_ALIGN_FILL);
gtk_widget_show (item_box);
gtk_widget_set_halign (GTK_WIDGET (box), GTK_ALIGN_FILL);
@@ -357,6 +367,7 @@ gtk_menu_section_box_new_section (GtkMenuTrackerItem *item,
GtkMenuSectionBox *box;
GtkWidget *separator;
const gchar *label;
+ const gchar *hint;
box = g_object_new (GTK_TYPE_MENU_SECTION_BOX, NULL);
box->size_group = g_object_ref (toplevel->size_group);
@@ -364,6 +375,14 @@ gtk_menu_section_box_new_section (GtkMenuTrackerItem *item,
separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
label = gtk_menu_tracker_item_get_label (item);
+ hint = gtk_menu_tracker_item_get_display_hint (item);
+
+ if (hint && g_str_equal (hint, "iconic"))
+ {
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (box->item_box), GTK_ORIENTATION_HORIZONTAL);
+ gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (box->item_box)),
GTK_STYLE_CLASS_LINKED);
+ box->iconic = TRUE;
+ }
if (label != NULL)
{
diff --git a/gtk/gtkmenutrackeritem.c b/gtk/gtkmenutrackeritem.c
index ddf20dc..232ac37 100644
--- a/gtk/gtkmenutrackeritem.c
+++ b/gtk/gtkmenutrackeritem.c
@@ -674,6 +674,16 @@ gtk_menu_tracker_item_get_special (GtkMenuTrackerItem *self)
return special;
}
+const gchar *
+gtk_menu_tracker_item_get_display_hint (GtkMenuTrackerItem *self)
+{
+ const gchar *display_hint = NULL;
+
+ g_menu_item_get_attribute (self->item, "display-hint", "&s", &display_hint);
+
+ return display_hint;
+}
+
GMenuModel *
_gtk_menu_tracker_item_get_link (GtkMenuTrackerItem *self,
const gchar *link_name)
diff --git a/gtk/gtkmenutrackeritem.h b/gtk/gtkmenutrackeritem.h
index ca5a665..48c6dd4 100644
--- a/gtk/gtkmenutrackeritem.h
+++ b/gtk/gtkmenutrackeritem.h
@@ -50,6 +50,8 @@ GtkMenuTrackerItem * _gtk_menu_tracker_item_new (GtkActi
const gchar * gtk_menu_tracker_item_get_special (GtkMenuTrackerItem *self);
+const gchar * gtk_menu_tracker_item_get_display_hint (GtkMenuTrackerItem *self);
+
GtkActionObservable * _gtk_menu_tracker_item_get_observable (GtkMenuTrackerItem *self);
gboolean gtk_menu_tracker_item_get_is_separator (GtkMenuTrackerItem *self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]