[nautilus/wip/csoriano/flow] f



commit 2c283a3d30c2402e052892dce9feb1a7d6180bd9
Author: Carlos Soriano <csoriano gnome org>
Date:   Tue Dec 6 01:03:10 2016 +0100

    f

 src/nautilus-icon-view-item.c |  175 +++++++++++++++++++++++------------------
 src/nautilus-icon-view-item.h |    5 +-
 src/nautilus-icon-view.c      |   59 +++------------
 3 files changed, 113 insertions(+), 126 deletions(-)
---
diff --git a/src/nautilus-icon-view-item.c b/src/nautilus-icon-view-item.c
index 921acba..265b239 100644
--- a/src/nautilus-icon-view-item.c
+++ b/src/nautilus-icon-view-item.c
@@ -1,10 +1,16 @@
 #include "nautilus-icon-view-item.h"
+#include "nautilus-container-max-width.h"
+#include "nautilus-file.h"
+#include "nautilus-thumbnails.h"
 
 struct _NautilusIconViewItem
 {
     GtkFlowBoxChild parent_instance;
-    GtkWidget *item_container;
+    NautilusContainerMaxWidth *item_container;
+    GtkBox *icon;
     guint icon_size;
+    NautilusFile *file;
+    GtkLabel *label;
 };
 
 G_DEFINE_TYPE (NautilusIconViewItem, nautilus_icon_view_item, GTK_TYPE_FLOW_BOX_CHILD)
@@ -17,14 +23,6 @@ enum
     N_PROPS
 };
 
-static GParamSpec *properties [N_PROPS];
-
-NautilusIconViewItem *
-nautilus_icon_view_item_new (void)
-{
-    return g_object_new (NAUTILUS_TYPE_ICON_VIEW_ITEM, NULL);
-}
-
 static void
 nautilus_icon_view_item_finalize (GObject *object)
 {
@@ -91,33 +89,6 @@ nautilus_icon_view_item_set_property (GObject      *object,
     }
 }
 
