[gnome-disk-utility/wip/mdraid] Split ShowFlags into separate enums depending on type



commit 65c18829e023db492349d295db2a3b26cb7039ba
Author: David Zeuthen <zeuthen gmail com>
Date:   Thu Sep 13 11:24:17 2012 -0400

    Split ShowFlags into separate enums depending on type
    
    We were running out of bits...
    
    Signed-off-by: David Zeuthen <zeuthen gmail com>

 data/ui/disks.ui      |    8 +-
 src/disks/gduwindow.c |  319 +++++++++++++++++++++++++++----------------------
 2 files changed, 179 insertions(+), 148 deletions(-)
---
diff --git a/data/ui/disks.ui b/data/ui/disks.ui
index 27e2fbc..755896a 100644
--- a/data/ui/disks.ui
+++ b/data/ui/disks.ui
@@ -1515,7 +1515,7 @@
         <property name="use_action_appearance">False</property>
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="label" translatable="yes">Format Disk...</property>
+        <property name="label" translatable="yes">Format...</property>
       </object>
     </child>
     <child>
@@ -1550,7 +1550,7 @@
       </object>
     </child>
     <child>
-      <object class="GtkSeparatorMenuItem" id="menuitem5">
+      <object class="GtkSeparatorMenuItem" id="generic-drive-menu-item-drive-sep-1">
         <property name="use_action_appearance">False</property>
         <property name="visible">True</property>
         <property name="can_focus">False</property>
@@ -1561,7 +1561,7 @@
         <property name="use_action_appearance">False</property>
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="label" translatable="yes">SMART Data and Tests...</property>
+        <property name="label" translatable="yes">SMART Data...</property>
       </object>
     </child>
     <child>
@@ -1573,7 +1573,7 @@
       </object>
     </child>
     <child>
-      <object class="GtkSeparatorMenuItem" id="menuitem6">
+      <object class="GtkSeparatorMenuItem" id="generic-drive-menu-item-drive-sep-2">
         <property name="use_action_appearance">False</property>
         <property name="visible">True</property>
         <property name="can_focus">False</property>
diff --git a/src/disks/gduwindow.c b/src/disks/gduwindow.c
index 9a862d5..ec3ec5e 100644
--- a/src/disks/gduwindow.c
+++ b/src/disks/gduwindow.c
@@ -100,14 +100,17 @@ struct _GduWindow
   GtkWidget *devtab_drive_action_generic;
 
   GtkWidget *generic_drive_menu;
-  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;
   GtkWidget *generic_drive_menu_item_benchmark;
+  /* Drive-specific items */
+  GtkWidget *generic_drive_menu_item_drive_sep_1;
+  GtkWidget *generic_drive_menu_item_view_smart;
+  GtkWidget *generic_drive_menu_item_disk_settings;
+  GtkWidget *generic_drive_menu_item_drive_sep_2;
+  GtkWidget *generic_drive_menu_item_standby_now;
+  GtkWidget *generic_drive_menu_item_resume_now;
 
   GtkWidget *generic_menu;
   GtkWidget *generic_menu_item_configure_fstab;
@@ -185,8 +188,11 @@ static const struct {
   {G_STRUCT_OFFSET (GduWindow, generic_drive_menu_item_create_disk_image), "generic-drive-menu-item-create-disk-image"},
   {G_STRUCT_OFFSET (GduWindow, generic_drive_menu_item_restore_disk_image), "generic-drive-menu-item-restore-disk-image"},
   {G_STRUCT_OFFSET (GduWindow, generic_drive_menu_item_benchmark), "generic-drive-menu-item-benchmark"},
+  /* Drive-specific items */
+  {G_STRUCT_OFFSET (GduWindow, generic_drive_menu_item_drive_sep_1), "generic-drive-menu-item-drive-sep-1"},
   {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_drive_sep_2), "generic-drive-menu-item-drive-sep-2"},
   {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"},
 
@@ -230,50 +236,64 @@ enum
   PROP_CLIENT
 };
 
