[gnome-photos/wip/rishi/collection: 14/14] main-toolbar: ...



commit 590f05f4314884a9ec93238fef083e1eaebc9e24
Author: Debarshi Ray <debarshir gnome org>
Date:   Fri Jan 12 07:52:45 2018 +0100

    main-toolbar: ...

 src/photos-main-toolbar.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 110 insertions(+)
---
diff --git a/src/photos-main-toolbar.c b/src/photos-main-toolbar.c
index 9db15c2c..03386d32 100644
--- a/src/photos-main-toolbar.c
+++ b/src/photos-main-toolbar.c
@@ -30,6 +30,7 @@
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
 
+#include "photos-base-manager.h"
 #include "photos-dlna-renderers-manager.h"
 #include "photos-dropdown.h"
 #include "photos-header-bar.h"
@@ -54,6 +55,7 @@ struct _PhotosMainToolbar
   GtkWidget *searchbar;
   GtkWidget *selection_menu;
   PhotosBaseManager *item_mngr;
+  PhotosBaseManager *src_mngr;
   PhotosModeController *mode_cntrlr;
   PhotosRemoteDisplayManager *remote_mngr;
   PhotosSelectionController *sel_cntrlr;
@@ -176,6 +178,110 @@ photos_main_toolbar_add_back_button (PhotosMainToolbar *self)
 }
 
 
+static GtkWidget *
+photos_main_toolbar_add_devices_button (PhotosMainToolbar *self)
+{
+  GList *sources = NULL;
+  GtkWidget *devices_button = NULL;
+  guint i;
+  guint n_items;
+
+  n_items = g_list_model_get_n_items (G_LIST_MODEL (self->src_mngr));
+  for (i = 0; i < n_items; i++)
+    {
+      GMount *mount;
+      g_autoptr (PhotosSource) source = NULL;
+
+      source = PHOTOS_SOURCE (g_list_model_get_object (G_LIST_MODEL (self->src_mngr), i));
+      mount = photos_source_get_mount (source);
+      if (mount == NULL)
+        continue;
+
+      sources = g_list_prepend (sources, g_object_ref (source));
+    }
+
+  if (sources == NULL)
+    goto out;
+
+  if (sources->next == NULL) /* length == 1 */
+    {
+      GIcon *icon;
+      GtkWidget *grid;
+      GtkWidget *image;
+      GtkWidget *label;
+      PhotosSource *source = PHOTOS_SOURCE (sources->data);
+      const gchar *name;
+
+      devices_button = gtk_button_new ();
+
+      grid = gtk_grid_new ();
+      gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
+      gtk_container_add (GTK_CONTAINER (devices_button), grid);
+
+      icon = photos_source_get_symbolic_icon (source);
+      image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_BUTTON);
+      gtk_widget_set_valign (image, GTK_ALIGN_CENTER);
+      gtk_widget_set_vexpand (image, TRUE);
+      g_object_set (image, "use-fallback", TRUE, NULL);
+      gtk_container_add (GTK_CONTAINER (grid), image);
+
+      name = photos_source_get_name (source);
+      label = gtk_label_new (name);
+      gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+      gtk_widget_set_vexpand (label, TRUE);
+      gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
+      gtk_label_set_max_width_chars (GTK_LABEL (label), 24);
+      gtk_container_add (GTK_CONTAINER (grid), label);
+    }
+  else
+    {
+      GList *l;
+      g_autoptr (GMenu) menu = NULL;
+      GtkWidget *grid;
+      GtkWidget *image;
+      GtkWidget *label;
+
+      menu = g_menu_new ();
+      for (l = sources; l != NULL; l = l->next)
+        {
+          GIcon *icon = NULL;
+          g_autoptr (GMenuItem) menu_item = NULL;
+          PhotosSource *source = PHOTOS_SOURCE (l->data);
+          const gchar *name;
+
+          icon = photos_source_get_symbolic_icon (source);
+
+          name = photos_source_get_name (source);
+          menu_item = g_menu_item_new (name, NULL);
+          g_menu_append_item (menu, menu_item);
+        }
+
+      devices_button = gtk_menu_button_new ();
+      gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (devices_button), G_MENU_MODEL (menu));
+
+      grid = gtk_grid_new ();
+      gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
+      gtk_container_add (GTK_CONTAINER (devices_button), grid);
+
+      label = gtk_label_new (_("Devices"));
+      gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+      gtk_widget_set_vexpand (label, TRUE);
+      gtk_container_add (GTK_CONTAINER (grid), label);
+
+      image = gtk_image_new_from_icon_name ("pan-down-symbolic", GTK_ICON_SIZE_BUTTON);
+      gtk_widget_set_valign (image, GTK_ALIGN_CENTER);
+      gtk_widget_set_vexpand (image, TRUE);
+      gtk_container_add (GTK_CONTAINER (grid), image);
+    }
+
+  gtk_header_bar_pack_start (GTK_HEADER_BAR (self->header_bar), devices_button);
+
+ out:
+  g_list_free_full (sources, g_object_unref);
+  return devices_button;
+}
+
+
 static void
 photos_main_toolbar_remote_display_button_clicked (PhotosMainToolbar *self)
 {
@@ -388,6 +494,7 @@ photos_main_toolbar_populate_for_collections (PhotosMainToolbar *self)
 {
   gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (self->header_bar), TRUE);
   photos_header_bar_set_mode (PHOTOS_HEADER_BAR (self->header_bar), PHOTOS_HEADER_BAR_MODE_NORMAL);
+  photos_main_toolbar_add_devices_button (self);
   photos_main_toolbar_add_selection_button (self);
   photos_main_toolbar_add_search_button (self);
 }
@@ -429,6 +536,7 @@ photos_main_toolbar_populate_for_overview (PhotosMainToolbar *self)
 {
   gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (self->header_bar), TRUE);
   photos_header_bar_set_mode (PHOTOS_HEADER_BAR (self->header_bar), PHOTOS_HEADER_BAR_MODE_NORMAL);
+  photos_main_toolbar_add_devices_button (self);
   photos_main_toolbar_add_selection_button (self);
   photos_main_toolbar_add_search_button (self);
 }
@@ -550,6 +658,7 @@ photos_main_toolbar_dispose (GObject *object)
   g_clear_object (&self->mode_cntrlr);
   g_clear_object (&self->remote_mngr);
   g_clear_object (&self->sel_cntrlr);
+  g_clear_object (&self->src_mngr);
 
   G_OBJECT_CLASS (photos_main_toolbar_parent_class)->dispose (object);
 }
@@ -613,6 +722,7 @@ photos_main_toolbar_init (PhotosMainToolbar *self)
   self->item_mngr = g_object_ref (state->item_mngr);
   self->mode_cntrlr = g_object_ref (state->mode_cntrlr);
   self->sel_cntrlr = photos_selection_controller_dup_singleton ();
+  self->src_mngr = g_object_ref (state->src_mngr);
 
   self->remote_mngr = photos_remote_display_manager_dup_singleton ();
   g_signal_connect_object (self->remote_mngr,


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