rpms/gdm/devel gdm-keyboard-chooser.patch, NONE, 1.1 gdm.spec, 1.385, 1.386

Matthias Clasen (mclasen) fedora-extras-commits at redhat.com
Mon May 5 15:34:53 UTC 2008


Author: mclasen

Update of /cvs/extras/rpms/gdm/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1278

Modified Files:
	gdm.spec 
Added Files:
	gdm-keyboard-chooser.patch 
Log Message:
add keyboard chooser


gdm-keyboard-chooser.patch:

--- NEW FILE gdm-keyboard-chooser.patch ---
diff -up gdm-2.22.0/configure.ac.keyboard-chooser gdm-2.22.0/configure.ac
--- gdm-2.22.0/configure.ac.keyboard-chooser	2008-05-05 11:29:30.000000000 -0400
+++ gdm-2.22.0/configure.ac	2008-05-05 11:30:14.000000000 -0400
@@ -48,6 +48,7 @@ SCROLLKEEPER_REQUIRED_VERSION=0.1.4
 GCONF_REQUIRED_VERSION=2.6.1
 POLICYKIT_REQUIRED_VERSION=0.7
 GNOME_PANEL_REQUIRED_VERSION=2.0.0
+LIBXKLAVIER_REQUIRED_VERSION=3.5
 
 EXTRA_COMPILE_WARNINGS(yes)
 
@@ -98,6 +99,7 @@ PKG_CHECK_MODULES(SIMPLE_GREETER,
         gtk+-2.0 >= $GTK_REQUIRED_VERSION
         libglade-2.0 >= $LIBGLADE_REQUIRED_VERSION
         gconf-2.0 >= $GCONF_REQUIRED_VERSION
+	libxklavier >= $LIBXKLAVIER_REQUIRED_VERSION
 )
 AC_SUBST(SIMPLE_GREETER_CFLAGS)
 AC_SUBST(SIMPLE_GREETER_LIBS)
diff -up gdm-2.22.0/daemon/gdm-factory-slave.c.keyboard-chooser gdm-2.22.0/daemon/gdm-factory-slave.c
--- gdm-2.22.0/daemon/gdm-factory-slave.c.keyboard-chooser	2008-04-17 23:29:28.000000000 -0400
+++ gdm-2.22.0/daemon/gdm-factory-slave.c	2008-05-05 11:28:39.000000000 -0400
@@ -416,6 +416,14 @@ on_greeter_language_selected (GdmGreeter
 }
 
 static void
+on_greeter_layout_selected (GdmGreeterServer *greeter_server,
+                            const char       *text,
+                            GdmFactorySlave  *slave)
+{
+        gdm_session_select_layout (GDM_SESSION (slave->priv->session), text);
+}
+
+static void
 on_greeter_user_selected (GdmGreeterServer *greeter_server,
                           const char       *text,
                           GdmFactorySlave  *slave)
@@ -505,6 +513,10 @@ run_greeter (GdmFactorySlave *slave)
                           G_CALLBACK (on_greeter_language_selected),
                           slave);
         g_signal_connect (slave->priv->greeter_server,
+                          "layout-selected",
+                          G_CALLBACK (on_greeter_layout_selected),
+                          slave);
+        g_signal_connect (slave->priv->greeter_server,
                           "user-selected",
                           G_CALLBACK (on_greeter_user_selected),
                           slave);
diff -up gdm-2.22.0/daemon/gdm-greeter-server.c.keyboard-chooser gdm-2.22.0/daemon/gdm-greeter-server.c
--- gdm-2.22.0/daemon/gdm-greeter-server.c.keyboard-chooser	2008-04-17 23:29:28.000000000 -0400
+++ gdm-2.22.0/daemon/gdm-greeter-server.c	2008-05-05 11:28:39.000000000 -0400
@@ -76,6 +76,7 @@ enum {
         SESSION_SELECTED,
         HOSTNAME_SELECTED,
         LANGUAGE_SELECTED,
+        LAYOUT_SELECTED,
         USER_SELECTED,
         CANCELLED,
         CONNECTED,
@@ -266,6 +267,13 @@ gdm_greeter_server_default_language_name
 }
 
 void
