static void gtk_menu_section_box_insert_func (GtkMenuTrackerItem *item, gint position, gpointer user_data) { GtkMenuSectionBox *box = user_data; GtkWidget *widget; if (gtk_menu_tracker_item_get_is_separator (item)) { widget = gtk_menu_section_box_new_section (item, box); } else if (gtk_menu_tracker_item_get_has_link (item, G_MENU_LINK_SUBMENU)) { widget = g_object_new (GTK_TYPE_MODEL_BUTTON, "has-submenu", TRUE, NULL); g_object_bind_property (item, "label", widget, "text", G_BINDING_SYNC_CREATE); g_object_bind_property (item, "icon", widget, "icon", G_BINDING_SYNC_CREATE); g_object_bind_property (item, "sensitive", widget, "sensitive", G_BINDING_SYNC_CREATE); gtk_menu_section_box_new_submenu (item, box->toplevel, widget); gtk_widget_show (widget); } else { widget = gtk_model_button_new (); g_object_bind_property (item, "label", widget, "text", 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); g_object_bind_property (item, "accel", widget, "accel", G_BINDING_SYNC_CREATE); g_signal_connect (widget, "clicked", G_CALLBACK (gtk_popover_item_activate), item); } gtk_widget_show (widget); g_object_set_data_full (G_OBJECT (widget), "GtkMenuTrackerItem", g_object_ref (item), g_object_unref); gtk_widget_set_halign (widget, GTK_ALIGN_FILL); 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); }
static void gtk_menu_tracker_item_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GtkMenuTrackerItem *self = GTK_MENU_TRACKER_ITEM (object); switch (prop_id) { case PROP_IS_SEPARATOR: g_value_set_boolean (value, gtk_menu_tracker_item_get_is_separator (self)); break; case PROP_LABEL: g_value_set_string (value, gtk_menu_tracker_item_get_label (self)); break; case PROP_ICON: g_value_take_object (value, gtk_menu_tracker_item_get_icon (self)); break; case PROP_VERB_ICON: g_value_take_object (value, gtk_menu_tracker_item_get_verb_icon (self)); break; case PROP_SENSITIVE: g_value_set_boolean (value, gtk_menu_tracker_item_get_sensitive (self)); break; case PROP_ROLE: g_value_set_enum (value, gtk_menu_tracker_item_get_role (self)); break; case PROP_TOGGLED: g_value_set_boolean (value, gtk_menu_tracker_item_get_toggled (self)); break; case PROP_ACCEL: g_value_set_string (value, gtk_menu_tracker_item_get_accel (self)); break; case PROP_SUBMENU_SHOWN: g_value_set_boolean (value, gtk_menu_tracker_item_get_submenu_shown (self)); break; case PROP_IS_VISIBLE: g_value_set_boolean (value, gtk_menu_tracker_item_get_is_visible (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }