---
 gui/simple-greeter/gdm-greeter-login-window.c |   11 ++++++++
 gui/simple-greeter/gdm-greeter-panel.c        |   32 ++++++++++++++++----------
 gui/simple-greeter/gdm-option-widget.c        |   24 +++++++++++++++++--
 3 files changed, 53 insertions(+), 14 deletions(-)

--- a/gui/simple-greeter/gdm-greeter-login-window.c
+++ b/gui/simple-greeter/gdm-greeter-login-window.c
@@ -309,6 +309,12 @@ on_xevent (XEvent                *xevent
         return GDK_FILTER_CONTINUE;
 }
 
+static void on_randr_event (GdkScreen *screen, gpointer user_data)
+{
+        gtk_window_set_position (GTK_WINDOW (user_data),
+                                 GTK_WIN_POS_CENTER_ALWAYS);
+}
+
 static void
 stop_watching_for_user_interaction (GdmGreeterLoginWindow *login_window)
 {
@@ -1722,6 +1728,11 @@ create_computer_info (GdmGreeterLoginWin
 		}
         }
 
+        g_signal_connect (gtk_widget_get_screen (GTK_WIDGET (login_window)),
+                          "size-changed",
+                          G_CALLBACK (on_randr_event),
+                          login_window);
+
         gdm_profile_end (NULL);
 }
 
--- a/gui/simple-greeter/gdm-greeter-panel.c
+++ b/gui/simple-greeter/gdm-greeter-panel.c
@@ -179,18 +179,13 @@ gdm_greeter_panel_move_resize_window (Gd
 
         g_assert (GTK_WIDGET_REALIZED (widget));
 
-        if (move && resize) {
-                gdk_window_move_resize (widget->window,
-                                        panel->priv->geometry.x,
-                                        panel->priv->geometry.y,
-                                        panel->priv->geometry.width,
-                                        panel->priv->geometry.height);
-        } else if (move) {
-                gdk_window_move (widget->window,
+        if (move) {
+                gtk_window_move (GTK_WINDOW (widget),
                                  panel->priv->geometry.x,
                                  panel->priv->geometry.y);
-        } else if (resize) {
-                gdk_window_resize (widget->window,
+        }
+        if (resize) {
+                gtk_window_resize (GTK_WINDOW (widget),
                                    panel->priv->geometry.width,
                                    panel->priv->geometry.height);
         }
@@ -378,12 +373,25 @@ gdm_greeter_panel_real_size_request (Gtk
         panel = GDM_GREETER_PANEL (widget);
         bin = GTK_BIN (widget);
 
+        /* update the requisition first to match with the screen size;
+         * the previous requisition seems passed wrongly on size-changed signal
+         */
+        old_geometry = panel->priv->geometry;
+        update_geometry (panel, requisition);
+
+        /* turn on/off the clock according to the width */
+        if (panel->priv->geometry.width > 1024)
+                gtk_widget_show (panel->priv->clock);
+        else
+                gtk_widget_hide (panel->priv->clock);
+
+        requisition->width  = panel->priv->geometry.width;
+        requisition->height = panel->priv->geometry.height;
+
         if (bin->child && GTK_WIDGET_VISIBLE (bin->child)) {
                 gtk_widget_size_request (bin->child, requisition);
         }
 
-        old_geometry = panel->priv->geometry;
-
         update_geometry (panel, requisition);
 
         requisition->width  = panel->priv->geometry.width;
--- a/gui/simple-greeter/gdm-option-widget.c
+++ b/gui/simple-greeter/gdm-option-widget.c
@@ -766,10 +766,13 @@ gdm_option_widget_check_visibility (GdmO
 
                 if (!screen || gdk_screen_get_width (screen) > 1280)
                         gtk_widget_show (widget->priv->label);
+                else
+                        gtk_widget_hide (widget->priv->label);
 
-                if (widget->priv->icon_name != NULL) {
+                if (widget->priv->icon_name != NULL)
                         gtk_widget_show (widget->priv->image);
-                }
+                else
+                        gtk_widget_hide (widget->priv->image);
         } else {
                 gtk_widget_hide (widget->priv->items_combo_box);
                 gtk_widget_hide (widget->priv->label);
@@ -994,10 +997,19 @@ add_separators (GdmOptionWidget *widget)
 }
 
 static void
+on_screen_size_changed (GdkScreen       *screen,
+                        GdmOptionWidget *widget)
+{
+        /* turn on/off the label when the screen is resized */
+        gdm_option_widget_check_visibility (widget);
+}
+
+static void
 gdm_option_widget_init (GdmOptionWidget *widget)
 {
         GtkWidget         *box;
         GtkCellRenderer   *renderer;
+        GdkScreen         *screen;
 
         widget->priv = GDM_OPTION_WIDGET_GET_PRIVATE (widget);
 
@@ -1079,6 +1091,14 @@ gdm_option_widget_init (GdmOptionWidget
                                             (GtkCellLayoutDataFunc) name_cell_data_func,
                                             widget,
                                             NULL);
+
+        screen = gtk_widget_get_screen (widget->priv->label);
+        if (!screen)
+                screen = gdk_screen_get_default ();
+        g_signal_connect (screen,
+                          "size-changed",
+                          G_CALLBACK (on_screen_size_changed),
+                          widget);
 }
 
 static void
