【问题标题】:How to have gtk control+c to be handled, or not?如何处理或不处理 gtk control+c?
【发布时间】:2010-08-14 08:18:16
【问题描述】:

我正在使用 pygtk,有时想处理 control+c 来执行特殊的复制操作,但有时让 gtk 处理它。例如,我想在剪贴板上放置一个可用的对象,或者只是让 control+c 在文本条目中以正常方式使用。

目前我有一个与“c”关联的 ActionGroup,但它总是吃掉击键,即使我返回 False。如果我删除 ActionGroup,它总是在文本区域中工作。如果我添加 ActionGroup,它总是会处理它,并且复制在文本区域中不起作用。

control+c 出现在菜单中的正确方式是什么,有时处理击键,但有时让它落到文本小部件上?

【问题讨论】:

    标签: c gtk controls keystroke


    【解决方案1】:

    我不知道这是否是“正确”的方式,但这是我的做法。我将应用程序窗口作为用户数据参数传递给操作回调。然后我找出窗口中聚焦的小部件,如果有意义的话,我将复制命令传递给该小部件(即,聚焦的小部件是你说的文本条目)。如果这没有意义,那么我从窗口的“默认”文本视图中复制。

    void
    action_copy(GtkAction *action, gpointer user_data)
    {
        GtkWidget *widget = gtk_window_get_focus(GTK_WINDOW(user_data));
    
        /* What actually happens depends on the type of widget that is focused */
        if(WEBKIT_IS_WEB_VIEW(widget))
            webkit_web_view_copy_clipboard(WEBKIT_WEB_VIEW(widget));
        else if((GTK_IS_LABEL(widget) && gtk_label_get_selectable(GTK_LABEL(widget)))
            || GTK_IS_ENTRY(widget) || GTK_IS_TEXT_VIEW(widget))
            g_signal_emit_by_name(widget, "copy-clipboard", NULL);
        else
            g_signal_emit_by_name(/* ...default text view... */, "copy-clipboard", NULL);
    }
    

    (获取默认文本视图实际上是通过在我的应用程序类上调用get_default_view() 方法完成的,它是GtkWindow 的子类;但我不想在这里使事情复杂化。)

    【讨论】:

    • 谢谢,这很有用。它至少证实了我没有做一些疯狂的事情。我正在尝试为 control+c 发出按键事件,但还没有运气...
    • 你在尝试什么? PS。如果答案有用,请随意点击向上箭头 ;-)
    猜你喜欢
    • 2013-10-17
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    相关资源
    最近更新 更多