[gtk+] placesview: show Disconnect instead of Eject



commit e548c7139496067dca2757124963e62ce115b4d1
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Mon Aug 10 15:35:56 2015 -0300

    placesview: show Disconnect instead of Eject
    
    Since we're dealing with networks, terms like "Eject" or
    the eject button are misleading, since we're not actually
    ejecting but disconnecting.
    
    Fix that by showing the appropriate icon and tooltip.

 gtk/gtkplacesview.c           |    8 +++++-
 gtk/gtkplacesviewrow.c        |   43 +++++++++++++++++++++++++++++++++++++++++
 gtk/gtkplacesviewrowprivate.h |    5 ++++
 gtk/ui/gtkplacesviewrow.ui    |    2 +-
 4 files changed, 55 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkplacesview.c b/gtk/gtkplacesview.c
index ca02fe0..3721be7 100644
--- a/gtk/gtkplacesview.c
+++ b/gtk/gtkplacesview.c
@@ -701,6 +701,7 @@ add_volume (GtkPlacesView *view,
                           "volume", volume,
                           "mount", mount,
                           "file", NULL,
+                          "is-network", is_network,
                           NULL);
 
       insert_row (view, row, is_network);
@@ -748,6 +749,7 @@ add_mount (GtkPlacesView *view,
                           "volume", NULL,
                           "mount", mount,
                           "file", NULL,
+                          "is-network", is_network,
                           NULL);
 
       insert_row (view, row, is_network);