-static void
-nautilus_icon_view_item_class_init (NautilusIconViewItemClass *klass)
-{
-    GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-    object_class->finalize = nautilus_icon_view_item_finalize;
-    object_class->get_property = nautilus_icon_view_item_get_property;
-    object_class->set_property = nautilus_icon_view_item_set_property;
-
-    g_object_class_install_property (object_class,
-                                     PROP_ICON_SIZE,
-                                     g_param_spec_int ("icon-size",
-                                                       "Icon size",
-                                                       "The size in pixels of the icon",
-                                                       NAUTILUS_CANVAS_ICON_SIZE_SMALL,
-                                                       NAUTILUS_CANVAS_ICON_SIZE_LARGER,
-                                                       NAUTILUS_CANVAS_ICON_SIZE_LARGE,
-                                                       G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_FILE,
-                                     g_param_spec_object ("icon-size",
-                                                          "Icon size",
-                                                          "The size in pixels of the icon",
-                                                          NAUTILUS_TYPE_FILE,
-                                                          G_PARAM_READWRITE));
-}
-
 static GtkWidget *
 create_icon (NautilusIconViewItem *self)
 {
@@ -132,7 +103,7 @@ create_icon (NautilusIconViewItem *self)
             NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS |
             NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM;
 
-    icon_pixbuf = nautilus_file_get_icon_pixbuf (self->file, priv->icon_size,
+    icon_pixbuf = nautilus_file_get_icon_pixbuf (self->file, self->icon_size,
                                                  TRUE, 1, flags);
     icon = gtk_image_new_from_pixbuf (icon_pixbuf);
     gtk_widget_set_hexpand (icon, TRUE);
@@ -143,12 +114,14 @@ create_icon (NautilusIconViewItem *self)
     fixed_height_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
     gtk_widget_set_valign (fixed_height_box, GTK_ALIGN_CENTER);
     gtk_widget_set_halign (fixed_height_box, GTK_ALIGN_CENTER);
-    gtk_widget_set_size_request (fixed_height_box, get_icon_size_for_zoom_level (priv->zoom_level),
-                                 get_icon_size_for_zoom_level (priv->zoom_level));
-
+    gtk_widget_set_size_request (fixed_height_box, self->icon_size, self->icon_size);
 
-    style_context = gtk_widget_get_style_context (fixed_height_box);
-    gtk_style_context_add_class (style_contet, "icon-background");
+    if (nautilus_can_thumbnail (self->file) &&
+        nautilus_file_should_show_thumbnail (self->file))
+    {
+        style_context = gtk_widget_get_style_context (fixed_height_box);
+        gtk_style_context_add_class (style_context, "icon-background");
+    }
 
     gtk_box_pack_start (fixed_height_box, icon, FALSE, FALSE, 0);
 
@@ -160,36 +133,24 @@ create_icon (NautilusIconViewItem *self)
 static void
 update_icon (NautilusIconViewItem *self)
 {
-    GtkWidget *new_icon;
-    GtkWidget *old_icon;
     GtkWidget *box;
-    GtkWidget *label;
-    NautilusFile *file;
-    gint label_nat_size;
-    gint icon_nat_size;
-
-    file = g_object_get_data (flow_box_item, "file");
-    old_icon = g_object_get_data (flow_box_item, "icon");
-    label = g_object_get_data (flow_box_item, "label");
 
     nautilus_container_max_width_set_max_width (NAUTILUS_CONTAINER_MAX_WIDTH (self->item_container),
-                                                get_icon_size_for_zoom_level (priv->zoom_level));
+                                                self->icon_size);
     box = gtk_bin_get_child (GTK_BIN (self->item_container));
-    gtk_container_remove (GTK_CONTAINER (box), old_icon);
-    new_icon = create_icon (self);
-    gtk_box_pack_start (box, new_icon, FALSE, FALSE, 0);
-    g_object_set_data (flow_box_item, "icon", new_icon);
+    if (self->icon)
+    {
+        gtk_container_remove (GTK_CONTAINER (box), self->icon);
+    }
+    self->icon = create_icon (self);
+    gtk_box_pack_start (box, self->icon, FALSE, FALSE, 0);
 }
 
 static void
-nautilus_icon_view_item_init (NautilusIconViewItem *self)
+constructed (NautilusIconViewItem *self)
 {
-    NautilusFile *file = NAUTILUS_FILE (item);
-    GtkFlowBoxChild *child;
     GtkBox *container;
     NautilusContainerMaxWidth *item_container;
-    gint label_nat_size;
-    gint icon_nat_size;
     GtkLabel *label;
     GtkWidget *icon;
     GtkStyleContext *style_context;
@@ -197,10 +158,11 @@ nautilus_icon_view_item_init (NautilusIconViewItem *self)
     container = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
     self->item_container = nautilus_container_max_width_new ();
 
-    icon = create_icon (self);
-    gtk_box_pack_start (container, icon, FALSE, FALSE, 0);
+    g_print ("file %s\n", nautilus_file_get_uri (self->file));
+    self->icon = create_icon (self);
+    gtk_box_pack_start (container, self->icon, FALSE, FALSE, 0);
 
-    label = gtk_label_new (nautilus_file_get_display_name (file));
+    label = gtk_label_new (nautilus_file_get_display_name (self->file));
     gtk_label_set_ellipsize (label, PANGO_ELLIPSIZE_END);
     gtk_label_set_line_wrap (label, TRUE);
     gtk_label_set_line_wrap_mode (label, PANGO_WRAP_WORD_CHAR);
@@ -218,16 +180,54 @@ nautilus_icon_view_item_init (NautilusIconViewItem *self)
 
     gtk_container_add (self->item_container, container);
     nautilus_container_max_width_set_max_width (NAUTILUS_CONTAINER_MAX_WIDTH (self->item_container),
-                                                get_icon_size_for_zoom_level (priv->zoom_level));
+                                                self->icon_size);
+
+    gtk_container_add (GTK_CONTAINER (self), self->item_container);
+    gtk_widget_show_all (self);
+}
+
+static void
+nautilus_icon_view_item_init (NautilusIconViewItem *self)
+{
+}
 
-    child = gtk_flow_box_child_new ();
-    gtk_container_add (child, self->item_container);
 
-    g_object_set_data (child, "file", file);
-    g_object_set_data (child, "icon", icon);
-    g_object_set_data (child, "label", label);
+static void
+nautilus_icon_view_item_class_init (NautilusIconViewItemClass *klass)
+{
+    GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+    object_class->finalize = nautilus_icon_view_item_finalize;
+    object_class->get_property = nautilus_icon_view_item_get_property;
+    object_class->set_property = nautilus_icon_view_item_set_property;
+    object_class->constructed = constructed;
+
+    g_object_class_install_property (object_class,
+                                     PROP_ICON_SIZE,
+                                     g_param_spec_int ("icon-size",
+                                                       "Icon size",
+                                                       "The size in pixels of the icon",
+                                                       NAUTILUS_CANVAS_ICON_SIZE_SMALL,
+                                                       NAUTILUS_CANVAS_ICON_SIZE_LARGER,
+                                                       NAUTILUS_CANVAS_ICON_SIZE_LARGE,
+                                                       G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+    g_object_class_install_property (object_class,
+                                     PROP_FILE,
+                                     g_param_spec_object ("file",
+                                                          "File",
+                                                          "The file the icon item represents",
+                                                          NAUTILUS_TYPE_FILE,
+                                                          G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+}
 
-    gtk_widget_show_all (child);
+NautilusIconViewItem *
+nautilus_icon_view_item_new (NautilusFile *file,
+                             guint         icon_size)
+{
+    return g_object_new (NAUTILUS_TYPE_ICON_VIEW_ITEM,
+                         "file", file,
+                         "icon-size", icon_size,
+                         NULL);
 }
 
 void
@@ -236,8 +236,20 @@ nautilus_icon_view_item_set_icon_size (NautilusIconViewItem *self,
 {
   g_return_if_fail (NAUTILUS_IS_ICON_VIEW_ITEM (self));
 
-  priv->icon_size = icon_size;
-  update_icon (self);
+  self->icon_size = icon_size;
+
+  if (self->icon)
+  {
+    update_icon (self);
+  }
+}
+
+NautilusFile *
+nautilus_icon_view_item_get_file (NautilusIconViewItem *self)
+{
+    g_return_if_fail (NAUTILUS_IS_ICON_VIEW_ITEM (self));
+
+    return self->file;
 }
 
 void
@@ -245,7 +257,18 @@ nautilus_icon_view_item_set_file (NautilusIconViewItem *self,
                                   NautilusFile         *file)
 {
   g_return_if_fail (NAUTILUS_IS_ICON_VIEW_ITEM (self));
-
-  g_clear_object (self->file);
+  g_print ("file HERE!!!!!");
+  g_clear_object (&self->file);
   self->file = g_object_ref (file);
+
+  if (self->icon)
+  {
+    update_icon (self);
+  }
+
+  if (self->label)
+  {
+      gtk_label_set_text (self->label,
+                          nautilus_file_get_display_name (file));
+  }
 }
diff --git a/src/nautilus-icon-view-item.h b/src/nautilus-icon-view-item.h
index a33c1f5..88bfa53 100644
--- a/src/nautilus-icon-view-item.h
+++ b/src/nautilus-icon-view-item.h
@@ -12,7 +12,8 @@ G_BEGIN_DECLS
 
 G_DECLARE_FINAL_TYPE (NautilusIconViewItem, nautilus_icon_view_item, NAUTILUS, ICON_VIEW_ITEM, 
GtkFlowBoxChild)
 
-NautilusIconViewItem *nautilus_icon_view_item_new (void);
+NautilusIconViewItem * nautilus_icon_view_item_new (NautilusFile *file,
+                                                    guint         icon_size);
 
 void nautilus_icon_view_item_set_icon_size (NautilusIconViewItem *item,
                                             guint                 icon_size);
@@ -20,6 +21,8 @@ void nautilus_icon_view_item_set_icon_size (NautilusIconViewItem *item,
 void nautilus_icon_view_item_set_file (NautilusIconViewItem *item,
                                        NautilusFile         *file);
 
+NautilusFile * nautilus_icon_view_item_get_file (NautilusIconViewItem *item);
+
 G_END_DECLS
 
 #endif /* NAUTILUS_ICON_VIEW_ITEM_H */
diff --git a/src/nautilus-icon-view.c b/src/nautilus-icon-view.c
index 41ef305..9edc604 100644
--- a/src/nautilus-icon-view.c
+++ b/src/nautilus-icon-view.c
@@ -17,17 +17,15 @@
  */
 
 #include <config.h>
+#include <glib.h>
 
 #include "nautilus-icon-view.h"
+#include "nautilus-icon-view-item.h"
 #include "nautilus-files-view.h"
 #include "nautilus-file.h"
 #include "nautilus-directory.h"
 #include "nautilus-global-preferences.h"
 
-#include "nautilus-container-max-width.h"
-
-#include <glib.h>
-
 typedef struct
 {
     GtkWidget *flow_box;
@@ -214,8 +212,8 @@ set_icon_size (NautilusIconView *self,
 
     for (l = items; l; l = l->next)
     {
-        item = GTK_WIDGET (l->data);
-        nautilus_icon_view_item_set_icon_size (self, get_icon_size_for_zoom_level (priv->zoom_level));
+        item = NAUTILUS_ICON_VIEW_ITEM (l->data);
+        nautilus_icon_view_item_set_icon_size (item, get_icon_size_for_zoom_level (priv->zoom_level));
     }
 }
 
@@ -402,51 +400,14 @@ create_widget_func (gpointer item,
     NautilusIconView *self = NAUTILUS_ICON_VIEW (user_data);
     NautilusFile *file = NAUTILUS_FILE (item);
     NautilusIconViewPrivate *priv = nautilus_icon_view_get_instance_private (self);
-    GtkFlowBoxChild *child;
-    GtkBox *container;
-    NautilusContainerMaxWidth *item_container;
-    gint label_nat_size;
-    gint icon_nat_size;
-    GtkLabel *label;
-    GtkWidget *icon;
-    GtkStyleContext *style_context;
-
-    container = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
-    item_container = nautilus_container_max_width_new ();
-
-    icon = create_icon (self, file);
-    gtk_box_pack_start (container, icon, FALSE, FALSE, 0);
-
-    label = gtk_label_new (nautilus_file_get_display_name (file));
-    gtk_label_set_ellipsize (label, PANGO_ELLIPSIZE_END);
-    gtk_label_set_line_wrap (label, TRUE);
-    gtk_label_set_line_wrap_mode (label, PANGO_WRAP_WORD_CHAR);
-    gtk_label_set_lines (label, 4);
-    gtk_label_set_justify (label, GTK_JUSTIFY_CENTER);
-    gtk_widget_set_valign (GTK_WIDGET (label), GTK_ALIGN_START);
-    gtk_box_pack_end (container, label, TRUE, TRUE, 0);
-
-    style_context = gtk_widget_get_style_context (container);
-    gtk_style_context_add_class (style_context, "icon-item-background");
-
-    gtk_widget_show_all (container);
-    gtk_widget_set_valign (container, GTK_ALIGN_START);
-    gtk_widget_set_halign (container, GTK_ALIGN_CENTER);
-
-    gtk_container_add (item_container, container);
-    nautilus_container_max_width_set_max_width (NAUTILUS_CONTAINER_MAX_WIDTH (item_container),
-                                                get_icon_size_for_zoom_level (priv->zoom_level));
-
-    child = gtk_flow_box_child_new ();
-    gtk_container_add (child, item_container);
-
-    g_object_set_data (child, "file", file);
-    g_object_set_data (child, "icon", icon);
-    g_object_set_data (child, "label", label);
+    NautilusIconViewItem *child;
 
+    g_print ("is it a file? %s\n", nautilus_file_get_uri (file));
+    child = nautilus_icon_view_item_new (file,
+                                         get_icon_size_for_zoom_level (priv->zoom_level));
     gtk_widget_show_all (child);
 
-    return child;
+    return GTK_WIDGET (child);
 }
 
 static void
@@ -459,7 +420,7 @@ on_child_activated (GtkFlowBox      *flow_box,
     NautilusFile *file;
     g_autoptr (GList) list = NULL;
 
-    file = g_object_get_data (G_OBJECT (child), "file");
+    file = nautilus_icon_view_item_get_file (child);
     list = g_list_append (list, file);
 
     nautilus_files_view_activate_files (NAUTILUS_FILES_VIEW (self), list, 0, TRUE);


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