[gnome-photos/wip/rishi/collection: 16/17] main-toolbar: ...
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos/wip/rishi/collection: 16/17] main-toolbar: ...
- Date: Fri, 12 Jan 2018 16:24:51 +0000 (UTC)
commit 58073074efca99b8893fb41106059f66e977528c
Author: Debarshi Ray <debarshir gnome org>
Date: Fri Jan 12 07:52:45 2018 +0100
main-toolbar: ...
https://bugzilla.gnome.org/show_bug.cgi?id=751212
src/photos-main-toolbar.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 122 insertions(+)
---
diff --git a/src/photos-main-toolbar.c b/src/photos-main-toolbar.c
index 9db15c2c..1ac6dd05 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,122 @@ 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;
+ GtkWidget *grid;
+ GtkWidget *image;
+ GtkWidget *label;
+ GtkWidget *popover;
+
+ popover = gtk_popover_new (NULL);
+ for (l = sources; l != NULL; l = l->next)
+ {
+ GIcon *icon;
+ PhotosSource *source = PHOTOS_SOURCE (l->data);
+ const gchar *name;
+
+ 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);
+ }
+
+ devices_button = gtk_menu_button_new ();
+ gtk_menu_button_set_popover (GTK_MENU_BUTTON (devices_button), popover));
+
+ 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 +506,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 +548,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 +670,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 +734,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]