在GtkTreeView中单击鼠标右键时的上下文菜单(仅适用于指定列)

在GtkTreeView中单击鼠标右键时的上下文菜单(仅适用于指定列),gtk,Gtk,如果在GtkTreeView的行中单击鼠标右键,我想显示一个弹出菜单。 只有在第一列(或特定列)中“右键单击”时,弹出菜单才可能显示 我使用了代码,但这是整行的种子菜单 gboolean on_tree_view_button_pressed(GtkWidget *treeview, GdkEventButton *event, gpointer data) { if (event->type == GDK_BUTTON_PRESS && event->bu

如果在GtkTreeView的行中单击鼠标右键,我想显示一个弹出菜单。 只有在第一列(或特定列)中“右键单击”时,弹出菜单才可能显示

我使用了代码,但这是整行的种子菜单

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;
}

我有3列的GtkTreeView,我只想显示第一列的菜单

您已经在位置调用了
gtk\u tree\u view\u get\u path\u。此函数还可以在鼠标下获取treeview列。不要为
参数传递NULL,请确保获取该列并将其与所需列进行比较:

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;
}