+/* ---------------------------------------------------------------------------------------------------- */
+
+typedef enum {
+  SHOW_FLAGS_DRIVE_BUTTONS_RAID_START       = (1<<0),
+  SHOW_FLAGS_DRIVE_BUTTONS_RAID_STOP        = (1<<1),
+  SHOW_FLAGS_DRIVE_BUTTONS_EJECT            = (1<<2),
+} ShowFlagsDriveButtons;
+
 typedef enum
 {
-  SHOW_FLAGS_NONE                    = 0,
-
-  /* device toolbar */
-  SHOW_FLAGS_DETACH_DISK_IMAGE       = (1<<0),
-
-  /* drive buttonbox */
-  SHOW_FLAGS_RAID_START_BUTTON       = (1<<1),
-  SHOW_FLAGS_RAID_STOP_BUTTON        = (1<<2),
-  SHOW_FLAGS_EJECT_BUTTON            = (1<<3),
-
-  /* volume toolbar */
-  SHOW_FLAGS_PARTITION_CREATE_BUTTON = (1<<4),
-  SHOW_FLAGS_PARTITION_DELETE_BUTTON = (1<<5),
-  SHOW_FLAGS_MOUNT_BUTTON            = (1<<6),
-  SHOW_FLAGS_UNMOUNT_BUTTON          = (1<<7),
-  SHOW_FLAGS_ACTIVATE_SWAP_BUTTON    = (1<<8),
-  SHOW_FLAGS_DEACTIVATE_SWAP_BUTTON  = (1<<9),
-  SHOW_FLAGS_ENCRYPTED_UNLOCK_BUTTON = (1<<10),
-  SHOW_FLAGS_ENCRYPTED_LOCK_BUTTON   = (1<<11),
-
-  /* generic drive menu */
-  SHOW_FLAGS_DISK_POPUP_MENU_FORMAT_DISK           = (1<<12),
-  SHOW_FLAGS_DISK_POPUP_MENU_CREATE_DISK_IMAGE     = (1<<13),
-  SHOW_FLAGS_DISK_POPUP_MENU_RESTORE_DISK_IMAGE    = (1<<14),
-  SHOW_FLAGS_DISK_POPUP_MENU_BENCHMARK             = (1<<15),
-  SHOW_FLAGS_DISK_POPUP_MENU_VIEW_SMART            = (1<<16),
-  SHOW_FLAGS_DISK_POPUP_MENU_DISK_SETTINGS         = (1<<17),
-  SHOW_FLAGS_DISK_POPUP_MENU_STANDBY_NOW           = (1<<18),
-  SHOW_FLAGS_DISK_POPUP_MENU_RESUME_NOW            = (1<<19),
-
-  /* generic volume menu */
-  SHOW_FLAGS_POPUP_MENU_CONFIGURE_FSTAB       = (1<<20),
-  SHOW_FLAGS_POPUP_MENU_CONFIGURE_CRYPTTAB    = (1<<21),
-  SHOW_FLAGS_POPUP_MENU_CHANGE_PASSPHRASE     = (1<<22),
-  SHOW_FLAGS_POPUP_MENU_EDIT_LABEL            = (1<<23),
-  SHOW_FLAGS_POPUP_MENU_EDIT_PARTITION        = (1<<24),
-  SHOW_FLAGS_POPUP_MENU_FORMAT_VOLUME         = (1<<25),
-  SHOW_FLAGS_POPUP_MENU_CREATE_VOLUME_IMAGE   = (1<<26),
-  SHOW_FLAGS_POPUP_MENU_RESTORE_VOLUME_IMAGE  = (1<<27),
-  SHOW_FLAGS_POPUP_MENU_BENCHMARK             = (1<<28),
+  SHOW_FLAGS_DRIVE_MENU_FORMAT_DISK           = (1<<0),
+  SHOW_FLAGS_DRIVE_MENU_CREATE_DISK_IMAGE     = (1<<1),
+  SHOW_FLAGS_DRIVE_MENU_RESTORE_DISK_IMAGE    = (1<<2),
+  SHOW_FLAGS_DRIVE_MENU_BENCHMARK             = (1<<3),
+  SHOW_FLAGS_DRIVE_MENU_VIEW_SMART            = (1<<4),
+  SHOW_FLAGS_DRIVE_MENU_DISK_SETTINGS         = (1<<5),
+  SHOW_FLAGS_DRIVE_MENU_STANDBY_NOW           = (1<<6),
+  SHOW_FLAGS_DRIVE_MENU_RESUME_NOW            = (1<<7),
+} ShowFlagsDriveMenu;
+
+typedef enum {
+  SHOW_FLAGS_VOLUME_BUTTONS_PARTITION_CREATE = (1<<0),
+  SHOW_FLAGS_VOLUME_BUTTONS_PARTITION_DELETE = (1<<1),
+  SHOW_FLAGS_VOLUME_BUTTONS_MOUNT            = (1<<2),
+  SHOW_FLAGS_VOLUME_BUTTONS_UNMOUNT          = (1<<3),
+  SHOW_FLAGS_VOLUME_BUTTONS_ACTIVATE_SWAP    = (1<<4),
+  SHOW_FLAGS_VOLUME_BUTTONS_DEACTIVATE_SWAP  = (1<<5),
+  SHOW_FLAGS_VOLUME_BUTTONS_ENCRYPTED_UNLOCK = (1<<6),
+  SHOW_FLAGS_VOLUME_BUTTONS_ENCRYPTED_LOCK   = (1<<7),
+} ShowFlagsVolumeButtons;
+
+typedef enum
+{
+  SHOW_FLAGS_VOLUME_MENU_CONFIGURE_FSTAB       = (1<<0),
+  SHOW_FLAGS_VOLUME_MENU_CONFIGURE_CRYPTTAB    = (1<<1),
+  SHOW_FLAGS_VOLUME_MENU_CHANGE_PASSPHRASE     = (1<<2),
+  SHOW_FLAGS_VOLUME_MENU_EDIT_LABEL            = (1<<3),
+  SHOW_FLAGS_VOLUME_MENU_EDIT_PARTITION        = (1<<4),
+  SHOW_FLAGS_VOLUME_MENU_FORMAT_VOLUME         = (1<<5),
+  SHOW_FLAGS_VOLUME_MENU_CREATE_VOLUME_IMAGE   = (1<<6),
+  SHOW_FLAGS_VOLUME_MENU_RESTORE_VOLUME_IMAGE  = (1<<7),
+  SHOW_FLAGS_VOLUME_MENU_BENCHMARK             = (1<<8),
+} ShowFlagsVolumeMenu;
+
+typedef enum {
+  SHOW_FLAGS_DEVICE_TREE_BUTTON_DETACH_DISK_IMAGE  = (1<<0),
+} ShowFlagsDeviceTreeButtons;
+
+typedef struct
+{
+  ShowFlagsDriveButtons      drive_buttons;
+  ShowFlagsDriveMenu         drive_menu;
+  ShowFlagsVolumeButtons     volume_buttons;
+  ShowFlagsVolumeMenu        volume_menu;
+  ShowFlagsDeviceTreeButtons device_tree_buttons;
 } ShowFlags;
 
