Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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;
    }
}