Search code examples
cgtk3keyboard-events

How do I handle keyboard events in GTK+3?


What signals/functions should I use to get keyboard input in GTK+3?

I have looked around and the only tutorials I know of that cover GTK+3 (zetcode and gnome developer) don't seem to cover that.

Anyone can point me in the right direction?


Solution

  • I will summarize here how to handle keyboard events in GTK3, which I hope will be useful since I cannot find it put together anywhere else.

    Imagine you are using GTK+3 and you want your application to do something when you press the space key. This is how you do it:

    • First enable the #GDK_KEY_PRESS_MASK mask for your Gdk.Window:

      gtk_widget_add_events(window, GDK_KEY_PRESS_MASK);
      
    • Then you connect the window with the keyboard_press() function:

      g_signal_connect (G_OBJECT (window), "key_press_event",
              G_CALLBACK (my_keypress_function), NULL);
      
    • Define your keyboard_press() to something once the space key has been pressed:

      gboolean my_keypress_function (GtkWidget *widget, GdkEventKey *event, gpointer data) {
          if (event->keyval == GDK_KEY_space){
              printf("SPACE KEY PRESSED!");
              return TRUE;
          }
          return FALSE;
      }