Getting keyboard modifiers state using Gnome libs (GDK) fetches initial state only

后端 未结 2 1703
误落风尘
误落风尘 2020-12-19 20:33

I\'m trying to get the current keyboard modifiers state through gnome GDK or GTK library in aim to implement an accessibility gnome shell extension that shows that state.

2条回答
  •  春和景丽
    2020-12-19 21:30

    • Indeed, I need an event loop as andlabs said in his comment. His suggestion to use GTK gtk_init() & gtk_main() works perfectly.

      /*
       * compiling: gcc `pkg-config --cflags gtk+-3.0` -o gtk_xkbmod3 gtk_xkbmod3.c `pkg-config --libs gtk+-3.0`
       */
      
      #include 
      
      static void update(GdkKeymap * kmap) {
          guint state;
          state = gdk_keymap_get_modifier_state(kmap);
          g_printf("%i\n", state);
      }
      
      int main (int argc, char **argv) {
      
          gtk_init(&argc, &argv);
      
          GdkKeymap * kmap;
          kmap = gdk_keymap_get_default();
      
          g_timeout_add_seconds(1, (GSourceFunc) update, kmap);
      
          gtk_main();
      
      }
      
    • I could also use GDK with GLib GMainLoop.

      /*
       * compiling: gcc `pkg-config --cflags gdk-3.0` -o gdk_xkbmod4 gdk_xkbmod4.c `pkg-config --libs gdk-3.0`
       */
      
      #include 
      
      GMainLoop *mainloop;
      
      static void update(GdkKeymap * kmap) {
          guint state;
          state = gdk_keymap_get_modifier_state(kmap);
          g_printf("%i\n", state);
      }
      
      int main (int argc, char **argv) {    
      
          gdk_init(&argc, &argv);
      
          GdkKeymap * kmap;
          kmap = gdk_keymap_get_default();
      
          g_timeout_add_seconds(1, (GSourceFunc) update, kmap);
      
          mainloop = g_main_loop_new(g_main_context_default(), FALSE);
          g_main_loop_run(mainloop);    
      }
      

    References:

    • Xfce Foundation Classes: The Main Event Loop
    • GTK+ Forums: GDK + GLib main loop

提交回复
热议问题