+/* ---------------------------------------------------------------------------------------------------- */
 
 static void setup_device_page (GduWindow *window, UDisksObject *object);
 static void update_device_page (GduWindow *window, ShowFlags *show_flags);
@@ -416,95 +436,77 @@ static void select_details_page (GduWindow       *window,
 
 static void
 update_for_show_flags (GduWindow *window,
-                       ShowFlags  show_flags)
+                       ShowFlags *show_flags)
 {
   gtk_widget_set_visible (GTK_WIDGET (window->device_toolbar_detach_disk_image_button),
-                          show_flags & SHOW_FLAGS_DETACH_DISK_IMAGE);
+                          show_flags->device_tree_buttons & SHOW_FLAGS_DEVICE_TREE_BUTTON_DETACH_DISK_IMAGE);
 
-  gtk_action_set_sensitive (GTK_ACTION (window->devtab_drive_action_raid_start), show_flags & SHOW_FLAGS_RAID_START_BUTTON);
+  gtk_action_set_sensitive (GTK_ACTION (window->devtab_drive_action_raid_start),
+                            show_flags->drive_buttons & SHOW_FLAGS_DRIVE_BUTTONS_RAID_START);
   gtk_action_set_visible (GTK_ACTION (window->devtab_drive_action_raid_start), TRUE);
-  gtk_widget_set_visible (window->devtab_drive_raid_start_button, show_flags & SHOW_FLAGS_RAID_START_BUTTON);
+  gtk_widget_set_visible (window->devtab_drive_raid_start_button,
+                          show_flags->drive_buttons & SHOW_FLAGS_DRIVE_BUTTONS_RAID_START);
 
-  gtk_action_set_sensitive (GTK_ACTION (window->devtab_drive_action_raid_stop), show_flags & SHOW_FLAGS_RAID_STOP_BUTTON);
+  gtk_action_set_sensitive (GTK_ACTION (window->devtab_drive_action_raid_stop),
+                            show_flags->drive_buttons & SHOW_FLAGS_DRIVE_BUTTONS_RAID_STOP);
   gtk_action_set_visible (GTK_ACTION (window->devtab_drive_action_raid_stop), TRUE);
-  gtk_widget_set_visible (window->devtab_drive_raid_stop_button, show_flags & SHOW_FLAGS_RAID_STOP_BUTTON);
+  gtk_widget_set_visible (window->devtab_drive_raid_stop_button,
+                          show_flags->drive_buttons & SHOW_FLAGS_DRIVE_BUTTONS_RAID_STOP);
 
-  gtk_action_set_sensitive (GTK_ACTION (window->devtab_drive_action_eject), show_flags & SHOW_FLAGS_EJECT_BUTTON);
+  gtk_action_set_sensitive (GTK_ACTION (window->devtab_drive_action_eject),
+                            show_flags->drive_buttons & SHOW_FLAGS_DRIVE_BUTTONS_EJECT);
   gtk_action_set_visible (GTK_ACTION (window->devtab_drive_action_eject), TRUE);
