diff -ur gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-da-capplet.c gnome-control-center-2.32.1/capplets/default-applications/gnome-da-capplet.c --- gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-da-capplet.c 2011-03-27 15:30:55.000000000 +0200 +++ gnome-control-center-2.32.1/capplets/default-applications/gnome-da-capplet.c 2011-03-27 15:31:26.000000000 +0200 @@ -64,83 +64,26 @@ } static void -web_radiobutton_toggled_cb (GtkWidget *togglebutton, GnomeDACapplet *capplet) -{ - gint index; - GnomeDAWebItem *item; - const gchar *command; - GError *error = NULL; - - index = gtk_combo_box_get_active (GTK_COMBO_BOX (capplet->web_combo_box)); - - if (index == -1) - return; - - item = (GnomeDAWebItem *) g_list_nth_data (capplet->web_browsers, index); - if (item == NULL) - return; - - if (togglebutton == capplet->new_win_radiobutton) { - command = item->win_command; - } - else if (togglebutton == capplet->new_tab_radiobutton) { - command = item->tab_command; - } - else { - command = item->generic.command; - } - - gconf_client_set_string (capplet->gconf, DEFAULT_APPS_KEY_HTTP_EXEC, command, &error); - - gtk_entry_set_text (GTK_ENTRY (capplet->web_browser_command_entry), command); - - if (error != NULL) { - g_warning (_("Error saving configuration: %s"), error->message); - g_error_free (error); - } -} - -static void web_combo_changed_cb (GtkComboBox *combo, GnomeDACapplet *capplet) { guint current_index; - gboolean is_custom_active; - gboolean has_net_remote; - GnomeDAWebItem *item; - GtkWidget *active = NULL; current_index = gtk_combo_box_get_active (combo); if (current_index < g_list_length (capplet->web_browsers)) { + GnomeDAURLItem *item; + GError *error = NULL; - item = (GnomeDAWebItem*) g_list_nth_data (capplet->web_browsers, current_index); - has_net_remote = item->netscape_remote; - is_custom_active = FALSE; - - } - else { - has_net_remote = FALSE; - is_custom_active = TRUE; - } - gtk_widget_set_sensitive (capplet->default_radiobutton, has_net_remote); - gtk_widget_set_sensitive (capplet->new_win_radiobutton, has_net_remote); - gtk_widget_set_sensitive (capplet->new_tab_radiobutton, has_net_remote); - - gtk_widget_set_sensitive (capplet->web_browser_command_entry, is_custom_active); - gtk_widget_set_sensitive (capplet->web_browser_command_label, is_custom_active); - gtk_widget_set_sensitive (capplet->web_browser_terminal_checkbutton, is_custom_active); - - if (has_net_remote) { - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (capplet->new_win_radiobutton))) - active = capplet->new_win_radiobutton; - else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (capplet->new_tab_radiobutton))) - active = capplet->new_tab_radiobutton; - else - active = capplet->default_radiobutton; + item = (GnomeDAURLItem*) g_list_nth_data (capplet->web_browsers, current_index); + if (item == NULL) + return; + + if (!g_app_info_set_as_default_for_type (item->app_info, "x-scheme-handler/http", &error) || + !g_app_info_set_as_default_for_type (item->app_info, "x-scheme-handler/https", &error)) { + g_warning (_("Error setting default browser: %s"), error->message); + g_error_free (error); + } } - - web_radiobutton_toggled_cb (active, capplet); } /* FIXME: Refactor these two functions below into one... */ @@ -148,14 +91,23 @@ mail_combo_changed_cb (GtkComboBox *combo, GnomeDACapplet *capplet) { guint current_index; - gboolean is_custom_active; current_index = gtk_combo_box_get_active (combo); - is_custom_active = (current_index >= g_list_length (capplet->mail_readers)); - gtk_widget_set_sensitive (capplet->mail_reader_command_entry, is_custom_active); - gtk_widget_set_sensitive (capplet->mail_reader_command_label, is_custom_active); - gtk_widget_set_sensitive (capplet->mail_reader_terminal_checkbutton, is_custom_active); + if (current_index < g_list_length (capplet->mail_readers)) { + GnomeDAURLItem *item; + GError *error = NULL; + + item = (GnomeDAURLItem*) g_list_nth_data (capplet->mail_readers, current_index); + if (item == NULL) + return; + + if (!g_app_info_set_as_default_for_type (item->app_info, "x-scheme-handler/mailto", &error)) { + g_warning (_("Error setting default mailer: %s"), error->message); + g_error_free (error); + } + } + } static void @@ -297,221 +249,6 @@ return (strcmp (((GnomeDAItem *) list_item)->command, (gchar *) command)); } -static gint -web_item_comp (gconstpointer item, gconstpointer command) -{ - GnomeDAWebItem *web_list_item; - - web_list_item = (GnomeDAWebItem *) item; - - if (strcmp (web_list_item->generic.command, (gchar *) command) == 0) - return 0; - - if (web_list_item->netscape_remote) { - if (strcmp (web_list_item->tab_command, (gchar *) command) == 0) - return 0; - - if (strcmp (web_list_item->win_command, (gchar *) command) == 0) - return 0; - } - - return (strcmp (web_list_item->generic.command, (gchar *) command)); -} - -static void -web_gconf_changed_cb (GConfPropertyEditor *peditor, gchar *key, GConfValue *value, GnomeDACapplet *capplet) -{ - GConfChangeSet *cs; - GError *error = NULL; - GList *list_entry; - - /* This function is used to update HTTPS,ABOUT and UNKNOWN handlers, which - * should also use the same value as HTTP - */ - - if (strcmp (key, DEFAULT_APPS_KEY_HTTP_EXEC) == 0) { - gchar *short_browser, *pos; - const gchar *value_str = gconf_value_get_string (value); - - cs = gconf_change_set_new (); - - gconf_change_set_set (cs, DEFAULT_APPS_KEY_HTTPS_EXEC, value); - gconf_change_set_set (cs, DEFAULT_APPS_KEY_UNKNOWN_EXEC, value); - gconf_change_set_set (cs, DEFAULT_APPS_KEY_ABOUT_EXEC, value); - pos = strstr (value_str, " "); - if (pos == NULL) - short_browser = g_strdup (value_str); - else - short_browser = g_strndup (value_str, pos - value_str); - gconf_change_set_set_string (cs, DEFAULT_APPS_KEY_BROWSER_EXEC, short_browser); - g_free (short_browser); - - list_entry = g_list_find_custom (capplet->web_browsers, - value_str, - (GCompareFunc) web_item_comp); - - if (list_entry) { - GnomeDAWebItem *item = (GnomeDAWebItem *) list_entry->data; - - gconf_change_set_set_bool (cs, DEFAULT_APPS_KEY_BROWSER_NREMOTE, item->netscape_remote); - } - - gconf_client_commit_change_set (capplet->gconf, cs, TRUE, &error); - - if (error != NULL) { - g_warning (_("Error saving configuration: %s"), error->message); - g_error_free (error); - error = NULL; - } - - gconf_change_set_unref (cs); - } - else if (strcmp (key, DEFAULT_APPS_KEY_HTTP_NEEDS_TERM) == 0) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (capplet->web_browser_terminal_checkbutton), - gconf_value_get_bool (value)); - - cs = gconf_change_set_new (); - - gconf_change_set_set (cs, DEFAULT_APPS_KEY_HTTPS_NEEDS_TERM, value); - gconf_change_set_set (cs, DEFAULT_APPS_KEY_UNKNOWN_NEEDS_TERM, value); - gconf_change_set_set (cs, DEFAULT_APPS_KEY_ABOUT_NEEDS_TERM, value); - gconf_change_set_set (cs, DEFAULT_APPS_KEY_BROWSER_NEEDS_TERM, value); - - gconf_client_commit_change_set (capplet->gconf, cs, TRUE, &error); - - if (error != NULL) { - g_warning (_("Error saving configuration: %s"), error->message); - g_error_free (error); - error = NULL; - } - - gconf_change_set_unref (cs); - } -} - -static void -web_browser_update_radio_buttons (GnomeDACapplet *capplet, const gchar *command) -{ - GList *entry; - gboolean has_net_remote; - - entry = g_list_find_custom (capplet->web_browsers, command, (GCompareFunc) web_item_comp); - - if (entry) { - GnomeDAWebItem *item = (GnomeDAWebItem *) entry->data; - - has_net_remote = item->netscape_remote; - - if (has_net_remote) { - /* disable "toggle" signal emitting, thus preventing calling this function twice */ - g_signal_handlers_block_matched (capplet->default_radiobutton, G_SIGNAL_MATCH_FUNC, 0, - 0, NULL, G_CALLBACK (web_radiobutton_toggled_cb), NULL); - g_signal_handlers_block_matched (capplet->new_tab_radiobutton, G_SIGNAL_MATCH_FUNC, 0, - 0, NULL, G_CALLBACK (web_radiobutton_toggled_cb), NULL); - g_signal_handlers_block_matched (capplet->new_win_radiobutton,G_SIGNAL_MATCH_FUNC, 0, - 0, NULL, G_CALLBACK (web_radiobutton_toggled_cb), NULL); - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (capplet->default_radiobutton), - strcmp (item->generic.command, command) == 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (capplet->new_tab_radiobutton), - strcmp (item->tab_command, command) == 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (capplet->new_win_radiobutton), - strcmp (item->win_command, command) == 0); - - g_signal_handlers_unblock_matched (capplet->default_radiobutton, G_SIGNAL_MATCH_FUNC, 0, - 0, NULL, G_CALLBACK (web_radiobutton_toggled_cb), NULL); - g_signal_handlers_unblock_matched (capplet->new_tab_radiobutton, G_SIGNAL_MATCH_FUNC, 0, - 0, NULL, G_CALLBACK (web_radiobutton_toggled_cb), NULL); - g_signal_handlers_unblock_matched (capplet->new_win_radiobutton, G_SIGNAL_MATCH_FUNC, 0, - 0, NULL, G_CALLBACK (web_radiobutton_toggled_cb), NULL); - } - } - else { - has_net_remote = FALSE; - } - - gtk_widget_set_sensitive (capplet->default_radiobutton, has_net_remote); - gtk_widget_set_sensitive (capplet->new_win_radiobutton, has_net_remote); - gtk_widget_set_sensitive (capplet->new_tab_radiobutton, has_net_remote); -} - -static GConfValue* -web_combo_conv_to_widget (GConfPropertyEditor *peditor, const GConfValue *value) -{ - GConfValue *ret; - GList *entry, *handlers; - const gchar *command; - gint index; - GnomeDACapplet *capplet; - - g_object_get (G_OBJECT (peditor), "data", &capplet, NULL); - - command = gconf_value_get_string (value); - handlers = capplet->web_browsers; - - if (handlers) - { - entry = g_list_find_custom (handlers, command, (GCompareFunc) web_item_comp); - if (entry) - index = g_list_position (handlers, entry); - else - index = g_list_length (handlers) + 1; - } - else - { - /* if the item has no handlers lsit then select the Custom item */ - index = 1; - } - - web_browser_update_radio_buttons (capplet, command); - - ret = gconf_value_new (GCONF_VALUE_INT); - gconf_value_set_int (ret, index); - - return ret; -} - -static GConfValue* -web_combo_conv_from_widget (GConfPropertyEditor *peditor, const GConfValue *value) -{ - GConfValue *ret; - GList *handlers; - gint index; - GnomeDAWebItem *item; - const gchar *command; - GnomeDACapplet *capplet; - - g_object_get (G_OBJECT (peditor), "data", &capplet, NULL); - - index = gconf_value_get_int (value); - handlers = capplet->web_browsers; - - item = g_list_nth_data (handlers, index); - - ret = gconf_value_new (GCONF_VALUE_STRING); - if (!item) - { - /* if item was not found, this is probably the "Custom" item */ - /* XXX: returning "" as the value here is not ideal, but required to - * prevent the combo box from jumping back to the previous value if the - * user has selected Custom */ - gconf_value_set_string (ret, ""); - return ret; - } - else - { - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (capplet->new_win_radiobutton)) && item->netscape_remote == TRUE) - command = item->win_command; - else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (capplet->new_tab_radiobutton)) && item->netscape_remote == TRUE) - command = item->tab_command; - else - command = item->generic.command; - - gconf_value_set_string (ret, command); - return ret; - } -} - static GConfValue* combo_conv_to_widget (GConfPropertyEditor *peditor, const GConfValue *value) { @@ -632,7 +369,7 @@ } static void -fill_combo_box (GtkIconTheme *theme, GtkComboBox *combo_box, GList *app_list) +fill_combo_box (GtkIconTheme *theme, GtkComboBox *combo_box, GList *app_list, gboolean add_custom) { GList *entry; GtkTreeModel *model; @@ -644,8 +381,10 @@ theme = gtk_icon_theme_get_default (); } - gtk_combo_box_set_row_separator_func (combo_box, is_separator, - GINT_TO_POINTER (g_list_length (app_list)), NULL); + if (add_custom) { + gtk_combo_box_set_row_separator_func (combo_box, is_separator, + GINT_TO_POINTER (g_list_length (app_list)), NULL); + } model = GTK_TREE_MODEL (gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING)); gtk_combo_box_set_model (combo_box, model); @@ -683,13 +422,41 @@ g_object_unref (pixbuf); } - gtk_list_store_append (GTK_LIST_STORE (model), &iter); - gtk_list_store_set (GTK_LIST_STORE (model), &iter, -1); - gtk_list_store_append (GTK_LIST_STORE (model), &iter); - gtk_list_store_set (GTK_LIST_STORE (model), &iter, - PIXBUF_COL, NULL, - TEXT_COL, _("Custom"), - -1); + if (add_custom) { + gtk_list_store_append (GTK_LIST_STORE (model), &iter); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, -1); + gtk_list_store_append (GTK_LIST_STORE (model), &iter); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + PIXBUF_COL, NULL, + TEXT_COL, _("Custom"), + -1); + } +} + +static void +select_current_for_uri_scheme (GtkComboBox *combo_box, GList *app_list, const gchar *uri) +{ + GAppInfo *current_default; + GList *l; + int index; + + current_default = g_app_info_get_default_for_uri_scheme (uri); + if (!current_default) + return; + + index = 0; + + for (l = app_list; l != NULL; l = l->next) { + if (!g_app_info_equal (current_default, ((GnomeDAURLItem *) l->data)->app_info)) { + index++; + continue; + } + + gtk_combo_box_set_active (combo_box, index); + break; + } + + g_object_unref (current_default); } static GtkWidget* @@ -702,7 +469,6 @@ static void show_dialog (GnomeDACapplet *capplet, const gchar *start_page) { - GObject *obj; GtkBuilder *builder; guint builder_result; @@ -732,17 +498,6 @@ capplet->window = _gtk_builder_get_widget (builder,"preferred_apps_dialog"); g_signal_connect (capplet->window, "response", G_CALLBACK (close_cb), NULL); - capplet->web_browser_command_entry = _gtk_builder_get_widget (builder, "web_browser_command_entry"); - capplet->web_browser_command_label = _gtk_builder_get_widget (builder, "web_browser_command_label"); - capplet->web_browser_terminal_checkbutton = _gtk_builder_get_widget(builder, "web_browser_terminal_checkbutton"); - capplet->default_radiobutton = _gtk_builder_get_widget (builder, "web_browser_default_radiobutton"); - capplet->new_win_radiobutton = _gtk_builder_get_widget (builder, "web_browser_new_win_radiobutton"); - capplet->new_tab_radiobutton = _gtk_builder_get_widget (builder, "web_browser_new_tab_radiobutton"); - - capplet->mail_reader_command_entry = _gtk_builder_get_widget (builder, "mail_reader_command_entry"); - capplet->mail_reader_command_label = _gtk_builder_get_widget (builder, "mail_reader_command_label"); - capplet->mail_reader_terminal_checkbutton = _gtk_builder_get_widget (builder, "mail_reader_terminal_checkbutton"); - capplet->terminal_command_entry = _gtk_builder_get_widget (builder, "terminal_command_entry"); capplet->terminal_command_label = _gtk_builder_get_widget (builder, "terminal_command_label"); capplet->terminal_exec_flag_entry = _gtk_builder_get_widget (builder, "terminal_exec_flag_entry"); @@ -770,12 +525,15 @@ g_signal_connect (capplet->window, "screen-changed", G_CALLBACK (screen_changed_cb), capplet); screen_changed_cb (capplet->window, gdk_screen_get_default (), capplet); - fill_combo_box (capplet->icon_theme, GTK_COMBO_BOX (capplet->web_combo_box), capplet->web_browsers); - fill_combo_box (capplet->icon_theme, GTK_COMBO_BOX (capplet->mail_combo_box), capplet->mail_readers); - 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->media_combo_box), capplet->media_players); - fill_combo_box (capplet->icon_theme, GTK_COMBO_BOX (capplet->visual_combo_box), capplet->visual_ats); - fill_combo_box (capplet->icon_theme, GTK_COMBO_BOX (capplet->mobility_combo_box), capplet->mobility_ats); + fill_combo_box (capplet->icon_theme, GTK_COMBO_BOX (capplet->web_combo_box), capplet->web_browsers, FALSE); + fill_combo_box (capplet->icon_theme, GTK_COMBO_BOX (capplet->mail_combo_box), capplet->mail_readers, FALSE); + fill_combo_box (capplet->icon_theme, GTK_COMBO_BOX (capplet->term_combo_box), capplet->terminals, TRUE); + fill_combo_box (capplet->icon_theme, GTK_COMBO_BOX (capplet->media_combo_box), capplet->media_players, TRUE); + fill_combo_box (capplet->icon_theme, GTK_COMBO_BOX (capplet->visual_combo_box), capplet->visual_ats, TRUE); + fill_combo_box (capplet->icon_theme, GTK_COMBO_BOX (capplet->mobility_combo_box), capplet->mobility_ats, TRUE); + + select_current_for_uri_scheme (GTK_COMBO_BOX (capplet->web_combo_box), capplet->web_browsers, "http"); + select_current_for_uri_scheme (GTK_COMBO_BOX (capplet->mail_combo_box), capplet->mail_readers, "mailto"); 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); @@ -784,53 +542,8 @@ g_signal_connect (capplet->visual_combo_box, "changed", G_CALLBACK (visual_combo_changed_cb), capplet); g_signal_connect (capplet->mobility_combo_box, "changed", G_CALLBACK (mobility_combo_changed_cb), capplet); - - g_signal_connect (capplet->default_radiobutton, "toggled", G_CALLBACK (web_radiobutton_toggled_cb), capplet); - g_signal_connect (capplet->new_win_radiobutton, "toggled", G_CALLBACK (web_radiobutton_toggled_cb), capplet); - g_signal_connect (capplet->new_tab_radiobutton, "toggled", G_CALLBACK (web_radiobutton_toggled_cb), capplet); - /* Setup GConfPropertyEditors */ - /* Web Browser */ - gconf_peditor_new_combo_box (NULL, - DEFAULT_APPS_KEY_HTTP_EXEC, - capplet->web_combo_box, - "conv-from-widget-cb", web_combo_conv_from_widget, - "conv-to-widget-cb", web_combo_conv_to_widget, - "data", capplet, - NULL); - - obj = gconf_peditor_new_string (NULL, - DEFAULT_APPS_KEY_HTTP_EXEC, - capplet->web_browser_command_entry, - NULL); - g_signal_connect (obj, "value-changed", G_CALLBACK (web_gconf_changed_cb), capplet); - - obj = gconf_peditor_new_boolean (NULL, - DEFAULT_APPS_KEY_HTTP_NEEDS_TERM, - capplet->web_browser_terminal_checkbutton, - NULL); - g_signal_connect (obj, "value-changed", G_CALLBACK (web_gconf_changed_cb), capplet); - - /* Mailer */ - gconf_peditor_new_combo_box (NULL, - DEFAULT_APPS_KEY_MAILER_EXEC, - capplet->mail_combo_box, - "conv-from-widget-cb", combo_conv_from_widget, - "conv-to-widget-cb", combo_conv_to_widget, - "data", capplet->mail_readers, - NULL); - - gconf_peditor_new_string (NULL, - DEFAULT_APPS_KEY_MAILER_EXEC, - capplet->mail_reader_command_entry, - NULL); - - gconf_peditor_new_boolean (NULL, - DEFAULT_APPS_KEY_MAILER_NEEDS_TERM, - capplet->mail_reader_terminal_checkbutton, - NULL); - /* Media player */ gconf_peditor_new_combo_box (NULL, DEFAULT_APPS_KEY_MEDIA_EXEC, diff -ur gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-da-capplet.h gnome-control-center-2.32.1/capplets/default-applications/gnome-da-capplet.h --- gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-da-capplet.h 2011-03-27 15:30:55.000000000 +0200 +++ gnome-control-center-2.32.1/capplets/default-applications/gnome-da-capplet.h 2011-03-27 15:31:26.000000000 +0200 @@ -85,17 +85,6 @@ GtkWidget *visual_combo_box; GtkWidget *mobility_combo_box; - GtkWidget *web_browser_command_entry; - GtkWidget *web_browser_command_label; - GtkWidget *web_browser_terminal_checkbutton; - GtkWidget *default_radiobutton; - GtkWidget *new_win_radiobutton; - GtkWidget *new_tab_radiobutton; - - GtkWidget *mail_reader_command_entry; - GtkWidget *mail_reader_command_label; - GtkWidget *mail_reader_terminal_checkbutton; - GtkWidget *terminal_command_entry; GtkWidget *terminal_command_label; GtkWidget *terminal_exec_flag_entry; diff -ur gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-da-item.c gnome-control-center-2.32.1/capplets/default-applications/gnome-da-item.c --- gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-da-item.c 2011-03-27 15:30:55.000000000 +0200 +++ gnome-control-center-2.32.1/capplets/default-applications/gnome-da-item.c 2011-03-27 15:31:26.000000000 +0200 @@ -21,12 +21,12 @@ #include "gnome-da-capplet.h" #include "gnome-da-item.h" -GnomeDAWebItem* -gnome_da_web_item_new (void) +GnomeDAURLItem* +gnome_da_url_item_new (void) { - GnomeDAWebItem *item = NULL; + GnomeDAURLItem *item = NULL; - item = g_new0 (GnomeDAWebItem, 1); + item = g_new0 (GnomeDAURLItem, 1); return item; } @@ -72,7 +72,7 @@ } void -gnome_da_web_item_free (GnomeDAWebItem *item) +gnome_da_url_item_free (GnomeDAURLItem *item) { g_return_if_fail (item != NULL); @@ -82,8 +82,7 @@ g_free (item->generic.icon_name); g_free (item->generic.icon_path); - g_free (item->tab_command); - g_free (item->win_command); + g_object_unref (item->app_info); g_free (item); } diff -ur gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-da-item.h gnome-control-center-2.32.1/capplets/default-applications/gnome-da-item.h --- gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-da-item.h 2011-03-27 15:30:55.000000000 +0200 +++ gnome-control-center-2.32.1/capplets/default-applications/gnome-da-item.h 2011-03-27 15:31:26.000000000 +0200 @@ -25,7 +25,7 @@ typedef struct _GnomeDAItem GnomeDAItem; -typedef struct _GnomeDAWebItem GnomeDAWebItem; +typedef struct _GnomeDAURLItem GnomeDAURLItem; typedef struct _GnomeDATermItem GnomeDATermItem; typedef struct _GnomeDASimpleItem GnomeDASimpleItem; typedef struct _GnomeDAVisualItem GnomeDAVisualItem; @@ -39,17 +39,14 @@ gchar *icon_path; }; -struct _GnomeDAWebItem { +struct _GnomeDASimpleItem { GnomeDAItem generic; gboolean run_in_terminal; - gboolean netscape_remote; - gchar *tab_command; - gchar *win_command; }; -struct _GnomeDASimpleItem { +struct _GnomeDAURLItem { GnomeDAItem generic; - gboolean run_in_terminal; + GAppInfo *app_info; }; struct _GnomeDATermItem { @@ -67,13 +64,13 @@ gboolean run_at_startup; }; -GnomeDAWebItem* gnome_da_web_item_new (void); GnomeDATermItem* gnome_da_term_item_new (void); +GnomeDAURLItem* gnome_da_url_item_new (void); GnomeDASimpleItem* gnome_da_simple_item_new (void); GnomeDAVisualItem* gnome_da_visual_item_new (void); GnomeDAMobilityItem* gnome_da_mobility_item_new (void); -void gnome_da_web_item_free (GnomeDAWebItem *item); void gnome_da_term_item_free (GnomeDATermItem *item); +void gnome_da_url_item_free (GnomeDAURLItem *item); void gnome_da_simple_item_free (GnomeDASimpleItem *item); void gnome_da_visual_item_free (GnomeDAVisualItem *item); void gnome_da_mobility_item_free (GnomeDAMobilityItem *item); diff -ur gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-da-xml.c gnome-control-center-2.32.1/capplets/default-applications/gnome-da-xml.c --- gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-da-xml.c 2011-03-27 15:30:55.000000000 +0200 +++ gnome-control-center-2.32.1/capplets/default-applications/gnome-da-xml.c 2011-03-27 15:31:26.000000000 +0200 @@ -47,7 +47,7 @@ if (!xmlStrncmp (element->name, xml_val_name, len)) { xmlChar *cont = xmlNodeGetContent (element); - if (!xmlStrcasecmp (cont, "true") || !xmlStrcasecmp (cont, "1")) + if (!xmlStrcasecmp (cont, (const xmlChar *) "true") || !xmlStrcasecmp (cont, (const xmlChar *) "1")) ret_val = TRUE; else ret_val = FALSE; @@ -91,7 +91,7 @@ } else { for (i = 0; sys_langs[i] != NULL; i++) { - if (!strcmp (sys_langs[i], node_lang)) { + if (!strcmp ((const char *) sys_langs[i], (const char *) node_lang)) { ret_val = (gchar *) xmlNodeGetContent (element); /* since sys_langs is sorted from most desirable to * least desirable, exit at first match @@ -109,7 +109,7 @@ } static gboolean -is_executable_valid (gchar *executable) +is_executable_valid (const gchar *executable) { gchar *path; @@ -129,8 +129,6 @@ xmlDoc *xml_doc; xmlNode *root, *section, *element; gchar *executable; - GnomeDAWebItem *web_item; - GnomeDASimpleItem *mail_item; GnomeDASimpleItem *media_item; GnomeDATermItem *term_item; GnomeDAVisualItem *visual_item; @@ -144,56 +142,9 @@ root = xmlDocGetRootElement (xml_doc); for (section = root->children; section != NULL; section = section->next) { - if (!xmlStrncmp (section->name, "web-browsers", 12)) { + if (!xmlStrncmp (section->name, (const xmlChar *) "terminals", 9)) { for (element = section->children; element != NULL; element = element->next) { - if (!xmlStrncmp (element->name, "web-browser", 11)) { - executable = gnome_da_xml_get_string (element, "executable"); - if (is_executable_valid (executable)) { - web_item = gnome_da_web_item_new (); - - web_item->generic.name = gnome_da_xml_get_string (element, "name"); - web_item->generic.executable = executable; - web_item->generic.command = gnome_da_xml_get_string (element, "command"); - web_item->generic.icon_name = gnome_da_xml_get_string (element, "icon-name"); - - web_item->run_in_terminal = gnome_da_xml_get_bool (element, "run-in-terminal"); - web_item->netscape_remote = gnome_da_xml_get_bool (element, "netscape-remote"); - if (web_item->netscape_remote) { - web_item->tab_command = gnome_da_xml_get_string (element, "tab-command"); - web_item->win_command = gnome_da_xml_get_string (element, "win-command"); - } - - capplet->web_browsers = g_list_append (capplet->web_browsers, web_item); - } - else - g_free (executable); - } - } - } - else if (!xmlStrncmp (section->name, "mail-readers", 12)) { - for (element = section->children; element != NULL; element = element->next) { - if (!xmlStrncmp (element->name, "mail-reader", 11)) { - executable = gnome_da_xml_get_string (element, "executable"); - if (is_executable_valid (executable)) { - mail_item = gnome_da_simple_item_new (); - - mail_item->generic.name = gnome_da_xml_get_string (element, "name"); - mail_item->generic.executable = executable; - mail_item->generic.command = gnome_da_xml_get_string (element, "command"); - mail_item->generic.icon_name = gnome_da_xml_get_string (element, "icon-name"); - - mail_item->run_in_terminal = gnome_da_xml_get_bool (element, "run-in-terminal"); - - capplet->mail_readers = g_list_append (capplet->mail_readers, mail_item); - } - else - g_free (executable); - } - } - } - else if (!xmlStrncmp (section->name, "terminals", 9)) { - for (element = section->children; element != NULL; element = element->next) { - if (!xmlStrncmp (element->name, "terminal", 8)) { + if (!xmlStrncmp (element->name, (const xmlChar *) "terminal", 8)) { executable = gnome_da_xml_get_string (element, "executable"); if (is_executable_valid (executable)) { term_item = gnome_da_term_item_new (); @@ -212,9 +163,9 @@ } } } - else if (!xmlStrncmp (section->name, "media-players", 13)) { + else if (!xmlStrncmp (section->name, (const xmlChar *) "media-players", 13)) { for (element = section->children; element != NULL; element = element->next) { - if (!xmlStrncmp (element->name, "media-player", 12)) { + if (!xmlStrncmp (element->name, (const xmlChar *) "media-player", 12)) { executable = gnome_da_xml_get_string (element, "executable"); if (is_executable_valid (executable)) { media_item = gnome_da_simple_item_new (); @@ -233,9 +184,9 @@ } } } - else if (!xmlStrncmp (section->name, "a11y-visual", 11)) { + else if (!xmlStrncmp (section->name, (const xmlChar *) "a11y-visual", 11)) { for (element = section->children; element != NULL; element = element->next) { - if (!xmlStrncmp (element->name, "visual", 6)) { + if (!xmlStrncmp (element->name, (const xmlChar *) "visual", 6)) { executable = gnome_da_xml_get_string (element,"executable"); if (is_executable_valid (executable)) { visual_item = gnome_da_visual_item_new (); @@ -254,9 +205,9 @@ } } } - else if (!xmlStrncmp (section->name, "a11y-mobility", 13)) { + else if (!xmlStrncmp (section->name, (const xmlChar *) "a11y-mobility", 13)) { for (element = section->children; element != NULL; element = element->next) { - if (!xmlStrncmp (element->name, "mobility", 8)) { + if (!xmlStrncmp (element->name, (const xmlChar *) "mobility", 8)) { executable = gnome_da_xml_get_string (element,"executable"); if (is_executable_valid (executable)) { mobility_item = gnome_da_mobility_item_new (); @@ -280,11 +231,46 @@ xmlFreeDoc (xml_doc); } +static GList * +load_url_handlers (GnomeDACapplet *capplet, const gchar *scheme) +{ + GList *app_list, *l, *ret; + + app_list = g_app_info_get_all_for_type (scheme); + ret = NULL; + + for (l = app_list; l != NULL; l = l->next) { + const gchar *executable; + GAppInfo *app_info = l->data; + + executable = g_app_info_get_executable (app_info); + if (is_executable_valid (executable)) { + GnomeDAURLItem *url_item; + + url_item = gnome_da_url_item_new (); + url_item->generic.name = g_strdup (g_app_info_get_display_name (app_info)); + url_item->generic.executable = g_strdup (executable); + url_item->generic.command = g_strdup (g_app_info_get_commandline (app_info)); + url_item->generic.icon_name = g_strdup (g_app_info_get_name (app_info)); + /* Steal the reference */ + url_item->app_info = app_info; + + ret = g_list_prepend (ret, url_item); + } else { + g_object_unref (app_info); + } + } + g_list_free (app_list); + + return g_list_reverse (ret); +} + void gnome_da_xml_load_list (GnomeDACapplet *capplet) { GDir *app_dir = g_dir_open (GNOMECC_APPS_DIR, 0, NULL); + /* First load all applications from the XML files */ if (app_dir != NULL) { const gchar *extra_file; gchar *filename; @@ -299,13 +285,17 @@ } g_dir_close (app_dir); } + + /* Now load URL handlers */ + capplet->web_browsers = load_url_handlers (capplet, "x-scheme-handler/http"); + capplet->mail_readers = load_url_handlers (capplet, "x-scheme-handler/mailto"); } void gnome_da_xml_free (GnomeDACapplet *capplet) { - g_list_foreach (capplet->web_browsers, (GFunc) gnome_da_web_item_free, NULL); - g_list_foreach (capplet->mail_readers, (GFunc) gnome_da_simple_item_free, NULL); + g_list_foreach (capplet->web_browsers, (GFunc) gnome_da_url_item_free, NULL); + g_list_foreach (capplet->mail_readers, (GFunc) gnome_da_url_item_free, NULL); g_list_foreach (capplet->terminals, (GFunc) gnome_da_term_item_free, NULL); g_list_foreach (capplet->media_players, (GFunc) gnome_da_simple_item_free, NULL); g_list_foreach (capplet->visual_ats, (GFunc) gnome_da_visual_item_free, NULL); diff -ur gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-default-applications-properties.ui gnome-control-center-2.32.1/capplets/default-applications/gnome-default-applications-properties.ui --- gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-default-applications-properties.ui 2011-03-27 15:30:55.000000000 +0200 +++ gnome-control-center-2.32.1/capplets/default-applications/gnome-default-applications-properties.ui 2011-03-27 15:31:26.000000000 +0200 @@ -1,4 +1,4 @@ - + @@ -69,122 +69,7 @@ - - True - 4 - 3 - 12 - 6 - - - True - True - All %s occurrences will be replaced with actual link - - - 1 - 2 - 3 - 4 - - - - - - Run in t_erminal - True - False - True - False - True - True - - - 2 - 3 - 3 - 4 - GTK_FILL - - - - - - Open link with web browser _default - True - False - True - False - True - True - True - - - 3 - GTK_FILL - - - - - - Open link in new _tab - True - False - True - False - True - True - web_browser_default_radiobutton - - - 3 - 2 - 3 - GTK_FILL - - - - - - Open link in new _window - True - False - True - False - True - True - web_browser_default_radiobutton - - - 3 - 1 - 2 - GTK_FILL - - - - - - True - False - 0 - C_ommand: - True - web_browser_command_entry - - - 3 - 4 - GTK_FILL - - - - - - False - False - 1 - + @@ -250,58 +135,7 @@ - - True - 3 - 12 - 6 - - - True - False - 0 - Co_mmand: - True - mail_reader_command_entry - - - GTK_FILL - - - - - - True - True - All %s occurrences will be replaced with actual link - - - 1 - 2 - - - - - - Run in t_erminal - True - False - True - False - True - True - - - 2 - 3 - GTK_FILL - - - - - - 1 - + diff -ur gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-default-applications.xml.in gnome-control-center-2.32.1/capplets/default-applications/gnome-default-applications.xml.in --- gnome-control-center-2.32.1.orig/capplets/default-applications/gnome-default-applications.xml.in 2011-03-27 15:30:55.000000000 +0200 +++ gnome-control-center-2.32.1/capplets/default-applications/gnome-default-applications.xml.in 2011-03-27 15:31:26.000000000 +0200 @@ -4,245 +4,6 @@ - - - <_name>Opera - opera - opera %s - opera - false - true - opera -newpage %s - opera -newwindow %s - - - <_name>Debian Sensible Browser - sensible-browser - sensible-browser %s - - false - false - - - <_name>Epiphany Web Browser - epiphany - epiphany %s - web-browser - false - true - epiphany --new-tab %s - epiphany --new-window %s - - - <_name>Galeon - galeon - galeon %s - galeon - false - true - galeon -n %s - galeon -w %s - - - <_name>Encompass - encompass - encompass %s - encompass - false - false - - - <_name>Firebird - mozilla-firebird - mozilla-firebird %s - - false - true - mozilla-firebird -remote "openurl(%s,new-tab)" - mozilla-firebird -remote "openurl(%s,new-window)" - - - <_name>Firefox - firefox - firefox %s - firefox - false - true - firefox -new-tab "%s" - firefox -new-window "%s" - - - <_name>Iceweasel - iceweasel - iceweasel %s - iceweasel - false - true - iceweasel -new-tab "%s" - iceweasel -new-window "%s" - - - <_name>Mozilla 1.6 - mozilla-1.6 - mozilla-1.6 %s - mozilla-icon - false - true - mozilla-1.6 -remote "openurl(%s,new-tab)" - mozilla-1.6 -remote "openurl(%s,new-window)" - - - <_name>Mozilla - mozilla - mozilla %s - mozilla-icon - false - true - mozilla -remote "openurl(%s,new-tab)" - mozilla -remote "openurl(%s,new-window)" - - - <_name>SeaMonkey - seamonkey - seamonkey %s - seamonkey - false - true - seamonkey -remote "openurl(%s,new-tab)" - seamonkey -remote "openurl(%s,new-window)" - - - <_name>Iceape - iceape - iceape %s - iceape - false - true - iceape -remote "openurl(%s,new-tab)" - iceape -remote "openurl(%s,new-window)" - - - <_name>Netscape Communicator - netscape - netscape %s - netscape - false - true - netscape -remote "openurl(%s,new-tab)" - netscape -remote "openurl(%s,new-window)" - - - <_name>Konqueror - konqueror - konqueror %s - konqueror - false - false - - - <_name>Midori - midori - midori %s - midori - false - false - - - - - - <_name>Evolution Mail Reader - evolution - evolution %s - evolution - false - - - <_name>Balsa - balsa - balsa -m %s - gnome-balsa2 - false - - - <_name>KMail - kmail - kmail %s - kmail - false - - - <_name>Icedove - icedove - icedove %s - icedove - false - - - <_name>Thunderbird - thunderbird - thunderbird %s - thunderbird - false - - - <_name>Mozilla Thunderbird - mozilla-thunderbird - mozilla-thunderbird %s - thunderbird - false - - - <_name>Mozilla Mail - mozilla - mozilla -mail %s - mozilla-mail-icon - false - - - <_name>SeaMonkey Mail - seamonkey - seamonkey -mail %s - seamonkey - false - - - <_name>Iceape Mail - iceape - iceape -mail %s - iceape - false - - - <_name>Mutt - mutt - mutt %s - gnome-mime-application-x-executable - true - - - <_name>Claws Mail - claws-mail - claws-mail --compose %s - claws-mail - false - - - <_name>Sylpheed-Claws - sylpheed-claws - sylpheed-claws --compose %s - sylpheed - false - - - <_name>Sylpheed - sylpheed - sylpheed --compose %s - sylpheed - false - - - <_name>Debian Terminal Emulator