From 0b0e6bc987da4fd88a7854ebb12bde705e92c428 Mon Sep 17 00:00:00 2001 From: Perberos Date: Thu, 1 Dec 2011 21:51:44 -0300 Subject: moving from https://github.com/perberos/mate-desktop-environment --- capplets/default-applications/Makefile.am | 75 + .../default-applications.desktop.in.in | 14 + .../preferences-desktop-default-applications.png | Bin 0 -> 748 bytes .../preferences-desktop-default-applications.png | Bin 0 -> 1310 bytes .../preferences-desktop-default-applications.png | Bin 0 -> 1340 bytes .../preferences-desktop-default-applications.png | Bin 0 -> 1727 bytes .../preferences-desktop-default-applications.png | Bin 0 -> 2825 bytes .../default-applications/mate-at-commandline.in.in | 101 ++ .../mate-at-session.desktop.in.in | 15 + capplets/default-applications/mate-da-capplet.c | 970 +++++++++++++ capplets/default-applications/mate-da-capplet.h | 139 ++ capplets/default-applications/mate-da-item.c | 148 ++ capplets/default-applications/mate-da-item.h | 81 ++ capplets/default-applications/mate-da-xml.c | 327 +++++ capplets/default-applications/mate-da-xml.h | 27 + .../mate-default-applications-properties.ui | 1518 ++++++++++++++++++++ .../mate-default-applications.pc.in | 10 + .../mate-default-applications.xml.in | 483 +++++++ 18 files changed, 3908 insertions(+) create mode 100644 capplets/default-applications/Makefile.am create mode 100644 capplets/default-applications/default-applications.desktop.in.in create mode 100644 capplets/default-applications/icons/16x16/preferences-desktop-default-applications.png create mode 100644 capplets/default-applications/icons/22x22/preferences-desktop-default-applications.png create mode 100644 capplets/default-applications/icons/24x24/preferences-desktop-default-applications.png create mode 100644 capplets/default-applications/icons/32x32/preferences-desktop-default-applications.png create mode 100644 capplets/default-applications/icons/48x48/preferences-desktop-default-applications.png create mode 100644 capplets/default-applications/mate-at-commandline.in.in create mode 100644 capplets/default-applications/mate-at-session.desktop.in.in create mode 100644 capplets/default-applications/mate-da-capplet.c create mode 100644 capplets/default-applications/mate-da-capplet.h create mode 100644 capplets/default-applications/mate-da-item.c create mode 100644 capplets/default-applications/mate-da-item.h create mode 100644 capplets/default-applications/mate-da-xml.c create mode 100644 capplets/default-applications/mate-da-xml.h create mode 100644 capplets/default-applications/mate-default-applications-properties.ui create mode 100644 capplets/default-applications/mate-default-applications.pc.in create mode 100644 capplets/default-applications/mate-default-applications.xml.in (limited to 'capplets/default-applications') diff --git a/capplets/default-applications/Makefile.am b/capplets/default-applications/Makefile.am new file mode 100644 index 00000000..b6487ec7 --- /dev/null +++ b/capplets/default-applications/Makefile.am @@ -0,0 +1,75 @@ +# This is used in MATECC_CAPPLETS_CFLAGS +cappletname = default-applications + +bin_PROGRAMS = mate-default-applications-properties + +bin_SCRIPTS = mate-at-visual mate-at-mobility + +mate_default_applications_properties_LDADD = $(MATECC_CAPPLETS_LIBS) +mate_default_applications_properties_SOURCES = \ + mate-da-capplet.c mate-da-capplet.h \ + mate-da-xml.c mate-da-xml.h \ + mate-da-item.c mate-da-item.h + +@INTLTOOL_DESKTOP_RULE@ + +uidir = $(pkgdatadir)/ui +dist_ui_DATA = mate-default-applications-properties.ui + +mate-at-visual: mate-at-commandline.in + cp $< $@ + +mate-at-mobility: mate-at-commandline.in + cp $< $@ + +desktopdir = $(datadir)/applications +Desktop_in_files = default-applications.desktop.in +desktop_DATA = $(Desktop_in_files:.desktop.in=.desktop) + +pkgconfigdir = $(datadir)/pkgconfig +pkgconfig_DATA = mate-default-applications.pc + +autostartdir = $(sysconfdir)/xdg/autostart +autostart_in_files = mate-at-session.desktop.in +autostart_DATA = $(autostart_in_files:.desktop.in=.desktop) + +xmldata_in_files = mate-default-applications.xml.in +xmldatadir = $(pkgdatadir)/default-apps +xmldata_DATA = $(xmldata_in_files:.xml.in=.xml) +@INTLTOOL_XML_RULE@ + +INCLUDES = \ + $(MATECC_CAPPLETS_CFLAGS) \ + $(DEFAULT_APPLICATIONS_CAPPLET_CFLAGS) \ + -DMATELOCALEDIR=\""$(datadir)/locale"\"\ + -DMATECC_UI_DIR=\""$(uidir)"\" \ + -DMATECC_APPS_DIR=\""$(xmldatadir)"\" + +icons16dir = $(datadir)/icons/mate/16x16/apps +dist_icons16_DATA = icons/16x16/preferences-desktop-default-applications.png +icons22dir = $(datadir)/icons/mate/22x22/apps +dist_icons22_DATA = icons/22x22/preferences-desktop-default-applications.png +icons24dir = $(datadir)/icons/mate/24x24/apps +dist_icons24_DATA = icons/24x24/preferences-desktop-default-applications.png +icons32dir = $(datadir)/icons/mate/32x32/apps +dist_icons32_DATA = icons/32x32/preferences-desktop-default-applications.png +icons48dir = $(datadir)/icons/mate/48x48/apps +dist_icons48_DATA = icons/48x48/preferences-desktop-default-applications.png + +gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor +uninstall-hook: update-icon-cache +install-data-hook: update-icon-cache +update-icon-cache: + @-if test -z "$(DESTDIR)"; then \ + echo "Updating Gtk icon cache."; \ + $(gtk_update_icon_cache); \ + else \ + echo "*** Icon cache not updated. After install, run this:"; \ + echo "*** $(gtk_update_icon_cache)"; \ + fi + + +CLEANFILES = $(MATECC_CAPPLETS_CLEANFILES) $(Desktop_in_files) $(desktop_DATA) $(xmldata_DATA) $(autostart_DATA) $(bin_SCRIPTS) +EXTRA_DIST = $(xmldata_in_files) mate-default-applications.pc.in + +-include $(top_srcdir)/git.mk diff --git a/capplets/default-applications/default-applications.desktop.in.in b/capplets/default-applications/default-applications.desktop.in.in new file mode 100644 index 00000000..9b25b759 --- /dev/null +++ b/capplets/default-applications/default-applications.desktop.in.in @@ -0,0 +1,14 @@ +[Desktop Entry] +_Name=Preferred Applications +_Comment=Select your default applications +Exec=mate-default-applications-properties +Icon=preferences-desktop-default-applications +Terminal=false +Type=Application +StartupNotify=true +Categories=MATE;GTK;Settings;X-MATE-PersonalSettings; +OnlyShowIn=MATE; +X-MATE-Bugzilla-Bugzilla=MATE +X-MATE-Bugzilla-Product=mate-control-center +X-MATE-Bugzilla-Component=Preferred applications +X-MATE-Bugzilla-Version=@VERSION@ diff --git a/capplets/default-applications/icons/16x16/preferences-desktop-default-applications.png b/capplets/default-applications/icons/16x16/preferences-desktop-default-applications.png new file mode 100644 index 00000000..41a765aa Binary files /dev/null and b/capplets/default-applications/icons/16x16/preferences-desktop-default-applications.png differ diff --git a/capplets/default-applications/icons/22x22/preferences-desktop-default-applications.png b/capplets/default-applications/icons/22x22/preferences-desktop-default-applications.png new file mode 100644 index 00000000..83b6826c Binary files /dev/null and b/capplets/default-applications/icons/22x22/preferences-desktop-default-applications.png differ diff --git a/capplets/default-applications/icons/24x24/preferences-desktop-default-applications.png b/capplets/default-applications/icons/24x24/preferences-desktop-default-applications.png new file mode 100644 index 00000000..630ea040 Binary files /dev/null and b/capplets/default-applications/icons/24x24/preferences-desktop-default-applications.png differ diff --git a/capplets/default-applications/icons/32x32/preferences-desktop-default-applications.png b/capplets/default-applications/icons/32x32/preferences-desktop-default-applications.png new file mode 100644 index 00000000..23718f78 Binary files /dev/null and b/capplets/default-applications/icons/32x32/preferences-desktop-default-applications.png differ diff --git a/capplets/default-applications/icons/48x48/preferences-desktop-default-applications.png b/capplets/default-applications/icons/48x48/preferences-desktop-default-applications.png new file mode 100644 index 00000000..ac25569d Binary files /dev/null and b/capplets/default-applications/icons/48x48/preferences-desktop-default-applications.png differ diff --git a/capplets/default-applications/mate-at-commandline.in.in b/capplets/default-applications/mate-at-commandline.in.in new file mode 100644 index 00000000..f9d93b16 --- /dev/null +++ b/capplets/default-applications/mate-at-commandline.in.in @@ -0,0 +1,101 @@ +#!/bin/sh +# +# Copyright 2006 IBM Corp. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of version 2 of the GNU General Public License +# as published by the Free Software Foundation +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. +# +############################################################################### +# +# NOTE: This script is intended to be run from the command line, +# MATE menu, or from the desktop autostart. +# +# /usr/bin/mate-at-visual +# /usr/bin/mate-at-mobility +# +# If the "-s" flag is used then it is assumed to have been invoked +# from /usr/share/mate/autostart/, and the first AT flagged +# to "startup" from MATECONF_ALL will be executed. +# + +USAGE="$0 [-s]" +MATECONF_PATH=/desktop/mate/applications/at +MATECONF_VISUAL="visual" +MATECONF_MOBILITY="mobility" +MATECONF_ALL="$MATECONF_VISUAL $MATECONF_MOBILITY" + +run_at() { + CMDLINE=`mateconftool-2 --get $MATECONF_PATH/$1/exec` + if [ $? -ne 0 ]; then + exit $? + fi + + if [ -z "$CMDLINE" ]; then + exit 2 + fi + + STARTUP=`mateconftool-2 --get $MATECONF_PATH/$1/startup` + if [ $? -ne 0 ]; then + exit $? + fi + + if [ ! -z "$AUTOSTART" ]; then + # assuming ran from /usr/share/mate/autostart + if [ "x$STARTUP" = "xtrue" ]; then + # mateconf indicated requested autostart + ($CMDLINE &) + fi + else + # run from command line or desktop menu + ($CMDLINE &) + fi +} + +case `basename $0` in + mate-at-visual ) + AT=$MATECONF_VISUAL + ;; + mate-at-mobility ) + AT=$MATECONF_MOBILITY + ;; + mate-at-session | * ) + AUTOSTART="yes" + AT=$MATECONF_ALL + ;; +esac + +while getopts "s" options; do + case $options in + s ) AUTOSTART="yes" + AT=$MATECONF_ALL + shift + ;; + \? ) echo $USAGE + exit 1 + ;; + * ) echo $USAGE + exit 1 + ;; + esac +done + +if [ $# -ne 0 ]; then + echo $USAGE + exit 1 +fi + +for I in $AT ; do + run_at $I +done + +#EOF diff --git a/capplets/default-applications/mate-at-session.desktop.in.in b/capplets/default-applications/mate-at-session.desktop.in.in new file mode 100644 index 00000000..2e32f8ba --- /dev/null +++ b/capplets/default-applications/mate-at-session.desktop.in.in @@ -0,0 +1,15 @@ +[Desktop Entry] +_Name=Visual Assistance +_Comment=Start the preferred visual assistive technology +Exec=mate-at-visual -s +Icon=preferences-desktop-accessibility +Terminal=false +Type=Application +StartupNotify=false +OnlyShowIn=MATE; +AutostartCondition=MATE /desktop/mate/interface/accessibility +X-MATE-Bugzilla-Bugzilla=MATE +X-MATE-Bugzilla-Product=mate-control-center +X-MATE-Bugzilla-Component=other capplets +X-MATE-Bugzilla-Version=@VERSION@ +X-MATE-Autostart-enabled=true diff --git a/capplets/default-applications/mate-da-capplet.c b/capplets/default-applications/mate-da-capplet.c new file mode 100644 index 00000000..37a01359 --- /dev/null +++ b/capplets/default-applications/mate-da-capplet.c @@ -0,0 +1,970 @@ +/* + * Authors: Luca Cavalli + * + * Copyright 2005-2006 Luca Cavalli + * Copyright 2008 Thomas Wood + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#include "mateconf-property-editor.h" +#include "mate-da-capplet.h" +#include "mate-da-xml.h" +#include "mate-da-item.h" +#include "capplet-util.h" + +enum { + PIXBUF_COL, + TEXT_COL, + N_COLUMNS +}; + +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_icon (GtkImage* image, GtkIconTheme* theme, const char* name) +{ + GdkPixbuf* pixbuf; + + if ((pixbuf = gtk_icon_theme_load_icon(theme, name, 48, 0, NULL))) + { + gtk_image_set_from_pixbuf(image, pixbuf); + g_object_unref(pixbuf); + } +} + +static void web_radiobutton_toggled_cb(GtkWidget* togglebutton, MateDACapplet* capplet) +{ + gint index; + MateDAWebItem *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 = (MateDAWebItem *) 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; + } + + mateconf_client_set_string (capplet->mateconf, 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, MateDACapplet* capplet) +{ + guint current_index; + gboolean is_custom_active; + gboolean has_net_remote; + MateDAWebItem *item; + GtkWidget *active = NULL; + + current_index = gtk_combo_box_get_active (combo); + + if (current_index < g_list_length (capplet->web_browsers)) { + + item = (MateDAWebItem*) 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; + } + + web_radiobutton_toggled_cb (active, capplet); +} + +/* FIXME: Refactor these two functions below into one... */ +static void mail_combo_changed_cb(GtkComboBox* combo, MateDACapplet* 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); +} + +static void media_combo_changed_cb(GtkComboBox* combo, MateDACapplet* 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->media_players)); + + gtk_widget_set_sensitive (capplet->media_player_command_entry, is_custom_active); + gtk_widget_set_sensitive (capplet->media_player_command_label, is_custom_active); + gtk_widget_set_sensitive (capplet->media_player_terminal_checkbutton, is_custom_active); +} + +static void terminal_combo_changed_cb(GtkComboBox* combo, MateDACapplet* 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->terminals)); + + gtk_widget_set_sensitive (capplet->terminal_command_entry, is_custom_active); + gtk_widget_set_sensitive (capplet->terminal_command_label, is_custom_active); + gtk_widget_set_sensitive (capplet->terminal_exec_flag_entry, is_custom_active); + gtk_widget_set_sensitive (capplet->terminal_exec_flag_label, is_custom_active); +} + +static void visual_combo_changed_cb(GtkComboBox* combo, MateDACapplet* 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->visual_ats)); + + gtk_widget_set_sensitive (capplet->visual_command_entry, is_custom_active); + gtk_widget_set_sensitive (capplet->visual_command_label, is_custom_active); +} + +static void mobility_combo_changed_cb(GtkComboBox* combo, MateDACapplet* 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->mobility_ats)); + + gtk_widget_set_sensitive (capplet->mobility_command_entry, is_custom_active); + gtk_widget_set_sensitive (capplet->mobility_command_label, is_custom_active); +} + +static void refresh_combo_box_icons(GtkIconTheme* theme, GtkComboBox* combo_box, GList* app_list) +{ + GList *entry; + MateDAItem *item; + GtkTreeModel *model; + GtkTreeIter iter; + GdkPixbuf *pixbuf; + + for (entry = app_list; entry != NULL; entry = g_list_next (entry)) { + item = (MateDAItem *) entry->data; + + model = gtk_combo_box_get_model (combo_box); + + if (item->icon_path && gtk_tree_model_get_iter_from_string (model, &iter, item->icon_path)) { + pixbuf = gtk_icon_theme_load_icon (theme, item->icon_name, 22, 0, NULL); + + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + PIXBUF_COL, pixbuf, + -1); + + if (pixbuf) + g_object_unref (pixbuf); + } + } +} + +static struct { + const gchar* name; + const gchar* icon; +} icons[] = { + {"web_browser_image", "web-browser"}, + {"mail_reader_image", "emblem-mail"}, + {"media_player_image", "applications-multimedia"}, + {"visual_image", "zoom-best-fit"}, + {"mobility_image", "preferences-desktop-accessibility"}, + /* + {"messenger_image", "im"}, + {"file_manager_image", "file-manager"}, + {"image_image", "image-viewer"}, + {"video_image", "mate-multimedia"}, + {"text_image", "text-editor"}, + */ + {"terminal_image", "mate-terminal"} +}; + +static void theme_changed_cb(GtkIconTheme* theme, MateDACapplet* capplet) +{ + GObject *icon; + gint i; + + for (i = 0; i < G_N_ELEMENTS (icons); i++) + { + icon = gtk_builder_get_object (capplet->builder, icons[i].name); + set_icon (GTK_IMAGE (icon), theme, icons[i].icon); + } + + 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->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); +} + +static void screen_changed_cb(GtkWidget* widget, GdkScreen* screen, MateDACapplet* capplet) +{ + GtkIconTheme* theme; + + theme = gtk_icon_theme_get_for_screen (screen); + + if (capplet->icon_theme != NULL) + { + g_signal_handlers_disconnect_by_func (capplet->icon_theme, theme_changed_cb, capplet); + } + + g_signal_connect (theme, "changed", G_CALLBACK (theme_changed_cb), capplet); + theme_changed_cb (theme, capplet); + + capplet->icon_theme = theme; +} + +static gint generic_item_comp(gconstpointer list_item, gconstpointer command) +{ + return (strcmp (((MateDAItem *) list_item)->command, (gchar *) command)); +} + +static gint web_item_comp(gconstpointer item, gconstpointer command) +{ + MateDAWebItem *web_list_item; + + web_list_item = (MateDAWebItem *) 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_mateconf_changed_cb(MateConfPropertyEditor* peditor, gchar* key, MateConfValue* value, MateDACapplet* capplet) +{ + MateConfChangeSet *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 = mateconf_value_get_string (value); + + cs = mateconf_change_set_new (); + + mateconf_change_set_set (cs, DEFAULT_APPS_KEY_HTTPS_EXEC, value); + mateconf_change_set_set (cs, DEFAULT_APPS_KEY_UNKNOWN_EXEC, value); + mateconf_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); + mateconf_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) { + MateDAWebItem *item = (MateDAWebItem *) list_entry->data; + + mateconf_change_set_set_bool (cs, DEFAULT_APPS_KEY_BROWSER_NREMOTE, item->netscape_remote); + } + + mateconf_client_commit_change_set (capplet->mateconf, cs, TRUE, &error); + + if (error != NULL) { + g_warning (_("Error saving configuration: %s"), error->message); + g_error_free (error); + error = NULL; + } + + mateconf_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), + mateconf_value_get_bool (value)); + + cs = mateconf_change_set_new (); + + mateconf_change_set_set (cs, DEFAULT_APPS_KEY_HTTPS_NEEDS_TERM, value); + mateconf_change_set_set (cs, DEFAULT_APPS_KEY_UNKNOWN_NEEDS_TERM, value); + mateconf_change_set_set (cs, DEFAULT_APPS_KEY_ABOUT_NEEDS_TERM, value); + mateconf_change_set_set (cs, DEFAULT_APPS_KEY_BROWSER_NEEDS_TERM, value); + + mateconf_client_commit_change_set (capplet->mateconf, cs, TRUE, &error); + + if (error != NULL) { + g_warning (_("Error saving configuration: %s"), error->message); + g_error_free (error); + error = NULL; + } + + mateconf_change_set_unref (cs); + } +} + +static void web_browser_update_radio_buttons(MateDACapplet* 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) { + MateDAWebItem *item = (MateDAWebItem *) 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 MateConfValue* web_combo_conv_to_widget (MateConfPropertyEditor *peditor, const MateConfValue *value) +{ + MateConfValue *ret; + GList *entry, *handlers; + const gchar *command; + gint index; + MateDACapplet *capplet; + + g_object_get (G_OBJECT (peditor), "data", &capplet, NULL); + + command = mateconf_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 = mateconf_value_new (MATECONF_VALUE_INT); + mateconf_value_set_int (ret, index); + + return ret; +} + +static MateConfValue* web_combo_conv_from_widget (MateConfPropertyEditor *peditor, const MateConfValue *value) +{ + MateConfValue *ret; + GList *handlers; + gint index; + MateDAWebItem *item; + const gchar *command; + MateDACapplet *capplet; + + g_object_get (G_OBJECT (peditor), "data", &capplet, NULL); + + index = mateconf_value_get_int (value); + handlers = capplet->web_browsers; + + item = g_list_nth_data (handlers, index); + + ret = mateconf_value_new (MATECONF_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 */ + mateconf_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; + + mateconf_value_set_string (ret, command); + return ret; + } +} + +static MateConfValue* combo_conv_to_widget (MateConfPropertyEditor *peditor, const MateConfValue *value) +{ + MateConfValue *ret; + GList *entry, *handlers; + const gchar *command; + gint index; + + g_object_get (G_OBJECT (peditor), "data", &handlers, NULL); + + command = mateconf_value_get_string (value); + + if (handlers) + { + entry = g_list_find_custom (handlers, command, (GCompareFunc) generic_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; + } + + ret = mateconf_value_new (MATECONF_VALUE_INT); + mateconf_value_set_int (ret, index); + return ret; +} + +static MateConfValue* combo_conv_from_widget (MateConfPropertyEditor *peditor, const MateConfValue *value) +{ + MateConfValue *ret; + GList *handlers; + gint index; + MateDAItem *item; + + g_object_get (G_OBJECT (peditor), "data", &handlers, NULL); + index = mateconf_value_get_int (value); + + item = g_list_nth_data (handlers, index); + ret = mateconf_value_new (MATECONF_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 */ + mateconf_value_set_string (ret, ""); + return ret; + } + else + { + mateconf_value_set_string (ret, item->command); + return ret; + } +} + +static MateConfValue* combo_conv_from_widget_term_flag (MateConfPropertyEditor *peditor, const MateConfValue *value) +{ + MateConfValue *ret; + GList *handlers; + gint index; + MateDATermItem *item; + + g_object_get (G_OBJECT (peditor), "data", &handlers, NULL); + index = mateconf_value_get_int (value); + + item = g_list_nth_data (handlers, index); + ret = mateconf_value_new (MATECONF_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 */ + mateconf_value_set_string (ret, ""); + return ret; + } + else + { + mateconf_value_set_string (ret, item->exec_flag); + return ret; + } +} + +static MateConfValue* combo_conv_to_widget_term_flag (MateConfPropertyEditor *peditor, const MateConfValue *value) +{ + MateConfValue *ret; + GtkComboBox *combo; + + combo = GTK_COMBO_BOX (mateconf_property_editor_get_ui_control (peditor)); + + ret = mateconf_value_new (MATECONF_VALUE_INT); + mateconf_value_set_int (ret, gtk_combo_box_get_active (combo)); + return ret; +} + +static gboolean is_separator (GtkTreeModel *model, GtkTreeIter *iter, gpointer sep_index) +{ + GtkTreePath *path; + gboolean result; + + path = gtk_tree_model_get_path (model, iter); + result = gtk_tree_path_get_indices (path)[0] == GPOINTER_TO_INT (sep_index); + gtk_tree_path_free (path); + + return result; +} + +static void fill_combo_box (GtkIconTheme *theme, GtkComboBox *combo_box, GList *app_list) +{ + GList *entry; + GtkTreeModel *model; + GtkCellRenderer *renderer; + GtkTreeIter iter; + GdkPixbuf *pixbuf; + + if (theme == NULL) { + 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); + + model = GTK_TREE_MODEL (gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING)); + gtk_combo_box_set_model (combo_box, model); + + renderer = gtk_cell_renderer_pixbuf_new (); + + /* 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, + "pixbuf", PIXBUF_COL, + NULL); + + renderer = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), renderer, + "text", TEXT_COL, + NULL); + + for (entry = app_list; entry != NULL; entry = g_list_next (entry)) { + MateDAItem *item; + item = (MateDAItem *) entry->data; + + pixbuf = gtk_icon_theme_load_icon (theme, item->icon_name, 22, 0, NULL); + + gtk_list_store_append (GTK_LIST_STORE (model), &iter); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + PIXBUF_COL, pixbuf, + TEXT_COL, item->name, + -1); + + item->icon_path = gtk_tree_model_get_string_from_iter (model, &iter); + + if (pixbuf) + 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); +} + +static GtkWidget* _gtk_builder_get_widget (GtkBuilder *builder, const gchar *name) +{ + return GTK_WIDGET (gtk_builder_get_object (builder, name)); +} + + +static void show_dialog (MateDACapplet* capplet, const gchar* start_page) +{ + GObject *obj; + GtkBuilder *builder; + guint builder_result; + + capplet->builder = builder = gtk_builder_new (); + + if (g_file_test (MATECC_UI_DIR "/mate-default-applications-properties.ui", G_FILE_TEST_EXISTS) != FALSE) { + builder_result = gtk_builder_add_from_file (builder, MATECC_UI_DIR "/mate-default-applications-properties.ui", NULL); + } + else { + builder_result = gtk_builder_add_from_file (builder, "./mate-default-applications-properties.ui", NULL); + } + + if (builder_result == 0) { + GtkWidget *dialog; + + dialog = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, + _("Could not load the main interface")); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), + _("Please make sure that the applet " + "is properly installed")); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + exit (EXIT_FAILURE); + } + + 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"); + capplet->terminal_exec_flag_label = _gtk_builder_get_widget (builder, "terminal_exec_flag_label"); + + capplet->media_player_command_entry = _gtk_builder_get_widget (builder, "media_player_command_entry"); + capplet->media_player_command_label = _gtk_builder_get_widget (builder, "media_player_command_label"); + capplet->media_player_terminal_checkbutton = _gtk_builder_get_widget (builder, "media_player_terminal_checkbutton"); + + capplet->visual_command_entry = _gtk_builder_get_widget (builder, "visual_command_entry"); + capplet->visual_command_label = _gtk_builder_get_widget (builder, "visual_command_label"); + capplet->visual_startup_checkbutton = _gtk_builder_get_widget (builder, "visual_start_checkbutton"); + + capplet->mobility_command_entry = _gtk_builder_get_widget (builder, "mobility_command_entry"); + capplet->mobility_command_label = _gtk_builder_get_widget (builder, "mobility_command_label"); + capplet->mobility_startup_checkbutton = _gtk_builder_get_widget (builder, "mobility_start_checkbutton"); + + capplet->web_combo_box = _gtk_builder_get_widget (builder, "web_browser_combobox"); + capplet->mail_combo_box = _gtk_builder_get_widget (builder, "mail_reader_combobox"); + capplet->term_combo_box = _gtk_builder_get_widget (builder, "terminal_combobox"); + capplet->media_combo_box = _gtk_builder_get_widget (builder, "media_player_combobox"); + capplet->visual_combo_box = _gtk_builder_get_widget (builder, "visual_combobox"); + capplet->mobility_combo_box = _gtk_builder_get_widget (builder, "mobility_combobox"); + + 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); + + 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); + g_signal_connect (capplet->term_combo_box, "changed", G_CALLBACK (terminal_combo_changed_cb), capplet); + g_signal_connect (capplet->media_combo_box, "changed", G_CALLBACK (media_combo_changed_cb), capplet); + 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 MateConfPropertyEditors */ + + /* Web Browser */ + mateconf_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 = mateconf_peditor_new_string (NULL, + DEFAULT_APPS_KEY_HTTP_EXEC, + capplet->web_browser_command_entry, + NULL); + g_signal_connect (obj, "value-changed", G_CALLBACK (web_mateconf_changed_cb), capplet); + + obj = mateconf_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_mateconf_changed_cb), capplet); + + /* Mailer */ + mateconf_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); + + mateconf_peditor_new_string (NULL, + DEFAULT_APPS_KEY_MAILER_EXEC, + capplet->mail_reader_command_entry, + NULL); + + mateconf_peditor_new_boolean (NULL, + DEFAULT_APPS_KEY_MAILER_NEEDS_TERM, + capplet->mail_reader_terminal_checkbutton, + NULL); + + /* Media player */ + mateconf_peditor_new_combo_box (NULL, + DEFAULT_APPS_KEY_MEDIA_EXEC, + capplet->media_combo_box, + "conv-from-widget-cb", combo_conv_from_widget, + "conv-to-widget-cb", combo_conv_to_widget, + "data", capplet->media_players, + NULL); + + mateconf_peditor_new_string (NULL, + DEFAULT_APPS_KEY_MEDIA_EXEC, + capplet->media_player_command_entry, + NULL); + + mateconf_peditor_new_boolean (NULL, + DEFAULT_APPS_KEY_MEDIA_NEEDS_TERM, + capplet->media_player_terminal_checkbutton, + NULL); + + /* Terminal */ + mateconf_peditor_new_combo_box (NULL, + DEFAULT_APPS_KEY_TERMINAL_EXEC, + capplet->term_combo_box, + "conv-from-widget-cb", combo_conv_from_widget, + "conv-to-widget-cb", combo_conv_to_widget, + "data", capplet->terminals, + NULL); + + mateconf_peditor_new_combo_box (NULL, + DEFAULT_APPS_KEY_TERMINAL_EXEC_ARG, + capplet->term_combo_box, + "conv-from-widget-cb", combo_conv_from_widget_term_flag, + "conv-to-widget-cb", combo_conv_to_widget_term_flag, + "data", capplet->terminals, + NULL); + + mateconf_peditor_new_string (NULL, + DEFAULT_APPS_KEY_TERMINAL_EXEC, + capplet->terminal_command_entry, + NULL); + mateconf_peditor_new_string (NULL, + DEFAULT_APPS_KEY_TERMINAL_EXEC_ARG, + capplet->terminal_exec_flag_entry, + NULL); + + + /* Visual */ + mateconf_peditor_new_combo_box (NULL, + DEFAULT_APPS_KEY_VISUAL_EXEC, + capplet->visual_combo_box, + "conv-from-widget-cb", combo_conv_from_widget, + "conv-to-widget-cb", combo_conv_to_widget, + "data", capplet->visual_ats, + NULL); + + mateconf_peditor_new_string (NULL, + DEFAULT_APPS_KEY_VISUAL_EXEC, + capplet->visual_command_entry, + NULL); + + mateconf_peditor_new_boolean (NULL, + DEFAULT_APPS_KEY_VISUAL_STARTUP, + capplet->visual_startup_checkbutton, + NULL); + + + /* Mobility */ + mateconf_peditor_new_combo_box (NULL, + DEFAULT_APPS_KEY_MOBILITY_EXEC, + capplet->mobility_combo_box, + "conv-from-widget-cb", combo_conv_from_widget, + "conv-to-widget-cb", combo_conv_to_widget, + "data", capplet->mobility_ats, + NULL); + + mateconf_peditor_new_string (NULL, + DEFAULT_APPS_KEY_MOBILITY_EXEC, + capplet->mobility_command_entry, + NULL); + + mateconf_peditor_new_boolean (NULL, + DEFAULT_APPS_KEY_MOBILITY_STARTUP, + capplet->mobility_startup_checkbutton, + NULL); + + gtk_window_set_icon_name (GTK_WINDOW (capplet->window), + "preferences-desktop-default-applications"); + + if (start_page != NULL) { + gchar *page_name; + GtkWidget *w; + + page_name = g_strconcat (start_page, "_vbox", NULL); + + w = _gtk_builder_get_widget (builder, page_name); + if (w != NULL) { + GtkNotebook *nb; + gint pindex; + + nb = GTK_NOTEBOOK (_gtk_builder_get_widget (builder, + "preferred_apps_notebook")); + pindex = gtk_notebook_page_num (nb, w); + if (pindex != -1) + gtk_notebook_set_current_page (nb, pindex); + } + g_free (page_name); + } + + gtk_widget_show (capplet->window); +} + +int main (int argc, char** argv) +{ + MateDACapplet* capplet; + + gchar* start_page = NULL; + + GOptionContext* context; + GOptionEntry option_entries[] = { + { + "show-page", + 'p', + G_OPTION_FLAG_IN_MAIN, + G_OPTION_ARG_STRING, + &start_page, + /* TRANSLATORS: don't translate the terms in brackets */ + N_("Specify the name of the page to show (internet|multimedia|system|a11y)"), + N_("page") + }, + {NULL} + }; + + context = g_option_context_new(_("- MATE Default Applications")); + g_option_context_add_main_entries (context, option_entries, GETTEXT_PACKAGE); + + capplet_init (context, &argc, &argv); + + capplet = g_new0(MateDACapplet, 1); + capplet->mateconf = mateconf_client_get_default(); + mateconf_client_add_dir(capplet->mateconf, "/desktop/mate/url-handlers", MATECONF_CLIENT_PRELOAD_RECURSIVE, NULL); + mateconf_client_add_dir(capplet->mateconf, "/desktop/mate/applications", MATECONF_CLIENT_PRELOAD_RECURSIVE, NULL); + + mate_da_xml_load_list(capplet); + + show_dialog(capplet, start_page); + g_free(start_page); + + gtk_main(); + + g_object_unref(capplet->mateconf); + + mate_da_xml_free(capplet); + + return 0; +} diff --git a/capplets/default-applications/mate-da-capplet.h b/capplets/default-applications/mate-da-capplet.h new file mode 100644 index 00000000..3ce72955 --- /dev/null +++ b/capplets/default-applications/mate-da-capplet.h @@ -0,0 +1,139 @@ +/* + * Authors: Luca Cavalli + * + * Copyright 2005-2006 Luca Cavalli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#ifndef _MATE_DA_CAPPLET_H_ +#define _MATE_DA_CAPPLET_H_ + +#include +#include + +// Set http, https, about, and unknown keys to the chosen web browser. +#define DEFAULT_APPS_KEY_HTTP_PATH "/desktop/mate/url-handlers/http" +#define DEFAULT_APPS_KEY_HTTP_NEEDS_TERM DEFAULT_APPS_KEY_HTTP_PATH"/needs_terminal" +#define DEFAULT_APPS_KEY_HTTP_EXEC DEFAULT_APPS_KEY_HTTP_PATH"/command" + +#define DEFAULT_APPS_KEY_HTTPS_PATH "/desktop/mate/url-handlers/https" +#define DEFAULT_APPS_KEY_HTTPS_NEEDS_TERM DEFAULT_APPS_KEY_HTTPS_PATH"/needs_terminal" +#define DEFAULT_APPS_KEY_HTTPS_EXEC DEFAULT_APPS_KEY_HTTPS_PATH"/command" + +// While mate-vfs2 does not use the "unknown" key, several widespread apps like htmlview +// have read it for the past few years. Setting it should not hurt. +#define DEFAULT_APPS_KEY_UNKNOWN_PATH "/desktop/mate/url-handlers/unknown" +#define DEFAULT_APPS_KEY_UNKNOWN_NEEDS_TERM DEFAULT_APPS_KEY_UNKNOWN_PATH"/needs_terminal" +#define DEFAULT_APPS_KEY_UNKNOWN_EXEC DEFAULT_APPS_KEY_UNKNOWN_PATH"/command" + +// about:blank and other about: URI's are commonly used by browsers too +#define DEFAULT_APPS_KEY_ABOUT_PATH "/desktop/mate/url-handlers/about" +#define DEFAULT_APPS_KEY_ABOUT_NEEDS_TERM DEFAULT_APPS_KEY_ABOUT_PATH"/needs_terminal" +#define DEFAULT_APPS_KEY_ABOUT_EXEC DEFAULT_APPS_KEY_ABOUT_PATH"/command" + +#define DEFAULT_APPS_KEY_MAILER_PATH "/desktop/mate/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_BROWSER_PATH "/desktop/mate/applications/browser" +#define DEFAULT_APPS_KEY_BROWSER_EXEC DEFAULT_APPS_KEY_BROWSER_PATH"/exec" +#define DEFAULT_APPS_KEY_BROWSER_NEEDS_TERM DEFAULT_APPS_KEY_BROWSER_PATH"/needs_term" +#define DEFAULT_APPS_KEY_BROWSER_NREMOTE DEFAULT_APPS_KEY_BROWSER_PATH"/nremote" + +#define DEFAULT_APPS_KEY_TERMINAL_PATH "/desktop/mate/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 DEFAULT_APPS_KEY_MEDIA_PATH "/desktop/mate/applications/media" +#define DEFAULT_APPS_KEY_MEDIA_EXEC DEFAULT_APPS_KEY_MEDIA_PATH"/exec" +#define DEFAULT_APPS_KEY_MEDIA_NEEDS_TERM DEFAULT_APPS_KEY_MEDIA_PATH"/needs_term" + +#define DEFAULT_APPS_KEY_VISUAL_PATH "/desktop/mate/applications/at/visual" +#define DEFAULT_APPS_KEY_VISUAL_EXEC DEFAULT_APPS_KEY_VISUAL_PATH"/exec" +#define DEFAULT_APPS_KEY_VISUAL_STARTUP DEFAULT_APPS_KEY_VISUAL_PATH"/startup" + +#define DEFAULT_APPS_KEY_MOBILITY_PATH "/desktop/mate/applications/at/mobility" +#define DEFAULT_APPS_KEY_MOBILITY_EXEC DEFAULT_APPS_KEY_MOBILITY_PATH"/exec" +#define DEFAULT_APPS_KEY_MOBILITY_STARTUP DEFAULT_APPS_KEY_MOBILITY_PATH"/startup" + +typedef struct _MateDACapplet MateDACapplet; + +struct _MateDACapplet { + GtkBuilder* builder; + + GtkIconTheme* icon_theme; + + GtkWidget* window; + + GtkWidget* web_combo_box; + GtkWidget* mail_combo_box; + GtkWidget* term_combo_box; + GtkWidget* media_combo_box; + GtkWidget* visual_combo_box; + GtkWidget* mobility_combo_box; + /* Para el File Manager */ + /*GtkWidget* filemanager_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; + + /* Para el File Manager */ + /*GtkWidget* file_manager_command_entry; + GtkWidget* file_manager_command_label; + GtkWidget* file_manager_terminal_checkbutton; + GtkWidget* file_manager_default_radiobutton; + GtkWidget* file_manager_new_win_radiobutton; + GtkWidget* file_manager_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; + GtkWidget* terminal_exec_flag_label; + + GtkWidget* media_player_command_entry; + GtkWidget* media_player_command_label; + GtkWidget* media_player_terminal_checkbutton; + + GtkWidget* visual_command_entry; + GtkWidget* visual_command_label; + GtkWidget* visual_startup_checkbutton; + + GtkWidget* mobility_command_entry; + GtkWidget* mobility_command_label; + GtkWidget* mobility_startup_checkbutton; + + MateConfClient* mateconf; + + GList* web_browsers; + GList* mail_readers; + GList* terminals; + GList* media_players; + GList* visual_ats; + GList* mobility_ats; + /* Para el File Manager */ + /*GList* file_managers;*/ +}; + +#endif diff --git a/capplets/default-applications/mate-da-item.c b/capplets/default-applications/mate-da-item.c new file mode 100644 index 00000000..06bda549 --- /dev/null +++ b/capplets/default-applications/mate-da-item.c @@ -0,0 +1,148 @@ +/* + * Authors: Luca Cavalli + * + * Copyright 2005-2006 Luca Cavalli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#include "mate-da-capplet.h" +#include "mate-da-item.h" + +MateDAWebItem* +mate_da_web_item_new (void) +{ + MateDAWebItem *item = NULL; + + item = g_new0 (MateDAWebItem, 1); + + return item; +} + +MateDASimpleItem* +mate_da_simple_item_new (void) +{ + MateDASimpleItem *item = NULL; + + item = g_new0 (MateDASimpleItem, 1); + + return item; +} + +MateDATermItem* +mate_da_term_item_new (void) +{ + MateDATermItem *item = NULL; + + item = g_new0 (MateDATermItem, 1); + + return item; +} + +MateDAVisualItem* +mate_da_visual_item_new (void) +{ + MateDAVisualItem *item = NULL; + + item = g_new0 (MateDAVisualItem, 1); + + return item; +} + +MateDAMobilityItem* +mate_da_mobility_item_new (void) +{ + MateDAMobilityItem *item = NULL; + + item = g_new0 (MateDAMobilityItem, 1); + + return item; +} + +void +mate_da_web_item_free (MateDAWebItem *item) +{ + g_return_if_fail (item != NULL); + + g_free (item->generic.name); + g_free (item->generic.executable); + g_free (item->generic.command); + g_free (item->generic.icon_name); + g_free (item->generic.icon_path); + + g_free (item->tab_command); + g_free (item->win_command); + + g_free (item); +} + +void +mate_da_simple_item_free (MateDASimpleItem *item) +{ + g_return_if_fail (item != NULL); + + g_free (item->generic.name); + g_free (item->generic.executable); + g_free (item->generic.command); + g_free (item->generic.icon_name); + g_free (item->generic.icon_path); + + g_free (item); +} + +void +mate_da_term_item_free (MateDATermItem *item) +{ + g_return_if_fail (item != NULL); + + g_free (item->generic.name); + g_free (item->generic.executable); + g_free (item->generic.command); + g_free (item->generic.icon_name); + g_free (item->generic.icon_path); + + g_free (item->exec_flag); + + g_free (item); +} + +void +mate_da_visual_item_free (MateDAVisualItem *item) +{ + g_return_if_fail (item != NULL); + + g_free (item->generic.name); + g_free (item->generic.executable); + g_free (item->generic.command); + g_free (item->generic.icon_name); + g_free (item->generic.icon_path); + + g_free (item); +} + +void +mate_da_mobility_item_free (MateDAMobilityItem *item) +{ + g_return_if_fail (item != NULL); + + g_free (item->generic.name); + g_free (item->generic.executable); + g_free (item->generic.command); + g_free (item->generic.icon_name); + g_free (item->generic.icon_path); + + g_free (item); +} + diff --git a/capplets/default-applications/mate-da-item.h b/capplets/default-applications/mate-da-item.h new file mode 100644 index 00000000..81223f4e --- /dev/null +++ b/capplets/default-applications/mate-da-item.h @@ -0,0 +1,81 @@ +/* + * Authors: Luca Cavalli + * + * Copyright 2005-2006 Luca Cavalli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#ifndef _MATE_DA_ITEM_H_ +#define _MATE_DA_ITEM_H_ + +#include + +typedef struct _MateDAItem MateDAItem; + +typedef struct _MateDAWebItem MateDAWebItem; +typedef struct _MateDATermItem MateDATermItem; +typedef struct _MateDASimpleItem MateDASimpleItem; +typedef struct _MateDAVisualItem MateDAVisualItem; +typedef struct _MateDAMobilityItem MateDAMobilityItem; + +struct _MateDAItem { + gchar *name; + gchar *executable; + gchar *command; + gchar *icon_name; + gchar *icon_path; +}; + +struct _MateDAWebItem { + MateDAItem generic; + gboolean run_in_terminal; + gboolean netscape_remote; + gchar *tab_command; + gchar *win_command; +}; + +struct _MateDASimpleItem { + MateDAItem generic; + gboolean run_in_terminal; +}; + +struct _MateDATermItem { + MateDAItem generic; + gchar *exec_flag; +}; + +struct _MateDAVisualItem { + MateDAItem generic; + gboolean run_at_startup; +}; + +struct _MateDAMobilityItem { + MateDAItem generic; + gboolean run_at_startup; +}; + +MateDAWebItem* mate_da_web_item_new (void); +MateDATermItem* mate_da_term_item_new (void); +MateDASimpleItem* mate_da_simple_item_new (void); +MateDAVisualItem* mate_da_visual_item_new (void); +MateDAMobilityItem* mate_da_mobility_item_new (void); +void mate_da_web_item_free (MateDAWebItem *item); +void mate_da_term_item_free (MateDATermItem *item); +void mate_da_simple_item_free (MateDASimpleItem *item); +void mate_da_visual_item_free (MateDAVisualItem *item); +void mate_da_mobility_item_free (MateDAMobilityItem *item); + +#endif diff --git a/capplets/default-applications/mate-da-xml.c b/capplets/default-applications/mate-da-xml.c new file mode 100644 index 00000000..288495c7 --- /dev/null +++ b/capplets/default-applications/mate-da-xml.c @@ -0,0 +1,327 @@ +/* + * Authors: Luca Cavalli + * + * Copyright 2005-2006 Luca Cavalli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#include +#include +#include +#include + +#include "mate-da-capplet.h" +#include "mate-da-xml.h" +#include "mate-da-item.h" + + +static gboolean +mate_da_xml_get_bool (const xmlNode *parent, const gchar *val_name) +{ + xmlNode *element; + gboolean ret_val = FALSE; + xmlChar *xml_val_name; + gint len; + + g_return_val_if_fail (parent != NULL, FALSE); + g_return_val_if_fail (parent->children != NULL, ret_val); + g_return_val_if_fail (val_name != NULL, FALSE); + + xml_val_name = xmlCharStrdup (val_name); + len = xmlStrlen (xml_val_name); + + for (element = parent->children; element != NULL; element = element->next) { + if (!xmlStrncmp (element->name, xml_val_name, len)) { + xmlChar *cont = xmlNodeGetContent (element); + + if (!xmlStrcasecmp (cont, "true") || !xmlStrcasecmp (cont, "1")) + ret_val = TRUE; + else + ret_val = FALSE; + + xmlFree (cont); + } + } + + xmlFree (xml_val_name); + return ret_val; +} + +static gchar* +mate_da_xml_get_string (const xmlNode *parent, const gchar *val_name) +{ + const gchar * const *sys_langs; + xmlChar *node_lang; + xmlNode *element; + gchar *ret_val = NULL; + xmlChar *xml_val_name; + gint len; + gint i; + + g_return_val_if_fail (parent != NULL, ret_val); + g_return_val_if_fail (parent->children != NULL, ret_val); + g_return_val_if_fail (val_name != NULL, ret_val); + +#if GLIB_CHECK_VERSION (2, 6, 0) + sys_langs = g_get_language_names (); +#endif + + xml_val_name = xmlCharStrdup (val_name); + len = xmlStrlen (xml_val_name); + + for (element = parent->children; element != NULL; element = element->next) { + if (!xmlStrncmp (element->name, xml_val_name, len)) { + node_lang = xmlNodeGetLang (element); + + if (node_lang == NULL) { + ret_val = (gchar *) xmlNodeGetContent (element); + } + else { + for (i = 0; sys_langs[i] != NULL; i++) { + if (!strcmp (sys_langs[i], node_lang)) { + ret_val = (gchar *) xmlNodeGetContent (element); + /* since sys_langs is sorted from most desirable to + * least desirable, exit at first match + */ + break; + } + } + } + xmlFree (node_lang); + } + } + + xmlFree (xml_val_name); + return ret_val; +} + +static gboolean +is_executable_valid (gchar *executable) +{ + gchar *path; + + path = g_find_program_in_path (executable); + + if (path) { + g_free (path); + return TRUE; + } + + return FALSE; +} + +static void +mate_da_xml_load_xml (MateDACapplet *capplet, const gchar * filename) +{ + xmlDoc *xml_doc; + xmlNode *root, *section, *element; + gchar *executable; + MateDAWebItem *web_item; + MateDASimpleItem *mail_item; + MateDASimpleItem *media_item; + MateDATermItem *term_item; + MateDAVisualItem *visual_item; + MateDAMobilityItem *mobility_item; + + xml_doc = xmlParseFile (filename); + + if (!xml_doc) + return; + + root = xmlDocGetRootElement (xml_doc); + + for (section = root->children; section != NULL; section = section->next) { + if (!xmlStrncmp (section->name, "web-browsers", 12)) { + for (element = section->children; element != NULL; element = element->next) { + if (!xmlStrncmp (element->name, "web-browser", 11)) { + executable = mate_da_xml_get_string (element, "executable"); + if (is_executable_valid (executable)) { + web_item = mate_da_web_item_new (); + + web_item->generic.name = mate_da_xml_get_string (element, "name"); + web_item->generic.executable = executable; + web_item->generic.command = mate_da_xml_get_string (element, "command"); + web_item->generic.icon_name = mate_da_xml_get_string (element, "icon-name"); + + web_item->run_in_terminal = mate_da_xml_get_bool (element, "run-in-terminal"); + web_item->netscape_remote = mate_da_xml_get_bool (element, "netscape-remote"); + if (web_item->netscape_remote) { + web_item->tab_command = mate_da_xml_get_string (element, "tab-command"); + web_item->win_command = mate_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 = mate_da_xml_get_string (element, "executable"); + if (is_executable_valid (executable)) { + mail_item = mate_da_simple_item_new (); + + mail_item->generic.name = mate_da_xml_get_string (element, "name"); + mail_item->generic.executable = executable; + mail_item->generic.command = mate_da_xml_get_string (element, "command"); + mail_item->generic.icon_name = mate_da_xml_get_string (element, "icon-name"); + + mail_item->run_in_terminal = mate_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)) { + executable = mate_da_xml_get_string (element, "executable"); + if (is_executable_valid (executable)) { + term_item = mate_da_term_item_new (); + + term_item->generic.name = mate_da_xml_get_string (element, "name"); + term_item->generic.executable = executable; + term_item->generic.command = mate_da_xml_get_string (element, "command"); + term_item->generic.icon_name = mate_da_xml_get_string (element, "icon-name"); + + term_item->exec_flag = mate_da_xml_get_string (element, "exec-flag"); + + capplet->terminals = g_list_append (capplet->terminals, term_item); + } + else + g_free (executable); + } + } + } + else if (!xmlStrncmp (section->name, "media-players", 13)) { + for (element = section->children; element != NULL; element = element->next) { + if (!xmlStrncmp (element->name, "media-player", 12)) { + executable = mate_da_xml_get_string (element, "executable"); + if (is_executable_valid (executable)) { + media_item = mate_da_simple_item_new (); + + media_item->generic.name = mate_da_xml_get_string (element, "name"); + media_item->generic.executable = executable; + media_item->generic.command = mate_da_xml_get_string (element, "command"); + media_item->generic.icon_name = mate_da_xml_get_string (element, "icon-name"); + + media_item->run_in_terminal = mate_da_xml_get_bool (element, "run-in-terminal"); + + capplet->media_players = g_list_append (capplet->media_players, media_item); + } + else + g_free (executable); + } + } + } + else if (!xmlStrncmp (section->name, "a11y-visual", 11)) { + for (element = section->children; element != NULL; element = element->next) { + if (!xmlStrncmp (element->name, "visual", 6)) { + executable = mate_da_xml_get_string (element,"executable"); + if (is_executable_valid (executable)) { + visual_item = mate_da_visual_item_new (); + + visual_item->generic.name = mate_da_xml_get_string (element, "name"); + visual_item->generic.executable = executable; + visual_item->generic.command = mate_da_xml_get_string (element, "command"); + visual_item->generic.icon_name = mate_da_xml_get_string (element, "icon-name"); + + visual_item->run_at_startup = mate_da_xml_get_bool (element, "run-at-startup"); + + capplet->visual_ats = g_list_append (capplet->visual_ats, visual_item); + } + else + g_free (executable); + } + } + } + else if (!xmlStrncmp (section->name, "a11y-mobility", 13)) { + for (element = section->children; element != NULL; element = element->next) { + if (!xmlStrncmp (element->name, "mobility", 8)) { + executable = mate_da_xml_get_string (element,"executable"); + if (is_executable_valid (executable)) { + mobility_item = mate_da_mobility_item_new (); + + mobility_item->generic.name = mate_da_xml_get_string (element, "name"); + mobility_item->generic.executable = executable; + mobility_item->generic.command = mate_da_xml_get_string (element, "command"); + mobility_item->generic.icon_name = mate_da_xml_get_string (element, "icon-name"); + + mobility_item->run_at_startup = mate_da_xml_get_bool (element, "run-at-startup"); + + capplet->mobility_ats = g_list_append (capplet->mobility_ats, mobility_item); + } + else + g_free (executable); + } + } + } + } + + xmlFreeDoc (xml_doc); +} + +void mate_da_xml_load_list(MateDACapplet* capplet) +{ + GDir* app_dir = g_dir_open(MATECC_APPS_DIR, 0, NULL); + + if (app_dir != NULL) + { + const gchar* extra_file; + gchar* filename; + + while ((extra_file = g_dir_read_name(app_dir)) != NULL) + { + filename = g_build_filename(MATECC_APPS_DIR, extra_file, NULL); + + if (g_str_has_suffix(filename, ".xml")) + { + mate_da_xml_load_xml(capplet, filename); + } + + g_free(filename); + } + + g_dir_close(app_dir); + } +} + +void +mate_da_xml_free (MateDACapplet *capplet) +{ + g_list_foreach (capplet->web_browsers, (GFunc) mate_da_web_item_free, NULL); + g_list_foreach (capplet->mail_readers, (GFunc) mate_da_simple_item_free, NULL); + g_list_foreach (capplet->terminals, (GFunc) mate_da_term_item_free, NULL); + g_list_foreach (capplet->media_players, (GFunc) mate_da_simple_item_free, NULL); + g_list_foreach (capplet->visual_ats, (GFunc) mate_da_visual_item_free, NULL); + g_list_foreach (capplet->mobility_ats, (GFunc) mate_da_mobility_item_free, NULL); + + g_list_free (capplet->web_browsers); + g_list_free (capplet->mail_readers); + g_list_free (capplet->terminals); + g_list_free (capplet->media_players); + g_list_free (capplet->visual_ats); + g_list_free (capplet->mobility_ats); + + g_object_unref (capplet->builder); + g_free (capplet); +} diff --git a/capplets/default-applications/mate-da-xml.h b/capplets/default-applications/mate-da-xml.h new file mode 100644 index 00000000..b209355c --- /dev/null +++ b/capplets/default-applications/mate-da-xml.h @@ -0,0 +1,27 @@ +/* + * Authors: Luca Cavalli + * + * Copyright 2005-2006 Luca Cavalli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#ifndef _MATE_DA_XML_H_ +#define _MATE_DA_XML_H_ + +void mate_da_xml_load_list (MateDACapplet *capplet); +void mate_da_xml_free (MateDACapplet *capplet); + +#endif diff --git a/capplets/default-applications/mate-default-applications-properties.ui b/capplets/default-applications/mate-default-applications-properties.ui new file mode 100644 index 00000000..4edc2968 --- /dev/null +++ b/capplets/default-applications/mate-default-applications-properties.ui @@ -0,0 +1,1518 @@ + + + + + + 5 + Preferred Applications + False + dialog + False + + + True + + + True + True + 5 + + + True + 12 + 18 + + + True + 6 + + + True + 0 + Web Browser + + + + + + False + False + 0 + + + + + True + 12 + + + True + 0 + + + False + False + 0 + + + + + True + 6 + + + True + + + False + 0 + + + + + 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 + + + + + 1 + + + + + 1 + + + + + False + 0 + + + + + True + 6 + + + True + 0 + Mail Reader + + + + + + False + False + 0 + + + + + True + 12 + + + True + 0 + + + False + False + 0 + + + + + True + 6 + + + True + + + False + 0 + + + + + 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 + + + + + 1 + + + + + 1 + + + + + False + 1 + + + + + 6 + + + True + 0 + Instant Messenger + + + + + + False + False + 0 + + + + + True + 12 + + + True + 0 + + + False + False + 0 + + + + + True + 6 + + + True + + + False + 0 + + + + + True + 3 + 12 + 6 + + + True + False + 0 + Co_mmand: + True + messenger_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 + + + + + 1 + + + + + 1 + + + + + False + 2 + + + + + + + True + Internet + + + False + + + + + True + 12 + 18 + + + 6 + + + True + 0 + Image Viewer + + + + + + False + False + 0 + + + + + True + 12 + + + True + 0 + + + False + False + 0 + + + + + True + 6 + + + True + + + False + 0 + + + + + True + 3 + 12 + 6 + + + True + False + 0 + Co_mmand: + True + image_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 + + + + + 1 + + + + + 1 + + + + + False + 0 + + + + + True + 6 + + + True + 0 + Multimedia Player + + + + + + False + False + 0 + + + + + True + 12 + + + True + 0 + + + False + False + 0 + + + + + True + 6 + + + True + + + False + 0 + + + + + True + 3 + 12 + 6 + + + True + False + 0 + Co_mmand: + True + media_player_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 + + + + + 1 + + + + + 1 + + + + + False + 1 + + + + + 6 + + + True + 0 + Video Player + + + + + + False + False + 0 + + + + + True + 12 + + + True + 0 + + + False + False + 0 + + + + + True + 6 + + + True + + + False + 0 + + + + + True + 3 + 12 + 6 + + + True + False + 0 + Co_mmand: + True + video_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 + + + + + 1 + + + + + 1 + + + + + False + 2 + + + + + 1 + + + + + True + Multimedia + + + 1 + False + + + + + True + 12 + 18 + + + 6 + + + True + 0 + Text Editor + + + + + + False + False + 0 + + + + + True + 12 + + + True + 0 + + + False + False + 0 + + + + + True + 6 + + + True + + + False + 0 + + + + + True + 3 + 12 + 6 + + + True + False + 0 + Co_mmand: + True + text_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 + + + + + 1 + + + + + 1 + + + + + False + 0 + + + + + True + 6 + + + True + 0 + Terminal Emulator + + + + + + False + False + 0 + + + + + True + 12 + + + True + 0 + + + False + False + 0 + + + + + True + 6 + + + True + + + False + 0 + + + + + True + 2 + 2 + 12 + 6 + + + True + False + 0 + Co_mmand: + True + terminal_command_entry + + + GTK_FILL + + + + + + True + True + All %s occurrences will be replaced with actual link + + + 1 + 2 + + + + + + True + False + 0 + E_xecute flag: + True + terminal_exec_flag_entry + + + 1 + 2 + GTK_FILL + + + + + + True + True + + + 1 + 2 + 1 + 2 + + + + + + 1 + + + + + 1 + + + + + 1 + + + + + False + 1 + + + + + + + + 2 + + + + + True + System + + + 2 + False + + + + + True + 12 + 18 + + + True + 6 + + + True + 0 + Visual + + + + + + False + False + 0 + + + + + True + 12 + + + True + 0 + + + False + False + 0 + + + + + True + 6 + + + True + + + False + 0 + + + + + _Run at start + True + True + False + True + True + + + 1 + + + + + True + 2 + 12 + 6 + + + True + False + 0 + C_ommand: + True + image_command_entry + + + GTK_FILL + + + + + + True + True + All %s occurrences will be replaced with actual link + + + 1 + 2 + + + + + + 2 + + + + + 1 + + + + + 1 + + + + + False + 0 + + + + + True + 6 + + + True + 0 + Mobility + + + + + + False + False + 0 + + + + + True + 12 + + + True + 0 + + + False + False + 0 + + + + + True + 6 + + + True + + + False + 0 + + + + + Run at st_art + True + True + False + True + True + + + 1 + + + + + True + 2 + 12 + 6 + + + True + False + 0 + Co_mmand: + True + + + GTK_FILL + + + + + + True + True + All %s occurrences will be replaced with actual link + + + 1 + 2 + + + + + + 2 + + + + + 1 + + + + + 1 + + + + + False + 1 + + + + + 3 + + + + + True + Accessibility + + + 3 + False + + + + + False + 1 + + + + + True + end + + + gtk-help + True + True + True + False + True + + + False + False + 0 + + + + + gtk-close + True + True + True + False + True + + + False + False + 1 + + + + + False + end + 0 + + + + + + helpbutton1 + closebutton1 + + + diff --git a/capplets/default-applications/mate-default-applications.pc.in b/capplets/default-applications/mate-default-applications.pc.in new file mode 100644 index 00000000..1bdae900 --- /dev/null +++ b/capplets/default-applications/mate-default-applications.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +datarootdir=@datarootdir@ +datadir=@datadir@ +pkgdatadir=${datadir}/@PACKAGE@ +defappsdir=${pkgdatadir}/default-apps + +Name: mate-default-applications +Description: Default MATE applications configuration +Version: @VERSION@ + diff --git a/capplets/default-applications/mate-default-applications.xml.in b/capplets/default-applications/mate-default-applications.xml.in new file mode 100644 index 00000000..4bd2f8b9 --- /dev/null +++ b/capplets/default-applications/mate-default-applications.xml.in @@ -0,0 +1,483 @@ + + + + + + + + + <_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 + web-browser + false + false + + + + + + <_name>Evolution Mail Reader + evolution + evolution %s + evolution + false + + + <_name>Balsa + balsa + balsa -m %s + mate-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 + mate-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>Mate File Manager + caja + false + caja %s + file-manager + + + + <_name>Nautilus + nautilus + false + nautilus %s + nautilus + + + + <_name>Thunar + thunar + false + thunar %s + thunar + + + + + + + <_name>Debian Terminal Emulator + x-terminal-emulator + x-terminal-emulator + mate-mime-application-x-executable + -e + + + <_name>MATE Terminal + mate-terminal + mate-terminal + utilities-terminal + -x + + + <_name>GNOME Terminal + gnome-terminal + gnome-terminal + gnome-terminal + -x + + + <_name>Terminator + terminator + terminator + terminator + -x + + + <_name>Standard XTerminal + xterm + xterm + mate-mime-application-x-executable + -e + + + <_name>NXterm + nxterm + nxterm + mate-mime-application-x-executable + -e + + + <_name>RXVT + rxvt + rxvt + mate-mime-application-x-executable + -e + + + <_name>aterm + aterm + aterm + mate-mime-application-x-executable + -e + + + <_name>ETerm + ETerm + ETerm + mate-mime-application-x-executable + -e + + + <_name>Konsole + konsole + konsole + konsole + -e + + + <_name>Terminal + terminal + terminal + utilities-terminal + -e + + + <_name>Sakura + sakura + sakura + terminal-tango + -e + + + + + + <_name>Banshee Music Player + banshee + banshee + music-player-banshee + false + + + <_name>Muine Music Player + muine + muine + muine + false + + + <_name>Rhythmbox Music Player + rhythmbox + rhythmbox + rhythmbox + false + + + <_name>Totem Movie Player + totem + totem + totem + false + + + <_name>Listen + listen + listen + listen + false + + + + + + <_name>Orca + orca + orca + orca + false + + + <_name>Orca with Magnifier + orca + orca -e magnifier + orca + false + + + <_name>Linux Screen Reader + lsr + lsr + lsr + false + + + <_name>Linux Screen Reader with Magnifier + lsr + lsr -p mag + lsr + false + + + <_name>Gnopernicus + gnopernicus + gnopernicus + icon-accessibility + false + + + <_name>Gnopernicus with Magnifier + gnopernicus + gnopernicus -m + icon-accessibility + false + + + <_name>MATE Magnifier without Screen Reader + magnifier + magnifier -m + mate-searchtool + false + + + <_name>KDE Magnifier without Screen Reader + kmag + kmag + mate-searchtool + false + + + + + + + <_name>MATE OnScreen Keyboard + gok + gok + accessibility-keyboard-capplet + false + + + <_name>Dasher + dasher + dasher + mate-searchtool + false + + + onBoard + onboard + onboard + onboard + false + + + + -- cgit v1.2.1