Information gtk concernant une touche

Description

Cette source retourne les informations de la structure GetEventKey quand vous pressez une touche du clavier.

Instruction pour compiler cette source avec GTK :
gcc -Wall `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0` -o key_tool -g key_tool.c

Source / Exemple :


/*! 

  • \brief GTK Program to get information about key pressed
  • \author Fabien Arcellier
  • To compil with GTK : gcc -Wall `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0` -o key_tool -g key_tool.c
  • /
#include <gtk/gtk.h> static void destroy (GtkWidget*, gpointer); static gboolean key_press_event (GtkWidget*, GdkEventKey*, gpointer); int main(int argc, char *argv[]) { GtkWidget *window = NULL, *label= NULL; gtk_init(&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Key Pressed tool"); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_widget_set_size_request (window, 300, 300); gtk_window_set_resizable (GTK_WINDOW (window), FALSE); label = gtk_label_new ("Press a key"); gtk_label_set_selectable (GTK_LABEL (label), TRUE); gtk_container_add (GTK_CONTAINER (window), label); gtk_widget_show_all (window); g_signal_connect (G_OBJECT (window), "key_press_event", G_CALLBACK (key_press_event), NULL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy), NULL); gtk_main(); return 0; } /*!
  • \brief Close application
  • /
static void destroy (GtkWidget *window, gpointer data) { gtk_main_quit(); } /*!
  • \brief Display information about key pressed in label
  • /
static gboolean key_press_event(GtkWidget *window, GdkEventKey *event, gpointer data) { char key_event_info[1024] = ""; char *event_string = NULL; GtkWidget *label = NULL; if (event -> string != NULL) { event_string = event -> string; } else {
  • event_string = '\0';
} sprintf(key_event_info, "Key\n\n \ send_event : %d\n \ time : %d \n \ state : %d \n \ keyval : %d \n \ length : %d \n \ string : %s \n \ hardware_keycode : %d \n \ group : %d \n \ is_modifier %d", event -> send_event, event -> time, event -> state, event -> keyval, event -> length, event_string, event -> hardware_keycode, event -> group, event -> is_modifier ); label = gtk_bin_get_child (GTK_BIN (window)); gtk_label_set_text (GTK_LABEL (label), key_event_info); return TRUE; }

Conclusion :


C'est une source très simple, réalisé en quelques minutes mais qui peut rendre service.
Elle illustre également l'interception d'un signal sous GTK+ avec g_signal_connect

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.