--- gnome-panel-2.19.2/gnome-panel/panel-enums.h.move-suspend-to-menu 2007-05-14 15:53:01.000000000 -0400
+++ gnome-panel-2.19.2/gnome-panel/panel-enums.h 2007-05-20 23:05:00.000000000 -0400
@@ -96,6 +96,7 @@ typedef enum {
PANEL_ACTION_FORCE_QUIT,
PANEL_ACTION_CONNECT_SERVER,
PANEL_ACTION_SHUTDOWN,
+ PANEL_ACTION_SUSPEND,
/* compatibility with GNOME < 2.13.90 */
PANEL_ACTION_SCREENSHOT,
PANEL_ACTION_LAST
--- gnome-panel-2.19.2/gnome-panel/panel-logout.c.move-suspend-to-menu 2007-05-20 23:05:00.000000000 -0400
+++ gnome-panel-2.19.2/gnome-panel/panel-logout.c 2007-05-20 23:05:00.000000000 -0400
@@ -336,10 +336,6 @@ panel_logout_new (PanelLogoutDialogType
primary_text = _("Shut down this system now?");
logout_dialog->priv->default_response = PANEL_LOGOUT_RESPONSE_SHUTDOWN;
- if (panel_power_manager_can_suspend (logout_dialog->priv->power_manager))
- gtk_dialog_add_button (GTK_DIALOG (logout_dialog),
- _("S_uspend"),
- PANEL_LOGOUT_RESPONSE_STR);
if (panel_power_manager_can_hibernate (logout_dialog->priv->power_manager))
gtk_dialog_add_button (GTK_DIALOG (logout_dialog),
--- gnome-panel-2.19.2/gnome-panel/panel-action-button.c.move-suspend-to-menu 2007-05-20 23:05:00.000000000 -0400
+++ gnome-panel-2.19.2/gnome-panel/panel-action-button.c 2007-05-20 23:09:39.000000000 -0400
@@ -46,6 +46,7 @@
#include "panel-lockdown.h"
#include "panel-logout.h"
#include "panel-compatibility.h"
+#include "panel-power-manager.h"
#include "panel-gdm.h"
#include "panel-icon-names.h"
@@ -79,6 +80,7 @@ static GConfEnumStringPair panel_action_
{ PANEL_ACTION_FORCE_QUIT, "force-quit" },
{ PANEL_ACTION_CONNECT_SERVER, "connect-server" },
{ PANEL_ACTION_SHUTDOWN, "shutdown" },
+ { PANEL_ACTION_SUSPEND, "suspend" },
/* compatibility with GNOME < 2.13.90 */
{ PANEL_ACTION_SCREENSHOT, "screenshot" },
{ 0, NULL },
@@ -180,6 +182,39 @@ panel_action_shutdown (GtkWidget *widget
}
static gboolean
+panel_action_can_suspend (void)
+{
+ PanelPowerManager *manager;
+ gboolean can_suspend;
+
+ manager = panel_get_power_manager ();
+
+ can_suspend = panel_power_manager_can_suspend (manager);
+
+ g_object_unref (manager);
+
+ return can_suspend;
+}
+
+static gboolean
+panel_action_suspend_is_disabled (void)
+{
+ return !panel_action_can_suspend ();
+}
+
+static void
+panel_action_suspend (GtkWidget *widget)
+{
+ PanelPowerManager *manager;
+
+ manager = panel_get_power_manager ();
+
+ panel_power_manager_attempt_suspend (manager);
+
+ g_object_unref (manager);
+}
+
+static gboolean
panel_action_shutdown_reboot_is_disabled (void)
{
return (panel_lockdown_get_disable_log_out() ||
@@ -365,6 +400,16 @@ static PanelAction actions [] = {
panel_action_shutdown, NULL, NULL,
panel_action_shutdown_reboot_is_disabled
},
+ {
+ PANEL_ACTION_SUSPEND,
+ "screensaver",
+ N_("Suspend"),
+ N_("Suspend the computer"),
+ "gospanel-20",
+ "ACTION:suspend:NEW",
+ panel_action_suspend, NULL, NULL,
+ panel_action_suspend_is_disabled
+ },
/* deprecated actions */
{
PANEL_ACTION_SCREENSHOT,
--- gnome-panel-2.19.2/gnome-panel/panel-menu-items.c.move-suspend-to-menu 2007-05-20 23:05:00.000000000 -0400
+++ gnome-panel-2.19.2/gnome-panel/panel-menu-items.c 2007-05-20 23:05:00.000000000 -0400
@@ -50,6 +50,7 @@
#include "panel-recent.h"
#include "panel-stock-icons.h"
#include "panel-util.h"
+#include "panel-power-manager.h"
#define BOOKMARKS_FILENAME ".gtk-bookmarks"
#define DESKTOP_IS_HOME_DIR_DIR "/apps/nautilus/preferences"
@@ -955,10 +956,22 @@ panel_desktop_menu_item_new (gboolean us
menuitem->priv->use_image = use_image;
menuitem->priv->append_lock_logout = append_lock_logout;
- if (append_lock_logout)
+ if (append_lock_logout) {
+ PanelPowerManager *manager;
+
panel_lockdown_notify_add (G_CALLBACK (panel_desktop_menu_item_recreate_menu),
menuitem);
+ manager = panel_get_power_manager ();
+
+ g_signal_connect_swapped (manager, "notify::is-connected",
+ G_CALLBACK
+ (panel_desktop_menu_item_recreate_menu),
+ menuitem);
+
+ g_object_unref (manager);
+ }
+
menuitem->priv->menu = panel_desktop_menu_item_create_menu (menuitem);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem),
menuitem->priv->menu);
@@ -1063,6 +1076,14 @@ panel_menu_items_append_lock_logout (Gtk
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
}
+ item = panel_menu_items_create_action_item (PANEL_ACTION_SUSPEND);
+ if (item != NULL) {
+ if (!separator_inserted)
+ add_menu_separator (menu);
+
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ }
+
item = panel_menu_items_create_action_item (PANEL_ACTION_SHUTDOWN);
if (item != NULL) {
if (!separator_inserted)
--- gnome-panel-2.19.2/gnome-panel/panel-power-manager.h.move-suspend-to-menu 2007-05-14 15:53:01.000000000 -0400
+++ gnome-panel-2.19.2/gnome-panel/panel-power-manager.h 2007-05-20 23:05:00.000000000 -0400
@@ -78,3 +78,83 @@ PanelPowerManager *panel_get_power_manag
G_END_DECLS
#endif /* PANEL_POWER_MANAGER_H */
+/* panel-power-manager.h - functions for powering down, restarting, and
+ * suspending the computer
+ *
+ * Copyright (C) 2006 Ray Strode <rstrode@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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 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
+ * 02111-1307, USA.
+ */
+#ifndef PANEL_POWER_MANAGER_H
+#define PANEL_POWER_MANAGER_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define PANEL_TYPE_POWER_MANAGER (panel_power_manager_get_type ())
+#define PANEL_POWER_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PANEL_TYPE_POWER_MANAGER, PanelPowerManager))
+#define PANEL_POWER_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANEL_TYPE_POWER_MANAGER, PanelPowerManagerClass))
+#define PANEL_IS_POWER_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PANEL_TYPE_POWER_MANAGER))
+#define PANEL_IS_POWER_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANEL_TYPE_POWER_MANAGER))
+#define PANEL_POWER_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PANEL_TYPE_POWER_MANAGER, PanelPowerManagerClass))
+#define PANEL_POWER_MANAGER_ERROR (panel_power_manager_error_quark ())
+
+typedef struct _PanelPowerManager PanelPowerManager;
+typedef struct _PanelPowerManagerClass PanelPowerManagerClass;
+typedef struct _PanelPowerManagerPrivate PanelPowerManagerPrivate;
+typedef enum _PanelPowerManagerError PanelPowerManagerError;
+
+
+struct _PanelPowerManager {
+ GObject parent;
+
+ /*< private > */
+ PanelPowerManagerPrivate *priv;
+};
+
+struct _PanelPowerManagerClass {
+ GObjectClass parent_class;
+
+ /* signals */
+ void (* request_failed) (PanelPowerManager *manager,
+ GError *error);
+};
+
+enum _PanelPowerManagerError {
+ PANEL_POWER_MANAGER_ERROR_SUSPENDING = 0,
+ PANEL_POWER_MANAGER_ERROR_HIBERNATING
+};
+
+GType panel_power_manager_get_type (void);
+GQuark panel_power_manager_error_quark (void);
+
+PanelPowerManager *panel_power_manager_new (void) G_GNUC_MALLOC;
+
+gboolean panel_power_manager_can_suspend (PanelPowerManager *manager);
+gboolean panel_power_manager_can_hibernate (PanelPowerManager *manager);
+gboolean panel_power_manager_can_power_down (PanelPowerManager *manager);
+gboolean panel_power_manager_can_restart (PanelPowerManager *manager);
+
+void panel_power_manager_attempt_suspend (PanelPowerManager *manager);
+void panel_power_manager_attempt_hibernate (PanelPowerManager *manager);
+
+PanelPowerManager *panel_get_power_manager (void);
+
+G_END_DECLS
+
+#endif /* PANEL_POWER_MANAGER_H */