On 08/17/2013 02:49 PM, Daniel P. Berrange wrote:
First, make the image fill out the entire cell (portrait /
landscape), and move the file name to a mouse-over pop-up.
I guess we could make it a mouse over only.
Attached, with help from Daniel, thanks !
Just having a few more pixels in the preview is major IMHO.
Second, having the cells scale with the resize of the browser window itself.
Yep, there has always been a resize bar for the session browser area of the
window and my intention was that the thumbnails would scale as that was
changed.
Likely more tricky :) But here we go...
Best regards,
Jesper
>From 3d83b6a2bb4d77b332fb289bd8adef945489d75c Mon Sep 17 00:00:00 2001
From: Jesper Pedersen <jesper.peder...@comcast.net>
Date: Thu, 22 Aug 2013 15:14:43 -0400
Subject: [PATCH 1/2] Move file name to tooltip
---
src/frontend/entangle-session-browser.c | 99 ++++++++++++++++++++++++---------
1 file changed, 73 insertions(+), 26 deletions(-)
diff --git a/src/frontend/entangle-session-browser.c b/src/frontend/entangle-session-browser.c
index 4e0b88b..f87de0f 100644
--- a/src/frontend/entangle-session-browser.c
+++ b/src/frontend/entangle-session-browser.c
@@ -54,7 +54,6 @@ struct _EntangleSessionBrowserPrivate {
GtkCellAreaContext *cell_area_context;
GtkCellRenderer *pixbuf_cell;
- GtkCellRenderer *text_cell;
gulong sigImageAdded;
gulong sigThumbReady;
@@ -1243,6 +1242,73 @@ entangle_session_browser_button_release(GtkWidget *widget,
return event->button == 1;
}
+
+static void
+entangle_session_browser_convert_widget_to_bin_window_coords(EntangleSessionBrowser *browser,
+ gint wx,
+ gint wy,
+ gint *bx,
+ gint *by)
+{
+ gint x, y;
+
+ g_return_if_fail(ENTANGLE_SESSION_BROWSER(browser));
+
+ if (browser->priv->bin_window)
+ gdk_window_get_position(browser->priv->bin_window, &x, &y);
+ else
+ x = y = 0;
+
+ if (bx)
+ *bx = wx - x;
+ if (by)
+ *by = wy - y;
+}
+
+
+static gboolean
+entangle_session_browser_query_tooltip(GtkWidget *widget,
+ gint x,
+ gint y,
+ gboolean keyboard_mode G_GNUC_UNUSED,
+ GtkTooltip *tooltip,
+ gpointer user_data)
+{
+ g_return_val_if_fail(ENTANGLE_IS_SESSION_BROWSER(widget), FALSE);
+
+ EntangleSessionBrowser *browser = ENTANGLE_SESSION_BROWSER(widget);
+ EntangleSessionBrowserItem *item;
+ GtkCellRenderer *cell = NULL;
+ gint bx = 0;
+ gint by = 0;
+
+ entangle_session_browser_convert_widget_to_bin_window_coords(browser,
+ x, y,
+ &bx, &by);
+
+ item = entangle_session_browser_get_item_at_coords(browser,
+ bx, by,
+ FALSE,
+ &cell);
+
+ if (item != NULL) {
+ GtkTreeModel *model = (GtkTreeModel*)user_data;
+ GtkTreeIter iter = item->iter;
+ gchar *file_name = NULL;
+
+ gtk_tree_model_get(model, &iter, FIELD_NAME, &file_name, -1);
+
+ if (file_name) {
+ gtk_tooltip_set_text(tooltip, file_name);
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+
static gboolean
entangle_session_browser_scroll(GtkWidget *widget,
GdkEventScroll *event)
@@ -1556,7 +1622,6 @@ EntangleSessionBrowser *entangle_session_browser_new(void)
static void entangle_session_browser_init(EntangleSessionBrowser *browser)
{
EntangleSessionBrowserPrivate *priv;
- GdkRGBA fg;
priv = browser->priv = ENTANGLE_SESSION_BROWSER_GET_PRIVATE(browser);
@@ -1594,27 +1659,7 @@ static void entangle_session_browser_init(EntangleSessionBrowser *browser)
"yalign", 1.0,
NULL);
-
- priv->text_cell = gtk_cell_renderer_text_new();
- gtk_cell_layout_pack_end(GTK_CELL_LAYOUT(browser), priv->text_cell, FALSE);
- gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(browser),
- priv->text_cell,
- "text", FIELD_NAME,
- NULL);
-
- fg.red = 1;
- fg.blue = 1;
- fg.green = 1;
- fg.alpha = 1;
-
- g_object_set(priv->text_cell,
- "alignment", PANGO_ALIGN_CENTER,
- "wrap-mode", PANGO_WRAP_WORD_CHAR,
- "xalign", 0.5,
- "yalign", 0.0,
- "foreground-set", TRUE,
- "foreground-rgba", &fg,
- NULL);
+ gtk_widget_set_has_tooltip(GTK_WIDGET(browser), TRUE);
g_signal_connect(priv->model,
"row-changed",
@@ -1633,6 +1678,11 @@ static void entangle_session_browser_init(EntangleSessionBrowser *browser)
G_CALLBACK (entangle_session_browser_rows_reordered),
browser);
+ g_signal_connect(GTK_WIDGET(browser),
+ "query-tooltip",
+ G_CALLBACK (entangle_session_browser_query_tooltip),
+ priv->model);
+
entangle_session_browser_build_items(browser);
entangle_session_browser_queue_layout(browser);
@@ -2013,9 +2063,6 @@ adjust_wrap_width(EntangleSessionBrowser *browser)
wrap_width = MAX(wrap_width * 2, 50);
}
-
- g_object_set(browser->priv->text_cell, "wrap-width", wrap_width, NULL);
- g_object_set(browser->priv->text_cell, "width", wrap_width, NULL);
}
--
1.8.1.4
>From ea55795eb0314200791c24c2ef8eaf1e79561012 Mon Sep 17 00:00:00 2001
From: Jesper Pedersen <jesper.peder...@comcast.net>
Date: Thu, 22 Aug 2013 15:17:06 -0400
Subject: [PATCH 2/2] Remove unused adjust_wrap_width method
---
src/frontend/entangle-session-browser.c | 24 ------------------------
1 file changed, 24 deletions(-)
diff --git a/src/frontend/entangle-session-browser.c b/src/frontend/entangle-session-browser.c
index f87de0f..b8eb596 100644
--- a/src/frontend/entangle-session-browser.c
+++ b/src/frontend/entangle-session-browser.c
@@ -2046,27 +2046,6 @@ entangle_session_browser_layout_row(EntangleSessionBrowser *browser,
static void
-adjust_wrap_width(EntangleSessionBrowser *browser)
-{
- g_return_if_fail(ENTANGLE_IS_SESSION_BROWSER(browser));
-
- gint wrap_width = 50;
-
- /* Here we go with the same old guess, try the icon size and set double
- * the size of the first icon found in the list, naive but works much
- * of the time */
- if (browser->priv->items) {
- entangle_session_browser_set_cell_data(browser, browser->priv->items->data);
- gtk_cell_renderer_get_preferred_width(browser->priv->pixbuf_cell,
- GTK_WIDGET(browser),
- &wrap_width, NULL);
-
- wrap_width = MAX(wrap_width * 2, 50);
- }
-}
-
-
-static void
entangle_session_browser_layout(EntangleSessionBrowser *browser)
{
g_return_if_fail(ENTANGLE_IS_SESSION_BROWSER(browser));
@@ -2083,9 +2062,6 @@ entangle_session_browser_layout(EntangleSessionBrowser *browser)
priv->layout_idle_id = 0;
}
- /* Update the wrap width for the text cell before going and requesting sizes */
- adjust_wrap_width (browser);
-
/* Update the context widths for any invalidated items */
entangle_session_browser_cache_widths(browser);
--
1.8.1.4
_______________________________________________
Entangle-devel mailing list
Entangle-devel@gna.org
https://mail.gna.org/listinfo/entangle-devel