Re: Get column no. of edited cell.



On 06/02/13 14:30, Arnel A. Borja wrote:
On Sunday, 02 June, 2013 03:35 PM, dE wrote:
On 06/02/13 12:49, Arnel A. Borja wrote:
On Sunday, 02 June, 2013 02:15 PM, dE wrote:
I'm trying this out, but isnt this also possible with gtk_tree_view_get_cursor clubbed with gtk_tree_view_column_get_sort_column_id.

Cause I'm getting segfault with --

gtk_tree_view_get_cursor ( detect_object ( "DataDisplay", build_object ), tree_path, focus_column );

Where --

GtkTreeViewColumn **focus_column;
GtkTreePath **tree_path;

This is what the documentation says about the parameters of gtk_tree_view_get_cursor (https://developer.gnome.org/gtk3/stable/GtkTreeView.html#gtk-tree-view-get-cursor):
/|
tree_view|/ : A GtkTreeView
/|path|/ : A pointer to be filled with the current cursor path, orNULL.*[**out**]*[transfer full][allow-none] /|focus_column|/: A pointer to be filled with the current focus column, orNULL.*[**out**]*[transfer full][allow-none]

Noticed the [out] in path and focus column? That means you have to pass the pointers to a (GtkTreeViewColumn *) variable and a (GtkTreePath *) variable, instead of passing a (GtkTreeViewColumn **) variable and a (GtkTreePath **) variable.

You may do something like this then:

GtkTreeViewColumn *focus_column;
GtkTreePath *tree_path;

gtk_tree_view_get_cursor ( detect_object ( "DataDisplay", build_object ), &tree_path, &focus_column );

Now focus_column and tree_path contains the currently focused column and path to its row, respectively.

Yes, now it works. Thanks!

However, it appears that this is not something suitable for the task, since this particular event "edited" (GtkCellRender) is triggered after the editing has finished. As a result, I get -1 with gtk_tree_view_column_get_sort_column_id (focus_column).

So I've tried out your original technique, but I'm having some issues there --

I'm comparing the passed over GtkCellRenderer * with all renderers as such --

    while ( mod_renderer != *(renderer + i) )
        i++;

Where mod_renderer is the passed over GtkCellRenderer and renderer is --

GtkCellRenderer **renderer;

and allocated memory via --

GtkCellRenderer **renderer = g_malloc (sizeof (GtkCellRenderer*) * 2);
    renderer[0] = gtk_cell_renderer_text_new ();
    renderer[1] = gtk_cell_renderer_text_new ();

I'm getting sefault in the while loop.
Your comparing a GtkCellRenderer and a GtkCellRendererText here. Try casting like this:

while (GTK_CELL_RENDERER (mod_renderer) != GTK_CELL_RENDERER (renderer[i]))
    i++;

Or just store them as GtkCellRendererText:

GtkCellRendererText **renderer = g_malloc (sizeof (GtkCellRendererText*) * 2);
renderer[0] = gtk_cell_renderer_text_new ();
renderer[1] = gtk_cell_renderer_text_new ();

But still, this is quite dangerous, since mod_renderer may really not in renderer. You may use if/else blocks:

/* mod_renderer and renderer[i] should be GtkCellRendererText */
if (mod_renderer == renderer[0])
{
    /* renderer[0] edited */
}
else if (mod_renderer == renderer[1])
{
    /* renderer[1] edited */
}

Though usually when I want to do something like this, I would connect to each cell renderer, with each one have their own callback.

Something like this:

renderer1 = gtk_cell_renderer_text_new ();
g_signal_connect (renderer1, "edited", on_renderer1_edited, my_data);

renderer2 = gtk_cell_renderer_text_new ();
g_signal_connect (renderer2, "edited", on_renderer2_edited, my_data);

Then I'll just do what I need to do inside the two callbacks.

You may also want to read this tutorial about GtkTreeView's: http://scentric.net/tutorial/


YES GOT IT!!

It was g_object_get/set_data. Although I did view that tutorial, but not in that much detail.

Thank you so much!!


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