6

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?

PintoDoido
  • 1,011
  • 16
  • 35

2 Answers2

13

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;
    }
    
E_net4
  • 27,810
  • 13
  • 101
  • 139
PintoDoido
  • 1,011
  • 16
  • 35
3

it's g_signal_connect (G_OBJECT (window), "key_press_event", G_CALLBACK (on_key_press), NULL);

AgentChaos
  • 31
  • 2