我正在使用pygtk,并且希望有时候使用control + c来执行特殊的复制操作,但有时候让gtk处理它。例如,我想在剪贴板上放置一个对象(如果可用),或者只是在文本条目中以正常方式使用control + c。
目前我有一个与“c”相关联的ActionGroup,但即使我返回False,它也总是吃掉键击。如果我删除ActionGroup,它总是在文本区域中工作。如果我添加ActionGroup,它总是处理它,并且复制在文本区域中不起作用。
在菜单中出现控制+ c的正确方法是什么,有时处理击键,但有时候,让它落到文本小部件?
答案 0 :(得分: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
的子类;但我不想在这里使问题复杂化。)< / p>