c - 长按键 GTK

标签 c linux windows gtk cross-platform

<分区>

不久前,我遇到了长按键问题。我正在开发 GTK 应用程序并具有一些基于按键和按键释放的逻辑。我知道如何处理它,但按下字母按钮时出现意外行为。当仍然按下某个键并且仅在 Windows 中发生时,将触发键释放事件。 Linux(Kubuntu 和 Arch linux (KDE))不会发生这种情况。这是错误还是我应该考虑应用程序逻辑的行为?

这里是代码

#include <gtk/gtk.h>

int release_count = 0;

static gboolean 
key_event_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
{
  printf("Key released %d\n", release_count);
  ++release_count;
  return FALSE;
}

static void
activate(GtkApplication* app, gpointer user_data)
{
  GtkWidget *window;

  window = gtk_application_window_new(app);
  gtk_window_set_title(GTK_WINDOW(window), "Window");
  gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
  gtk_widget_add_events(window, GDK_KEY_RELEASE_MASK | GDK_KEY_PRESS_MASK);
  g_signal_connect(
    window, "key-release-event", G_CALLBACK(key_event_cb), NULL
  ); //keyboard events
  gtk_widget_show_all(window);
}

int
main(int argc, char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
  status = g_application_run(G_APPLICATION(app), argc, argv);
  g_object_unref(app);

  return status;
}

如果您启动代码并按 h,您会收到一条消息,如 key pressed {counter} 有一些延迟。 那么,这是按键释放事件的正常行为吗?如果不是,请告诉我如何解决。

最佳答案

发生这种情况是因为我在 VirtualBox 下运行我的程序。如果该程序作为主机系统在 Windows 上启动,则该程序可以正常工作。

关于c - 长按键 GTK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51041142/

相关文章:

python - 使用 Python 将 Excel 中的图表导出为图像

linux - 是否可以设置 GitLab Linux 服务器并在 Windows PC 上工作?

c - 在 Linux 中的 C 中添加全局键绑定(bind)?

linux - 如何重启后台php进程? (如何获取pid)

linux - RAW CAN 套接字和广播管理器 CAN 套接字之间有什么区别以及如何使用它们?

windows - 将 ASP 经典页面从 Windows 转移到 Linux

无法在c程序中创建文本文件

c++ - 使用 boost 将 ffmpeg 输出通过管道传输到 ffplay 标准输入

无法在 C 中编译 Windows Socket

linux - 如何查看Makefile中包含的文件? (Linux)