summaryrefslogtreecommitdiff
path: root/capplets/default-applications
diff options
context:
space:
mode:
Diffstat (limited to 'capplets/default-applications')
-rw-r--r--capplets/default-applications/Makefile.am75
-rw-r--r--capplets/default-applications/default-applications.desktop.in.in14
-rw-r--r--capplets/default-applications/icons/16x16/preferences-desktop-default-applications.pngbin0 -> 748 bytes
-rw-r--r--capplets/default-applications/icons/22x22/preferences-desktop-default-applications.pngbin0 -> 1310 bytes
-rw-r--r--capplets/default-applications/icons/24x24/preferences-desktop-default-applications.pngbin0 -> 1340 bytes
-rw-r--r--capplets/default-applications/icons/32x32/preferences-desktop-default-applications.pngbin0 -> 1727 bytes
-rw-r--r--capplets/default-applications/icons/48x48/preferences-desktop-default-applications.pngbin0 -> 2825 bytes
-rw-r--r--capplets/default-applications/mate-at-commandline.in.in101
-rw-r--r--capplets/default-applications/mate-at-session.desktop.in.in15
-rw-r--r--capplets/default-applications/mate-da-capplet.c970
-rw-r--r--capplets/default-applications/mate-da-capplet.h139
-rw-r--r--capplets/default-applications/mate-da-item.c148
-rw-r--r--capplets/default-applications/mate-da-item.h81
-rw-r--r--capplets/default-applications/mate-da-xml.c327
-rw-r--r--capplets/default-applications/mate-da-xml.h27
-rw-r--r--capplets/default-applications/mate-default-applications-properties.ui1518
-rw-r--r--capplets/default-applications/mate-default-applications.pc.in10
-rw-r--r--capplets/default-applications/mate-default-applications.xml.in483
18 files changed, 3908 insertions, 0 deletions
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
--- /dev/null
+++ b/capplets/default-applications/icons/16x16/preferences-desktop-default-applications.png
Binary files 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
--- /dev/null
+++ b/capplets/default-applications/icons/22x22/preferences-desktop-default-applications.png
Binary files 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
--- /dev/null
+++ b/capplets/default-applications/icons/24x24/preferences-desktop-default-applications.png
Binary files 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
--- /dev/null
+++ b/capplets/default-applications/icons/32x32/preferences-desktop-default-applications.png
Binary files 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
--- /dev/null
+++ b/capplets/default-applications/icons/48x48/preferences-desktop-default-applications.png
Binary files 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 <[email protected]>
+ *
+ * Copyright 2005-2006 Luca Cavalli
+ * Copyright 2008 Thomas Wood <[email protected]>
+ *
+ * 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 <config.h>
+#endif
+
+#include <string.h>
+#include <glib/gi18n.h>
+#include <stdlib.h>
+
+#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 <[email protected]>
+ *
+ * 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 <gtk/gtk.h>
+#include <mateconf/mateconf-client.h>
+
+// 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 <[email protected]>
+ *
+ * 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 <[email protected]>
+ *
+ * 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 <glib.h>
+
+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 <[email protected]>
+ *
+ * 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 <string.h>
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <libxml/parser.h>
+
+#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 <[email protected]>
+ *
+ * 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 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy toplevel-contextual -->
+ <object class="GtkDialog" id="preferred_apps_dialog">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Preferred Applications</property>
+ <property name="resizable">False</property>
+ <property name="type_hint">dialog</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkNotebook" id="preferred_apps_notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="border_width">5</property>
+ <child>
+ <object class="GtkVBox" id="internet_vbox">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkVBox" id="web_browser_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="web_browser_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Web Browser</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="web_browser_hbox">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="web_browser_image">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="web_browser_options_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkComboBox" id="web_browser_combobox">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="web_browser_options_table">
+ <property name="visible">True</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkEntry" id="web_browser_command_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">All %s occurrences will be replaced with actual link</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="web_browser_terminal_checkbutton">
+ <property name="label" translatable="yes">Run in t_erminal</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="web_browser_default_radiobutton">
+ <property name="label" translatable="yes">Open link with web browser _default</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="web_browser_new_tab_radiobutton">
+ <property name="label" translatable="yes">Open link in new _tab</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">web_browser_default_radiobutton</property>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="web_browser_new_win_radiobutton">
+ <property name="label" translatable="yes">Open link in new _window</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">web_browser_default_radiobutton</property>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="web_browser_command_label">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">C_ommand:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">web_browser_command_entry</property>
+ </object>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="mail_reader_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="mail_reader_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Mail Reader</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="mail_reader_hbox">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="mail_reader_image">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="mail_reader_options_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkComboBox" id="mail_reader_combobox">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="mail_reader_options_table">
+ <property name="visible">True</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="mail_reader_command_label">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Co_mmand:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">mail_reader_command_entry</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="mail_reader_command_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">All %s occurrences will be replaced with actual link</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="mail_reader_terminal_checkbutton">
+ <property name="label" translatable="yes">Run in t_erminal</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="messenger_vbox">
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="messenger_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Instant Messenger</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="messenger_hbox">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="messenger_image">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="messenger_options_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkComboBox" id="messenger_combobox">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="messenger_options_table">
+ <property name="visible">True</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="messenger_command_label">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Co_mmand:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">messenger_command_entry</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="messenger_command_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">All %s occurrences will be replaced with actual link</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="messenger_terminal_checkbutton">
+ <property name="label" translatable="yes">Run in t_erminal</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="internet_apps_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Internet</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="multimedia_vbox">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkVBox" id="image_vbox">
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="image_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Image Viewer</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="image_hbox">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="image_image">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="image_options_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkComboBox" id="image_combobox">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="image_options_table">
+ <property name="visible">True</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="image_command_label">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Co_mmand:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">image_command_entry</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="image_command_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">All %s occurrences will be replaced with actual link</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="image_terminal_checkbox">
+ <property name="label" translatable="yes">Run in t_erminal</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="media_player_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="media_player_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Multimedia Player</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="media_player_hbox">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="media_player_image">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="media_player_options_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkComboBox" id="media_player_combobox">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="media_player_options_table">
+ <property name="visible">True</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="media_player_command_label">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Co_mmand:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">media_player_command_entry</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="media_player_command_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">All %s occurrences will be replaced with actual link</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="media_player_terminal_checkbutton">
+ <property name="label" translatable="yes">Run in t_erminal</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="video_vbox">
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="video_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Video Player</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="video_hbox">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="video_image">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="video_options_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkComboBox" id="video_combobox">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="video_options_table">
+ <property name="visible">True</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="video_command_label">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Co_mmand:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">video_command_entry</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="video_command_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">All %s occurrences will be replaced with actual link</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="video_terminal_checkbox">
+ <property name="label" translatable="yes">Run in t_erminal</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="multimedia_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Multimedia</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="system_vbox">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkVBox" id="text_vbox">
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="text_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Text Editor</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="text_hbox">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="text_image">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="text_options_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkComboBox" id="text_combobox">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="text_options_table">
+ <property name="visible">True</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="text_command_label">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Co_mmand:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">text_command_entry</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="text_command_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">All %s occurrences will be replaced with actual link</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="text_terminal_checkbox">
+ <property name="label" translatable="yes">Run in t_erminal</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="terminal_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="terminal_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Terminal Emulator</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="terminal_hbox">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="terminal_image">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="terminal_options_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkComboBox" id="terminal_combobox">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="terminal_options_table">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="terminal_command_label">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Co_mmand:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">terminal_command_entry</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="terminal_command_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">All %s occurrences will be replaced with actual link</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="terminal_exec_flag_label">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">E_xecute flag:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">terminal_exec_flag_entry</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="terminal_exec_flag_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+
+ <!-- el file manager -- >
+ <child>
+ <object class="GtkVBox" id="filemanager_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="filemanager_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">File Manager</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="filemanager_hbox">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="filemanager_image">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="filemanager_options_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkComboBox" id="filemanager_combobox">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="filemanager_options_table">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="filemanager_command_label">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Co_mmand:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">filemanager_command_entry</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="filemanager_command_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">All %s occurrences will be replaced with actual link</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="filemanager_exec_flag_label">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">E_xecute flag:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">filemanager_exec_flag_entry</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="filemanager_exec_flag_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+
+ < ! -- / el file manager -->
+
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="system_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">System</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="a11y_vbox">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkVBox" id="visual_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="visual_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Visual</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="visual_hbox">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="visual_image">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="visual_options_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkComboBox" id="visual_combobox">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="visual_start_checkbutton">
+ <property name="label" translatable="yes">_Run at start</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="visual_options_table">
+ <property name="visible">True</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="visual_command_label">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">C_ommand:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">image_command_entry</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="visual_command_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">All %s occurrences will be replaced with actual link</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="mobility_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="mobility_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Mobility</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="mobility_hbox">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="mobility_image">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="mobility_options_vbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkComboBox" id="mobility_combobox">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="mobility_start_checkbutton">
+ <property name="label" translatable="yes">Run at st_art</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="mobility_options_table">
+ <property name="visible">True</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="mobility_command_label">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Co_mmand:</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="mobility_command_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">All %s occurrences will be replaced with actual link</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="a11y_apps_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Accessibility</property>
+ </object>
+ <packing>
+ <property name="position">3</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="helpbutton1">
+ <property name="label">gtk-help</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="closebutton1">
+ <property name="label">gtk-close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-11">helpbutton1</action-widget>
+ <action-widget response="-7">closebutton1</action-widget>
+ </action-widgets>
+ </object>
+</interface>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE default-apps SYSTEM "mate-da-list.dtd">
+<default-apps>
+
+<!-- Remember to never use the same string for <command>, <tab-command> and <win-command> entries -->
+
+ <web-browsers>
+ <web-browser>
+ <_name>Opera</_name>
+ <executable>opera</executable>
+ <command>opera %s</command>
+ <icon-name>opera</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>true</netscape-remote>
+ <tab-command>opera -newpage %s</tab-command>
+ <win-command>opera -newwindow %s</win-command>
+ </web-browser>
+ <web-browser>
+ <_name>Debian Sensible Browser</_name>
+ <executable>sensible-browser</executable>
+ <command>sensible-browser %s</command>
+ <icon-name></icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>false</netscape-remote>
+ </web-browser>
+ <web-browser>
+ <_name>Epiphany Web Browser</_name>
+ <executable>epiphany</executable>
+ <command>epiphany %s</command>
+ <icon-name>web-browser</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>true</netscape-remote>
+ <tab-command>epiphany --new-tab %s</tab-command>
+ <win-command>epiphany --new-window %s</win-command>
+ </web-browser>
+ <web-browser>
+ <_name>Galeon</_name>
+ <executable>galeon</executable>
+ <command>galeon %s</command>
+ <icon-name>galeon</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>true</netscape-remote>
+ <tab-command>galeon -n %s</tab-command>
+ <win-command>galeon -w %s</win-command>
+ </web-browser>
+ <web-browser>
+ <_name>Encompass</_name>
+ <executable>encompass</executable>
+ <command>encompass %s</command>
+ <icon-name>encompass</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>false</netscape-remote>
+ </web-browser>
+ <web-browser>
+ <_name>Firebird</_name>
+ <executable>mozilla-firebird</executable>
+ <command>mozilla-firebird %s</command>
+ <icon-name></icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>true</netscape-remote>
+ <tab-command>mozilla-firebird -remote "openurl(%s,new-tab)"</tab-command>
+ <win-command>mozilla-firebird -remote "openurl(%s,new-window)"</win-command>
+ </web-browser>
+ <web-browser>
+ <_name>Firefox</_name>
+ <executable>firefox</executable>
+ <command>firefox %s</command>
+ <icon-name>firefox</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>true</netscape-remote>
+ <tab-command>firefox -new-tab "%s"</tab-command>
+ <win-command>firefox -new-window "%s"</win-command>
+ </web-browser>
+ <web-browser>
+ <_name>Iceweasel</_name>
+ <executable>iceweasel</executable>
+ <command>iceweasel %s</command>
+ <icon-name>iceweasel</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>true</netscape-remote>
+ <tab-command>iceweasel -new-tab "%s"</tab-command>
+ <win-command>iceweasel -new-window "%s"</win-command>
+ </web-browser>
+ <web-browser>
+ <_name>Mozilla 1.6</_name>
+ <executable>mozilla-1.6</executable>
+ <command>mozilla-1.6 %s</command>
+ <icon-name>mozilla-icon</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>true</netscape-remote>
+ <tab-command>mozilla-1.6 -remote "openurl(%s,new-tab)"</tab-command>
+ <win-command>mozilla-1.6 -remote "openurl(%s,new-window)"</win-command>
+ </web-browser>
+ <web-browser>
+ <_name>Mozilla</_name>
+ <executable>mozilla</executable>
+ <command>mozilla %s</command>
+ <icon-name>mozilla-icon</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>true</netscape-remote>
+ <tab-command>mozilla -remote "openurl(%s,new-tab)"</tab-command>
+ <win-command>mozilla -remote "openurl(%s,new-window)"</win-command>
+ </web-browser>
+ <web-browser>
+ <_name>SeaMonkey</_name>
+ <executable>seamonkey</executable>
+ <command>seamonkey %s</command>
+ <icon-name>seamonkey</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>true</netscape-remote>
+ <tab-command>seamonkey -remote "openurl(%s,new-tab)"</tab-command>
+ <win-command>seamonkey -remote "openurl(%s,new-window)"</win-command>
+ </web-browser>
+ <web-browser>
+ <_name>Iceape</_name>
+ <executable>iceape</executable>
+ <command>iceape %s</command>
+ <icon-name>iceape</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>true</netscape-remote>
+ <tab-command>iceape -remote "openurl(%s,new-tab)"</tab-command>
+ <win-command>iceape -remote "openurl(%s,new-window)"</win-command>
+ </web-browser>
+ <web-browser>
+ <_name>Netscape Communicator</_name>
+ <executable>netscape</executable>
+ <command>netscape %s</command>
+ <icon-name>netscape</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>true</netscape-remote>
+ <tab-command>netscape -remote "openurl(%s,new-tab)"</tab-command>
+ <win-command>netscape -remote "openurl(%s,new-window)"</win-command>
+ </web-browser>
+ <web-browser>
+ <_name>Konqueror</_name>
+ <executable>konqueror</executable>
+ <command>konqueror %s</command>
+ <icon-name>konqueror</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>false</netscape-remote>
+ </web-browser>
+ <web-browser>
+ <_name>Midori</_name>
+ <executable>midori</executable>
+ <command>midori %s</command>
+ <icon-name>web-browser</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ <netscape-remote>false</netscape-remote>
+ </web-browser>
+ </web-browsers>
+
+ <mail-readers>
+ <mail-reader>
+ <_name>Evolution Mail Reader</_name>
+ <executable>evolution</executable>
+ <command>evolution %s</command>
+ <icon-name>evolution</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </mail-reader>
+ <mail-reader>
+ <_name>Balsa</_name>
+ <executable>balsa</executable>
+ <command>balsa -m %s</command>
+ <icon-name>mate-balsa2</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </mail-reader>
+ <mail-reader>
+ <_name>KMail</_name>
+ <executable>kmail</executable>
+ <command>kmail %s</command>
+ <icon-name>kmail</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </mail-reader>
+ <mail-reader>
+ <_name>Icedove</_name>
+ <executable>icedove</executable>
+ <command>icedove %s</command>
+ <icon-name>icedove</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </mail-reader>
+ <mail-reader>
+ <_name>Thunderbird</_name>
+ <executable>thunderbird</executable>
+ <command>thunderbird %s</command>
+ <icon-name>thunderbird</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </mail-reader>
+ <mail-reader>
+ <_name>Mozilla Thunderbird</_name>
+ <executable>mozilla-thunderbird</executable>
+ <command>mozilla-thunderbird %s</command>
+ <icon-name>thunderbird</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </mail-reader>
+ <mail-reader>
+ <_name>Mozilla Mail</_name>
+ <executable>mozilla</executable>
+ <command>mozilla -mail %s</command>
+ <icon-name>mozilla-mail-icon</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </mail-reader>
+ <mail-reader>
+ <_name>SeaMonkey Mail</_name>
+ <executable>seamonkey</executable>
+ <command>seamonkey -mail %s</command>
+ <icon-name>seamonkey</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </mail-reader>
+ <mail-reader>
+ <_name>Iceape Mail</_name>
+ <executable>iceape</executable>
+ <command>iceape -mail %s</command>
+ <icon-name>iceape</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </mail-reader>
+ <mail-reader>
+ <_name>Mutt</_name>
+ <executable>mutt</executable>
+ <command>mutt %s</command>
+ <icon-name>mate-mime-application-x-executable</icon-name>
+ <run-in-terminal>true</run-in-terminal>
+ </mail-reader>
+ <mail-reader>
+ <_name>Claws Mail</_name>
+ <executable>claws-mail</executable>
+ <command>claws-mail --compose %s</command>
+ <icon-name>claws-mail</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </mail-reader>
+ <mail-reader>
+ <_name>Sylpheed-Claws</_name>
+ <executable>sylpheed-claws</executable>
+ <command>sylpheed-claws --compose %s</command>
+ <icon-name>sylpheed</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </mail-reader>
+ <mail-reader>
+ <_name>Sylpheed</_name>
+ <executable>sylpheed</executable>
+ <command>sylpheed --compose %s</command>
+ <icon-name>sylpheed</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </mail-reader>
+ </mail-readers>
+
+ <!-- agregando para los ... -->
+ <file-managers>
+ <file-manager>
+ <_name>Mate File Manager</_name>
+ <executable>caja</executable>
+ <run-in-terminal>false</run-in-terminal>
+ <command>caja %s</command>
+ <icon-name>file-manager</icon-name>
+ </file-manager>
+
+ <file-manager>
+ <_name>Nautilus</_name>
+ <executable>nautilus</executable>
+ <run-in-terminal>false</run-in-terminal>
+ <command>nautilus %s</command>
+ <icon-name>nautilus</icon-name>
+ </file-manager>
+
+ <file-manager>
+ <_name>Thunar</_name>
+ <executable>thunar</executable>
+ <run-in-terminal>false</run-in-terminal>
+ <command>thunar %s</command>
+ <icon-name>thunar</icon-name>
+ </file-manager>
+
+ </file-managers>
+
+ <terminals>
+ <terminal>
+ <_name>Debian Terminal Emulator</_name>
+ <executable>x-terminal-emulator</executable>
+ <command>x-terminal-emulator</command>
+ <icon-name>mate-mime-application-x-executable</icon-name>
+ <exec-flag>-e</exec-flag>
+ </terminal>
+ <terminal>
+ <_name>MATE Terminal</_name>
+ <executable>mate-terminal</executable>
+ <command>mate-terminal</command>
+ <icon-name>utilities-terminal</icon-name>
+ <exec-flag>-x</exec-flag>
+ </terminal>
+ <terminal>
+ <_name>GNOME Terminal</_name>
+ <executable>gnome-terminal</executable>
+ <command>gnome-terminal</command>
+ <icon-name>gnome-terminal</icon-name>
+ <exec-flag>-x</exec-flag>
+ </terminal>
+ <terminal>
+ <_name>Terminator</_name>
+ <executable>terminator</executable>
+ <command>terminator</command>
+ <icon-name>terminator</icon-name>
+ <exec-flag>-x</exec-flag>
+ </terminal>
+ <terminal>
+ <_name>Standard XTerminal</_name>
+ <executable>xterm</executable>
+ <command>xterm</command>
+ <icon-name>mate-mime-application-x-executable</icon-name>
+ <exec-flag>-e</exec-flag>
+ </terminal>
+ <terminal>
+ <_name>NXterm</_name>
+ <executable>nxterm</executable>
+ <command>nxterm</command>
+ <icon-name>mate-mime-application-x-executable</icon-name>
+ <exec-flag>-e</exec-flag>
+ </terminal>
+ <terminal>
+ <_name>RXVT</_name>
+ <executable>rxvt</executable>
+ <command>rxvt</command>
+ <icon-name>mate-mime-application-x-executable</icon-name>
+ <exec-flag>-e</exec-flag>
+ </terminal>
+ <terminal>
+ <_name>aterm</_name>
+ <executable>aterm</executable>
+ <command>aterm</command>
+ <icon-name>mate-mime-application-x-executable</icon-name>
+ <exec-flag>-e</exec-flag>
+ </terminal>
+ <terminal>
+ <_name>ETerm</_name>
+ <executable>ETerm</executable>
+ <command>ETerm</command>
+ <icon-name>mate-mime-application-x-executable</icon-name>
+ <exec-flag>-e</exec-flag>
+ </terminal>
+ <terminal>
+ <_name>Konsole</_name>
+ <executable>konsole</executable>
+ <command>konsole</command>
+ <icon-name>konsole</icon-name>
+ <exec-flag>-e</exec-flag>
+ </terminal>
+ <terminal>
+ <_name>Terminal</_name>
+ <executable>terminal</executable>
+ <command>terminal</command>
+ <icon-name>utilities-terminal</icon-name>
+ <exec-flag>-e</exec-flag>
+ </terminal>
+ <terminal>
+ <_name>Sakura</_name>
+ <executable>sakura</executable>
+ <command>sakura</command>
+ <icon-name>terminal-tango</icon-name>
+ <exec-flag>-e</exec-flag>
+ </terminal>
+ </terminals>
+
+ <media-players>
+ <media-player>
+ <_name>Banshee Music Player</_name>
+ <executable>banshee</executable>
+ <command>banshee</command>
+ <icon-name>music-player-banshee</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </media-player>
+ <media-player>
+ <_name>Muine Music Player</_name>
+ <executable>muine</executable>
+ <command>muine</command>
+ <icon-name>muine</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </media-player>
+ <media-player>
+ <_name>Rhythmbox Music Player</_name>
+ <executable>rhythmbox</executable>
+ <command>rhythmbox</command>
+ <icon-name>rhythmbox</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </media-player>
+ <media-player>
+ <_name>Totem Movie Player</_name>
+ <executable>totem</executable>
+ <command>totem</command>
+ <icon-name>totem</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </media-player>
+ <media-player>
+ <_name>Listen</_name>
+ <executable>listen</executable>
+ <command>listen</command>
+ <icon-name>listen</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </media-player>
+ </media-players>
+
+ <a11y-visual>
+ <visual>
+ <_name>Orca</_name>
+ <executable>orca</executable>
+ <command>orca</command>
+ <icon-name>orca</icon-name>
+ <run-at-start>false</run-at-start>
+ </visual>
+ <visual>
+ <_name>Orca with Magnifier</_name>
+ <executable>orca</executable>
+ <command>orca -e magnifier</command>
+ <icon-name>orca</icon-name>
+ <run-at-start>false</run-at-start>
+ </visual>
+ <visual>
+ <_name>Linux Screen Reader</_name>
+ <executable>lsr</executable>
+ <command>lsr</command>
+ <icon-name>lsr</icon-name>
+ <run-at-start>false</run-at-start>
+ </visual>
+ <visual>
+ <_name>Linux Screen Reader with Magnifier</_name>
+ <executable>lsr</executable>
+ <command>lsr -p mag</command>
+ <icon-name>lsr</icon-name>
+ <run-at-start>false</run-at-start>
+ </visual>
+ <visual>
+ <_name>Gnopernicus</_name>
+ <executable>gnopernicus</executable>
+ <command>gnopernicus</command>
+ <icon-name>icon-accessibility</icon-name>
+ <run-at-start>false</run-at-start>
+ </visual>
+ <visual>
+ <_name>Gnopernicus with Magnifier</_name>
+ <executable>gnopernicus</executable>
+ <command>gnopernicus -m</command>
+ <icon-name>icon-accessibility</icon-name>
+ <run-at-start>false</run-at-start>
+ </visual>
+ <visual>
+ <_name>MATE Magnifier without Screen Reader</_name>
+ <executable>magnifier</executable>
+ <command>magnifier -m</command>
+ <icon-name>mate-searchtool</icon-name>
+ <run-at-start>false</run-at-start>
+ </visual>
+ <visual>
+ <_name>KDE Magnifier without Screen Reader</_name>
+ <executable>kmag</executable>
+ <command>kmag</command>
+ <icon-name>mate-searchtool</icon-name>
+ <run-at-start>false</run-at-start>
+ </visual>
+
+ </a11y-visual>
+
+ <a11y-mobility>
+ <mobility>
+ <_name>MATE OnScreen Keyboard</_name>
+ <executable>gok</executable>
+ <command>gok</command>
+ <icon-name>accessibility-keyboard-capplet</icon-name>
+ <run-at-start>false</run-at-start>
+ </mobility>
+ <mobility>
+ <_name>Dasher</_name>
+ <executable>dasher</executable>
+ <command>dasher</command>
+ <icon-name>mate-searchtool</icon-name>
+ <run-at-start>false</run-at-start>
+ </mobility>
+ <mobility>
+ <name>onBoard</name>
+ <executable>onboard</executable>
+ <command>onboard</command>
+ <icon-name>onboard</icon-name>
+ <run-at-start>false</run-at-start>
+ </mobility>
+ </a11y-mobility>
+
+</default-apps>