-  gtk_widget_set_visible (window->devtab_drive_eject_button, show_flags & SHOW_FLAGS_EJECT_BUTTON);
+  gtk_widget_set_visible (window->devtab_drive_eject_button,
+                          show_flags->drive_buttons & SHOW_FLAGS_DRIVE_BUTTONS_EJECT);
 
   gtk_action_set_visible (GTK_ACTION (window->devtab_action_partition_create),
-                          show_flags & SHOW_FLAGS_PARTITION_CREATE_BUTTON);
+                          show_flags->volume_buttons & SHOW_FLAGS_VOLUME_BUTTONS_PARTITION_CREATE);
   gtk_action_set_visible (GTK_ACTION (window->devtab_action_partition_delete),
-                          show_flags & SHOW_FLAGS_PARTITION_DELETE_BUTTON);
+                          show_flags->volume_buttons & SHOW_FLAGS_VOLUME_BUTTONS_PARTITION_DELETE);
   gtk_action_set_visible (GTK_ACTION (window->devtab_action_unmount),
-                          show_flags & SHOW_FLAGS_UNMOUNT_BUTTON);
+                          show_flags->volume_buttons & SHOW_FLAGS_VOLUME_BUTTONS_UNMOUNT);
   gtk_action_set_visible (GTK_ACTION (window->devtab_action_mount),
-                          show_flags & SHOW_FLAGS_MOUNT_BUTTON);
+                          show_flags->volume_buttons & SHOW_FLAGS_VOLUME_BUTTONS_MOUNT);
   gtk_action_set_visible (GTK_ACTION (window->devtab_action_activate_swap),
-                          show_flags & SHOW_FLAGS_ACTIVATE_SWAP_BUTTON);
+                          show_flags->volume_buttons & SHOW_FLAGS_VOLUME_BUTTONS_ACTIVATE_SWAP);
   gtk_action_set_visible (GTK_ACTION (window->devtab_action_deactivate_swap),
-                          show_flags & SHOW_FLAGS_DEACTIVATE_SWAP_BUTTON);
+                          show_flags->volume_buttons & SHOW_FLAGS_VOLUME_BUTTONS_DEACTIVATE_SWAP);
   gtk_action_set_visible (GTK_ACTION (window->devtab_action_unlock),
-                          show_flags & SHOW_FLAGS_ENCRYPTED_UNLOCK_BUTTON);
+                          show_flags->volume_buttons & SHOW_FLAGS_VOLUME_BUTTONS_ENCRYPTED_UNLOCK);
   gtk_action_set_visible (GTK_ACTION (window->devtab_action_lock),
-                          show_flags & SHOW_FLAGS_ENCRYPTED_LOCK_BUTTON);
+                          show_flags->volume_buttons & SHOW_FLAGS_VOLUME_BUTTONS_ENCRYPTED_LOCK);
 
   gtk_widget_set_sensitive (GTK_WIDGET (window->generic_drive_menu_item_format_disk),
-                            show_flags & SHOW_FLAGS_DISK_POPUP_MENU_FORMAT_DISK);
+                            show_flags->drive_menu & SHOW_FLAGS_DRIVE_MENU_FORMAT_DISK);
   gtk_widget_set_sensitive (GTK_WIDGET (window->generic_drive_menu_item_view_smart),
-                            show_flags & SHOW_FLAGS_DISK_POPUP_MENU_VIEW_SMART);
+                            show_flags->drive_menu & SHOW_FLAGS_DRIVE_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);
+                            show_flags->drive_menu & SHOW_FLAGS_DRIVE_MENU_DISK_SETTINGS);
   gtk_widget_set_sensitive (GTK_WIDGET (window->generic_drive_menu_item_create_disk_image),
-                            show_flags & SHOW_FLAGS_DISK_POPUP_MENU_CREATE_DISK_IMAGE);
+                            show_flags->drive_menu & SHOW_FLAGS_DRIVE_MENU_CREATE_DISK_IMAGE);
   gtk_widget_set_sensitive (GTK_WIDGET (window->generic_drive_menu_item_restore_disk_image),
-                            show_flags & SHOW_FLAGS_DISK_POPUP_MENU_RESTORE_DISK_IMAGE);
+                            show_flags->drive_menu & SHOW_FLAGS_DRIVE_MENU_RESTORE_DISK_IMAGE);
   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));
