/ / Menus contextuels sur clic droit dans GtkTreeView (uniquement pour la colonne spécifiée) - gtk

Menus contextuels sur clic droit dans GtkTreeView (uniquement pour la colonne spécifiée) - gtk

Je veux afficher un menu contextuel si "clic droit" dans une ligne de GtkTreeView. Il est possible que le menu contextuel n'apparaisse que si "clic droit" dans la première colonne (ou la colonne spécifique)?

J'ai utiliser le code mais ce menu semé pour toute la ligne.

gboolean
on_tree_view_button_pressed(GtkWidget *treeview, GdkEventButton *event, gpointer data)
{

if (event->type == GDK_BUTTON_PRESS && event->button == 3) {
GtkTreePath *path;

selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(treeview),
event->x, event->y,
&path, NULL, NULL, NULL)) {
gtk_tree_selection_unselect_all(selection);
gtk_tree_selection_select_path(selection, path);
gtk_tree_path_free(path);
}

do_popup_menu(treeview, event, data);

return TRUE;
}

return FALSE;
}

J'ai GtkTreeView avec 3 colonnes et je veux afficher le menu uniquement pour la première colonne

Réponses:

1 pour la réponse № 1

Vous appelez déjà gtk_tree_view_get_path_at_pos. Cette fonction peut également obtenir la colonne de l'arborescence sous la souris. Au lieu de passer NULL pour le column argument, assurez-vous d’obtenir la colonne et comparez-la à la colonne de votre choix:

if (event->type == GDK_BUTTON_PRESS && event->button == 3) {
GtkTreePath *path;
GtkTreeViewColumn *column;

selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(treeview),
event->x, event->y,
&path, &column, NULL, NULL))
// if we can"t find path at pos, we surely don"t
// want to pop up the menu
return FALSE;

if (column != gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), 0)) {
// wrong column, don"t bother
gtk_tree_path_free(path);
return FALSE;
}

gtk_tree_selection_unselect_all(selection);
gtk_tree_selection_select_path(selection, path);
gtk_tree_path_free(path);

do_popup_menu(treeview, event, data);

return TRUE;
}