gdm r6185 - in trunk: . gui/simple-greeter



Author: mccann
Date: Tue Apr 29 23:26:49 2008
New Revision: 6185
URL: http://svn.gnome.org/viewvc/gdm?rev=6185&view=rev

Log:
2008-04-29  William Jon McCann  <jmccann redhat com>

	* gui/simple-greeter/gdm-greeter-login-window.c:
	(sensitize_widget), (remove_sensitize_power_buttons_timeout),
	(sensitize_power_buttons_timeout),
	(add_sensitize_power_buttons_timeout), (switch_mode),
	(gdm_greeter_login_window_finalize):
	Desensitize the power buttons for one second after switching
	tabs to help prevent accidently clicking them.



Modified:
   trunk/ChangeLog
   trunk/gui/simple-greeter/gdm-greeter-login-window.c

Modified: trunk/gui/simple-greeter/gdm-greeter-login-window.c
==============================================================================
--- trunk/gui/simple-greeter/gdm-greeter-login-window.c	(original)
+++ trunk/gui/simple-greeter/gdm-greeter-login-window.c	Tue Apr 29 23:26:49 2008
@@ -130,6 +130,7 @@
         guint            timed_login_timeout_id;
 
         guint            animation_timeout_id;
+        guint            sensitize_power_buttons_timeout_id;
 
         guint            login_button_handler_id;
         guint            start_session_handler_id;
@@ -373,6 +374,19 @@
         }
 }
 
+static void
+sensitize_widget (GdmGreeterLoginWindow *login_window,
+                  const char            *name,
+                  gboolean               sense)
+{
+        GtkWidget *widget;
+
+        widget = glade_xml_get_widget (login_window->priv->xml, name);
+        if (widget != NULL) {
+                gtk_widget_set_sensitive (widget, sense);
+        }
+}
+
 static gboolean
 get_show_restart_buttons (GdmGreeterLoginWindow *login_window)
 {
@@ -505,6 +519,44 @@
 }
 
 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)
 {
@@ -514,6 +566,9 @@
         gboolean    show_restart_buttons;
         gboolean    show_suspend_button;
 
+        show_restart_buttons = get_show_restart_buttons (login_window);
+        show_suspend_button = can_suspend (login_window);
+
         /* we want to run this even if we're supposed to
            be in the mode already so that we reset everything
            to a known state */
@@ -521,8 +576,7 @@
 
         default_name = NULL;
 
-        show_restart_buttons = get_show_restart_buttons (login_window);
-        show_suspend_button = can_suspend (login_window);
+        remove_sensitize_power_buttons_timeout (login_window);
 
         switch (number) {
         case MODE_SELECTION:
@@ -530,6 +584,7 @@
                 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",
@@ -538,7 +593,15 @@
                              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:
@@ -1843,6 +1906,8 @@
                 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);
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]