[Xfce4-commits] <xfce4-settings:master> Use active layout fornex sessions (Bug #5270).

Jérôme Guelfucci noreply at xfce.org
Wed Sep 22 00:18:01 CEST 2010


Updating branch refs/heads/master
         to f6a83070b3f06b9f0c7f203a70fc5b48ed6d0ad6 (commit)
       from d73d9bbc150207ab16e3223912d71647241ad7fb (commit)

commit f6a83070b3f06b9f0c7f203a70fc5b48ed6d0ad6
Author: Jérôme Guelfucci <jeromeg at xfce.org>
Date:   Wed Sep 22 00:03:55 2010 +0200

    Use active layout fornex sessions (Bug #5270).
    
    Put the active layout|variant at the beginning of the saved list so that
    it's used as the active layout the next time a session is started.

 dialogs/keyboard-settings/xfce-keyboard-settings.c |  132 ++++++++++++++------
 1 files changed, 96 insertions(+), 36 deletions(-)

diff --git a/dialogs/keyboard-settings/xfce-keyboard-settings.c b/dialogs/keyboard-settings/xfce-keyboard-settings.c
index c9ee468..10e42fb 100644
--- a/dialogs/keyboard-settings/xfce-keyboard-settings.c
+++ b/dialogs/keyboard-settings/xfce-keyboard-settings.c
@@ -1013,6 +1013,8 @@ xfce_keyboard_settings_set_layout (XfceKeyboardSettings *settings)
   GtkTreeModel *model;
   GtkTreeIter   iter;
   gboolean      active;
+  gchar        *active_layout;
+  gchar        *active_variant;
   gchar        *val_layout;
   gchar        *val_variant;
   gchar        *variants;
@@ -1022,42 +1024,91 @@ xfce_keyboard_settings_set_layout (XfceKeyboardSettings *settings)
   view = gtk_builder_get_object (GTK_BUILDER (settings), "xkb_layout_view");
   model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
   gtk_tree_model_get_iter_first (model, &iter);
-  gtk_tree_model_get (model, &iter, XKB_TREE_ACTIVE, &active, XKB_TREE_LAYOUTS, &val_layout, XKB_TREE_VARIANTS, &val_variant, -1);
-  layouts = g_strdup (val_layout);
-  g_free (val_layout);
+  gtk_tree_model_get (model, &iter,
+                      XKB_TREE_ACTIVE, &active,
+                      XKB_TREE_LAYOUTS, &val_layout,
+                      XKB_TREE_VARIANTS, &val_variant, -1);
 
-  if (val_variant)
+  /* We put the active layout/variant at the beginning of the list so that it gets
+   * picked by xfce4-settings-helper on the next session start. */
+
+  active_layout = NULL;
+  active_variant = NULL;
+
+  if (val_layout)
     {
+      layouts = g_strdup (val_layout);
+      g_free (val_layout);
+
       variants = g_strdup (val_variant);
       g_free (val_variant);
     }
   else
-    variants = g_strdup ("");
+    {
+      layouts = g_strdup ("");
+      /* If the layout was NULL, we ignore the variant */
+      variants = g_strdup ("");
+    }
 
   while (gtk_tree_model_iter_next (model, &iter))
     {
-      gtk_tree_model_get (model, &iter, XKB_TREE_ACTIVE, &active, XKB_TREE_LAYOUTS, &val_layout, XKB_TREE_VARIANTS, &val_variant, -1);
-      tmp = g_strconcat (layouts, ",", val_layout, NULL);
-      g_free (val_layout);
-      g_free (layouts);
-      layouts = tmp;
+      gtk_tree_model_get (model, &iter,
+                          XKB_TREE_ACTIVE, &active,
+                          XKB_TREE_LAYOUTS, &val_layout,
+                          XKB_TREE_VARIANTS, &val_variant, -1);
 
-      if (val_variant)
+      if (active)
         {
-          tmp = g_strconcat (variants, ",", val_variant, NULL);
-          g_free (val_variant);
-          g_free (variants);
+          if (val_layout)
+            {
+              active_layout = g_strdup (val_layout);
+              g_free (val_layout);
+
+              active_variant = g_strdup (val_variant);
+              g_free (val_variant);
+            }
+          else
+            {
+              /* This should never happen, but still... */
+              active_layout = g_strdup ("");
+              active_variant = g_strdup ("");
+            }
         }
       else
         {
-          tmp = g_strconcat (variants, ",", NULL);
-          g_free (variants);
+          if (val_layout)
+            {
+              tmp = g_strconcat (layouts, ",", val_layout, NULL);
+              g_free (val_layout);
+              g_free (layouts);
+              layouts = tmp;
+
+              tmp = g_strconcat (variants, ",", val_variant, NULL);
+              g_free (val_variant);
+              g_free (variants);
+              variants = tmp;
+            }
         }
-        variants = tmp;
     }
 
-  xfconf_channel_set_string (settings->priv->keyboard_layout_channel, "/Default/XkbLayout", layouts);
-  xfconf_channel_set_string (settings->priv->keyboard_layout_channel, "/Default/XkbVariant", variants);
+  if (active_layout)
+    {
+      tmp = g_strconcat (active_variant, ",", variants, NULL);
+      g_free (variants);
+      variants = tmp;
+
+      tmp = g_strconcat (active_layout, ",", layouts, NULL);
+      g_free (layouts);
+      layouts = tmp;
+
+      g_free (active_layout);
+      g_free (active_variant);
+    }
+
+  xfconf_channel_set_string (settings->priv->keyboard_layout_channel,
+                             "/Default/XkbLayout", layouts);
+  xfconf_channel_set_string (settings->priv->keyboard_layout_channel,
+                             "/Default/XkbVariant", variants);
 
   g_free (layouts);
   g_free (variants);
@@ -1179,32 +1230,41 @@ xfce_keyboard_settings_active_layout_cb (GtkCellRendererToggle *cell,
 {
   GObject          *view;
   GtkTreeModel     *model;
-  GtkTreeIter       iter;
-  GtkTreePath      *path1,
-                   *path2;
-  gint             *column,
-                    group_id = 0;
-  gboolean          selected = FALSE;
+  GtkTreePath      *path;
+  GtkTreeIter       iter, iter2;
+  gint             *column;
 
   view = gtk_builder_get_object (GTK_BUILDER (settings), "xkb_layout_view");
   model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
-  path1 = gtk_tree_path_new_from_string (path_str);
   column = g_object_get_data (G_OBJECT (cell), "column");
-  gtk_tree_model_get_iter_first (model, &iter);
+  path = gtk_tree_path_new_from_string (path_str);
+
+  /* Unset the previous active item */
+  gtk_tree_model_get_iter_first (model, &iter2);
 
   do
     {
-      path2 = gtk_tree_model_get_path (model, &iter);
-      selected = (gtk_tree_path_compare (path1, path2) == 0);
-      gtk_list_store_set (GTK_LIST_STORE (model), &iter, column, selected, -1);
-      if (selected)
-          xkl_engine_lock_group (settings->priv->xkl_engine, group_id);
-      group_id++;
-      gtk_tree_path_free (path2);
+      gboolean active;
+
+      gtk_tree_model_get (model, &iter2, XKB_TREE_ACTIVE, &active, -1);
+
+      if (active)
+        gtk_list_store_set (GTK_LIST_STORE (model), &iter2, XKB_TREE_ACTIVE, !active, -1);
+    }
+  while (gtk_tree_model_iter_next (model, &iter2));
+
+  /* Set the clicked item as active */
+  if (gtk_tree_model_get_iter (model, &iter, path))
+    {
+      gboolean active;
+
+      gtk_tree_model_get (model, &iter, XKB_TREE_ACTIVE, &active, -1);
+      gtk_list_store_set (GTK_LIST_STORE (model), &iter, XKB_TREE_ACTIVE, !active, -1);
     }
-  while (gtk_tree_model_iter_next (model, &iter));
 
-  gtk_tree_path_free (path1);
+  xfce_keyboard_settings_set_layout (settings);
+
+  gtk_tree_path_free (path);
 }
 
 



More information about the Xfce4-commits mailing list