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

Reply via email to