default applications: Use GSettings from gsettings-desktop-schemas for default Terminal and A11Y applications

This commit is contained in:
Rodrigo Moya 2010-10-13 16:09:32 +02:00
parent 556e483cf0
commit 1b2abc48ad
3 changed files with 48 additions and 196 deletions

View file

@ -70,7 +70,9 @@ cc_default_applications_panel_dispose (GObject *object)
if (priv->capplet)
{
g_object_unref (priv->capplet->gconf);
g_object_unref (priv->capplet->terminal_settings);
g_object_unref (priv->capplet->at_mobility_settings);
g_object_unref (priv->capplet->at_visual_settings);
if (priv->capplet->theme_changed_id > 0)
{
@ -120,7 +122,9 @@ cc_default_applications_panel_init (CcDefaultApplicationsPanel *self)
priv = self->priv = DEFAULT_APPLICATIONS_PANEL_PRIVATE (self);
priv->capplet = g_new0 (GnomeDACapplet, 1);
priv->capplet->gconf = gconf_client_get_default ();
priv->capplet->terminal_settings = g_settings_new ("org.gnome.desktop.default-applications.terminal");
priv->capplet->at_mobility_settings = g_settings_new ("org.gnome.desktop.default-applications.at.mobility");
priv->capplet->at_visual_settings = g_settings_new ("org.gnome.desktop.default-applications.at.visual");
gnome_default_applications_panel_init (priv->capplet);

View file

@ -116,6 +116,7 @@ terminal_combo_changed_cb (GtkComboBox *combo, GnomeDACapplet *capplet)
{
guint current_index;
gboolean is_custom_active;
GnomeDATermItem *item;
current_index = gtk_combo_box_get_active (combo);
is_custom_active = (current_index >= g_list_length (capplet->terminals));
@ -124,6 +125,13 @@ terminal_combo_changed_cb (GtkComboBox *combo, GnomeDACapplet *capplet)
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);
/* Set text on the entries so that the GSettings binding works */
item = g_list_nth_data (capplet->terminals, current_index);
if (item != NULL) {
gtk_entry_set_text (GTK_ENTRY (capplet->terminal_command_entry), ((GnomeDAItem *) item)->command);
gtk_entry_set_text (GTK_ENTRY (capplet->terminal_exec_flag_entry), item->exec_flag);
}
}
static void
@ -131,12 +139,18 @@ visual_combo_changed_cb (GtkComboBox *combo, GnomeDACapplet *capplet)
{
guint current_index;
gboolean is_custom_active;
GnomeDAItem *item;
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);
/* Set text on the entries so that the GSettings binding works */
item = g_list_nth_data (capplet->visual_ats, current_index);
if (item != NULL)
gtk_entry_set_text (GTK_ENTRY (capplet->visual_command_entry), item->command);
}
static void
@ -144,12 +158,18 @@ mobility_combo_changed_cb (GtkComboBox *combo, GnomeDACapplet *capplet)
{
guint current_index;
gboolean is_custom_active;
GnomeDAItem *item;
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);
/* Set text on the entries so that the GSettings binding works */
item = g_list_nth_data (capplet->mobility_ats, current_index);
if (item != NULL)
gtk_entry_set_text (GTK_ENTRY (capplet->mobility_command_entry), item->command);
}
static void
@ -226,118 +246,6 @@ screen_changed_cb (GtkWidget *widget, GdkScreen *screen, GnomeDACapplet *capplet
capplet->icon_theme = theme;
}
static gint
generic_item_comp (gconstpointer list_item, gconstpointer command)
{
return (strcmp (((GnomeDAItem *) list_item)->command, (gchar *) command));
}
static GConfValue*
combo_conv_to_widget (GConfPropertyEditor *peditor, const GConfValue *value)
{
GConfValue *ret;
GList *entry, *handlers;
const gchar *command;
gint index;
g_object_get (G_OBJECT (peditor), "data", &handlers, NULL);
command = gconf_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 = gconf_value_new (GCONF_VALUE_INT);
gconf_value_set_int (ret, index);
return ret;
}
static GConfValue*
combo_conv_from_widget (GConfPropertyEditor *peditor, const GConfValue *value)
{
GConfValue *ret;
GList *handlers;
gint index;
GnomeDAItem *item;
g_object_get (G_OBJECT (peditor), "data", &handlers, NULL);
index = gconf_value_get_int (value);
item = g_list_nth_data (handlers, index);
ret = gconf_value_new (GCONF_VALUE_STRING);
if (!item)
{
/* if item was not found, this is probably the "Custom" item */
/* XXX: returning "" as the value here is not ideal, but required to
* prevent the combo box from jumping back to the previous value if the
* user has selected Custom */
gconf_value_set_string (ret, "");
return ret;
}
else
{
gconf_value_set_string (ret, item->command);
return ret;
}
}
static GConfValue*
combo_conv_from_widget_term_flag (GConfPropertyEditor *peditor, const GConfValue *value)
{
GConfValue *ret;
GList *handlers;
gint index;
GnomeDATermItem *item;
g_object_get (G_OBJECT (peditor), "data", &handlers, NULL);
index = gconf_value_get_int (value);
item = g_list_nth_data (handlers, index);
ret = gconf_value_new (GCONF_VALUE_STRING);
if (!item)
{
/* if item was not found, this is probably the "Custom" item */
/* XXX: returning "" as the value here is not ideal, but required to
* prevent the combo box from jumping back to the previous value if the
* user has selected Custom */
gconf_value_set_string (ret, "");
return ret;
}
else
{
gconf_value_set_string (ret, item->exec_flag);
return ret;
}
}
static GConfValue*
combo_conv_to_widget_term_flag (GConfPropertyEditor *peditor, const GConfValue *value)
{
GConfValue *ret;
GtkComboBox *combo;
combo = GTK_COMBO_BOX (gconf_property_editor_get_ui_control (peditor));
ret = gconf_value_new (GCONF_VALUE_INT);
gconf_value_set_int (ret, gtk_combo_box_get_active (combo));
return ret;
}
static gboolean
is_separator (GtkTreeModel *model, GtkTreeIter *iter, gpointer sep_index)
{
@ -488,73 +396,31 @@ show_dialog (GnomeDACapplet *capplet, const gchar *start_page)
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);
/* Setup GConfPropertyEditors */
/* Bind settings */
/* Terminal */
gconf_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);
gconf_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);
gconf_peditor_new_string (NULL,
DEFAULT_APPS_KEY_TERMINAL_EXEC,
capplet->terminal_command_entry,
NULL);
gconf_peditor_new_string (NULL,
DEFAULT_APPS_KEY_TERMINAL_EXEC_ARG,
capplet->terminal_exec_flag_entry,
NULL);
g_settings_bind (capplet->terminal_settings, "exec",
capplet->terminal_command_entry, "text",
G_SETTINGS_BIND_DEFAULT);
g_settings_bind (capplet->terminal_settings, "exec-arg",
capplet->terminal_exec_flag_entry, "text",
G_SETTINGS_BIND_DEFAULT);
/* Visual */
gconf_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);
gconf_peditor_new_string (NULL,
DEFAULT_APPS_KEY_VISUAL_EXEC,
capplet->visual_command_entry,
NULL);
gconf_peditor_new_boolean (NULL,
DEFAULT_APPS_KEY_VISUAL_STARTUP,
capplet->visual_startup_checkbutton,
NULL);
g_settings_bind (capplet->at_visual_settings, "exec",
capplet->visual_command_entry, "text",
G_SETTINGS_BIND_DEFAULT);
g_settings_bind (capplet->at_visual_settings, "startup",
capplet->visual_startup_checkbutton, "active",
G_SETTINGS_BIND_DEFAULT);
/* Mobility */
gconf_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);
gconf_peditor_new_string (NULL,
DEFAULT_APPS_KEY_MOBILITY_EXEC,
capplet->mobility_command_entry,
NULL);
gconf_peditor_new_boolean (NULL,
DEFAULT_APPS_KEY_MOBILITY_STARTUP,
capplet->mobility_startup_checkbutton,
NULL);
g_settings_bind (capplet->at_mobility_settings, "exec",
capplet->mobility_command_entry, "text",
G_SETTINGS_BIND_DEFAULT);
g_settings_bind (capplet->at_mobility_settings, "startup",
capplet->mobility_startup_checkbutton, "active",
G_SETTINGS_BIND_DEFAULT);
gtk_window_set_icon_name (GTK_WINDOW (capplet->window),
"gnome-settings-default-applications");
@ -583,10 +449,6 @@ show_dialog (GnomeDACapplet *capplet, const gchar *start_page)
void
gnome_default_applications_panel_init (GnomeDACapplet *capplet)
{
gconf_client_add_dir (capplet->gconf,
"/desktop/gnome/applications",
GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
gnome_da_xml_load_list (capplet);
show_dialog (capplet, 0);

View file

@ -24,22 +24,6 @@
#include <gtk/gtk.h>
#include <gconf/gconf-client.h>
#define DEFAULT_APPS_KEY_TERMINAL_PATH "/desktop/gnome/applications/terminal"
#define DEFAULT_APPS_KEY_TERMINAL_EXEC_ARG DEFAULT_APPS_KEY_TERMINAL_PATH"/exec_arg"
#define DEFAULT_APPS_KEY_TERMINAL_EXEC DEFAULT_APPS_KEY_TERMINAL_PATH"/exec"
#define DEFAULT_APPS_KEY_MEDIA_PATH "/desktop/gnome/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/gnome/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/gnome/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 _GnomeDACapplet GnomeDACapplet;
struct _GnomeDACapplet {
@ -68,7 +52,9 @@ struct _GnomeDACapplet {
GtkWidget *mobility_command_label;
GtkWidget *mobility_startup_checkbutton;
GConfClient *gconf;
GSettings *terminal_settings;
GSettings *at_mobility_settings;
GSettings *at_visual_settings;
GList *web_browsers;
GList *mail_readers;