static void gtk_app_chooser_button_set_property (GObject *obj, guint property_id, const GValue *value, GParamSpec *pspec) { GtkAppChooserButton *self = GTK_APP_CHOOSER_BUTTON (obj); switch (property_id) { case PROP_CONTENT_TYPE: self->priv->content_type = g_value_dup_string (value); break; case PROP_SHOW_DIALOG_ITEM: gtk_app_chooser_button_set_show_dialog_item (self, g_value_get_boolean (value)); break; case PROP_SHOW_DEFAULT_ITEM: gtk_app_chooser_button_set_show_default_item (self, g_value_get_boolean (value)); break; case PROP_HEADING: gtk_app_chooser_button_set_heading (self, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec); break; } }
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)); gtk_app_chooser_button_set_show_default_item (GTK_APP_CHOOSER_BUTTON (combo_box), TRUE); /* 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); }
int main (int argc, char **argv) { GtkWidget *w; gtk_init (); toplevel = gtk_window_new (GTK_WINDOW_TOPLEVEL); box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_container_add (GTK_CONTAINER (toplevel), box); button = gtk_app_chooser_button_new ("image/jpeg"); gtk_box_pack_start (GTK_BOX (box), button); g_signal_connect (button, "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); w = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start (GTK_BOX (box), w); sel_image = gtk_image_new (); gtk_box_pack_start (GTK_BOX (w), sel_image); sel_name = gtk_label_new (NULL); gtk_box_pack_start (GTK_BOX (w), sel_name); gtk_app_chooser_button_set_heading (GTK_APP_CHOOSER_BUTTON (button), "Choose one, <i>not</i> two"); gtk_app_chooser_button_append_separator (GTK_APP_CHOOSER_BUTTON (button)); gtk_app_chooser_button_append_custom_item (GTK_APP_CHOOSER_BUTTON (button), 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 (button), CUSTOM_ITEM, "Hey, I'm fake!", g_themed_icon_new ("face-evil")); gtk_app_chooser_button_set_show_dialog_item (GTK_APP_CHOOSER_BUTTON (button), TRUE); gtk_app_chooser_button_set_show_default_item (GTK_APP_CHOOSER_BUTTON (button), TRUE); /* connect to the detailed signal */ g_signal_connect (button, "custom-item-activated::" CUSTOM_ITEM, G_CALLBACK (special_item_activated_cb), NULL); /* connect to the generic signal too */ g_signal_connect (button, "custom-item-activated", G_CALLBACK (action_cb), NULL); /* test refresh on a combo */ gtk_app_chooser_refresh (GTK_APP_CHOOSER (button)); #if 0 gtk_app_chooser_button_set_active_custom_item (GTK_APP_CHOOSER_BUTTON (button), CUSTOM_ITEM); #endif gtk_widget_show (toplevel); g_signal_connect (toplevel, "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_main (); return EXIT_SUCCESS; }