首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GDK信号、按键和按键掩码

GDK信号、按键和按键掩码
EN

Stack Overflow用户
提问于 2013-04-26 06:51:33
回答 1查看 2K关注 0票数 1

我正在尝试捕捉用户在图形用户界面窗口上按Ctrl+d退出。我的代码如下所示:

代码语言:javascript
复制
static gboolean
callback(GtkWidget   *widget,
         GdkEventKey *event,
         gpointer    data)
{
    if(event->state == GDK_CONTROL_MASK && event->keyval == 'd')
        gtk_main_quit();

    return FASLE;
}

这适用于我的笔记本电脑(Ubuntu11.04,gcc 4.5.2,libgtk2.24.4)。但当我在较新的系统(Ubuntu12.10,gcc 4.7.2,libgtk2.24.13)上做同样的事情时,它不能工作。

我在if语句之前添加了g_print("%u\n", event->state);,它显示当我按Ctrl时,event->state是20,而不是文档中的4或1 << 2。如果我将GDK_CONTROL_MASK更改为20,它将在较新的系统上工作,但在旧系统上不起作用。请告诉我为什么会发生这种情况,以及如何修复它。

EN

回答 1

Stack Overflow用户

发布于 2017-10-04 01:52:42

这是因为state还包括像大写锁定和数字锁定这样的修改器。

该解决方案在https://developer.gnome.org/gtk3/stable/checklist-modifiers.html上提供了文档

使用gtk_accelerator_get_default_mod_mask()获取修改器的位图,这些修改器也是快捷键(Control、Alt、Shift、Super、Hyper和Meta),然后按位和事件状态,例如:

代码语言:javascript
复制
GdkModifierType accel_mask = gtk_accelerator_get_default_mod_mask ();

if (event->state & accel_mask == GDK_CONTROL_MASK && event->keyval == 'd')
    ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16226043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档