-        }
-    }
+                            show_flags->drive_menu & SHOW_FLAGS_DRIVE_MENU_BENCHMARK);
 
   gtk_widget_set_sensitive (GTK_WIDGET (window->generic_menu_item_configure_fstab),
-                            show_flags & SHOW_FLAGS_POPUP_MENU_CONFIGURE_FSTAB);
+                            show_flags->volume_menu & SHOW_FLAGS_VOLUME_MENU_CONFIGURE_FSTAB);
   gtk_widget_set_sensitive (GTK_WIDGET (window->generic_menu_item_configure_crypttab),
-                            show_flags & SHOW_FLAGS_POPUP_MENU_CONFIGURE_CRYPTTAB);
+                            show_flags->volume_menu & SHOW_FLAGS_VOLUME_MENU_CONFIGURE_CRYPTTAB);
   gtk_widget_set_sensitive (GTK_WIDGET (window->generic_menu_item_change_passphrase),
-                            show_flags & SHOW_FLAGS_POPUP_MENU_CHANGE_PASSPHRASE);
+                            show_flags->volume_menu & SHOW_FLAGS_VOLUME_MENU_CHANGE_PASSPHRASE);
   gtk_widget_set_sensitive (GTK_WIDGET (window->generic_menu_item_edit_label),
-                            show_flags & SHOW_FLAGS_POPUP_MENU_EDIT_LABEL);
+                            show_flags->volume_menu & SHOW_FLAGS_VOLUME_MENU_EDIT_LABEL);
   gtk_widget_set_sensitive (GTK_WIDGET (window->generic_menu_item_edit_partition),
-                            show_flags & SHOW_FLAGS_POPUP_MENU_EDIT_PARTITION);
+                            show_flags->volume_menu & SHOW_FLAGS_VOLUME_MENU_EDIT_PARTITION);
   gtk_widget_set_sensitive (GTK_WIDGET (window->generic_menu_item_format_volume),
-                            show_flags & SHOW_FLAGS_POPUP_MENU_FORMAT_VOLUME);
+                            show_flags->volume_menu & SHOW_FLAGS_VOLUME_MENU_FORMAT_VOLUME);
   gtk_widget_set_sensitive (GTK_WIDGET (window->generic_menu_item_create_volume_image),
-                            show_flags & SHOW_FLAGS_POPUP_MENU_CREATE_VOLUME_IMAGE);
+                            show_flags->volume_menu & SHOW_FLAGS_VOLUME_MENU_CREATE_VOLUME_IMAGE);
   gtk_widget_set_sensitive (GTK_WIDGET (window->generic_menu_item_restore_volume_image),
-                            show_flags & SHOW_FLAGS_POPUP_MENU_RESTORE_VOLUME_IMAGE);
+                            show_flags->volume_menu & SHOW_FLAGS_VOLUME_MENU_RESTORE_VOLUME_IMAGE);
   gtk_widget_set_sensitive (GTK_WIDGET (window->generic_menu_item_benchmark),
-                            show_flags & SHOW_FLAGS_POPUP_MENU_BENCHMARK);
+                            show_flags->volume_menu & SHOW_FLAGS_VOLUME_MENU_BENCHMARK);
   /* TODO: don't show the button bringing up the popup menu if it has no items */
 }
 
