static void remove_clicked_cb (GtkMenuItem *item, gpointer user_data) { NemoMimeApplicationChooser *chooser = user_data; GError *error; GAppInfo *info; info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (chooser->details->open_with_widget)); if (info) { error = NULL; if (!g_app_info_remove_supports_type (info, chooser->details->content_type, &error)) { eel_show_error_dialog (_("Could not forget association"), error->message, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (chooser)))); g_error_free (error); } gtk_app_chooser_refresh (GTK_APP_CHOOSER (chooser->details->open_with_widget)); g_object_unref (info); } g_signal_emit_by_name (nemo_signaller_get_current (), "mime_data_changed"); }
static void add_clicked_cb (GtkButton *button, gpointer user_data) { NautilusMimeApplicationChooser *chooser = user_data; GAppInfo *info; gchar *message; GError *error = NULL; info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (chooser->details->open_with_widget)); if (info == NULL) return; g_app_info_set_as_last_used_for_type (info, chooser->details->content_type, &error); if (error != NULL) { message = g_strdup_printf (_("Error while adding “%s”: %s"), g_app_info_get_display_name (info), error->message); eel_show_error_dialog (_("Could not add application"), message, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (chooser)))); g_error_free (error); g_free (message); } else { gtk_app_chooser_refresh (GTK_APP_CHOOSER (chooser->details->open_with_widget)); g_signal_emit_by_name (nautilus_signaller_get_current (), "mime-data-changed"); } g_object_unref (info); }
static void other_application_dialog_response_cb (GtkDialog *dialog, gint response_id, gpointer user_data) { GtkAppChooserButton *self = user_data; GAppInfo *info; if (response_id != GTK_RESPONSE_OK) { /* reset the active item, otherwise we are stuck on * 'Other application...' */ gtk_combo_box_set_active (GTK_COMBO_BOX (self), self->priv->last_active); gtk_widget_destroy (GTK_WIDGET (dialog)); return; } info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (dialog)); /* refresh the combobox to get the new application */ gtk_app_chooser_refresh (GTK_APP_CHOOSER (self)); gtk_app_chooser_button_select_application (self, info); g_object_unref (info); }
static void dialog_response (GtkDialog *d, gint response_id, gpointer user_data) { GAppInfo *app_info; const gchar *name; g_print ("Response: %d\n", response_id); if (response_id == GTK_RESPONSE_OK) { app_info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (d)); if (app_info) { name = g_app_info_get_name (app_info); g_print ("Application selected: %s\n", name); g_object_unref (app_info); } else g_print ("No application selected\n"); } gtk_widget_destroy (GTK_WIDGET (d)); dialog = NULL; }
static void search_for_mimetype_ready_cb (GObject *source, GAsyncResult *res, gpointer user_data) { GtkAppChooserOnline *online = GTK_APP_CHOOSER_ONLINE (source); GtkAppChooserDialog *self = user_data; GError *error = NULL; gdk_threads_enter (); _gtk_app_chooser_online_search_for_mimetype_finish (online, res, &error); if (error != NULL) { show_error_dialog (_("Failed to look for applications online"), error->message, GTK_WINDOW (self)); g_error_free (error); } else { gtk_app_chooser_refresh (GTK_APP_CHOOSER (self->priv->app_chooser_widget)); } gdk_threads_leave (); }
static void custom_item_activated_cb (GtkAppChooserButton *button, const gchar *item, gpointer user_data) { gchar *content_type; AutorunDialogData *data = user_data; content_type = gtk_app_chooser_get_content_type (GTK_APP_CHOOSER (button)); if (g_strcmp0 (item, CUSTOM_ITEM_ASK) == 0) { csd_autorun_set_preferences (content_type, FALSE, FALSE, FALSE); data->selected_open_folder = FALSE; data->selected_ignore = FALSE; } else if (g_strcmp0 (item, CUSTOM_ITEM_OPEN_FOLDER) == 0) { csd_autorun_set_preferences (content_type, FALSE, FALSE, TRUE); data->selected_open_folder = TRUE; data->selected_ignore = FALSE; } else if (g_strcmp0 (item, CUSTOM_ITEM_DO_NOTHING) == 0) { csd_autorun_set_preferences (content_type, FALSE, TRUE, FALSE); data->selected_open_folder = FALSE; data->selected_ignore = TRUE; } g_free (content_type); }
static void app_chooser_response_cb (GtkDialog *dialog, int response_id, gpointer user_data) { OpenData *o_data = user_data; GAppInfo *app_info; switch (response_id) { case GTK_RESPONSE_OK: app_info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (dialog)); if (app_info != NULL) { fr_window_open_files_with_application (o_data->window, o_data->file_list, app_info); g_object_unref (app_info); } g_free (o_data); gtk_widget_destroy (GTK_WIDGET (dialog)); break; case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_DELETE_EVENT: g_free (o_data); gtk_widget_destroy (GTK_WIDGET (dialog)); break; default: break; } }
static void gtk_app_chooser_dialog_refresh (GtkAppChooser *object) { GtkAppChooserDialog *self = GTK_APP_CHOOSER_DIALOG (object); gtk_app_chooser_refresh (GTK_APP_CHOOSER (self->priv->app_chooser_widget)); }
static void forget_menu_item_activate_cb (GtkMenuItem *item, gpointer user_data) { GtkAppChooserDialog *self = user_data; GAppInfo *info; info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (self)); if (info != NULL) { g_app_info_remove_supports_type (info, self->priv->content_type, NULL); gtk_app_chooser_refresh (GTK_APP_CHOOSER (self)); g_object_unref (info); } }
static void set_as_default_clicked_cb (GtkButton *button, gpointer user_data) { NemoMimeApplicationChooser *chooser = user_data; GAppInfo *info; if (!chooser->details->custom_info) { info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (chooser->details->open_with_widget)); g_app_info_set_as_default_for_type (info, chooser->details->content_type, NULL); } else { info = chooser->details->custom_info; create_custom_desktop_file (chooser, TRUE); } gtk_app_chooser_refresh (GTK_APP_CHOOSER (chooser->details->open_with_widget)); gtk_entry_set_text (GTK_ENTRY (chooser->details->custom_entry), ""); g_signal_emit_by_name (nemo_signaller_get_current (), "mime_data_changed"); }
static void gtk_app_chooser_widget_initialize_items (GtkAppChooserWidget *self) { /* initial padding */ g_object_set (self->priv->padding_renderer, "xpad", self->priv->show_all ? 0 : 6, NULL); /* populate the widget */ gtk_app_chooser_refresh (GTK_APP_CHOOSER (self)); }
/* An application is valid if: * * 1) The file exists * 2) The user has permissions to run the file */ static gboolean check_application (GtkAppChooserDialog *self, GAppInfo **app_out) { const char *command; char *path = NULL; char **argv = NULL; int argc; GError *error = NULL; gint retval = TRUE; GAppInfo *info; command = NULL; info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (self->priv->app_chooser_widget)); command = g_app_info_get_executable (info); g_shell_parse_argv (command, &argc, &argv, &error); if (error) { show_error_dialog (_("Could not run application"), error->message, GTK_WINDOW (self)); g_error_free (error); retval = FALSE; goto cleanup; } path = g_find_program_in_path (argv[0]); if (!path) { char *error_message; error_message = g_strdup_printf (_("Could not find '%s'"), argv[0]); show_error_dialog (_("Could not find application"), error_message, GTK_WINDOW (self)); g_free (error_message); retval = FALSE; goto cleanup; } *app_out = info; cleanup: g_strfreev (argv); g_free (path); return retval; }
static void reset_clicked_cb (GtkButton *button, gpointer user_data) { NemoMimeApplicationChooser *chooser; chooser = NEMO_MIME_APPLICATION_CHOOSER (user_data); g_app_info_reset_type_associations (chooser->details->content_type); gtk_app_chooser_refresh (GTK_APP_CHOOSER (chooser->details->open_with_widget)); gtk_entry_set_text (GTK_ENTRY (chooser->details->custom_entry), ""); g_signal_emit_by_name (nemo_signaller_get_current (), "mime_data_changed"); }
/** * gtk_app_chooser_button_set_show_dialog_item: * @self: a #GtkAppChooserButton * @setting: the new value for #GtkAppChooserButton:show-dialog-item * * Sets whether the dropdown menu of this button should show an * entry to trigger a #GtkAppChooserDialog. * * Since: 3.0 */ void gtk_app_chooser_button_set_show_dialog_item (GtkAppChooserButton *self, gboolean setting) { if (self->priv->show_dialog_item != setting) { self->priv->show_dialog_item = setting; g_object_notify (G_OBJECT (self), "show-dialog-item"); gtk_app_chooser_refresh (GTK_APP_CHOOSER (self)); } }
static void reset_clicked_cb (GtkButton *button, gpointer user_data) { NautilusMimeApplicationChooser *chooser; chooser = NAUTILUS_MIME_APPLICATION_CHOOSER (user_data); g_app_info_reset_type_associations (chooser->details->content_type); gtk_app_chooser_refresh (GTK_APP_CHOOSER (chooser->details->open_with_widget)); g_signal_emit_by_name (nautilus_signaller_get_current (), "mime-data-changed"); }
static void add_clicked_cb (GtkButton *button, gpointer user_data) { NemoMimeApplicationChooser *chooser = user_data; GAppInfo *info; if (!chooser->details->custom_info) { info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (chooser->details->open_with_widget)); g_app_info_set_as_last_used_for_type (info, chooser->details->content_type, NULL); } else { info = chooser->details->custom_info; g_app_info_set_as_last_used_for_type (info, chooser->details->content_type, NULL); } if (info == NULL) return; gtk_app_chooser_refresh (GTK_APP_CHOOSER (chooser->details->open_with_widget)); gtk_entry_set_text (GTK_ENTRY (chooser->details->custom_entry), ""); gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (chooser->details->file_button), ""); g_signal_emit_by_name (nemo_signaller_get_current (), "mime_data_changed"); }
static void add_or_find_application (GtkAppChooserDialog *self) { GAppInfo *app; app = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (self)); /* we don't care about reporting errors here */ if (self->priv->content_type) g_app_info_set_as_last_used_for_type (app, self->priv->content_type, NULL); g_object_unref (app); }
/** * gtk_app_chooser_widget_set_show_all: * @self: a #GtkAppChooserWidget * @setting: the new value for #GtkAppChooserWidget:show-all * * Sets whether the app chooser should show all applications * in a flat list. */ void gtk_app_chooser_widget_set_show_all (GtkAppChooserWidget *self, gboolean setting) { g_return_if_fail (GTK_IS_APP_CHOOSER_WIDGET (self)); if (self->priv->show_all != setting) { self->priv->show_all = setting; g_object_notify (G_OBJECT (self), "show-all"); gtk_app_chooser_refresh (GTK_APP_CHOOSER (self)); } }
/** * gtk_app_chooser_widget_set_default_text: * @self: a #GtkAppChooserWidget * @text: the new value for #GtkAppChooserWidget:default-text * * Sets the text that is shown if there are not applications * that can handle the content type. */ void gtk_app_chooser_widget_set_default_text (GtkAppChooserWidget *self, const gchar *text) { g_return_if_fail (GTK_IS_APP_CHOOSER_WIDGET (self)); if (g_strcmp0 (text, self->priv->default_text) != 0) { g_free (self->priv->default_text); self->priv->default_text = g_strdup (text); g_object_notify (G_OBJECT (self), "default-text"); gtk_app_chooser_refresh (GTK_APP_CHOOSER (self)); } }
static void combo_changed_cb (GtkAppChooserButton *button, gpointer user_data) { GAppInfo *app_info; app_info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (button)); if (app_info == NULL) return; gtk_image_set_from_gicon (GTK_IMAGE (sel_image), g_app_info_get_icon (app_info)); gtk_label_set_text (GTK_LABEL (sel_name), g_app_info_get_display_name (app_info)); g_object_unref (app_info); }
static void combo_changed_cb (GtkComboBox *cb, gpointer user_data) { GAppInfo *app_info; app_info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (cb)); if (app_info == NULL) return; gtk_image_set_from_gicon (GTK_IMAGE (sel_image), g_app_info_get_icon (app_info), GTK_ICON_SIZE_DIALOG); gtk_label_set_text (GTK_LABEL (sel_name), g_app_info_get_display_name (app_info)); g_object_unref (app_info); }
static void combo_box_changed_cb (GtkComboBox *combo_box, gpointer user_data) { GAppInfo *info; AutorunDialogData *data = user_data; info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (combo_box)); if (info == NULL) return; if (data->selected_app != NULL) { g_object_unref (data->selected_app); data->selected_app = NULL; } data->selected_app = info; }
static gboolean open_file_in_application (gpointer user_data) { HandleUnsupportedFileData *data; g_autoptr (GAppInfo) application = NULL; data = user_data; application = nautilus_mime_get_default_application_for_file (data->file); if (!application) { GtkWidget *dialog; g_autofree gchar *mime_type = NULL; mime_type = nautilus_file_get_mime_type (data->file); dialog = gtk_app_chooser_dialog_new_for_content_type (data->parent_window, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_USE_HEADER_BAR, mime_type); if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { application = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (dialog)); } gtk_widget_destroy (dialog); } if (application) { g_autoptr (GList) files = NULL; files = g_list_append (NULL, data->file); nautilus_launch_application (application, files, data->parent_window); } return G_SOURCE_REMOVE; }
static void construct_appchooser_widget (GtkAppChooserDialog *self) { GAppInfo *info; /* Need to build the appchooser widget after, because of the content-type construct-only property */ self->priv->app_chooser_widget = gtk_app_chooser_widget_new (self->priv->content_type); gtk_widget_set_vexpand (self->priv->app_chooser_widget, TRUE); gtk_box_pack_start (GTK_BOX (self->priv->inner_box), self->priv->app_chooser_widget); g_signal_connect (self->priv->app_chooser_widget, "application-selected", G_CALLBACK (widget_application_selected_cb), self); g_signal_connect (self->priv->app_chooser_widget, "application-activated", G_CALLBACK (widget_application_activated_cb), self); g_signal_connect (self->priv->app_chooser_widget, "notify::show-other", G_CALLBACK (widget_notify_for_button_cb), self); g_signal_connect (self->priv->app_chooser_widget, "populate-popup", G_CALLBACK (widget_populate_popup_cb), self); /* Add the custom button to the new appchooser */ gtk_box_pack_start (GTK_BOX (self->priv->inner_box), self->priv->show_more_button); gtk_box_pack_start (GTK_BOX (self->priv->inner_box), self->priv->software_button); info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (self->priv->app_chooser_widget)); gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_OK, info != NULL); if (info) g_object_unref (info); _gtk_app_chooser_widget_set_search_entry (GTK_APP_CHOOSER_WIDGET (self->priv->app_chooser_widget), GTK_ENTRY (self->priv->search_entry)); gtk_search_bar_set_key_capture_widget (GTK_SEARCH_BAR (self->priv->search_bar), GTK_WIDGET (self)); }
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 nemo_mime_application_chooser_build_ui (NemoMimeApplicationChooser *chooser) { GtkWidget *box, *button; GAppInfo *info; gtk_container_set_border_width (GTK_CONTAINER (chooser), 8); gtk_box_set_spacing (GTK_BOX (chooser), 0); gtk_box_set_homogeneous (GTK_BOX (chooser), FALSE); chooser->details->label = gtk_label_new (""); gtk_misc_set_alignment (GTK_MISC (chooser->details->label), 0.0, 0.5); gtk_label_set_line_wrap (GTK_LABEL (chooser->details->label), TRUE); gtk_label_set_line_wrap_mode (GTK_LABEL (chooser->details->label), PANGO_WRAP_WORD_CHAR); gtk_box_pack_start (GTK_BOX (chooser), chooser->details->label, FALSE, FALSE, 0); gtk_widget_show (chooser->details->label); chooser->details->open_with_widget = gtk_app_chooser_widget_new (chooser->details->content_type); gtk_app_chooser_widget_set_show_default (GTK_APP_CHOOSER_WIDGET (chooser->details->open_with_widget), TRUE); gtk_app_chooser_widget_set_show_fallback (GTK_APP_CHOOSER_WIDGET (chooser->details->open_with_widget), TRUE); gtk_box_pack_start (GTK_BOX (chooser), chooser->details->open_with_widget, TRUE, TRUE, 6); gtk_widget_show (chooser->details->open_with_widget); g_signal_connect (chooser->details->open_with_widget, "application-selected", G_CALLBACK (application_selected_cb), chooser); g_signal_connect (chooser->details->open_with_widget, "populate-popup", G_CALLBACK (populate_popup_cb), chooser); gtk_app_chooser_widget_set_show_other (GTK_APP_CHOOSER_WIDGET (chooser->details->open_with_widget), TRUE); gtk_app_chooser_widget_set_show_recommended (GTK_APP_CHOOSER_WIDGET (chooser->details->open_with_widget), TRUE); GtkWidget *custom_label = gtk_label_new (_("You can also type or select a custom executable file to use to open this file type. " "You can use this command just once, or set it as default for all files of this type.")); gtk_misc_set_alignment (GTK_MISC (custom_label), 0.0, 0.5); gtk_label_set_line_wrap (GTK_LABEL (custom_label), TRUE); gtk_label_set_line_wrap_mode (GTK_LABEL (custom_label), PANGO_WRAP_WORD_CHAR); gtk_box_pack_start (GTK_BOX (chooser), custom_label, FALSE, FALSE, 0); gtk_widget_show (GTK_WIDGET (custom_label)); GtkWidget *custom_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (chooser), custom_box, TRUE, TRUE, 0); GtkWidget *entry = gtk_entry_new (); gtk_box_pack_start (GTK_BOX (custom_box), entry, TRUE, TRUE, 0); gtk_entry_set_placeholder_text (GTK_ENTRY (entry), _("Enter a custom command...")); g_signal_connect (entry, "changed", G_CALLBACK (custom_entry_changed_cb), chooser); chooser->details->custom_entry = entry; button = gtk_file_chooser_button_new (_("Custom application"), GTK_FILE_CHOOSER_ACTION_OPEN); g_signal_connect (button, "file-set", G_CALLBACK (custom_app_set_cb), chooser); gtk_widget_show (button); gtk_box_pack_start (GTK_BOX (custom_box), button, FALSE, FALSE, 6); gtk_widget_show_all (custom_box); chooser->details->custom_picker = button; box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); gtk_box_set_spacing (GTK_BOX (box), 6); gtk_button_box_set_layout (GTK_BUTTON_BOX (box), GTK_BUTTONBOX_CENTER); gtk_box_pack_start (GTK_BOX (chooser), box, FALSE, FALSE, 6); gtk_widget_show (box); GtkFileFilter *filter = gtk_file_filter_new (); gtk_file_filter_add_mime_type (filter, "application/*"); gtk_file_filter_set_name (filter, _("Executables")); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (button), filter); button = gtk_button_new_with_label (_("Add to list")); g_signal_connect (button, "clicked", G_CALLBACK (add_clicked_cb), chooser); gtk_widget_show (button); gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0); chooser->details->add_button = button; button = gtk_button_new_with_label (_("Set as default")); g_signal_connect (button, "clicked", G_CALLBACK (set_as_default_clicked_cb), chooser); gtk_widget_show (button); gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0); chooser->details->set_as_default_button = button; button = gtk_button_new_with_label (_("Reset to system defaults")); g_signal_connect (button, "clicked", G_CALLBACK (reset_clicked_cb), chooser); gtk_widget_show (button); gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0); /* initialize sensitivity */ info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (chooser->details->open_with_widget)); if (info != NULL) { application_selected_cb (GTK_APP_CHOOSER_WIDGET (chooser->details->open_with_widget), info, chooser); g_object_unref (info); } }
static void nautilus_mime_application_chooser_build_ui (NautilusMimeApplicationChooser *chooser) { GtkWidget *box, *button; GAppInfo *info; gtk_container_set_border_width (GTK_CONTAINER (chooser), 8); gtk_box_set_spacing (GTK_BOX (chooser), 0); gtk_box_set_homogeneous (GTK_BOX (chooser), FALSE); chooser->details->label = gtk_label_new (""); gtk_label_set_xalign (GTK_LABEL (chooser->details->label), 0); gtk_label_set_line_wrap (GTK_LABEL (chooser->details->label), TRUE); gtk_label_set_line_wrap_mode (GTK_LABEL (chooser->details->label), PANGO_WRAP_WORD_CHAR); gtk_box_pack_start (GTK_BOX (chooser), chooser->details->label, FALSE, FALSE, 0); gtk_widget_show (chooser->details->label); chooser->details->open_with_widget = gtk_app_chooser_widget_new (chooser->details->content_type); gtk_app_chooser_widget_set_show_default (GTK_APP_CHOOSER_WIDGET (chooser->details->open_with_widget), TRUE); gtk_app_chooser_widget_set_show_fallback (GTK_APP_CHOOSER_WIDGET (chooser->details->open_with_widget), TRUE); gtk_app_chooser_widget_set_show_other (GTK_APP_CHOOSER_WIDGET (chooser->details->open_with_widget), TRUE); gtk_box_pack_start (GTK_BOX (chooser), chooser->details->open_with_widget, TRUE, TRUE, 6); gtk_widget_show (chooser->details->open_with_widget); box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); gtk_box_set_spacing (GTK_BOX (box), 6); gtk_button_box_set_layout (GTK_BUTTON_BOX (box), GTK_BUTTONBOX_END); gtk_box_pack_start (GTK_BOX (chooser), box, FALSE, FALSE, 6); gtk_widget_show (box); button = gtk_button_new_with_label (_("Reset")); g_signal_connect (button, "clicked", G_CALLBACK (reset_clicked_cb), chooser); gtk_widget_show (button); gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0); gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (box), button, TRUE); button = gtk_button_new_with_mnemonic (_("_Add")); g_signal_connect (button, "clicked", G_CALLBACK (add_clicked_cb), chooser); gtk_widget_show (button); gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0); chooser->details->add_button = button; button = gtk_button_new_with_label (_("Set as default")); g_signal_connect (button, "clicked", G_CALLBACK (set_as_default_clicked_cb), chooser); gtk_widget_show (button); gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0); chooser->details->set_as_default_button = button; /* initialize sensitivity */ info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (chooser->details->open_with_widget)); if (info != NULL) { application_selected_cb (GTK_APP_CHOOSER_WIDGET (chooser->details->open_with_widget), info, chooser); g_object_unref (info); } g_signal_connect (chooser->details->open_with_widget, "application-selected", G_CALLBACK (application_selected_cb), chooser); g_signal_connect (chooser->details->open_with_widget, "populate-popup", G_CALLBACK (populate_popup_cb), chooser); }
static void app_info_changed (GAppInfoMonitor *monitor, GtkAppChooserWidget *self) { gtk_app_chooser_refresh (GTK_APP_CHOOSER (self)); }
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); }
static GAppInfo * gtk_app_chooser_dialog_get_app_info (GtkAppChooser *object) { GtkAppChooserDialog *self = GTK_APP_CHOOSER_DIALOG (object); return gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (self->priv->app_chooser_widget)); }