2010-08-14 56 views
1

我使用pygtk,並想處理控制+ c有時做一個特殊的複製操作,但其他時間讓gtk處理它。例如,我想在剪貼板上放置一個對象(如果可用),或者讓control + c以正常方式在文本條目中使用。如何讓gtk控件+ c被處理?

目前我有一個ActionGroup與「c」相關聯,但總是吃擊鍵,即使我返回False。如果我刪除了ActionGroup,它總是在文本區域中工作。如果我添加ActionGroup,它總是處理它,並且複製在文本區域中不起作用。

有什麼正確的方式來控制+ c出現在菜單中,有時處理按鍵,但其他時候,讓它落入文本小部件?

回答

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

(獲取默認文本視圖實際上是通過調用我的應用程序類,這是GtkWindow子類中的方法get_default_view()做。但我不想在這裏的問題複雜化)

+0

謝謝,這很有用。它至少證明我沒有做一些瘋狂的事情。我試圖發出控件+ c的按鍵事件,但沒有任何運氣... – 2010-08-14 14:15:20

+0

你在試圖什麼? PS。如果答案很有用,請隨意點擊向上箭頭;-) – ptomato 2010-08-14 15:36:29