GtkCellRendererToggle toggles when clicking on other cell renderers in same column



Hi, I am working on a C++ GTK project. I have a GtkTreeView containing
several columns. In the first column, I have packed in 3 cell
renderers - the first, a GtkCellRendererToggle; the second, a
GtkCellRendererPixbuf; the third, a GtkCellRendererText. Everything
works fine, except that clicking on the text in the
GtkCellRendererText causes the 'toggled' event to fire on the
GtkCellRendererToggle. This is no good in this particular case. Is
there any way, besides keeping track of where the mouse pointer is, to
determine whether the user clicked on the checkbox itself or another
cell renderer in the same column? Thanks in advance for any ideas.

Here is my code for adding the columns:




enum pkgPropDependencies_columns
{
PKG_PROP_DEPENDENCIES_COLUMN_CHECKMARK,
PKG_PROP_DEPENDENCIES_COLUMN_CHECKMARK_ENABLED,
PKG_PROP_DEPENDENCIES_COLUMN_ICON,
PKG_PROP_DEPENDENCIES_COLUMN_REQ,
PKG_PROP_DEPENDENCIES_COLUMN_PKG_INDEX,
PKG_PROP_DEPENDENCIES_COLUMN_DEP_ADDRESS,
PKG_PROP_DEPENDENCIES_COLUMN_TREE_POINT_INDEX,
PKG_PROP_DEPENDENCIES_COLUMN_DEP_LEVEL,
PKG_PROP_DEPENDENCIES_COLUMN_VERSION
};

...

void pkgPropDependencies_addColumns()
{
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;

/*first column - checkmark, icon & name of package + required version*/
column=gtk_tree_view_column_new();
gtk_tree_view_column_set_title(column, "Requirement");

renderer=gtk_cell_renderer_toggle_new();
g_signal_connect(renderer, "toggled",
G_CALLBACK(on_pkgPropDependencies_column0_toggled), NULL);
gtk_tree_view_column_pack_start(column, renderer, false);
gtk_tree_view_column_add_attribute(column, renderer, "active",
PKG_PROP_DEPENDENCIES_COLUMN_CHECKMARK);
gtk_tree_view_column_add_attribute(column, renderer, "activatable",
PKG_PROP_DEPENDENCIES_COLUMN_CHECKMARK_ENABLED);

renderer=gtk_cell_renderer_pixbuf_new();
gtk_tree_view_column_pack_start(column, renderer, false);
gtk_tree_view_column_add_attribute(column, renderer, "pixbuf",
PKG_PROP_DEPENDENCIES_COLUMN_ICON);

renderer=gtk_cell_renderer_text_new();
g_object_set(renderer, "mode", GTK_CELL_RENDERER_MODE_INERT, NULL);
gtk_tree_view_column_pack_start(column, renderer, true);
gtk_tree_view_column_add_attribute(column, renderer, "text",
PKG_PROP_DEPENDENCIES_COLUMN_REQ);

gtk_tree_view_append_column(pkgPropDependencies, column);

/*second column - index of package (invisible)*/
column=gtk_tree_view_column_new();
gtk_tree_view_column_set_title(column, "Package Index");

renderer=gtk_cell_renderer_text_new();
gtk_tree_view_column_pack_start(column, renderer, true);
gtk_tree_view_column_add_attribute(column, renderer, "text",
PKG_PROP_DEPENDENCIES_COLUMN_PKG_INDEX);
column->visible=false;
gtk_tree_view_append_column(pkgPropDependencies, column);

/*third column - address of dependency (invisible)*/
column=gtk_tree_view_column_new();
gtk_tree_view_column_set_title(column, "Dependency Address");

renderer=gtk_cell_renderer_text_new();
gtk_tree_view_column_pack_start(column, renderer, true);
gtk_tree_view_column_add_attribute(column, renderer, "text",
PKG_PROP_DEPENDENCIES_COLUMN_DEP_ADDRESS);
column->visible=false;
gtk_tree_view_append_column(pkgPropDependencies, column);

/*fourth column - tree point index (invisible)*/
column=gtk_tree_view_column_new();
gtk_tree_view_column_set_title(column, "Tree Point Index");

renderer=gtk_cell_renderer_text_new();
gtk_tree_view_column_pack_start(column, renderer, true);
gtk_tree_view_column_add_attribute(column, renderer, "text",
PKG_PROP_DEPENDENCIES_COLUMN_TREE_POINT_INDEX);
column->visible=false;
gtk_tree_view_append_column(pkgPropDependencies, column);

/*fifth column - level of dependency*/
renderer=gtk_cell_renderer_text_new();
column=gtk_tree_view_column_new_with_attributes("Dependence Level",
renderer, "text", PKG_PROP_DEPENDENCIES_COLUMN_DEP_LEVEL, NULL);
gtk_tree_view_append_column(pkgPropDependencies, column);

/*sixth column - name of package used to fulfill requirement, if one is needed*/
renderer=gtk_cell_renderer_combo_new();
pkgPropDependencies_depVersionComboModel=GTK_TREE_MODEL(gtk_list_store_new(1,
G_TYPE_STRING));
g_object_set(GTK_CELL_RENDERER_COMBO(renderer),
"model", pkgPropDependencies_depVersionComboModel,
"has-entry", false,
"text-column", 0,
"editable", true, NULL);
g_signal_connect(renderer, "edited",
G_CALLBACK(on_pkgPropDependencies_depVersionCombo_changed), NULL);
column=gtk_tree_view_column_new_with_attributes("Version to Be
Installed", renderer, "text", PKG_PROP_DEPENDENCIES_COLUMN_VERSION,
NULL);
gtk_tree_view_append_column(pkgPropDependencies, column);
}

--
Grumpy Buffalo



-- 
Grumpy Buffalo



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