2

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

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

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

4

1 回答 1

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; 但我不想在这里使事情复杂化。)

于 2010-08-14T11:29:51.033 回答