[nautilus] usability: Change tooltip for view_toggle_button



commit a700db42bb4afbd0b6f9ff7ee016ea728301b56f
Author: Ujjwal Kumar <ujjwalkumar0501 gmail com>
Date:   Mon Mar 9 02:37:02 2020 +0530

    usability: Change tooltip for view_toggle_button
    
    Currently, the tooltip says 'Toggle view', which isn't clear.
    
    Usability testers had difficulty finding out how to change between
    list and grid view.
    
    Change tooltip to say 'Show list' or 'Show grid', depending on which
    view it can change to.
    
    Fixes: https://gitlab.gnome.org/GNOME/nautilus/issues/893

 src/nautilus-toolbar.c     | 29 +++++++++++++++++++++++
 src/nautilus-view.c        | 30 ++++++++++++++++++++++++
 src/nautilus-view.h        |  2 ++
 src/nautilus-window-slot.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++
 src/nautilus-window-slot.h |  2 ++
 5 files changed, 120 insertions(+)
---
diff --git a/src/nautilus-toolbar.c b/src/nautilus-toolbar.c
index 4ecb5ff6a..53acc9ddc 100644
--- a/src/nautilus-toolbar.c
+++ b/src/nautilus-toolbar.c
@@ -114,6 +114,7 @@ struct _NautilusToolbar
     NautilusWindowSlot *window_slot;
     GBinding *icon_binding;
     GBinding *search_binding;
+    GBinding *tooltip_binding;
 };
 
 enum
@@ -1379,6 +1380,26 @@ nautilus_toolbar_view_toggle_icon_transform_to (GBinding     *binding,
     return TRUE;
 }
 
+static gboolean
+nautilus_toolbar_view_toggle_tooltip_transform_to (GBinding     *binding,
+                                                   const GValue *from_value,
+                                                   GValue       *to_value,
+                                                   gpointer      user_data)
+{
+    const gchar *tooltip;
+
+    tooltip = g_value_get_string (from_value);
+
+    /* As per design decision, we let the previous used tooltip if no
+     * view menu is available */
+    if (tooltip)
+    {
+        g_value_set_string (to_value, tooltip);
+    }
+
+    return TRUE;
+}
+
 /* Called from on_window_slot_destroyed(), since bindings and signal handlers
  * are automatically removed once the slot goes away.
  */
@@ -1404,6 +1425,14 @@ nautilus_toolbar_set_window_slot_real (NautilusToolbar    *self,
                                                           self,
                                                           NULL);
 
+        self->tooltip_binding = g_object_bind_property_full (self->window_slot, "tooltip",
+                                                             self->view_toggle_button, "tooltip-text",
+                                                             G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE,
+                                                             (GBindingTransformFunc) 
nautilus_toolbar_view_toggle_tooltip_transform_to,
+                                                             NULL,
+                                                             self,
+                                                             NULL);
+
         self->search_binding = g_object_bind_property (self->window_slot, "searching",
                                                        self, "searching",
                                                        G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
diff --git a/src/nautilus-view.c b/src/nautilus-view.c
index b4c6bc347..3efeeca05 100644
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -19,6 +19,7 @@
 #include "config.h"
 
 #include "nautilus-view.h"
+#include <glib/gi18n.h>
 
 G_DEFINE_INTERFACE (NautilusView, nautilus_view, GTK_TYPE_WIDGET)
 
@@ -137,6 +138,35 @@ nautilus_view_get_icon (guint view_id)
     }
 }
 
