【问题标题】:GTK3: How can I disable default widget activation?GTK3:如何禁用默认小部件激活?
【发布时间】:2023-01-24 06:26:53
【问题描述】:

这是一个示例 GTK# 程序,它侦听按键并打印它们。

using Gtk;
using Application = Gtk.Application;

Application.Init();

Window win = new Window("Title");
win.DeleteEvent += (_, eventArgs) => Application.Quit();
win.KeyPressEvent += (_, eventArgs) =>
{
    Console.WriteLine($"Key down {eventArgs.Event.Key}");
};
win.KeyReleaseEvent += (_, eventArgs) =>
{
    Console.WriteLine($"Key up   {eventArgs.Event.Key}");
};

win.Show();

Application.Run();

我希望看到进入按键,但我没有。相反,它们被映射以激活窗口的默认小部件。我可以禁用此功能以便进入按键也被按键侦听器捕获?

【问题讨论】:

  • 您是否尝试过将 KeyPressEvent 掩码添加到窗口? IE。事件 |= Gdk.EventMask.KeyPressMask?

标签: gtk3 gtk#


【解决方案1】:

GTK 带有一组默认键绑定,由GtkBindingSet(C 名称)维护。在 C 中,一个人基本上会这样做:

GtkBindingSet* binding_set = gtk_binding_set_by_class(GTK_TYPE_WINDOW);
// For each keybinding that needs removal...
gtk_binding_entry_remove(binding_set, /* GdkKey */ key, /*GdkModifierType*/ modifiers);

我为这两个函数编写了 C# 绑定,然后使用它们删除了以下键绑定:

  • 空间
  • KP_空间
  • 返回
  • ISO_Enter
  • KP_Enter
  • Ctrl+Shift+I
  • Ctrl+Shift+D
  • 箭头键(和键盘箭头),带 Ctrl 和不带
  • Tab(和 KP_tab),带 Ctrl、Shift 或 Ctrl+Shift

这些都是 GTK 的默认键绑定。可能有更强大的方法来做到这一点,但我没有费心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多