summaryrefslogtreecommitdiff
path: root/daemon/gdm-session-settings.c
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2008-05-05 15:21:26 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2008-05-05 15:21:26 +0000
commit500d2c5f233e126f666de934900b25dfd690764d (patch)
treed606a000905301d68c866cde7143664998e49963 /daemon/gdm-session-settings.c
parent4404c50fc8e954c36044be49449d9881ea829fa3 (diff)
downloadgdm-500d2c5f233e126f666de934900b25dfd690764d.tar.gz
Add a keyboard chooser
svn path=/trunk/; revision=6212
Diffstat (limited to 'daemon/gdm-session-settings.c')
-rw-r--r--daemon/gdm-session-settings.c59
1 files changed, 58 insertions, 1 deletions
diff --git a/daemon/gdm-session-settings.c b/daemon/gdm-session-settings.c
index 1534949c..b6c04f7c 100644
--- a/daemon/gdm-session-settings.c
+++ b/daemon/gdm-session-settings.c
@@ -36,6 +36,7 @@ struct _GdmSessionSettingsPrivate
{
char *session_name;
char *language_name;
+ char *layout_name;
};
static void gdm_session_settings_finalize (GObject *object);
@@ -55,6 +56,7 @@ enum {
PROP_0 = 0,
PROP_SESSION_NAME,
PROP_LANGUAGE_NAME,
+ PROP_LAYOUT_NAME,
};
G_DEFINE_TYPE (GdmSessionSettings, gdm_session_settings, G_TYPE_OBJECT)
@@ -93,6 +95,11 @@ gdm_session_settings_class_install_properties (GdmSessionSettingsClass *settings
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_property (object_class, PROP_LANGUAGE_NAME, param_spec);
+ param_spec = g_param_spec_string ("layout-name", "Keyboard Layout Name",
+ "The name of the keyboard layout",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property (object_class, PROP_LAYOUT_NAME, param_spec);
}
static void
@@ -114,6 +121,7 @@ gdm_session_settings_finalize (GObject *object)
g_free (settings->priv->session_name);
g_free (settings->priv->language_name);
+ g_free (settings->priv->layout_name);
parent_class = G_OBJECT_CLASS (gdm_session_settings_parent_class);
@@ -136,6 +144,19 @@ gdm_session_settings_set_language_name (GdmSessionSettings *settings,
}
void
+gdm_session_settings_set_layout_name (GdmSessionSettings *settings,
+ const char *layout_name)
+{
+ g_return_if_fail (GDM_IS_SESSION_SETTINGS (settings));
+
+ if (settings->priv->layout_name == NULL ||
+ strcmp (settings->priv->layout_name, layout_name) != 0) {
+ settings->priv->layout_name = g_strdup (layout_name);
+ g_object_notify (G_OBJECT (settings), "layout-name");
+ }
+}
+
+void
gdm_session_settings_set_session_name (GdmSessionSettings *settings,
const char *session_name)
{
@@ -156,6 +177,13 @@ gdm_session_settings_get_language_name (GdmSessionSettings *settings)
}
char *
+gdm_session_settings_get_layout_name (GdmSessionSettings *settings)
+{
+ g_return_val_if_fail (GDM_IS_SESSION_SETTINGS (settings), NULL);
+ return g_strdup (settings->priv->layout_name);
+}
+
+char *
gdm_session_settings_get_session_name (GdmSessionSettings *settings)
{
g_return_val_if_fail (GDM_IS_SESSION_SETTINGS (settings), NULL);
@@ -177,6 +205,10 @@ gdm_session_settings_set_property (GObject *object,
gdm_session_settings_set_language_name (settings, g_value_get_string (value));
break;
+ case PROP_LAYOUT_NAME:
+ gdm_session_settings_set_layout_name (settings, g_value_get_string (value));
+ break;
+
case PROP_SESSION_NAME:
gdm_session_settings_set_session_name (settings, g_value_get_string (value));
break;
@@ -205,6 +237,10 @@ gdm_session_settings_get_property (GObject *object,
g_value_set_string (value, settings->priv->language_name);
break;
+ case PROP_LAYOUT_NAME:
+ g_value_set_string (value, settings->priv->layout_name);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -225,7 +261,8 @@ gboolean
gdm_session_settings_is_loaded (GdmSessionSettings *settings)
{
return settings->priv->session_name != NULL ||
- settings->priv->language_name != NULL;
+ settings->priv->language_name != NULL ||
+ settings->priv->layout_name != NULL;
}
gboolean
@@ -238,6 +275,7 @@ gdm_session_settings_load (GdmSessionSettings *settings,
gboolean is_loaded;
char *session_name;
char *language_name;
+ char *layout_name;
char *filename;
g_return_val_if_fail (settings != NULL, FALSE);
@@ -283,6 +321,20 @@ gdm_session_settings_load (GdmSessionSettings *settings,
goto out;
}
+ layout_name = g_key_file_get_string (key_file, "Desktop", "Layout",
+ &load_error);
+
+ if (layout_name != NULL) {
+ gdm_session_settings_set_layout_name (settings, layout_name);
+ g_free (layout_name);
+ } else if (g_error_matches (load_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
+ g_error_free (load_error);
+ load_error = NULL;
+ } else {
+ g_propagate_error (error, load_error);
+ goto out;
+ }
+
is_loaded = TRUE;
out:
g_key_file_free (key_file);
@@ -327,6 +379,11 @@ gdm_session_settings_save (GdmSessionSettings *settings,
settings->priv->language_name);
}
+ if (settings->priv->layout_name != NULL) {
+ g_key_file_set_string (key_file, "Desktop", "Layout",
+ settings->priv->layout_name);
+ }
+
contents = g_key_file_to_data (key_file, &length, &file_error);
if (contents == NULL) {