summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2013-01-29 18:03:03 -0500
committerRui Matos <tiagomatos@gmail.com>2013-02-19 12:25:53 +0100
commit188f3d165840872d374c54849c72d5ef51709d9b (patch)
tree6a13e0989ec08cc0b9561b4ed118fbdc908d82a2
parentb2148043d70c9082555e8039dbb33ee54610367c (diff)
downloadgnome-control-center-188f3d165840872d374c54849c72d5ef51709d9b.tar.gz
Acceptable behaviour in localed-less situations
We show the 'None' as login screen settings, and the entire page is made insensitive.
-rw-r--r--panels/region/cc-region-panel.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/panels/region/cc-region-panel.c b/panels/region/cc-region-panel.c
index 1fa24f12a..7fd87493e 100644
--- a/panels/region/cc-region-panel.c
+++ b/panels/region/cc-region-panel.c
@@ -196,7 +196,6 @@ restart_now (CcRegionPanel *self)
gd_notification_dismiss (GD_NOTIFICATION (self->priv->notification));
- g_print ("Ta Da! Restarting...\n");
bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
g_dbus_connection_call (bus,
"org.gnome.SessionManager",
@@ -308,7 +307,6 @@ update_region (CcRegionPanel *self,
if (g_strcmp0 (region, priv->region) == 0)
return FALSE;
- g_print ("update region to %s\n", region);
g_settings_set_string (priv->locale_settings, KEY_REGION, region);
return TRUE;
}
@@ -436,7 +434,10 @@ update_language_label (CcRegionPanel *self)
language = priv->system_language;
else
language = priv->language;
- name = gnome_get_language_from_name (language, language);
+ if (language)
+ name = gnome_get_language_from_name (language, language);
+ else
+ name = g_strdup (C_("Language", "None"));
gtk_label_set_label (GTK_LABEL (priv->language_label), name);
g_free (name);
}
@@ -1271,6 +1272,9 @@ add_input_sources_from_localed (CcRegionPanel *self)
gchar **variants = NULL;
gint i, n;
+ if (!priv->localed)
+ return;
+
v = g_dbus_proxy_get_cached_property (priv->localed, "X11Layout");
if (v) {
s = g_variant_get_string (v, NULL);
@@ -1288,8 +1292,10 @@ add_input_sources_from_localed (CcRegionPanel *self)
if (variants && variants[0])
n = MIN (g_strv_length (layouts), g_strv_length (variants));
- else
+ else if (layouts && layouts[0])
n = g_strv_length (layouts);
+ else
+ n = 0;
for (i = 0; i < n && layouts[i][0]; i++) {
const gchar *name;
@@ -1302,10 +1308,13 @@ add_input_sources_from_localed (CcRegionPanel *self)
gnome_xkb_info_get_layout_info (priv->xkb_info, id, &name, NULL, NULL, NULL);
- add_input_row (self, "xkb", id, name ? name : id, NULL);
+ add_input_row (self, INPUT_SOURCE_TYPE_XKB, id, name ? name : id, NULL);
g_free (id);
}
+ if (n == 0) {
+ add_input_row (self, "none", "none", C_("Input source", "None"), NULL);
+ }
g_strfreev (variants);
g_strfreev (layouts);
@@ -1407,6 +1416,8 @@ localed_proxy_ready (GObject *source,
return;
}
+ gtk_widget_set_sensitive (priv->login_button, TRUE);
+
g_signal_connect (priv->localed, "g-properties-changed",
G_CALLBACK (on_localed_properties_changed), self);
on_localed_properties_changed (priv->localed, NULL, NULL, self);
@@ -1416,19 +1427,19 @@ static void
login_changed (CcRegionPanel *self)
{
CcRegionPanelPrivate *priv = self->priv;
- gboolean insensitive;
+ gboolean can_acquire;
priv->login = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->login_button));
gtk_widget_set_visible (priv->formats_row, !priv->login);
gtk_widget_set_visible (priv->login_label, priv->login);
update_button_sensitivity (self);
+ can_acquire = priv->permission &&
+ (g_permission_get_allowed (priv->permission) ||
+ g_permission_get_can_acquire (priv->permission));
/* FIXME: insensitive doesn't look quite right for this */
- insensitive = priv->login &&
- !g_permission_get_allowed (priv->permission) &&
- !g_permission_get_can_acquire (priv->permission);
- gtk_widget_set_sensitive (priv->language_section, !insensitive);
- gtk_widget_set_sensitive (priv->input_section, !insensitive);
+ gtk_widget_set_sensitive (priv->language_section, !priv->login || can_acquire);
+ gtk_widget_set_sensitive (priv->input_section, !priv->login || can_acquire);
clear_input_sources (self);
if (priv->login)
@@ -1462,6 +1473,8 @@ setup_login_button (CcRegionPanel *self)
priv->login_label = WID ("login-label");
priv->login_button = gtk_toggle_button_new_with_label (_("Login Screen"));
+ gtk_widget_set_sensitive (priv->login_button, FALSE);
+
g_object_bind_property (priv->user_manager, "has-multiple-users",
priv->login_button, "visible",
G_BINDING_SYNC_CREATE);