c - 如何处理或不处理 gtk control+c?

标签 c gtk controls keystroke

我正在使用 pygtk,并且有时想处理 control+c 来执行特殊的复制操作,但其他时候则让 gtk 处理它。例如,如果对象可用,我想将其放在剪贴板上,或者让 control+c 在文本条目中以正常方式使用。

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

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

最佳答案

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

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

(获取默认 TextView 实际上是通过在我的应用程序类上调用 get_default_view() 方法来完成的,它是 GtkWindow 的子类;但我没有想把事情复杂化。)

关于c - 如何处理或不处理 gtk control+c?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3482570/

相关文章:

c - 如何在 Ubuntu 中使用 Code::Blocks 解决 C 中的 Segmentation fault(core dumped) 错误?

c - 'C' 程序中的段错误

c++ - 小部件不在 Gtk 窗口内

gtk - 是否可以在网页中嵌入 Gtk gui?

c# - 向 WinForm 缓慢添加许多标签

c - 我的 C 程序出现段错误错误

c - GTK 段错误

c# - 如何检测窗体上的所有控件使用了多少内存?

c# - TreeView 控件问题

c read() 管道保持空闲