RE: gtk_tree_view_scroll_to_cell scrolls to the wrong cell.



This was with GTK+-2.0.6 on Redhat 7.3.  With the code in my last message,
the list repeatedly scrolls to somewhere between row 50 and 100.  I don't
know what it could be if you don't see the same behaviour on your system.
arrg.  I've been fighting this for months.  My application looks
ridiculous--the lists are jumping all over the place.

-----Original Message-----
From: Harring Figueiredo [mailto:harringf yahoo com]
Sent: Wednesday, October 09, 2002 5:56 PM
To: Erik Simonsen; gtk-app-devel-list gnome org
Subject: Re: gtk_tree_view_scroll_to_cell scrolls to the wrong cell.



 Erik,

 What is a high number ?

 I tried:

  i=0;
while (i < 10000) {

    gchar *rowname = g_strdup_printf("Row %i", i);
    gtk_tree_store_append (store, &iter, NULL);
    gtk_tree_store_set (store, &iter, TITLE_COL, rowname,  -1);
    i++;
}
scroll( tree, "Row 1999");

  And could not duplicate the behaviour you describe.

Have you upgraded to the latest ?

HArring.





--- Erik Simonsen <erik pinksheets com> wrote:

This is not the first time I've posted this question to the list, and and
much as I hate send it out again, I just have to.  I haven't heard any
responses and this problem is so critical and obvious in my app that I
really need some help.  This time I've attached some compilable code to
make
it easier to show the problem.

First, I populate a GtkTreeStore with a some rows.  Then, I iterate
through
the store, looking for an arbitrary row.  When it finds it, it scrolls to
and selects it.  It works like a charm for low-numbered rows.  For
high-numbered rows the correct row is selected, but then scroll doesn't
work
correctly.

The strange thing is that when you run the program, you see the treeview
scroll to the correct row.  It then pauses there for a while and then
scrolls back down to some random row.

I'll list the code below for those who don't want to deal with
attachments.

Thanks in advance!

--------------------------------------------------------------------------
--
----------------

#include <gtk/gtk.h>
#include <stdio.h>
#include <string.h>


enum {
      TITLE_COL,
      NUM_COLUMNS
};

gint delete_event( GtkWidget *widget,
                    GdkEvent  *event,
                    gpointer   data )
{
    gtk_main_quit ();
    return TRUE;
}


void
scroll(GtkWidget * tree, char * searchtext) {

   GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(tree));
   GtkTreeIter iter;
   gboolean valid;
   char *rowtext;

   valid = gtk_tree_model_get_iter_first (store, &iter);

   while (valid) {

       gtk_tree_model_get (store, &iter, TITLE_COL, &rowtext, -1);
       if (rowtext) {
            if (strcmp (rowtext, searchtext) == 0) {
                   GtkTreePath *treepath = gtk_tree_model_get_path (store,
&iter);
                   gtk_tree_view_set_cursor (GTK_TREE_VIEW(tree),
treepath,
NULL, FALSE);
                   gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW(tree),
treepath, 0, TRUE, 0.3, 0);
                   gtk_tree_path_free(treepath);
                   return;
            }
       }
        valid = gtk_tree_model_iter_next(store, &iter);
   }
}


int main( int   argc, char *argv[] )
{

GtkWidget *window;
GtkTreeStore *store;

GtkTreeSelection *select;

GtkCellRenderer *text_renderer;
GtkCellRenderer *pixbuf_renderer;
GtkTreeViewColumn *column;

GdkPixbuf *buf;
int i = 1;

GtkWidget *tree;
gtk_init (&argc, &argv);

/*Set up the toplevel window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
GtkWidget * tree_scroll;
gtk_window_set_title (GTK_WINDOW (window), "scroll_to!");
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK (delete_event), NULL);


/*Set up the scrolled window */
tree_scroll = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_ref (tree_scroll);
gtk_container_add (GTK_CONTAINER (window), tree_scroll);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (tree_scroll),
        GTK_POLICY_NEVER, GTK_POLICY_NEVER);


/*make and populate the tree store*/
store = gtk_tree_store_new (NUM_COLUMNS,  G_TYPE_STRING);
GtkTreeIter iter;

/*define the treeview*/
tree = gtk_tree_view_new_with_model( GTK_TREE_MODEL (store));
select = gtk_tree_view_get_selection (GTK_TREE_VIEW(tree));
gtk_tree_selection_set_mode (select, GTK_SELECTION_MULTIPLE);

text_renderer = gtk_cell_renderer_text_new();

column = gtk_tree_view_column_new();

gtk_tree_view_column_pack_end(column, text_renderer, TRUE);

gtk_tree_view_column_add_attribute (column, text_renderer, "text",
TITLE_COL);

gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE);
gtk_container_add (GTK_CONTAINER (tree_scroll), tree);
gtk_widget_set_size_request (tree, 100, 300);

gtk_widget_show(tree);
gtk_widget_show (tree_scroll);
gtk_widget_show (window);

i=0;
while (i < 150) {

    gchar *rowname = g_strdup_printf("Row %i", i);
    gtk_tree_store_append (store, &iter, NULL);
    gtk_tree_store_set (store, &iter, TITLE_COL, rowname,  -1);
    i++;
}
scroll( tree, "Row 95");

gtk_main ();

return 0;
}


ATTACHMENT part 2 application/octet-stream name=scroll.c



__________________________________________________
Do you Yahoo!?
Faith Hill - Exclusive Performances, Videos & More
http://faith.yahoo.com




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