[gtk+] GtkMenuSectionBox: add support for iconic sections
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkMenuSectionBox: add support for iconic sections
- Date: Mon, 28 Apr 2014 18:22:18 +0000 (UTC)
commit 28a567f5a977a41bebd8541a680234ba3bdccc48
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Apr 28 14:18:39 2014 -0400
GtkMenuSectionBox: add support for iconic sections
Sections that have the display-hint attribute set to
"horizontal-boxes" will be rendered as a row of icon
buttons, instead of menuitem-like.
gtk/gtkmenusectionbox.c | 34 +++++++++++++++++++++++++++-------
1 files changed, 27 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtkmenusectionbox.c b/gtk/gtkmenusectionbox.c
index 61dbd3b..76640f9 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);
@@ -244,7 +253,10 @@ gtk_menu_section_box_insert_func (GtkMenuTrackerItem *item,
g_object_set_data_full (G_OBJECT (widget), "GtkMenuTrackerItem", g_object_ref (item), g_object_unref);
gtk_widget_set_halign (widget, GTK_ALIGN_FILL);
- gtk_container_add (GTK_CONTAINER (box->item_box), widget);
+ if (box->iconic)
+ gtk_box_pack_start (GTK_BOX (box->item_box), widget, TRUE, TRUE, 0);
+ else
+ gtk_container_add (GTK_CONTAINER (box->item_box), widget);
gtk_box_reorder_child (GTK_BOX (box->item_box), widget, position);
gtk_menu_section_box_schedule_separator_sync (box);
@@ -262,10 +274,11 @@ 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);
- g_object_set (box, "margin", 10, NULL);
+ g_object_set (box, "margin", 0, NULL);
}
@@ -274,8 +287,6 @@ gtk_menu_section_box_dispose (GObject *object)
{
GtkMenuSectionBox *box = GTK_MENU_SECTION_BOX (object);
- g_print ("disposed %p\n", object);
-
if (box->separator_sync_idle)
{
g_source_remove (box->separator_sync_idle);
@@ -298,7 +309,7 @@ gtk_menu_section_box_new_toplevel (GtkStack *stack,
{
GtkMenuSectionBox *box;
- box = g_object_new (GTK_TYPE_MENU_SECTION_BOX, NULL);
+ box = g_object_new (GTK_TYPE_MENU_SECTION_BOX, "margin", 10, NULL);
box->size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
gtk_size_group_add_widget (box->size_group, GTK_WIDGET (box));
gtk_stack_add_named (stack, GTK_WIDGET (box), "main");
@@ -319,7 +330,7 @@ gtk_menu_section_box_new_submenu (GtkMenuTrackerItem *item,
GtkMenuSectionBox *box;
GtkWidget *button;
- box = g_object_new (GTK_TYPE_MENU_SECTION_BOX, NULL);
+ box = g_object_new (GTK_TYPE_MENU_SECTION_BOX, "margin", 10, NULL);
box->size_group = g_object_ref (toplevel->size_group);
gtk_size_group_add_widget (box->size_group, GTK_WIDGET (box));
@@ -357,6 +368,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 +376,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, "horizontal-buttons"))
+ {
+ 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)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]