diff options
Diffstat (limited to 'capplets/default-applications/gnome-default-applications-properties.c')
-rw-r--r-- | capplets/default-applications/gnome-default-applications-properties.c | 142 |
1 files changed, 126 insertions, 16 deletions
diff --git a/capplets/default-applications/gnome-default-applications-properties.c b/capplets/default-applications/gnome-default-applications-properties.c index 10843c7bf..10eb975d3 100644 --- a/capplets/default-applications/gnome-default-applications-properties.c +++ b/capplets/default-applications/gnome-default-applications-properties.c @@ -39,19 +39,28 @@ #include "capplet-util.h" #include "gconf-property-editor.h" -#define DEFAULT_APPS_KEY_BROWSER_NEEDS_TERM "/desktop/gnome/url-handlers/unknown/need-terminal" -#define DEFAULT_APPS_KEY_BROWSER_EXEC "/desktop/gnome/url-handlers/unknown/command" -#define DEFAULT_APPS_KEY_HELP_VIEWER_NEEDS_TERM "/desktop/gnome/applications/help_viewer/needs_term" -#define DEFAULT_APPS_KEY_HELP_VIEWER_ACCEPTS_URLS "/desktop/gnome/applications/help_viewer/accepts_urls" -#define DEFAULT_APPS_KEY_HELP_VIEWER_EXEC "/desktop/gnome/applications/help_viewer/exec" +#define DEFAULT_APPS_KEY_BROWSER_PATH "/desktop/gnome/url-handlers/unknown" +#define DEFAULT_APPS_KEY_BROWSER_NEEDS_TERM DEFAULT_APPS_KEY_BROWSER_PATH"/needs_terminal" +#define DEFAULT_APPS_KEY_BROWSER_EXEC DEFAULT_APPS_KEY_BROWSER_PATH"/command" -#define DEFAULT_APPS_KEY_TERMINAL_EXEC_ARG "/desktop/gnome/applications/terminal/exec_arg" -#define DEFAULT_APPS_KEY_TERMINAL_EXEC "/desktop/gnome/applications/terminal/exec" +#define DEFAULT_APPS_KEY_MAILER_PATH "/desktop/gnome/url-handlers/mailto" +#define DEFAULT_APPS_KEY_MAILER_NEEDS_TERM DEFAULT_APPS_KEY_MAILER_PATH"/needs_terminal" +#define DEFAULT_APPS_KEY_MAILER_EXEC DEFAULT_APPS_KEY_MAILER_PATH"/command" + +#define DEFAULT_APPS_KEY_HELP_VIEWER_PATH "/desktop/gnome/applications/help_viewer" +#define DEFAULT_APPS_KEY_HELP_VIEWER_NEEDS_TERM DEFAULT_APPS_KEY_HELP_VIEWER_PATH"/needs_term" +#define DEFAULT_APPS_KEY_HELP_VIEWER_ACCEPTS_URLS DEFAULT_APPS_KEY_HELP_VIEWER_PATH"/accepts_urls" +#define DEFAULT_APPS_KEY_HELP_VIEWER_EXEC DEFAULT_APPS_KEY_HELP_VIEWER_PATH"/exec" + +#define DEFAULT_APPS_KEY_TERMINAL_PATH "/desktop/gnome/applications/terminal" +#define DEFAULT_APPS_KEY_TERMINAL_EXEC_ARG DEFAULT_APPS_KEY_TERMINAL_PATH"/exec_arg" +#define DEFAULT_APPS_KEY_TERMINAL_EXEC DEFAULT_APPS_KEY_TERMINAL_PATH"/exec" #define MIME_APPLICATION_ID "gnome-default-applications-editor" typedef struct _BrowserDescription BrowserDescription; +typedef struct _MailerDescription MailerDescription; typedef struct _HelpViewDescription HelpViewDescription; typedef struct _TerminalDesciption TerminalDescription; @@ -159,6 +168,8 @@ on_text_default_viewer_toggle (GtkWidget *toggle, GladeXML *dialog) static void generic_guard (GtkWidget *toggle, GtkWidget *widget) { + + gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (toggle), FALSE); gtk_widget_set_sensitive (widget, GTK_TOGGLE_BUTTON (toggle)->active); if (GTK_TOGGLE_BUTTON (toggle)->active) { @@ -191,6 +202,13 @@ initialize_default_applications (void) g_free(browsers); } } + for (i = 0; i < G_N_ELEMENTS (possible_mailers); i++ ) { + gchar *mailers = g_find_program_in_path (possible_mailers[i].executable_name); + if (mailers) { + possible_mailers[i].in_path = TRUE; + g_free(mailers); + } + } for (i = 0; i < G_N_ELEMENTS (possible_help_viewers); i++ ) { gchar *help_viewers = g_find_program_in_path (possible_help_viewers[i].executable_name); if (help_viewers) { @@ -333,6 +351,11 @@ setup_peditors (GConfClient *client, gconf_peditor_new_string (changeset, DEFAULT_APPS_KEY_BROWSER_EXEC, WID ("web_custom_command_entry"), NULL); + gconf_peditor_new_boolean (changeset, DEFAULT_APPS_KEY_MAILER_NEEDS_TERM, + WID ("mail_custom_terminal_toggle"), NULL); + gconf_peditor_new_string (changeset, DEFAULT_APPS_KEY_MAILER_EXEC, + WID ("mail_custom_command_entry"), NULL); + gconf_peditor_new_boolean (changeset, DEFAULT_APPS_KEY_HELP_VIEWER_NEEDS_TERM, WID ("help_custom_terminal_toggle"), NULL); gconf_peditor_new_boolean (changeset, DEFAULT_APPS_KEY_HELP_VIEWER_ACCEPTS_URLS, @@ -379,9 +402,47 @@ read_browser (GConfClient *client, return; } } - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (WID ("web_select_radio")), TRUE); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (WID ("web_custom_radio")), TRUE); + gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (WID ("web_select_radio")), TRUE); + gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (WID ("web_custom_radio")), TRUE); g_free (browser); +} + +static void +read_mailer (GConfClient *client, + GladeXML *dialog) +{ + GError *error = NULL; + gchar *mailer; + gboolean needs_term; + gint i; + + needs_term = gconf_client_get_bool (client, DEFAULT_APPS_KEY_MAILER_NEEDS_TERM, &error); + if (error) { + /* hp will shoot me -- I'll do this later. */ + return; + } + mailer = gconf_client_get_string (client, DEFAULT_APPS_KEY_MAILER_EXEC, &error); + if (error) { + return; + } + + for (i = 0; i < G_N_ELEMENTS (possible_mailers); i++ ) { + if (possible_mailers[i].in_path == FALSE) + continue; + + if (mailer && strcmp (mailer, possible_mailers[i].command) == 0 && + needs_term == possible_mailers[i].needs_term) { + gtk_entry_set_text (GTK_ENTRY (WID ("mail_select_combo_entry")), + _(possible_mailers[i].name)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (WID ("mail_custom_radio")), TRUE); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (WID ("mail_select_radio")), TRUE); + g_free (mailer); + return; + } + } + gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (WID ("mail_select_radio")), TRUE); + gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (WID ("mail_custom_radio")), TRUE); + g_free (mailer); } @@ -404,6 +465,23 @@ browser_setup_custom (GtkWidget *entry, } } +static void +mailer_setup_custom (GtkWidget *entry, + GladeXML *dialog) +{ + gint i; + const gchar *mailer = gtk_entry_get_text (GTK_ENTRY (entry)); + + for (i = 0; i < G_N_ELEMENTS (possible_mailers); i++ ) { + if (! strcmp (_(possible_mailers[i].name), mailer)) { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (WID ("mail_custom_terminal_toggle")), + possible_mailers[i].needs_term); + gtk_entry_set_text (GTK_ENTRY (WID ("mail_custom_command_entry")), + possible_mailers[i].command); + return; + } + } +} static void read_help_viewer (GConfClient *client, @@ -539,11 +617,11 @@ value_changed_cb (GConfClient *client, GladeXML *dialog) { g_return_if_fail (key != NULL); - - if (strncmp (key, "/desktop/gnome/applications/editor", strlen ("/desktop/gnome/applications/editor")) == 0) { - } else if (strncmp (key, "/desktop/gnome/applications/browser/exec", strlen ("/desktop/gnome/applications/browser/exec")) == 0) { - } else if (strncmp (key, "/desktop/gnome/applications/help_viewer", strlen ("/desktop/gnome/applications/help_viewer")) == 0) { - } else if (strncmp (key, "/desktop/gnome/applications/terminal", strlen ("/desktop/gnome/applications/terminal")) == 0) { + if (strncmp (key, DEFAULT_APPS_KEY_MAILER_PATH, strlen (DEFAULT_APPS_KEY_MAILER_PATH)) == 0) { + gconf_client_set_bool (client, DEFAULT_APPS_KEY_MAILER_PATH"/enabled", TRUE, NULL); + } else if (strncmp (key, DEFAULT_APPS_KEY_BROWSER_PATH, strlen (DEFAULT_APPS_KEY_BROWSER_PATH)) == 0) { + } else if (strncmp (key, DEFAULT_APPS_KEY_HELP_VIEWER_PATH, strlen (DEFAULT_APPS_KEY_HELP_VIEWER_PATH)) == 0) { + } else if (strncmp (key, DEFAULT_APPS_KEY_TERMINAL_PATH, strlen (DEFAULT_APPS_KEY_TERMINAL_PATH)) == 0) { } } @@ -625,14 +703,46 @@ create_dialog (GConfClient *client) "changed", (GCallback) browser_setup_custom, dialog); g_signal_connect (G_OBJECT (WID ("web_select_radio")), - "toggled", (GCallback) generic_guard, + "clicked", (GCallback) generic_guard, WID ("web_select_combo")); g_signal_connect (G_OBJECT (WID ("web_custom_radio")), - "toggled", (GCallback) generic_guard, + "clicked", (GCallback) generic_guard, WID ("web_custom_vbox")); read_browser (client, dialog); + + /* Mail readers page */ + for (i = 0; i < G_N_ELEMENTS (possible_mailers); i++ ) { + if (possible_mailers[i].in_path) + strings = g_list_append (strings, _(possible_mailers[i].name)); + } + if (strings) { + /* We have default browsers */ + gtk_combo_set_popdown_strings (GTK_COMBO(WID ("mail_select_combo")), strings); + g_list_free (strings); + strings = NULL; + } else { + /* No default browsers */ + gtk_widget_set_sensitive (WID ("mail_select_radio"), FALSE); + } + + /* Source of command string */ + g_object_set_data (G_OBJECT (WID ("mail_select_radio")), "entry", WID ("mail_select_combo_entry")); + /* Source of command string */ + g_object_set_data (G_OBJECT (WID ("mail_custom_radio")), "entry", WID ("mail_custom_command_entry")); + + g_signal_connect (G_OBJECT (WID ("mail_select_combo_entry")), + "changed", (GCallback) mailer_setup_custom, + dialog); + g_signal_connect (G_OBJECT (WID ("mail_select_radio")), + "clicked", (GCallback) generic_guard, + WID ("mail_select_combo")); + g_signal_connect (G_OBJECT (WID ("mail_custom_radio")), + "clicked", (GCallback) generic_guard, + WID ("mail_custom_vbox")); + + read_mailer (client, dialog); /* Help page */ for (i = 0; i < G_N_ELEMENTS (possible_help_viewers); i++ ) { |