我不知道這是否是「正確」的方式,但這裏是我如何做到的。我將應用程序窗口作爲用戶數據參數傳遞給動作回調。然後我找出窗口中關注了哪個小部件,並且如果有意義的話,我將複製命令傳遞給該小部件(即,所關注的小部件是像你說的那樣的文本輸入)。如果這沒有意義,那麼我從窗口的「默認」文本視圖複製。
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);
}
(獲取默認文本視圖實際上是通過調用我的應用程序類,這是GtkWindow
子類中的方法get_default_view()
做。但我不想在這裏的問題複雜化)
謝謝,這很有用。它至少證明我沒有做一些瘋狂的事情。我試圖發出控件+ c的按鍵事件,但沒有任何運氣... – 2010-08-14 14:15:20
你在試圖什麼? PS。如果答案很有用,請隨意點擊向上箭頭;-) – ptomato 2010-08-14 15:36:29