@@ -1314,10 +1316,12 @@ build_popup_menu (GtkPlacesView    *view,
   GtkWidget *item;
   GMount *mount;
   GFile *file;
+  gboolean is_network;
 
   priv = gtk_places_view_get_instance_private (view);
   mount = gtk_places_view_row_get_mount (row);
   file = gtk_places_view_row_get_file (row);
+  is_network = gtk_places_view_row_get_is_network (row);
 
   priv->popup_menu = gtk_menu_new ();
   gtk_style_context_add_class (gtk_widget_get_style_context (priv->popup_menu),
@@ -1373,7 +1377,7 @@ build_popup_menu (GtkPlacesView    *view,
   /* Mount/Unmount items */
   if (mount)
     {
-      item = gtk_menu_item_new_with_mnemonic (_("_Unmount"));
+      item = gtk_menu_item_new_with_mnemonic (is_network ? P_("_Disconnect") : P_("_Unmount"));
       g_signal_connect (item,
                         "activate",
                         G_CALLBACK (unmount_cb),
@@ -1383,7 +1387,7 @@ build_popup_menu (GtkPlacesView    *view,
     }
   else
     {
-      item = gtk_menu_item_new_with_mnemonic (_("_Mount"));
+      item = gtk_menu_item_new_with_mnemonic (is_network ? P_("_Connect") : P_("_Mount"));
       g_signal_connect (item,
                         "activate",
                         G_CALLBACK (mount_cb),
diff --git a/gtk/gtkplacesviewrow.c b/gtk/gtkplacesviewrow.c
index 641399f..3e66398 100644
--- a/gtk/gtkplacesviewrow.c
+++ b/gtk/gtkplacesviewrow.c
@@ -31,6 +31,7 @@ struct _GtkPlacesViewRow
 
   GtkSpinner    *busy_spinner;
   GtkButton     *eject_button;
+  GtkImage      *eject_icon;
   GtkEventBox   *event_box;
   GtkImage      *icon_image;
   GtkLabel      *name_label;
@@ -39,6 +40,8 @@ struct _GtkPlacesViewRow
   GVolume       *volume;
   GMount        *mount;
   GFile         *file;
+
+  gint           is_network : 1;
 };
 
 G_DEFINE_TYPE (GtkPlacesViewRow, gtk_places_view_row, GTK_TYPE_LIST_BOX_ROW)
@@ -51,6 +54,7 @@ enum {
   PROP_VOLUME,
   PROP_MOUNT,
   PROP_FILE,
+  PROP_IS_NETWORK,
   LAST_PROP
 };
 
@@ -107,6 +111,10 @@ gtk_places_view_row_get_property (GObject    *object,
       g_value_set_object (value, self->file);
       break;
 
+    case PROP_IS_NETWORK:
+      g_value_set_boolean (value, self->is_network);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -149,6 +157,10 @@ gtk_places_view_row_set_property (GObject      *object,
       g_set_object (&self->file, g_value_get_object (value));
       break;
 
+    case PROP_IS_NETWORK:
+      gtk_places_view_row_set_is_network (self, g_value_get_boolean (value));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -206,12 +218,20 @@ gtk_places_view_row_class_init (GtkPlacesViewRowClass *klass)
                                G_TYPE_FILE,
                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
 
+  properties[PROP_IS_NETWORK] =
+          g_param_spec_boolean ("is-network",
+                                P_("Whether the row represents a network location"),
+                                P_("Whether the row represents a network location"),
+                                FALSE,
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+
   g_object_class_install_properties (object_class, LAST_PROP, properties);
 
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/ui/gtkplacesviewrow.ui");
 
   gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, busy_spinner);
   gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, eject_button);
+  gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, eject_icon);
   gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, event_box);
   gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, icon_image);
   gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, name_label);
@@ -282,3 +302,26 @@ gtk_places_view_row_set_busy (GtkPlacesViewRow *row,
 
   gtk_widget_set_visible (GTK_WIDGET (row->busy_spinner), is_busy);
 }
+
+gboolean
+gtk_places_view_row_get_is_network (GtkPlacesViewRow *row)
+{
+  g_return_val_if_fail (GTK_IS_PLACES_VIEW_ROW (row), FALSE);
+
+  return row->is_network;
+}
+
+void
+gtk_places_view_row_set_is_network (GtkPlacesViewRow *row,
+                                    gboolean          is_network)
+{
+  if (row->is_network != is_network)
+    {
+      row->is_network = is_network;
+
+      gtk_image_set_from_icon_name (row->eject_icon,
+                                    is_network ? "network-offline-symbolic" : "media-eject-symbolic",
+                                    GTK_ICON_SIZE_BUTTON);
+      gtk_widget_set_tooltip_text (GTK_WIDGET (row->eject_button), is_network ? P_("Disconnect") : 
P_("Unmount"));
+    }
+}
diff --git a/gtk/gtkplacesviewrowprivate.h b/gtk/gtkplacesviewrowprivate.h
index 20add04..3c46d5d 100644
--- a/gtk/gtkplacesviewrowprivate.h
+++ b/gtk/gtkplacesviewrowprivate.h
@@ -48,6 +48,11 @@ GFile*             gtk_places_view_row_get_file                  (GtkPlacesViewR
 void               gtk_places_view_row_set_busy                  (GtkPlacesViewRow   *row,
                                                                   gboolean            is_busy);
 
+gboolean           gtk_places_view_row_get_is_network            (GtkPlacesViewRow   *row);
+
+void               gtk_places_view_row_set_is_network            (GtkPlacesViewRow   *row,
+                                                                  gboolean            is_network);
+
 G_END_DECLS
 
 #endif /* GTK_PLACES_VIEW_ROW_H */
diff --git a/gtk/ui/gtkplacesviewrow.ui b/gtk/ui/gtkplacesviewrow.ui
index c46079b..d1e923b 100644
--- a/gtk/ui/gtkplacesviewrow.ui
+++ b/gtk/ui/gtkplacesviewrow.ui
@@ -72,7 +72,7 @@
                 <property name="valign">center</property>
                 <property name="tooltip-text" translatable="yes">Unmount</property>
                 <child>
-                  <object class="GtkImage">
+                  <object class="GtkImage" id="eject_icon">
                     <property name="visible">True</property>
                     <property name="icon_name">media-eject-symbolic</property>
                     <property name="icon_size">1</property>


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