+gdm_greeter_server_default_layout_name_changed (GdmGreeterServer *greeter_server,
+                                                const char       *layout_name)
+{
+        send_dbus_string_signal (greeter_server, "DefaultLayoutNameChanged", layout_name);
+}
+
+void
 gdm_greeter_server_default_session_name_changed (GdmGreeterServer *greeter_server,
                                                  const char       *session_name)
 {
@@ -496,6 +504,33 @@ handle_select_language (GdmGreeterServer
 }
 
 static DBusHandlerResult
+handle_select_layout (GdmGreeterServer *greeter_server,
+                      DBusConnection  *connection,
+                      DBusMessage     *message)
+{
+        DBusMessage *reply;
+        DBusError    error;
+        const char  *text;
+
+        dbus_error_init (&error);
+        if (! dbus_message_get_args (message, &error,
+                                     DBUS_TYPE_STRING, &text,
+                                     DBUS_TYPE_INVALID)) {
+                g_warning ("ERROR: %s", error.message);
+        }
+
+        g_debug ("GreeterServer: SelectLayout: %s", text);
+
+        reply = dbus_message_new_method_return (message);
+        dbus_connection_send (connection, reply, NULL);
+        dbus_message_unref (reply);
+
+        g_signal_emit (greeter_server, signals [LAYOUT_SELECTED], 0, text);
+
+        return DBUS_HANDLER_RESULT_HANDLED;
+}
+
+static DBusHandlerResult
 handle_select_user (GdmGreeterServer *greeter_server,
                     DBusConnection   *connection,
                     DBusMessage      *message)
@@ -624,6 +659,8 @@ greeter_handle_child_message (DBusConnec
                 return handle_select_hostname (greeter_server, connection, message);
         } else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "SelectLanguage")) {
                 return handle_select_language (greeter_server, connection, message);
+        } else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "SelectLayout")) {
+                return handle_select_layout (greeter_server, connection, message);
         } else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "SelectUser")) {
                 return handle_select_user (greeter_server, connection, message);
         } else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "Cancel")) {
@@ -711,6 +748,10 @@ do_introspect (DBusConnection *connectio
                                "    <signal name=\"DefaultLanguageNameChanged\">\n"
                                "      <arg name=\"language_name\" type=\"s\"/>\n"
                                "    </signal>\n"
+                               "    <signal name=\"DefaultLayoutNameChanged\">\n"
+                               "      <arg name=\"layout_name\" type=\"s\"/>\n"
+                               "    </signal>\n"
+                               "    <signal name=\"DefaultSessionNameChanged\">\n"
                                "    <signal name=\"DefaultSessionNameChanged\">\n"
                                "      <arg name=\"session_name\" type=\"s\"/>\n"
                                "    </signal>\n"
@@ -1157,6 +1198,17 @@ gdm_greeter_server_class_init (GdmGreete
                               G_TYPE_NONE,
                               1,
                               G_TYPE_STRING);
+        signals [LAYOUT_SELECTED] =
+                g_signal_new ("layout-selected",
+                              G_OBJECT_CLASS_TYPE (object_class),
+                              G_SIGNAL_RUN_FIRST,
+                              G_STRUCT_OFFSET (GdmGreeterServerClass, layout_selected),
+                              NULL,
+                              NULL,
+                              g_cclosure_marshal_VOID__STRING,
+                              G_TYPE_NONE,
+                              1,
+                              G_TYPE_STRING);
         signals [USER_SELECTED] =
                 g_signal_new ("user-selected",
                               G_OBJECT_CLASS_TYPE (object_class),
diff -up gdm-2.22.0/daemon/gdm-greeter-server.h.keyboard-chooser gdm-2.22.0/daemon/gdm-greeter-server.h
--- gdm-2.22.0/daemon/gdm-greeter-server.h.keyboard-chooser	2008-04-17 23:29:28.000000000 -0400
+++ gdm-2.22.0/daemon/gdm-greeter-server.h	2008-05-05 11:28:39.000000000 -0400
@@ -57,6 +57,8 @@ typedef struct
                                              const char        *hostname);
         void (* language_selected)          (GdmGreeterServer  *greeter_server,
                                              const char        *name);
+        void (* layout_selected)            (GdmGreeterServer  *greeter_server,
+                                             const char        *name);
         void (* user_selected)              (GdmGreeterServer  *greeter_server,
                                              const char        *name);
         void (* cancelled)                  (GdmGreeterServer  *greeter_server);
@@ -88,6 +90,8 @@ void                gdm_greeter_server_s
                                                               const char       *text);
 void                gdm_greeter_server_default_language_name_changed (GdmGreeterServer *greeter_server,
                                                                       const char       *text);
+void                gdm_greeter_server_default_layout_name_changed (GdmGreeterServer *greeter_server,
+                                                                    const char       *text);
 void                gdm_greeter_server_default_session_name_changed (GdmGreeterServer *greeter_server,
                                                                      const char       *text);
 
diff -up gdm-2.22.0/daemon/gdm-product-slave.c.keyboard-chooser gdm-2.22.0/daemon/gdm-product-slave.c
--- gdm-2.22.0/daemon/gdm-product-slave.c.keyboard-chooser	2008-04-17 23:29:28.000000000 -0400
+++ gdm-2.22.0/daemon/gdm-product-slave.c	2008-05-05 11:28:39.000000000 -0400
@@ -755,6 +755,28 @@ on_relay_language_selected (GdmProductSl
 }
 
 static void
+on_relay_layout_selected (GdmProductSlave *slave,
+                          DBusMessage     *message)
+{
+        DBusError   error;
+        const char *text;
+        dbus_bool_t res;
+
+        dbus_error_init (&error);
+        res = dbus_message_get_args (message,
+                                     &error,
+                                     DBUS_TYPE_STRING, &text,
+                                     DBUS_TYPE_INVALID);
+        if (res) {
+                g_debug ("GdmProductSlave: Layout selected %s", text);
+                gdm_session_select_layout (GDM_SESSION (slave->priv->session), text);
+        } else {
+                g_warning ("Unable to get arguments: %s", error.message);
+                dbus_error_free (&error);
+        }
+}
+
+static void
 on_relay_user_selected (GdmProductSlave *slave,
                         DBusMessage     *message)
 {
@@ -963,6 +985,8 @@ relay_dbus_handle_message (DBusConnectio
[...1943 lines suppressed...]
+	}
+	else
+		result = layout;
+
+	return result;
+}
+
+typedef struct {
+	GSList *list;
+	char *layout;
+} LayoutData;
+
+static void
+add_variant (XklConfigRegistry   *config,
+             const XklConfigItem *item,
+             gpointer             data)
+{
+	LayoutData *ldata = data;
+
+	ldata->list = g_slist_prepend (ldata->list, g_strdup_printf  ("%s\t%s", ldata->layout, item->name));
+}
+
+static void
+add_layout (XklConfigRegistry   *config,
+            const XklConfigItem *item,
+            gpointer             data)
+{
+	LayoutData *ldata = data;
+
+	ldata->layout = item->name;
+	ldata->list = g_slist_prepend (ldata->list, g_strdup (item->name));
+	xkl_config_registry_foreach_layout_variant (config, item->name, add_variant, data);
+	ldata->layout = NULL;
+}
+
+char **
+gdm_get_all_layout_names (void)
+{
+	GSList *l;
+	int len, i;
+        char **layouts;
+	LayoutData data;
+
+	init_xkl ();
+
+	data.list = NULL;
+	data.layout = NULL;
+
+	xkl_config_registry_foreach_layout (config_registry, add_layout, &data);
+
+	len = g_slist_length (data.list);
+
+        layouts = g_new (char *, len + 1);
+	layouts[len] = NULL;
+
+	for (i = 0, l = data.list; i < len; i++, l = l->next) 
+		layouts[len - i - 1] = l->data;
+
+	g_slist_free (data.list);
+
+        return layouts;
+}
+
+void
+gdm_layout_activate (const char *layout)
+{
+	XklConfigRec *config;
+	char *p;
+
+	init_xkl ();
+
+	config = xkl_config_rec_new ();
+	config->model = g_strdup (initial_config->model);
+
+	if (layout == NULL) {
+		config->layouts = g_strdupv (initial_config->layouts);
+		config->variants = g_strdupv (initial_config->variants);
+		config->options = g_strdupv (initial_config->options);
+	}
+	else {
+		config->layouts = g_new0 (gchar *, 2);
+		config->layouts[0] = g_strdup (layout);
+
+		p = strchr (config->layouts[0], '\t');
+		if (p) {
+				
+			config->variants = g_new0 (gchar *, 2);
+			config->layouts[0][p - config->layouts[0]] = 0;
+			config->variants[0] = g_strdup (p + 1);	
+		}
+	}
+
+	xkl_config_rec_activate (config, engine);
+	
+	g_object_unref (config);
+}
+
diff -up /dev/null gdm-2.22.0/gui/simple-greeter/gdm-layouts.h
--- /dev/null	2008-05-05 08:19:33.312003896 -0400
+++ gdm-2.22.0/gui/simple-greeter/gdm-layouts.h	2008-05-05 11:28:39.000000000 -0400
@@ -0,0 +1,33 @@
+/* -*- Modex: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Written by: Matthias Clasen
+ */
+
+#ifndef __GDM_LAYOUTS_H
+#define __GDM_LAYOUTS_H
+
+G_BEGIN_DECLS
+
+char *        gdm_get_layout_from_name  (const char *name);
+char **       gdm_get_all_layout_names  (void);
+void          gdm_layout_activate       (const char *layout);
+
+G_END_DECLS
+
+#endif /* __GDM_LAYOUT_CHOOSER_WIDGET_H */
diff -up gdm-2.22.0/gui/simple-greeter/gdm-simple-greeter.schemas.in.keyboard-chooser gdm-2.22.0/gui/simple-greeter/gdm-simple-greeter.schemas.in
--- gdm-2.22.0/gui/simple-greeter/gdm-simple-greeter.schemas.in.keyboard-chooser	2008-05-01 18:35:35.000000000 -0400
+++ gdm-2.22.0/gui/simple-greeter/gdm-simple-greeter.schemas.in	2008-05-05 11:28:39.000000000 -0400
@@ -226,5 +226,29 @@
       </locale>
     </schema>
 
+    <schema>
+      <key>/schemas/apps/gdm/simple-greeter/settings-manager-plugins/keyboard/active</key>
+      <applyto>/apps/gdm/simple-greeter/settings-manager-plugins/keyboard/active</applyto>
+      <owner>gdm-simple-greeter</owner>
+      <type>bool</type>
+      <default>TRUE</default>
+      <locale name="C">
+        <short>True if the keyboard settings manager plugin is enabled.</short>
+        <long>Set to True to enable the keyboard  settings manager plugin.</long>
+      </locale>
+    </schema>
+
+    <schema>
+      <key>/schemas/apps/gdm/simple-greeter/settings-manager-plugins/keyboard/priority</key>
+      <applyto>/apps/gdm/simple-greeter/settings-manager-plugins/keyboard/priority</applyto>
+      <owner>gdm-simple-greeter</owner>
+      <type>int</type>
+      <default>6</default>
+      <locale name="C">
+        <short>True if the keyboard settings manager plugin is enabled.</short>
+        <long>Set to True to enable the keyboard  settings manager plugin.</long>
+      </locale>
+    </schema>
+
   </schemalist>
 </gconfschemafile>
diff -up gdm-2.22.0/gui/simple-greeter/Makefile.am.keyboard-chooser gdm-2.22.0/gui/simple-greeter/Makefile.am
--- gdm-2.22.0/gui/simple-greeter/Makefile.am.keyboard-chooser	2008-04-17 23:29:26.000000000 -0400
+++ gdm-2.22.0/gui/simple-greeter/Makefile.am	2008-05-05 11:29:03.000000000 -0400
@@ -123,6 +123,14 @@ test_greeter_panel_SOURCES = 	\
 	gdm-language-chooser-dialog.c	\
 	gdm-language-option-widget.h	\
 	gdm-language-option-widget.c	\
+	gdm-layout-chooser-widget.h	\
+	gdm-layout-chooser-widget.c	\
+	gdm-layout-chooser-dialog.h	\
+	gdm-layout-chooser-dialog.c	\
+	gdm-layout-option-widget.h	\
+	gdm-layout-option-widget.c	\
+	gdm-layouts.h			\
+	gdm-layouts.c			\
 	gdm-sessions.h			\
 	gdm-sessions.c			\
 	gdm-session-option-widget.h	\
@@ -276,6 +284,14 @@ gdm_simple_greeter_SOURCES =  		\
 	gdm-languages.c			\
 	gdm-language-chooser-widget.h	\
 	gdm-language-chooser-widget.c	\
+	gdm-layout-chooser-widget.h	\
+	gdm-layout-chooser-widget.c	\
+	gdm-layout-chooser-dialog.h	\
+	gdm-layout-chooser-dialog.c	\
+	gdm-layout-option-widget.h	\
+	gdm-layout-option-widget.c	\
+	gdm-layouts.h			\
+	gdm-layouts.c			\
 	locarchive.h			\
 	gdm-language-chooser-dialog.h	\
 	gdm-language-chooser-dialog.c	\


Index: gdm.spec
===================================================================
RCS file: /cvs/extras/rpms/gdm/devel/gdm.spec,v
retrieving revision 1.385
retrieving revision 1.386
diff -u -r1.385 -r1.386
--- gdm.spec	5 May 2008 01:16:05 -0000	1.385
+++ gdm.spec	5 May 2008 15:33:43 -0000	1.386
@@ -16,12 +16,12 @@
 Summary: The GNOME Display Manager
 Name: gdm
 Version: 2.22.0
-Release: 3%{?dist}
+Release: 4%{?dist}
 Epoch: 1
 License: GPLv2+
 Group: User Interface/X
 URL: http://download.gnome.org/sources/gdm
-Source: http://download.gnome.org/sources/gdm/2.22/gdm-%{version}.tar.bz2
+Source: http://download.gnome.org/sources/gdm/2.22/gdm-%{version}.tar.gz
 Source1: gdm-pam
 Source2: gdm-autologin-pam
 Source3: gdmsetup-pam
@@ -76,6 +76,9 @@
 
 Requires: audit-libs >= %{libauditver}
 Patch1: xkb-groups.patch
+# from upstream svn
+Patch2: gdm-keyboard-chooser.patch
+# Fedora-specific
 Patch99: gdm-2.21.8-fedora-logo.patch
 
 %package user-switch-applet
@@ -96,6 +99,7 @@
 %prep
 %setup -q
 %patch1 -p1 -b .xkb-groups
+%patch2 -p1 -b .keyboard-chooser
 %patch99 -p1 -b .fedora-logo
 
 %build
@@ -293,6 +297,9 @@
 %{_datadir}/gnome-2.0/ui/GNOME_FastUserSwitchApplet.xml
 
 %changelog
+* Mon May  5 2008 Matthias Clasen <mclasen at redhat.com> - 1:2.22.0-4
+- Add a keyboard chooser to the greeter
+
 * Sun May  4 2008 Matthias Clasen <mclasen at redhat.com> - 1:2.22.0-3
 - Fix source url
 




More information about the fedora-extras-commits mailing list