static void gtk_app_chooser_button_get_property (GObject *obj, guint property_id, GValue *value, GParamSpec *pspec) { GtkAppChooserButton *self = GTK_APP_CHOOSER_BUTTON (obj); switch (property_id) { case PROP_CONTENT_TYPE: g_value_set_string (value, self->priv->content_type); break; case PROP_SHOW_DIALOG_ITEM: g_value_set_boolean (value, self->priv->show_dialog_item); break; case PROP_SHOW_DEFAULT_ITEM: g_value_set_boolean (value, self->priv->show_default_item); break; case PROP_HEADING: g_value_set_string (value, self->priv->heading); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec); break; } }
static void gtk_app_chooser_button_refresh (GtkAppChooser *object) { GtkAppChooserButton *self = GTK_APP_CHOOSER_BUTTON (object); gtk_app_chooser_button_remove_non_custom (self); gtk_app_chooser_button_populate (self); }
static void gtk_app_chooser_button_constructed (GObject *obj) { GtkAppChooserButton *self = GTK_APP_CHOOSER_BUTTON (obj); if (G_OBJECT_CLASS (gtk_app_chooser_button_parent_class)->constructed != NULL) G_OBJECT_CLASS (gtk_app_chooser_button_parent_class)->constructed (obj); gtk_app_chooser_button_build_ui (self); }
static void gtk_app_chooser_button_finalize (GObject *obj) { GtkAppChooserButton *self = GTK_APP_CHOOSER_BUTTON (obj); g_hash_table_destroy (self->priv->custom_item_names); g_free (self->priv->content_type); g_free (self->priv->heading); g_object_unref (self->priv->store); G_OBJECT_CLASS (gtk_app_chooser_button_parent_class)->finalize (obj); }
static GAppInfo * gtk_app_chooser_button_get_app_info (GtkAppChooser *object) { GtkAppChooserButton *self = GTK_APP_CHOOSER_BUTTON (object); GtkTreeIter iter; GAppInfo *info; if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self), &iter)) return NULL; gtk_tree_model_get (GTK_TREE_MODEL (self->priv->store), &iter, COLUMN_APP_INFO, &info, -1); return info; }
static void gtk_app_chooser_button_changed (GtkComboBox *object) { GtkAppChooserButton *self = GTK_APP_CHOOSER_BUTTON (object); GtkTreeIter iter; gchar *name = NULL; gboolean custom; GQuark name_quark; if (!gtk_combo_box_get_active_iter (object, &iter)) return; gtk_tree_model_get (GTK_TREE_MODEL (self->priv->store), &iter, COLUMN_NAME, &name, COLUMN_CUSTOM, &custom, -1); if (name != NULL) { if (custom) { name_quark = g_quark_from_string (name); g_signal_emit (self, signals[SIGNAL_CUSTOM_ITEM_ACTIVATED], name_quark, name); self->priv->last_active = gtk_combo_box_get_active (object); } else { /* trigger the dialog internally */ other_application_item_activated_cb (self); } g_free (name); } else self->priv->last_active = gtk_combo_box_get_active (object); }
int main (int argc, char **argv) { GtkWidget *w; g_type_init (); gtk_init (&argc, &argv); toplevel = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (toplevel), 12); box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_container_add (GTK_CONTAINER (toplevel), box); combobox = gtk_app_chooser_button_new ("image/jpeg"); gtk_box_pack_start (GTK_BOX (box), combobox, TRUE, TRUE, 0); g_signal_connect (combobox, "changed", G_CALLBACK (combo_changed_cb), NULL); w = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (w), "<b>Selected app info</b>"); gtk_box_pack_start (GTK_BOX (box), w, TRUE, TRUE, 0); w = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start (GTK_BOX (box), w, TRUE, TRUE, 0); sel_image = gtk_image_new (); gtk_box_pack_start (GTK_BOX (w), sel_image, TRUE, TRUE, 0); sel_name = gtk_label_new (NULL); gtk_box_pack_start (GTK_BOX (w), sel_name, TRUE, TRUE, 0); gtk_app_chooser_button_set_heading (GTK_APP_CHOOSER_BUTTON (combobox), "Choose one, <i>not</i> two"); gtk_app_chooser_button_append_separator (GTK_APP_CHOOSER_BUTTON (combobox)); gtk_app_chooser_button_append_custom_item (GTK_APP_CHOOSER_BUTTON (combobox), CUSTOM_ITEM, "Hey, I'm special!", g_themed_icon_new ("face-smile")); /* this one will trigger a warning, and will not be added */ gtk_app_chooser_button_append_custom_item (GTK_APP_CHOOSER_BUTTON (combobox), CUSTOM_ITEM, "Hey, I'm fake!", g_themed_icon_new ("face-evil")); gtk_app_chooser_button_set_show_dialog_item (GTK_APP_CHOOSER_BUTTON (combobox), TRUE); /* connect to the detailed signal */ g_signal_connect (combobox, "custom-item-activated::" CUSTOM_ITEM, G_CALLBACK (special_item_activated_cb), NULL); /* connect to the generic signal too */ g_signal_connect (combobox, "custom-item-activated", G_CALLBACK (action_cb), NULL); /* test refresh on a combo */ gtk_app_chooser_refresh (GTK_APP_CHOOSER (combobox)); gtk_app_chooser_button_set_active_custom_item (GTK_APP_CHOOSER_BUTTON (combobox), CUSTOM_ITEM); gtk_widget_show_all (toplevel); g_signal_connect (toplevel, "delete-event", G_CALLBACK (gtk_main_quit), NULL); gtk_main (); return EXIT_SUCCESS; }
static void prepare_combo_box (GtkWidget *combo_box, AutorunDialogData *data) { GtkAppChooserButton *app_chooser = GTK_APP_CHOOSER_BUTTON (combo_box); GIcon *icon; gboolean pref_ask; gboolean pref_start_app; gboolean pref_ignore; gboolean pref_open_folder; GAppInfo *info; gchar *content_type; content_type = gtk_app_chooser_get_content_type (GTK_APP_CHOOSER (app_chooser)); /* fetch preferences for this content type */ csd_autorun_get_preferences (content_type, &pref_start_app, &pref_ignore, &pref_open_folder); pref_ask = !pref_start_app && !pref_ignore && !pref_open_folder; info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (combo_box)); /* append the separator only if we have >= 1 apps in the chooser */ if (info != NULL) { gtk_app_chooser_button_append_separator (app_chooser); g_object_unref (info); } icon = g_themed_icon_new (GTK_STOCK_DIALOG_QUESTION); gtk_app_chooser_button_append_custom_item (app_chooser, CUSTOM_ITEM_ASK, _("Ask what to do"), icon); g_object_unref (icon); icon = g_themed_icon_new (GTK_STOCK_CLOSE); gtk_app_chooser_button_append_custom_item (app_chooser, CUSTOM_ITEM_DO_NOTHING, _("Do Nothing"), icon); g_object_unref (icon); icon = g_themed_icon_new ("folder-open"); gtk_app_chooser_button_append_custom_item (app_chooser, CUSTOM_ITEM_OPEN_FOLDER, _("Open Folder"), icon); g_object_unref (icon); gtk_app_chooser_button_set_show_dialog_item (app_chooser, TRUE); if (pref_ask) { gtk_app_chooser_button_set_active_custom_item (app_chooser, CUSTOM_ITEM_ASK); } else if (pref_ignore) { gtk_app_chooser_button_set_active_custom_item (app_chooser, CUSTOM_ITEM_DO_NOTHING); } else if (pref_open_folder) { gtk_app_chooser_button_set_active_custom_item (app_chooser, CUSTOM_ITEM_OPEN_FOLDER); } g_signal_connect (app_chooser, "changed", G_CALLBACK (combo_box_changed_cb), data); g_signal_connect (app_chooser, "custom-item-activated", G_CALLBACK (custom_item_activated_cb), data); g_free (content_type); }