From aa5eaef8c971e11e1fa7ea68fad7eaa0b04c076a Mon Sep 17 00:00:00 2001 From: Joe Marcus Clarke Date: Sun, 3 May 2009 02:54:34 +0000 Subject: * Add support for a gdm_lang rc.conf macro to control the locale used by the GDM greeter [1] * Add a patch from Fedora to support reading the keyboard layout from hal [2] PR: 131533 [2] Obtained from: Fedora CVS [2] Submitted by: daichi [1] Andreas Wetzel [2] --- x11/gdm/Makefile | 1 + x11/gdm/files/gdm.in | 3 +- x11/gdm/files/patch-configure | 69 +++++++++++++++++++++++++ x11/gdm/files/patch-hal-keyboard | 109 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 181 insertions(+), 1 deletion(-) create mode 100644 x11/gdm/files/patch-configure create mode 100644 x11/gdm/files/patch-hal-keyboard (limited to 'x11/gdm') diff --git a/x11/gdm/Makefile b/x11/gdm/Makefile index 6166262e3f91..f9229dfef5b1 100644 --- a/x11/gdm/Makefile +++ b/x11/gdm/Makefile @@ -8,6 +8,7 @@ PORTNAME= gdm PORTVERSION= 2.26.1 +PORTREVISION= 1 CATEGORIES= x11 gnome MASTER_SITES= GNOME DIST_SUBDIR= gnome2 diff --git a/x11/gdm/files/gdm.in b/x11/gdm/files/gdm.in index a8a1a3496a5e..a6a0a8d70eec 100644 --- a/x11/gdm/files/gdm.in +++ b/x11/gdm/files/gdm.in @@ -15,6 +15,7 @@ gdm_enable=${gdm_enable-${gnome_enable}} gdm_preserve_base_pam_conf=${gdm_preserve_base_pam_conf-NO} +gdm_lang=${gdm_lang-${LANG}} export PATH=/bin:/sbin:/usr/bin:/usr/sbin:%%LOCALBASE%%/bin:%%LOCALBASE%%/sbin @@ -54,7 +55,7 @@ gdm_start() sleep 1 iter=$(expr ${iter} + 1) done - ${command} ${gdm_flags} ) & + LANG=${gdm_lang} ${command} ${gdm_flags} ) & } load_rc_config ${name} diff --git a/x11/gdm/files/patch-configure b/x11/gdm/files/patch-configure new file mode 100644 index 000000000000..baa14aa863dd --- /dev/null +++ b/x11/gdm/files/patch-configure @@ -0,0 +1,69 @@ +--- configure.orig 2009-05-02 22:45:53.000000000 -0400 ++++ configure 2009-05-02 22:47:16.000000000 -0400 +@@ -19163,15 +19163,18 @@ if test -n "$DAEMON_CFLAGS"; then + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= \$GLIB_REQUIRED_VERSION ++ hal + \"") >&5 + ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + ") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_DAEMON_CFLAGS=`$PKG_CONFIG --cflags "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + " 2>/dev/null` + else + pkg_failed=yes +@@ -19185,15 +19188,18 @@ if test -n "$DAEMON_LIBS"; then + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= \$GLIB_REQUIRED_VERSION ++ hal + \"") >&5 + ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + ") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_DAEMON_LIBS=`$PKG_CONFIG --libs "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + " 2>/dev/null` + else + pkg_failed=yes +@@ -19214,10 +19220,12 @@ fi + if test $_pkg_short_errors_supported = yes; then + DAEMON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + " 2>&1` + else + DAEMON_PKG_ERRORS=`$PKG_CONFIG --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + " 2>&1` + fi + # Put the nasty error message in config.log where it belongs +@@ -19225,6 +19233,7 @@ fi + + { { $as_echo "$as_me:$LINENO: error: Package requirements (dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + ) were not met: + + $DAEMON_PKG_ERRORS +@@ -19238,6 +19247,7 @@ See the pkg-config man page for more det + " >&5 + $as_echo "$as_me: error: Package requirements (dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + ) were not met: + + $DAEMON_PKG_ERRORS diff --git a/x11/gdm/files/patch-hal-keyboard b/x11/gdm/files/patch-hal-keyboard new file mode 100644 index 000000000000..a712f04a128a --- /dev/null +++ b/x11/gdm/files/patch-hal-keyboard @@ -0,0 +1,109 @@ +diff -up gdm-2.25.2/daemon/gdm-session-direct.c.system-keyboard gdm-2.25.2/daemon/gdm-session-direct.c +--- daemon/gdm-session-direct.c.system-keyboard 2008-08-26 15:04:00.000000000 -0400 ++++ daemon/gdm-session-direct.c 2009-02-24 22:55:02.656566009 -0500 +@@ -45,6 +45,8 @@ + #include + #include + ++#include ++ + #include "gdm-session-direct.h" + #include "gdm-session.h" + #include "gdm-session-private.h" +@@ -595,14 +597,66 @@ get_default_language_name (GdmSessionDir + return setlocale (LC_MESSAGES, NULL); + } + ++static char * ++get_system_default_layout (GdmSessionDirect *session) ++{ ++ DBusConnection *connection; ++ LibHalContext *ctx; ++ char **devices; ++ int n_devices; ++ char *layout; ++ char *result; ++ ++ result = NULL; ++ ++ connection = dbus_g_connection_get_connection (session->priv->connection); ++ ctx = libhal_ctx_new (); ++ libhal_ctx_set_dbus_connection (ctx, connection); ++ ++ if (!libhal_ctx_init (ctx, NULL)) { ++ goto out; ++ } ++ ++ devices = libhal_find_device_by_capability (ctx, ++ "input.keyboard", ++ &n_devices, ++ NULL); ++ if (n_devices > 0) { ++ layout = libhal_device_get_property_string (ctx, ++ devices[0], ++ "input.x11_options.XkbLayout", ++ NULL); ++ if (!layout) { ++ layout = libhal_device_get_property_string (ctx, ++ devices[0], ++ "input.xkb.layout", ++ NULL); ++ } ++ result = g_strdup (layout); ++ libhal_free_string (layout); ++ } ++ ++ libhal_free_string_array (devices); ++ ++ libhal_ctx_shutdown (ctx, NULL); ++ libhal_ctx_free (ctx); ++ ++out: ++ if (!result) { ++ result = g_strdup ("us"); ++ } ++ ++ return result; ++} ++ + static const char * + get_default_layout_name (GdmSessionDirect *session) + { +- if (session->priv->saved_layout != NULL) { +- return session->priv->saved_layout; ++ if (!session->priv->saved_layout) { ++ session->priv->saved_layout = get_system_default_layout (session); + } + +- return "us"; ++ return session->priv->saved_layout; + } + + static char * +@@ -1971,9 +2025,10 @@ setup_session_environment (GdmSessionDir + "GDM_LANG", + get_language_name (session)); + +- gdm_session_direct_set_environment_variable (session, +- "GDM_KEYBOARD_LAYOUT", +- get_layout_name (session)); ++ if (g_strcmp0 (get_layout_name (session), get_system_default_layout (session)) != 0) ++ gdm_session_direct_set_environment_variable (session, ++ "GDM_KEYBOARD_LAYOUT", ++ get_layout_name (session)); + + gdm_session_direct_set_environment_variable (session, + "DISPLAY", +diff -up gdm-2.25.2/daemon/gdm-session-settings.c.system-keyboard gdm-2.25.2/daemon/gdm-session-settings.c +--- daemon/gdm-session-settings.c.system-keyboard 2008-08-26 15:04:00.000000000 -0400 ++++ daemon/gdm-session-settings.c 2009-02-24 22:51:00.158815919 -0500 +@@ -149,8 +149,7 @@ gdm_session_settings_set_layout_name (Gd + { + g_return_if_fail (GDM_IS_SESSION_SETTINGS (settings)); + +- if (settings->priv->layout_name == NULL || +- strcmp (settings->priv->layout_name, layout_name) != 0) { ++ if (g_strcmp0 (settings->priv->layout_name, layout_name) != 0) { + settings->priv->layout_name = g_strdup (layout_name); + g_object_notify (G_OBJECT (settings), "layout-name"); + } -- cgit v1.2.3