我想抓住用戶鍵在GUI窗口上按下Ctrl + d以退出。我的代碼如下所示:GDK信號,按鍵和關鍵蒙版
static gboolean
callback(GtkWidget *widget,
GdkEventKey *event,
gpointer data)
{
if(event->state == GDK_CONTROL_MASK && event->keyval == 'd')
gtk_main_quit();
return FASLE;
}
這適用於我的筆記本電腦(Ubuntu 11.04,gcc 4.5.2,libgtk 2.24.4)。但是當我在一個較新的系統(Ubuntu 12.10,gcc 4.7.2,libgtk 2.24.13)上做同樣的事情時,它不起作用。
我的if
語句之前加入g_print("%u\n", event->state);
,它表明,當我按下Ctrl
,所述event->state
是20而不是4或1 < < 2的文件中。如果我將GDK_CONTROL_MASK
更改爲20,則它適用於較新的系統,但不適用於舊系統。有人請告訴我爲什麼會發生這種情況,以及如何解決這個問題。
MOD2是許多系統上的數字鎖。所以掩蓋這一點是有道理的。但只檢查是否設置了CONTROL意味着它也會將Ctrl + Alt + D,Ctrl + Shift + D等視爲Ctrl + D,這也不理想。 – Mikel 2017-10-02 21:51:12