在GtkTreeView中右键单击上下文菜单(仅限指定列) [英] Context Menus on Right Click in GtkTreeView (only for specified column)

查看:441
本文介绍了在GtkTreeView中右键单击上下文菜单(仅限指定列)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想显示一个弹出式菜单,如果从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 (选择);
gtk_tree_selection_select_path(选择,路径);
gtk_tree_path_free(path);
}

do_popup_menu(treeview,event,data);

返回TRUE;
}

返回FALSE;



$ b我有GtkTreeView有3列,列

解决方案

您已经在调用 gtk_tree_view_get_path_at_pos 。这个函数也可以获得鼠标下的treeview列。而不是为参数传递NULL,请确保获取列并将其与您想要的列进行比较:

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

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))
//如果我们在pos处找不到路径,我们当然不会
//想弹出菜单
return FALSE;

if(column!= gtk_tree_view_get_column(GTK_TREE_VIEW(treeview),0)){
//错列,不要麻烦
gtk_tree_path_free(path);
返回FALSE;
}

gtk_tree_selection_unselect_all(选择);
gtk_tree_selection_select_path(选择,路径);
gtk_tree_path_free(path);

do_popup_menu(treeview,event,data);

返回TRUE;
}


I want to show a popup menu if 'right click' in a row from GtkTreeView. It is possible that the popup menu shows up only if 'right click' in first column (or specificate column)?

I have use code but this sown up menu for entire row.

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

I have GtkTreeView with 3 columns and I want to show up menu only for first column

解决方案

You are already calling gtk_tree_view_get_path_at_pos. This function can also obtain the treeview column under the mouse. Instead of passing NULL for the column argument, make sure to get the column and compare it to your desired column:

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

这篇关于在GtkTreeView中右键单击上下文菜单(仅限指定列)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