+/**
+ * nautilus_view_get_tooltip:
+ * @view: a #NautilusView
+ *
+ * Retrieves the static string that represents @view.
+ *
+ * Returns: (transfer none): a static string
+ */
+const gchar *
+nautilus_view_get_tooltip (guint view_id)
+{
+    if (view_id == NAUTILUS_VIEW_GRID_ID)
+    {
+        return _("Show grid");
+    }
+    else if (view_id == NAUTILUS_VIEW_LIST_ID)
+    {
+        return _("Show list");
+    }
+    else if (view_id == NAUTILUS_VIEW_OTHER_LOCATIONS_ID)
+    {
+        return _("Show List");
+    }
+    else
+    {
+        return NULL;
+    }
+}
+
 /**
  * nautilus_view_get_view_id:
  * @view: a #NautilusView
diff --git a/src/nautilus-view.h b/src/nautilus-view.h
index b54889e68..deeb4bb3e 100644
--- a/src/nautilus-view.h
+++ b/src/nautilus-view.h
@@ -88,6 +88,8 @@ struct _NautilusViewInterface
 
 GIcon *                        nautilus_view_get_icon                  (guint                 view_id);
 
+const gchar *                        nautilus_view_get_tooltip               (guint                 view_id);
+
 guint                          nautilus_view_get_view_id               (NautilusView         *view);
 
 NautilusToolbarMenuSections *  nautilus_view_get_toolbar_menu_sections (NautilusView         *view);
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index f716e94f6..ffb69b684 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -60,6 +60,7 @@ enum
     PROP_SEARCHING,
     PROP_SELECTION,
     PROP_LOCATION,
+    PROP_TOOLTIP,
     NUM_PROPERTIES
 };
 
@@ -947,6 +948,12 @@ nautilus_window_slot_get_property (GObject    *object,
         }
         break;
 
+        case PROP_TOOLTIP:
+        {
+            g_value_set_static_string (value, nautilus_window_slot_get_tooltip (self));
+        }
+        break;
+
         default:
         {
             G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -3049,6 +3056,7 @@ nautilus_window_slot_switch_new_content_view (NautilusWindowSlot *self)
         g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TOOLBAR_MENU_SECTIONS]);
         g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_EXTENSIONS_BACKGROUND_MENU]);
         g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TEMPLATES_MENU]);
+        g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TOOLTIP]);
     }
 
 done:
@@ -3267,6 +3275,13 @@ nautilus_window_slot_class_init (NautilusWindowSlotClass *klass)
                              G_TYPE_FILE,
                              G_PARAM_READWRITE);
 
+    properties[PROP_TOOLTIP] =
+        g_param_spec_string ("tooltip",
+                             "Tooltip that represents the slot",
+                             "The tooltip that represents the slot",
+                             NULL,
+                             G_PARAM_READWRITE);
+
     g_object_class_install_properties (oclass, NUM_PROPERTIES, properties);
 }
 
@@ -3565,6 +3580,48 @@ nautilus_window_slot_get_icon (NautilusWindowSlot *self)
     }
 }
 
+const gchar *
+nautilus_window_slot_get_tooltip (NautilusWindowSlot *self)
+{
+    guint current_view_id;
+    NautilusWindowSlotPrivate *priv;
+
+    g_return_val_if_fail (NAUTILUS_IS_WINDOW_SLOT (self), NULL);
+
+    priv = nautilus_window_slot_get_instance_private (self);
+    if (priv->content_view == NULL)
+    {
+        return NULL;
+    }
+
+    current_view_id = nautilus_view_get_view_id (NAUTILUS_VIEW (priv->content_view));
+    switch (current_view_id)
+    {
+        case NAUTILUS_VIEW_LIST_ID:
+        {
+            return nautilus_view_get_tooltip (NAUTILUS_VIEW_GRID_ID);
+        }
+        break;
+
+        case NAUTILUS_VIEW_GRID_ID:
+        {
+            return nautilus_view_get_tooltip (NAUTILUS_VIEW_LIST_ID);
+        }
+        break;
+
+        case NAUTILUS_VIEW_OTHER_LOCATIONS_ID:
+        {
+            return nautilus_view_get_tooltip (NAUTILUS_VIEW_OTHER_LOCATIONS_ID);
+        }
+        break;
+
+        default:
+        {
+            return NULL;
+        }
+    }
+}
+
 NautilusToolbarMenuSections *
 nautilus_window_slot_get_toolbar_menu_sections (NautilusWindowSlot *self)
 {
diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h
index 04f7e5439..daa2f335a 100644
--- a/src/nautilus-window-slot.h
+++ b/src/nautilus-window-slot.h
@@ -99,6 +99,8 @@ void    nautilus_window_slot_queue_reload                (NautilusWindowSlot *slot);
 
 GIcon*   nautilus_window_slot_get_icon                     (NautilusWindowSlot *slot);
 
+const gchar*   nautilus_window_slot_get_tooltip                  (NautilusWindowSlot *slot);
+
 NautilusToolbarMenuSections * nautilus_window_slot_get_toolbar_menu_sections (NautilusWindowSlot *slot);
 
 GMenuModel* nautilus_window_slot_get_templates_menu (NautilusWindowSlot *self);


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