1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| #include <stdlib.h>
#include <gtk/gtk.h>
typedef struct
{
GtkWidget *coordx, *coordy;
} SCoord;
gboolean
g_callback_draw (GtkWidget *widget, cairo_t *cr, SCoord *coord)
{
GdkWindow *root = NULL;
gint x, y;
// Récupération de la fenêtre root
root = gdk_get_default_root_window ();
if (root==NULL) g_printerr ("root = NULL !!!");
// Récupération du pointeur de la souris
GdkDevice *pointer = gdk_device_manager_get_client_pointer (gdk_display_get_device_manager (gdk_window_get_display (root)));
// Récupération des coordonnées de la souris
gdk_window_get_device_position (root, pointer, &x, &y, NULL);
// Mise à jour des GtkLabel pour afficher les coordonnées.
gchar *text_x = g_strdup_printf("%d", x);
gchar *text_y = g_strdup_printf("%d", y);
gtk_label_set_text (GTK_LABEL (coord->coordx), text_x);
gtk_label_set_text (GTK_LABEL (coord->coordy), text_y);
g_free(text_x);
g_free(text_y);
return FALSE;
}
int
main(int argc, char** argv)
{
GtkWidget *window = NULL;
GtkWidget *grid = NULL;
GtkWidget *label = NULL;
SCoord coord;
// Initialisation gtk
gtk_init(&argc, &argv);
// Creation fenetre
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Test capture évènements souris");
gtk_window_set_default_size(GTK_WINDOW(window), 400, 200);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ALWAYS);
// Connexion du signal "destroy" pour fermer l'application
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
// Création d'une grille pour afficher les coordonnées de la souris en temps réel.
grid = gtk_grid_new ();
gtk_container_add (GTK_CONTAINER(window), grid);
label = gtk_label_new ("coordonnées souris :");
gtk_grid_attach (GTK_GRID(grid), label, 0, 0, 4, 1);
label = gtk_label_new (",");
gtk_grid_attach (GTK_GRID(grid), label, 1, 1, 1, 1);
coord.coordx = gtk_label_new ("0");
gtk_grid_attach (GTK_GRID(grid), coord.coordx, 0, 1, 1, 1);
coord.coordy = gtk_label_new ("0");
gtk_grid_attach (GTK_GRID(grid), coord.coordy, 2, 1, 1, 1);
// Connexion du signal "draw". Dans ce callback on va pouvoir accéder à la fenêtre root
g_signal_connect(G_OBJECT(window), "draw", G_CALLBACK(g_callback_draw), &coord);
// Affichage de tout
gtk_widget_show_all(window);
gtk_main();
return EXIT_SUCCESS;
} |