static void nemo_mime_application_chooser_apply_labels (NemoMimeApplicationChooser *chooser) { gchar *label, *extension = NULL, *description = NULL; if (chooser->details->files != NULL) { /* here we assume all files are of the same content type */ if (g_content_type_is_unknown (chooser->details->content_type)) { extension = get_extension_from_file (NEMO_FILE (chooser->details->files->data)); /* the %s here is a file extension */ description = g_strdup_printf (_("%s document"), extension); } else { description = g_content_type_get_description (chooser->details->content_type); } label = g_strdup_printf (_("Open all files of type \"%s\" with"), description); } else { GFile *file; gchar *basename, *emname; file = g_file_new_for_uri (chooser->details->uri); basename = g_file_get_basename (file); if (g_content_type_is_unknown (chooser->details->content_type)) { extension = get_extension (basename); /* the %s here is a file extension */ description = g_strdup_printf (_("%s document"), extension); } else { description = g_content_type_get_description (chooser->details->content_type); } /* first %s is filename, second %s is mime-type description */ emname = g_strdup_printf ("<i>%s</i>", basename); label = g_strdup_printf (_("Select an application in the list to open %s and other files of type \"%s\""), emname, description); g_free (emname); g_free (basename); g_object_unref (file); } gtk_label_set_markup (GTK_LABEL (chooser->details->label), label); g_free (label); g_free (extension); g_free (description); }
gchar * get_file_type_description (const gchar * file, GFileInfo * file_info) { const char * content_type = NULL; gchar * desc; if (file != NULL) { content_type = g_file_info_get_content_type (file_info); } if (content_type == NULL || g_content_type_is_unknown (content_type) == TRUE) { return g_strdup (g_content_type_get_description ("application/octet-stream")); } desc = g_strdup (g_content_type_get_description (content_type)); if (g_file_info_get_is_symlink (file_info) == TRUE) { const gchar * symlink_target; gchar * absolute_symlink = NULL; gchar * str = NULL; symlink_target = g_file_info_get_symlink_target (file_info); if (g_path_is_absolute (symlink_target) != TRUE) { gchar *dirname; dirname = g_path_get_dirname (file); absolute_symlink = g_strconcat (dirname, G_DIR_SEPARATOR_S, symlink_target, NULL); g_free (dirname); } else { absolute_symlink = g_strdup (symlink_target); } if (g_file_test (absolute_symlink, G_FILE_TEST_EXISTS) != TRUE) { if ((g_ascii_strcasecmp (content_type, "x-special/socket") != 0) && (g_ascii_strcasecmp (content_type, "x-special/fifo") != 0)) { g_free (absolute_symlink); g_free (desc); return g_strdup (_("link (broken)")); } } str = g_strdup_printf (_("link to %s"), (desc != NULL) ? desc : content_type); g_free (absolute_symlink); g_free (desc); return str; } return desc; }
/** * gedit_document_get_mime_type: * @doc: a #GeditDocument. * * Note: this never returns %NULL. **/ gchar * gedit_document_get_mime_type (GeditDocument *doc) { g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), g_strdup ("text/plain")); if (doc->priv->content_type != NULL && !g_content_type_is_unknown (doc->priv->content_type)) { return g_content_type_get_mime_type (doc->priv->content_type); } return g_strdup ("text/plain"); }
/** * gedit_document_get_mime_type: * @doc: a #GeditDocument. * * Note: this never returns %NULL. **/ gchar * gedit_document_get_mime_type (GeditDocument *doc) { GeditDocumentPrivate *priv; g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), g_strdup ("text/plain")); priv = gedit_document_get_instance_private (doc); if (priv->content_type != NULL && !g_content_type_is_unknown (priv->content_type)) { return g_content_type_get_mime_type (priv->content_type); } return g_strdup ("text/plain"); }
static void set_content_type_no_guess (GeditDocument *doc, const gchar *content_type) { GeditDocumentPrivate *priv; gchar *dupped_content_type; gedit_debug (DEBUG_DOCUMENT); priv = gedit_document_get_instance_private (doc); if (priv->content_type != NULL && content_type != NULL && g_str_equal (priv->content_type, content_type)) { return; } g_free (priv->content_type); /* For compression types, we try to just guess from the content */ if (gedit_utils_get_compression_type_from_content_type (content_type) != GTK_SOURCE_COMPRESSION_TYPE_NONE) { dupped_content_type = get_content_type_from_content (doc); } else { dupped_content_type = g_strdup (content_type); } if (dupped_content_type == NULL || g_content_type_is_unknown (dupped_content_type)) { priv->content_type = get_default_content_type (); g_free (dupped_content_type); } else { priv->content_type = dupped_content_type; } g_object_notify (G_OBJECT (doc), "content-type"); }
static void nautilus_mime_application_chooser_apply_labels (NautilusMimeApplicationChooser *chooser) { gchar *label, *extension = NULL, *description = NULL; gint num_files; NautilusFile *file; num_files = g_list_length (chooser->details->files); file = chooser->details->files->data; /* here we assume all files are of the same content type */ if (g_content_type_is_unknown (chooser->details->content_type)) { extension = nautilus_file_get_extension (file); /* Translators: the %s here is a file extension */ description = g_strdup_printf (_("%s document"), extension); } else { description = g_content_type_get_description (chooser->details->content_type); } if (num_files > 1) { /* Translators; %s here is a mime-type description */ label = g_strdup_printf (_("Open all files of type “%s” with"), description); } else { gchar *display_name; display_name = nautilus_file_get_display_name (file); /* Translators: first %s is filename, second %s is mime-type description */ label = g_strdup_printf (_("Select an application to open “%s” and other files of type “%s”"), display_name, description); g_free (display_name); } gtk_label_set_markup (GTK_LABEL (chooser->details->label), label); g_free (label); g_free (extension); g_free (description); }
static VALUE rg_s_unknown_p(G_GNUC_UNUSED VALUE type) { return CBOOL2RVAL(g_content_type_is_unknown(RVAL2CSTR(type))); }
static void set_dialog_properties (GtkAppChooserDialog *self) { gchar *label; gchar *name; gchar *extension; gchar *description; gchar *default_text; gchar *string; gboolean unknown; PangoFontDescription *font_desc; name = NULL; extension = NULL; label = NULL; description = NULL; unknown = TRUE; if (self->priv->gfile != NULL) { name = g_file_get_basename (self->priv->gfile); extension = get_extension (name); } if (self->priv->content_type) { description = g_content_type_get_description (self->priv->content_type); unknown = g_content_type_is_unknown (self->priv->content_type); } gtk_window_set_title (GTK_WINDOW (self), ""); if (name != NULL) { /* Translators: %s is a filename */ label = g_strdup_printf (_("Select an application to open \"%s\""), name); string = g_strdup_printf (_("No applications available to open \"%s\""), name); } else { /* Translators: %s is a file type description */ label = g_strdup_printf (_("Select an application for \"%s\" files"), unknown ? self->priv->content_type : description); string = g_strdup_printf (_("No applications available to open \"%s\" files"), unknown ? self->priv->content_type : description); } font_desc = pango_font_description_new (); pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD); gtk_widget_override_font (self->priv->label, font_desc); pango_font_description_free (font_desc); if (self->priv->heading != NULL) gtk_label_set_markup (GTK_LABEL (self->priv->label), self->priv->heading); else gtk_label_set_markup (GTK_LABEL (self->priv->label), label); default_text = g_strdup_printf ("<big><b>%s</b></big>\n%s", string, _("Click \"Show other applications\", for more options, or " "\"Find applications online\" to install a new application")); gtk_app_chooser_widget_set_default_text (GTK_APP_CHOOSER_WIDGET (self->priv->app_chooser_widget), default_text); g_free (label); g_free (name); g_free (extension); g_free (description); g_free (string); g_free (default_text); }
static void _gth_browser_update_open_menu (GthBrowser *browser, const char *path) { GtkWidget *openwith_item; GtkWidget *menu; GList *items; GList *file_list; GList *scan; GList *appinfo_list; GHashTable *used_mime_types; GthIconCache *icon_cache; GHashTable *used_apps; openwith_item = gtk_ui_manager_get_widget (gth_browser_get_ui_manager (browser), path); menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (openwith_item)); _gtk_container_remove_children (GTK_CONTAINER (menu), NULL, NULL); items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view (browser))); file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items); appinfo_list = NULL; used_mime_types = g_hash_table_new (g_str_hash, g_str_equal); for (scan = file_list; scan; scan = scan->next) { GthFileData *file_data = scan->data; const char *mime_type; mime_type = gth_file_data_get_mime_type (file_data); if ((mime_type == NULL) || g_content_type_is_unknown (mime_type)) continue; if (g_hash_table_lookup (used_mime_types, mime_type) != NULL) continue; appinfo_list = g_list_concat (appinfo_list, g_app_info_get_all_for_type (mime_type)); g_hash_table_insert (used_mime_types, (gpointer) mime_type, GINT_TO_POINTER (1)); } g_hash_table_destroy (used_mime_types); icon_cache = gth_browser_get_menu_icon_cache (browser); used_apps = g_hash_table_new (g_str_hash, g_str_equal); for (scan = appinfo_list; scan; scan = scan->next) { GAppInfo *appinfo = scan->data; char *label; GtkWidget *menu_item; GIcon *icon; if (strcmp (g_app_info_get_executable (appinfo), "pix") == 0) continue; if (g_hash_table_lookup (used_apps, g_app_info_get_id (appinfo)) != NULL) continue; g_hash_table_insert (used_apps, (gpointer) g_app_info_get_id (appinfo), GINT_TO_POINTER (1)); label = g_strdup_printf ("%s", g_app_info_get_name (appinfo)); menu_item = gtk_image_menu_item_new_with_label (label); icon = g_app_info_get_icon (appinfo); if (icon != NULL) { GdkPixbuf *pixbuf; pixbuf = gth_icon_cache_get_pixbuf (icon_cache, icon); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), gtk_image_new_from_pixbuf (pixbuf)); gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menu_item), TRUE); g_object_unref (pixbuf); } gtk_widget_show (menu_item); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); g_object_set_data_full (G_OBJECT (menu_item), "appinfo", g_object_ref (appinfo), g_object_unref); g_signal_connect (menu_item, "activate", G_CALLBACK (activate_open_with_application_item), browser); g_free (label); } /* if (appinfo_list == NULL) { GtkWidget *menu_item; menu_item = gtk_image_menu_item_new_with_label (_("No application available")); gtk_widget_set_sensitive (menu_item, FALSE); gtk_widget_show (menu_item); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); }*/ gtk_widget_set_sensitive (openwith_item, appinfo_list != NULL); gtk_widget_show (openwith_item); g_hash_table_destroy (used_apps); _g_object_list_unref (appinfo_list); _g_object_list_unref (file_list); _gtk_tree_path_list_free (items); }
static void set_dialog_properties (GtkAppChooserDialog *self) { gchar *name; gchar *extension; gchar *description; gchar *string; gboolean unknown; gchar *title; gchar *subtitle; gboolean use_header; GtkWidget *header; name = NULL; extension = NULL; description = NULL; unknown = TRUE; if (self->priv->gfile != NULL) { name = g_file_get_basename (self->priv->gfile); extension = get_extension (name); } if (self->priv->content_type) { description = g_content_type_get_description (self->priv->content_type); unknown = g_content_type_is_unknown (self->priv->content_type); } if (name != NULL) { title = g_strdup (_("Select Application")); /* Translators: %s is a filename */ subtitle = g_strdup_printf (_("Opening “%s”."), name); string = g_strdup_printf (_("No applications found for “%s”"), name); } else { title = g_strdup (_("Select Application")); /* Translators: %s is a file type description */ subtitle = g_strdup_printf (_("Opening “%s” files."), unknown ? self->priv->content_type : description); string = g_strdup_printf (_("No applications found for “%s” files"), unknown ? self->priv->content_type : description); } g_object_get (self, "use-header-bar", &use_header, NULL); if (use_header) { header = gtk_dialog_get_header_bar (GTK_DIALOG (self)); gtk_header_bar_set_title (GTK_HEADER_BAR (header), title); gtk_header_bar_set_subtitle (GTK_HEADER_BAR (header), subtitle); } else { gtk_window_set_title (GTK_WINDOW (self), _("Select Application")); } if (self->priv->heading != NULL) { gtk_label_set_markup (GTK_LABEL (self->priv->label), self->priv->heading); gtk_widget_show (self->priv->label); } else { gtk_widget_hide (self->priv->label); } gtk_app_chooser_widget_set_default_text (GTK_APP_CHOOSER_WIDGET (self->priv->app_chooser_widget), string); g_free (title); g_free (subtitle); g_free (name); g_free (extension); g_free (description); g_free (string); }
/* create the "open with" dialog. */ void dlg_open_with (FrWindow *window, GList *file_list) { DialogData *data; GAppInfo *app; GList *scan, *app_names = NULL; char **editors; int i; GtkWidget *cancel_button; GtkTreeIter iter; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkIconTheme *theme; int icon_size; if (file_list == NULL) return; data = g_new0 (DialogData, 1); data->settings = g_settings_new (EXRED_SCHEMA_GENERAL); data->builder = _gtk_builder_new_from_file ("open-with.ui"); if (data->builder == NULL) { g_free (data); return; } data->file_list = path_list_dup (file_list); data->window = window; /* Get the widgets. */ data->dialog = _gtk_builder_get_widget (data->builder, "open_with_dialog"); data->o_app_tree_view = _gtk_builder_get_widget (data->builder, "o_app_list_tree_view"); data->o_recent_tree_view = _gtk_builder_get_widget (data->builder, "o_recent_tree_view"); data->o_app_entry = _gtk_builder_get_widget (data->builder, "o_app_entry"); data->o_del_button = _gtk_builder_get_widget (data->builder, "o_del_button"); data->ok_button = _gtk_builder_get_widget (data->builder, "o_ok_button"); cancel_button = _gtk_builder_get_widget (data->builder, "o_cancel_button"); gtk_widget_set_sensitive (data->ok_button, FALSE); /* Set the signals handlers. */ g_signal_connect (G_OBJECT (data->dialog), "destroy", G_CALLBACK (open_with__destroy_cb), data); g_signal_connect (G_OBJECT (data->o_app_entry), "changed", G_CALLBACK (app_entry__changed_cb), data); g_signal_connect (G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (data->o_app_tree_view))), "changed", G_CALLBACK (app_list_selection_changed_cb), data); g_signal_connect (G_OBJECT (data->o_app_tree_view), "row_activated", G_CALLBACK (app_activated_cb), data); g_signal_connect (G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (data->o_recent_tree_view))), "changed", G_CALLBACK (recent_list_selection_changed_cb), data); g_signal_connect (G_OBJECT (data->o_recent_tree_view), "row_activated", G_CALLBACK (recent_activated_cb), data); g_signal_connect (G_OBJECT (data->ok_button), "clicked", G_CALLBACK (open_cb), data); g_signal_connect_swapped (G_OBJECT (cancel_button), "clicked", G_CALLBACK (gtk_widget_destroy), G_OBJECT (data->dialog)); g_signal_connect (G_OBJECT (data->o_del_button), "clicked", G_CALLBACK (delete_recent_cb), data); /* Set data. */ /* * registered applications list. */ data->app_list = NULL; for (scan = data->file_list; scan; scan = scan->next) { const char *mime_type; const char *name = scan->data; mime_type = get_file_mime_type_for_path (name, FALSE); if ((mime_type != NULL) && ! g_content_type_is_unknown (mime_type)) data->app_list = g_list_concat (data->app_list, g_app_info_get_all_for_type (mime_type)); } data->app_model = GTK_TREE_MODEL (gtk_list_store_new (N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER)); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (data->app_model), TEXT_COLUMN, GTK_SORT_ASCENDING); gtk_tree_view_set_model (GTK_TREE_VIEW (data->o_app_tree_view), data->app_model); g_object_unref (G_OBJECT (data->app_model)); theme = gtk_icon_theme_get_default (); icon_size = get_folder_pixbuf_size_for_list (GTK_WIDGET (data->dialog)); for (scan = data->app_list; scan; scan = scan->next) { gboolean found; char *utf8_name; GdkPixbuf *icon_image = NULL; app = scan->data; found = FALSE; if (app_names != NULL) { GList *p; for (p = app_names; p && !found; p = p->next) if (g_strcmp0 ((char*)p->data, g_app_info_get_executable (app)) == 0) found = TRUE; } if (found) continue; app_names = g_list_prepend (app_names, (char*) g_app_info_get_executable (app)); utf8_name = g_locale_to_utf8 (g_app_info_get_name (app), -1, NULL, NULL, NULL); icon_image = get_icon_pixbuf (g_app_info_get_icon (app), icon_size, theme); gtk_list_store_append (GTK_LIST_STORE (data->app_model), &iter); gtk_list_store_set (GTK_LIST_STORE (data->app_model), &iter, ICON_COLUMN, icon_image, TEXT_COLUMN, utf8_name, DATA_COLUMN, app, -1); g_free (utf8_name); } column = gtk_tree_view_column_new (); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, renderer, "pixbuf", ICON_COLUMN, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", TEXT_COLUMN, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (data->o_app_tree_view), column); if (app_names) g_list_free (app_names); /* * recent editors list. */ data->recent_model = GTK_TREE_MODEL (gtk_list_store_new (1, G_TYPE_STRING)); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (data->recent_model), 0, GTK_SORT_ASCENDING); gtk_tree_view_set_model (GTK_TREE_VIEW (data->o_recent_tree_view), data->recent_model); g_object_unref (G_OBJECT (data->recent_model)); editors = g_settings_get_strv (data->settings, PREF_GENERAL_EDITORS); for (i = 0; editors[i] != NULL; i++) { gtk_list_store_append (GTK_LIST_STORE (data->recent_model), &iter); gtk_list_store_set (GTK_LIST_STORE (data->recent_model), &iter, 0, editors[i], -1); } g_strfreev (editors); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (NULL, renderer, "text", 0, NULL); gtk_tree_view_column_set_sort_column_id (column, 0); gtk_tree_view_append_column (GTK_TREE_VIEW (data->o_recent_tree_view), column); /* Run dialog. */ gtk_window_set_transient_for (GTK_WINDOW (data->dialog), GTK_WINDOW (window)); gtk_window_set_modal (GTK_WINDOW (data->dialog), TRUE); gtk_widget_show_all (data->dialog); }