diff -p -up gnome-panel-2.23.6/gnome-panel/main.c.suspend gnome-panel-2.23.6/gnome-panel/main.c --- gnome-panel-2.23.6/gnome-panel/main.c.suspend 2008-08-04 22:43:10.000000000 +0200 +++ gnome-panel-2.23.6/gnome-panel/main.c 2008-08-05 10:24:12.000000000 +0200 @@ -53,6 +53,7 @@ main (int argc, char **argv) bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); + bind_textdomain_codeset ("gtk+mdk", "UTF-8"); context = g_option_context_new (""); diff -p -up gnome-panel-2.23.6/gnome-panel/panel-action-button.c.suspend gnome-panel-2.23.6/gnome-panel/panel-action-button.c --- gnome-panel-2.23.6/gnome-panel/panel-action-button.c.suspend 2008-08-05 10:24:12.000000000 +0200 +++ gnome-panel-2.23.6/gnome-panel/panel-action-button.c 2008-08-05 10:24:12.000000000 +0200 @@ -84,6 +84,7 @@ static GConfEnumStringPair panel_action_ { PANEL_ACTION_SHUTDOWN, "shutdown" }, /* compatibility with GNOME < 2.13.90 */ { PANEL_ACTION_SCREENSHOT, "screenshot" }, + { PANEL_ACTION_SUSPEND, "suspend" }, { 0, NULL }, }; @@ -272,6 +273,32 @@ panel_action_connect_server (GtkWidget * } } +/* Suspend to disk + */ +static void +panel_action_suspend (GtkWidget *widget) +{ + GtkWidget *dialog; + gint result; + + dialog = gtk_message_dialog_new (NULL, + 0, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK_CANCEL, + dgettext("gtk+mdk","Do you really want to suspend to disk?")); + result = gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + + switch (result) { + case GTK_RESPONSE_OK: + gdk_spawn_command_line_on_screen (gtk_widget_get_screen (widget), + "pmsuspend", NULL); + break; + default: + break; + } +} + typedef struct { PanelActionButtonType type; char *icon_name; @@ -372,6 +399,15 @@ static PanelAction actions [] = { PANEL_ACTION_SCREENSHOT, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + }, + { + PANEL_ACTION_SUSPEND, + "gnome-shutdown", + N_("Suspend To Disk"), + N_("Suspend To Disk"), + "gospanel-563", + "ACTION:suspend:NEW", + panel_action_suspend, NULL, NULL, NULL } }; @@ -420,6 +456,9 @@ panel_action_get_text (PanelActionButton { g_return_val_if_fail (type > PANEL_ACTION_NONE && type < PANEL_ACTION_LAST, NULL); + if (type == PANEL_ACTION_SUSPEND) + return dgettext("gtk+mdk",actions[type].text); + return _(actions[type].text); } @@ -428,6 +467,9 @@ panel_action_get_tooltip (PanelActionBut { g_return_val_if_fail (type > PANEL_ACTION_NONE && type < PANEL_ACTION_LAST, NULL); + if (type == PANEL_ACTION_SUSPEND) + return dgettext("gtk+mdk",actions[type].tooltip); + return _(actions[type].tooltip); } diff -p -up gnome-panel-2.23.6/gnome-panel/panel-enums.h.suspend gnome-panel-2.23.6/gnome-panel/panel-enums.h --- gnome-panel-2.23.6/gnome-panel/panel-enums.h.suspend 2008-08-04 22:43:10.000000000 +0200 +++ gnome-panel-2.23.6/gnome-panel/panel-enums.h 2008-08-05 10:24:12.000000000 +0200 @@ -98,6 +98,7 @@ typedef enum { PANEL_ACTION_SHUTDOWN, /* compatibility with GNOME < 2.13.90 */ PANEL_ACTION_SCREENSHOT, + PANEL_ACTION_SUSPEND, PANEL_ACTION_LAST } PanelActionButtonType; diff -p -up gnome-panel-2.23.6/gnome-panel/panel-menu-items.c.suspend gnome-panel-2.23.6/gnome-panel/panel-menu-items.c --- gnome-panel-2.23.6/gnome-panel/panel-menu-items.c.suspend 2008-08-04 22:43:10.000000000 +0200 +++ gnome-panel-2.23.6/gnome-panel/panel-menu-items.c 2008-08-05 10:27:46.000000000 +0200 @@ -936,6 +936,7 @@ panel_place_menu_item_create_menu (Panel char *name; char *uri; GFile *file; + gboolean separator_inserted = FALSE; places_menu = panel_create_menu (); @@ -1005,6 +1006,24 @@ panel_place_menu_item_create_menu (Panel gtk_menu_shell_append (GTK_MENU_SHELL (places_menu), item); } + + if (panel_is_program_in_path ("pmsuspend") && + (g_file_test("/proc/acpi", G_FILE_TEST_EXISTS) || g_file_test("/proc/apm",G_FILE_TEST_EXISTS))) { + char *console = g_strconcat ("/var/run/console/", g_get_user_name (), NULL); + if ((getuid () == 0) || g_file_test (console, G_FILE_TEST_EXISTS)) { + item = panel_menu_items_create_action_item (PANEL_ACTION_SUSPEND); + if (item != NULL) { + if (!separator_inserted) { + add_menu_separator (places_menu); + separator_inserted = TRUE; + } + + gtk_menu_shell_append (GTK_MENU_SHELL (places_menu), item); + } + } + g_free (console); + } + add_menu_separator (places_menu); diff -p -up gnome-panel-2.23.6/gnome-panel/panel-stock-icons.h.suspend gnome-panel-2.23.6/gnome-panel/panel-stock-icons.h --- gnome-panel-2.23.6/gnome-panel/panel-stock-icons.h.suspend 2008-08-04 22:43:10.000000000 +0200 +++ gnome-panel-2.23.6/gnome-panel/panel-stock-icons.h 2008-08-05 10:24:12.000000000 +0200 @@ -43,6 +43,7 @@ G_BEGIN_DECLS #define PANEL_STOCK_EXECUTE "panel-execute" #define PANEL_STOCK_CLEAR "panel-clear" #define PANEL_STOCK_DONT_DELETE "panel-dont-delete" +#define PANEL_STOCK_SUSPEND "panel-suspend" void panel_init_stock_icons_and_items (void); GtkIconSize panel_menu_icon_get_size (void);