diff --git a/0001-Don-t-show-lock-screen-option-if-locked-down.patch b/0001-Don-t-show-lock-screen-option-if-locked-down.patch deleted file mode 100644 index e3b6d65..0000000 --- a/0001-Don-t-show-lock-screen-option-if-locked-down.patch +++ /dev/null @@ -1,88 +0,0 @@ -diff -up gdm-2.28.1/gui/user-switch-applet/applet.c.dont-show-lock-screen-if-locked-down gdm-2.28.1/gui/user-switch-applet/applet.c ---- gdm-2.28.1/gui/user-switch-applet/applet.c.dont-show-lock-screen-if-locked-down 2009-10-19 18:12:45.000000000 -0400 -+++ gdm-2.28.1/gui/user-switch-applet/applet.c 2009-10-31 19:57:21.700544070 -0400 -@@ -44,7 +44,9 @@ - #include "gdm-entry-menu-item.h" - - #define LOCKDOWN_DIR "/desktop/gnome/lockdown" --#define LOCKDOWN_KEY LOCKDOWN_DIR "/disable_user_switching" -+#define LOCKDOWN_USER_SWITCHING_KEY LOCKDOWN_DIR "/disable_user_switching" -+#define LOCKDOWN_LOCK_SCREEN_KEY LOCKDOWN_DIR "/disable_lock_screen" -+#define LOCKDOWN_COMMAND_LINE_KEY LOCKDOWN_DIR "/disable_command_line" - - typedef enum { - GSM_PRESENCE_STATUS_AVAILABLE = 0, -@@ -1163,7 +1165,11 @@ create_sub_menu (GdmAppletData *adata) - G_CALLBACK (menuitem_style_set_cb), adata); - g_signal_connect (adata->lock_screen_item, "activate", - G_CALLBACK (on_lock_screen_activate), adata); -- gtk_widget_show (adata->lock_screen_item); -+ if (gconf_client_get_bool (adata->client, LOCKDOWN_LOCK_SCREEN_KEY, NULL)) { -+ gtk_widget_hide (adata->lock_screen_item); -+ } else { -+ gtk_widget_show (adata->lock_screen_item); -+ } - - adata->login_screen_item = gtk_image_menu_item_new_with_label (_("Switch User")); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (adata->login_screen_item), -@@ -1174,7 +1180,7 @@ create_sub_menu (GdmAppletData *adata) - G_CALLBACK (menuitem_style_set_cb), adata); - g_signal_connect (adata->login_screen_item, "activate", - G_CALLBACK (on_login_screen_activate), adata); -- /* Only show switch user if there are other users */ -+ update_switch_user (adata); - - adata->quit_session_item = gtk_image_menu_item_new_with_label (_("Quit...")); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (adata->quit_session_item), -@@ -1229,11 +1235,17 @@ client_notify_lockdown_func (GConfClient - return; - } - -- if (strcmp (key, LOCKDOWN_KEY) == 0) { -+ if (strcmp (key, LOCKDOWN_USER_SWITCHING_KEY) == 0) { - if (gconf_value_get_bool (value)) { -- set_menu_visibility (adata, FALSE); -+ gtk_widget_hide (adata->login_screen_item); - } else { -- set_menu_visibility (adata, TRUE); -+ gtk_widget_show (adata->login_screen_item); -+ } -+ } else if (strcmp (key, LOCKDOWN_LOCK_SCREEN_KEY) == 0) { -+ if (gconf_value_get_bool (value)) { -+ gtk_widget_hide (adata->lock_screen_item); -+ } else { -+ gtk_widget_show (adata->lock_screen_item); - } - } - } -@@ -1430,7 +1442,7 @@ fill_applet (PanelApplet *applet) - - /* Hide the admin context menu items if locked down or no cmd-line */ - if (gconf_client_get_bool (adata->client, -- "/desktop/gnome/lockdown/inhibit_command_line", -+ LOCKDOWN_COMMAND_LINE_KEY, - NULL) || - panel_applet_get_locked_down (applet)) { - bonobo_ui_component_set_prop (popup_component, -@@ -1502,14 +1514,19 @@ fill_applet (PanelApplet *applet) - adata->manager = gdm_user_manager_ref_default (); - setup_current_user (adata); - -+ gconf_client_add_dir (adata->client, -+ LOCKDOWN_DIR, -+ GCONF_CLIENT_PRELOAD_ONELEVEL, -+ NULL); -+ - adata->client_notify_lockdown_id = gconf_client_notify_add (adata->client, -- LOCKDOWN_KEY, -+ LOCKDOWN_DIR, - (GConfClientNotifyFunc)client_notify_lockdown_func, - adata, - NULL, - NULL); - -- if (gconf_client_get_bool (adata->client, LOCKDOWN_KEY, NULL)) { -+ if (gconf_client_get_bool (adata->client, LOCKDOWN_USER_SWITCHING_KEY, NULL)) { - set_menu_visibility (adata, FALSE); - } else { - set_menu_visibility (adata, TRUE); diff --git a/fix-clock.patch b/fix-clock.patch deleted file mode 100644 index 62d0661..0000000 --- a/fix-clock.patch +++ /dev/null @@ -1,168 +0,0 @@ -From 87248d5c3e0a90c3b0748c7be05a9e6eac231737 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Wed, 21 Oct 2009 10:57:59 -0400 -Subject: [PATCH] Move date to tooltip in panel clock - -It's a bit long at the moment. Dropping the -date makes the screen look a little cleaner, and putting -the date in the tooltip makes it still available for those -people who want to see it. ---- - gui/simple-greeter/gdm-clock-widget.c | 97 +++++++++++++++++++++++---------- - 1 files changed, 67 insertions(+), 30 deletions(-) - -diff --git a/gui/simple-greeter/gdm-clock-widget.c b/gui/simple-greeter/gdm-clock-widget.c -index a3816d2..9008e6d 100644 ---- a/gui/simple-greeter/gdm-clock-widget.c -+++ b/gui/simple-greeter/gdm-clock-widget.c -@@ -44,8 +44,10 @@ struct GdmClockWidgetPrivate - { - GtkWidget *label; - char *time_format; -+ char *tooltip_format; - guint update_clock_id; - guint should_show_seconds : 1; -+ guint should_show_date : 1; - }; - - static void gdm_clock_widget_class_init (GdmClockWidgetClass *klass); -@@ -55,38 +57,59 @@ static gboolean update_timeout_cb (GdmClockWidget *clock); - - G_DEFINE_TYPE (GdmClockWidget, gdm_clock_widget, GTK_TYPE_ALIGNMENT) - --static char * --get_time_format (GdmClockWidget *clock) -+static void -+update_time_format (GdmClockWidget *clock) - { -- const char *time_format; -- const char *date_format; - char *clock_format; -- char *result; -- -- time_format = clock->priv->should_show_seconds ? _("%l:%M:%S %p") : _("%l:%M %p"); -- /* translators: replace %e with %d if, when the day of the -- * month as a decimal number is a single digit, it -- * should begin with a 0 in your locale (e.g. "May -- * 01" instead of "May 1"). -- */ -- date_format = _("%a %b %e"); -- /* translators: reverse the order of these arguments -- * if the time should come before the -- * date on a clock in your locale. -- */ -- clock_format = g_strdup_printf (_("%1$s, %2$s"), -- date_format, -- time_format); -- -- result = g_locale_from_utf8 (clock_format, -1, NULL, NULL, NULL); -- g_free (clock_format); -- -- return result; -+ char *tooltip_format; -+ -+ if (clock->priv->should_show_date && clock->priv->should_show_seconds) { -+ /* translators: This is the time format to use when both -+ * the date and time with seconds are being shown together. -+ */ -+ clock_format = _("%a %b %e, %l:%M:%S %p"); -+ tooltip_format = NULL; -+ } else if (clock->priv->should_show_date && !clock->priv->should_show_seconds) { -+ /* translators: This is the time format to use when both -+ * the date and time without seconds are being shown together. -+ */ -+ clock_format = _("%a %b %e, %l:%M %p"); -+ -+ tooltip_format = NULL; -+ } else if (!clock->priv->should_show_date && clock->priv->should_show_seconds) { -+ /* translators: This is the time format to use when there is -+ * no date, just weekday and time with seconds. -+ */ -+ clock_format = _("%a %l:%M:%S %p"); -+ -+ /* translators: This is the time format to use for the date -+ */ -+ tooltip_format = _("%x"); -+ } else { -+ /* translators: This is the time format to use when there is -+ * no date, just weekday and time without seconds. -+ */ -+ clock_format = _("%a %l:%M %p"); -+ -+ tooltip_format = _("%x"); -+ } -+ -+ g_free (clock->priv->time_format); -+ clock->priv->time_format = g_locale_from_utf8 (clock_format, -1, NULL, NULL, NULL); -+ -+ g_free (clock->priv->tooltip_format); -+ -+ if (tooltip_format != NULL) { -+ clock->priv->tooltip_format = g_locale_from_utf8 (tooltip_format, -1, NULL, NULL, NULL); -+ } else { -+ clock->priv->tooltip_format = NULL; -+ } - } - - static void - update_clock (GtkLabel *label, -- const char *format) -+ const char *clock_format, -+ const char *tooltip_format) - { - time_t t; - struct tm *tm; -@@ -99,13 +122,25 @@ update_clock (GtkLabel *label, - g_warning ("Unable to get broken down local time"); - return; - } -- if (strftime (buf, sizeof (buf), format, tm) == 0) { -- g_warning ("Couldn't format time: %s", format); -+ if (strftime (buf, sizeof (buf), clock_format, tm) == 0) { -+ g_warning ("Couldn't format time: %s", clock_format); - strcpy (buf, "???"); - } - utf8 = g_locale_to_utf8 (buf, -1, NULL, NULL, NULL); - gtk_label_set_text (label, utf8); - g_free (utf8); -+ -+ if (tooltip_format != NULL) { -+ if (strftime (buf, sizeof (buf), tooltip_format, tm) == 0) { -+ g_warning ("Couldn't format tooltip date: %s", tooltip_format); -+ strcpy (buf, "???"); -+ } -+ utf8 = g_locale_to_utf8 (buf, -1, NULL, NULL, NULL); -+ gtk_widget_set_tooltip_text (GTK_WIDGET (label), utf8); -+ g_free (utf8); -+ } else { -+ gtk_widget_set_has_tooltip (GTK_WIDGET (label), FALSE); -+ } - } - - static void -@@ -142,7 +177,8 @@ update_timeout_cb (GdmClockWidget *clock) - - if (clock->priv->label != NULL) { - update_clock (GTK_LABEL (clock->priv->label), -- clock->priv->time_format); -+ clock->priv->time_format, -+ clock->priv->tooltip_format); - } - - set_clock_timeout (clock, new_time); -@@ -214,10 +250,11 @@ gdm_clock_widget_init (GdmClockWidget *widget) - gtk_container_add (GTK_CONTAINER (widget), box); - - widget->priv->label = gtk_label_new (""); -+ - gtk_widget_show (widget->priv->label); - gtk_box_pack_start (GTK_BOX (box), widget->priv->label, FALSE, FALSE, 0); - -- widget->priv->time_format = get_time_format (widget); -+ update_time_format (widget); - update_timeout_cb (widget); - } - --- -1.6.5.rc2 - diff --git a/fix-computer-info.patch b/fix-computer-info.patch deleted file mode 100644 index e497980..0000000 --- a/fix-computer-info.patch +++ /dev/null @@ -1,104 +0,0 @@ -From 18bf08d14ed77db00a17e74c5ce04c812ef251af Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Mon, 26 Oct 2009 10:45:49 -0400 -Subject: [PATCH 1/2] Use gethostname instead of g_get_host_name in greeter - -The latter is unreliable when the hostname changes at runtime. ---- - gui/simple-greeter/gdm-greeter-login-window.c | 6 +++++- - 1 files changed, 5 insertions(+), 1 deletions(-) - -diff --git a/gui/simple-greeter/gdm-greeter-login-window.c b/gui/simple-greeter/gdm-greeter-login-window.c -index 9a29a2e..9d75b8c 100644 ---- a/gui/simple-greeter/gdm-greeter-login-window.c -+++ b/gui/simple-greeter/gdm-greeter-login-window.c -@@ -996,7 +996,11 @@ create_computer_info (GdmGreeterLoginWindow *login_window) - - label = glade_xml_get_widget (login_window->priv->xml, "computer-info-name-label"); - if (label != NULL) { -- gtk_label_set_text (GTK_LABEL (label), g_get_host_name ()); -+ char localhost[HOST_NAME_MAX + 1] = "";• -+ -+ if (gethostname (localhost, HOST_NAME_MAX) == 0) {• -+ gtk_label_set_text (GTK_LABEL (label), localhost); -+ } - } - - label = glade_xml_get_widget (login_window->priv->xml, "computer-info-version-label"); --- -1.6.5.1 - - -From 03e01936f5c11580a1485c492355eb0a468ea0f6 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Mon, 26 Oct 2009 10:53:25 -0400 -Subject: [PATCH 2/2] Don't bother showing hostname if it's not unique - -The advantage of showing hostname by default is it is a -unique identifier for people who have multiple machines. - -If it only says "localhost" or "localhost.localdomain" -that advantage is mitigated, and it's probably better to -show OS release. ---- - gui/simple-greeter/gdm-greeter-login-window.c | 27 +++++++++++++++++++----- - 1 files changed, 21 insertions(+), 6 deletions(-) - -diff --git a/gui/simple-greeter/gdm-greeter-login-window.c b/gui/simple-greeter/gdm-greeter-login-window.c -index 9d75b8c..8de74df 100644 ---- a/gui/simple-greeter/gdm-greeter-login-window.c -+++ b/gui/simple-greeter/gdm-greeter-login-window.c -@@ -887,10 +887,8 @@ on_user_unchosen (GdmUserChooserWidget *user_chooser, - do_cancel (login_window); - } - --static gboolean --on_computer_info_label_button_press (GtkWidget *widget, -- GdkEventButton *event, -- GdmGreeterLoginWindow *login_window) -+static void -+rotate_computer_info (GdmGreeterLoginWindow *login_window) - { - GtkWidget *notebook; - int current_page; -@@ -907,6 +905,14 @@ on_computer_info_label_button_press (GtkWidget *widget, - gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0); - } - -+} -+ -+static gboolean -+on_computer_info_label_button_press (GtkWidget *widget, -+ GdkEventButton *event, -+ GdmGreeterLoginWindow *login_window) -+{ -+ rotate_computer_info (login_window); - return FALSE; - } - -@@ -996,11 +1002,20 @@ create_computer_info (GdmGreeterLoginWindow *login_window) - - label = glade_xml_get_widget (login_window->priv->xml, "computer-info-name-label"); - if (label != NULL) { -- char localhost[HOST_NAME_MAX + 1] = "";• -+ char localhost[HOST_NAME_MAX + 1] = ""; - -- if (gethostname (localhost, HOST_NAME_MAX) == 0) {• -+ if (gethostname (localhost, HOST_NAME_MAX) == 0) { - gtk_label_set_text (GTK_LABEL (label), localhost); - } -+ -+ /* If this isn't actually unique identifier for the computer, then -+ * don't bother showing it by default. -+ */ -+ if (strcmp (localhost, "localhost") == 0 || -+ strcmp (localhost, "localhost.localdomain") == 0) { -+ -+ rotate_computer_info (login_window); -+ } - } - - label = glade_xml_get_widget (login_window->priv->xml, "computer-info-version-label"); --- -1.6.5.1 - diff --git a/fix-na-tray.patch b/fix-na-tray.patch deleted file mode 100644 index 059afbb..0000000 --- a/fix-na-tray.patch +++ /dev/null @@ -1,1586 +0,0 @@ -From f304eec1bf7dd80e255092b3cdaade10827fd320 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Thu, 22 Oct 2009 22:02:51 -0400 -Subject: [PATCH 1/4] Update na-tray to latest upstream code - -It's a copy and paste from the panel. ---- - gui/simple-greeter/libnotificationarea/Makefile.am | 2 + - gui/simple-greeter/libnotificationarea/fixedtip.c | 1 + - .../libnotificationarea/na-tray-child.c | 430 ++++++++++++++++++++ - .../libnotificationarea/na-tray-child.h | 68 +++ - .../libnotificationarea/na-tray-manager.c | 264 +++++-------- - .../libnotificationarea/na-tray-manager.h | 15 +- - gui/simple-greeter/libnotificationarea/na-tray.c | 76 +++- - gui/simple-greeter/libnotificationarea/na-tray.h | 3 +- - gui/simple-greeter/libnotificationarea/testtray.c | 2 +- - 9 files changed, 674 insertions(+), 187 deletions(-) - create mode 100644 gui/simple-greeter/libnotificationarea/na-tray-child.c - create mode 100644 gui/simple-greeter/libnotificationarea/na-tray-child.h - -diff --git a/gui/simple-greeter/libnotificationarea/Makefile.am b/gui/simple-greeter/libnotificationarea/Makefile.am -index e3a6a1f..4009aaf 100644 ---- a/gui/simple-greeter/libnotificationarea/Makefile.am -+++ b/gui/simple-greeter/libnotificationarea/Makefile.am -@@ -29,6 +29,8 @@ libnotificationarea_la_SOURCES = \ - obox.h \ - na-tray.c \ - na-tray.h \ -+ na-tray-child.c \ -+ na-tray-child.h \ - na-tray-manager.c \ - na-tray-manager.h \ - na-marshal.c \ -diff --git a/gui/simple-greeter/libnotificationarea/fixedtip.c b/gui/simple-greeter/libnotificationarea/fixedtip.c -index cc90e26..53ac923 100644 ---- a/gui/simple-greeter/libnotificationarea/fixedtip.c -+++ b/gui/simple-greeter/libnotificationarea/fixedtip.c -@@ -81,6 +81,7 @@ na_fixed_tip_class_init (NaFixedTipClass *class) - g_type_class_add_private (class, sizeof (NaFixedTipPrivate)); - } - -+/* Did you already see this code? Yes, it's gtk_tooltips_ force_window() ;-) */ - static void - na_fixed_tip_init (NaFixedTip *fixedtip) - { -diff --git a/gui/simple-greeter/libnotificationarea/na-tray-child.c b/gui/simple-greeter/libnotificationarea/na-tray-child.c -new file mode 100644 -index 0000000..c7e3f61 ---- /dev/null -+++ b/gui/simple-greeter/libnotificationarea/na-tray-child.c -@@ -0,0 +1,430 @@ -+/* na-tray-child.c -+ * Copyright (C) 2002 Anders Carlsson -+ * Copyright (C) 2003-2006 Vincent Untz -+ * Copyright (C) 2008 Red Hat, Inc. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, -+ * Boston, MA 02111-1307, USA. -+ */ -+ -+#include -+#include -+ -+#include "na-tray-child.h" -+ -+#include -+#include -+#include -+#include -+ -+G_DEFINE_TYPE (NaTrayChild, na_tray_child, GTK_TYPE_SOCKET) -+ -+static void -+na_tray_child_finalize (GObject *object) -+{ -+ G_OBJECT_CLASS (na_tray_child_parent_class)->finalize (object); -+} -+ -+static void -+na_tray_child_realize (GtkWidget *widget) -+{ -+ NaTrayChild *child = NA_TRAY_CHILD (widget); -+ GdkVisual *visual = gtk_widget_get_visual (widget); -+ -+ GTK_WIDGET_CLASS (na_tray_child_parent_class)->realize (widget); -+ -+ if (child->has_alpha) -+ { -+ /* We have real transparency with an ARGB visual and the Composite -+ * extension. */ -+ -+ /* Set a transparent background */ -+ GdkColor transparent = { 0, 0, 0, 0 }; /* only pixel=0 matters */ -+ gdk_window_set_background (widget->window, &transparent); -+ gdk_window_set_composited (widget->window, TRUE); -+ -+ child->parent_relative_bg = FALSE; -+ } -+ else if (visual == gdk_drawable_get_visual (GDK_DRAWABLE (gdk_window_get_parent (widget->window)))) -+ { -+ /* Otherwise, if the visual matches the visual of the parent window, we -+ * can use a parent-relative background and fake transparency. */ -+ gdk_window_set_back_pixmap (widget->window, NULL, TRUE); -+ -+ child->parent_relative_bg = TRUE; -+ } -+ else -+ { -+ /* Nothing to do; the icon will sit on top of an ugly gray box */ -+ child->parent_relative_bg = FALSE; -+ } -+ -+ gdk_window_set_composited (widget->window, child->composited); -+ -+ gtk_widget_set_app_paintable (GTK_WIDGET (child), -+ child->parent_relative_bg || child->has_alpha); -+ -+ /* Double-buffering will interfere with the parent-relative-background fake -+ * transparency, since the double-buffer code doesn't know how to fill in the -+ * background of the double-buffer correctly. -+ */ -+ gtk_widget_set_double_buffered (GTK_WIDGET (child), -+ child->parent_relative_bg); -+} -+ -+static void -+na_tray_child_style_set (GtkWidget *widget, -+ GtkStyle *previous_style) -+{ -+ /* The default handler resets the background according to the new style. -+ * We either use a transparent background or a parent-relative background -+ * and ignore the style background. So, just don't chain up. -+ */ -+} -+ -+#if 0 -+/* This is adapted from code that was commented out in na-tray-manager.c; the -+ * code in na-tray-manager.c wouldn't have worked reliably, this will. So maybe -+ * it can be reenabled. On other hand, things seem to be working fine without -+ * it. -+ * -+ * If reenabling, you need to hook it up in na_tray_child_class_init(). -+ */ -+static void -+na_tray_child_size_request (GtkWidget *widget, -+ GtkRequisition *request) -+{ -+ GTK_WIDGET_CLASS (na_tray_child_parent_class)->size_request (widget, request); -+ -+ /* -+ * Make sure the icons have a meaningful size .. -+ */ -+ if ((request->width < 16) || (request->height < 16)) -+ { -+ gint nw = MAX (24, request->width); -+ gint nh = MAX (24, request->height); -+ g_warning ("Tray icon has requested a size of (%ix%i), resizing to (%ix%i)", -+ req.width, req.height, nw, nh); -+ request->width = nw; -+ request->height = nh; -+ } -+} -+#endif -+ -+static void -+na_tray_child_size_allocate (GtkWidget *widget, -+ GtkAllocation *allocation) -+{ -+ NaTrayChild *child = NA_TRAY_CHILD (widget); -+ -+ gboolean moved = allocation->x != widget->allocation.x || -+ allocation->y != widget->allocation.y; -+ gboolean resized = allocation->width != widget->allocation.width || -+ allocation->height != widget->allocation.height; -+ -+ /* When we are allocating the widget while mapped we need special handling -+ * for both real and fake transparency. -+ * -+ * Real transparency: we need to invalidate and trigger a redraw of the old -+ * and new areas. (GDK really should handle this for us, but doesn't as of -+ * GTK+-2.14) -+ * -+ * Fake transparency: if the widget moved, we need to force the contents to -+ * be redrawn with the new offset for the parent-relative background. -+ */ -+ if ((moved || resized) && GTK_WIDGET_MAPPED (widget)) -+ { -+ if (na_tray_child_has_alpha (child)) -+ gdk_window_invalidate_rect (gdk_window_get_parent (widget->window), -+ &widget->allocation, FALSE); -+ } -+ -+ GTK_WIDGET_CLASS (na_tray_child_parent_class)->size_allocate (widget, -+ allocation); -+ -+ if ((moved || resized) && GTK_WIDGET_MAPPED (widget)) -+ { -+ if (na_tray_child_has_alpha (NA_TRAY_CHILD (widget))) -+ gdk_window_invalidate_rect (gdk_window_get_parent (widget->window), -+ &widget->allocation, FALSE); -+ else if (moved && child->parent_relative_bg) -+ na_tray_child_force_redraw (child); -+ } -+} -+ -+/* The plug window should completely occupy the area of the child, so we won't -+ * get an expose event. But in case we do (the plug unmaps itself, say), this -+ * expose handler draws with real or fake transparency. -+ */ -+static gboolean -+na_tray_child_expose_event (GtkWidget *widget, -+ GdkEventExpose *event) -+{ -+ NaTrayChild *child = NA_TRAY_CHILD (widget); -+ -+ if (na_tray_child_has_alpha (child)) -+ { -+ /* Clear to transparent */ -+ cairo_t *cr = gdk_cairo_create (widget->window); -+ cairo_set_source_rgba (cr, 0, 0, 0, 0); -+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); -+ gdk_cairo_region (cr, event->region); -+ cairo_fill (cr); -+ cairo_destroy (cr); -+ } -+ else if (child->parent_relative_bg) -+ { -+ /* Clear to parent-relative pixmap */ -+ gdk_window_clear_area (widget->window, -+ event->area.x, event->area.y, -+ event->area.width, event->area.height); -+ } -+ -+ return FALSE; -+} -+ -+static void -+na_tray_child_init (NaTrayChild *child) -+{ -+} -+ -+static void -+na_tray_child_class_init (NaTrayChildClass *klass) -+{ -+ GObjectClass *gobject_class; -+ GtkWidgetClass *widget_class; -+ -+ gobject_class = (GObjectClass *)klass; -+ widget_class = (GtkWidgetClass *)klass; -+ -+ gobject_class->finalize = na_tray_child_finalize; -+ widget_class->style_set = na_tray_child_style_set; -+ widget_class->realize = na_tray_child_realize; -+ widget_class->size_allocate = na_tray_child_size_allocate; -+ widget_class->expose_event = na_tray_child_expose_event; -+} -+ -+GtkWidget * -+na_tray_child_new (GdkScreen *screen, -+ Window icon_window) -+{ -+ XWindowAttributes window_attributes; -+ Display *xdisplay; -+ NaTrayChild *child; -+ GdkVisual *visual; -+ gboolean visual_has_alpha; -+ GdkColormap *colormap; -+ gboolean new_colormap; -+ int result; -+ -+ g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); -+ g_return_val_if_fail (icon_window != None, NULL); -+ -+ xdisplay = GDK_SCREEN_XDISPLAY (screen); -+ -+ /* We need to determine the visual of the window we are embedding and create -+ * the socket in the same visual. -+ */ -+ -+ gdk_error_trap_push (); -+ result = XGetWindowAttributes (xdisplay, icon_window, -+ &window_attributes); -+ gdk_error_trap_pop (); -+ -+ if (!result) /* Window already gone */ -+ return NULL; -+ -+ visual = gdk_x11_screen_lookup_visual (screen, -+ window_attributes.visual->visualid); -+ if (!visual) /* Icon window is on another screen? */ -+ return NULL; -+ -+ new_colormap = FALSE; -+ -+ if (visual == gdk_screen_get_rgb_visual (screen)) -+ colormap = gdk_screen_get_rgb_colormap (screen); -+ else if (visual == gdk_screen_get_rgba_visual (screen)) -+ colormap = gdk_screen_get_rgba_colormap (screen); -+ else if (visual == gdk_screen_get_system_visual (screen)) -+ colormap = gdk_screen_get_system_colormap (screen); -+ else -+ { -+ colormap = gdk_colormap_new (visual, FALSE); -+ new_colormap = TRUE; -+ } -+ -+ child = g_object_new (NA_TYPE_TRAY_CHILD, NULL); -+ child->icon_window = icon_window; -+ -+ gtk_widget_set_colormap (GTK_WIDGET (child), colormap); -+ -+ /* We have alpha if the visual has something other than red, green, -+ * and blue */ -+ visual_has_alpha = visual->red_prec + visual->blue_prec + visual->green_prec < visual->depth; -+ child->has_alpha = (visual_has_alpha && -+ gdk_display_supports_composite (gdk_screen_get_display (screen))); -+ -+ child->composited = child->has_alpha; -+ -+ if (new_colormap) -+ g_object_unref (colormap); -+ -+ return GTK_WIDGET (child); -+} -+ -+char * -+na_tray_child_get_title (NaTrayChild *child) -+{ -+ char *retval = NULL; -+ GdkDisplay *display; -+ Atom utf8_string, atom, type; -+ int result; -+ int format; -+ gulong nitems; -+ gulong bytes_after; -+ gchar *val; -+ -+ g_return_val_if_fail (NA_IS_TRAY_CHILD (child), NULL); -+ -+ display = gtk_widget_get_display (GTK_WIDGET (child)); -+ -+ utf8_string = gdk_x11_get_xatom_by_name_for_display (display, "UTF8_STRING"); -+ atom = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_NAME"); -+ -+ gdk_error_trap_push (); -+ -+ result = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), -+ child->icon_window, -+ atom, -+ 0, G_MAXLONG, -+ False, utf8_string, -+ &type, &format, &nitems, -+ &bytes_after, (guchar **)&val); -+ -+ if (gdk_error_trap_pop () || result != Success) -+ return NULL; -+ -+ if (type != utf8_string || -+ format != 8 || -+ nitems == 0) -+ { -+ if (val) -+ XFree (val); -+ return NULL; -+ } -+ -+ if (!g_utf8_validate (val, nitems, NULL)) -+ { -+ XFree (val); -+ return NULL; -+ } -+ -+ retval = g_strndup (val, nitems); -+ -+ XFree (val); -+ -+ return retval; -+} -+ -+/** -+ * na_tray_child_has_alpha; -+ * @child: a #NaTrayChild -+ * -+ * Checks if the child has an ARGB visual and real alpha transparence. -+ * (as opposed to faked alpha transparency with an parent-relative -+ * background) -+ * -+ * Return value: %TRUE if the child has an alpha transparency -+ */ -+gboolean -+na_tray_child_has_alpha (NaTrayChild *child) -+{ -+ g_return_val_if_fail (NA_IS_TRAY_CHILD (child), FALSE); -+ -+ return child->has_alpha; -+} -+ -+/** -+ * na_tray_child_set_composited; -+ * @child: a #NaTrayChild -+ * @composited: %TRUE if the child's window should be redirected -+ * -+ * Sets whether the #GdkWindow of the child should be set redirected -+ * using gdk_window_set_composited(). By default this is based off of -+ * na_tray_child_has_alpha(), but it may be useful to override it in -+ * certain circumstances; for example, if the #NaTrayChild is added -+ * to a parent window and that parent window is composited against the -+ * background. -+ */ -+void -+na_tray_child_set_composited (NaTrayChild *child, -+ gboolean composited) -+{ -+ g_return_if_fail (NA_IS_TRAY_CHILD (child)); -+ -+ if (child->composited == composited) -+ return; -+ -+ child->composited = composited; -+ if (GTK_WIDGET_REALIZED (child)) -+ gdk_window_set_composited (GTK_WIDGET (child)->window, composited); -+} -+ -+/* If we are faking transparency with a window-relative background, force a -+ * redraw of the icon. This should be called if the background changes or if -+ * the child is shifted with respect to the background. -+ */ -+void -+na_tray_child_force_redraw (NaTrayChild *child) -+{ -+ GtkWidget *widget = GTK_WIDGET (child); -+ -+ if (GTK_WIDGET_MAPPED (child) && child->parent_relative_bg) -+ { -+#if 1 -+ /* Sending an ExposeEvent might cause redraw problems if the -+ * icon is expecting the server to clear-to-background before -+ * the redraw. It should be ok for GtkStatusIcon or EggTrayIcon. -+ */ -+ Display *xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (widget)); -+ XEvent xev; -+ -+ xev.xexpose.type = Expose; -+ xev.xexpose.window = GDK_WINDOW_XWINDOW (GTK_SOCKET (child)->plug_window); -+ xev.xexpose.x = 0; -+ xev.xexpose.y = 0; -+ xev.xexpose.width = widget->allocation.width; -+ xev.xexpose.height = widget->allocation.height; -+ xev.xexpose.count = 0; -+ -+ gdk_error_trap_push (); -+ XSendEvent (GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (widget)), -+ xev.xexpose.window, -+ False, ExposureMask, -+ &xev); -+ /* We have to sync to reliably catch errors from the XSendEvent(), -+ * since that is asynchronous. -+ */ -+ XSync (xdisplay, False); -+ gdk_error_trap_pop (); -+#else -+ /* Hiding and showing is the safe way to do it, but can result in more -+ * flickering. -+ */ -+ gdk_window_hide (widget->window); -+ gdk_window_show (widget->window); -+#endif -+ } -+} -diff --git a/gui/simple-greeter/libnotificationarea/na-tray-child.h b/gui/simple-greeter/libnotificationarea/na-tray-child.h -new file mode 100644 -index 0000000..c174abe ---- /dev/null -+++ b/gui/simple-greeter/libnotificationarea/na-tray-child.h -@@ -0,0 +1,68 @@ -+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -+/* na-tray-child.h -+ * Copyright (C) 2002 Anders Carlsson -+ * Copyright (C) 2003-2006 Vincent Untz -+ * Copyright (C) 2008 Red Hat, Inc. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, -+ * Boston, MA 02111-1307, USA. -+ */ -+ -+#ifndef __NA_TRAY_CHILD_H__ -+#define __NA_TRAY_CHILD_H__ -+ -+#include -+#include -+ -+G_BEGIN_DECLS -+ -+#define NA_TYPE_TRAY_CHILD (na_tray_child_get_type ()) -+#define NA_TRAY_CHILD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NA_TYPE_TRAY_CHILD, NaTrayChild)) -+#define NA_TRAY_CHILD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NA_TYPE_TRAY_CHILD, NaTrayChildClass)) -+#define NA_IS_TRAY_CHILD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NA_TYPE_TRAY_CHILD)) -+#define NA_IS_TRAY_CHILD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NA_TYPE_TRAY_CHILD)) -+#define NA_TRAY_CHILD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NA_TYPE_TRAY_CHILD, NaTrayChildClass)) -+ -+typedef struct _NaTrayChild NaTrayChild; -+typedef struct _NaTrayChildClass NaTrayChildClass; -+typedef struct _NaTrayChildChild NaTrayChildChild; -+ -+struct _NaTrayChild -+{ -+ GtkSocket parent_instance; -+ Window icon_window; -+ guint has_alpha : 1; -+ guint composited : 1; -+ guint parent_relative_bg : 1; -+}; -+ -+struct _NaTrayChildClass -+{ -+ GtkSocketClass parent_class; -+}; -+ -+GType na_tray_child_get_type (void); -+ -+GtkWidget *na_tray_child_new (GdkScreen *screen, -+ Window icon_window); -+char *na_tray_child_get_title (NaTrayChild *child); -+gboolean na_tray_child_has_alpha (NaTrayChild *child); -+void na_tray_child_set_composited (NaTrayChild *child, -+ gboolean composited); -+void na_tray_child_force_redraw (NaTrayChild *child); -+ -+G_END_DECLS -+ -+#endif /* __NA_TRAY_CHILD_H__ */ -diff --git a/gui/simple-greeter/libnotificationarea/na-tray-manager.c b/gui/simple-greeter/libnotificationarea/na-tray-manager.c -index 4842a91..1bf54f1 100644 ---- a/gui/simple-greeter/libnotificationarea/na-tray-manager.c -+++ b/gui/simple-greeter/libnotificationarea/na-tray-manager.c -@@ -252,120 +252,61 @@ static gboolean - na_tray_manager_plug_removed (GtkSocket *socket, - NaTrayManager *manager) - { -- Window *window; -+ NaTrayChild *child = NA_TRAY_CHILD (socket); - -- window = g_object_get_data (G_OBJECT (socket), "na-tray-child-window"); -- -- g_hash_table_remove (manager->socket_table, GINT_TO_POINTER (*window)); -- g_object_set_data (G_OBJECT (socket), "na-tray-child-window", -- NULL); -- -- g_signal_emit (manager, manager_signals[TRAY_ICON_REMOVED], 0, socket); -+ g_hash_table_remove (manager->socket_table, -+ GINT_TO_POINTER (child->icon_window)); -+ g_signal_emit (manager, manager_signals[TRAY_ICON_REMOVED], 0, child); - - /* This destroys the socket. */ - return FALSE; - } - - static void --na_tray_manager_make_socket_transparent (GtkWidget *widget, -- gpointer user_data) -+na_tray_manager_handle_dock_request (NaTrayManager *manager, -+ XClientMessageEvent *xevent) - { -- if (GTK_WIDGET_NO_WINDOW (widget)) -- return; -+ Window icon_window = xevent->data.l[2]; -+ GtkWidget *child; - -- gdk_window_set_back_pixmap (widget->window, NULL, TRUE); --} -- --static gboolean --na_tray_manager_socket_exposed (GtkWidget *widget, -- GdkEventExpose *event, -- gpointer user_data) --{ -- gdk_window_clear_area (widget->window, -- event->area.x, event->area.y, -- event->area.width, event->area.height); -- return FALSE; --} -+ if (g_hash_table_lookup (manager->socket_table, -+ GINT_TO_POINTER (icon_window))) -+ { -+ /* We already got this notification earlier, ignore this one */ -+ return; -+ } - --static void --na_tray_manager_socket_style_set (GtkWidget *widget, -- GtkStyle *previous_style, -- gpointer user_data) --{ -- if (widget->window == NULL) -+ child = na_tray_child_new (manager->screen, icon_window); -+ if (child == NULL) /* already gone or other error */ - return; - -- na_tray_manager_make_socket_transparent (widget, user_data); --} -+ g_signal_emit (manager, manager_signals[TRAY_ICON_ADDED], 0, -+ child); - --static void --na_tray_manager_handle_dock_request (NaTrayManager *manager, -- XClientMessageEvent *xevent) --{ -- GtkWidget *socket; -- Window *window; -- GtkRequisition req; -+ /* If the child wasn't attached, then destroy it */ - -- if (g_hash_table_lookup (manager->socket_table, GINT_TO_POINTER (xevent->data.l[2]))) -+ if (!GTK_IS_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (child)))) - { -- /* We already got this notification earlier, ignore this one */ -+ gtk_widget_destroy (child); - return; - } -- -- socket = gtk_socket_new (); -- -- gtk_widget_set_app_paintable (socket, TRUE); -- //FIXME: need to find a theme where this (and expose event) is needed -- gtk_widget_set_double_buffered (socket, FALSE); -- g_signal_connect (socket, "realize", -- G_CALLBACK (na_tray_manager_make_socket_transparent), NULL); -- g_signal_connect (socket, "expose_event", -- G_CALLBACK (na_tray_manager_socket_exposed), NULL); -- g_signal_connect_after (socket, "style_set", -- G_CALLBACK (na_tray_manager_socket_style_set), NULL); -- -- /* We need to set the child window here -- * so that the client can call _get functions -- * in the signal handler -- */ -- window = g_new (Window, 1); -- *window = xevent->data.l[2]; -- -- g_object_set_data_full (G_OBJECT (socket), -- "na-tray-child-window", -- window, g_free); -- g_signal_emit (manager, manager_signals[TRAY_ICON_ADDED], 0, -- socket); - -- /* Add the socket only if it's been attached */ -- if (GTK_IS_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (socket)))) -+ g_signal_connect (child, "plug_removed", -+ G_CALLBACK (na_tray_manager_plug_removed), manager); -+ -+ gtk_socket_add_id (GTK_SOCKET (child), icon_window); -+ -+ if (!GTK_SOCKET (child)->plug_window) - { -- g_signal_connect (socket, "plug_removed", -- G_CALLBACK (na_tray_manager_plug_removed), manager); -- -- gtk_socket_add_id (GTK_SOCKET (socket), *window); -- -- g_hash_table_insert (manager->socket_table, GINT_TO_POINTER (*window), socket); -- -- /* -- * Make sure the icons have a meaningfull size ... -- */ -- req.width = req.height = 1; -- gtk_widget_size_request (socket, &req); -- /* -- if ((req.width < 16) || (req.height < 16)) -- { -- gint nw = MAX (24, req.width); -- gint nh = MAX (24, req.height); -- g_warning (_("tray icon has requested a size of (%i x %i), resizing to (%i x %i)"), -- req.width, req.height, nw, nh); -- gtk_widget_set_size_request(icon, nw, nh); -- } -- */ -- gtk_widget_show(socket); -+ /* Embedding failed, we won't get a plug-removed signal */ -+ g_signal_emit (manager, manager_signals[TRAY_ICON_REMOVED], 0, child); -+ gtk_widget_destroy (child); -+ return; - } -- else -- gtk_widget_destroy (socket); -+ -+ g_hash_table_insert (manager->socket_table, -+ GINT_TO_POINTER (icon_window), child); -+ gtk_widget_show (child); - } - - static void -@@ -445,13 +386,13 @@ na_tray_manager_handle_begin_message (NaTrayManager *manager, - /* Check if the same message is already in the queue and remove it if so */ - for (p = manager->messages; p; p = p->next) - { -- PendingMessage *message = p->data; -+ PendingMessage *pmsg = p->data; - -- if (xevent->window == message->window && -- xevent->data.l[4] == message->id) -+ if (xevent->window == pmsg->window && -+ xevent->data.l[4] == pmsg->id) - { - /* Hmm, we found it, now remove it */ -- pending_message_free (message); -+ pending_message_free (pmsg); - manager->messages = g_list_remove_link (manager->messages, p); - g_list_free_1 (p); - break; -@@ -660,6 +601,58 @@ na_tray_manager_set_orientation_property (NaTrayManager *manager) - #endif - } - -+static void -+na_tray_manager_set_visual_property (NaTrayManager *manager) -+{ -+#ifdef GDK_WINDOWING_X11 -+ GdkDisplay *display; -+ Visual *xvisual; -+ Atom visual_atom; -+ gulong data[1]; -+ -+ if (!manager->invisible || !manager->invisible->window) -+ return; -+ -+ /* The visual property is a hint to the tray icons as to what visual they -+ * should use for their windows. If the X server has RGBA colormaps, then -+ * we tell the tray icons to use a RGBA colormap and we'll composite the -+ * icon onto its parents with real transparency. Otherwise, we just tell -+ * the icon to use our colormap, and we'll do some hacks with parent -+ * relative backgrounds to simulate transparency. -+ */ -+ -+ display = gtk_widget_get_display (manager->invisible); -+ visual_atom = gdk_x11_get_xatom_by_name_for_display (display, -+ "_NET_SYSTEM_TRAY_VISUAL"); -+ -+ if (gdk_screen_get_rgba_visual (manager->screen) != NULL && -+ gdk_display_supports_composite (display)) -+ { -+ xvisual = GDK_VISUAL_XVISUAL (gdk_screen_get_rgba_visual (manager->screen)); -+ } -+ else -+ { -+ /* We actually want the visual of the tray where the icons will -+ * be embedded. In almost all cases, this will be the same as the visual -+ * of the screen. -+ */ -+ GdkColormap *colormap; -+ -+ colormap = gdk_screen_get_default_colormap (manager->screen); -+ xvisual = GDK_VISUAL_XVISUAL (gdk_colormap_get_visual (colormap)); -+ } -+ -+ data[0] = XVisualIDFromVisual (xvisual); -+ -+ XChangeProperty (GDK_DISPLAY_XDISPLAY (display), -+ GDK_WINDOW_XWINDOW (manager->invisible->window), -+ visual_atom, -+ XA_VISUALID, 32, -+ PropModeReplace, -+ (guchar *) &data, 1); -+#endif -+} -+ - #ifdef GDK_WINDOWING_X11 - - static gboolean -@@ -682,6 +675,9 @@ na_tray_manager_manage_screen_x11 (NaTrayManager *manager, - if (na_tray_manager_check_running_screen_x11 (screen)) - return FALSE; - #endif -+ -+ manager->screen = screen; -+ - display = gdk_screen_get_display (screen); - xscreen = GDK_SCREEN_XSCREEN (screen); - -@@ -696,7 +692,11 @@ na_tray_manager_manage_screen_x11 (NaTrayManager *manager, - manager->selection_atom = gdk_atom_intern (selection_atom_name, FALSE); - g_free (selection_atom_name); - -+ manager->invisible = invisible; -+ g_object_ref (G_OBJECT (manager->invisible)); -+ - na_tray_manager_set_orientation_property (manager); -+ na_tray_manager_set_visual_property (manager); - - timestamp = gdk_x11_get_server_time (invisible->window); - -@@ -728,9 +728,6 @@ na_tray_manager_manage_screen_x11 (NaTrayManager *manager, - RootWindowOfScreen (xscreen), - False, StructureNotifyMask, (XEvent *)&xev); - -- manager->invisible = invisible; -- g_object_ref (G_OBJECT (manager->invisible)); -- - opcode_atom = gdk_atom_intern ("_NET_SYSTEM_TRAY_OPCODE", FALSE); - manager->opcode_atom = gdk_x11_atom_to_xatom_for_display (display, - opcode_atom); -@@ -761,6 +758,10 @@ na_tray_manager_manage_screen_x11 (NaTrayManager *manager, - else - { - gtk_widget_destroy (invisible); -+ g_object_unref (invisible); -+ manager->invisible = NULL; -+ -+ manager->screen = NULL; - - return FALSE; - } -@@ -819,67 +820,6 @@ na_tray_manager_check_running (GdkScreen *screen) - #endif - } - --char * --na_tray_manager_get_child_title (NaTrayManager *manager, -- NaTrayManagerChild *child) --{ -- char *retval = NULL; --#ifdef GDK_WINDOWING_X11 -- GdkDisplay *display; -- Window *child_window; -- Atom utf8_string, atom, type; -- int result; -- int format; -- gulong nitems; -- gulong bytes_after; -- gchar *val; -- -- g_return_val_if_fail (NA_IS_TRAY_MANAGER (manager), NULL); -- g_return_val_if_fail (GTK_IS_SOCKET (child), NULL); -- -- display = gdk_screen_get_display (manager->screen); -- -- child_window = g_object_get_data (G_OBJECT (child), -- "na-tray-child-window"); -- -- utf8_string = gdk_x11_get_xatom_by_name_for_display (display, "UTF8_STRING"); -- atom = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_NAME"); -- -- gdk_error_trap_push (); -- -- result = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), -- *child_window, -- atom, -- 0, G_MAXLONG, -- False, utf8_string, -- &type, &format, &nitems, -- &bytes_after, (guchar **)&val); -- -- if (gdk_error_trap_pop () || result != Success) -- return NULL; -- -- if (type != utf8_string || -- format != 8 || -- nitems == 0) -- { -- if (val) -- XFree (val); -- return NULL; -- } -- -- if (!g_utf8_validate (val, nitems, NULL)) -- { -- XFree (val); -- return NULL; -- } -- -- retval = g_strndup (val, nitems); -- -- XFree (val); --#endif -- return retval; --} -- - void - na_tray_manager_set_orientation (NaTrayManager *manager, - GtkOrientation orientation) -diff --git a/gui/simple-greeter/libnotificationarea/na-tray-manager.h b/gui/simple-greeter/libnotificationarea/na-tray-manager.h -index a1781a7..f325453 100644 ---- a/gui/simple-greeter/libnotificationarea/na-tray-manager.h -+++ b/gui/simple-greeter/libnotificationarea/na-tray-manager.h -@@ -24,10 +24,12 @@ - #ifndef __NA_TRAY_MANAGER_H__ - #define __NA_TRAY_MANAGER_H__ - --#include - #ifdef GDK_WINDOWING_X11 - #include - #endif -+#include -+ -+#include "na-tray-child.h" - - G_BEGIN_DECLS - -@@ -40,7 +42,6 @@ G_BEGIN_DECLS - - typedef struct _NaTrayManager NaTrayManager; - typedef struct _NaTrayManagerClass NaTrayManagerClass; --typedef struct _NaTrayManagerChild NaTrayManagerChild; - - struct _NaTrayManager - { -@@ -64,18 +65,18 @@ struct _NaTrayManagerClass - GObjectClass parent_class; - - void (* tray_icon_added) (NaTrayManager *manager, -- NaTrayManagerChild *child); -+ NaTrayChild *child); - void (* tray_icon_removed) (NaTrayManager *manager, -- NaTrayManagerChild *child); -+ NaTrayChild *child); - - void (* message_sent) (NaTrayManager *manager, -- NaTrayManagerChild *child, -+ NaTrayChild *child, - const gchar *message, - glong id, - glong timeout); - - void (* message_cancelled) (NaTrayManager *manager, -- NaTrayManagerChild *child, -+ NaTrayChild *child, - glong id); - - void (* lost_selection) (NaTrayManager *manager); -@@ -87,8 +88,6 @@ gboolean na_tray_manager_check_running (GdkScreen *screen); - NaTrayManager *na_tray_manager_new (void); - gboolean na_tray_manager_manage_screen (NaTrayManager *manager, - GdkScreen *screen); --char *na_tray_manager_get_child_title (NaTrayManager *manager, -- NaTrayManagerChild *child); - void na_tray_manager_set_orientation (NaTrayManager *manager, - GtkOrientation orientation); - GtkOrientation na_tray_manager_get_orientation (NaTrayManager *manager); -diff --git a/gui/simple-greeter/libnotificationarea/na-tray.c b/gui/simple-greeter/libnotificationarea/na-tray.c -index 7192717..051a811 100644 ---- a/gui/simple-greeter/libnotificationarea/na-tray.c -+++ b/gui/simple-greeter/libnotificationarea/na-tray.c -@@ -12,7 +12,7 @@ - * 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 -@@ -26,7 +26,6 @@ - - #include "na-tray-manager.h" - #include "fixedtip.h" --#include "obox.h" - - #include "na-tray.h" - -@@ -83,6 +82,27 @@ static TraysScreen *trays_screens = NULL; - - static void icon_tip_show_next (IconTip *icontip); - -+/* NaBox, an instantiable GtkBox */ -+ -+typedef GtkBox NaBox; -+typedef GtkBoxClass NaBoxClass; -+ -+static GType na_box_get_type (void); -+ -+G_DEFINE_TYPE (NaBox, na_box, GTK_TYPE_BOX) -+ -+static void -+na_box_init (NaBox *box) -+{ -+} -+ -+static void -+na_box_class_init (NaBoxClass *klass) -+{ -+} -+ -+/* NaTray */ -+ - G_DEFINE_TYPE (NaTray, na_tray, GTK_TYPE_BIN) - - static NaTray * -@@ -115,7 +135,6 @@ tray_added (NaTrayManager *manager, - gtk_box_pack_end (GTK_BOX (priv->box), icon, FALSE, FALSE, 0); - - gtk_widget_show (icon); -- na_tray_force_redraw (tray); - } - - static void -@@ -131,8 +150,6 @@ tray_removed (NaTrayManager *manager, - - g_assert (tray->priv->trays_screen == trays_screen); - -- na_tray_force_redraw (tray); -- - g_hash_table_remove (trays_screen->icon_table, icon); - /* this will also destroy the tip associated to this icon */ - g_hash_table_remove (trays_screen->tip_table, icon); -@@ -247,8 +264,9 @@ icon_tip_show_next (IconTip *icontip) - icontip->id = buffer->id; - - if (buffer->timeout > 0) -- icontip->source_id = g_timeout_add (buffer->timeout * 1000, -- icon_tip_show_next_timeout, icontip); -+ icontip->source_id = g_timeout_add_seconds (buffer->timeout, -+ icon_tip_show_next_timeout, -+ icontip); - - icon_tip_buffer_free (buffer, NULL); - } -@@ -375,7 +393,7 @@ update_size_and_orientation (NaTray *tray) - { - NaTrayPrivate *priv = tray->priv; - -- na_obox_set_orientation (NA_OBOX (priv->box), priv->orientation); -+ gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->box), priv->orientation); - - /* This only happens when setting the property during object construction */ - if (!priv->trays_screen) -@@ -399,8 +417,38 @@ update_size_and_orientation (NaTray *tray) - gtk_widget_set_size_request (priv->box, -1, MIN_BOX_SIZE); - break; - } -+} - -- na_tray_force_redraw (tray); -+/* Children with alpha channels have been set to be composited by calling -+ * gdk_window_set_composited(). We need to paint these children ourselves. -+ */ -+static void -+na_tray_expose_icon (GtkWidget *widget, -+ gpointer data) -+{ -+ cairo_t *cr = data; -+ -+ if (na_tray_child_has_alpha (NA_TRAY_CHILD (widget))) -+ { -+ gdk_cairo_set_source_pixmap (cr, widget->window, -+ widget->allocation.x, -+ widget->allocation.y); -+ cairo_paint (cr); -+ } -+} -+ -+static void -+na_tray_expose_box (GtkWidget *box, -+ GdkEventExpose *event) -+{ -+ cairo_t *cr = gdk_cairo_create (box->window); -+ -+ gdk_cairo_region (cr, event->region); -+ cairo_clip (cr); -+ -+ gtk_container_foreach (GTK_CONTAINER (box), na_tray_expose_icon, cr); -+ -+ cairo_destroy (cr); - } - - static void -@@ -417,7 +465,9 @@ na_tray_init (NaTray *tray) - gtk_container_add (GTK_CONTAINER (tray), priv->frame); - gtk_widget_show (priv->frame); - -- priv->box = na_obox_new (); -+ priv->box = g_object_new (na_box_get_type (), NULL); -+ g_signal_connect (priv->box, "expose-event", -+ G_CALLBACK (na_tray_expose_box), tray); - gtk_box_set_spacing (GTK_BOX (priv->box), ICON_SPACING); - gtk_container_add (GTK_CONTAINER (priv->frame), priv->box); - gtk_widget_show (priv->box); -@@ -658,9 +708,9 @@ idle_redraw_cb (NaTray *tray) - { - NaTrayPrivate *priv = tray->priv; - -+ gtk_container_foreach (GTK_CONTAINER (priv->box), (GtkCallback)na_tray_child_force_redraw, tray); -+ - priv->idle_redraw_id = 0; -- gtk_widget_hide (priv->box); -- gtk_widget_show (priv->box); - - return FALSE; - } -@@ -671,8 +721,6 @@ na_tray_force_redraw (NaTray *tray) - NaTrayPrivate *priv = tray->priv; - - /* Force the icons to redraw their backgrounds. -- * gtk_widget_queue_draw() doesn't work across process boundaries, -- * so we do this instead. - */ - if (priv->idle_redraw_id == 0) - priv->idle_redraw_id = g_idle_add ((GSourceFunc) idle_redraw_cb, tray); -diff --git a/gui/simple-greeter/libnotificationarea/na-tray.h b/gui/simple-greeter/libnotificationarea/na-tray.h -index f67062b..57baddd 100644 ---- a/gui/simple-greeter/libnotificationarea/na-tray.h -+++ b/gui/simple-greeter/libnotificationarea/na-tray.h -@@ -24,10 +24,10 @@ - #ifndef __NA_TRAY_H__ - #define __NA_TRAY_H__ - --#include - #ifdef GDK_WINDOWING_X11 - #include - #endif -+#include - - G_BEGIN_DECLS - -@@ -41,7 +41,6 @@ G_BEGIN_DECLS - typedef struct _NaTray NaTray; - typedef struct _NaTrayPrivate NaTrayPrivate; - typedef struct _NaTrayClass NaTrayClass; --typedef struct _NaTrayChild NaTrayChild; - - struct _NaTray - { -diff --git a/gui/simple-greeter/libnotificationarea/testtray.c b/gui/simple-greeter/libnotificationarea/testtray.c -index 42d3732..c0300b6 100644 ---- a/gui/simple-greeter/libnotificationarea/testtray.c -+++ b/gui/simple-greeter/libnotificationarea/testtray.c -@@ -66,7 +66,7 @@ static void - tray_added_cb (GtkContainer *box, GtkWidget *icon, TrayData *data) - { - g_print ("[Screen %u tray %p] Child %p added to tray: \"%s\"\n", -- data->screen_num, data->tray, icon, "XXX");//na_tray_manager_get_child_title (manager, icon)); -+ data->screen_num, data->tray, icon, "XXX");//na_tray_child_get_title (icon)); - - update_child_count (data); - } --- -1.6.5.rc2 - - -From b2bd208cd0057e25b0aac380d519376b243537e0 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Thu, 22 Oct 2009 22:07:52 -0400 -Subject: [PATCH 2/4] Add ordering patch to na-tray - -This makes sure system utilities come up in the right order. ---- - .../libnotificationarea/na-tray-child.c | 81 ++++++++++++++++++ - .../libnotificationarea/na-tray-child.h | 5 +- - gui/simple-greeter/libnotificationarea/na-tray.c | 89 +++++++++++++++++++- - 3 files changed, 172 insertions(+), 3 deletions(-) - -diff --git a/gui/simple-greeter/libnotificationarea/na-tray-child.c b/gui/simple-greeter/libnotificationarea/na-tray-child.c -index c7e3f61..98769bd 100644 ---- a/gui/simple-greeter/libnotificationarea/na-tray-child.c -+++ b/gui/simple-greeter/libnotificationarea/na-tray-child.c -@@ -428,3 +428,84 @@ na_tray_child_force_redraw (NaTrayChild *child) - #endif - } - } -+ -+ -+/* from libwnck xutils.c */ -+static char * -+latin1_to_utf8 (const char *latin1) -+{ -+ GString *str; -+ const char *p; -+ -+ str = g_string_new (NULL); -+ -+ p = latin1; -+ while (*p) -+ { -+ g_string_append_unichar (str, (gunichar) *p); -+ ++p; -+ } -+ -+ return g_string_free (str, FALSE); -+} -+ -+/* derived from libwnck xutils.c */ -+static void -+_get_wmclass (Display *xdisplay, -+ Window xwindow, -+ char **res_class, -+ char **res_name) -+{ -+ XClassHint ch; -+ char *retval; -+ -+ gdk_error_trap_push (); -+ -+ ch.res_name = NULL; -+ ch.res_class = NULL; -+ -+ XGetClassHint (xdisplay, xwindow, &ch); -+ -+ gdk_error_trap_pop (); -+ -+ retval = NULL; -+ -+ if (res_class) -+ *res_class = NULL; -+ -+ if (res_name) -+ *res_name = NULL; -+ -+ if (ch.res_name) -+ { -+ if (res_name) -+ *res_name = latin1_to_utf8 (ch.res_name); -+ -+ XFree (ch.res_name); -+ } -+ -+ if (ch.res_class) -+ { -+ if (res_class) -+ *res_class = latin1_to_utf8 (ch.res_class); -+ -+ XFree (ch.res_class); -+ } -+} -+ -+void -+na_tray_child_get_wm_class (NaTrayChild *child, -+ char **res_name, -+ char **res_class) -+{ -+ GdkDisplay *display; -+ -+ g_return_if_fail (NA_IS_TRAY_CHILD (child)); -+ -+ display = gtk_widget_get_display (GTK_WIDGET (child)); -+ -+ _get_wmclass (GDK_DISPLAY_XDISPLAY (display), -+ child->icon_window, -+ res_class, -+ res_name); -+} -diff --git a/gui/simple-greeter/libnotificationarea/na-tray-child.h b/gui/simple-greeter/libnotificationarea/na-tray-child.h -index c174abe..ff036a7 100644 ---- a/gui/simple-greeter/libnotificationarea/na-tray-child.h -+++ b/gui/simple-greeter/libnotificationarea/na-tray-child.h -@@ -61,7 +61,10 @@ char *na_tray_child_get_title (NaTrayChild *child); - gboolean na_tray_child_has_alpha (NaTrayChild *child); - void na_tray_child_set_composited (NaTrayChild *child, - gboolean composited); --void na_tray_child_force_redraw (NaTrayChild *child); -+void na_tray_child_force_redraw (NaTrayChild *child); -+void na_tray_child_get_wm_class (NaTrayChild *child, -+ char **res_name, -+ char **res_class); - - G_END_DECLS - -diff --git a/gui/simple-greeter/libnotificationarea/na-tray.c b/gui/simple-greeter/libnotificationarea/na-tray.c -index 051a811..3bd1258 100644 ---- a/gui/simple-greeter/libnotificationarea/na-tray.c -+++ b/gui/simple-greeter/libnotificationarea/na-tray.c -@@ -114,6 +114,51 @@ get_tray (TraysScreen *trays_screen) - return trays_screen->all_trays->data; - } - -+const char *roles[] = { -+ "keyboard", -+ "volume", -+ "bluetooth", -+ "network", -+ "battery", -+ NULL -+}; -+ -+const char *wmclass_roles[] = { -+ "Bluetooth-applet", "bluetooth", -+ "Gnome-volume-control-applet", "volume", -+ "Nm-applet", "network", -+ "Gnome-power-manager", "battery", -+ NULL, -+}; -+ -+static const char * -+find_role (const char *wmclass) -+{ -+ int i; -+ -+ for (i = 0; wmclass_roles[i]; i += 2) -+ { -+ if (strcmp (wmclass, wmclass_roles[i]) == 0) -+ return wmclass_roles[i + 1]; -+ } -+ -+ return NULL; -+} -+ -+static int -+find_role_pos (const char *role) -+{ -+ int i; -+ -+ for (i = 0; roles[i]; i++) -+ { -+ if (strcmp (role, roles[i]) == 0) -+ break; -+ } -+ -+ return i + 1; -+} -+ - static void - tray_added (NaTrayManager *manager, - GtkWidget *icon, -@@ -121,6 +166,11 @@ tray_added (NaTrayManager *manager, - { - NaTray *tray; - NaTrayPrivate *priv; -+ GList *l, *children; -+ int position; -+ char *class_a; -+ const char *role; -+ int role_position; - - tray = get_tray (trays_screen); - if (tray == NULL) -@@ -129,10 +179,45 @@ tray_added (NaTrayManager *manager, - priv = tray->priv; - - g_assert (priv->trays_screen == trays_screen); -- -+ - g_hash_table_insert (trays_screen->icon_table, icon, tray); - -- gtk_box_pack_end (GTK_BOX (priv->box), icon, FALSE, FALSE, 0); -+ position = 0; -+ -+ class_a = NULL; -+ na_tray_child_get_wm_class (NA_TRAY_CHILD (icon), NULL, &class_a); -+ if (!class_a) -+ goto insert; -+ -+ role = find_role (class_a); -+ g_free (class_a); -+ if (!role) -+ goto insert; -+ -+ role_position = find_role_pos (role); -+ g_object_set_data (G_OBJECT (icon), "role-position", GINT_TO_POINTER (role_position)); -+ -+ children = gtk_container_get_children (GTK_CONTAINER (priv->box)); -+ for (l = g_list_last (children); l; l = l->prev) -+ { -+ GtkWidget *child = l->data; -+ gint rp; -+ -+ rp = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (child), "role-position")); -+ if (rp == 0 || rp < role_position) -+ { -+ position = g_list_index (children, child) + 1; -+ break; -+ } -+ } -+ g_list_free (children); -+ -+ if (position < 0) -+ position = 0; -+ -+insert: -+ gtk_box_pack_start (GTK_BOX (priv->box), icon, FALSE, FALSE, 0); -+ gtk_box_reorder_child (GTK_BOX (priv->box), icon, position); - - gtk_widget_show (icon); - } --- -1.6.5.rc2 - - -From ab7c74cca138c404338ebaf3ee3c1e3f6e92f083 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Thu, 22 Oct 2009 22:08:18 -0400 -Subject: [PATCH 3/4] Add the ability to have padding between icons in tray - ---- - .../libnotificationarea/na-tray-manager.c | 41 ++++++++++++++++++++ - .../libnotificationarea/na-tray-manager.h | 3 + - gui/simple-greeter/libnotificationarea/na-tray.c | 12 ++++++ - gui/simple-greeter/libnotificationarea/na-tray.h | 2 + - 4 files changed, 58 insertions(+), 0 deletions(-) - -diff --git a/gui/simple-greeter/libnotificationarea/na-tray-manager.c b/gui/simple-greeter/libnotificationarea/na-tray-manager.c -index 1bf54f1..d49c646 100644 ---- a/gui/simple-greeter/libnotificationarea/na-tray-manager.c -+++ b/gui/simple-greeter/libnotificationarea/na-tray-manager.c -@@ -653,6 +653,32 @@ na_tray_manager_set_visual_property (NaTrayManager *manager) - #endif - } - -+static void -+na_tray_manager_set_padding_property (NaTrayManager *manager) -+{ -+#ifdef GDK_WINDOWING_X11 -+ GdkDisplay *display; -+ Atom orientation_atom; -+ gulong data[1]; -+ -+ if (!manager->invisible || !manager->invisible->window) -+ return; -+ -+ display = gtk_widget_get_display (manager->invisible); -+ orientation_atom = gdk_x11_get_xatom_by_name_for_display (display, -+ "_NET_SYSTEM_TRAY_PADDING"); -+ -+ data[0] = manager->padding; -+ -+ XChangeProperty (GDK_DISPLAY_XDISPLAY (display), -+ GDK_WINDOW_XWINDOW (manager->invisible->window), -+ orientation_atom, -+ XA_CARDINAL, 32, -+ PropModeReplace, -+ (guchar *) &data, 1); -+#endif -+} -+ - #ifdef GDK_WINDOWING_X11 - - static gboolean -@@ -697,6 +723,7 @@ na_tray_manager_manage_screen_x11 (NaTrayManager *manager, - - na_tray_manager_set_orientation_property (manager); - na_tray_manager_set_visual_property (manager); -+ na_tray_manager_set_padding_property (manager); - - timestamp = gdk_x11_get_server_time (invisible->window); - -@@ -836,6 +863,20 @@ na_tray_manager_set_orientation (NaTrayManager *manager, - } - } - -+void -+na_tray_manager_set_padding (NaTrayManager *manager, -+ gint padding) -+{ -+ g_return_if_fail (NA_IS_TRAY_MANAGER (manager)); -+ -+ if (manager->padding != padding) -+ { -+ manager->padding = padding; -+ -+ na_tray_manager_set_padding_property (manager); -+ } -+} -+ - GtkOrientation - na_tray_manager_get_orientation (NaTrayManager *manager) - { -diff --git a/gui/simple-greeter/libnotificationarea/na-tray-manager.h b/gui/simple-greeter/libnotificationarea/na-tray-manager.h -index f325453..e93882e 100644 ---- a/gui/simple-greeter/libnotificationarea/na-tray-manager.h -+++ b/gui/simple-greeter/libnotificationarea/na-tray-manager.h -@@ -55,6 +55,7 @@ struct _NaTrayManager - GtkWidget *invisible; - GdkScreen *screen; - GtkOrientation orientation; -+ gint padding; - - GList *messages; - GHashTable *socket_table; -@@ -91,6 +92,8 @@ gboolean na_tray_manager_manage_screen (NaTrayManager *manager, - void na_tray_manager_set_orientation (NaTrayManager *manager, - GtkOrientation orientation); - GtkOrientation na_tray_manager_get_orientation (NaTrayManager *manager); -+void na_tray_manager_set_padding (NaTrayManager *manager, -+ gint padding); - - G_END_DECLS - -diff --git a/gui/simple-greeter/libnotificationarea/na-tray.c b/gui/simple-greeter/libnotificationarea/na-tray.c -index 3bd1258..40845c1 100644 ---- a/gui/simple-greeter/libnotificationarea/na-tray.c -+++ b/gui/simple-greeter/libnotificationarea/na-tray.c -@@ -599,6 +599,8 @@ na_tray_constructor (GType type, - { - trays_screens [screen_number].tray_manager = tray_manager; - -+ na_tray_manager_set_padding (tray_manager, 0); -+ - g_signal_connect (tray_manager, "tray_icon_added", - G_CALLBACK (tray_added), - &trays_screens [screen_number]); -@@ -801,6 +803,16 @@ idle_redraw_cb (NaTray *tray) - } - - void -+na_tray_set_padding (NaTray *tray, -+ gint padding) -+{ -+ NaTrayPrivate *priv = tray->priv; -+ -+ if (get_tray (priv->trays_screen) == tray) -+ na_tray_manager_set_padding (priv->trays_screen->tray_manager, padding); -+} -+ -+void - na_tray_force_redraw (NaTray *tray) - { - NaTrayPrivate *priv = tray->priv; -diff --git a/gui/simple-greeter/libnotificationarea/na-tray.h b/gui/simple-greeter/libnotificationarea/na-tray.h -index 57baddd..1ead20f 100644 ---- a/gui/simple-greeter/libnotificationarea/na-tray.h -+++ b/gui/simple-greeter/libnotificationarea/na-tray.h -@@ -60,6 +60,8 @@ NaTray *na_tray_new_for_screen (GdkScreen *screen, - void na_tray_set_orientation (NaTray *tray, - GtkOrientation orientation); - GtkOrientation na_tray_get_orientation (NaTray *tray); -+void na_tray_set_padding (NaTray *tray, -+ gint padding); - void na_tray_force_redraw (NaTray *tray); - - G_END_DECLS --- -1.6.5.rc2 - - -From 050879701489074492a35b0427f0ac7cf21ebf82 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Thu, 22 Oct 2009 22:13:58 -0400 -Subject: [PATCH 4/4] Read padding from notification area applet and use it. - ---- - gui/simple-greeter/gdm-greeter-panel.c | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -diff --git a/gui/simple-greeter/gdm-greeter-panel.c b/gui/simple-greeter/gdm-greeter-panel.c -index 03c4122..43b91d5 100644 ---- a/gui/simple-greeter/gdm-greeter-panel.c -+++ b/gui/simple-greeter/gdm-greeter-panel.c -@@ -65,6 +65,7 @@ - #define GPM_DBUS_INTERFACE "org.freedesktop.PowerManagement" - - #define KEY_DISABLE_RESTART_BUTTONS "/apps/gdm/simple-greeter/disable_restart_buttons" -+#define KEY_NOTIFICATION_AREA_PADDING "/apps/notification_area_applet/prefs/padding" - - #define GDM_GREETER_PANEL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_GREETER_PANEL, GdmGreeterPanelPrivate)) - -@@ -824,6 +825,7 @@ gdm_greeter_panel_init (GdmGreeterPanel *panel) - { - NaTray *tray; - GtkWidget *spacer; -+ int padding; - - gdm_profile_start (NULL); - -@@ -955,6 +957,9 @@ gdm_greeter_panel_init (GdmGreeterPanel *panel) - - tray = na_tray_new_for_screen (gtk_window_get_screen (GTK_WINDOW (panel)), - GTK_ORIENTATION_HORIZONTAL); -+ -+ padding = gconf_client_get_int (panel->priv->client, KEY_NOTIFICATION_AREA_PADDING, NULL); -+ na_tray_set_padding (tray, padding); - gtk_box_pack_end (GTK_BOX (panel->priv->hbox), GTK_WIDGET (tray), FALSE, FALSE, 6); - gtk_widget_show (GTK_WIDGET (tray)); - gdm_greeter_panel_hide_user_options (panel); --- -1.6.5.rc2 - diff --git a/fix-run-dir-permissions.patch b/fix-run-dir-permissions.patch deleted file mode 100644 index 7475236..0000000 --- a/fix-run-dir-permissions.patch +++ /dev/null @@ -1,370 +0,0 @@ -From 5475c0a823cf94f817821105b40760d902d9ace5 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Tue, 27 Oct 2009 10:40:55 -0400 -Subject: [PATCH 1/4] Make screenshot dir a configure argument - -This provides a little more flexibility to distributors, -but more importantly makes it less hard coded in gdm-screenshot.c ---- - configure.ac | 17 +++++++++++++++++ - data/Makefile.am | 8 ++++++++ - utils/Makefile.am | 1 + - utils/gdm-screenshot.c | 5 +---- - 4 files changed, 27 insertions(+), 4 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 4fe4430..0dd2658 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1237,6 +1237,23 @@ fi - AC_SUBST(GDM_XAUTH_DIR) - - dnl --------------------------------------------------------------------------- -+dnl - Directory for greeter screenshot -+dnl --------------------------------------------------------------------------- -+ -+AC_ARG_WITH(screenshot-dir, -+ AS_HELP_STRING([--with-screenshot-dir=], -+ [directory to store greeter screenshot])) -+ -+if ! test -z "$with_screenshot_dir"; then -+ GDM_SCREENSHOT_DIR=$with_screenshot_dir -+else -+ GDM_SCREENSHOT_DIR=${localstatedir}/run/gdm -+fi -+ -+AC_SUBST(GDM_SCREENSHOT_DIR) -+ -+ -+dnl --------------------------------------------------------------------------- - dnl - Finish - dnl --------------------------------------------------------------------------- - -diff --git a/data/Makefile.am b/data/Makefile.am -index 73fa106..608194d 100644 ---- a/data/Makefile.am -+++ b/data/Makefile.am -@@ -13,6 +13,7 @@ predir = $(gdmconfdir)/PreSession - postlogindir = $(gdmconfdir)/PostLogin - workingdir = $(GDM_WORKING_DIR) - xauthdir = $(GDM_XAUTH_DIR) -+screenshotdir = $(GDM_SCREENSHOT_DIR) - cachedir = $(localstatedir)/cache/gdm - - Xsession: $(srcdir)/Xsession.in -@@ -123,6 +124,7 @@ uninstall-hook: - -rf \ - $(DESTDIR)$(workingdir)/.gconf.mandatory \ - $(DESTDIR)$(xauthdir) -+ $(DESTDIR)$(screenshotdir) - - install-data-hook: gdm.conf-custom Xsession Init PostSession PreSession gconf.path - if test '!' -d $(DESTDIR)$(gdmconfdir); then \ -@@ -204,6 +206,12 @@ install-data-hook: gdm.conf-custom Xsession Init PostSession PreSession gconf.pa - chown root:gdm $(DESTDIR)$(xauthdir) || : ; \ - fi - -+ if test '!' -d $(DESTDIR)$(screenshotdir); then \ -+ $(mkinstalldirs) $(DESTDIR)$(screenshotdir); \ -+ chmod 0755 $(DESTDIR)$(screenshotdir); \ -+ chown gdm:gdm $(DESTDIR)$(screenshotdir) || : ; \ -+ fi -+ - if test '!' -d $(DESTDIR)$(workingdir); then \ - $(mkinstalldirs) $(DESTDIR)$(workingdir); \ - chmod 1770 $(DESTDIR)$(workingdir); \ -diff --git a/utils/Makefile.am b/utils/Makefile.am -index 0b6ea04..f1ff331 100644 ---- a/utils/Makefile.am -+++ b/utils/Makefile.am -@@ -4,6 +4,7 @@ AM_CPPFLAGS = \ - -I. \ - -I.. \ - -DLOCALSTATEDIR=\""$(localstatedir)"\" \ -+ -DGDM_SCREENSHOT_DIR=\""$(GDM_SCREENSHOT_DIR)"\"\ - -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ - $(UTILS_CFLAGS) \ - $(CANBERRA_GTK_CFLAGS) \ -diff --git a/utils/gdm-screenshot.c b/utils/gdm-screenshot.c -index f66de46..12102f2 100644 ---- a/utils/gdm-screenshot.c -+++ b/utils/gdm-screenshot.c -@@ -163,11 +163,8 @@ screenshot_save (GdkPixbuf *pixbuf) - char *filename; - gboolean res; - GError *error; -- const char *save_dir; - -- save_dir = LOCALSTATEDIR "/run/gdm"; -- -- filename = g_build_filename (save_dir, -+ filename = g_build_filename (GDM_SCREENSHOT_DIR, - "GDM-Screenshot.png", - NULL); - --- -1.6.5.1 - - -From 1fe51c8f69dc93033d2035c27389377090f21b78 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Tue, 27 Oct 2009 11:25:19 -0400 -Subject: [PATCH 2/4] Create screenshot dir at runtime if not available - -We want the screenshot dir to be owned by the GDM user, -so the greeter can write screenshots to it. ---- - daemon/Makefile.am | 1 + - daemon/gdm-greeter-session.c | 1 + - daemon/gdm-welcome-session.c | 32 ++++++++++++++++++++++++++++++++ - 3 files changed, 34 insertions(+), 0 deletions(-) - -diff --git a/daemon/Makefile.am b/daemon/Makefile.am -index a122a15..ab10dc5 100644 ---- a/daemon/Makefile.am -+++ b/daemon/Makefile.am -@@ -15,6 +15,7 @@ AM_CPPFLAGS = \ - -DSBINDIR=\"$(sbindir)\" \ - -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ - -DGDM_XAUTH_DIR=\"$(GDM_XAUTH_DIR)\" \ -+ -DGDM_SCREENSHOT_DIR=\"$(GDM_SCREENSHOT_DIR)\" \ - -DGDM_CACHE_DIR=\""$(localstatedir)/cache/gdm"\" \ - -DGDM_SESSION_DEFAULT_PATH=\"$(GDM_SESSION_DEFAULT_PATH)\" \ - $(DISABLE_DEPRECATED_CFLAGS) \ -diff --git a/daemon/gdm-greeter-session.c b/daemon/gdm-greeter-session.c -index aae1928..994acbc 100644 ---- a/daemon/gdm-greeter-session.c -+++ b/daemon/gdm-greeter-session.c -@@ -156,6 +156,7 @@ gdm_greeter_session_new (const char *display_name, - "x11-display-device", display_device, - "x11-display-hostname", display_hostname, - "x11-display-is-local", display_is_local, -+ "runtime-dir", GDM_SCREENSHOT_DIR, - NULL); - - return GDM_GREETER_SESSION (object); -diff --git a/daemon/gdm-welcome-session.c b/daemon/gdm-welcome-session.c -index b58e855..f340660 100644 ---- a/daemon/gdm-welcome-session.c -+++ b/daemon/gdm-welcome-session.c -@@ -63,6 +63,7 @@ struct GdmWelcomeSessionPrivate - - char *user_name; - char *group_name; -+ char *runtime_dir; - - char *x11_display_name; - char *x11_display_device; -@@ -91,6 +92,7 @@ enum { - PROP_X11_DISPLAY_IS_LOCAL, - PROP_USER_NAME, - PROP_GROUP_NAME, -+ PROP_RUNTIME_DIR, - PROP_SERVER_ADDRESS, - PROP_COMMAND, - PROP_SERVER_DBUS_PATH, -@@ -408,6 +410,7 @@ rotate_logs (const char *path, - typedef struct { - const char *user_name; - const char *group_name; -+ const char *runtime_dir; - const char *log_file; - } SpawnChildData; - -@@ -435,6 +438,10 @@ spawn_child_setup (SpawnChildData *data) - _exit (1); - } - -+ g_debug ("GdmWelcomeSession: Setting up run time dir %s", data->runtime_dir); -+ g_mkdir (data->runtime_dir, 0755); -+ chown (data->runtime_dir, pwent->pw_uid, pwent->pw_gid); -+ - g_debug ("GdmWelcomeSession: Changing (uid:gid) for child process to (%d:%d)", - pwent->pw_uid, - grent->gr_gid); -@@ -552,6 +559,7 @@ static gboolean - spawn_command_line_async_as_user (const char *command_line, - const char *user_name, - const char *group_name, -+ const char *runtime_dir, - const char *log_file, - char **env, - GPid *child_pid, -@@ -575,6 +583,7 @@ spawn_command_line_async_as_user (const char *command_line, - - data.user_name = user_name; - data.group_name = group_name; -+ data.runtime_dir = runtime_dir; - data.log_file = log_file; - - local_error = NULL; -@@ -756,6 +765,7 @@ gdm_welcome_session_spawn (GdmWelcomeSession *welcome_session) - ret = spawn_command_line_async_as_user (welcome_session->priv->command, - welcome_session->priv->user_name, - welcome_session->priv->group_name, -+ welcome_session->priv->runtime_dir, - log_path, - (char **)env->pdata, - &welcome_session->priv->pid, -@@ -928,6 +938,14 @@ _gdm_welcome_session_set_group_name (GdmWelcomeSession *welcome_session, - } - - static void -+_gdm_welcome_session_set_runtime_dir (GdmWelcomeSession *welcome_session, -+ const char *dir) -+{ -+ g_free (welcome_session->priv->runtime_dir); -+ welcome_session->priv->runtime_dir = g_strdup (dir); -+} -+ -+static void - _gdm_welcome_session_set_server_dbus_path (GdmWelcomeSession *welcome_session, - const char *name) - { -@@ -998,6 +1016,9 @@ gdm_welcome_session_set_property (GObject *object, - case PROP_GROUP_NAME: - _gdm_welcome_session_set_group_name (self, g_value_get_string (value)); - break; -+ case PROP_RUNTIME_DIR: -+ _gdm_welcome_session_set_runtime_dir (self, g_value_get_string (value)); -+ break; - case PROP_SERVER_ADDRESS: - gdm_welcome_session_set_server_address (self, g_value_get_string (value)); - break; -@@ -1054,6 +1075,9 @@ gdm_welcome_session_get_property (GObject *object, - case PROP_GROUP_NAME: - g_value_set_string (value, self->priv->group_name); - break; -+ case PROP_RUNTIME_DIR: -+ g_value_set_string (value, self->priv->runtime_dir); -+ break; - case PROP_SERVER_ADDRESS: - g_value_set_string (value, self->priv->server_address); - break; -@@ -1154,6 +1178,13 @@ gdm_welcome_session_class_init (GdmWelcomeSessionClass *klass) - GDM_GROUPNAME, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - g_object_class_install_property (object_class, -+ PROP_RUNTIME_DIR, -+ g_param_spec_string ("runtime-dir", -+ "runtime dir", -+ "runtime dir", -+ NULL, -+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); -+ g_object_class_install_property (object_class, - PROP_SERVER_ADDRESS, - g_param_spec_string ("server-address", - "server address", -@@ -1267,6 +1298,7 @@ gdm_welcome_session_finalize (GObject *object) - g_free (welcome_session->priv->command); - g_free (welcome_session->priv->user_name); - g_free (welcome_session->priv->group_name); -+ g_free (welcome_session->priv->runtime_dir); - g_free (welcome_session->priv->x11_display_name); - g_free (welcome_session->priv->x11_display_device); - g_free (welcome_session->priv->x11_display_hostname); --- -1.6.5.1 - - -From 81870b019c929694ea392359b0a66b0a500c7d5c Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Tue, 27 Oct 2009 11:43:15 -0400 -Subject: [PATCH 3/4] Move default screenshot dir to it's own subdirectory - ---- - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 0dd2658..93917e2 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1247,7 +1247,7 @@ AC_ARG_WITH(screenshot-dir, - if ! test -z "$with_screenshot_dir"; then - GDM_SCREENSHOT_DIR=$with_screenshot_dir - else -- GDM_SCREENSHOT_DIR=${localstatedir}/run/gdm -+ GDM_SCREENSHOT_DIR=${localstatedir}/run/gdm/greeter - fi - - AC_SUBST(GDM_SCREENSHOT_DIR) --- -1.6.5.1 - - -From c96697431529ed87dbdbb987ed92ac2286b247b7 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Tue, 27 Oct 2009 10:35:37 -0400 -Subject: [PATCH 4/4] Lock down /var/run/gdm - -We don't need it so open now that screenshots are written to their -own directory, and having it open has implications for quota abuse. ---- - daemon/gdm-display-access-file.c | 14 +++++++------- - data/Makefile.am | 2 +- - 2 files changed, 8 insertions(+), 8 deletions(-) - -diff --git a/daemon/gdm-display-access-file.c b/daemon/gdm-display-access-file.c -index a3d3e2f..1b52f15 100644 ---- a/daemon/gdm-display-access-file.c -+++ b/daemon/gdm-display-access-file.c -@@ -268,10 +268,10 @@ _create_xauth_file_for_user (const char *username, - fp = NULL; - fd = -1; - -- /* Create directory if not exist, then set permission 01775 and ownership root:gdm */ -+ /* Create directory if not exist, then set permission 0711 and ownership root:gdm */ - if (g_file_test (GDM_XAUTH_DIR, G_FILE_TEST_IS_DIR) == FALSE) { - g_unlink (GDM_XAUTH_DIR); -- if (g_mkdir (GDM_XAUTH_DIR, S_ISVTX | S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) { -+ if (g_mkdir (GDM_XAUTH_DIR, 0711) != 0) { - g_set_error (error, - G_FILE_ERROR, - g_file_error_from_errno (errno), -@@ -279,15 +279,15 @@ _create_xauth_file_for_user (const char *username, - goto out; - } - -- g_chmod (GDM_XAUTH_DIR, S_ISVTX | S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -+ g_chmod (GDM_XAUTH_DIR, 0711); - _get_uid_and_gid_for_user (GDM_USERNAME, &uid, &gid); - if (chown (GDM_XAUTH_DIR, 0, gid) != 0) { - g_warning ("Unable to change owner of '%s'", - GDM_XAUTH_DIR); - } - } else { -- /* if it does exist make sure it has correct mode 01775 */ -- g_chmod (GDM_XAUTH_DIR, S_ISVTX | S_IRWXU |S_IRWXG | S_IROTH | S_IXOTH); -+ /* if it does exist make sure it has correct mode 0711 */ -+ g_chmod (GDM_XAUTH_DIR, 0711); - - /* and clean up any stale auth subdirs */ - clean_up_stale_auth_subdirs (); -@@ -368,8 +368,8 @@ _create_xauth_file_for_user (const char *username, - } - - /* now open up permissions on per-session directory */ -- g_debug ("GdmDisplayAccessFile: chmoding %s to 1777", dir_name); -- g_chmod (dir_name, S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO); -+ g_debug ("GdmDisplayAccessFile: chmoding %s to 0711", dir_name); -+ g_chmod (dir_name, 0711); - - errno = 0; - fp = fdopen (fd, "w"); -diff --git a/data/Makefile.am b/data/Makefile.am -index 608194d..dfbd096 100644 ---- a/data/Makefile.am -+++ b/data/Makefile.am -@@ -202,7 +202,7 @@ install-data-hook: gdm.conf-custom Xsession Init PostSession PreSession gconf.pa - - if test '!' -d $(DESTDIR)$(xauthdir); then \ - $(mkinstalldirs) $(DESTDIR)$(xauthdir); \ -- chmod 1777 $(DESTDIR)$(xauthdir); \ -+ chmod 0711 $(DESTDIR)$(xauthdir); \ - chown root:gdm $(DESTDIR)$(xauthdir) || : ; \ - fi - --- -1.6.5.1 - diff --git a/fix-timer.patch b/fix-timer.patch deleted file mode 100644 index 6029d02..0000000 --- a/fix-timer.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 88d4e5d79ca5ded0f9e88af67044d53342ff0897 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Thu, 22 Oct 2009 17:39:27 -0400 -Subject: [PATCH 1/2] Force cell renderer to be a specific height - -Before it was growing and shrinking all the time causing, -flicker. ---- - gui/simple-greeter/gdm-cell-renderer-timer.c | 12 ++---------- - 1 files changed, 2 insertions(+), 10 deletions(-) - -diff --git a/gui/simple-greeter/gdm-cell-renderer-timer.c b/gui/simple-greeter/gdm-cell-renderer-timer.c -index 7918b48..9453d7e 100644 ---- a/gui/simple-greeter/gdm-cell-renderer-timer.c -+++ b/gui/simple-greeter/gdm-cell-renderer-timer.c -@@ -108,19 +108,11 @@ gdm_cell_renderer_timer_get_size (GtkCellRenderer *cell, - } - - if (width != NULL) { -- if (cell->width >= 0) { -- *width = cell->width; -- } else { -- *width = renderer->priv->value <= G_MINDOUBLE? 0 : 64; -- } -+ *width = cell->xpad * 2 + 24; - } - - if (height != NULL) { -- if (cell->height >= 0) { -- *height = cell->height; -- } else { -- *height = renderer->priv->value <= G_MINDOUBLE? 0 : 64; -- } -+ *height = cell->ypad * 2 + 24; - } - } - --- -1.6.5.rc2 - - -From a87b05fac2c2de7cff80a183e397f33416bfc893 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Thu, 22 Oct 2009 17:45:13 -0400 -Subject: [PATCH 2/2] Drop set_operator (SOURCE) in cell renderer - -I'm not sure why I was doing it, when it looks -find using OVER, so I'm going to take it out. ---- - gui/simple-greeter/gdm-cell-renderer-timer.c | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -diff --git a/gui/simple-greeter/gdm-cell-renderer-timer.c b/gui/simple-greeter/gdm-cell-renderer-timer.c -index 9453d7e..0fb404c 100644 ---- a/gui/simple-greeter/gdm-cell-renderer-timer.c -+++ b/gui/simple-greeter/gdm-cell-renderer-timer.c -@@ -164,7 +164,6 @@ draw_timer (GdmCellRendererTimer *renderer, - cairo_arc (context, 0, 0, radius + 1, 0, 2 * G_PI); - cairo_fill (context); - -- cairo_set_operator (context, CAIRO_OPERATOR_SOURCE); - cairo_set_source_rgb (context, - bg->red / 65535.0, - bg->green / 65535.0, --- -1.6.5.rc2 diff --git a/gdm-2.26.0-force-active-vt.patch b/gdm-2.26.0-force-active-vt.patch deleted file mode 100644 index c8643e8..0000000 --- a/gdm-2.26.0-force-active-vt.patch +++ /dev/null @@ -1,433 +0,0 @@ -diff -up gdm-2.26.0/configure.ac.force-active-vt gdm-2.26.0/configure.ac ---- gdm-2.26.0/configure.ac.force-active-vt 2009-03-13 00:00:28.000000000 -0400 -+++ gdm-2.26.0/configure.ac 2009-03-16 14:29:02.644213240 -0400 -@@ -1231,6 +1231,23 @@ fi - AC_SUBST(GDM_XAUTH_DIR) - - dnl --------------------------------------------------------------------------- -+dnl - Directory to spool events from other processes -+dnl --------------------------------------------------------------------------- -+ -+AC_ARG_WITH(spool-dir, -+ AS_HELP_STRING([--with-spool-dir=], -+ [spool directory])) -+ -+if ! test -z "$with_spool_dir"; then -+ GDM_SPOOL_DIR=$with_spool_dir -+else -+ GDM_SPOOL_DIR=${localstatedir}/spool/gdm -+fi -+ -+AC_SUBST(GDM_SPOOL_DIR) -+ -+ -+dnl --------------------------------------------------------------------------- - dnl - Finish - dnl --------------------------------------------------------------------------- - -diff -up gdm-2.26.0/daemon/gdm-display.c.force-active-vt gdm-2.26.0/daemon/gdm-display.c ---- gdm-2.26.0/daemon/gdm-display.c.force-active-vt 2009-02-19 21:45:13.000000000 -0500 -+++ gdm-2.26.0/daemon/gdm-display.c 2009-03-16 14:29:02.646213754 -0400 -@@ -65,7 +65,9 @@ struct GdmDisplayPrivate - gsize x11_cookie_size; - GdmDisplayAccessFile *access_file; - -- gboolean is_local; -+ guint is_local : 1; -+ guint force_active_vt : 1; -+ - guint finish_idle_id; - - GdmSlaveProxy *slave_proxy; -@@ -84,6 +86,7 @@ enum { - PROP_X11_COOKIE, - PROP_X11_AUTHORITY_FILE, - PROP_IS_LOCAL, -+ PROP_FORCE_ACTIVE_VT, - PROP_SLAVE_COMMAND, - }; - -@@ -578,9 +581,10 @@ gdm_display_real_prepare (GdmDisplay *di - gdm_slave_proxy_set_log_path (display->priv->slave_proxy, log_path); - g_free (log_path); - -- command = g_strdup_printf ("%s --display-id %s", -+ command = g_strdup_printf ("%s --display-id %s %s", - display->priv->slave_command, -- display->priv->id); -+ display->priv->id, -+ display->priv->force_active_vt? "--force-active-vt" : ""); - gdm_slave_proxy_set_command (display->priv->slave_proxy, command); - g_free (command); - -@@ -831,6 +835,13 @@ _gdm_display_set_is_local (GdmDisplay - } - - static void -+_gdm_display_set_force_active_vt (GdmDisplay *display, -+ gboolean force_active_vt) -+{ -+ display->priv->force_active_vt = force_active_vt; -+} -+ -+static void - _gdm_display_set_slave_command (GdmDisplay *display, - const char *command) - { -@@ -873,6 +884,9 @@ gdm_display_set_property (GObject - case PROP_IS_LOCAL: - _gdm_display_set_is_local (self, g_value_get_boolean (value)); - break; -+ case PROP_FORCE_ACTIVE_VT: -+ _gdm_display_set_force_active_vt (self, g_value_get_boolean (value)); -+ break; - case PROP_SLAVE_COMMAND: - _gdm_display_set_slave_command (self, g_value_get_string (value)); - break; -@@ -921,6 +935,9 @@ gdm_display_get_property (GObject - case PROP_IS_LOCAL: - g_value_set_boolean (value, self->priv->is_local); - break; -+ case PROP_FORCE_ACTIVE_VT: -+ g_value_set_boolean (value, self->priv->force_active_vt); -+ break; - case PROP_SLAVE_COMMAND: - g_value_set_string (value, self->priv->slave_command); - break; -@@ -1091,6 +1108,13 @@ gdm_display_class_init (GdmDisplayClass - NULL, - TRUE, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); -+ g_object_class_install_property (object_class, -+ PROP_FORCE_ACTIVE_VT, -+ g_param_spec_boolean ("force-active-vt", -+ NULL, -+ NULL, -+ FALSE, -+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - - g_object_class_install_property (object_class, - PROP_SLAVE_COMMAND, -diff -up gdm-2.26.0/daemon/gdm-server.c.force-active-vt gdm-2.26.0/daemon/gdm-server.c ---- gdm-2.26.0/daemon/gdm-server.c.force-active-vt 2009-02-19 21:45:13.000000000 -0500 -+++ gdm-2.26.0/daemon/gdm-server.c 2009-03-16 14:29:02.647212475 -0400 -@@ -34,6 +34,8 @@ - #include - #include - -+#include -+ - #include - #include - #include -@@ -663,6 +665,44 @@ gdm_server_spawn (GdmServer *server, - return ret; - } - -+static int -+get_active_vt (void) -+{ -+ int console_fd; -+ struct vt_stat console_state = { 0 }; -+ -+ console_fd = open ("/dev/tty0", O_RDONLY | O_NOCTTY); -+ -+ if (console_fd < 0) { -+ goto out; -+ } -+ -+ if (ioctl (console_fd, VT_GETSTATE, &console_state) < 0) { -+ goto out; -+ } -+ -+out: -+ if (console_fd >= 0) { -+ close (console_fd); -+ } -+ -+ return console_state.v_active; -+} -+ -+static char * -+get_active_vt_as_string (void) -+{ -+ int vt; -+ -+ vt = get_active_vt (); -+ -+ if (vt <= 0) { -+ return NULL; -+ } -+ -+ return g_strdup_printf ("vt%d", vt); -+} -+ - /** - * gdm_server_start: - * @disp: Pointer to a GdmDisplay structure -@@ -681,6 +721,21 @@ gdm_server_start (GdmServer *server) - return res; - } - -+gboolean -+gdm_server_start_on_active_vt (GdmServer *server) -+{ -+ gboolean res; -+ char *vt; -+ -+ g_free (server->priv->command); -+ server->priv->command = g_strdup (X_SERVER " -nr -verbose"); -+ vt = get_active_vt_as_string (); -+ res = gdm_server_spawn (server, vt); -+ g_free (vt); -+ -+ return res; -+} -+ - static void - server_died (GdmServer *server) - { -diff -up gdm-2.26.0/daemon/gdm-server.h.force-active-vt gdm-2.26.0/daemon/gdm-server.h ---- gdm-2.26.0/daemon/gdm-server.h.force-active-vt 2009-02-19 21:45:13.000000000 -0500 -+++ gdm-2.26.0/daemon/gdm-server.h 2009-03-16 14:29:02.649191269 -0400 -@@ -56,6 +56,7 @@ GType gdm_server_get_type - GdmServer * gdm_server_new (const char *display_id, - const char *auth_file); - gboolean gdm_server_start (GdmServer *server); -+gboolean gdm_server_start_on_active_vt (GdmServer *server); - gboolean gdm_server_stop (GdmServer *server); - char * gdm_server_get_display_device (GdmServer *server); - -diff -up gdm-2.26.0/daemon/gdm-simple-slave.c.force-active-vt gdm-2.26.0/daemon/gdm-simple-slave.c ---- gdm-2.26.0/daemon/gdm-simple-slave.c.force-active-vt 2009-02-19 21:45:13.000000000 -0500 -+++ gdm-2.26.0/daemon/gdm-simple-slave.c 2009-03-16 14:29:02.652215508 -0400 -@@ -88,6 +88,7 @@ struct GdmSimpleSlavePrivate - - enum { - PROP_0, -+ FORCE_ACTIVE_VT - }; - - static void gdm_simple_slave_class_init (GdmSimpleSlaveClass *klass); -@@ -1064,11 +1065,13 @@ gdm_simple_slave_run (GdmSimpleSlave *sl - char *display_name; - char *auth_file; - gboolean display_is_local; -+ gboolean force_active_vt; - - g_object_get (slave, - "display-is-local", &display_is_local, - "display-name", &display_name, - "display-x11-authority-file", &auth_file, -+ "force-active-vt", &force_active_vt, - NULL); - - /* if this is local display start a server if one doesn't -@@ -1100,7 +1103,10 @@ gdm_simple_slave_run (GdmSimpleSlave *sl - G_CALLBACK (on_server_ready), - slave); - -- res = gdm_server_start (slave->priv->server); -+ if (force_active_vt) -+ res = gdm_server_start_on_active_vt (slave->priv->server); -+ else -+ res = gdm_server_start (slave->priv->server); - if (! res) { - g_warning (_("Could not start the X " - "server (your graphical environment) " -@@ -1248,12 +1254,14 @@ gdm_simple_slave_finalize (GObject *obje - } - - GdmSlave * --gdm_simple_slave_new (const char *id) -+gdm_simple_slave_new (const char *id, -+ gboolean force_active_vt) - { - GObject *object; - - object = g_object_new (GDM_TYPE_SIMPLE_SLAVE, - "display-id", id, -+ "force-active-vt", force_active_vt, - NULL); - - return GDM_SLAVE (object); -diff -up gdm-2.26.0/daemon/gdm-simple-slave.h.force-active-vt gdm-2.26.0/daemon/gdm-simple-slave.h ---- gdm-2.26.0/daemon/gdm-simple-slave.h.force-active-vt 2009-02-19 21:45:13.000000000 -0500 -+++ gdm-2.26.0/daemon/gdm-simple-slave.h 2009-03-16 14:29:02.655435299 -0400 -@@ -48,7 +48,8 @@ typedef struct - } GdmSimpleSlaveClass; - - GType gdm_simple_slave_get_type (void); --GdmSlave * gdm_simple_slave_new (const char *id); -+GdmSlave * gdm_simple_slave_new (const char *id, -+ gboolean force_active_vt); - - G_END_DECLS - -diff -up gdm-2.26.0/daemon/gdm-slave.c.force-active-vt gdm-2.26.0/daemon/gdm-slave.c ---- gdm-2.26.0/daemon/gdm-slave.c.force-active-vt 2009-02-19 21:45:13.000000000 -0500 -+++ gdm-2.26.0/daemon/gdm-slave.c 2009-03-16 14:29:02.692436090 -0400 -@@ -83,6 +83,7 @@ struct GdmSlavePrivate - char *display_hostname; - gboolean display_is_local; - gboolean display_is_parented; -+ gboolean force_active_vt; - char *display_seat_id; - char *display_x11_authority_file; - char *parent_display_name; -@@ -99,6 +100,7 @@ enum { - PROP_DISPLAY_NUMBER, - PROP_DISPLAY_HOSTNAME, - PROP_DISPLAY_IS_LOCAL, -+ PROP_FORCE_ACTIVE_VT, - PROP_DISPLAY_SEAT_ID, - PROP_DISPLAY_X11_AUTHORITY_FILE - }; -@@ -1164,6 +1166,13 @@ _gdm_slave_set_display_is_local (GdmSlav - } - - static void -+_gdm_slave_set_force_active_vt (GdmSlave *slave, -+ gboolean force_active_vt) -+{ -+ slave->priv->force_active_vt = force_active_vt; -+} -+ -+static void - gdm_slave_set_property (GObject *object, - guint prop_id, - const GValue *value, -@@ -1195,6 +1204,9 @@ gdm_slave_set_property (GObject *ob - case PROP_DISPLAY_IS_LOCAL: - _gdm_slave_set_display_is_local (self, g_value_get_boolean (value)); - break; -+ case PROP_FORCE_ACTIVE_VT: -+ _gdm_slave_set_force_active_vt (self, g_value_get_boolean (value)); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -1233,6 +1245,9 @@ gdm_slave_get_property (GObject *obje - case PROP_DISPLAY_IS_LOCAL: - g_value_set_boolean (value, self->priv->display_is_local); - break; -+ case PROP_FORCE_ACTIVE_VT: -+ g_value_set_boolean (value, self->priv->force_active_vt); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -1358,6 +1373,14 @@ gdm_slave_class_init (GdmSlaveClass *kla - TRUE, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - -+ g_object_class_install_property (object_class, -+ PROP_FORCE_ACTIVE_VT, -+ g_param_spec_boolean ("force-active-vt", -+ "Force Active VT", -+ "Force display to active VT", -+ TRUE, -+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); -+ - signals [STOPPED] = - g_signal_new ("stopped", - G_TYPE_FROM_CLASS (object_class), -diff -up gdm-2.26.0/daemon/gdm-static-display.c.force-active-vt gdm-2.26.0/daemon/gdm-static-display.c ---- gdm-2.26.0/daemon/gdm-static-display.c.force-active-vt 2009-03-11 11:00:52.000000000 -0400 -+++ gdm-2.26.0/daemon/gdm-static-display.c 2009-03-16 14:29:02.693447871 -0400 -@@ -86,10 +86,27 @@ gdm_static_display_remove_user_authoriza - } - - static gboolean -+triggered_to_force_display_on_active_vt (void) -+{ -+ gboolean should_force_display_on_active_vt; -+ -+ should_force_display_on_active_vt = g_file_test (GDM_SPOOL_DIR "/force-display-on-active-vt", -+ G_FILE_TEST_EXISTS); -+ g_unlink (GDM_SPOOL_DIR "/force-display-on-active-vt"); -+ -+ return should_force_display_on_active_vt; -+} -+ -+static gboolean - gdm_static_display_manage (GdmDisplay *display) - { - g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE); - -+ if (triggered_to_force_display_on_active_vt ()) { -+ g_object_set (display, "force-active-vt", TRUE, NULL); -+ } else { -+ g_object_set (display, "force-active-vt", FALSE, NULL); -+ } - GDM_DISPLAY_CLASS (gdm_static_display_parent_class)->manage (display); - - return TRUE; -diff -up gdm-2.26.0/daemon/Makefile.am.force-active-vt gdm-2.26.0/daemon/Makefile.am ---- gdm-2.26.0/daemon/Makefile.am.force-active-vt 2009-02-19 21:45:14.000000000 -0500 -+++ gdm-2.26.0/daemon/Makefile.am 2009-03-16 14:29:58.020476408 -0400 -@@ -14,6 +14,7 @@ AM_CPPFLAGS = \ - -DLOGDIR=\"$(logdir)\" \ - -DSBINDIR=\"$(sbindir)\" \ - -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ -+ -DGDM_SPOOL_DIR=\"$(GDM_SPOOL_DIR)\" \ - -DGDM_XAUTH_DIR=\"$(GDM_XAUTH_DIR)\" \ - -DGDM_SESSION_DEFAULT_PATH=\"$(GDM_SESSION_DEFAULT_PATH)\" \ - $(DISABLE_DEPRECATED_CFLAGS) \ -diff -up gdm-2.26.0/daemon/simple-slave-main.c.force-active-vt gdm-2.26.0/daemon/simple-slave-main.c ---- gdm-2.26.0/daemon/simple-slave-main.c.force-active-vt 2009-03-16 11:59:33.000000000 -0400 -+++ gdm-2.26.0/daemon/simple-slave-main.c 2009-03-16 14:29:02.697437865 -0400 -@@ -174,10 +174,12 @@ main (int argc, - GdmSlave *slave; - static char *display_id = NULL; - static gboolean debug = FALSE; -+ static gboolean force_active_vt = FALSE; - GdmSignalHandler *signal_handler; - static GOptionEntry entries [] = { - { "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL }, - { "display-id", 0, 0, G_OPTION_ARG_STRING, &display_id, N_("Display ID"), N_("id") }, -+ { "force-active-vt", 0, 0, G_OPTION_ARG_NONE, &force_active_vt, N_("Force X to start on active vt"), NULL }, - { NULL } - }; - -@@ -245,7 +247,7 @@ main (int argc, - gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL); - gdm_signal_handler_add (signal_handler, SIGUSR2, signal_cb, NULL); - -- slave = gdm_simple_slave_new (display_id); -+ slave = gdm_simple_slave_new (display_id, force_active_vt); - if (slave == NULL) { - goto out; - } -diff -up gdm-2.26.0/data/Makefile.am.force-active-vt gdm-2.26.0/data/Makefile.am ---- gdm-2.26.0/data/Makefile.am.force-active-vt 2009-02-19 21:45:14.000000000 -0500 -+++ gdm-2.26.0/data/Makefile.am 2009-03-16 14:30:39.953441112 -0400 -@@ -13,6 +13,7 @@ predir = $(gdmconfdir)/PreSession - postlogindir = $(gdmconfdir)/PostLogin - workingdir = $(GDM_WORKING_DIR) - xauthdir = $(GDM_XAUTH_DIR) -+spooldir = $(GDM_SPOOL_DIR) - - Xsession: $(srcdir)/Xsession.in - sed -e 's,[@]XSESSION_SHELL[@],$(XSESSION_SHELL),g' \ -@@ -122,6 +123,7 @@ uninstall-hook: - -rf \ - $(DESTDIR)$(workingdir)/.gconf.mandatory \ - $(DESTDIR)$(xauthdir) -+ $(DESTDIR)$(spooldir) - - install-data-hook: gdm.conf-custom Xsession Init PostSession PreSession gconf.path - if test '!' -d $(DESTDIR)$(gdmconfdir); then \ -@@ -209,6 +211,12 @@ install-data-hook: gdm.conf-custom Xsess - chown root:gdm $(DESTDIR)$(workingdir) || : ; \ - fi - -+ if test '!' -d $(DESTDIR)$(spooldir); then \ -+ $(mkinstalldirs) $(DESTDIR)$(spooldir); \ -+ chmod 775 $(DESTDIR)$(spooldir); \ -+ chown root:gdm $(DESTDIR)$(spooldir) || : ; \ -+ fi -+ - $(INSTALL_DATA) $(srcdir)/gconf.path $(DESTDIR)$(workingdir)/.gconf.path - gconftool-2 --direct --config-source=xml:merged:$(DESTDIR)$(workingdir)/.gconf.mandatory --recursive-unset / - gconftool-2 --direct --config-source=xml:merged:$(DESTDIR)$(workingdir)/.gconf.mandatory --load $(srcdir)/session-setup.entries diff --git a/gdm-2.28.1-move-shutdown-functions.patch b/gdm-2.28.1-move-shutdown-functions.patch deleted file mode 100644 index 9610908..0000000 --- a/gdm-2.28.1-move-shutdown-functions.patch +++ /dev/null @@ -1,1326 +0,0 @@ -commit 7b3be6884096a2d21af3c6c26090641c16988b15 -Merge: f0a0955 4c20614 -Author: Ray Strode -Date: Tue Oct 20 17:56:09 2009 -0400 - - Move Shutdown functions to panel instead of login window - - Robert Ancell gives a good rationale for the move: - "In GDM 2.28/master on startup the user is presented with a window - containing: - - A list of users to log in as with the first user selected - - Two buttons, restart and shutdown, below the user list - - Since the first user is selected, users who are unfamiliar/not paying - close attention sometimes click on the shutdown button as this is placed - where the default action (in this case login) is conventionally placed - (the lower right hand corner of the window). The penalty of making this - mistake is for the computer to shut down immediately with no chance of - aborting this mistake. - - An additional mistake users can make is to miss clicking on their user - and then click on the shutdown button (as this button is replaced with - the login button after selecting a user). - - Recommended behaviour: - - Move the shutdown actions (shutdown, sleep, hibernate, restart) to a - menu on the GDM panel. - - The shutdown buttons do not need to be prominently located as: - - They are used less frequently than the login buttons (normal operation - is to shutdown from within your session). - - Most hardware has a dedicated power button that performs the same - action - - It is better to have them in a location where they are less likely to - be accidentally activated" - - (see https://bugs.gnome.org/596151) - -From e53b45310bc0b83ab14fdfde1cac6e6ea22d82b7 Mon Sep 17 00:00:00 2001 -From: Robert Ancell -Date: Thu, 24 Sep 2009 15:51:10 +1000 -Subject: [PATCH 1/3] Move shutdown buttons to menu in panel (Bug #596151) - ---- - gui/simple-greeter/Makefile.am | 2 +- - gui/simple-greeter/gdm-greeter-login-window.c | 294 --------------------- - gui/simple-greeter/gdm-greeter-login-window.glade | 194 -------------- - gui/simple-greeter/gdm-greeter-panel.c | 263 ++++++++++++++++++- - gui/simple-greeter/gdm-greeter-panel.h | 3 +- - gui/simple-greeter/gdm-greeter-session.c | 4 +- - gui/simple-greeter/test-greeter-panel.c | 2 +- - 7 files changed, 267 insertions(+), 495 deletions(-) - -diff --git a/gui/simple-greeter/Makefile.am b/gui/simple-greeter/Makefile.am -index 4c06bc3..519e652 100644 ---- a/gui/simple-greeter/Makefile.am -+++ b/gui/simple-greeter/Makefile.am -@@ -92,7 +92,6 @@ test_greeter_login_window_LDADD = \ - libgdmuser.la \ - $(COMMON_LIBS) \ - $(SIMPLE_GREETER_LIBS) \ -- $(DEVKIT_POWER_LIBS) \ - $(RBAC_LIBS) \ - $(NULL) - -@@ -144,6 +143,7 @@ test_greeter_panel_LDADD = \ - $(GTK_LIBS) \ - $(GCONF_LIBS) \ - $(LIBXKLAVIER_LIBS) \ -+ $(DEVKIT_POWER_LIBS) \ - $(NULL) - - test_remote_login_window_SOURCES = \ -diff --git a/gui/simple-greeter/gdm-greeter-login-window.c b/gui/simple-greeter/gdm-greeter-login-window.c -index 10a5132..9a29a2e 100644 ---- a/gui/simple-greeter/gdm-greeter-login-window.c -+++ b/gui/simple-greeter/gdm-greeter-login-window.c -@@ -34,11 +34,6 @@ - #include - #include - --#ifdef ENABLE_RBAC_SHUTDOWN --#include --#include --#endif -- - #include - #include - #include -@@ -56,10 +51,6 @@ - #include - #include - --#ifdef HAVE_DEVICEKIT_POWER --#include --#endif -- - #include "gdm-settings-client.h" - #include "gdm-settings-keys.h" - #include "gdm-profile.h" -@@ -90,7 +81,6 @@ - #define KEY_BANNER_MESSAGE_TEXT KEY_GREETER_DIR "/banner_message_text" - #define KEY_BANNER_MESSAGE_TEXT_NOCHOOSER KEY_GREETER_DIR "/banner_message_text_nochooser" - #define KEY_LOGO KEY_GREETER_DIR "/logo_icon_name" --#define KEY_DISABLE_RESTART_BUTTONS KEY_GREETER_DIR "/disable_restart_buttons" - #define GDM_GREETER_LOGIN_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_GREETER_LOGIN_WINDOW, GdmGreeterLoginWindowPrivate)) - - enum { -@@ -125,8 +115,6 @@ struct GdmGreeterLoginWindowPrivate - char *timed_login_username; - guint timed_login_timeout_id; - -- guint sensitize_power_buttons_timeout_id; -- - guint login_button_handler_id; - guint start_session_handler_id; - }; -@@ -353,37 +341,6 @@ sensitize_widget (GdmGreeterLoginWindow *login_window, - } - } - --static gboolean --get_show_restart_buttons (GdmGreeterLoginWindow *login_window) --{ -- gboolean show; -- GError *error; -- -- error = NULL; -- show = ! gconf_client_get_bool (login_window->priv->client, KEY_DISABLE_RESTART_BUTTONS, &error); -- if (error != NULL) { -- g_debug ("GdmGreeterLoginWindow: unable to get disable-restart-buttons configuration: %s", error->message); -- g_error_free (error); -- } -- --#ifdef ENABLE_RBAC_SHUTDOWN -- { -- char *username; -- -- username = g_get_user_name (); -- if (username == NULL || !chkauthattr (RBAC_SHUTDOWN_KEY, username)) { -- show = FALSE; -- g_debug ("GdmGreeterLoginWindow: Not showing stop/restart buttons for user %s due to RBAC key %s", -- username, RBAC_SHUTDOWN_KEY); -- } else { -- g_debug ("GdmGreeterLoginWindow: Showing stop/restart buttons for user %s due to RBAC key %s", -- username, RBAC_SHUTDOWN_KEY); -- } -- } --#endif -- return show; --} -- - static void - on_login_button_clicked_answer_query (GtkButton *button, - GdmGreeterLoginWindow *login_window) -@@ -477,61 +434,6 @@ adjust_other_login_visibility(GdmGreeterLoginWindow *login_window) - } - } - --#ifdef HAVE_DEVICEKIT_POWER --static gboolean --can_suspend (GdmGreeterLoginWindow *login_window) --{ -- gboolean ret; -- DkpClient *dkp_client; -- -- /* use DeviceKit-power to get data */ -- dkp_client = dkp_client_new (); -- g_object_get (dkp_client, -- "can-suspend", &ret, -- NULL); -- g_object_unref (dkp_client); -- return ret; --} --#endif -- --static void --remove_sensitize_power_buttons_timeout (GdmGreeterLoginWindow *login_window) --{ -- if (login_window->priv->sensitize_power_buttons_timeout_id > 0) { -- g_source_remove (login_window->priv->sensitize_power_buttons_timeout_id); -- login_window->priv->sensitize_power_buttons_timeout_id = 0; -- } --} -- --static gboolean --sensitize_power_buttons_timeout (GdmGreeterLoginWindow *login_window) --{ -- switch (login_window->priv->dialog_mode) { -- case MODE_SELECTION: -- sensitize_widget (login_window, "shutdown-button", TRUE); -- sensitize_widget (login_window, "restart-button", TRUE); -- sensitize_widget (login_window, "suspend-button", TRUE); -- sensitize_widget (login_window, "disconnect-button", TRUE); -- break; -- case MODE_AUTHENTICATION: -- break; -- default: -- g_assert_not_reached (); -- } -- -- login_window->priv->sensitize_power_buttons_timeout_id = 0; -- return FALSE; --} -- --static void --add_sensitize_power_buttons_timeout (GdmGreeterLoginWindow *login_window) --{ -- remove_sensitize_power_buttons_timeout (login_window); -- login_window->priv->sensitize_power_buttons_timeout_id = g_timeout_add_seconds (1, -- (GSourceFunc)sensitize_power_buttons_timeout, -- login_window); --} -- - static void - switch_mode (GdmGreeterLoginWindow *login_window, - int number) -@@ -539,16 +441,6 @@ switch_mode (GdmGreeterLoginWindow *login_window, - const char *default_name; - GtkWidget *user_chooser; - GtkWidget *box; -- gboolean show_restart_buttons; -- gboolean show_suspend_button; -- -- show_restart_buttons = get_show_restart_buttons (login_window); -- --#ifdef HAVE_DEVICEKIT_POWER -- show_suspend_button = can_suspend (login_window); --#else -- show_suspend_button = FALSE; --#endif - - /* we want to run this even if we're supposed to - be in the mode already so that we reset everything -@@ -557,38 +449,20 @@ switch_mode (GdmGreeterLoginWindow *login_window, - - default_name = NULL; - -- remove_sensitize_power_buttons_timeout (login_window); -- - switch (number) { - case MODE_SELECTION: - set_log_in_button_mode (login_window, LOGIN_BUTTON_HIDDEN); - - show_widget (login_window, "cancel-button", FALSE); - -- show_widget (login_window, "shutdown-button", -- login_window->priv->display_is_local && show_restart_buttons); -- show_widget (login_window, "restart-button", -- login_window->priv->display_is_local && show_restart_buttons); -- show_widget (login_window, "suspend-button", -- login_window->priv->display_is_local && show_restart_buttons && show_suspend_button); -- show_widget (login_window, "disconnect-button", -- ! login_window->priv->display_is_local); -- - show_widget (login_window, "auth-input-box", FALSE); - -- add_sensitize_power_buttons_timeout (login_window); -- sensitize_widget (login_window, "shutdown-button", FALSE); -- sensitize_widget (login_window, "restart-button", FALSE); -- sensitize_widget (login_window, "suspend-button", FALSE); - sensitize_widget (login_window, "disconnect-button", FALSE); - - default_name = NULL; - break; - case MODE_AUTHENTICATION: - show_widget (login_window, "cancel-button", TRUE); -- show_widget (login_window, "shutdown-button", FALSE); -- show_widget (login_window, "restart-button", FALSE); -- show_widget (login_window, "suspend-button", FALSE); - show_widget (login_window, "disconnect-button", FALSE); - default_name = "log-in-button"; - break; -@@ -629,32 +503,6 @@ switch_mode (GdmGreeterLoginWindow *login_window, - } - - static void --do_disconnect (GdmGreeterLoginWindow *login_window) --{ -- gtk_main_quit (); --} -- --#ifdef HAVE_DEVICEKIT_POWER --static void --do_suspend (GdmGreeterLoginWindow *login_window) --{ -- gboolean ret; -- DkpClient *dkp_client; -- GError *error = NULL; -- -- /* use DeviceKit-power to get data */ -- dkp_client = dkp_client_new (); -- ret = dkp_client_suspend (dkp_client, &error); -- if (!ret) { -- g_warning ("Couldn't suspend: %s", error->message); -- g_error_free (error); -- return; -- } -- g_object_unref (dkp_client); --} --#endif -- --static void - delete_entry_text (GtkWidget *entry) - { - const char *typed_text; -@@ -968,16 +816,6 @@ gdm_greeter_login_window_get_property (GObject *object, - } - - static void --suspend_button_clicked (GtkButton *button, -- GdmGreeterLoginWindow *login_window) --{ --#ifdef HAVE_DEVICEKIT_POWER -- do_suspend (login_window); --#endif --} -- -- --static void - cancel_button_clicked (GtkButton *button, - GdmGreeterLoginWindow *login_window) - { -@@ -985,125 +823,6 @@ cancel_button_clicked (GtkButton *button, - } - - static void --disconnect_button_clicked (GtkButton *button, -- GdmGreeterLoginWindow *login_window) --{ -- do_disconnect (login_window); --} -- --static gboolean --try_system_stop (DBusGConnection *connection, -- GError **error) --{ -- DBusGProxy *proxy; -- gboolean res; -- -- g_debug ("GdmGreeterLoginWindow: trying to stop system"); -- -- proxy = dbus_g_proxy_new_for_name (connection, -- CK_NAME, -- CK_MANAGER_PATH, -- CK_MANAGER_INTERFACE); -- res = dbus_g_proxy_call_with_timeout (proxy, -- "Stop", -- INT_MAX, -- error, -- /* parameters: */ -- G_TYPE_INVALID, -- /* return values: */ -- G_TYPE_INVALID); -- return res; --} -- --static gboolean --try_system_restart (DBusGConnection *connection, -- GError **error) --{ -- DBusGProxy *proxy; -- gboolean res; -- -- g_debug ("GdmGreeterLoginWindow: trying to restart system"); -- -- proxy = dbus_g_proxy_new_for_name (connection, -- CK_NAME, -- CK_MANAGER_PATH, -- CK_MANAGER_INTERFACE); -- res = dbus_g_proxy_call_with_timeout (proxy, -- "Restart", -- INT_MAX, -- error, -- /* parameters: */ -- G_TYPE_INVALID, -- /* return values: */ -- G_TYPE_INVALID); -- return res; --} -- --static void --do_system_restart (GdmGreeterLoginWindow *login_window) --{ -- gboolean res; -- GError *error; -- DBusGConnection *connection; -- -- error = NULL; -- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); -- if (connection == NULL) { -- g_warning ("Unable to get system bus connection: %s", error->message); -- g_error_free (error); -- return; -- } -- -- res = try_system_restart (connection, &error); -- if (!res) { -- g_debug ("GdmGreeterLoginWindow: unable to restart system: %s: %s", -- dbus_g_error_get_name (error), -- error->message); -- g_error_free (error); -- } --} -- --static void --do_system_stop (GdmGreeterLoginWindow *login_window) --{ -- gboolean res; -- GError *error; -- DBusGConnection *connection; -- -- error = NULL; -- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); -- if (connection == NULL) { -- g_warning ("Unable to get system bus connection: %s", error->message); -- g_error_free (error); -- return; -- } -- -- res = try_system_stop (connection, &error); -- if (!res) { -- g_debug ("GdmGreeterLoginWindow: unable to stop system: %s: %s", -- dbus_g_error_get_name (error), -- error->message); -- g_error_free (error); -- } --} -- --static void --restart_button_clicked (GtkButton *button, -- GdmGreeterLoginWindow *login_window) --{ -- g_debug ("GdmGreeterLoginWindow: restart button clicked"); -- do_system_restart (login_window); --} -- --static void --shutdown_button_clicked (GtkButton *button, -- GdmGreeterLoginWindow *login_window) --{ -- g_debug ("GdmGreeterLoginWindow: stop button clicked"); -- do_system_stop (login_window); --} -- --static void - on_user_chooser_visibility_changed (GdmGreeterLoginWindow *login_window) - { - update_banner_message (login_window); -@@ -1400,20 +1119,9 @@ load_theme (GdmGreeterLoginWindow *login_window) - login_window->priv->auth_banner_label = glade_xml_get_widget (login_window->priv->xml, "auth-banner-label"); - /*make_label_small_italic (login_window->priv->auth_banner_label);*/ - -- button = glade_xml_get_widget (login_window->priv->xml, "suspend-button"); -- g_signal_connect (button, "clicked", G_CALLBACK (suspend_button_clicked), login_window); -- - button = glade_xml_get_widget (login_window->priv->xml, "cancel-button"); - g_signal_connect (button, "clicked", G_CALLBACK (cancel_button_clicked), login_window); - -- button = glade_xml_get_widget (login_window->priv->xml, "disconnect-button"); -- g_signal_connect (button, "clicked", G_CALLBACK (disconnect_button_clicked), login_window); -- -- button = glade_xml_get_widget (login_window->priv->xml, "restart-button"); -- g_signal_connect (button, "clicked", G_CALLBACK (restart_button_clicked), login_window); -- button = glade_xml_get_widget (login_window->priv->xml, "shutdown-button"); -- g_signal_connect (button, "clicked", G_CALLBACK (shutdown_button_clicked), login_window); -- - entry = glade_xml_get_widget (login_window->priv->xml, "auth-prompt-entry"); - /* Only change the invisible character if it '*' otherwise assume it is OK */ - if ('*' == gtk_entry_get_invisible_char (GTK_ENTRY (entry))) { -@@ -1780,8 +1488,6 @@ gdm_greeter_login_window_finalize (GObject *object) - g_object_unref (login_window->priv->client); - } - -- remove_sensitize_power_buttons_timeout (login_window); -- - G_OBJECT_CLASS (gdm_greeter_login_window_parent_class)->finalize (object); - } - -diff --git a/gui/simple-greeter/gdm-greeter-login-window.glade b/gui/simple-greeter/gdm-greeter-login-window.glade -index d972c82..7c6e94b 100644 ---- a/gui/simple-greeter/gdm-greeter-login-window.glade -+++ b/gui/simple-greeter/gdm-greeter-login-window.glade -@@ -337,200 +337,6 @@ - 6 - - -- -- True -- True -- gtk-disconnect -- True -- GTK_RELIEF_NORMAL -- True -- -- -- -- -- -- True -- True -- True -- True -- GTK_RELIEF_NORMAL -- True -- -- -- -- True -- False -- 0 -- -- -- -- True -- media-playback-pause -- 16 -- 0.5 -- 0.5 -- 0 -- 0 -- -- -- 0 -- True -- True -- -- -- -- -- -- True -- Suspend -- False -- False -- GTK_JUSTIFY_LEFT -- False -- False -- 0 -- 0.5 -- 0 -- 0 -- PANGO_ELLIPSIZE_NONE -- -1 -- False -- 0 -- -- -- 0 -- True -- True -- -- -- -- -- -- -- -- -- -- True -- True -- True -- True -- GTK_RELIEF_NORMAL -- True -- -- -- -- True -- False -- 0 -- -- -- -- True -- view-refresh -- 16 -- 0.5 -- 0.5 -- 0 -- 0 -- -- -- 0 -- True -- True -- -- -- -- -- -- True -- Restart -- False -- False -- GTK_JUSTIFY_LEFT -- False -- False -- 0 -- 0.5 -- 0 -- 0 -- PANGO_ELLIPSIZE_NONE -- -1 -- False -- 0 -- -- -- 0 -- True -- True -- -- -- -- -- -- -- -- -- -- True -- True -- True -- True -- GTK_RELIEF_NORMAL -- True -- -- -- -- True -- False -- 0 -- -- -- -- True -- system-shutdown -- 16 -- 0.5 -- 0.5 -- 0 -- 0 -- -- -- 0 -- True -- True -- -- -- -- -- -- True -- Shut Down -- False -- False -- GTK_JUSTIFY_LEFT -- False -- False -- 0.5 -- 0.5 -- 0 -- 0 -- PANGO_ELLIPSIZE_NONE -- -1 -- False -- 0 -- -- -- 0 -- True -- True -- -- -- -- -- -- -- -- - - True - True -diff --git a/gui/simple-greeter/gdm-greeter-panel.c b/gui/simple-greeter/gdm-greeter-panel.c -index dbdef29..dd0cb32 100644 ---- a/gui/simple-greeter/gdm-greeter-panel.c -+++ b/gui/simple-greeter/gdm-greeter-panel.c -@@ -27,12 +27,22 @@ - #include - #include - -+#ifdef ENABLE_RBAC_SHUTDOWN -+#include -+#include -+#endif -+ - #include - #include - #include - #include - - #include -+#include -+ -+#ifdef HAVE_DEVICEKIT_POWER -+#include -+#endif - - #include "gdm-languages.h" - #include "gdm-layouts.h" -@@ -46,6 +56,16 @@ - - #include "na-tray.h" - -+#define CK_NAME "org.freedesktop.ConsoleKit" -+#define CK_MANAGER_PATH "/org/freedesktop/ConsoleKit/Manager" -+#define CK_MANAGER_INTERFACE "org.freedesktop.ConsoleKit.Manager" -+ -+#define GPM_DBUS_NAME "org.freedesktop.PowerManagement" -+#define GPM_DBUS_PATH "/org/freedesktop/PowerManagement" -+#define GPM_DBUS_INTERFACE "org.freedesktop.PowerManagement" -+ -+#define KEY_DISABLE_RESTART_BUTTONS "/apps/gdm/simple-greeter/disable_restart_buttons" -+ - #define GDM_GREETER_PANEL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_GREETER_PANEL, GdmGreeterPanelPrivate)) - - struct GdmGreeterPanelPrivate -@@ -66,11 +86,15 @@ struct GdmGreeterPanelPrivate - - char *default_session_name; - char *default_language_name; -+ -+ GConfClient *client; -+ guint display_is_local : 1; - }; - - enum { - PROP_0, -- PROP_MONITOR -+ PROP_MONITOR, -+ PROP_DISPLAY_IS_LOCAL - }; - - enum { -@@ -107,6 +131,13 @@ gdm_greeter_panel_set_monitor (GdmGreeterPanel *panel, - } - - static void -+_gdm_greeter_panel_set_display_is_local (GdmGreeterPanel *panel, -+ gboolean is) -+{ -+ panel->priv->display_is_local = is; -+} -+ -+static void - gdm_greeter_panel_set_property (GObject *object, - guint prop_id, - const GValue *value, -@@ -120,6 +151,9 @@ gdm_greeter_panel_set_property (GObject *object, - case PROP_MONITOR: - gdm_greeter_panel_set_monitor (self, g_value_get_int (value)); - break; -+ case PROP_DISPLAY_IS_LOCAL: -+ _gdm_greeter_panel_set_display_is_local (self, g_value_get_boolean (value)); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -140,6 +174,9 @@ gdm_greeter_panel_get_property (GObject *object, - case PROP_MONITOR: - g_value_set_int (value, self->priv->monitor); - break; -+ case PROP_DISPLAY_IS_LOCAL: -+ g_value_set_boolean (value, self->priv->display_is_local); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -477,6 +514,13 @@ gdm_greeter_panel_class_init (GdmGreeterPanelClass *klass) - G_MAXINT, - 0, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); -+ g_object_class_install_property (object_class, -+ PROP_DISPLAY_IS_LOCAL, -+ g_param_spec_boolean ("display-is-local", -+ "display is local", -+ "display is local", -+ FALSE, -+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - g_type_class_add_private (klass, sizeof (GdmGreeterPanelPrivate)); - } -@@ -563,11 +607,185 @@ on_animation_tick (GdmGreeterPanel *panel, - gtk_widget_queue_resize (GTK_WIDGET (panel)); - } - -+static gboolean -+try_system_stop (DBusGConnection *connection, -+ GError **error) -+{ -+ DBusGProxy *proxy; -+ gboolean res; -+ -+ g_debug ("GdmGreeterPanel: trying to stop system"); -+ -+ proxy = dbus_g_proxy_new_for_name (connection, -+ CK_NAME, -+ CK_MANAGER_PATH, -+ CK_MANAGER_INTERFACE); -+ res = dbus_g_proxy_call_with_timeout (proxy, -+ "Stop", -+ INT_MAX, -+ error, -+ /* parameters: */ -+ G_TYPE_INVALID, -+ /* return values: */ -+ G_TYPE_INVALID); -+ return res; -+} -+ -+static gboolean -+try_system_restart (DBusGConnection *connection, -+ GError **error) -+{ -+ DBusGProxy *proxy; -+ gboolean res; -+ -+ g_debug ("GdmGreeterPanel: trying to restart system"); -+ -+ proxy = dbus_g_proxy_new_for_name (connection, -+ CK_NAME, -+ CK_MANAGER_PATH, -+ CK_MANAGER_INTERFACE); -+ res = dbus_g_proxy_call_with_timeout (proxy, -+ "Restart", -+ INT_MAX, -+ error, -+ /* parameters: */ -+ G_TYPE_INVALID, -+ /* return values: */ -+ G_TYPE_INVALID); -+ return res; -+} -+ -+static gboolean -+can_suspend (void) -+{ -+ gboolean ret = FALSE; -+ -+#ifdef HAVE_DEVICEKIT_POWER -+ DkpClient *dkp_client; -+ -+ /* use DeviceKit-power to get data */ -+ dkp_client = dkp_client_new (); -+ g_object_get (dkp_client, -+ "can-suspend", &ret, -+ NULL); -+ g_object_unref (dkp_client); -+#endif -+ -+ return ret; -+} -+ -+static void -+do_system_suspend (void) -+{ -+#ifdef HAVE_DEVICEKIT_POWER -+ gboolean ret; -+ DkpClient *dkp_client; -+ GError *error = NULL; -+ -+ /* use DeviceKit-power to get data */ -+ dkp_client = dkp_client_new (); -+ ret = dkp_client_suspend (dkp_client, &error); -+ if (!ret) { -+ g_warning ("Couldn't suspend: %s", error->message); -+ g_error_free (error); -+ return; -+ } -+ g_object_unref (dkp_client); -+#endif -+} -+ -+static void -+do_system_restart (void) -+{ -+ gboolean res; -+ GError *error; -+ DBusGConnection *connection; -+ -+ error = NULL; -+ connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); -+ if (connection == NULL) { -+ g_warning ("Unable to get system bus connection: %s", error->message); -+ g_error_free (error); -+ return; -+ } -+ -+ res = try_system_restart (connection, &error); -+ if (!res) { -+ g_debug ("GdmGreeterPanel: unable to restart system: %s: %s", -+ dbus_g_error_get_name (error), -+ error->message); -+ g_error_free (error); -+ } -+} -+ -+static void -+do_system_stop (void) -+{ -+ gboolean res; -+ GError *error; -+ DBusGConnection *connection; -+ -+ error = NULL; -+ connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); -+ if (connection == NULL) { -+ g_warning ("Unable to get system bus connection: %s", error->message); -+ g_error_free (error); -+ return; -+ } -+ -+ res = try_system_stop (connection, &error); -+ if (!res) { -+ g_debug ("GdmGreeterPanel: unable to stop system: %s: %s", -+ dbus_g_error_get_name (error), -+ error->message); -+ g_error_free (error); -+ } -+} -+ -+static void -+do_disconnect (void) -+{ -+ gtk_main_quit (); -+} -+ -+static gboolean -+get_show_restart_buttons (GdmGreeterPanel *panel) -+{ -+ gboolean show; -+ GError *error; -+ -+ error = NULL; -+ show = ! gconf_client_get_bool (panel->priv->client, KEY_DISABLE_RESTART_BUTTONS, &error); -+ if (error != NULL) { -+ g_debug ("GdmGreeterPanel: unable to get disable-restart-buttons configuration: %s", error->message); -+ g_error_free (error); -+ } -+ -+#ifdef ENABLE_RBAC_SHUTDOWN -+ { -+ char *username; -+ -+ username = g_get_user_name (); -+ if (username == NULL || !chkauthattr (RBAC_SHUTDOWN_KEY, username)) { -+ show = FALSE; -+ g_debug ("GdmGreeterPanel: Not showing stop/restart buttons for user %s due to RBAC key %s", -+ username, RBAC_SHUTDOWN_KEY); -+ } else { -+ g_debug ("GdmGreeterPanel: Showing stop/restart buttons for user %s due to RBAC key %s", -+ username, RBAC_SHUTDOWN_KEY); -+ } -+ } -+#endif -+ return show; -+} -+ - static void - gdm_greeter_panel_init (GdmGreeterPanel *panel) - { - NaTray *tray; - GtkWidget *spacer; -+ GtkWidget *shutdown_menu; -+ GtkWidget *menu, *menu_item; - - gdm_profile_start (NULL); - -@@ -603,6 +821,8 @@ gdm_greeter_panel_init (GdmGreeterPanel *panel) - spacer = gtk_label_new (""); - gtk_box_pack_start (GTK_BOX (panel->priv->option_hbox), spacer, TRUE, TRUE, 6); - gtk_widget_show (spacer); -+ -+ panel->priv->client = gconf_client_get_default (); - - gdm_profile_start ("creating option widget"); - panel->priv->language_option_widget = gdm_language_option_widget_new (); -@@ -642,6 +862,42 @@ gdm_greeter_panel_init (GdmGreeterPanel *panel) - gtk_widget_show (panel->priv->hostname_label); - } - -+ if (panel->priv->display_is_local || get_show_restart_buttons (panel)) { -+ shutdown_menu = gtk_menu_bar_new (); -+ -+ menu_item = gtk_image_menu_item_new (); -+ menu = gtk_menu_new (); -+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu); -+ gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menu_item), TRUE); -+ gtk_menu_item_set_label (GTK_MENU_ITEM (menu_item), ""); -+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), -+ gtk_image_new_from_icon_name ("system-shutdown", GTK_ICON_SIZE_BUTTON)); -+ gtk_menu_shell_append (GTK_MENU_SHELL (shutdown_menu), menu_item); -+ -+ if (panel->priv->display_is_local) { -+ menu_item = gtk_menu_item_new_with_label ("Disconnect"); -+ g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_disconnect), NULL); -+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); -+ } else { -+ if (can_suspend ()) { -+ menu_item = gtk_menu_item_new_with_label ("Suspend"); -+ g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_suspend), NULL); -+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); -+ } -+ -+ menu_item = gtk_menu_item_new_with_label ("Restart"); -+ g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_restart), NULL); -+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); -+ -+ menu_item = gtk_menu_item_new_with_label ("Shut Down"); -+ g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_stop), NULL); -+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); -+ } -+ -+ gtk_box_pack_end (GTK_BOX (panel->priv->hbox), GTK_WIDGET (shutdown_menu), FALSE, FALSE, 0); -+ gtk_widget_show_all (GTK_WIDGET (shutdown_menu)); -+ } -+ - panel->priv->clock = gdm_clock_widget_new (); - gtk_box_pack_end (GTK_BOX (panel->priv->hbox), - GTK_WIDGET (panel->priv->clock), FALSE, FALSE, 6); -@@ -651,7 +907,6 @@ gdm_greeter_panel_init (GdmGreeterPanel *panel) - GTK_ORIENTATION_HORIZONTAL); - gtk_box_pack_end (GTK_BOX (panel->priv->hbox), GTK_WIDGET (tray), FALSE, FALSE, 6); - gtk_widget_show (GTK_WIDGET (tray)); -- - gdm_greeter_panel_hide_user_options (panel); - - panel->priv->progress = 0.0; -@@ -684,13 +939,15 @@ gdm_greeter_panel_finalize (GObject *object) - - GtkWidget * - gdm_greeter_panel_new (GdkScreen *screen, -- int monitor) -+ int monitor, -+ gboolean is_local) - { - GObject *object; - - object = g_object_new (GDM_TYPE_GREETER_PANEL, - "screen", screen, - "monitor", monitor, -+ "display-is-local", is_local, - NULL); - - return GTK_WIDGET (object); -diff --git a/gui/simple-greeter/gdm-greeter-panel.h b/gui/simple-greeter/gdm-greeter-panel.h -index 1e637f5..625c80d 100644 ---- a/gui/simple-greeter/gdm-greeter-panel.h -+++ b/gui/simple-greeter/gdm-greeter-panel.h -@@ -60,7 +60,8 @@ typedef struct - GType gdm_greeter_panel_get_type (void); - - GtkWidget * gdm_greeter_panel_new (GdkScreen *screen, -- int monitor); -+ int monitor, -+ gboolean is_local); - - void gdm_greeter_panel_show_user_options (GdmGreeterPanel *panel); - void gdm_greeter_panel_hide_user_options (GdmGreeterPanel *panel); -diff --git a/gui/simple-greeter/gdm-greeter-session.c b/gui/simple-greeter/gdm-greeter-session.c -index 167b693..e7d206a 100644 ---- a/gui/simple-greeter/gdm-greeter-session.c -+++ b/gui/simple-greeter/gdm-greeter-session.c -@@ -332,13 +332,15 @@ toggle_panel (GdmGreeterSession *session, - GdkScreen *screen; - int monitor; - int x, y; -+ gboolean is_local; - - display = gdk_display_get_default (); - gdk_display_get_pointer (display, &screen, &x, &y, NULL); - - monitor = get_tallest_monitor_at_point (screen, x, y); - -- session->priv->panel = gdm_greeter_panel_new (screen, monitor); -+ is_local = gdm_greeter_client_get_display_is_local (session->priv->client); -+ session->priv->panel = gdm_greeter_panel_new (screen, monitor, is_local); - - g_signal_connect_swapped (session->priv->panel, - "language-selected", -diff --git a/gui/simple-greeter/test-greeter-panel.c b/gui/simple-greeter/test-greeter-panel.c -index 80ef0a9..86adae3 100644 ---- a/gui/simple-greeter/test-greeter-panel.c -+++ b/gui/simple-greeter/test-greeter-panel.c -@@ -53,7 +53,7 @@ main (int argc, char *argv[]) - gdk_display_get_pointer (display, &screen, &x, &y, NULL); - monitor = gdk_screen_get_monitor_at_point (screen, x, y); - -- panel = gdm_greeter_panel_new (screen, monitor); -+ panel = gdm_greeter_panel_new (screen, monitor, TRUE); - gdm_greeter_panel_show_user_options (GDM_GREETER_PANEL (panel)); - - gtk_widget_show (panel); --- -1.6.5.rc2 - - -From 4ee17e4732cbdc4c91e93da732de6849c4f95a86 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Tue, 20 Oct 2009 17:06:58 -0400 -Subject: [PATCH 2/3] Use button instead of menu bar - -The menu bar isn't a great fit for the panel ---- - gui/simple-greeter/gdm-greeter-panel.c | 81 +++++++++++++++++++++++++------- - 1 files changed, 64 insertions(+), 17 deletions(-) - -diff --git a/gui/simple-greeter/gdm-greeter-panel.c b/gui/simple-greeter/gdm-greeter-panel.c -index dd0cb32..d5dd820 100644 ---- a/gui/simple-greeter/gdm-greeter-panel.c -+++ b/gui/simple-greeter/gdm-greeter-panel.c -@@ -77,6 +77,8 @@ struct GdmGreeterPanelPrivate - GtkWidget *option_hbox; - GtkWidget *hostname_label; - GtkWidget *clock; -+ GtkWidget *shutdown_button; -+ GtkWidget *shutdown_menu; - GtkWidget *language_option_widget; - GtkWidget *layout_option_widget; - GtkWidget *session_option_widget; -@@ -780,12 +782,48 @@ get_show_restart_buttons (GdmGreeterPanel *panel) - } - - static void -+position_shutdown_menu (GtkMenu *menu, -+ int *x, -+ int *y, -+ gboolean *push_in, -+ GdmGreeterPanel *panel) -+{ -+ GtkRequisition menu_requisition; -+ -+ *push_in = TRUE; -+ -+ *x = panel->priv->shutdown_button->allocation.x; -+ gtk_window_get_position (GTK_WINDOW (panel), NULL, y); -+ -+ gtk_widget_size_request (GTK_WIDGET (menu), &menu_requisition); -+ -+ *y -= menu_requisition.height; -+} -+ -+static void -+on_shutdown_button_toggled (GdmGreeterPanel *panel) -+{ -+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (panel->priv->shutdown_button))) { -+ gtk_menu_popup (GTK_MENU (panel->priv->shutdown_menu), NULL, NULL, -+ (GtkMenuPositionFunc) position_shutdown_menu, -+ panel, 0, 0); -+ } else { -+ gtk_menu_popdown (GTK_MENU (panel->priv->shutdown_menu)); -+ } -+} -+ -+static void -+on_shutdown_menu_deactivate (GdmGreeterPanel *panel) -+{ -+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (panel->priv->shutdown_button), -+ FALSE); -+} -+ -+static void - gdm_greeter_panel_init (GdmGreeterPanel *panel) - { - NaTray *tray; - GtkWidget *spacer; -- GtkWidget *shutdown_menu; -- GtkWidget *menu, *menu_item; - - gdm_profile_start (NULL); - -@@ -863,39 +901,48 @@ gdm_greeter_panel_init (GdmGreeterPanel *panel) - } - - if (panel->priv->display_is_local || get_show_restart_buttons (panel)) { -- shutdown_menu = gtk_menu_bar_new (); -+ GtkWidget *menu_item; -+ GtkWidget *image; -+ -+ panel->priv->shutdown_button = gtk_toggle_button_new (); -+ gtk_button_set_relief (GTK_BUTTON (panel->priv->shutdown_button), -+ GTK_RELIEF_NONE); -+ -+ panel->priv->shutdown_menu = gtk_menu_new (); -+ gtk_menu_attach_to_widget (GTK_MENU (panel->priv->shutdown_menu), -+ panel->priv->shutdown_button, NULL); -+ g_signal_connect_swapped (panel->priv->shutdown_button, "toggled", -+ G_CALLBACK (on_shutdown_button_toggled), panel); -+ g_signal_connect_swapped (panel->priv->shutdown_menu, "deactivate", -+ G_CALLBACK (on_shutdown_menu_deactivate), panel); - -- menu_item = gtk_image_menu_item_new (); -- menu = gtk_menu_new (); -- gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu); -- gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menu_item), TRUE); -- gtk_menu_item_set_label (GTK_MENU_ITEM (menu_item), ""); -- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), -- gtk_image_new_from_icon_name ("system-shutdown", GTK_ICON_SIZE_BUTTON)); -- gtk_menu_shell_append (GTK_MENU_SHELL (shutdown_menu), menu_item); -+ image = gtk_image_new_from_icon_name ("system-shutdown", GTK_ICON_SIZE_BUTTON); -+ gtk_widget_show (image); -+ gtk_container_add (GTK_CONTAINER (panel->priv->shutdown_button), image); - - if (panel->priv->display_is_local) { - menu_item = gtk_menu_item_new_with_label ("Disconnect"); - g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_disconnect), NULL); -- gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); -+ gtk_menu_shell_append (GTK_MENU_SHELL (panel->priv->shutdown_menu), menu_item); - } else { - if (can_suspend ()) { - menu_item = gtk_menu_item_new_with_label ("Suspend"); - g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_suspend), NULL); -- gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); -+ gtk_menu_shell_append (GTK_MENU_SHELL (panel->priv->shutdown_menu), menu_item); - } - - menu_item = gtk_menu_item_new_with_label ("Restart"); - g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_restart), NULL); -- gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); -+ gtk_menu_shell_append (GTK_MENU_SHELL (panel->priv->shutdown_menu), menu_item); - - menu_item = gtk_menu_item_new_with_label ("Shut Down"); - g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_stop), NULL); -- gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); -+ gtk_menu_shell_append (GTK_MENU_SHELL (panel->priv->shutdown_menu), menu_item); - } - -- gtk_box_pack_end (GTK_BOX (panel->priv->hbox), GTK_WIDGET (shutdown_menu), FALSE, FALSE, 0); -- gtk_widget_show_all (GTK_WIDGET (shutdown_menu)); -+ gtk_box_pack_end (GTK_BOX (panel->priv->hbox), GTK_WIDGET (panel->priv->shutdown_button), FALSE, FALSE, 0); -+ gtk_widget_show_all (panel->priv->shutdown_menu); -+ gtk_widget_show_all (GTK_WIDGET (panel->priv->shutdown_button)); - } - - panel->priv->clock = gdm_clock_widget_new (); --- -1.6.5.rc2 - - -From 4c206142ddb22315d9beb42eae9d868f449bdf11 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Tue, 20 Oct 2009 17:23:15 -0400 -Subject: [PATCH 3/3] Mark Shutdown, Restart, and Suspend for translation - ---- - gui/simple-greeter/gdm-greeter-panel.c | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/gui/simple-greeter/gdm-greeter-panel.c b/gui/simple-greeter/gdm-greeter-panel.c -index d5dd820..016f636 100644 ---- a/gui/simple-greeter/gdm-greeter-panel.c -+++ b/gui/simple-greeter/gdm-greeter-panel.c -@@ -926,16 +926,16 @@ gdm_greeter_panel_init (GdmGreeterPanel *panel) - gtk_menu_shell_append (GTK_MENU_SHELL (panel->priv->shutdown_menu), menu_item); - } else { - if (can_suspend ()) { -- menu_item = gtk_menu_item_new_with_label ("Suspend"); -+ menu_item = gtk_menu_item_new_with_label (_("Suspend")); - g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_suspend), NULL); - gtk_menu_shell_append (GTK_MENU_SHELL (panel->priv->shutdown_menu), menu_item); - } - -- menu_item = gtk_menu_item_new_with_label ("Restart"); -+ menu_item = gtk_menu_item_new_with_label (_("Restart")); - g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_restart), NULL); - gtk_menu_shell_append (GTK_MENU_SHELL (panel->priv->shutdown_menu), menu_item); - -- menu_item = gtk_menu_item_new_with_label ("Shut Down"); -+ menu_item = gtk_menu_item_new_with_label (_("Shut Down")); - g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_stop), NULL); - gtk_menu_shell_append (GTK_MENU_SHELL (panel->priv->shutdown_menu), menu_item); - } --- -1.6.5.rc2 - -From 7fbb5c0dec8aa42b1d8985c6f62be02c035175da Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Mon, 26 Oct 2009 15:00:43 -0400 -Subject: [PATCH] Position shutdown menu better in multi-monitor displays - ---- - gui/simple-greeter/gdm-greeter-panel.c | 13 ++++++++++++- - 1 files changed, 12 insertions(+), 1 deletions(-) - -diff --git a/gui/simple-greeter/gdm-greeter-panel.c b/gui/simple-greeter/gdm-greeter-panel.c -index 43b91d5..caade7a 100644 ---- a/gui/simple-greeter/gdm-greeter-panel.c -+++ b/gui/simple-greeter/gdm-greeter-panel.c -@@ -790,10 +790,21 @@ position_shutdown_menu (GtkMenu *menu, - GdmGreeterPanel *panel) - { - GtkRequisition menu_requisition; -+ GdkScreen *screen; -+ int monitor; - - *push_in = TRUE; - -- *x = panel->priv->shutdown_button->allocation.x; -+ screen = gtk_widget_get_screen (GTK_WIDGET (panel)); -+ monitor = gdk_screen_get_monitor_at_window (screen, GTK_WIDGET (panel)->window); -+ gtk_menu_set_monitor (menu, monitor); -+ -+ gtk_widget_translate_coordinates (GTK_WIDGET (panel->priv->shutdown_button), -+ GTK_WIDGET (panel), -+ panel->priv->shutdown_button->allocation.x, -+ panel->priv->shutdown_button->allocation.y, -+ x, y); -+ - gtk_window_get_position (GTK_WINDOW (panel), NULL, y); - - gtk_widget_size_request (GTK_WIDGET (menu), &menu_requisition); --- -1.6.5.1 - diff --git a/gdm-2.29.1-force-active-vt.patch b/gdm-2.29.1-force-active-vt.patch new file mode 100644 index 0000000..04cc810 --- /dev/null +++ b/gdm-2.29.1-force-active-vt.patch @@ -0,0 +1,432 @@ +diff -up gdm-2.29.1/configure.ac.force-active-vt gdm-2.29.1/configure.ac +--- gdm-2.29.1/configure.ac.force-active-vt 2009-11-30 17:23:11.000000000 -0500 ++++ gdm-2.29.1/configure.ac 2009-12-02 23:31:13.064009409 -0500 +@@ -1254,6 +1254,23 @@ AC_SUBST(GDM_SCREENSHOT_DIR) + + + dnl --------------------------------------------------------------------------- ++dnl - Directory to spool events from other processes ++dnl --------------------------------------------------------------------------- ++ ++AC_ARG_WITH(spool-dir, ++ AS_HELP_STRING([--with-spool-dir=], ++ [spool directory])) ++ ++if ! test -z "$with_spool_dir"; then ++ GDM_SPOOL_DIR=$with_spool_dir ++else ++ GDM_SPOOL_DIR=${localstatedir}/spool/gdm ++fi ++ ++AC_SUBST(GDM_SPOOL_DIR) ++ ++ ++dnl --------------------------------------------------------------------------- + dnl - Finish + dnl --------------------------------------------------------------------------- + +diff -up gdm-2.29.1/daemon/gdm-display.c.force-active-vt gdm-2.29.1/daemon/gdm-display.c +--- gdm-2.29.1/daemon/gdm-display.c.force-active-vt 2009-11-16 17:37:43.000000000 -0500 ++++ gdm-2.29.1/daemon/gdm-display.c 2009-12-02 23:31:13.065009323 -0500 +@@ -65,7 +65,9 @@ struct GdmDisplayPrivate + gsize x11_cookie_size; + GdmDisplayAccessFile *access_file; + +- gboolean is_local; ++ guint is_local : 1; ++ guint force_active_vt : 1; ++ + guint finish_idle_id; + + GdmSlaveProxy *slave_proxy; +@@ -84,6 +86,7 @@ enum { + PROP_X11_COOKIE, + PROP_X11_AUTHORITY_FILE, + PROP_IS_LOCAL, ++ PROP_FORCE_ACTIVE_VT, + PROP_SLAVE_COMMAND, + }; + +@@ -574,9 +577,10 @@ gdm_display_real_prepare (GdmDisplay *di + gdm_slave_proxy_set_log_path (display->priv->slave_proxy, log_path); + g_free (log_path); + +- command = g_strdup_printf ("%s --display-id %s", ++ command = g_strdup_printf ("%s --display-id %s %s", + display->priv->slave_command, +- display->priv->id); ++ display->priv->id, ++ display->priv->force_active_vt? "--force-active-vt" : ""); + gdm_slave_proxy_set_command (display->priv->slave_proxy, command); + g_free (command); + +@@ -824,6 +828,13 @@ _gdm_display_set_is_local (GdmDisplay + } + + static void ++_gdm_display_set_force_active_vt (GdmDisplay *display, ++ gboolean force_active_vt) ++{ ++ display->priv->force_active_vt = force_active_vt; ++} ++ ++static void + _gdm_display_set_slave_command (GdmDisplay *display, + const char *command) + { +@@ -866,6 +877,9 @@ gdm_display_set_property (GObject + case PROP_IS_LOCAL: + _gdm_display_set_is_local (self, g_value_get_boolean (value)); + break; ++ case PROP_FORCE_ACTIVE_VT: ++ _gdm_display_set_force_active_vt (self, g_value_get_boolean (value)); ++ break; + case PROP_SLAVE_COMMAND: + _gdm_display_set_slave_command (self, g_value_get_string (value)); + break; +@@ -914,6 +928,9 @@ gdm_display_get_property (GObject + case PROP_IS_LOCAL: + g_value_set_boolean (value, self->priv->is_local); + break; ++ case PROP_FORCE_ACTIVE_VT: ++ g_value_set_boolean (value, self->priv->force_active_vt); ++ break; + case PROP_SLAVE_COMMAND: + g_value_set_string (value, self->priv->slave_command); + break; +@@ -1084,6 +1101,13 @@ gdm_display_class_init (GdmDisplayClass + NULL, + TRUE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); ++ g_object_class_install_property (object_class, ++ PROP_FORCE_ACTIVE_VT, ++ g_param_spec_boolean ("force-active-vt", ++ NULL, ++ NULL, ++ FALSE, ++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property (object_class, + PROP_SLAVE_COMMAND, +diff -up gdm-2.29.1/daemon/gdm-server.c.force-active-vt gdm-2.29.1/daemon/gdm-server.c +--- gdm-2.29.1/daemon/gdm-server.c.force-active-vt 2009-11-16 17:37:43.000000000 -0500 ++++ gdm-2.29.1/daemon/gdm-server.c 2009-12-02 23:31:13.066009518 -0500 +@@ -34,6 +34,8 @@ + #include + #include + ++#include ++ + #include + #include + #include +@@ -663,6 +665,44 @@ gdm_server_spawn (GdmServer *server, + return ret; + } + ++static int ++get_active_vt (void) ++{ ++ int console_fd; ++ struct vt_stat console_state = { 0 }; ++ ++ console_fd = open ("/dev/tty0", O_RDONLY | O_NOCTTY); ++ ++ if (console_fd < 0) { ++ goto out; ++ } ++ ++ if (ioctl (console_fd, VT_GETSTATE, &console_state) < 0) { ++ goto out; ++ } ++ ++out: ++ if (console_fd >= 0) { ++ close (console_fd); ++ } ++ ++ return console_state.v_active; ++} ++ ++static char * ++get_active_vt_as_string (void) ++{ ++ int vt; ++ ++ vt = get_active_vt (); ++ ++ if (vt <= 0) { ++ return NULL; ++ } ++ ++ return g_strdup_printf ("vt%d", vt); ++} ++ + /** + * gdm_server_start: + * @disp: Pointer to a GdmDisplay structure +@@ -681,6 +721,21 @@ gdm_server_start (GdmServer *server) + return res; + } + ++gboolean ++gdm_server_start_on_active_vt (GdmServer *server) ++{ ++ gboolean res; ++ char *vt; ++ ++ g_free (server->priv->command); ++ server->priv->command = g_strdup (X_SERVER " -nr -verbose"); ++ vt = get_active_vt_as_string (); ++ res = gdm_server_spawn (server, vt); ++ g_free (vt); ++ ++ return res; ++} ++ + static void + server_died (GdmServer *server) + { +diff -up gdm-2.29.1/daemon/gdm-server.h.force-active-vt gdm-2.29.1/daemon/gdm-server.h +--- gdm-2.29.1/daemon/gdm-server.h.force-active-vt 2009-11-16 17:37:43.000000000 -0500 ++++ gdm-2.29.1/daemon/gdm-server.h 2009-12-02 23:31:13.066009518 -0500 +@@ -56,6 +56,7 @@ GType gdm_server_get_type + GdmServer * gdm_server_new (const char *display_id, + const char *auth_file); + gboolean gdm_server_start (GdmServer *server); ++gboolean gdm_server_start_on_active_vt (GdmServer *server); + gboolean gdm_server_stop (GdmServer *server); + char * gdm_server_get_display_device (GdmServer *server); + +diff -up gdm-2.29.1/daemon/gdm-simple-slave.c.force-active-vt gdm-2.29.1/daemon/gdm-simple-slave.c +--- gdm-2.29.1/daemon/gdm-simple-slave.c.force-active-vt 2009-11-24 02:26:07.000000000 -0500 ++++ gdm-2.29.1/daemon/gdm-simple-slave.c 2009-12-02 23:31:13.067013552 -0500 +@@ -88,6 +88,7 @@ struct GdmSimpleSlavePrivate + + enum { + PROP_0, ++ FORCE_ACTIVE_VT + }; + + static void gdm_simple_slave_class_init (GdmSimpleSlaveClass *klass); +@@ -1075,11 +1076,13 @@ gdm_simple_slave_run (GdmSimpleSlave *sl + char *display_name; + char *auth_file; + gboolean display_is_local; ++ gboolean force_active_vt; + + g_object_get (slave, + "display-is-local", &display_is_local, + "display-name", &display_name, + "display-x11-authority-file", &auth_file, ++ "force-active-vt", &force_active_vt, + NULL); + + /* if this is local display start a server if one doesn't +@@ -1111,7 +1114,10 @@ gdm_simple_slave_run (GdmSimpleSlave *sl + G_CALLBACK (on_server_ready), + slave); + +- res = gdm_server_start (slave->priv->server); ++ if (force_active_vt) ++ res = gdm_server_start_on_active_vt (slave->priv->server); ++ else ++ res = gdm_server_start (slave->priv->server); + if (! res) { + g_warning (_("Could not start the X " + "server (your graphical environment) " +@@ -1259,12 +1265,14 @@ gdm_simple_slave_finalize (GObject *obje + } + + GdmSlave * +-gdm_simple_slave_new (const char *id) ++gdm_simple_slave_new (const char *id, ++ gboolean force_active_vt) + { + GObject *object; + + object = g_object_new (GDM_TYPE_SIMPLE_SLAVE, + "display-id", id, ++ "force-active-vt", force_active_vt, + NULL); + + return GDM_SLAVE (object); +diff -up gdm-2.29.1/daemon/gdm-simple-slave.h.force-active-vt gdm-2.29.1/daemon/gdm-simple-slave.h +--- gdm-2.29.1/daemon/gdm-simple-slave.h.force-active-vt 2009-11-16 17:37:43.000000000 -0500 ++++ gdm-2.29.1/daemon/gdm-simple-slave.h 2009-12-02 23:31:13.067013552 -0500 +@@ -48,7 +48,8 @@ typedef struct + } GdmSimpleSlaveClass; + + GType gdm_simple_slave_get_type (void); +-GdmSlave * gdm_simple_slave_new (const char *id); ++GdmSlave * gdm_simple_slave_new (const char *id, ++ gboolean force_active_vt); + + G_END_DECLS + +diff -up gdm-2.29.1/daemon/gdm-slave.c.force-active-vt gdm-2.29.1/daemon/gdm-slave.c +--- gdm-2.29.1/daemon/gdm-slave.c.force-active-vt 2009-11-16 17:37:43.000000000 -0500 ++++ gdm-2.29.1/daemon/gdm-slave.c 2009-12-02 23:31:13.068018007 -0500 +@@ -83,6 +83,7 @@ struct GdmSlavePrivate + char *display_hostname; + gboolean display_is_local; + gboolean display_is_parented; ++ gboolean force_active_vt; + char *display_seat_id; + char *display_x11_authority_file; + char *parent_display_name; +@@ -101,6 +102,7 @@ enum { + PROP_DISPLAY_NUMBER, + PROP_DISPLAY_HOSTNAME, + PROP_DISPLAY_IS_LOCAL, ++ PROP_FORCE_ACTIVE_VT, + PROP_DISPLAY_SEAT_ID, + PROP_DISPLAY_X11_AUTHORITY_FILE + }; +@@ -1332,6 +1334,13 @@ _gdm_slave_set_display_is_local (GdmSlav + } + + static void ++_gdm_slave_set_force_active_vt (GdmSlave *slave, ++ gboolean force_active_vt) ++{ ++ slave->priv->force_active_vt = force_active_vt; ++} ++ ++static void + gdm_slave_set_property (GObject *object, + guint prop_id, + const GValue *value, +@@ -1363,6 +1372,9 @@ gdm_slave_set_property (GObject *ob + case PROP_DISPLAY_IS_LOCAL: + _gdm_slave_set_display_is_local (self, g_value_get_boolean (value)); + break; ++ case PROP_FORCE_ACTIVE_VT: ++ _gdm_slave_set_force_active_vt (self, g_value_get_boolean (value)); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; +@@ -1401,6 +1413,9 @@ gdm_slave_get_property (GObject *obje + case PROP_DISPLAY_IS_LOCAL: + g_value_set_boolean (value, self->priv->display_is_local); + break; ++ case PROP_FORCE_ACTIVE_VT: ++ g_value_set_boolean (value, self->priv->force_active_vt); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; +@@ -1526,6 +1541,14 @@ gdm_slave_class_init (GdmSlaveClass *kla + TRUE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + ++ g_object_class_install_property (object_class, ++ PROP_FORCE_ACTIVE_VT, ++ g_param_spec_boolean ("force-active-vt", ++ "Force Active VT", ++ "Force display to active VT", ++ TRUE, ++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); ++ + signals [STOPPED] = + g_signal_new ("stopped", + G_TYPE_FROM_CLASS (object_class), +diff -up gdm-2.29.1/daemon/gdm-static-display.c.force-active-vt gdm-2.29.1/daemon/gdm-static-display.c +--- gdm-2.29.1/daemon/gdm-static-display.c.force-active-vt 2009-11-16 17:37:43.000000000 -0500 ++++ gdm-2.29.1/daemon/gdm-static-display.c 2009-12-02 23:31:13.068018007 -0500 +@@ -86,10 +86,27 @@ gdm_static_display_remove_user_authoriza + } + + static gboolean ++triggered_to_force_display_on_active_vt (void) ++{ ++ gboolean should_force_display_on_active_vt; ++ ++ should_force_display_on_active_vt = g_file_test (GDM_SPOOL_DIR "/force-display-on-active-vt", ++ G_FILE_TEST_EXISTS); ++ g_unlink (GDM_SPOOL_DIR "/force-display-on-active-vt"); ++ ++ return should_force_display_on_active_vt; ++} ++ ++static gboolean + gdm_static_display_manage (GdmDisplay *display) + { + g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE); + ++ if (triggered_to_force_display_on_active_vt ()) { ++ g_object_set (display, "force-active-vt", TRUE, NULL); ++ } else { ++ g_object_set (display, "force-active-vt", FALSE, NULL); ++ } + GDM_DISPLAY_CLASS (gdm_static_display_parent_class)->manage (display); + + return TRUE; +diff -up gdm-2.29.1/daemon/Makefile.am.force-active-vt gdm-2.29.1/daemon/Makefile.am +--- gdm-2.29.1/daemon/Makefile.am.force-active-vt 2009-11-16 17:37:43.000000000 -0500 ++++ gdm-2.29.1/daemon/Makefile.am 2009-12-02 23:31:13.069017990 -0500 +@@ -14,6 +14,7 @@ AM_CPPFLAGS = \ + -DLOGDIR=\"$(logdir)\" \ + -DSBINDIR=\"$(sbindir)\" \ + -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ ++ -DGDM_SPOOL_DIR=\"$(GDM_SPOOL_DIR)\" \ + -DGDM_XAUTH_DIR=\"$(GDM_XAUTH_DIR)\" \ + -DGDM_SCREENSHOT_DIR=\"$(GDM_SCREENSHOT_DIR)\" \ + -DGDM_CACHE_DIR=\""$(localstatedir)/cache/gdm"\" \ +diff -up gdm-2.29.1/daemon/simple-slave-main.c.force-active-vt gdm-2.29.1/daemon/simple-slave-main.c +--- gdm-2.29.1/daemon/simple-slave-main.c.force-active-vt 2009-11-16 17:37:43.000000000 -0500 ++++ gdm-2.29.1/daemon/simple-slave-main.c 2009-12-02 23:31:54.674210044 -0500 +@@ -178,9 +178,11 @@ main (int argc, + DBusGConnection *connection; + GdmSlave *slave; + static char *display_id = NULL; ++ static gboolean force_active_vt = FALSE; + GdmSignalHandler *signal_handler; + static GOptionEntry entries [] = { + { "display-id", 0, 0, G_OPTION_ARG_STRING, &display_id, N_("Display ID"), N_("ID") }, ++ { "force-active-vt", 0, 0, G_OPTION_ARG_NONE, &force_active_vt, N_("Force X to start on active vt"), NULL }, + { NULL } + }; + +@@ -248,7 +250,7 @@ main (int argc, + gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGUSR2, signal_cb, NULL); + +- slave = gdm_simple_slave_new (display_id); ++ slave = gdm_simple_slave_new (display_id, force_active_vt); + if (slave == NULL) { + goto out; + } +diff -up gdm-2.29.1/data/Makefile.am.force-active-vt gdm-2.29.1/data/Makefile.am +--- gdm-2.29.1/data/Makefile.am.force-active-vt 2009-11-16 19:45:22.000000000 -0500 ++++ gdm-2.29.1/data/Makefile.am 2009-12-02 23:31:13.070023842 -0500 +@@ -13,6 +13,7 @@ predir = $(gdmconfdir)/PreSession + postlogindir = $(gdmconfdir)/PostLogin + workingdir = $(GDM_WORKING_DIR) + xauthdir = $(GDM_XAUTH_DIR) ++spooldir = $(GDM_SPOOL_DIR) + screenshotdir = $(GDM_SCREENSHOT_DIR) + cachedir = $(localstatedir)/cache/gdm + +@@ -125,6 +126,7 @@ uninstall-hook: + $(DESTDIR)$(workingdir)/.gconf.mandatory \ + $(DESTDIR)$(screenshotdir) \ + $(DESTDIR)$(xauthdir) ++ $(DESTDIR)$(spooldir) + + install-data-hook: gdm.conf-custom Xsession Init PostSession PreSession gconf.path + if test '!' -d $(DESTDIR)$(gdmconfdir); then \ +@@ -224,6 +226,12 @@ install-data-hook: gdm.conf-custom Xsess + chown root:gdm $(DESTDIR)$(cachedir) || : ; \ + fi + ++ if test '!' -d $(DESTDIR)$(spooldir); then \ ++ $(mkinstalldirs) $(DESTDIR)$(spooldir); \ ++ chmod 775 $(DESTDIR)$(spooldir); \ ++ chown root:gdm $(DESTDIR)$(spooldir) || : ; \ ++ fi ++ + $(INSTALL_DATA) $(srcdir)/gconf.path $(DESTDIR)$(workingdir)/.gconf.path + gconftool-2 --direct --config-source=xml:merged:$(DESTDIR)$(workingdir)/.gconf.mandatory --recursive-unset / + gconftool-2 --direct --config-source=xml:merged:$(DESTDIR)$(workingdir)/.gconf.mandatory --load $(srcdir)/session-setup.entries diff --git a/gdm-multistack.patch b/gdm-multistack.patch index c5409f4..daf8266 100644 --- a/gdm-multistack.patch +++ b/gdm-multistack.patch @@ -1,323 +1,7 @@ - -From dfa6b8d5ed60552f435c34c47bc45089fa3eef48 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Fri, 20 Feb 2009 13:52:19 -0500 -Subject: [PATCH 07/81] Add a comment marking protected api in chooser - -The chooser widget has methods that only its -subclasses are supposed to call. We should -mark them as such. ---- - gui/simple-greeter/gdm-chooser-widget.h | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -diff --git a/gui/simple-greeter/gdm-chooser-widget.h b/gui/simple-greeter/gdm-chooser-widget.h -index 578e613..7e3e59c 100644 ---- a/gui/simple-greeter/gdm-chooser-widget.h -+++ b/gui/simple-greeter/gdm-chooser-widget.h -@@ -136,6 +136,8 @@ int gdm_chooser_widget_get_number_of_items (GdmChooserWidget - void gdm_chooser_widget_activate_if_one_item (GdmChooserWidget *widget); - void gdm_chooser_widget_propagate_pending_key_events (GdmChooserWidget *widget); - -+/* Protected -+ */ - void gdm_chooser_widget_loaded (GdmChooserWidget *widget); - - G_END_DECLS --- -1.6.5.1 - - -From 7b4e38d04e246d7dc4c446ed2a3c69fcc67257cb Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Fri, 6 Feb 2009 17:44:37 -0500 -Subject: [PATCH 08/81] Drop duplicated entry introspection output - ---- - daemon/gdm-greeter-server.c | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -diff --git a/daemon/gdm-greeter-server.c b/daemon/gdm-greeter-server.c -index 2e01d33..cecce83 100644 ---- a/daemon/gdm-greeter-server.c -+++ b/daemon/gdm-greeter-server.c -@@ -752,7 +752,6 @@ do_introspect (DBusConnection *connection, - " \n" - " \n" - " \n" -- " \n" - " \n" - " \n" - " \n" --- -1.6.5.1 - - -From 8d5ddd913f13581df1662730745c1d906772185e Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Mon, 2 Mar 2009 10:07:03 -0500 -Subject: [PATCH 09/81] Make lookup_item not warn when passing NULL for args - -gtk_tree_model_get doesn't like NULL, and we allow -NULL for optional return values. - -We now check each argument for NULL and call -gtk_tree_model_get individually N times (one for -each argument) instead of just once. ---- - gui/simple-greeter/gdm-chooser-widget.c | 31 ++++++++++++++++++++++++------- - 1 files changed, 24 insertions(+), 7 deletions(-) - -diff --git a/gui/simple-greeter/gdm-chooser-widget.c b/gui/simple-greeter/gdm-chooser-widget.c -index 2875456..cbd5072 100644 ---- a/gui/simple-greeter/gdm-chooser-widget.c -+++ b/gui/simple-greeter/gdm-chooser-widget.c -@@ -2171,13 +2171,30 @@ gdm_chooser_widget_lookup_item (GdmChooserWidget *widget, - } - g_free (active_item_id); - -- gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter, -- CHOOSER_IMAGE_COLUMN, image, -- CHOOSER_NAME_COLUMN, name, -- CHOOSER_PRIORITY_COLUMN, priority, -- CHOOSER_ITEM_IS_IN_USE_COLUMN, is_in_use, -- CHOOSER_ITEM_IS_SEPARATED_COLUMN, is_separate, -- -1); -+ if (image != NULL) { -+ gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter, -+ CHOOSER_IMAGE_COLUMN, image, -1); -+ } -+ -+ if (name != NULL) { -+ gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter, -+ CHOOSER_NAME_COLUMN, name, -1); -+ } -+ -+ if (priority != NULL) { -+ gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter, -+ CHOOSER_PRIORITY_COLUMN, priority, -1); -+ } -+ -+ if (is_in_use != NULL) { -+ gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter, -+ CHOOSER_ITEM_IS_IN_USE_COLUMN, is_in_use, -1); -+ } -+ -+ if (is_separate != NULL) { -+ gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter, -+ CHOOSER_ITEM_IS_SEPARATED_COLUMN, is_separate, -1); -+ } - - return TRUE; - } --- -1.6.5.1 - - -From 57a0d19b8b1e5e7a2132b15ea2c536207b61f80f Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Fri, 6 Feb 2009 15:35:00 -0500 -Subject: [PATCH 10/81] Drop "stopped" signal from worker-job class - -It was unused, dead code. ---- - daemon/gdm-session-direct.c | 14 -------------- - daemon/gdm-session-worker-job.c | 11 ----------- - daemon/gdm-session-worker-job.h | 1 - - 3 files changed, 0 insertions(+), 26 deletions(-) - -diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c -index 47a5778..b6abae4 100644 ---- a/daemon/gdm-session-direct.c -+++ b/daemon/gdm-session-direct.c -@@ -1539,13 +1539,6 @@ gdm_session_direct_init (GdmSessionDirect *session) - } - - static void --worker_stopped (GdmSessionWorkerJob *job, -- GdmSessionDirect *session) --{ -- g_debug ("GdmSessionDirect: Worker job stopped"); --} -- --static void - worker_started (GdmSessionWorkerJob *job, - GdmSessionDirect *session) - { -@@ -1588,10 +1581,6 @@ start_worker (GdmSessionDirect *session) - session->priv->job = gdm_session_worker_job_new (); - gdm_session_worker_job_set_server_address (session->priv->job, session->priv->server_address); - g_signal_connect (session->priv->job, -- "stopped", -- G_CALLBACK (worker_stopped), -- session); -- g_signal_connect (session->priv->job, - "started", - G_CALLBACK (worker_started), - session); -@@ -1613,9 +1602,6 @@ static void - stop_worker (GdmSessionDirect *session) - { - g_signal_handlers_disconnect_by_func (session->priv->job, -- G_CALLBACK (worker_stopped), -- session); -- g_signal_handlers_disconnect_by_func (session->priv->job, - G_CALLBACK (worker_started), - session); - g_signal_handlers_disconnect_by_func (session->priv->job, -diff --git a/daemon/gdm-session-worker-job.c b/daemon/gdm-session-worker-job.c -index 6723464..633d6e2 100644 ---- a/daemon/gdm-session-worker-job.c -+++ b/daemon/gdm-session-worker-job.c -@@ -68,7 +68,6 @@ enum { - - enum { - STARTED, -- STOPPED, - EXITED, - DIED, - LAST_SIGNAL -@@ -390,16 +389,6 @@ gdm_session_worker_job_class_init (GdmSessionWorkerJobClass *klass) - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0); -- signals [STOPPED] = -- g_signal_new ("stopped", -- G_OBJECT_CLASS_TYPE (object_class), -- G_SIGNAL_RUN_FIRST, -- G_STRUCT_OFFSET (GdmSessionWorkerJobClass, stopped), -- NULL, -- NULL, -- g_cclosure_marshal_VOID__VOID, -- G_TYPE_NONE, -- 0); - signals [EXITED] = - g_signal_new ("exited", - G_OBJECT_CLASS_TYPE (object_class), -diff --git a/daemon/gdm-session-worker-job.h b/daemon/gdm-session-worker-job.h -index d42eb37..5ad1c92 100644 ---- a/daemon/gdm-session-worker-job.h -+++ b/daemon/gdm-session-worker-job.h -@@ -46,7 +46,6 @@ typedef struct - GObjectClass parent_class; - - void (* started) (GdmSessionWorkerJob *session_worker_job); -- void (* stopped) (GdmSessionWorkerJob *session_worker_job); - void (* exited) (GdmSessionWorkerJob *session_worker_job, - int exit_code); - --- -1.6.5.1 - - - -From 98b3621d59550909f9d837e94d3cb15d20730f30 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Wed, 13 May 2009 13:43:33 -0400 -Subject: [PATCH 12/81] Don't send auth-failed when worker dies - -Authentication hasn't failed, it just got aborted before it -could. This prevents a crash that happens when switching -runlevels while the login screen is up. ---- - daemon/gdm-session-direct.c | 12 ++---------- - 1 files changed, 2 insertions(+), 10 deletions(-) - -diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c -index b6abae4..8eadf4d 100644 ---- a/daemon/gdm-session-direct.c -+++ b/daemon/gdm-session-direct.c -@@ -78,7 +78,6 @@ struct _GdmSessionDirectPrivate - - GdmSessionWorkerJob *job; - GPid session_pid; -- guint32 is_authenticated : 1; - guint32 is_running : 1; - - /* object lifetime scope */ -@@ -335,7 +334,6 @@ gdm_session_direct_handle_authenticated (GdmSessionDirect *session, - dbus_connection_send (connection, reply, NULL); - dbus_message_unref (reply); - -- session->priv->is_authenticated = TRUE; - _gdm_session_authenticated (GDM_SESSION (session)); - - return DBUS_HANDLER_RESULT_HANDLED; -@@ -363,7 +361,6 @@ gdm_session_direct_handle_authentication_failed (GdmSessionDirect *session, - - g_debug ("GdmSessionDirect: Emitting 'authentication-failed' signal"); - -- session->priv->is_authenticated = FALSE; - _gdm_session_authentication_failed (GDM_SESSION (session), text); - - return DBUS_HANDLER_RESULT_HANDLED; -@@ -1552,9 +1549,7 @@ worker_exited (GdmSessionWorkerJob *job, - { - g_debug ("GdmSessionDirect: Worker job exited: %d", code); - -- if (!session->priv->is_authenticated) { -- _gdm_session_authentication_failed (GDM_SESSION (session), NULL); -- } else if (session->priv->is_running) { -+ if (session->priv->is_running) { - _gdm_session_session_exited (GDM_SESSION (session), code); - } - } -@@ -1566,9 +1561,7 @@ worker_died (GdmSessionWorkerJob *job, - { - g_debug ("GdmSessionDirect: Worker job died: %d", signum); - -- if (!session->priv->is_authenticated) { -- _gdm_session_authentication_failed (GDM_SESSION (session), NULL); -- } else if (session->priv->is_running) { -+ if (session->priv->is_running) { - _gdm_session_session_died (GDM_SESSION (session), signum); - } - } -@@ -2037,7 +2030,6 @@ gdm_session_direct_close (GdmSession *session) - g_hash_table_remove_all (impl->priv->environment); - - impl->priv->session_pid = -1; -- impl->priv->is_authenticated = FALSE; - impl->priv->is_running = FALSE; - } - --- -1.6.5.1 - - - -From c3d7aa8a30e643ee6068220abd3209b6bbdc6c1a Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Fri, 23 Oct 2009 17:40:36 -0400 -Subject: [PATCH 20/81] Don't set has_other_user to FALSE in ctor - -It's initialized to FALSE anyway, and we were -setting it too late. ---- - gui/simple-greeter/gdm-user-chooser-widget.c | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -diff --git a/gui/simple-greeter/gdm-user-chooser-widget.c b/gui/simple-greeter/gdm-user-chooser-widget.c -index 167e324..77e06a7 100644 ---- a/gui/simple-greeter/gdm-user-chooser-widget.c -+++ b/gui/simple-greeter/gdm-user-chooser-widget.c -@@ -549,7 +549,6 @@ gdm_user_chooser_widget_constructor (GType type, - n_construct_properties, - construct_properties)); - -- widget->priv->has_user_other = FALSE; - widget->priv->show_normal_users = !is_user_list_disabled (widget); - - widget->priv->load_idle_id = g_idle_add ((GSourceFunc)load_users, widget); --- -1.6.5.1 - - - -From 92a560913b1c587b79e5ebe63f90dfbea234a7d1 Mon Sep 17 00:00:00 2001 +From fd73f04cae7990b317c9ee434e4c9dfd12a11732 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 16 Jan 2009 11:00:08 -0500 -Subject: [PATCH 33/81] Drop session "Open" in favor of "StartConversation" +Subject: [PATCH 01/51] Drop session "Open" in favor of "StartConversation" We want to eventually support having multiple simultaneous PAM conversations in one login @@ -470,7 +154,7 @@ index 9adcb09..15a2820 100644 on_relay_cancelled (slave, message); } else { diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c -index 8eadf4d..fa257a0 100644 +index 2d711b1..5edbfeb 100644 --- a/daemon/gdm-session-direct.c +++ b/daemon/gdm-session-direct.c @@ -61,6 +61,16 @@ @@ -1108,7 +792,7 @@ index 8eadf4d..fa257a0 100644 char *command; char *program; -@@ -1978,7 +2048,8 @@ gdm_session_direct_start_session (GdmSession *session) +@@ -1984,7 +2054,8 @@ gdm_session_direct_start_session (GdmSession *session) setup_session_environment (impl); send_environment (impl); @@ -1118,7 +802,7 @@ index 8eadf4d..fa257a0 100644 g_free (program); } -@@ -1991,16 +2062,12 @@ gdm_session_direct_close (GdmSession *session) +@@ -1997,16 +2068,12 @@ gdm_session_direct_close (GdmSession *session) g_debug ("GdmSessionDirect: Closing session"); @@ -1141,7 +825,7 @@ index 8eadf4d..fa257a0 100644 } g_free (impl->priv->selected_user); -@@ -2038,10 +2105,13 @@ gdm_session_direct_answer_query (GdmSession *session, +@@ -2044,10 +2111,13 @@ gdm_session_direct_answer_query (GdmSession *session, const char *text) { GdmSessionDirect *impl = GDM_SESSION_DIRECT (session); @@ -1156,7 +840,7 @@ index 8eadf4d..fa257a0 100644 } static void -@@ -2051,7 +2121,7 @@ gdm_session_direct_cancel (GdmSession *session) +@@ -2057,7 +2127,7 @@ gdm_session_direct_cancel (GdmSession *session) g_return_if_fail (session != NULL); @@ -1165,7 +849,7 @@ index 8eadf4d..fa257a0 100644 } char * -@@ -2067,6 +2137,7 @@ gdm_session_direct_select_session (GdmSession *session, +@@ -2122,6 +2192,7 @@ gdm_session_direct_select_session (GdmSession *session, const char *text) { GdmSessionDirect *impl = GDM_SESSION_DIRECT (session); @@ -1173,7 +857,7 @@ index 8eadf4d..fa257a0 100644 g_free (impl->priv->selected_session); -@@ -2076,7 +2147,8 @@ gdm_session_direct_select_session (GdmSession *session, +@@ -2131,7 +2202,8 @@ gdm_session_direct_select_session (GdmSession *session, impl->priv->selected_session = g_strdup (text); } @@ -1183,7 +867,7 @@ index 8eadf4d..fa257a0 100644 get_session_name (impl)); } -@@ -2085,6 +2157,7 @@ gdm_session_direct_select_language (GdmSession *session, +@@ -2140,6 +2212,7 @@ gdm_session_direct_select_language (GdmSession *session, const char *text) { GdmSessionDirect *impl = GDM_SESSION_DIRECT (session); @@ -1191,7 +875,7 @@ index 8eadf4d..fa257a0 100644 g_free (impl->priv->selected_language); -@@ -2094,7 +2167,8 @@ gdm_session_direct_select_language (GdmSession *session, +@@ -2149,7 +2222,8 @@ gdm_session_direct_select_language (GdmSession *session, impl->priv->selected_language = g_strdup (text); } @@ -1201,7 +885,7 @@ index 8eadf4d..fa257a0 100644 get_language_name (impl)); } -@@ -2103,6 +2177,7 @@ gdm_session_direct_select_layout (GdmSession *session, +@@ -2158,6 +2232,7 @@ gdm_session_direct_select_layout (GdmSession *session, const char *text) { GdmSessionDirect *impl = GDM_SESSION_DIRECT (session); @@ -1209,7 +893,7 @@ index 8eadf4d..fa257a0 100644 g_free (impl->priv->selected_layout); -@@ -2112,7 +2187,8 @@ gdm_session_direct_select_layout (GdmSession *session, +@@ -2167,7 +2242,8 @@ gdm_session_direct_select_layout (GdmSession *session, impl->priv->selected_layout = g_strdup (text); } @@ -1219,7 +903,7 @@ index 8eadf4d..fa257a0 100644 get_layout_name (impl)); } -@@ -2372,7 +2448,7 @@ gdm_session_direct_constructor (GType type, +@@ -2427,7 +2503,7 @@ gdm_session_direct_constructor (GType type, static void gdm_session_iface_init (GdmSessionIface *iface) { @@ -1459,10 +1143,10 @@ index dfb7e27..77e0cf6 100644 const char *service_name); void gdm_session_setup_for_user (GdmSession *session, diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c -index 8b161bb..12e514e 100644 +index 463b2b3..2ba778c 100644 --- a/daemon/gdm-simple-slave.c +++ b/daemon/gdm-simple-slave.c -@@ -174,7 +174,6 @@ reset_session (GdmSimpleSlave *slave) +@@ -179,7 +179,6 @@ reset_session (GdmSimpleSlave *slave) { destroy_session (slave); create_new_session (slave); @@ -1470,7 +1154,7 @@ index 8b161bb..12e514e 100644 } static gboolean -@@ -822,8 +821,6 @@ on_greeter_connected (GdmGreeterServer *greeter_server, +@@ -827,8 +826,6 @@ on_greeter_connected (GdmGreeterServer *greeter_server, g_debug ("GdmSimpleSlave: Greeter connected"); @@ -1516,13 +1200,13 @@ index c6a158c..d9fa26e 100644 g_signal_connect (session, "setup-complete", -- -1.6.5.1 +1.6.5.2 -From 8516e66b11d4e009ff7913d7996a407efbeb4eb5 Mon Sep 17 00:00:00 2001 +From 0318b3041042e0a0f96d9c9092dd926c3273abdf Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 4 Feb 2009 10:55:03 -0500 -Subject: [PATCH 34/81] Rename session worker to the service it's managing +Subject: [PATCH 02/51] Rename session worker to the service it's managing This way when we're running multiple PAM conversations at once it will be obvious which worker is managing which conversation. @@ -1533,7 +1217,7 @@ it will be obvious which worker is managing which conversation. 3 files changed, 57 insertions(+), 16 deletions(-) diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c -index fa257a0..51ecf39 100644 +index 5edbfeb..0ca0149 100644 --- a/daemon/gdm-session-direct.c +++ b/daemon/gdm-session-direct.c @@ -1605,6 +1605,7 @@ start_conversation (GdmSessionDirect *session, @@ -1705,13 +1389,13 @@ index d24f025..4833f23 100644 GPid gdm_session_worker_job_get_pid (GdmSessionWorkerJob *session_worker_job); -- -1.6.5.1 +1.6.5.2 -From b3c168d5cff70b47b1cc87acd6941bcf78a1e1fd Mon Sep 17 00:00:00 2001 +From 48d8b4e8c505e22a2af35d543239f16bcb70226f Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 16 Jan 2009 13:01:48 -0500 -Subject: [PATCH 35/81] Make greeter explicitly request PAM conversation +Subject: [PATCH 03/51] Make greeter explicitly request PAM conversation Now the greeter has to say what PAM stack it wants the slave to run. When that stack is ready, we emit the Ready signal as @@ -1878,10 +1562,10 @@ index 6e92100..7333db1 100644 const char *text); void gdm_greeter_server_default_language_name_changed (GdmGreeterServer *greeter_server, diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c -index 12e514e..8863fd4 100644 +index 2ba778c..dbbc23c 100644 --- a/daemon/gdm-simple-slave.c +++ b/daemon/gdm-simple-slave.c -@@ -484,17 +484,19 @@ on_session_secret_info_query (GdmSession *session, +@@ -489,17 +489,19 @@ on_session_secret_info_query (GdmSession *session, } static void @@ -1905,7 +1589,7 @@ index 12e514e..8863fd4 100644 if (! res) { g_warning ("Unable to send ready"); } -@@ -510,8 +512,10 @@ on_session_opened (GdmSession *session, +@@ -515,8 +517,10 @@ on_session_opened (GdmSession *session, gdm_greeter_server_request_timed_login (slave->priv->greeter_server, username, delay); } else { g_debug ("GdmSimpleSlave: begin auto login for user '%s'", username); @@ -1917,7 +1601,7 @@ index 12e514e..8863fd4 100644 username); } -@@ -603,8 +607,8 @@ create_new_session (GdmSimpleSlave *slave) +@@ -608,8 +612,8 @@ create_new_session (GdmSimpleSlave *slave) g_free (display_hostname); g_signal_connect (slave->priv->session, @@ -1928,7 +1612,7 @@ index 12e514e..8863fd4 100644 slave); g_signal_connect (slave->priv->session, "setup-complete", -@@ -735,6 +739,16 @@ on_greeter_session_died (GdmGreeterSession *greeter, +@@ -740,6 +744,16 @@ on_greeter_session_died (GdmGreeterSession *greeter, } static void @@ -1945,7 +1629,7 @@ index 12e514e..8863fd4 100644 on_greeter_begin_verification (GdmGreeterServer *greeter_server, GdmSimpleSlave *slave) { -@@ -909,6 +923,10 @@ start_greeter (GdmSimpleSlave *slave) +@@ -914,6 +928,10 @@ start_greeter (GdmSimpleSlave *slave) slave->priv->greeter_server = gdm_greeter_server_new (display_id); g_signal_connect (slave->priv->greeter_server, @@ -2051,13 +1735,13 @@ index e7d206a..cd0cbdf 100644 return res; -- -1.6.5.1 +1.6.5.2 -From 0fe56d49e631bafe55a4540cc73b761fd2751185 Mon Sep 17 00:00:00 2001 +From 9d6177d81060e23a782db69477d0df801502af9a Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 16 Jan 2009 15:18:31 -0500 -Subject: [PATCH 36/81] Store multiple conversations in the session +Subject: [PATCH 04/51] Store multiple conversations in the session We keep multiple conversations in the session now, keyed off of PAM service is at the other end. Much of the guts still @@ -2067,7 +1751,7 @@ only operate on the first conversation added though. 1 files changed, 106 insertions(+), 17 deletions(-) diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c -index 51ecf39..b86475c 100644 +index 0ca0149..d8b8e29 100644 --- a/daemon/gdm-session-direct.c +++ b/daemon/gdm-session-direct.c @@ -84,6 +84,7 @@ struct _GdmSessionDirectPrivate @@ -2257,7 +1941,7 @@ index 51ecf39..b86475c 100644 g_return_if_fail (username != NULL); gdm_session_direct_select_user (session, username); -@@ -2059,6 +2126,28 @@ gdm_session_direct_start_session (GdmSession *session) +@@ -2065,6 +2132,28 @@ gdm_session_direct_start_session (GdmSession *session) } static void @@ -2286,7 +1970,7 @@ index 51ecf39..b86475c 100644 gdm_session_direct_close (GdmSession *session) { GdmSessionDirect *impl = GDM_SESSION_DIRECT (session); -@@ -2075,6 +2164,8 @@ gdm_session_direct_close (GdmSession *session) +@@ -2081,6 +2170,8 @@ gdm_session_direct_close (GdmSession *session) impl->priv->display_device); } @@ -2295,7 +1979,7 @@ index 51ecf39..b86475c 100644 g_free (impl->priv->selected_user); impl->priv->selected_user = NULL; -@@ -2122,11 +2213,9 @@ gdm_session_direct_answer_query (GdmSession *session, +@@ -2128,11 +2219,9 @@ gdm_session_direct_answer_query (GdmSession *session, static void gdm_session_direct_cancel (GdmSession *session) { @@ -2309,13 +1993,13 @@ index 51ecf39..b86475c 100644 char * -- -1.6.5.1 +1.6.5.2 -From eed69f233f58a00167729eb0e9f32734d4e9202f Mon Sep 17 00:00:00 2001 +From 4e987e18e140a1267b407fcf81b6cd8c4fa5c8a1 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 4 Mar 2009 22:09:21 -0500 -Subject: [PATCH 37/81] start autologin conversation when creating session if necessary +Subject: [PATCH 05/51] start autologin conversation when creating session if necessary Without this autologin breaks, since when it comes time to autologin, there's no worker to do it. @@ -2324,10 +2008,10 @@ autologin, there's no worker to do it. 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c -index 8863fd4..4db7440 100644 +index dbbc23c..f28d15b 100644 --- a/daemon/gdm-simple-slave.c +++ b/daemon/gdm-simple-slave.c -@@ -1036,8 +1036,18 @@ idle_connect_to_display (GdmSimpleSlave *slave) +@@ -1041,8 +1041,18 @@ idle_connect_to_display (GdmSimpleSlave *slave) if (! enabled || delay > 0) { start_greeter (slave); create_new_session (slave); @@ -2347,13 +2031,13 @@ index 8863fd4..4db7440 100644 } else { if (slave->priv->connection_attempts >= MAX_CONNECT_ATTEMPTS) { -- -1.6.5.1 +1.6.5.2 -From 71332bb2610827f1ad16ffcef257e5e980a47f41 Mon Sep 17 00:00:00 2001 +From ffacc37df414e5f1fb989bceca786acc59945bc7 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Thu, 22 Jan 2009 08:52:01 -0500 -Subject: [PATCH 38/81] Propagate service name to more layers +Subject: [PATCH 06/51] Propagate service name to more layers This is more prep work to get multiple concurrent PAM stacks going. @@ -3375,7 +3059,7 @@ index 15a2820..dd2e1bc 100644 static void diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c -index b86475c..1c151fd 100644 +index d8b8e29..b6c43f7 100644 --- a/daemon/gdm-session-direct.c +++ b/daemon/gdm-session-direct.c @@ -83,10 +83,10 @@ struct _GdmSessionDirectPrivate @@ -4351,8 +4035,8 @@ index b86475c..1c151fd 100644 { GdmSessionDirect *impl = GDM_SESSION_DIRECT (session); GdmSessionConversation *conversation; -@@ -2117,10 +2169,11 @@ gdm_session_direct_start_session (GdmSession *session) - program = g_strdup_printf (GDMCONFDIR "/Xsession \"%s\"", command); +@@ -2123,10 +2175,11 @@ gdm_session_direct_start_session (GdmSession *session) + g_free (command); + conversation = find_conversation_by_name (impl, service_name); @@ -4365,7 +4049,7 @@ index b86475c..1c151fd 100644 send_dbus_string_signal (conversation, "StartProgram", program); g_free (program); } -@@ -2166,6 +2219,11 @@ gdm_session_direct_close (GdmSession *session) +@@ -2172,6 +2225,11 @@ gdm_session_direct_close (GdmSession *session) stop_all_conversations (impl); @@ -4377,7 +4061,7 @@ index b86475c..1c151fd 100644 g_free (impl->priv->selected_user); impl->priv->selected_user = NULL; -@@ -2198,6 +2256,7 @@ gdm_session_direct_close (GdmSession *session) +@@ -2204,6 +2262,7 @@ gdm_session_direct_close (GdmSession *session) static void gdm_session_direct_answer_query (GdmSession *session, @@ -4385,7 +4069,7 @@ index b86475c..1c151fd 100644 const char *text) { GdmSessionDirect *impl = GDM_SESSION_DIRECT (session); -@@ -2205,7 +2264,7 @@ gdm_session_direct_answer_query (GdmSession *session, +@@ -2211,7 +2270,7 @@ gdm_session_direct_answer_query (GdmSession *session, g_return_if_fail (session != NULL); @@ -4394,7 +4078,7 @@ index b86475c..1c151fd 100644 answer_pending_query (conversation, text); } -@@ -2231,7 +2290,8 @@ gdm_session_direct_select_session (GdmSession *session, +@@ -2286,7 +2345,8 @@ gdm_session_direct_select_session (GdmSession *session, const char *text) { GdmSessionDirect *impl = GDM_SESSION_DIRECT (session); @@ -4404,7 +4088,7 @@ index b86475c..1c151fd 100644 g_free (impl->priv->selected_session); -@@ -2241,9 +2301,15 @@ gdm_session_direct_select_session (GdmSession *session, +@@ -2296,9 +2356,15 @@ gdm_session_direct_select_session (GdmSession *session, impl->priv->selected_session = g_strdup (text); } @@ -4423,7 +4107,7 @@ index b86475c..1c151fd 100644 } static void -@@ -2251,7 +2317,8 @@ gdm_session_direct_select_language (GdmSession *session, +@@ -2306,7 +2372,8 @@ gdm_session_direct_select_language (GdmSession *session, const char *text) { GdmSessionDirect *impl = GDM_SESSION_DIRECT (session); @@ -4433,7 +4117,7 @@ index b86475c..1c151fd 100644 g_free (impl->priv->selected_language); -@@ -2261,9 +2328,15 @@ gdm_session_direct_select_language (GdmSession *session, +@@ -2316,9 +2383,15 @@ gdm_session_direct_select_language (GdmSession *session, impl->priv->selected_language = g_strdup (text); } @@ -4452,7 +4136,7 @@ index b86475c..1c151fd 100644 } static void -@@ -2271,7 +2344,8 @@ gdm_session_direct_select_layout (GdmSession *session, +@@ -2326,7 +2399,8 @@ gdm_session_direct_select_layout (GdmSession *session, const char *text) { GdmSessionDirect *impl = GDM_SESSION_DIRECT (session); @@ -4462,7 +4146,7 @@ index b86475c..1c151fd 100644 g_free (impl->priv->selected_layout); -@@ -2281,9 +2355,15 @@ gdm_session_direct_select_layout (GdmSession *session, +@@ -2336,9 +2410,15 @@ gdm_session_direct_select_layout (GdmSession *session, impl->priv->selected_layout = g_strdup (text); } @@ -5511,7 +5195,7 @@ index 77e0cf6..db5fc4a 100644 void gdm_session_select_session (GdmSession *session, const char *session_name); diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c -index 4db7440..9421a64 100644 +index f28d15b..9b06218 100644 --- a/daemon/gdm-simple-slave.c +++ b/daemon/gdm-simple-slave.c @@ -71,6 +71,8 @@ struct GdmSimpleSlavePrivate @@ -5531,7 +5215,7 @@ index 4db7440..9421a64 100644 int pid, GdmSimpleSlave *slave) { -@@ -204,19 +207,22 @@ queue_greeter_reset (GdmSimpleSlave *slave) +@@ -209,19 +212,22 @@ queue_greeter_reset (GdmSimpleSlave *slave) static void on_session_setup_complete (GdmSession *session, @@ -5556,7 +5240,7 @@ index 4db7440..9421a64 100644 } destroy_session (slave); -@@ -240,18 +246,21 @@ on_session_reset_failed (GdmSession *session, +@@ -245,18 +251,21 @@ on_session_reset_failed (GdmSession *session, static void on_session_authenticated (GdmSession *session, @@ -5579,7 +5263,7 @@ index 4db7440..9421a64 100644 message != NULL ? message : _("Unable to authenticate user")); } destroy_session (slave); -@@ -259,7 +268,8 @@ on_session_authentication_failed (GdmSession *session, +@@ -264,7 +273,8 @@ on_session_authentication_failed (GdmSession *session, } static void @@ -5589,7 +5273,7 @@ index 4db7440..9421a64 100644 { if (slave->priv->start_session_when_ready) { char *ssid; -@@ -280,7 +290,7 @@ gdm_simple_slave_accredit_when_ready (GdmSimpleSlave *slave) +@@ -285,7 +295,7 @@ gdm_simple_slave_accredit_when_ready (GdmSimpleSlave *slave) g_free (ssid); g_free (username); @@ -5598,7 +5282,7 @@ index 4db7440..9421a64 100644 } else { slave->priv->waiting_to_start_session = TRUE; } -@@ -288,25 +298,28 @@ gdm_simple_slave_accredit_when_ready (GdmSimpleSlave *slave) +@@ -293,25 +303,28 @@ gdm_simple_slave_accredit_when_ready (GdmSimpleSlave *slave) static void on_session_authorized (GdmSession *session, @@ -5631,7 +5315,7 @@ index 4db7440..9421a64 100644 } destroy_session (slave); -@@ -386,31 +399,38 @@ start_session_timeout (GdmSimpleSlave *slave) +@@ -391,31 +404,38 @@ start_session_timeout (GdmSimpleSlave *slave) g_free (auth_file); @@ -5673,7 +5357,7 @@ index 4db7440..9421a64 100644 const char *message, GdmSimpleSlave *slave) { -@@ -431,6 +451,7 @@ on_session_accreditation_failed (GdmSession *session, +@@ -436,6 +456,7 @@ on_session_accreditation_failed (GdmSession *session, problem = _("Unable to establish credentials"); } gdm_greeter_server_problem (slave->priv->greeter_server, @@ -5681,7 +5365,7 @@ index 4db7440..9421a64 100644 problem); } } -@@ -446,41 +467,45 @@ on_session_accreditation_failed (GdmSession *session, +@@ -451,41 +472,45 @@ on_session_accreditation_failed (GdmSession *session, static void on_session_info (GdmSession *session, @@ -5731,7 +5415,7 @@ index 4db7440..9421a64 100644 } static void -@@ -750,11 +775,12 @@ on_greeter_start_conversation (GdmGreeterServer *greeter_server, +@@ -755,11 +780,12 @@ on_greeter_start_conversation (GdmGreeterServer *greeter_server, static void on_greeter_begin_verification (GdmGreeterServer *greeter_server, @@ -5745,7 +5429,7 @@ index 4db7440..9421a64 100644 } static void -@@ -770,21 +796,23 @@ on_greeter_begin_auto_login (GdmGreeterServer *greeter_server, +@@ -775,21 +801,23 @@ on_greeter_begin_auto_login (GdmGreeterServer *greeter_server, static void on_greeter_begin_verification_for_user (GdmGreeterServer *greeter_server, @@ -5771,7 +5455,7 @@ index 4db7440..9421a64 100644 } static void -@@ -847,18 +875,20 @@ on_greeter_connected (GdmGreeterServer *greeter_server, +@@ -852,18 +880,20 @@ on_greeter_connected (GdmGreeterServer *greeter_server, static void on_start_session_when_ready (GdmGreeterServer *session, @@ -6361,13 +6045,13 @@ index cd0cbdf..e856dd4 100644 static int -- -1.6.5.1 +1.6.5.2 -From bc4cdcc36df5af64065144c016abaa9513a54e54 Mon Sep 17 00:00:00 2001 +From d95507a827601b4a2a1323a1cc61c8e4cb0381dc Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Sat, 7 Feb 2009 11:36:40 -0500 -Subject: [PATCH 39/81] emit "ConversationStopped" signal at end of conv +Subject: [PATCH 07/51] emit "ConversationStopped" signal at end of conv This will allow us to track when individual PAM conversations fail, instead of doing one @@ -6438,7 +6122,7 @@ index 6d0dd87..976f0b7 100644 const char *text); void gdm_greeter_server_default_language_name_changed (GdmGreeterServer *greeter_server, diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c -index 1c151fd..dc8b4f6 100644 +index b6c43f7..c8a7a36 100644 --- a/daemon/gdm-session-direct.c +++ b/daemon/gdm-session-direct.c @@ -1697,9 +1697,15 @@ worker_exited (GdmSessionWorkerJob *job, @@ -6510,7 +6194,7 @@ index 1c151fd..dc8b4f6 100644 send_setup (GdmSessionDirect *session, const char *service_name) { -@@ -2623,6 +2658,7 @@ static void +@@ -2678,6 +2713,7 @@ static void gdm_session_iface_init (GdmSessionIface *iface) { iface->start_conversation = gdm_session_direct_start_conversation; @@ -6623,10 +6307,10 @@ index db5fc4a..c45a770 100644 const char *service_name); void gdm_session_setup_for_user (GdmSession *session, diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c -index 9421a64..6eadf62 100644 +index 9b06218..2cbde68 100644 --- a/daemon/gdm-simple-slave.c +++ b/daemon/gdm-simple-slave.c -@@ -225,8 +225,7 @@ on_session_setup_failed (GdmSession *session, +@@ -230,8 +230,7 @@ on_session_setup_failed (GdmSession *session, message != NULL ? message: _("Unable to initialize login system")); } @@ -6636,7 +6320,7 @@ index 9421a64..6eadf62 100644 } static void -@@ -263,8 +262,8 @@ on_session_authentication_failed (GdmSession *session, +@@ -268,8 +267,8 @@ on_session_authentication_failed (GdmSession *session, service_name, message != NULL ? message : _("Unable to authenticate user")); } @@ -6647,7 +6331,7 @@ index 9421a64..6eadf62 100644 } static void -@@ -322,8 +321,7 @@ on_session_authorization_failed (GdmSession *session, +@@ -327,8 +326,7 @@ on_session_authorization_failed (GdmSession *session, message != NULL ? message : _("Unable to authorize user")); } @@ -6657,7 +6341,7 @@ index 9421a64..6eadf62 100644 } static gboolean -@@ -460,9 +458,8 @@ on_session_accreditation_failed (GdmSession *session, +@@ -465,9 +463,8 @@ on_session_accreditation_failed (GdmSession *session, when Xorg exits it switches to the VT it was started from. That interferes with fast user switching. */ @@ -6668,7 +6352,7 @@ index 9421a64..6eadf62 100644 } static void -@@ -548,6 +545,23 @@ on_session_conversation_started (GdmSession *session, +@@ -553,6 +550,23 @@ on_session_conversation_started (GdmSession *session, } static void @@ -6692,7 +6376,7 @@ index 9421a64..6eadf62 100644 on_session_selected_user_changed (GdmSession *session, const char *text, GdmSimpleSlave *slave) -@@ -636,6 +650,10 @@ create_new_session (GdmSimpleSlave *slave) +@@ -641,6 +655,10 @@ create_new_session (GdmSimpleSlave *slave) G_CALLBACK (on_session_conversation_started), slave); g_signal_connect (slave->priv->session, @@ -6704,23 +6388,23 @@ index 9421a64..6eadf62 100644 G_CALLBACK (on_session_setup_complete), slave); -- -1.6.5.1 +1.6.5.2 -From 2da86871bdfe2ff0b147db4077350b2ef2a0623f Mon Sep 17 00:00:00 2001 +From 53fc840f23483b97af812a61011b6bd783aa44dd Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 26 Oct 2009 10:17:49 -0400 -Subject: [PATCH 40/81] init session pid to -1 +Subject: [PATCH 08/51] init session pid to -1 --- daemon/gdm-session-direct.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c -index dc8b4f6..e0b5f32 100644 +index c8a7a36..46a0e73 100644 --- a/daemon/gdm-session-direct.c +++ b/daemon/gdm-session-direct.c -@@ -2285,7 +2285,6 @@ gdm_session_direct_close (GdmSession *session) +@@ -2291,7 +2291,6 @@ gdm_session_direct_close (GdmSession *session) g_hash_table_remove_all (impl->priv->environment); @@ -6729,13 +6413,13 @@ index dc8b4f6..e0b5f32 100644 } -- -1.6.5.1 +1.6.5.2 -From efc53714006058ce219d4dac748e63b18e72c684 Mon Sep 17 00:00:00 2001 +From b255c1e5eb8c771f7fe809589fbe6a29b587cdd1 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 9 Mar 2009 15:41:12 -0400 -Subject: [PATCH 41/81] Don't tear down greeter until pam_open_session finishes +Subject: [PATCH 09/51] Don't tear down greeter until pam_open_session finishes Some PAM modules ask questions at that late stage of the game, and so we need a greeter to forward the questions on to the @@ -6863,7 +6547,7 @@ index dd2e1bc..93d83a1 100644 "info", G_CALLBACK (on_session_info), diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c -index e0b5f32..738267a 100644 +index 46a0e73..dbafe0e 100644 --- a/daemon/gdm-session-direct.c +++ b/daemon/gdm-session-direct.c @@ -940,6 +940,58 @@ gdm_session_direct_handle_problem (GdmSessionDirect *session, @@ -6956,7 +6640,7 @@ index e0b5f32..738267a 100644 gdm_session_direct_start_session (GdmSession *session, const char *service_name) { -@@ -2663,6 +2732,7 @@ gdm_session_iface_init (GdmSessionIface *iface) +@@ -2718,6 +2787,7 @@ gdm_session_iface_init (GdmSessionIface *iface) iface->authenticate = gdm_session_direct_authenticate; iface->authorize = gdm_session_direct_authorize; iface->accredit = gdm_session_direct_accredit; @@ -7250,10 +6934,10 @@ index c45a770..22c2ccb 100644 const char *service_name); void gdm_session_close (GdmSession *session); diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c -index 6eadf62..4c68974 100644 +index 2cbde68..a76c17f 100644 --- a/daemon/gdm-simple-slave.c +++ b/daemon/gdm-simple-slave.c -@@ -423,7 +423,7 @@ on_session_accredited (GdmSession *session, +@@ -428,7 +428,7 @@ on_session_accredited (GdmSession *session, const char *service_name, GdmSimpleSlave *slave) { @@ -7262,7 +6946,7 @@ index 6eadf62..4c68974 100644 } static void -@@ -463,6 +463,29 @@ on_session_accreditation_failed (GdmSession *session, +@@ -468,6 +468,29 @@ on_session_accreditation_failed (GdmSession *session, } static void @@ -7292,7 +6976,7 @@ index 6eadf62..4c68974 100644 on_session_info (GdmSession *session, const char *service_name, const char *text, -@@ -694,6 +717,14 @@ create_new_session (GdmSimpleSlave *slave) +@@ -699,6 +722,14 @@ create_new_session (GdmSimpleSlave *slave) G_CALLBACK (on_session_accreditation_failed), slave); g_signal_connect (slave->priv->session, @@ -7308,13 +6992,13 @@ index 6eadf62..4c68974 100644 G_CALLBACK (on_session_info), slave); -- -1.6.5.1 +1.6.5.2 -From a380ce9c46f25183c8bc2c36d3d7d923fb34d4f5 Mon Sep 17 00:00:00 2001 +From b3bdfcc2a7d2ef472867fc485ce1e3771b1aad86 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 30 Jan 2009 23:57:31 -0500 -Subject: [PATCH 42/81] Add limited support for multiple pam stacks +Subject: [PATCH 10/51] Add limited support for multiple pam stacks This hard codes 3 pam stacks and doesn't handle switching between them very well yet. @@ -7331,7 +7015,7 @@ switching between them very well yet. create mode 100644 gui/simple-greeter/gdm-task-list.h diff --git a/gui/simple-greeter/Makefile.am b/gui/simple-greeter/Makefile.am -index 519e652..fc2d4b3 100644 +index 1fa87cf..b85873f 100644 --- a/gui/simple-greeter/Makefile.am +++ b/gui/simple-greeter/Makefile.am @@ -85,6 +85,8 @@ test_greeter_login_window_SOURCES = \ @@ -7343,7 +7027,7 @@ index 519e652..fc2d4b3 100644 $(NULL) test_greeter_login_window_LDADD = \ -@@ -316,6 +318,8 @@ gdm_simple_greeter_SOURCES = \ +@@ -318,6 +320,8 @@ gdm_simple_greeter_SOURCES = \ gdm-session-option-widget.c \ gdm-user-chooser-widget.h \ gdm-user-chooser-widget.c \ @@ -7594,7 +7278,7 @@ index 8de74df..9c847f0 100644 g_signal_new ("user-selected", G_TYPE_FROM_CLASS (object_class), diff --git a/gui/simple-greeter/gdm-greeter-login-window.glade b/gui/simple-greeter/gdm-greeter-login-window.glade -index 7c6e94b..e06c091 100644 +index 1bbef32..020e21d 100644 --- a/gui/simple-greeter/gdm-greeter-login-window.glade +++ b/gui/simple-greeter/gdm-greeter-login-window.glade @@ -460,11 +460,38 @@ @@ -7640,7 +7324,7 @@ index 7c6e94b..e06c091 100644 0 -@@ -584,10 +611,6 @@ +@@ -590,10 +617,6 @@ @@ -8065,13 +7749,13 @@ index 0000000..ade21b6 + +#endif /* __GDM_TASK_LIST_H */ -- -1.6.5.1 +1.6.5.2 -From 7b611192c2aa9ef30b19e622e9ca525a7c343dc1 Mon Sep 17 00:00:00 2001 +From c4e206b1b41ae0dc7ba3989913fd3bd7e15b5588 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 6 Mar 2009 11:19:40 -0500 -Subject: [PATCH 43/81] Create session settings object when first starting worker +Subject: [PATCH 11/51] Create session settings object when first starting worker This is because one PAM module may complete before setup gets called on another, and when one completes *all* PAM @@ -8103,23 +7787,23 @@ index 867ce67..9a9f364 100644 static void -- -1.6.5.1 +1.6.5.2 -From f908d03d5515fac5c7700e49d20a3f69c159d8fe Mon Sep 17 00:00:00 2001 +From f98b6cd62fc08d8a355b05d06a2c9b30699d0cde Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Thu, 5 Feb 2009 15:20:25 -0500 -Subject: [PATCH 44/81] Queue a greeter reset when the user clicks cancel +Subject: [PATCH 12/51] Queue a greeter reset when the user clicks cancel --- daemon/gdm-simple-slave.c | 37 +++++++++++++++++++++++++++++++++++++ 1 files changed, 37 insertions(+), 0 deletions(-) diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c -index 4c68974..337718b 100644 +index a76c17f..a35c184 100644 --- a/daemon/gdm-simple-slave.c +++ b/daemon/gdm-simple-slave.c -@@ -818,6 +818,9 @@ on_greeter_start_conversation (GdmGreeterServer *greeter_server, +@@ -823,6 +823,9 @@ on_greeter_start_conversation (GdmGreeterServer *greeter_server, GdmSimpleSlave *slave) { g_debug ("GdmSimpleSlave: starting conversation with '%s' pam service'", service_name); @@ -8129,7 +7813,7 @@ index 4c68974..337718b 100644 gdm_session_start_conversation (GDM_SESSION (slave->priv->session), service_name); } -@@ -828,6 +831,9 @@ on_greeter_begin_verification (GdmGreeterServer *greeter_server, +@@ -833,6 +836,9 @@ on_greeter_begin_verification (GdmGreeterServer *greeter_server, GdmSimpleSlave *slave) { g_debug ("GdmSimpleSlave: begin verification"); @@ -8139,7 +7823,7 @@ index 4c68974..337718b 100644 gdm_session_setup (GDM_SESSION (slave->priv->session), service_name); } -@@ -838,6 +844,9 @@ on_greeter_begin_auto_login (GdmGreeterServer *greeter_server, +@@ -843,6 +849,9 @@ on_greeter_begin_auto_login (GdmGreeterServer *greeter_server, GdmSimpleSlave *slave) { g_debug ("GdmSimpleSlave: begin auto login for user '%s'", username); @@ -8149,7 +7833,7 @@ index 4c68974..337718b 100644 gdm_session_setup_for_user (GDM_SESSION (slave->priv->session), "gdm-autologin", username); -@@ -850,6 +859,9 @@ on_greeter_begin_verification_for_user (GdmGreeterServer *greeter_server, +@@ -855,6 +864,9 @@ on_greeter_begin_verification_for_user (GdmGreeterServer *greeter_server, GdmSimpleSlave *slave) { g_debug ("GdmSimpleSlave: begin verification"); @@ -8159,7 +7843,7 @@ index 4c68974..337718b 100644 gdm_session_setup_for_user (GDM_SESSION (slave->priv->session), service_name, username); -@@ -861,6 +873,9 @@ on_greeter_answer (GdmGreeterServer *greeter_server, +@@ -866,6 +878,9 @@ on_greeter_answer (GdmGreeterServer *greeter_server, const char *text, GdmSimpleSlave *slave) { @@ -8169,7 +7853,7 @@ index 4c68974..337718b 100644 gdm_session_answer_query (GDM_SESSION (slave->priv->session), service_name, text); } -@@ -869,6 +884,9 @@ on_greeter_session_selected (GdmGreeterServer *greeter_server, +@@ -874,6 +889,9 @@ on_greeter_session_selected (GdmGreeterServer *greeter_server, const char *text, GdmSimpleSlave *slave) { @@ -8179,7 +7863,7 @@ index 4c68974..337718b 100644 gdm_session_select_session (GDM_SESSION (slave->priv->session), text); } -@@ -877,6 +895,9 @@ on_greeter_language_selected (GdmGreeterServer *greeter_server, +@@ -882,6 +900,9 @@ on_greeter_language_selected (GdmGreeterServer *greeter_server, const char *text, GdmSimpleSlave *slave) { @@ -8189,7 +7873,7 @@ index 4c68974..337718b 100644 gdm_session_select_language (GDM_SESSION (slave->priv->session), text); } -@@ -885,6 +906,9 @@ on_greeter_layout_selected (GdmGreeterServer *greeter_server, +@@ -890,6 +911,9 @@ on_greeter_layout_selected (GdmGreeterServer *greeter_server, const char *text, GdmSimpleSlave *slave) { @@ -8199,7 +7883,7 @@ index 4c68974..337718b 100644 gdm_session_select_layout (GDM_SESSION (slave->priv->session), text); } -@@ -901,7 +925,11 @@ on_greeter_cancel (GdmGreeterServer *greeter_server, +@@ -906,7 +930,11 @@ on_greeter_cancel (GdmGreeterServer *greeter_server, GdmSimpleSlave *slave) { g_debug ("GdmSimpleSlave: Greeter cancelled"); @@ -8211,7 +7895,7 @@ index 4c68974..337718b 100644 } static void -@@ -911,6 +939,9 @@ on_greeter_connected (GdmGreeterServer *greeter_server, +@@ -916,6 +944,9 @@ on_greeter_connected (GdmGreeterServer *greeter_server, gboolean display_is_local; g_debug ("GdmSimpleSlave: Greeter connected"); @@ -8221,7 +7905,7 @@ index 4c68974..337718b 100644 g_object_get (slave, "display-is-local", &display_is_local, -@@ -928,6 +959,9 @@ on_start_session_when_ready (GdmGreeterServer *session, +@@ -933,6 +964,9 @@ on_start_session_when_ready (GdmGreeterServer *session, GdmSimpleSlave *slave) { g_debug ("GdmSimpleSlave: Will start session when ready"); @@ -8231,7 +7915,7 @@ index 4c68974..337718b 100644 slave->priv->start_session_when_ready = TRUE; if (slave->priv->waiting_to_start_session) { -@@ -941,6 +975,9 @@ on_start_session_later (GdmGreeterServer *session, +@@ -946,6 +980,9 @@ on_start_session_later (GdmGreeterServer *session, GdmSimpleSlave *slave) { g_debug ("GdmSimpleSlave: Will start session when ready and told"); @@ -8242,25 +7926,26 @@ index 4c68974..337718b 100644 } -- -1.6.5.1 +1.6.5.2 -From 775a32d565721e926312f23138b82e924233a900 Mon Sep 17 00:00:00 2001 +From 987252d49af223c0c1e616d63484e262622cf3a4 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 6 Feb 2009 16:23:48 -0500 -Subject: [PATCH 45/81] Add a plugin based extension system to greeter +Subject: [PATCH 13/51] Add a plugin based extension system to greeter This allows plugins to drive which PAM conversations get run. This commit just adds one plugin "password" which does the one PAM conversation we've traditionally run. --- - configure.ac | 45 ++ + configure.ac | 44 ++ gui/simple-greeter/Makefile.am | 15 + + gui/simple-greeter/foo.glade | 604 +++++++++++++++++ gui/simple-greeter/gdm-greeter-client.c | 21 + gui/simple-greeter/gdm-greeter-client.h | 2 + gui/simple-greeter/gdm-greeter-login-window.c | 675 ++++++++++++++++---- - gui/simple-greeter/gdm-greeter-login-window.glade | 144 +---- + gui/simple-greeter/gdm-greeter-login-window.glade | 150 +---- gui/simple-greeter/gdm-greeter-login-window.h | 21 +- gui/simple-greeter/gdm-greeter-plugin.c | 255 ++++++++ gui/simple-greeter/gdm-greeter-plugin.h | 61 ++ @@ -8285,7 +7970,8 @@ run. gui/simple-greeter/plugins/password/page.ui | 56 ++ gui/simple-greeter/plugins/password/plugin.c | 40 ++ po/POTFILES.in | 1 + - 30 files changed, 2986 insertions(+), 298 deletions(-) + 31 files changed, 3589 insertions(+), 304 deletions(-) + create mode 100644 gui/simple-greeter/foo.glade create mode 100644 gui/simple-greeter/gdm-greeter-plugin.c create mode 100644 gui/simple-greeter/gdm-greeter-plugin.h create mode 100644 gui/simple-greeter/gdm-plugin-manager.c @@ -8307,7 +7993,7 @@ run. create mode 100644 gui/simple-greeter/plugins/password/plugin.c diff --git a/configure.ac b/configure.ac -index 4fe4430..aa8a620 100644 +index dfb5398..6fae130 100644 --- a/configure.ac +++ b/configure.ac @@ -18,6 +18,22 @@ AC_PROG_CXX @@ -8349,10 +8035,11 @@ index 4fe4430..aa8a620 100644 dnl - Configure arguments dnl --------------------------------------------------------------------------- -@@ -1237,6 +1262,22 @@ fi - AC_SUBST(GDM_XAUTH_DIR) +@@ -1252,6 +1277,21 @@ fi - dnl --------------------------------------------------------------------------- + AC_SUBST(GDM_SCREENSHOT_DIR) + ++dnl --------------------------------------------------------------------------- +dnl - Directory for simple greeter plugins +dnl --------------------------------------------------------------------------- + @@ -8367,12 +8054,10 @@ index 4fe4430..aa8a620 100644 +fi + +AC_SUBST(GDM_SIMPLE_GREETER_PLUGINS_DIR) -+ -+dnl --------------------------------------------------------------------------- - dnl - Finish - dnl --------------------------------------------------------------------------- -@@ -1363,6 +1404,10 @@ docs/Makefile + dnl --------------------------------------------------------------------------- + dnl - Finish +@@ -1380,6 +1420,10 @@ docs/Makefile gui/Makefile gui/simple-greeter/Makefile gui/simple-greeter/libnotificationarea/Makefile @@ -8384,7 +8069,7 @@ index 4fe4430..aa8a620 100644 gui/user-switch-applet/Makefile utils/Makefile diff --git a/gui/simple-greeter/Makefile.am b/gui/simple-greeter/Makefile.am -index fc2d4b3..5056956 100644 +index b85873f..133e034 100644 --- a/gui/simple-greeter/Makefile.am +++ b/gui/simple-greeter/Makefile.am @@ -2,11 +2,14 @@ NULL = @@ -8434,7 +8119,7 @@ index fc2d4b3..5056956 100644 $(SIMPLE_GREETER_LIBS) \ $(GTK_LIBS) \ $(GCONF_LIBS) \ -@@ -312,10 +322,14 @@ gdm_simple_greeter_SOURCES = \ +@@ -314,10 +324,14 @@ gdm_simple_greeter_SOURCES = \ gdm-language-chooser-dialog.c \ gdm-language-option-widget.h \ gdm-language-option-widget.c \ @@ -8449,7 +8134,7 @@ index fc2d4b3..5056956 100644 gdm-user-chooser-widget.h \ gdm-user-chooser-widget.c \ gdm-task-list.h \ -@@ -326,6 +340,7 @@ gdm_simple_greeter_LDADD = \ +@@ -328,6 +342,7 @@ gdm_simple_greeter_LDADD = \ $(top_builddir)/common/libgdmcommon.la \ libgdmuser.la \ $(top_builddir)/gui/simple-greeter/libnotificationarea/libnotificationarea.la \ @@ -8457,6 +8142,616 @@ index fc2d4b3..5056956 100644 $(COMMON_LIBS) \ $(EXTRA_GREETER_LIBS) \ $(SIMPLE_GREETER_LIBS) \ +diff --git a/gui/simple-greeter/foo.glade b/gui/simple-greeter/foo.glade +new file mode 100644 +index 0000000..7c767d2 +--- /dev/null ++++ b/gui/simple-greeter/foo.glade +@@ -0,0 +1,604 @@ ++ ++ ++ ++ ++ ++ ++ 400 ++ True ++ Authentication Dialog ++ GTK_WINDOW_TOPLEVEL ++ GTK_WIN_POS_NONE ++ False ++ True ++ False ++ True ++ False ++ False ++ GDK_WINDOW_TYPE_HINT_DIALOG ++ GDK_GRAVITY_NORTH_WEST ++ True ++ False ++ ++ ++ ++ True ++ 0 ++ 0.5 ++ GTK_SHADOW_OUT ++ ++ ++ ++ 24 ++ True ++ 0.5 ++ 0.5 ++ 1 ++ 1 ++ 0 ++ 0 ++ 0 ++ 0 ++ ++ ++ ++ True ++ False ++ 10 ++ ++ ++ ++ True ++ 0.5 ++ 0.5 ++ 1 ++ 1 ++ 0 ++ 0 ++ 0 ++ 0 ++ ++ ++ ++ True ++ computer ++ 64 ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ ++ ++ ++ ++ 0 ++ False ++ False ++ ++ ++ ++ ++ ++ True ++ False ++ False ++ ++ ++ ++ True ++ False ++ False ++ GTK_POS_TOP ++ False ++ False ++ ++ ++ ++ True ++ Computer Name ++ False ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ False ++ True ++ ++ ++ ++ ++ ++ True ++ page 5 ++ False ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ tab ++ ++ ++ ++ ++ ++ True ++ Version ++ False ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ False ++ True ++ ++ ++ ++ ++ ++ True ++ ++ False ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ tab ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ ++ False ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ tab ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ ++ False ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ tab ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ ++ False ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ tab ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ ++ False ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ tab ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ ++ False ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ tab ++ ++ ++ ++ ++ ++ ++ 0 ++ False ++ False ++ ++ ++ ++ ++ ++ True ++ GTK_BUTTONBOX_END ++ 6 ++ ++ ++ ++ True ++ True ++ gtk-cancel ++ True ++ GTK_RELIEF_NORMAL ++ True ++ ++ ++ ++ ++ ++ True ++ True ++ True ++ True ++ GTK_RELIEF_NORMAL ++ True ++ ++ ++ ++ True ++ False ++ 0 ++ ++ ++ ++ True ++ go-home ++ 16 ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ ++ ++ 0 ++ True ++ True ++ ++ ++ ++ ++ ++ True ++ Log In ++ False ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ 0 ++ True ++ True ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ False ++ False ++ GTK_PACK_END ++ ++ ++ ++ ++ ++ True ++ ++ False ++ False ++ GTK_JUSTIFY_CENTER ++ True ++ False ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ 0 ++ True ++ True ++ ++ ++ ++ ++ ++ True ++ 0.5 ++ 0.5 ++ 1 ++ 1 ++ 0 ++ 0 ++ 0 ++ 0 ++ ++ ++ ++ True ++ False ++ 10 ++ ++ ++ ++ True ++ 0 ++ 0 ++ Tue, 18 Nov 2008 21:55:38 GMT ++ ++ ++ 0 ++ True ++ True ++ ++ ++ ++ ++ ++ True ++ False ++ 6 ++ ++ ++ ++ True ++ ++ False ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ False ++ False ++ ++ ++ ++ ++ ++ True ++ True ++ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK ++ True ++ True ++ 0 ++ ++ True ++ True ++ ++ ++ ++ ++ ++ 0 ++ True ++ True ++ ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ False ++ False ++ ++ ++ ++ ++ ++ True ++ False ++ 0 ++ ++ ++ ++ True ++ ++ False ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ True ++ True ++ ++ ++ ++ ++ 0 ++ False ++ False ++ ++ ++ ++ ++ ++ ++ 0 ++ True ++ True ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ diff --git a/gui/simple-greeter/gdm-greeter-client.c b/gui/simple-greeter/gdm-greeter-client.c index 0bd27a9..a9321aa 100644 --- a/gui/simple-greeter/gdm-greeter-client.c @@ -9502,7 +9797,7 @@ index 9c847f0..af8ff82 100644 on_window_state_event (GtkWidget *widget, GdkEventWindowState *event, diff --git a/gui/simple-greeter/gdm-greeter-login-window.glade b/gui/simple-greeter/gdm-greeter-login-window.glade -index e06c091..d221d78 100644 +index 020e21d..d221d78 100644 --- a/gui/simple-greeter/gdm-greeter-login-window.glade +++ b/gui/simple-greeter/gdm-greeter-login-window.glade @@ -417,30 +417,29 @@ @@ -9579,7 +9874,7 @@ index e06c091..d221d78 100644 True 0 -@@ -492,56 +477,12 @@ +@@ -492,62 +477,12 @@ False @@ -9614,6 +9909,9 @@ index e06c091..d221d78 100644 - -1 - False - 0 +- +- +- - - - 0 @@ -9633,6 +9931,9 @@ index e06c091..d221d78 100644 - - True - True +- +- +- + + 0 + 0 @@ -9640,7 +9941,7 @@ index e06c091..d221d78 100644 0 -@@ -550,46 +491,21 @@ +@@ -556,46 +491,21 @@ @@ -12435,13 +12736,13 @@ index 9fb8a48..3963bd6 100644 gui/user-switch-applet/gdm-entry-menu-item.c gui/user-switch-applet/GNOME_FastUserSwitchApplet.server.in.in -- -1.6.5.1 +1.6.5.2 -From 58281be140f8065de49d6392c0db439840cf9c9b Mon Sep 17 00:00:00 2001 +From d25abaa78daf5b415ae56dfbc3dbc4f44d8eacad Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Sat, 7 Feb 2009 21:17:49 -0500 -Subject: [PATCH 46/81] Force session reset if all PAM conversations fail +Subject: [PATCH 14/51] Force session reset if all PAM conversations fail --- gui/simple-greeter/gdm-greeter-login-window.c | 22 +++++++++++++++++++--- @@ -12494,13 +12795,13 @@ index af8ff82..e27b905 100644 } -- -1.6.5.1 +1.6.5.2 -From d2e1f986ae6c5c5b6e55df7f062031160ebb4dc6 Mon Sep 17 00:00:00 2001 +From d17c8e0386e9709cf4cfc6ab8ba236e08f01a27d Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 18 Feb 2009 12:32:39 -0500 -Subject: [PATCH 47/81] Add a way for plugins to pick users from list +Subject: [PATCH 15/51] Add a way for plugins to pick users from list The smartcard plugin is going to want to start its conversation as soon as the card @@ -12651,32 +12952,32 @@ index f1910cf..fb4bf49 100644 G_END_DECLS -- -1.6.5.1 +1.6.5.2 -From bd213dd68b7002b38fcf739d013f9a17f9f8b3eb Mon Sep 17 00:00:00 2001 +From 2cca89c31e143c15dec0511575ccafa67a6ec470 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 20 Feb 2009 14:05:20 -0500 -Subject: [PATCH 48/81] Add new api to ask when chooser widget is done loading items +Subject: [PATCH 16/51] Add new api to ask when chooser widget is done loading items --- - gui/simple-greeter/gdm-chooser-widget.c | 9 +++++++++ + gui/simple-greeter/gdm-chooser-widget.c | 8 ++++++++ gui/simple-greeter/gdm-chooser-widget.h | 2 ++ - 2 files changed, 11 insertions(+), 0 deletions(-) + 2 files changed, 10 insertions(+), 0 deletions(-) diff --git a/gui/simple-greeter/gdm-chooser-widget.c b/gui/simple-greeter/gdm-chooser-widget.c -index cbd5072..ee5eeb0 100644 +index 0f6859a..2282179 100644 --- a/gui/simple-greeter/gdm-chooser-widget.c +++ b/gui/simple-greeter/gdm-chooser-widget.c -@@ -93,6 +93,7 @@ struct GdmChooserWidgetPrivate +@@ -92,6 +92,7 @@ struct GdmChooserWidgetPrivate + guint32 should_hide_inactive_items : 1; guint32 emit_activated_after_resize_animation : 1; - guint32 was_fully_grown : 1; + guint32 is_loaded : 1; GdmChooserWidgetPosition separator_position; GdmChooserWidgetState state; -@@ -2541,8 +2542,16 @@ gdm_chooser_widget_propagate_pending_key_events (GdmChooserWidget *widget) +@@ -2518,9 +2519,16 @@ gdm_chooser_widget_propagate_pending_key_events (GdmChooserWidget *widget) gdm_scrollable_widget_replay_queued_key_events (GDM_SCROLLABLE_WIDGET (widget->priv->scrollable_widget)); } @@ -12689,8 +12990,8 @@ index cbd5072..ee5eeb0 100644 void gdm_chooser_widget_loaded (GdmChooserWidget *widget) { + gdm_chooser_widget_grow (widget); + widget->priv->is_loaded = TRUE; -+ g_signal_emit (widget, signals[LOADED], 0); } diff --git a/gui/simple-greeter/gdm-chooser-widget.h b/gui/simple-greeter/gdm-chooser-widget.h @@ -12707,13 +13008,13 @@ index 7e3e59c..6a07843 100644 */ void gdm_chooser_widget_loaded (GdmChooserWidget *widget); -- -1.6.5.1 +1.6.5.2 -From aa3ae5b264ffa04c88f56be187a70e3845b2ef95 Mon Sep 17 00:00:00 2001 +From 77366a93d74212246b81af877d7fca26adae69c5 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 20 Feb 2009 14:31:27 -0500 -Subject: [PATCH 49/81] Tell tasks they're ready only after user list loads +Subject: [PATCH 17/51] Tell tasks they're ready only after user list loads This way they won't try to access the list prematurely. --- @@ -12767,13 +13068,13 @@ index 912a1e6..4c14d40 100644 } -- -1.6.5.1 +1.6.5.2 -From f7640b51fa287e75cde6170f0cd3b402f10e9db7 Mon Sep 17 00:00:00 2001 +From f61d21bc5c2bfceafa7212dd51c3791af33ff78b Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 6 Feb 2009 16:25:47 -0500 -Subject: [PATCH 50/81] Add fingerprint plugin +Subject: [PATCH 18/51] Add fingerprint plugin This commit adds a plugin to initiate a conversation for fingerprint scans. @@ -12801,10 +13102,10 @@ fingerprint scans. create mode 100644 gui/simple-greeter/plugins/fingerprint/plugin.c diff --git a/configure.ac b/configure.ac -index aa8a620..c183a37 100644 +index 6fae130..fa155d1 100644 --- a/configure.ac +++ b/configure.ac -@@ -1408,6 +1408,10 @@ gui/simple-greeter/libgdmsimplegreeter/Makefile +@@ -1424,6 +1424,10 @@ gui/simple-greeter/libgdmsimplegreeter/Makefile gui/simple-greeter/libgdmsimplegreeter/gdmsimplegreeter.pc gui/simple-greeter/plugins/Makefile gui/simple-greeter/plugins/password/Makefile @@ -13412,13 +13713,13 @@ index 0000000..5ea9925 + return GDM_GREETER_EXTENSION (extension); +} -- -1.6.5.1 +1.6.5.2 -From d727101394f9ce3c121c2ab7d7f37671f2c807aa Mon Sep 17 00:00:00 2001 +From 181679891218cc701d40a714c78afbc1b2508065 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 11 Feb 2009 08:47:52 -0500 -Subject: [PATCH 51/81] Add start of a smartcard plugin +Subject: [PATCH 19/51] Add start of a smartcard plugin It contains a copy and paste of an old RHEL patch I did a few years ago. @@ -13461,7 +13762,7 @@ I did a few years ago. create mode 100644 gui/simple-greeter/plugins/smartcard/plugin.c diff --git a/configure.ac b/configure.ac -index c183a37..5a007a8 100644 +index fa155d1..433bc42 100644 --- a/configure.ac +++ b/configure.ac @@ -68,6 +68,7 @@ LIBCANBERRA_GTK_REQUIRED_VERSION=0.4 @@ -13485,7 +13786,7 @@ index c183a37..5a007a8 100644 PKG_CHECK_MODULES(XLIB, x11 xau, , [AC_PATH_XTRA if test "x$no_x" = xyes; then -@@ -1412,6 +1419,10 @@ gui/simple-greeter/plugins/fingerprint/Makefile +@@ -1428,6 +1435,10 @@ gui/simple-greeter/plugins/fingerprint/Makefile gui/simple-greeter/plugins/fingerprint/icons/Makefile gui/simple-greeter/plugins/fingerprint/icons/16x16/Makefile gui/simple-greeter/plugins/fingerprint/icons/48x48/Makefile @@ -16692,13 +16993,13 @@ index 3963bd6..4d219fb 100644 gui/user-switch-applet/gdm-entry-menu-item.c gui/user-switch-applet/GNOME_FastUserSwitchApplet.server.in.in -- -1.6.5.1 +1.6.5.2 -From abba21674b3db119288f89d3ccf4a84379f8fbc6 Mon Sep 17 00:00:00 2001 +From b6b5d39ed494a0a7c900fda438b6abd84f3ef318 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 23 Feb 2009 17:57:06 -0500 -Subject: [PATCH 52/81] Add a new "choosable" property to show tasks in user list +Subject: [PATCH 20/51] Add a new "choosable" property to show tasks in user list Useful for Smartcard and some future "Guest" account plugin --- @@ -16851,13 +17152,13 @@ index 6fa01fb..25d5de4 100644 static void -- -1.6.5.1 +1.6.5.2 -From 7ff0274b43e1d0dd6e0f1ec1ac60f628c546679b Mon Sep 17 00:00:00 2001 +From 18ce73c085f9823c41d1cd8fe22fa125719e2310 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Tue, 24 Feb 2009 15:12:35 -0500 -Subject: [PATCH 53/81] Separate handling of non-users in user list from users +Subject: [PATCH 21/51] Separate handling of non-users in user list from users Now get_chosen_user returns NULL if the activated item wasn't a user. We also separate the handling of on item @@ -17014,13 +17315,13 @@ index 7aa99e7..316ef46 100644 } -- -1.6.5.1 +1.6.5.2 -From 5471f0fc6d996cf8b8bccd5bfc87b00aee5d8539 Mon Sep 17 00:00:00 2001 +From 25bcf5cc3ef5766684c4ae72ddcf9e71fd1ecffb Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 27 Feb 2009 15:44:13 -0500 -Subject: [PATCH 54/81] Initiate smart card auth when clicking on it in list +Subject: [PATCH 22/51] Initiate smart card auth when clicking on it in list --- gui/simple-greeter/gdm-greeter-login-window.c | 24 ++++++++++++++++++++ @@ -17090,13 +17391,13 @@ index 25d5de4..a9e41f4 100644 gdm_conversation_cancel (GDM_CONVERSATION (extension)); } -- -1.6.5.1 +1.6.5.2 -From 9b1dd8920d77ac6eb29019dbeb0f7cc4dfa7d9f5 Mon Sep 17 00:00:00 2001 +From 36c744a34def8423af3f2d1765082a35fd7b83e3 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 2 Mar 2009 11:10:28 -0500 -Subject: [PATCH 55/81] Only show task list if user is selected +Subject: [PATCH 23/51] Only show task list if user is selected --- gui/simple-greeter/gdm-greeter-login-window.c | 32 ++++++++++++++---------- @@ -17240,13 +17541,13 @@ index 25831a6..162b784 100644 int -- -1.6.5.1 +1.6.5.2 -From 3902afbcf465b15c6638b759c2ffece24f0b3f82 Mon Sep 17 00:00:00 2001 +From f68295cc9ef44b84c973973d21daf052ee034900 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 2 Mar 2009 13:53:34 -0500 -Subject: [PATCH 56/81] Pull verification functions out into their own subroutines +Subject: [PATCH 24/51] Pull verification functions out into their own subroutines This makes the function smaller and easier to read --- @@ -17435,13 +17736,13 @@ index b578ac1..4314955 100644 } -- -1.6.5.1 +1.6.5.2 -From e32a388bf163a1ff59e0d1aa850b19043150f5e7 Mon Sep 17 00:00:00 2001 +From 8ad23d8e5c66e0d49e781a80b1f746242b9a6217 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 2 Mar 2009 13:57:34 -0500 -Subject: [PATCH 57/81] Add new function find_task_with_service_name +Subject: [PATCH 25/51] Add new function find_task_with_service_name It hides a bunch of icky foreach calls. --- @@ -17559,13 +17860,13 @@ index 4314955..12bda46 100644 if (task == NULL) { g_debug ("GdmGreeterLoginWindow: %s has no task associated with it", service_name); -- -1.6.5.1 +1.6.5.2 -From 1d866e5714a270c9192c70cc0ad1c61537700b61 Mon Sep 17 00:00:00 2001 +From 0b3464cd1db16b1b4b4bfe24d19aa281db740bd1 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 2 Mar 2009 17:09:16 -0500 -Subject: [PATCH 58/81] Notify plugins if their user choose requests fail +Subject: [PATCH 26/51] Notify plugins if their user choose requests fail This allows the smart card plugin to cancel pending conversations when a card gets inserted. @@ -17772,13 +18073,13 @@ index a9e41f4..274132e 100644 char * -- -1.6.5.1 +1.6.5.2 -From 96713ef041fb14215eb062f4023e40a8ed62359a Mon Sep 17 00:00:00 2001 +From 64dff7616770395fbbd207365a31ce0ad51db2b2 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 13 Apr 2009 14:19:50 -0400 -Subject: [PATCH 59/81] reset all conversations if password conversation fails +Subject: [PATCH 27/51] reset all conversations if password conversation fails This is a temporary hack until we store plugin policy in gconf. @@ -17808,13 +18109,13 @@ index 38ec8d0..8a72e9d 100644 if (task != NULL) { -- -1.6.5.1 +1.6.5.2 -From 3a5dd5f7ac6eabf35677969127db238bc57afb23 Mon Sep 17 00:00:00 2001 +From dfa573c4e147eaf3121f77b95e0ece9def6b40b3 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Tue, 21 Apr 2009 10:25:18 -0400 -Subject: [PATCH 60/81] When one PAM conversation wins, stop the others +Subject: [PATCH 28/51] When one PAM conversation wins, stop the others This doesn't work yet, it's still in progress code. --- @@ -17823,7 +18124,7 @@ This doesn't work yet, it's still in progress code. 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c -index 738267a..52a67c4 100644 +index dbafe0e..006c0af 100644 --- a/daemon/gdm-session-direct.c +++ b/daemon/gdm-session-direct.c @@ -2258,6 +2258,40 @@ gdm_session_direct_open_session (GdmSession *session, @@ -17867,7 +18168,7 @@ index 738267a..52a67c4 100644 gdm_session_direct_start_session (GdmSession *session, const char *service_name) { -@@ -2269,12 +2303,20 @@ gdm_session_direct_start_session (GdmSession *session, +@@ -2269,6 +2303,16 @@ gdm_session_direct_start_session (GdmSession *session, g_return_if_fail (session != NULL); g_return_if_fail (impl->priv->is_running == FALSE); @@ -17882,7 +18183,10 @@ index 738267a..52a67c4 100644 + stop_all_other_conversations (impl, conversation); + command = get_session_command (impl); - program = g_strdup_printf (GDMCONFDIR "/Xsession \"%s\"", command); + + if (gdm_session_direct_bypasses_xsession (impl)) { +@@ -2279,8 +2323,6 @@ gdm_session_direct_start_session (GdmSession *session, + g_free (command); - conversation = find_conversation_by_name (impl, service_name); @@ -17890,7 +18194,7 @@ index 738267a..52a67c4 100644 setup_session_environment (impl); send_environment (impl, conversation); -@@ -2285,23 +2327,7 @@ gdm_session_direct_start_session (GdmSession *session, +@@ -2291,23 +2333,7 @@ gdm_session_direct_start_session (GdmSession *session, static void stop_all_conversations (GdmSessionDirect *session) { @@ -17916,10 +18220,10 @@ index 738267a..52a67c4 100644 static void diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c -index 337718b..63ea82c 100644 +index a35c184..0453b50 100644 --- a/daemon/gdm-simple-slave.c +++ b/daemon/gdm-simple-slave.c -@@ -575,7 +575,7 @@ on_session_conversation_stopped (GdmSession *session, +@@ -580,7 +580,7 @@ on_session_conversation_stopped (GdmSession *session, gboolean res; g_debug ("GdmSimpleSlave: conversation stopped"); @@ -17929,13 +18233,13 @@ index 337718b..63ea82c 100644 service_name); if (! res) { -- -1.6.5.1 +1.6.5.2 -From 6a2b392cd5b36c13035ffdb70701057b15c92a70 Mon Sep 17 00:00:00 2001 +From 9f99cc13b24f1a2fe4256d388aa7d32afda9f588 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Tue, 21 Apr 2009 15:30:28 -0400 -Subject: [PATCH 61/81] When one PAM conv. wins, actually stop the others +Subject: [PATCH 29/51] When one PAM conv. wins, actually stop the others We weren't properly keeping the winning conversation around in the previous commit @@ -17944,7 +18248,7 @@ around in the previous commit 1 files changed, 10 insertions(+), 3 deletions(-) diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c -index 52a67c4..7cc5511 100644 +index 006c0af..e90b6fe 100644 --- a/daemon/gdm-session-direct.c +++ b/daemon/gdm-session-direct.c @@ -2282,13 +2282,20 @@ stop_all_other_conversations (GdmSessionDirect *session, @@ -17972,13 +18276,13 @@ index 52a67c4..7cc5511 100644 static void -- -1.6.5.1 +1.6.5.2 -From 142f6a9c969526561b7bccb05d14c16bb6543540 Mon Sep 17 00:00:00 2001 +From 955ea26f457c086171fb0caf4c6c00c9a153df66 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 24 Jul 2009 14:41:48 -0400 -Subject: [PATCH 62/81] KILL pam stack instead of TERM pam stack +Subject: [PATCH 30/51] KILL pam stack instead of TERM pam stack Some PAM modules are really slow to shut down. We need to handle them being slow to shut down better, @@ -18004,13 +18308,13 @@ index 0327d77..d99b8a5 100644 if (res < 0) { g_warning ("Unable to kill session worker process"); -- -1.6.5.1 +1.6.5.2 -From 03166ed45888420651008bc7be7c0d51b4397f94 Mon Sep 17 00:00:00 2001 +From fc9dcc99bdf2ee790f34e7777df5a6247dd4ce9c Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 21 Oct 2009 16:08:52 -0400 -Subject: [PATCH 63/81] Don't show tasklist for autologin +Subject: [PATCH 31/51] Don't show tasklist for autologin --- gui/simple-greeter/gdm-greeter-login-window.c | 5 +++++ @@ -18033,13 +18337,13 @@ index 8a72e9d..4991cb1 100644 static gboolean -- -1.6.5.1 +1.6.5.2 -From f8561b2383c343f2afb962e9ac77b58eac909b82 Mon Sep 17 00:00:00 2001 +From 79aa61f3a47e77352481784f3cbbef59668ca66a Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 23 Oct 2009 17:39:19 -0400 -Subject: [PATCH 64/81] Drop the other hiding stuff for now. +Subject: [PATCH 32/51] Drop the other hiding stuff for now. It depends on buttons being available that we don't have in the multi-stack branch. @@ -18067,13 +18371,13 @@ index bff71e5..4d3c445 100644 } } -- -1.6.5.1 +1.6.5.2 -From a1835572951be24cdaa15496708d502ef90e29ff Mon Sep 17 00:00:00 2001 +From 38b4f36ede2262da12fe9aad16f599ae34e5b7b4 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 11:13:10 -0400 -Subject: [PATCH 65/81] Prevent start session signal handler from getting called multiple times +Subject: [PATCH 33/51] Prevent start session signal handler from getting called multiple times It was causing a double free. --- @@ -18103,13 +18407,13 @@ index 4991cb1..4e147ea 100644 static void -- -1.6.5.1 +1.6.5.2 -From 258e9beb0536e6bebe2e6fff805d37d2ae652b06 Mon Sep 17 00:00:00 2001 +From 42992afa2a2221cf7c9052f96023c1533863a697 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 13:57:53 -0400 -Subject: [PATCH 66/81] Don't show unimportant images on plugin buttons +Subject: [PATCH 34/51] Don't show unimportant images on plugin buttons --- gui/simple-greeter/gdm-greeter-login-window.c | 8 +++++++- @@ -18136,13 +18440,13 @@ index 4e147ea..0ec21a3 100644 static void -- -1.6.5.1 +1.6.5.2 -From c860fc44cf9d64c77418bcd68fc76b2afa1985e3 Mon Sep 17 00:00:00 2001 +From 4a7a82e423c22aed9f4cd803e0eb22cdcd037fd9 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 14:10:35 -0400 -Subject: [PATCH 67/81] Add visibility concept to task iface +Subject: [PATCH 35/51] Add visibility concept to task iface --- gui/simple-greeter/libgdmsimplegreeter/gdm-task.c | 6 ++++++ @@ -18187,13 +18491,13 @@ index c75bf29..51e2b0a 100644 #endif /* __GDM_TASK_H */ -- -1.6.5.1 +1.6.5.2 -From 3422e1dad813487e78494ea4692fb3be9d61efda Mon Sep 17 00:00:00 2001 +From c45c03cd8ba8f9cefd00e4e8347e185c3b193bcb Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 14:10:50 -0400 -Subject: [PATCH 68/81] adapt fingerprint to task iface +Subject: [PATCH 36/51] adapt fingerprint to task iface --- .../fingerprint/gdm-fingerprint-extension.c | 7 +++++++ @@ -18225,13 +18529,13 @@ index 316ef46..e1fc0ed 100644 static void -- -1.6.5.1 +1.6.5.2 -From 7c1ab32679980a32fae94905d01cc822031e4bca Mon Sep 17 00:00:00 2001 +From 8cd7ed4e13e6fb477faa58aa6aad1d63c2e07bb2 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 14:11:05 -0400 -Subject: [PATCH 69/81] adapt smartcard plugin to task iface +Subject: [PATCH 37/51] adapt smartcard plugin to task iface --- .../plugins/smartcard/gdm-smartcard-extension.c | 7 +++++++ @@ -18263,13 +18567,13 @@ index 274132e..9967d5f 100644 static void -- -1.6.5.1 +1.6.5.2 -From 43803699c351da5ba35197cf7412cb959560e8a0 Mon Sep 17 00:00:00 2001 +From 0f61c14953cf968448eb901cefd7b3c4849456d4 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 14:10:50 -0400 -Subject: [PATCH 70/81] adapt password to task iface +Subject: [PATCH 38/51] adapt password to task iface --- .../plugins/password/gdm-password-extension.c | 7 +++++++ @@ -18301,13 +18605,13 @@ index 4922c65..255283e 100644 static void -- -1.6.5.1 +1.6.5.2 -From d28601ec6717b9d352367593fccef27a6f2fdea9 Mon Sep 17 00:00:00 2001 +From 519da1adeff67f5a4ccefe9cb85b342148e02757 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 16:05:14 -0400 -Subject: [PATCH 71/81] Return a different error code for "service won't work" than "auth failed" +Subject: [PATCH 39/51] Return a different error code for "service won't work" than "auth failed" If we bubble it up to the greeter then we should be able to have a more sensible UI when e.g. fingerprinting isn't enabled. @@ -18359,13 +18663,13 @@ index ee5465a..b1c8285 100644 GDM_SESSION_WORKER_ERROR_AUTHORIZING, GDM_SESSION_WORKER_ERROR_OPENING_LOG_FILE, -- -1.6.5.1 +1.6.5.2 -From 1d4ed3a5bbf11ef7211227bb9775c605b67f4e66 Mon Sep 17 00:00:00 2001 +From 0b71cf75c8a726878bd9252716aa79ff4290b175 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 21:32:00 -0400 -Subject: [PATCH 72/81] Emit "service-unavailable" from session when pam service refuses to work +Subject: [PATCH 40/51] Emit "service-unavailable" from session when pam service refuses to work --- daemon/gdm-session-direct.c | 26 +++++++++++++++++++++++--- @@ -18377,7 +18681,7 @@ Subject: [PATCH 72/81] Emit "service-unavailable" from session when pam service 6 files changed, 103 insertions(+), 10 deletions(-) diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c -index 7cc5511..8a22409 100644 +index e90b6fe..5eaa252 100644 --- a/daemon/gdm-session-direct.c +++ b/daemon/gdm-session-direct.c @@ -275,9 +275,27 @@ on_session_exited (GdmSession *session, @@ -18598,13 +18902,13 @@ index 22c2ccb..9636b92 100644 const char *service_name); void (* setup_for_user) (GdmSession *session, -- -1.6.5.1 +1.6.5.2 -From 0a51dbadadfb9695624ee14b5ec12574e9f647bf Mon Sep 17 00:00:00 2001 +From 9a392803f3c87836b5adb31158a6ddee159446fb Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 21:38:52 -0400 -Subject: [PATCH 73/81] Bubble service-unavailable up to greeter +Subject: [PATCH 41/51] Bubble service-unavailable up to greeter --- daemon/gdm-greeter-server.c | 8 ++++++++ @@ -18645,10 +18949,10 @@ index 976f0b7..c1da2f4 100644 gboolean gdm_greeter_server_ready (GdmGreeterServer *greeter_server, const char *service_name); diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c -index 63ea82c..29d0aee 100644 +index 0453b50..cf2a556 100644 --- a/daemon/gdm-simple-slave.c +++ b/daemon/gdm-simple-slave.c -@@ -206,6 +206,19 @@ queue_greeter_reset (GdmSimpleSlave *slave) +@@ -211,6 +211,19 @@ queue_greeter_reset (GdmSimpleSlave *slave) } static void @@ -18668,7 +18972,7 @@ index 63ea82c..29d0aee 100644 on_session_setup_complete (GdmSession *session, const char *service_name, GdmSimpleSlave *slave) -@@ -677,6 +690,10 @@ create_new_session (GdmSimpleSlave *slave) +@@ -682,6 +695,10 @@ create_new_session (GdmSimpleSlave *slave) G_CALLBACK (on_session_conversation_stopped), slave); g_signal_connect (slave->priv->session, @@ -18680,13 +18984,13 @@ index 63ea82c..29d0aee 100644 G_CALLBACK (on_session_setup_complete), slave); -- -1.6.5.1 +1.6.5.2 -From ebf9fce3ff13743a65e14a65f6393cfc3cec4e0c Mon Sep 17 00:00:00 2001 +From a57508de7999049e0418f60c4f3659bd9b219bb8 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 21:46:39 -0400 -Subject: [PATCH 74/81] Catch service-unavailable from server in client and propagate it +Subject: [PATCH 42/51] Catch service-unavailable from server in client and propagate it --- gui/simple-greeter/gdm-greeter-client.c | 20 ++++++++++++++++++++ @@ -18759,13 +19063,13 @@ index f879307..801bae4 100644 const char *service_name); void (* conversation_stopped) (GdmGreeterClient *client, -- -1.6.5.1 +1.6.5.2 -From 4e6491ba559c142189a0b17342db780b7a462d6c Mon Sep 17 00:00:00 2001 +From 1c58a6b3bad3081408ec65f153a68baf0a5ad551 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 22:04:44 -0400 -Subject: [PATCH 75/81] Fix memory handling of task in task list +Subject: [PATCH 43/51] Fix memory handling of task in task list --- gui/simple-greeter/gdm-task-list.c | 5 +++-- @@ -18795,13 +19099,13 @@ index 162b784..be50832 100644 G_OBJECT_CLASS (gdm_task_list_parent_class)->finalize (object); -- -1.6.5.1 +1.6.5.2 -From 7a609b6bc2e02c1afe47540dfb3daca37cd48cd1 Mon Sep 17 00:00:00 2001 +From 3150b82ace1a469ef0d7369d1cbca7f1901d642c Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 22:09:45 -0400 -Subject: [PATCH 76/81] Add gdm_task_list_remove_task +Subject: [PATCH 44/51] Add gdm_task_list_remove_task --- gui/simple-greeter/gdm-task-list.c | 29 +++++++++++++++++++++++++++++ @@ -18863,13 +19167,13 @@ index 8bc0c0e..3df5415 100644 G_END_DECLS -- -1.6.5.1 +1.6.5.2 -From 249388ea72690fe3526ff48797aaf0206d40a49c Mon Sep 17 00:00:00 2001 +From d25cbe607c6365640e1e2eb8bbb5da60bedbeaf2 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 21:58:44 -0400 -Subject: [PATCH 77/81] Remove task from task list if unavailable +Subject: [PATCH 45/51] Remove task from task list if unavailable --- gui/simple-greeter/gdm-greeter-login-window.c | 20 ++++++++++++++++++++ @@ -18955,13 +19259,13 @@ index 848ea1e..3bf24e8 100644 G_CALLBACK (on_ready), session); -- -1.6.5.1 +1.6.5.2 -From 1a44c10dda2b2cdab965cc15db392513aaafd339 Mon Sep 17 00:00:00 2001 +From 5eeb6c6d3522963c0dbe0b3923c596f3e08e7dc7 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Oct 2009 23:55:00 -0400 -Subject: [PATCH 78/81] Don't add task to UI if it's invisible +Subject: [PATCH 46/51] Don't add task to UI if it's invisible --- gui/simple-greeter/gdm-greeter-login-window.c | 14 +++++++++++--- @@ -19000,13 +19304,13 @@ index 6a5b77e..9280d76 100644 name, description); -- -1.6.5.1 +1.6.5.2 -From 8bcb4b752b8d8efb62f9d4560de8076fbf2ed4bb Mon Sep 17 00:00:00 2001 +From b8b0470e8ea5b9f1c502ba2621fca3112e8a40cd Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Thu, 29 Oct 2009 00:39:20 -0400 -Subject: [PATCH 79/81] add lame check to see if fingerprint is enabled +Subject: [PATCH 47/51] add lame check to see if fingerprint is enabled --- .../fingerprint/gdm-fingerprint-extension.c | 35 +++++++++++++++++++- @@ -19059,13 +19363,13 @@ index e1fc0ed..b749ac1 100644 static void -- -1.6.5.1 +1.6.5.2 -From f289a1f28d2000c00a35efa164cd207793be1b9f Mon Sep 17 00:00:00 2001 +From aef6c0c7fdb292b05fb91b4d7f7f926189a74951 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Thu, 29 Oct 2009 00:10:40 -0400 -Subject: [PATCH 80/81] don't activate invisible tasks +Subject: [PATCH 48/51] don't activate invisible tasks --- gui/simple-greeter/gdm-task-list.c | 4 ++++ @@ -19087,13 +19391,13 @@ index dd77ed6..c9d7451 100644 gtk_widget_set_sensitive (GTK_WIDGET (widget), TRUE); -- -1.6.5.1 +1.6.5.2 -From 8144b99a3ab9511d85ff6169ca9612c350010612 Mon Sep 17 00:00:00 2001 +From e990afc9c83863b2db09ff1dc202d75eff4583c9 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Thu, 29 Oct 2009 00:46:34 -0400 -Subject: [PATCH 81/81] Add lame check for smart card daemon +Subject: [PATCH 49/51] Add lame check for smart card daemon We don't want to show the smart card bits if the daemon isn't running @@ -19139,5 +19443,59 @@ index 9967d5f..903e18d 100644 static void -- -1.6.5.1 +1.6.5.2 + + +From 85de0d6e72612cf495d4ce87d9bbc46574759615 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 6 Nov 2009 13:35:26 -0500 +Subject: [PATCH 50/51] Don't delay login for passwd -d users + +Before we'd delay login if timed login was enabled, but +we should have been checking if it was the reason login +was happening. +--- + gui/simple-greeter/gdm-greeter-login-window.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/gui/simple-greeter/gdm-greeter-login-window.c b/gui/simple-greeter/gdm-greeter-login-window.c +index 9280d76..42f27bf 100644 +--- a/gui/simple-greeter/gdm-greeter-login-window.c ++++ b/gui/simple-greeter/gdm-greeter-login-window.c +@@ -968,7 +968,7 @@ gdm_greeter_login_window_start_session_when_ready (GdmGreeterLoginWindow *login_ + * so they can pick language/session. Will need to refactor things + * a bit so we can share code with timed login. + */ +- if (!login_window->priv->timed_login_enabled) { ++ if (strcmp (service_name, "gdm-autologin") != 0) { + + g_debug ("GdmGreeterLoginWindow: Okay, we'll start the session anyway," + "because the user isn't ever going to get an opportunity to" +-- +1.6.5.2 + + +From 5e63bab8f742eba575856e85f24d5d357cb8816f Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 6 Nov 2009 13:41:31 -0500 +Subject: [PATCH 51/51] Remove go-home icon from button + +--- + gui/simple-greeter/gdm-greeter-login-window.glade | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +diff --git a/gui/simple-greeter/gdm-greeter-login-window.glade b/gui/simple-greeter/gdm-greeter-login-window.glade +index d221d78..032bc6d 100644 +--- a/gui/simple-greeter/gdm-greeter-login-window.glade ++++ b/gui/simple-greeter/gdm-greeter-login-window.glade +@@ -365,7 +365,6 @@ + + + True +- go-home + 16 + 0.5 + 0.5 +-- +1.6.5.2 diff --git a/gdm.spec b/gdm.spec index 75e8ec5..27faad3 100644 --- a/gdm.spec +++ b/gdm.spec @@ -16,7 +16,7 @@ Summary: The GNOME Display Manager Name: gdm Version: 2.29.1 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 License: GPLv2+ Group: User Interface/X @@ -92,7 +92,7 @@ BuildRequires: DeviceKit-power-devel >= 008 Provides: service(graphical-login) Requires: audit-libs >= %{libauditver} -Patch2: gdm-2.26.0-force-active-vt.patch +Patch2: gdm-2.29.1-force-active-vt.patch Patch3: gdm-2.23.92-save-root-window.patch # uses /etc/sysconfig/keyboard and is thus not directly upstreamable @@ -100,15 +100,6 @@ Patch3: gdm-2.23.92-save-root-window.patch # https://bugzilla.gnome.org/show_bug.cgi?id=572765 Patch13: gdm-system-keyboard.patch -Patch20: gdm-2.28.1-move-shutdown-functions.patch -Patch21: fix-clock.patch -Patch22: fix-timer.patch -Patch23: fix-na-tray.patch -Patch24: fix-computer-info.patch -Patch25: fix-run-dir-permissions.patch -Patch26: make-user-list-animation-smoother.patch -Patch27: 0001-Don-t-show-lock-screen-option-if-locked-down.patch - Patch96: gdm-multistack.patch # Fedora-specific Patch97: gdm-bubble-location.patch @@ -153,16 +144,6 @@ The GDM fingerprint plugin provides functionality necessary to use a fingerprint %patch2 -p1 -b .force-active-vt %patch3 -p1 -b .save-root-window %patch13 -p1 -b .system-keyboard - -%patch20 -p1 -b .move-shutdown-functions -%patch21 -p1 -b .fix-clock -%patch22 -p1 -b .fix-timer -%patch23 -p1 -b .fix-na-tray -%patch24 -p1 -b .fix-computer-info -%patch25 -p1 -b .fix-run-dir-permission -%patch26 -p1 -b .make-user-list-animation-smoother -%patch27 -p1 -b .dont-show-lock-screen-if-locked-down - %patch96 -p1 -b .multistack %patch97 -p1 -b .bubble-location %patch98 -p1 -b .tray-padding @@ -419,6 +400,10 @@ fi %{_libdir}/gdm/simple-greeter/plugins/fingerprint.so %changelog +* Thu Dec 03 2009 Ray Strode 2.29.1-2 +- Drop upstreamed patches +- rebase multi-stack patch + * Tue Dec 01 2009 Bastien Nocera 2.29.1-1 - Update to 2.29.1 diff --git a/make-user-list-animation-smoother.patch b/make-user-list-animation-smoother.patch deleted file mode 100644 index 102286d..0000000 --- a/make-user-list-animation-smoother.patch +++ /dev/null @@ -1,408 +0,0 @@ -From 7980049944d064e803522aca8241256a62e90925 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Fri, 30 Oct 2009 11:18:13 -0400 -Subject: [PATCH 1/6] Fix typo in chooser grow code - ---- - gui/simple-greeter/gdm-chooser-widget.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/gui/simple-greeter/gdm-chooser-widget.c b/gui/simple-greeter/gdm-chooser-widget.c -index cbd5072..9347eee 100644 ---- a/gui/simple-greeter/gdm-chooser-widget.c -+++ b/gui/simple-greeter/gdm-chooser-widget.c -@@ -894,7 +894,7 @@ start_grow_animation (GdmChooserWidget *widget) - height = get_height_of_screen (widget); - } - gdm_scrollable_widget_slide_to_height (GDM_SCROLLABLE_WIDGET (widget->priv->scrollable_widget), -- widget->priv->height_when_grown, -+ height, - (GdmScrollableWidgetSlideStepFunc) - on_grow_animation_step, widget, - (GdmScrollableWidgetSlideDoneFunc) --- -1.6.5.1 - - -From e2cde131a24e2933588bed8c741ca14bb007c6eb Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Fri, 30 Oct 2009 12:13:32 -0400 -Subject: [PATCH 2/6] Don't start grow animation until chooser is loaded - -This makes it smoother when first starting up ---- - gui/simple-greeter/gdm-chooser-widget.c | 37 ++---------------------------- - 1 files changed, 3 insertions(+), 34 deletions(-) - -diff --git a/gui/simple-greeter/gdm-chooser-widget.c b/gui/simple-greeter/gdm-chooser-widget.c -index 9347eee..1147104 100644 ---- a/gui/simple-greeter/gdm-chooser-widget.c -+++ b/gui/simple-greeter/gdm-chooser-widget.c -@@ -92,7 +92,6 @@ struct GdmChooserWidgetPrivate - - guint32 should_hide_inactive_items : 1; - guint32 emit_activated_after_resize_animation : 1; -- guint32 was_fully_grown : 1; - - GdmChooserWidgetPosition separator_position; - GdmChooserWidgetState state; -@@ -807,29 +806,12 @@ on_grow_animation_complete (GdmScrollableWidget *scrollable_widget, - { - g_assert (widget->priv->state == GDM_CHOOSER_WIDGET_STATE_GROWING); - widget->priv->state = GDM_CHOOSER_WIDGET_STATE_GROWN; -- widget->priv->was_fully_grown = TRUE; - gtk_tree_view_set_enable_search (GTK_TREE_VIEW (widget->priv->items_view), TRUE); - - _grab_focus (GTK_WIDGET (widget)); - } - - static int --get_height_of_screen (GdmChooserWidget *widget) --{ -- GdkScreen *screen; -- GdkRectangle area; -- int monitor; -- -- screen = gtk_widget_get_screen (GTK_WIDGET (widget)); -- -- monitor = gdk_screen_get_monitor_at_window (screen, -- gdk_screen_get_root_window (screen)); -- gdk_screen_get_monitor_geometry (screen, monitor, &area); -- -- return area.height; --} -- --static int - get_number_of_on_screen_rows (GdmChooserWidget *widget) - { - GtkTreePath *start_path; -@@ -876,7 +858,6 @@ start_grow_animation (GdmChooserWidget *widget) - { - int number_of_visible_rows; - int number_of_rows; -- int height; - - number_of_visible_rows = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (widget->priv->model_sorter), NULL); - number_of_rows = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (widget->priv->list_store), NULL); -@@ -888,13 +869,8 @@ start_grow_animation (GdmChooserWidget *widget) - - set_inactive_items_visible (widget, TRUE); - -- if (widget->priv->was_fully_grown) { -- height = widget->priv->height_when_grown; -- } else { -- height = get_height_of_screen (widget); -- } - gdm_scrollable_widget_slide_to_height (GDM_SCROLLABLE_WIDGET (widget->priv->scrollable_widget), -- height, -+ widget->priv->height_when_grown, - (GdmScrollableWidgetSlideStepFunc) - on_grow_animation_step, widget, - (GdmScrollableWidgetSlideDoneFunc) -@@ -912,7 +888,6 @@ skip_resize_animation (GdmChooserWidget *widget) - set_inactive_items_visible (GDM_CHOOSER_WIDGET (widget), TRUE); - gtk_tree_view_set_enable_search (GTK_TREE_VIEW (widget->priv->items_view), TRUE); - widget->priv->state = GDM_CHOOSER_WIDGET_STATE_GROWN; -- widget->priv->was_fully_grown = FALSE; - _grab_focus (GTK_WIDGET (widget)); - } - } -@@ -922,7 +897,6 @@ gdm_chooser_widget_grow (GdmChooserWidget *widget) - { - if (widget->priv->state == GDM_CHOOSER_WIDGET_STATE_SHRINKING) { - gdm_scrollable_widget_stop_sliding (GDM_SCROLLABLE_WIDGET (widget->priv->scrollable_widget)); -- widget->priv->was_fully_grown = FALSE; - } - - gtk_alignment_set (GTK_ALIGNMENT (widget->priv->frame_alignment), -@@ -1233,9 +1207,7 @@ gdm_chooser_widget_size_allocate (GtkWidget *widget, - chooser_widget = GDM_CHOOSER_WIDGET (widget); - - if (chooser_widget->priv->state == GDM_CHOOSER_WIDGET_STATE_GROWN) { -- if (chooser_widget->priv->was_fully_grown) { -- chooser_widget->priv->height_when_grown = allocation->height; -- } -+ chooser_widget->priv->height_when_grown = allocation->height; - } - } - -@@ -1801,8 +1773,6 @@ gdm_chooser_widget_init (GdmChooserWidget *widget) - */ - GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS); - -- widget->priv->height_when_grown = get_height_of_screen (widget); -- - gtk_alignment_set_padding (GTK_ALIGNMENT (widget), 0, 0, 0, 0); - - add_frame (widget); -@@ -1935,9 +1905,7 @@ gdm_chooser_widget_init (GdmChooserWidget *widget) - gtk_tree_row_reference_free); - - add_separator (widget); -- - queue_column_visibility_update (widget); -- gdm_chooser_widget_grow (widget); - } - - static void -@@ -2544,5 +2512,6 @@ gdm_chooser_widget_propagate_pending_key_events (GdmChooserWidget *widget) - void - gdm_chooser_widget_loaded (GdmChooserWidget *widget) - { -+ gdm_chooser_widget_grow (widget); - g_signal_emit (widget, signals[LOADED], 0); - } --- -1.6.5.1 - - -From 3f707bba808b3484be7380a11aebfadb2bc98ab6 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Fri, 30 Oct 2009 14:41:54 -0400 -Subject: [PATCH 3/6] Hide user list frame when list is empty. - ---- - gui/simple-greeter/gdm-chooser-widget.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/gui/simple-greeter/gdm-chooser-widget.c b/gui/simple-greeter/gdm-chooser-widget.c -index 1147104..4124195 100644 ---- a/gui/simple-greeter/gdm-chooser-widget.c -+++ b/gui/simple-greeter/gdm-chooser-widget.c -@@ -600,9 +600,9 @@ static void - update_chooser_visibility (GdmChooserWidget *widget) - { - if (gdm_chooser_widget_get_number_of_items (widget) > 0) { -- gtk_widget_show (widget->priv->scrollable_widget); -+ gtk_widget_show (widget->priv->frame); - } else { -- gtk_widget_hide (widget->priv->scrollable_widget); -+ gtk_widget_hide (widget->priv->frame); - } - g_object_notify (G_OBJECT (widget), "list-visible"); - } --- -1.6.5.1 - - -From 6197ec180d369899bf4b87c5e8adaed62ed3fdeb Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Fri, 30 Oct 2009 14:52:04 -0400 -Subject: [PATCH 4/6] Dynamically slide destination from step function - -This lets us add items or swift directions while the animation is going. ---- - gui/simple-greeter/gdm-chooser-widget.c | 10 +++++----- - gui/simple-greeter/gdm-scrollable-widget.c | 19 ++++++++++++++++++- - gui/simple-greeter/gdm-scrollable-widget.h | 1 + - 3 files changed, 24 insertions(+), 6 deletions(-) - -diff --git a/gui/simple-greeter/gdm-chooser-widget.c b/gui/simple-greeter/gdm-chooser-widget.c -index 4124195..4df03a6 100644 ---- a/gui/simple-greeter/gdm-chooser-widget.c -+++ b/gui/simple-greeter/gdm-chooser-widget.c -@@ -97,7 +97,6 @@ struct GdmChooserWidgetPrivate - GdmChooserWidgetState state; - - double active_row_normalized_position; -- int height_when_grown; - }; - - enum { -@@ -552,6 +551,7 @@ set_frame_text (GdmChooserWidget *widget, - static void - on_shrink_animation_step (GdmScrollableWidget *scrollable_widget, - double progress, -+ int *new_height, - GdmChooserWidget *widget) - { - GtkTreePath *active_row_path; -@@ -839,6 +839,7 @@ get_number_of_on_screen_rows (GdmChooserWidget *widget) - static void - on_grow_animation_step (GdmScrollableWidget *scrollable_widget, - double progress, -+ int *new_height, - GdmChooserWidget *widget) - { - int number_of_visible_rows; -@@ -851,6 +852,8 @@ on_grow_animation_step (GdmScrollableWidget *scrollable_widget, - gdm_scrollable_widget_stop_sliding (scrollable_widget); - return; - } -+ -+ *new_height = GTK_BIN (scrollable_widget)->child->requisition.height; - } - - static void -@@ -870,7 +873,7 @@ start_grow_animation (GdmChooserWidget *widget) - set_inactive_items_visible (widget, TRUE); - - gdm_scrollable_widget_slide_to_height (GDM_SCROLLABLE_WIDGET (widget->priv->scrollable_widget), -- widget->priv->height_when_grown, -+ GTK_BIN (widget->priv->scrollable_widget)->child->requisition.height, - (GdmScrollableWidgetSlideStepFunc) - on_grow_animation_step, widget, - (GdmScrollableWidgetSlideDoneFunc) -@@ -1206,9 +1209,6 @@ gdm_chooser_widget_size_allocate (GtkWidget *widget, - - chooser_widget = GDM_CHOOSER_WIDGET (widget); - -- if (chooser_widget->priv->state == GDM_CHOOSER_WIDGET_STATE_GROWN) { -- chooser_widget->priv->height_when_grown = allocation->height; -- } - } - - static gboolean -diff --git a/gui/simple-greeter/gdm-scrollable-widget.c b/gui/simple-greeter/gdm-scrollable-widget.c -index 2c0407d..6d9dc83 100644 ---- a/gui/simple-greeter/gdm-scrollable-widget.c -+++ b/gui/simple-greeter/gdm-scrollable-widget.c -@@ -132,9 +132,26 @@ on_animation_tick (GdmScrollableWidgetAnimation *animation, - gtk_widget_set_size_request (animation->widget, width, height); - - if (animation->step_func != NULL) { -+ GdmTimer *timer; -+ -+ height = animation->desired_height; -+ -+ height -= animation->widget->style->ythickness * 2; -+ height -= GTK_CONTAINER (animation->widget)->border_width * 2; -+ -+ timer = g_object_ref (animation->timer); - animation->step_func (GDM_SCROLLABLE_WIDGET (animation->widget), - progress, -+ &height, - animation->step_func_user_data); -+ -+ if (gdm_timer_is_started (timer)) { -+ height += animation->widget->style->ythickness * 2; -+ height += GTK_CONTAINER (animation->widget)->border_width * 2; -+ -+ animation->desired_height = height; -+ } -+ g_object_unref (timer); - } - } - -@@ -708,7 +725,7 @@ gdm_scrollable_widget_slide_to_height (GdmScrollableWidget *scrollable_widget, - - if (!input_redirected || gdm_scrollable_widget_animations_are_disabled (scrollable_widget)) { - if (step_func != NULL) { -- step_func (scrollable_widget, 0.0, step_user_data); -+ step_func (scrollable_widget, 0.0, &height, step_user_data); - } - - if (done_func != NULL) { -diff --git a/gui/simple-greeter/gdm-scrollable-widget.h b/gui/simple-greeter/gdm-scrollable-widget.h -index 9b8877e..2241cb1 100644 ---- a/gui/simple-greeter/gdm-scrollable-widget.h -+++ b/gui/simple-greeter/gdm-scrollable-widget.h -@@ -40,6 +40,7 @@ typedef struct GdmScrollableWidget GdmScrollableWidget; - typedef struct GdmScrollableWidgetPrivate GdmScrollableWidgetPrivate; - typedef void (* GdmScrollableWidgetSlideStepFunc) (GdmScrollableWidget *scrollable_widget, - double progress, -+ int *new_height, - gpointer *user_data); - typedef void (* GdmScrollableWidgetSlideDoneFunc) (GdmScrollableWidget *scrollable_widget, - gpointer *user_data); --- -1.6.5.1 - - -From a31d6dd70213fd3ab8572da2923b99fcbe5449a6 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Fri, 30 Oct 2009 14:47:45 -0400 -Subject: [PATCH 5/6] Drop checks for growing too far - -We're now very exact about where to grow so we don't need it. ---- - gui/simple-greeter/gdm-chooser-widget.c | 16 ---------------- - 1 files changed, 0 insertions(+), 16 deletions(-) - -diff --git a/gui/simple-greeter/gdm-chooser-widget.c b/gui/simple-greeter/gdm-chooser-widget.c -index 4df03a6..6c29d23 100644 ---- a/gui/simple-greeter/gdm-chooser-widget.c -+++ b/gui/simple-greeter/gdm-chooser-widget.c -@@ -848,28 +848,12 @@ on_grow_animation_step (GdmScrollableWidget *scrollable_widget, - number_of_visible_rows = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (widget->priv->model_sorter), NULL); - number_of_on_screen_rows = get_number_of_on_screen_rows (widget); - -- if (number_of_on_screen_rows >= number_of_visible_rows) { -- gdm_scrollable_widget_stop_sliding (scrollable_widget); -- return; -- } -- - *new_height = GTK_BIN (scrollable_widget)->child->requisition.height; - } - - static void - start_grow_animation (GdmChooserWidget *widget) - { -- int number_of_visible_rows; -- int number_of_rows; -- -- number_of_visible_rows = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (widget->priv->model_sorter), NULL); -- number_of_rows = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (widget->priv->list_store), NULL); -- -- if (number_of_visible_rows >= number_of_rows) { -- on_grow_animation_complete (GDM_SCROLLABLE_WIDGET (widget->priv->scrollable_widget), widget); -- return; -- } -- - set_inactive_items_visible (widget, TRUE); - - gdm_scrollable_widget_slide_to_height (GDM_SCROLLABLE_WIDGET (widget->priv->scrollable_widget), --- -1.6.5.1 - - -From f685f9fe038d891026fce69a47a7ab7c3e438d37 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Fri, 30 Oct 2009 16:44:29 -0400 -Subject: [PATCH 6/6] Compute needs-scrollbar logic differently - -This way is a little clearer to read and seems to work -around a bug where the scrollbar gets shown briefly at -the end of an animation. ---- - gui/simple-greeter/gdm-scrollable-widget.c | 16 +++++++++++++--- - 1 files changed, 13 insertions(+), 3 deletions(-) - -diff --git a/gui/simple-greeter/gdm-scrollable-widget.c b/gui/simple-greeter/gdm-scrollable-widget.c -index 6d9dc83..d55013d 100644 ---- a/gui/simple-greeter/gdm-scrollable-widget.c -+++ b/gui/simple-greeter/gdm-scrollable-widget.c -@@ -252,7 +252,7 @@ gdm_scrollable_widget_animation_stop (GdmScrollableWidgetAnimation *animation) - static gboolean - gdm_scrollable_widget_needs_scrollbar (GdmScrollableWidget *widget) - { -- GtkAdjustment *adjustment; -+ gboolean needs_scrollbar; - - if (widget->priv->scrollbar == NULL) { - return FALSE; -@@ -266,9 +266,19 @@ gdm_scrollable_widget_needs_scrollbar (GdmScrollableWidget *widget) - return FALSE; - } - -- adjustment = gtk_range_get_adjustment (GTK_RANGE (widget->priv->scrollbar)); -+ if (GTK_BIN (widget)->child != NULL) { -+ GtkRequisition child_requisition; -+ int available_height; -+ -+ gtk_widget_get_child_requisition (GTK_BIN (widget)->child, -+ &child_requisition); -+ available_height = GTK_WIDGET (widget)->allocation.height; -+ needs_scrollbar = child_requisition.height > available_height; -+ } else { -+ needs_scrollbar = FALSE; -+ } - -- return adjustment->upper - adjustment->lower > adjustment->page_size; -+ return needs_scrollbar; - } - - static void --- -1.6.5.1 -