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 № 1Vous 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;
}