summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorinfirit <[email protected]>2014-07-28 12:45:17 +0200
committerinfirit <[email protected]>2014-07-28 13:02:14 +0200
commit8d2169d463ad00cf3e8ef74ec35b1651ea1dd634 (patch)
tree9d4596fcf102b981ff9bd03d1a2e58f6d37f3678
parent581e50c143d12fcce9de7e548a355a1efcb49c2c (diff)
downloadeom-8d2169d463ad00cf3e8ef74ec35b1651ea1dd634.tar.bz2
eom-8d2169d463ad00cf3e8ef74ec35b1651ea1dd634.tar.xz
Workaround GtkIconView breakage
By moving initialization code to the constructed() method. See Eog #639139. https://bugzilla.gnome.org/show_bug.cgi?id=639139 Based on eog commit 0b98b8cc1903142112dd67ecde6a914583087da5 From Claudio Saavedra <[email protected]>
-rw-r--r--src/eom-thumb-view.c137
1 files changed, 86 insertions, 51 deletions
diff --git a/src/eom-thumb-view.c b/src/eom-thumb-view.c
index eac2922..0c35382 100644
--- a/src/eom-thumb-view.c
+++ b/src/eom-thumb-view.c
@@ -51,6 +51,30 @@ static EomImage* eom_thumb_view_get_image_from_path (EomThumbView *thumbvie
static void eom_thumb_view_popup_menu (EomThumbView *widget,
GdkEventButton *event);
+static gboolean
+thumbview_on_query_tooltip_cb (GtkWidget *widget,
+ gint x,
+ gint y,
+ gboolean keyboard_mode,
+ GtkTooltip *tooltip,
+ gpointer user_data);
+static void
+thumbview_on_parent_set_cb (GtkWidget *widget,
+#if GTK_CHECK_VERSION (3, 0, 0)
+ GtkWidget *old_parent,
+#else
+ GtkObject *oldparent,
+#endif
+ gpointer user_data);
+
+static void
+thumbview_on_drag_data_get_cb (GtkWidget *widget,
+ GdkDragContext *drag_context,
+ GtkSelectionData *data,
+ guint info,
+ guint time,
+ gpointer user_data);
+
struct _EomThumbViewPrivate {
gint start_thumb; /* the first visible thumbnail */
gint end_thumb; /* the last visible thumbnail */
@@ -61,6 +85,67 @@ struct _EomThumbViewPrivate {
/* Drag 'n Drop */
static void
+eom_thumb_view_constructed (GObject *object)
+{
+ EomThumbView *thumbview;
+
+ if (G_OBJECT_CLASS (eom_thumb_view_parent_class)->constructed)
+ G_OBJECT_CLASS (eom_thumb_view_parent_class)->constructed (object);
+
+ thumbview = EOM_THUMB_VIEW (object);
+
+ thumbview->priv->pixbuf_cell = gtk_cell_renderer_pixbuf_new ();
+
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (thumbview),
+ thumbview->priv->pixbuf_cell,
+ FALSE);
+
+ g_object_set (thumbview->priv->pixbuf_cell,
+ "follow-state", FALSE,
+ "height", 100,
+ "width", 115,
+ "yalign", 0.5,
+ "xalign", 0.5,
+ NULL);
+
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (thumbview),
+ thumbview->priv->pixbuf_cell,
+ "pixbuf", EOM_LIST_STORE_THUMBNAIL,
+ NULL);
+
+ gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (thumbview),
+ GTK_SELECTION_MULTIPLE);
+
+ gtk_icon_view_set_column_spacing (GTK_ICON_VIEW (thumbview),
+ EOM_THUMB_VIEW_SPACING);
+
+ gtk_icon_view_set_row_spacing (GTK_ICON_VIEW (thumbview),
+ EOM_THUMB_VIEW_SPACING);
+
+ g_object_set (thumbview, "has-tooltip", TRUE, NULL);
+
+ g_signal_connect (thumbview,
+ "query-tooltip",
+ G_CALLBACK (thumbview_on_query_tooltip_cb),
+ NULL);
+
+ thumbview->priv->start_thumb = 0;
+ thumbview->priv->end_thumb = 0;
+ thumbview->priv->menu = NULL;
+
+ g_signal_connect (G_OBJECT (thumbview), "parent-set",
+ G_CALLBACK (thumbview_on_parent_set_cb), NULL);
+
+ gtk_icon_view_enable_model_drag_source (GTK_ICON_VIEW (thumbview), 0,
+ NULL, 0,
+ GDK_ACTION_COPY);
+ gtk_drag_source_add_uri_targets (GTK_WIDGET (thumbview));
+
+ g_signal_connect (G_OBJECT (thumbview), "drag-data-get",
+ G_CALLBACK (thumbview_on_drag_data_get_cb), NULL);
+}
+
+static void
eom_thumb_view_finalize (GObject *object)
{
EomThumbView *thumbview;
@@ -97,7 +182,7 @@ eom_thumb_view_class_init (EomThumbViewClass *class)
#else
GtkObjectClass *object_class = GTK_OBJECT_CLASS (class);
#endif
-
+ gobject_class->constructed = eom_thumb_view_constructed;
gobject_class->finalize = eom_thumb_view_finalize;
#if GTK_CHECK_VERSION(3, 0, 0)
widget_class->destroy = eom_thumb_view_destroy;
@@ -519,56 +604,6 @@ static void
eom_thumb_view_init (EomThumbView *thumbview)
{
thumbview->priv = EOM_THUMB_VIEW_GET_PRIVATE (thumbview);
-
- thumbview->priv->pixbuf_cell = gtk_cell_renderer_pixbuf_new ();
-
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (thumbview),
- thumbview->priv->pixbuf_cell,
- FALSE);
-
- g_object_set (thumbview->priv->pixbuf_cell,
- "follow-state", FALSE,
- "height", 100,
- "width", 115,
- "yalign", 0.5,
- "xalign", 0.5,
- NULL);
-
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (thumbview),
- thumbview->priv->pixbuf_cell,
- "pixbuf", EOM_LIST_STORE_THUMBNAIL,
- NULL);
-
- gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (thumbview),
- GTK_SELECTION_MULTIPLE);
-
- gtk_icon_view_set_column_spacing (GTK_ICON_VIEW (thumbview),
- EOM_THUMB_VIEW_SPACING);
-
- gtk_icon_view_set_row_spacing (GTK_ICON_VIEW (thumbview),
- EOM_THUMB_VIEW_SPACING);
-
- g_object_set (thumbview, "has-tooltip", TRUE, NULL);
-
- g_signal_connect (thumbview,
- "query-tooltip",
- G_CALLBACK (thumbview_on_query_tooltip_cb),
- NULL);
-
- thumbview->priv->start_thumb = 0;
- thumbview->priv->end_thumb = 0;
- thumbview->priv->menu = NULL;
-
- g_signal_connect (G_OBJECT (thumbview), "parent-set",
- G_CALLBACK (thumbview_on_parent_set_cb), NULL);
-
- gtk_icon_view_enable_model_drag_source (GTK_ICON_VIEW (thumbview), 0,
- NULL, 0,
- GDK_ACTION_COPY);
- gtk_drag_source_add_uri_targets (GTK_WIDGET (thumbview));
-
- g_signal_connect (G_OBJECT (thumbview), "drag-data-get",
- G_CALLBACK (thumbview_on_drag_data_get_cb), NULL);
}
/**