[gnome-disk-utility] Add a "Wake-up from Standby" menu item
- From: David Zeuthen <davidz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-disk-utility] Add a "Wake-up from Standby" menu item
- Date: Sun, 24 Jun 2012 14:06:05 +0000 (UTC)
commit a5c63b56dfbe1ff1f9ed226c1424e0aa9f87f64c
Author: David Zeuthen <zeuthen gmail com>
Date: Sun Jun 24 10:05:35 2012 -0400
Add a "Wake-up from Standby" menu item
Symmetri, really.
http://people.freedesktop.org/~david/gnome-disks-resume-from-standby.png
Signed-off-by: David Zeuthen <zeuthen gmail com>
data/ui/disks.ui | 8 ++++
src/disks/gduwindow.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 107 insertions(+), 3 deletions(-)
---
diff --git a/data/ui/disks.ui b/data/ui/disks.ui
index ced7c87..18bd362 100644
--- a/data/ui/disks.ui
+++ b/data/ui/disks.ui
@@ -149,6 +149,14 @@
<property name="label" translatable="yes">Standby Now</property>
</object>
</child>
+ <child>
+ <object class="GtkMenuItem" id="generic-drive-menu-item-resume-now">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="label" translatable="yes">Wake-Up from Standby</property>
+ </object>
+ </child>
</object>
<object class="GtkMenu" id="generic-menu">
<property name="visible">True</property>
diff --git a/src/disks/gduwindow.c b/src/disks/gduwindow.c
index e67bfde..02b6e76 100644
--- a/src/disks/gduwindow.c
+++ b/src/disks/gduwindow.c
@@ -112,6 +112,7 @@ struct _GduWindow
GtkWidget *generic_drive_menu_item_view_smart;
GtkWidget *generic_drive_menu_item_disk_settings;
GtkWidget *generic_drive_menu_item_standby_now;
+ GtkWidget *generic_drive_menu_item_resume_now;
GtkWidget *generic_drive_menu_item_format_disk;
GtkWidget *generic_drive_menu_item_create_disk_image;
GtkWidget *generic_drive_menu_item_restore_disk_image;
@@ -177,6 +178,7 @@ static const struct {
{G_STRUCT_OFFSET (GduWindow, generic_drive_menu_item_view_smart), "generic-drive-menu-item-view-smart"},
{G_STRUCT_OFFSET (GduWindow, generic_drive_menu_item_disk_settings), "generic-drive-menu-item-disk-settings"},
{G_STRUCT_OFFSET (GduWindow, generic_drive_menu_item_standby_now), "generic-drive-menu-item-standby-now"},
+ {G_STRUCT_OFFSET (GduWindow, generic_drive_menu_item_resume_now), "generic-drive-menu-item-resume-now"},
{G_STRUCT_OFFSET (GduWindow, generic_menu), "generic-menu"},
{G_STRUCT_OFFSET (GduWindow, generic_menu_item_configure_fstab), "generic-menu-item-configure-fstab"},
@@ -232,6 +234,7 @@ typedef enum
SHOW_FLAGS_DISK_POPUP_MENU_VIEW_SMART = (1<<14),
SHOW_FLAGS_DISK_POPUP_MENU_DISK_SETTINGS = (1<<15),
SHOW_FLAGS_DISK_POPUP_MENU_STANDBY_NOW = (1<<16),
+ SHOW_FLAGS_DISK_POPUP_MENU_RESUME_NOW = (1<<17),
/* generic volume menu */
SHOW_FLAGS_POPUP_MENU_CONFIGURE_FSTAB = (1<<20),
@@ -271,6 +274,8 @@ static void on_generic_drive_menu_item_disk_settings (GtkMenuItem *menu_item,
gpointer user_data);
static void on_generic_drive_menu_item_standby_now (GtkMenuItem *menu_item,
gpointer user_data);
+static void on_generic_drive_menu_item_resume_now (GtkMenuItem *menu_item,
+ gpointer user_data);
static void on_generic_drive_menu_item_format_disk (GtkMenuItem *menu_item,
gpointer user_data);
static void on_generic_drive_menu_item_create_disk_image (GtkMenuItem *menu_item,
@@ -410,8 +415,6 @@ update_for_show_flags (GduWindow *window,
show_flags & SHOW_FLAGS_DISK_POPUP_MENU_VIEW_SMART);
gtk_widget_set_sensitive (GTK_WIDGET (window->generic_drive_menu_item_disk_settings),
show_flags & SHOW_FLAGS_DISK_POPUP_MENU_DISK_SETTINGS);
- gtk_widget_set_sensitive (GTK_WIDGET (window->generic_drive_menu_item_standby_now),
- show_flags & SHOW_FLAGS_DISK_POPUP_MENU_STANDBY_NOW);
gtk_widget_set_sensitive (GTK_WIDGET (window->generic_drive_menu_item_create_disk_image),
show_flags & SHOW_FLAGS_DISK_POPUP_MENU_CREATE_DISK_IMAGE);
gtk_widget_set_sensitive (GTK_WIDGET (window->generic_drive_menu_item_restore_disk_image),
@@ -419,6 +422,30 @@ update_for_show_flags (GduWindow *window,
gtk_widget_set_sensitive (GTK_WIDGET (window->generic_drive_menu_item_benchmark),
show_flags & SHOW_FLAGS_DISK_POPUP_MENU_BENCHMARK);
+ if (!(show_flags & (SHOW_FLAGS_DISK_POPUP_MENU_STANDBY_NOW|SHOW_FLAGS_DISK_POPUP_MENU_RESUME_NOW)))
+ {
+ /* no PM capabilities... only show "standby" greyed out */
+ gtk_widget_show (GTK_WIDGET (window->generic_drive_menu_item_standby_now));
+ gtk_widget_hide (GTK_WIDGET (window->generic_drive_menu_item_resume_now));
+ gtk_widget_set_sensitive (GTK_WIDGET (window->generic_drive_menu_item_standby_now), FALSE);
+ }
+ else
+ {
+ /* Only show one of Standby and Resume (they are mutually exclusive) */
+ gtk_widget_set_sensitive (GTK_WIDGET (window->generic_drive_menu_item_standby_now), TRUE);
+ gtk_widget_set_sensitive (GTK_WIDGET (window->generic_drive_menu_item_resume_now), TRUE);
+ if (show_flags & SHOW_FLAGS_DISK_POPUP_MENU_STANDBY_NOW)
+ {
+ gtk_widget_show (GTK_WIDGET (window->generic_drive_menu_item_standby_now));
+ gtk_widget_hide (GTK_WIDGET (window->generic_drive_menu_item_resume_now));
+ }
+ else
+ {
+ gtk_widget_hide (GTK_WIDGET (window->generic_drive_menu_item_standby_now));
+ gtk_widget_show (GTK_WIDGET (window->generic_drive_menu_item_resume_now));
+ }
+ }
+
gtk_widget_set_sensitive (GTK_WIDGET (window->generic_menu_item_configure_fstab),
show_flags & SHOW_FLAGS_POPUP_MENU_CONFIGURE_FSTAB);
gtk_widget_set_sensitive (GTK_WIDGET (window->generic_menu_item_configure_crypttab),
@@ -1131,6 +1158,10 @@ gdu_window_constructed (GObject *object)
"activate",
G_CALLBACK (on_generic_drive_menu_item_standby_now),
window);
+ g_signal_connect (window->generic_drive_menu_item_resume_now,
+ "activate",
+ G_CALLBACK (on_generic_drive_menu_item_resume_now),
+ window);
g_signal_connect (window->generic_drive_menu_item_format_disk,
"activate",
G_CALLBACK (on_generic_drive_menu_item_format_disk),
@@ -1784,7 +1815,20 @@ update_device_page_for_drive (GduWindow *window,
if (ata != NULL)
{
if (udisks_drive_ata_get_pm_supported (ata))
- *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_STANDBY_NOW;
+ {
+ GtkTreeIter iter;
+ gboolean sleeping = FALSE;
+ if (gdu_device_tree_model_get_iter_for_object (window->model, object, &iter))
+ {
+ gtk_tree_model_get (GTK_TREE_MODEL (window->model), &iter,
+ GDU_DEVICE_TREE_MODEL_COLUMN_SLEEPING,
+ &sleeping, -1);
+ }
+ if (sleeping)
+ *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_RESUME_NOW;
+ else
+ *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_STANDBY_NOW;
+ }
}
size = udisks_drive_get_size (drive);
@@ -2563,6 +2607,8 @@ on_generic_drive_menu_item_disk_settings (GtkMenuItem *menu_item,
gdu_disk_settings_dialog_show (window, window->current_object);
}
+/* ---------------------------------------------------------------------------------------------------- */
+
static void
ata_pm_standby_cb (GObject *source_object,
GAsyncResult *res,
@@ -2607,6 +2653,54 @@ on_generic_drive_menu_item_standby_now (GtkMenuItem *menu_item,
}
}
+/* ---------------------------------------------------------------------------------------------------- */
+
+static void
+ata_pm_wakeup_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GduWindow *window = GDU_WINDOW (user_data);
+ GError *error = NULL;
+
+ error = NULL;
+ if (!udisks_drive_ata_call_pm_wakeup_finish (UDISKS_DRIVE_ATA (source_object),
+ res,
+ &error))
+ {
+ gdu_window_show_error (window,
+ _("An error occurred when trying to wake up the drive from standby mode"),
+ error);
+ g_clear_error (&error);
+ }
+
+ g_object_unref (window);
+}
+
+static void
+on_generic_drive_menu_item_resume_now (GtkMenuItem *menu_item,
+ gpointer user_data)
+{
+ GduWindow *window = GDU_WINDOW (user_data);
+ UDisksDriveAta *ata;
+
+ ata = udisks_object_peek_drive_ata (window->current_object);
+ if (ata != NULL)
+ {
+ udisks_drive_ata_call_pm_wakeup (ata,
+ g_variant_new ("a{sv}", NULL), /* options */
+ NULL, /* GCancellable */
+ (GAsyncReadyCallback) ata_pm_wakeup_cb,
+ g_object_ref (window));
+ }
+ else
+ {
+ g_warning ("object is not an ATA drive");
+ }
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
static void
on_generic_menu_item_configure_crypttab (GtkMenuItem *menu_item,
gpointer user_data)
@@ -2721,6 +2815,7 @@ on_devtab_action_generic_activated (GtkAction *action,
gpointer user_data)
{
GduWindow *window = GDU_WINDOW (user_data);
+ update_all (window);
gtk_menu_popup (GTK_MENU (window->generic_menu),
NULL, NULL, NULL, NULL, 1, gtk_get_current_event_time ());
}
@@ -2732,6 +2827,7 @@ on_devtab_action_generic_drive_activated (GtkAction *action,
gpointer user_data)
{
GduWindow *window = GDU_WINDOW (user_data);
+ update_all (window);
gtk_menu_popup (GTK_MENU (window->generic_drive_menu),
NULL, NULL, NULL, NULL, 1, gtk_get_current_event_time ());
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]