Re: Tooltips only work on top half of a GtkTreeView



Ian

Many thanks for the suggestion.  I swapped the functions round and found that it worked for every row when the list was not scrolled horizontally. However, when I did scroll to the right, the tooltip x-axis alignment did not correspond to the columns. In fact it appeared to approximately double the effect of moving to the right and halfway through the horizontal scroll, it was out of range.

The list is packed as...  GtkScrolledWindow->GtkTreeView

Any ideas?

Nigel

On 2 May 2011, at 14:10, Ian Liu Rodrigues wrote:

I guess the function to transform the X, Y coordinates is wrong. Try changing

gtk_tree_view_convert_bin_window_to_tree_coords to gtk_tree_view_convert_widget_to_bin_window_coords

Ian L.

On Fri, Apr 29, 2011 at 12:08 PM, Nigel Stuckey <nigel stuckey systemgarden com> wrote:
I'm about to launch a Gtk2/3 version of a data collector/viewer and performance monitor, a port from a Gtk1 app made a number of years ago.

I've got a number of problems outstanding with the GUI part that I would like some help with and possibly some advice with some horrid code!

My first problem: I have tooltips in a tabular view of data, contained in a GtkTreeView with a GtkListStore as model, which can grow to be quite big. Unfortunately, the tooltips are only successfully produced in the top half of the GtkTreeView. The lower half doesn't work -- the effect being proportional to the size of the list rather than an absolute numeric limit.

The code is:-

    /* get the tooltip details */
    if (!gtk_tree_view_get_tooltip_context (tree_view, &x, &y,
                                            keyboard_tip,
                                            &model, &path, &iter))
         return FALSE;

    /* find time data and the row number (path) */
    gtk_tree_model_get (model, &iter, uitable_timecol, &samptime, -1);
    pathstring = gtk_tree_path_to_string (path);

    /* find the column tooltip - if keyboard_tip==FALSE, then (x,y) are
     * converted to bin_window coords; else treat as a widget coords.
     * We want tree coords. */
    if (keyboard_tip)
         gtk_tree_view_convert_widget_to_tree_coords(tree_view, x, y,
                                                     &treex, &treey);
    else
         gtk_tree_view_convert_bin_window_to_tree_coords(tree_view, x, y,
                                                         &treex, &treey);

    /* get the column, so I can get the title and the tip */
    if (gtk_tree_view_get_path_at_pos(tree_view, treex, treey, NULL,
                                      &column, NULL, NULL)) {

         /* valid row, compose tooltip string in tip (snip, snip) */

         g_object_get (column->button, "tooltip-text", &tip, NULL); /* A */
    } else {
         g_snprintf (buffer, 511, "Row does not exist (path %s)", pathstring); /* B */
    }

Following the call to gtk_tree_view_get_path_at_pos(), the first set of rows runs code path A and I get the tooltip I want, the bottom half runs B and I report an error.

Can anyone help shed some light on this?

Many thanks

Nigel

_______________________________________________
gtk-list mailing list
gtk-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-list


--
Nigel Stuckey
System Garden Ltd
+44 (0)7710 439986
+44 (0)20 7100 6627







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