@@ -513,7 +515,7 @@ set_selected_object (GduWindow    *window,
                      UDisksObject *object)
 {
   gboolean ret = FALSE;
-  ShowFlags show_flags;
+  ShowFlags show_flags = {0};
   GtkTreeIter iter;
 
   if (gdu_device_tree_model_get_iter_for_object (window->model, object, &iter))
@@ -538,7 +540,6 @@ set_selected_object (GduWindow    *window,
       goto out;
     }
 
-  show_flags = SHOW_FLAGS_NONE;
   if (object != NULL)
     {
       if (udisks_object_peek_drive (object) != NULL ||
@@ -557,7 +558,7 @@ set_selected_object (GduWindow    *window,
     {
       select_details_page (window, NULL, DETAILS_PAGE_NOT_SELECTED, &show_flags);
     }
-  update_for_show_flags (window, show_flags);
+  update_for_show_flags (window, &show_flags);
  out:
   return ret;
 }
@@ -1644,7 +1645,7 @@ select_details_page (GduWindow      *window,
 static void
 update_all (GduWindow     *window)
 {
-  ShowFlags show_flags;
+  ShowFlags show_flags = {0};
 
   switch (window->current_page)
     {
@@ -1657,9 +1658,8 @@ update_all (GduWindow     *window)
       break;
 
     case DETAILS_PAGE_DEVICE:
-      show_flags = SHOW_FLAGS_NONE;
       update_details_page (window, window->current_page, &show_flags);
-      update_for_show_flags (window, show_flags);
+      update_for_show_flags (window, &show_flags);
       break;
     }
 }
@@ -1907,13 +1907,13 @@ update_device_page_for_mdraid (GduWindow      *window,
   if (block != NULL)
     {
       device_desc = get_device_file_for_display (block);
-      *show_flags |= SHOW_FLAGS_RAID_STOP_BUTTON;
+      show_flags->drive_buttons |= SHOW_FLAGS_DRIVE_BUTTONS_RAID_STOP;
     }
   else
     {
       /* Translators: shown as the device for a RAID array that is not currently running */
       device_desc = g_strdup (C_("mdraid", "Not Running"));
-      *show_flags |= SHOW_FLAGS_RAID_START_BUTTON;
+      show_flags->drive_buttons |= SHOW_FLAGS_DRIVE_BUTTONS_RAID_START;
     }
 
   gtk_image_set_from_gicon (GTK_IMAGE (window->devtab_drive_image), icon, GTK_ICON_SIZE_DIALOG);
@@ -2221,12 +2221,12 @@ update_device_page_for_drive (GduWindow      *window,
                   "devtab-drive-smart-value-label",
                   s, SET_MARKUP_FLAGS_NONE);
       if (smart_is_supported)
-        *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_VIEW_SMART;
+        show_flags->drive_menu |= SHOW_FLAGS_DRIVE_MENU_VIEW_SMART;
       g_free (s);
     }
 
   if (gdu_disk_settings_dialog_should_show (object))
-    *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_DISK_SETTINGS;
+    show_flags->drive_menu |= SHOW_FLAGS_DRIVE_MENU_DISK_SETTINGS;
 
   if (ata != NULL)
     {
@@ -2244,9 +2244,9 @@ update_device_page_for_drive (GduWindow      *window,
                                   -1);
             }
           if (power_state_flags & GDU_POWER_STATE_FLAGS_STANDBY)
-            *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_RESUME_NOW;
+            show_flags->drive_menu |= SHOW_FLAGS_DRIVE_MENU_RESUME_NOW;
           else
-            *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_STANDBY_NOW;
+            show_flags->drive_menu |= SHOW_FLAGS_DRIVE_MENU_STANDBY_NOW;
         }
     }
 
@@ -2303,9 +2303,32 @@ update_device_page_for_drive (GduWindow      *window,
 
   if (udisks_drive_get_ejectable (drive))
     {
-      *show_flags |= SHOW_FLAGS_EJECT_BUTTON;
+      show_flags->drive_buttons |= SHOW_FLAGS_DRIVE_BUTTONS_EJECT;
     }
 
+  /* Show Drive-specific items */
+  gtk_widget_show (GTK_WIDGET (window->generic_drive_menu_item_drive_sep_1));
+  gtk_widget_show (GTK_WIDGET (window->generic_drive_menu_item_view_smart));
+  gtk_widget_show (GTK_WIDGET (window->generic_drive_menu_item_disk_settings));
+  gtk_widget_show (GTK_WIDGET (window->generic_drive_menu_item_drive_sep_2));
+  if (!(show_flags->drive_menu & (SHOW_FLAGS_DRIVE_MENU_STANDBY_NOW|SHOW_FLAGS_DRIVE_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_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->drive_menu & SHOW_FLAGS_DRIVE_MENU_STANDBY_NOW)
+        gtk_widget_show (GTK_WIDGET (window->generic_drive_menu_item_standby_now));
+      else
+        gtk_widget_show (GTK_WIDGET (window->generic_drive_menu_item_resume_now));
+    }
+
+
   g_list_foreach (blocks, (GFunc) g_object_unref, NULL);
   g_list_free (blocks);
   if (media_icon != NULL)
@@ -2389,23 +2412,23 @@ update_device_page_for_block (GduWindow          *window,
   /* TODO: don't show on CD-ROM drives etc. */
   if (udisks_block_get_size (block) > 0 || (drive != NULL && !udisks_drive_get_media_change_detected (drive)))
     {
-      *show_flags |= SHOW_FLAGS_POPUP_MENU_CREATE_VOLUME_IMAGE;
-      *show_flags |= SHOW_FLAGS_POPUP_MENU_BENCHMARK;
-      *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_BENCHMARK;
-      *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_CREATE_DISK_IMAGE;
+      show_flags->volume_menu |= SHOW_FLAGS_VOLUME_MENU_CREATE_VOLUME_IMAGE;
+      show_flags->volume_menu |= SHOW_FLAGS_VOLUME_MENU_BENCHMARK;
+      show_flags->drive_menu |= SHOW_FLAGS_DRIVE_MENU_BENCHMARK;
+      show_flags->drive_menu |= SHOW_FLAGS_DRIVE_MENU_CREATE_DISK_IMAGE;
       if (!read_only)
-        *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_RESTORE_DISK_IMAGE;
+        show_flags->drive_menu |= SHOW_FLAGS_DRIVE_MENU_RESTORE_DISK_IMAGE;
       if (!read_only)
         {
-          *show_flags |= SHOW_FLAGS_POPUP_MENU_RESTORE_VOLUME_IMAGE;
+          show_flags->volume_menu |= SHOW_FLAGS_VOLUME_MENU_RESTORE_VOLUME_IMAGE;
           if (udisks_block_get_hint_partitionable (block))
-            *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_FORMAT_DISK;
-          *show_flags |= SHOW_FLAGS_POPUP_MENU_FORMAT_VOLUME;
+            show_flags->drive_menu |= SHOW_FLAGS_DRIVE_MENU_FORMAT_DISK;
+          show_flags->volume_menu |= SHOW_FLAGS_VOLUME_MENU_FORMAT_VOLUME;
         }
     }
 
   if (partition != NULL && !read_only)
-    *show_flags |= SHOW_FLAGS_PARTITION_DELETE_BUTTON;
+    show_flags->volume_buttons |= SHOW_FLAGS_VOLUME_BUTTONS_PARTITION_DELETE;
 
   /* Since /etc/fstab, /etc/crypttab and so on can reference
    * any device regardless of its content ... we want to show
@@ -2413,19 +2436,19 @@ update_device_page_for_block (GduWindow          *window,
    * if the device matches the configuration....
    */
   if (gdu_utils_has_configuration (block, "fstab", NULL))
-    *show_flags |= SHOW_FLAGS_POPUP_MENU_CONFIGURE_FSTAB;
+    show_flags->volume_menu |= SHOW_FLAGS_VOLUME_MENU_CONFIGURE_FSTAB;
   if (gdu_utils_has_configuration (block, "crypttab", NULL))
-    *show_flags |= SHOW_FLAGS_POPUP_MENU_CONFIGURE_CRYPTTAB;
+    show_flags->volume_menu |= SHOW_FLAGS_VOLUME_MENU_CONFIGURE_CRYPTTAB;
 
   /* if the device has no media and there is no existing configuration, then
    * show CONFIGURE_FSTAB since the user might want to add an entry for e.g.
    * /media/cdrom
    */
   if (udisks_block_get_size (block) == 0 &&
-      !(*show_flags & (SHOW_FLAGS_POPUP_MENU_CONFIGURE_FSTAB |
-                       SHOW_FLAGS_POPUP_MENU_CONFIGURE_CRYPTTAB)))
+      !(show_flags->volume_menu & (SHOW_FLAGS_VOLUME_MENU_CONFIGURE_FSTAB |
+                                   SHOW_FLAGS_VOLUME_MENU_CONFIGURE_CRYPTTAB)))
     {
-      *show_flags |= SHOW_FLAGS_POPUP_MENU_CONFIGURE_FSTAB;
+      show_flags->volume_menu |= SHOW_FLAGS_VOLUME_MENU_CONFIGURE_FSTAB;
     }
 
   //g_debug ("In update_device_page_for_block() - size=%" G_GUINT64_FORMAT " selected=%s",
@@ -2509,12 +2532,12 @@ update_device_page_for_block (GduWindow          *window,
   if (partition != NULL)
     {
       if (!read_only)
-        *show_flags |= SHOW_FLAGS_POPUP_MENU_EDIT_PARTITION;
+        show_flags->volume_menu |= SHOW_FLAGS_VOLUME_MENU_EDIT_PARTITION;
     }
   else
     {
       if (drive != NULL && udisks_drive_get_ejectable (drive))
-        *show_flags |= SHOW_FLAGS_EJECT_BUTTON;
+        show_flags->drive_buttons |= SHOW_FLAGS_DRIVE_BUTTONS_EJECT;
     }
 
   if (filesystem != NULL)
@@ -2554,13 +2577,13 @@ update_device_page_for_block (GduWindow          *window,
       g_free (mount_point);
 
       if (g_strv_length ((gchar **) mount_points) > 0)
-        *show_flags |= SHOW_FLAGS_UNMOUNT_BUTTON;
+        show_flags->volume_buttons |= SHOW_FLAGS_VOLUME_BUTTONS_UNMOUNT;
       else
-        *show_flags |= SHOW_FLAGS_MOUNT_BUTTON;
+        show_flags->volume_buttons |= SHOW_FLAGS_VOLUME_BUTTONS_MOUNT;
 
-      *show_flags |= SHOW_FLAGS_POPUP_MENU_CONFIGURE_FSTAB;
+      show_flags->volume_menu |= SHOW_FLAGS_VOLUME_MENU_CONFIGURE_FSTAB;
       if (!read_only)
-        *show_flags |= SHOW_FLAGS_POPUP_MENU_EDIT_LABEL;
+        show_flags->volume_menu |= SHOW_FLAGS_VOLUME_MENU_EDIT_LABEL;
     }
   else if (g_strcmp0 (udisks_block_get_id_usage (block), "other") == 0 &&
            g_strcmp0 (udisks_block_get_id_type (block), "swap") == 0)
@@ -2572,13 +2595,13 @@ update_device_page_for_block (GduWindow          *window,
         {
           if (udisks_swapspace_get_active (swapspace))
             {
-              *show_flags |= SHOW_FLAGS_DEACTIVATE_SWAP_BUTTON;
+              show_flags->volume_buttons |= SHOW_FLAGS_VOLUME_BUTTONS_DEACTIVATE_SWAP;
               /* Translators: Shown if the swap device is in use next to the "In Use" label */
               str = _("Yes");
             }
           else
             {
-              *show_flags |= SHOW_FLAGS_ACTIVATE_SWAP_BUTTON;
+              show_flags->volume_buttons |= SHOW_FLAGS_VOLUME_BUTTONS_ACTIVATE_SWAP;
               /* Translators: Shown if the swap device is not in use next to the "In Use" label */
               str = _("No");
             }
@@ -2598,13 +2621,13 @@ update_device_page_for_block (GduWindow          *window,
                                                                     g_dbus_object_get_object_path (G_DBUS_OBJECT (object)));
       if (cleartext_device != NULL)
         {
-          *show_flags |= SHOW_FLAGS_ENCRYPTED_LOCK_BUTTON;
+          show_flags->volume_buttons |= SHOW_FLAGS_VOLUME_BUTTONS_ENCRYPTED_LOCK;
           /* Translators: Shown if the encrypted device is unlocked next to the "In Use" label */
           str = _("Yes");
         }
       else
         {
-          *show_flags |= SHOW_FLAGS_ENCRYPTED_UNLOCK_BUTTON;
+          show_flags->volume_buttons |= SHOW_FLAGS_VOLUME_BUTTONS_ENCRYPTED_UNLOCK;
           /* Translators: Shown if the encrypted device is not unlocked next to the "In Use" label */
           str = _("No");
         }
@@ -2614,8 +2637,8 @@ update_device_page_for_block (GduWindow          *window,
                   str,
                   SET_MARKUP_FLAGS_NONE);
 
-      *show_flags |= SHOW_FLAGS_POPUP_MENU_CONFIGURE_CRYPTTAB;
-      *show_flags |= SHOW_FLAGS_POPUP_MENU_CHANGE_PASSPHRASE;
+      show_flags->volume_menu |= SHOW_FLAGS_VOLUME_MENU_CONFIGURE_CRYPTTAB;
+      show_flags->volume_menu |= SHOW_FLAGS_VOLUME_MENU_CHANGE_PASSPHRASE;
     }
 
 
@@ -2697,12 +2720,12 @@ update_device_page_for_free_space (GduWindow          *window,
   read_only = udisks_block_get_read_only (block);
   loop = udisks_object_peek_loop (window->current_object);
 
-  *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_BENCHMARK;
+  show_flags->drive_menu |= SHOW_FLAGS_DRIVE_MENU_BENCHMARK;
   if (!read_only)
     {
-      *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_FORMAT_DISK;
-      *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_CREATE_DISK_IMAGE;
-      *show_flags |= SHOW_FLAGS_DISK_POPUP_MENU_RESTORE_DISK_IMAGE;
+      show_flags->drive_menu |= SHOW_FLAGS_DRIVE_MENU_FORMAT_DISK;
+      show_flags->drive_menu |= SHOW_FLAGS_DRIVE_MENU_CREATE_DISK_IMAGE;
+      show_flags->drive_menu |= SHOW_FLAGS_DRIVE_MENU_RESTORE_DISK_IMAGE;
     }
 
   if (loop != NULL)
@@ -2752,7 +2775,7 @@ update_device_page_for_free_space (GduWindow          *window,
               s,
               SET_MARKUP_FLAGS_NONE);
   if (!read_only)
-    *show_flags |= SHOW_FLAGS_PARTITION_CREATE_BUTTON;
+    show_flags->volume_buttons |= SHOW_FLAGS_VOLUME_BUTTONS_PARTITION_CREATE;
   g_free (s);
 
   s = get_device_file_for_display (block);
@@ -2784,6 +2807,14 @@ update_device_page (GduWindow      *window,
     gtk_action_set_visible (GTK_ACTION (l->data), FALSE);
   g_list_free (children);
 
+  /* Hide all Drive-specific items - will be turned on again in update_device_page_for_drive() */
+  gtk_widget_hide (GTK_WIDGET (window->generic_drive_menu_item_drive_sep_1));
+  gtk_widget_hide (GTK_WIDGET (window->generic_drive_menu_item_view_smart));
+  gtk_widget_hide (GTK_WIDGET (window->generic_drive_menu_item_disk_settings));
+  gtk_widget_hide (GTK_WIDGET (window->generic_drive_menu_item_drive_sep_2));
+  gtk_widget_hide (GTK_WIDGET (window->generic_drive_menu_item_standby_now));
+  gtk_widget_hide (GTK_WIDGET (window->generic_drive_menu_item_resume_now));
+
   /* always show the generic toolbar item */
   gtk_action_set_visible (GTK_ACTION (gtk_builder_get_object (window->builder,
                                                               "devtab-action-generic")), TRUE);
@@ -2795,7 +2826,7 @@ update_device_page (GduWindow      *window,
   mdraid = udisks_object_peek_mdraid (window->current_object);
 
   if (udisks_object_peek_loop (object) != NULL)
-    *show_flags |= SHOW_FLAGS_DETACH_DISK_IMAGE;
+    show_flags->device_tree_buttons |= SHOW_FLAGS_DEVICE_TREE_BUTTON_DETACH_DISK_IMAGE;
 
   if (drive != NULL)
     update_device_page_for_drive (window, object, drive, show_flags);



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