gdm r6574 - in trunk: . gui/user-switch-applet



Author: mccann
Date: Thu Oct 16 04:42:56 2008
New Revision: 6574
URL: http://svn.gnome.org/viewvc/gdm?rev=6574&view=rev

Log:
2008-10-16  William Jon McCann  <jmccann redhat com>

	* gui/user-switch-applet/applet.c (menuitem_style_set_cb),
	(on_account_activate), (on_status_available_activate),
	(on_status_away_activate), (on_status_busy_activate),
	(on_status_invisible_activate), (on_status_offline_activate),
	(create_sub_menu):
	Add support for status menu items.  Not yet hooked up.
	Based on patch from Ted Gould.



Modified:
   trunk/ChangeLog
   trunk/gui/user-switch-applet/applet.c

Modified: trunk/gui/user-switch-applet/applet.c
==============================================================================
--- trunk/gui/user-switch-applet/applet.c	(original)
+++ trunk/gui/user-switch-applet/applet.c	Thu Oct 16 04:42:56 2008
@@ -58,7 +58,7 @@
         GtkWidget      *menu;
         GtkWidget      *user_item;
         GtkWidget      *control_panel_item;
-        GtkWidget      *separator_item;
+        GtkWidget      *account_item;
         GtkWidget      *lock_screen_item;
         GtkWidget      *login_screen_item;
         GtkWidget      *quit_session_item;
@@ -545,6 +545,10 @@
                         icon_name = "system-lock-screen";
                 } else if (menuitem == adata->quit_session_item) {
                         icon_name = "system-log-out";
+                } else if (menuitem == adata->account_item) {
+                        icon_name = "user-info";
+                } else if (menuitem == adata->control_panel_item) {
+                        icon_name = "preferences-desktop";
                 } else {
                         icon_name = GTK_STOCK_MISSING_IMAGE;
                 }
@@ -556,7 +560,6 @@
         }
 }
 
-
 static void
 user_notify_display_name_cb (GObject       *object,
                              GParamSpec    *pspec,
@@ -769,6 +772,45 @@
 }
 
 static void
+on_account_activate (GtkMenuItem   *item,
+                     GdmAppletData *adata)
+{
+        char      *args[2];
+        GError    *error;
+        GdkScreen *screen;
+        gboolean   res;
+
+        args[0] = g_find_program_in_path ("gnome-about-me");
+        if (args[0] == NULL) {
+                return;
+        }
+        args[1] = NULL;
+
+        if (gtk_widget_has_screen (GTK_WIDGET (adata->applet))) {
+                screen = gtk_widget_get_screen (GTK_WIDGET (adata->applet));
+        } else {
+                screen = gdk_screen_get_default ();
+        }
+
+        error = NULL;
+        res = gdk_spawn_on_screen (screen,
+                                   g_get_home_dir (),
+                                   args,
+                                   NULL,
+                                   0,
+                                   NULL,
+                                   NULL,
+                                   NULL,
+                                   &error);
+        if (! res) {
+                g_warning (_("Can't lock screen: %s"), error->message);
+                g_error_free (error);
+        }
+
+        g_free (args[0]);
+}
+
+static void
 on_lock_screen_activate (GtkMenuItem   *item,
                          GdmAppletData *adata)
 {
@@ -842,9 +884,52 @@
 }
 
 static void
+on_status_available_activate (GtkWidget     *widget,
+                              GdmAppletData *adata)
+{
+}
+
+static void
+on_status_away_activate (GtkWidget     *widget,
+                         GdmAppletData *adata)
+{
+}
+
+static void
+on_status_busy_activate (GtkWidget     *widget,
+                         GdmAppletData *adata)
+{
+}
+
+static void
+on_status_invisible_activate (GtkWidget     *widget,
+                              GdmAppletData *adata)
+{
+}
+
+static void
+on_status_offline_activate (GtkWidget     *widget,
+                            GdmAppletData *adata)
+{
+}
+
+static struct {
+        char  *icon_name;
+        char  *display_name;
+        void  *callback;
+} statuses[] = {
+        { "user-online", N_("Available"), on_status_available_activate },
+        { "user-away", N_("Away"), on_status_away_activate },
+        { "user-busy", N_("Busy"), on_status_busy_activate },
+        { "user-invisible", N_("Invisible"), on_status_invisible_activate },
+        { "user-offline", N_("Offline"), on_status_offline_activate },
+};
+
+static void
 create_sub_menu (GdmAppletData *adata)
 {
         GtkWidget *item;
+        int        i;
 
         adata->menu = gtk_menu_new ();
         g_signal_connect (adata->menu,
@@ -882,6 +967,48 @@
         gtk_menu_shell_append (GTK_MENU_SHELL (adata->menu), item);
         gtk_widget_show (item);
 
+        for (i = 0; i < G_N_ELEMENTS (statuses); i++) {
+                GtkWidget *hbox;
+                GtkWidget *label;
+                GtkWidget *image;
+                GtkWidget *item;
+
+                item = gtk_menu_item_new ();
+                hbox = gtk_hbox_new (FALSE, 3);
+                label = gtk_label_new (statuses[i].display_name);
+                gtk_label_set_justify (GTK_LABEL(label), GTK_JUSTIFY_LEFT);
+                gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+                gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
+                gtk_widget_show (label);
+                image = gtk_image_new_from_icon_name (statuses[i].icon_name, GTK_ICON_SIZE_MENU);
+                gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, TRUE, 0);
+                gtk_widget_show (image);
+                gtk_widget_show (hbox);
+                gtk_container_add (GTK_CONTAINER (item), hbox);
+
+                gtk_menu_shell_append (GTK_MENU_SHELL (adata->menu),
+                                       item);
+                g_signal_connect (item, "activate",
+                                  G_CALLBACK (statuses[i].callback), adata);
+                gtk_widget_show (item);
+        }
+
+        item = gtk_separator_menu_item_new ();
+        gtk_menu_shell_append (GTK_MENU_SHELL (adata->menu), item);
+        gtk_widget_show (item);
+
+        adata->account_item = gtk_image_menu_item_new_with_label (_("Account Information..."));
+        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (adata->account_item),
+                                       gtk_image_new ());
+        gtk_menu_shell_append (GTK_MENU_SHELL (adata->menu),
+                               adata->account_item);
+        g_signal_connect (adata->account_item, "style-set",
+                          G_CALLBACK (menuitem_style_set_cb), adata);
+        g_signal_connect (adata->account_item, "activate",
+                          G_CALLBACK (on_account_activate), adata);
+        gtk_widget_show (adata->account_item);
+
+
         adata->control_panel_item = gtk_image_menu_item_new_with_label (_("System Preferences..."));
         gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (adata->control_panel_item),
                                        gtk_image_new ());
@@ -894,9 +1021,9 @@
         gtk_widget_show (adata->control_panel_item);
 
 
-        adata->separator_item = gtk_separator_menu_item_new ();
-        gtk_menu_shell_append (GTK_MENU_SHELL (adata->menu), adata->separator_item);
-        gtk_widget_show (adata->separator_item);
+        item = gtk_separator_menu_item_new ();
+        gtk_menu_shell_append (GTK_MENU_SHELL (adata->menu), item);
+        gtk_widget_show (item);
 
         adata->lock_screen_item = gtk_image_menu_item_new_with_label (_("Lock Screen..."));
         gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (adata->lock_screen_item),



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