diff options
Diffstat (limited to 'capplets/default-applications/mate-da-capplet.c')
-rw-r--r-- | capplets/default-applications/mate-da-capplet.c | 174 |
1 files changed, 112 insertions, 62 deletions
diff --git a/capplets/default-applications/mate-da-capplet.c b/capplets/default-applications/mate-da-capplet.c index b82cdcaf..8ad4bf0d 100644 --- a/capplets/default-applications/mate-da-capplet.c +++ b/capplets/default-applications/mate-da-capplet.c @@ -27,6 +27,8 @@ #include <string.h> #include <glib/gi18n.h> #include <stdlib.h> +#include <gio/gio.h> +#include <gio/gdesktopappinfo.h> #include "mate-da-capplet.h" #include "capplet-util.h" @@ -46,7 +48,7 @@ enum { DA_N_COLUMNS }; -/* for combo box */ +/* For combo box */ enum { PIXBUF_COL, TEXT_COL, @@ -56,24 +58,11 @@ enum { }; static void -close_cb(GtkWidget* window, gint response, gpointer user_data) -{ - if (response == GTK_RESPONSE_HELP) - { - capplet_help(GTK_WINDOW(window), "prefs-preferredapps"); - } - else - { - gtk_widget_destroy(window); - gtk_main_quit(); - } -} - -static void set_changed(GtkComboBox* combo, MateDACapplet* capplet, GList* list, gint type) { guint index; GAppInfo* item; + GSettings* settings; index = gtk_combo_box_get_active(combo); @@ -84,72 +73,94 @@ set_changed(GtkComboBox* combo, MateDACapplet* capplet, GList* list, gint type) switch (type) { case DA_TYPE_WEB_BROWSER: - - /* establecemos el item */ g_app_info_set_as_default_for_type(item, "x-scheme-handler/http", NULL); g_app_info_set_as_default_for_type(item, "x-scheme-handler/https", NULL); - - /* about:config es usado por mozilla firefox y algunos otros con - * webtoolkit */ + /* about:config is used by firefox and others */ g_app_info_set_as_default_for_type(item, "x-scheme-handler/about", NULL); break; case DA_TYPE_EMAIL: - /* por alguna extraña razon, solo se usa mailto, en vez de mail. */ g_app_info_set_as_default_for_type(item, "x-scheme-handler/mailto", NULL); + g_app_info_set_as_default_for_type(item, "application/x-extension-eml", NULL); + g_app_info_set_as_default_for_type(item, "message/rfc822", NULL); break; case DA_TYPE_FILE: - /* falta agregar más mime-types */ g_app_info_set_as_default_for_type(item, "inode/directory", NULL); break; case DA_TYPE_TEXT: - /* falta agregar más mime-types */ g_app_info_set_as_default_for_type(item, "text/plain", NULL); break; case DA_TYPE_MEDIA: - /* por alguna extraña razon, solo se usa mailto, en vez de mail. */ - g_app_info_set_as_default_for_type(item, "audio/x-vorbis+ogg", NULL); - g_app_info_set_as_default_for_type(item, "audio/x-scpls", NULL); g_app_info_set_as_default_for_type(item, "audio/mpeg", NULL); - g_app_info_set_as_default_for_type(item, "audio/x-wav", NULL); g_app_info_set_as_default_for_type(item, "audio/x-mpegurl", NULL); - g_app_info_set_as_default_for_type(item, "video/webm", NULL); + g_app_info_set_as_default_for_type(item, "audio/x-scpls", NULL); + g_app_info_set_as_default_for_type(item, "audio/x-vorbis+ogg", NULL); + g_app_info_set_as_default_for_type(item, "audio/x-wav", NULL); break; case DA_TYPE_VIDEO: - /* por alguna extraña razon, solo se usa mailto, en vez de mail. */ + g_app_info_set_as_default_for_type(item, "video/mp4", NULL); g_app_info_set_as_default_for_type(item, "video/mpeg", NULL); - g_app_info_set_as_default_for_type(item, "video/x-mpeg", NULL); + g_app_info_set_as_default_for_type(item, "video/mp2t", NULL); g_app_info_set_as_default_for_type(item, "video/msvideo", NULL); g_app_info_set_as_default_for_type(item, "video/quicktime", NULL); - g_app_info_set_as_default_for_type(item, "video/x-avi", NULL); - g_app_info_set_as_default_for_type(item, "video/x-ogm+ogg", NULL); - g_app_info_set_as_default_for_type(item, "video/x-matroska", NULL); g_app_info_set_as_default_for_type(item, "video/webm", NULL); - g_app_info_set_as_default_for_type(item, "video/mp4", NULL); + g_app_info_set_as_default_for_type(item, "video/x-avi", NULL); g_app_info_set_as_default_for_type(item, "video/x-flv", NULL); + g_app_info_set_as_default_for_type(item, "video/x-matroska", NULL); + g_app_info_set_as_default_for_type(item, "video/x-mpeg", NULL); + g_app_info_set_as_default_for_type(item, "video/x-ogm+ogg", NULL); break; case DA_TYPE_IMAGE: - /* por alguna extraña razon, solo se usa mailto, en vez de mail. */ - g_app_info_set_as_default_for_type(item, "image/png", NULL); - g_app_info_set_as_default_for_type(item, "image/jpeg", NULL); - g_app_info_set_as_default_for_type(item, "image/gif", NULL); g_app_info_set_as_default_for_type(item, "image/bmp", NULL); + g_app_info_set_as_default_for_type(item, "image/gif", NULL); + g_app_info_set_as_default_for_type(item, "image/jpeg", NULL); + g_app_info_set_as_default_for_type(item, "image/png", NULL); g_app_info_set_as_default_for_type(item, "image/tiff", NULL); break; - - - default:; + + case DA_TYPE_TERMINAL: + settings = g_settings_new (TERMINAL_SCHEMA); + g_settings_set_string (settings, TERMINAL_KEY, g_app_info_get_executable (item)); + g_object_unref (settings); + break; + + default: break; } } } -/* Combo box callbacks */ +static void +close_cb(GtkWidget* window, gint response, MateDACapplet* capplet) +{ + if (response == GTK_RESPONSE_HELP) + { + capplet_help(GTK_WINDOW(window), "prefs-preferredapps"); + } + else + { + set_changed(GTK_COMBO_BOX(capplet->web_combo_box), capplet, capplet->web_browsers, DA_TYPE_WEB_BROWSER); + set_changed(GTK_COMBO_BOX(capplet->mail_combo_box), capplet, capplet->mail_readers, DA_TYPE_EMAIL); + set_changed(GTK_COMBO_BOX(capplet->file_combo_box), capplet, capplet->file_managers, DA_TYPE_FILE); + set_changed(GTK_COMBO_BOX(capplet->text_combo_box), capplet, capplet->text_editors, DA_TYPE_TEXT); + set_changed(GTK_COMBO_BOX(capplet->media_combo_box), capplet, capplet->media_players, DA_TYPE_MEDIA); + set_changed(GTK_COMBO_BOX(capplet->video_combo_box), capplet, capplet->video_players, DA_TYPE_VIDEO); + set_changed(GTK_COMBO_BOX(capplet->term_combo_box), capplet, capplet->terminals, DA_TYPE_TERMINAL); + set_changed(GTK_COMBO_BOX(capplet->visual_combo_box), capplet, capplet->visual_ats, DA_TYPE_VISUAL); + set_changed(GTK_COMBO_BOX(capplet->mobility_combo_box), capplet, capplet->mobility_ats, DA_TYPE_MOBILITY); + set_changed(GTK_COMBO_BOX(capplet->image_combo_box), capplet, capplet->image_viewers, DA_TYPE_IMAGE); + + gtk_widget_destroy(window); + gtk_main_quit(); + } +} + +/* Combo boxes callbacks */ static void web_combo_changed_cb(GtkComboBox* combo, MateDACapplet* capplet) { @@ -218,9 +229,12 @@ refresh_combo_box_icons(GtkIconTheme* theme, GtkComboBox* combo_box, GList* app_ gboolean valid; GdkPixbuf* pixbuf; gchar* icon_name; - + model = gtk_combo_box_get_model(combo_box); + if (model == NULL) + return; + valid = gtk_tree_model_get_iter_first(model, &iter); while (valid) @@ -252,18 +266,18 @@ static struct { } icons[] = { {"web_browser_image", "web-browser"}, {"mail_reader_image", "emblem-mail"}, - {"media_player_image", "audio-x-generic"}, /* applications-multimedia */ + {"media_player_image", "audio-x-generic"}, {"visual_image", "zoom-best-fit"}, {"mobility_image", "preferences-desktop-accessibility"}, {"messenger_image", "user-idle"}, {"filemanager_image", "file-manager"}, - {"imageviewer_image", "eog"}, /* no hay otra... */ + {"imageviewer_image", "image-x-generic"}, {"video_image", "video-x-generic"}, {"text_image", "text-editor"}, {"terminal_image", "terminal"}, }; -/* Esta funcion se llama cuando se cambia o actualizan los iconos */ +/* Callback for icon theme change */ static void theme_changed_cb(GtkIconTheme* theme, MateDACapplet* capplet) { @@ -287,6 +301,7 @@ theme_changed_cb(GtkIconTheme* theme, MateDACapplet* capplet) refresh_combo_box_icons(theme, GTK_COMBO_BOX(capplet->web_combo_box), capplet->web_browsers); refresh_combo_box_icons(theme, GTK_COMBO_BOX(capplet->mail_combo_box), capplet->mail_readers); refresh_combo_box_icons(theme, GTK_COMBO_BOX(capplet->media_combo_box), capplet->media_players); + refresh_combo_box_icons(theme, GTK_COMBO_BOX(capplet->video_combo_box), capplet->video_players); refresh_combo_box_icons(theme, GTK_COMBO_BOX(capplet->term_combo_box), capplet->terminals); refresh_combo_box_icons(theme, GTK_COMBO_BOX(capplet->visual_combo_box), capplet->visual_ats); refresh_combo_box_icons(theme, GTK_COMBO_BOX(capplet->mobility_combo_box), capplet->mobility_ats); @@ -322,8 +337,27 @@ fill_combo_box(GtkIconTheme* theme, GtkComboBox* combo_box, GList* app_list, gch GtkTreeIter iter; GdkPixbuf* pixbuf; GAppInfo* default_app; - - default_app = g_app_info_get_default_for_type(mime, FALSE); + + default_app = NULL; + if (g_strcmp0(mime, "terminal") == 0) + { + GSettings *terminal_settings = g_settings_new (TERMINAL_SCHEMA); + gchar *default_terminal = g_settings_get_string (terminal_settings, TERMINAL_KEY); + for (entry = app_list; entry != NULL; entry = g_list_next(entry)) + { + GAppInfo* item = (GAppInfo*) entry->data; + if (g_strcmp0 (g_app_info_get_executable (item), default_terminal) == 0) + { + default_app = item; + } + } + g_free (default_terminal); + g_object_unref (terminal_settings); + } + else + { + default_app = g_app_info_get_default_for_type (mime, FALSE); + } if (theme == NULL) { @@ -335,7 +369,7 @@ fill_combo_box(GtkIconTheme* theme, GtkComboBox* combo_box, GList* app_list, gch renderer = gtk_cell_renderer_pixbuf_new(); - /* not all cells have a pixbuf, this prevents the combo box to shrink */ + /* Not all cells have a pixbuf, this prevents the combo box to shrink */ gtk_cell_renderer_set_fixed_size(renderer, -1, 22); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo_box), renderer, FALSE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo_box), renderer, @@ -353,13 +387,14 @@ fill_combo_box(GtkIconTheme* theme, GtkComboBox* combo_box, GList* app_list, gch { GAppInfo* item = (GAppInfo*) entry->data; - // icon + /* Icon */ GIcon* icon = g_app_info_get_icon(item); gchar* icon_name = g_icon_to_string(icon); if (icon_name == NULL) { - icon_name = g_strdup("binary"); // default icon + /* Default icon */ + icon_name = g_strdup("binary"); } pixbuf = gtk_icon_theme_load_icon(theme, icon_name, 22, 0, NULL); @@ -377,7 +412,7 @@ fill_combo_box(GtkIconTheme* theme, GtkComboBox* combo_box, GList* app_list, gch g_object_unref(pixbuf); } - /* set the index */ + /* Set the index for the default app */ if (default_app != NULL && g_app_info_equal(item, default_app)) { gtk_combo_box_set_active(combo_box, index); @@ -422,7 +457,7 @@ show_dialog(MateDACapplet* capplet, const gchar* start_page) capplet->window = get_widget("preferred_apps_dialog"); - g_signal_connect(capplet->window, "response", G_CALLBACK(close_cb), NULL); + g_signal_connect(capplet->window, "response", G_CALLBACK(close_cb), capplet); capplet->web_combo_box = get_widget("web_browser_combobox"); capplet->mail_combo_box = get_widget("mail_reader_combobox"); @@ -439,28 +474,44 @@ show_dialog(MateDACapplet* capplet, const gchar* start_page) g_signal_connect(capplet->window, "screen-changed", G_CALLBACK(screen_changed_cb), capplet); screen_changed_cb(capplet->window, gdk_screen_get_default(), capplet); - // lists + /* Lists of default applications */ capplet->web_browsers = g_app_info_get_all_for_type("x-scheme-handler/http"); capplet->mail_readers = g_app_info_get_all_for_type("x-scheme-handler/mailto"); - //capplet->terminals = g_app_info_get_all_for_type("inode/directory"); capplet->media_players = g_app_info_get_all_for_type("audio/x-vorbis+ogg"); capplet->video_players = g_app_info_get_all_for_type("video/x-ogm+ogg"); - //capplet->visual_ats = g_app_info_get_all_for_type("inode/directory"); - //capplet->mobility_ats = g_app_info_get_all_for_type("inode/directory"); capplet->text_editors = g_app_info_get_all_for_type("text/plain"); capplet->image_viewers = g_app_info_get_all_for_type("image/png"); capplet->file_managers = g_app_info_get_all_for_type("inode/directory"); - + /* capplet->visual_ats = g_app_info_get_all_for_type("inode/directory"); */ + /* capplet->mobility_ats = g_app_info_get_all_for_type("inode/directory"); */ + + /* Terminal havent mime types, so check in .desktop files for + Categories=TerminalEmulator */ + GList *entry; + GList *all_apps; + capplet->terminals = NULL; + all_apps = g_app_info_get_all(); + for (entry = all_apps; entry != NULL; entry = g_list_next(entry)) + { + GDesktopAppInfo* item = (GDesktopAppInfo*) entry->data; + if (g_desktop_app_info_get_categories (item) != NULL && + g_strrstr (g_desktop_app_info_get_categories (item), "TerminalEmulator")) + { + capplet->terminals = g_list_prepend (capplet->terminals, item); + } + } + capplet->terminals = g_list_reverse (capplet->terminals); + fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->web_combo_box), capplet->web_browsers, "x-scheme-handler/http"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->mail_combo_box), capplet->mail_readers, "x-scheme-handler/mailto"); - //fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->term_combo_box), capplet->terminals, ""); + fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->term_combo_box), capplet->terminals, "terminal"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->media_combo_box), capplet->media_players, "audio/x-vorbis+ogg"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->video_combo_box), capplet->video_players, "video/x-ogm+ogg"); - //fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->visual_combo_box), capplet->visual_ats, NULL); - //fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->mobility_combo_box), capplet->mobility_ats, NULL); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->image_combo_box), capplet->image_viewers, "image/png"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->text_combo_box), capplet->text_editors, "text/plain"); fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->file_combo_box), capplet->file_managers, "inode/directory"); + /* fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->visual_combo_box), capplet->visual_ats, NULL); */ + /* fill_combo_box(capplet->icon_theme, GTK_COMBO_BOX(capplet->mobility_combo_box), capplet->mobility_ats, NULL); */ g_signal_connect(capplet->web_combo_box, "changed", G_CALLBACK(web_combo_changed_cb), capplet); g_signal_connect(capplet->mail_combo_box, "changed", G_CALLBACK(mail_combo_changed_cb), capplet); @@ -474,7 +525,6 @@ show_dialog(MateDACapplet* capplet, const gchar* start_page) g_signal_connect(capplet->file_combo_box, "changed", G_CALLBACK(file_combo_changed_cb), capplet); - /* TODO: fix the name icon */ gtk_window_set_icon_name(GTK_WINDOW (capplet->window), "preferences-desktop-default-applications"); if (start_page != NULL) |