我想抓住用户键在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