On Nov 27, 2007 2:27 AM, Stewart Weiss <stewart.weiss@xxxxxxx> wrote: > Does anyone know what the real semantics are, and when is_hint is true? Here's a complete small program that shows mouse events (with hints) for a drawing area. -------------- /* compile with * gcc -g -Wall try32.c `pkg-config gtk+-2.0 --cflags --libs` */ #include <stdio.h> #include <gtk/gtk.h> static gboolean event_cb (GtkWidget * widget, GdkEvent * ev) { gboolean handled; handled = FALSE; switch (ev->type) { case GDK_BUTTON_PRESS: printf ("button %d press\n", ev->button.button); handled = TRUE; break; case GDK_BUTTON_RELEASE: printf ("button %d release\n", ev->button.button); handled = TRUE; break; case GDK_MOTION_NOTIFY: /* A hint? Read the position to get the latest value. */ if (ev->motion.is_hint) { GdkDisplay *display = gtk_widget_get_display (widget); GdkScreen *screen; int x_root, y_root; printf ("seen a hint!\n"); gdk_display_get_pointer (display, &screen, &x_root, &y_root, NULL); ev->motion.x_root = x_root; ev->motion.y_root = y_root; } printf ("motion at %g x %g\n", ev->motion.x_root, ev->motion.y_root); if (ev->motion.state & GDK_BUTTON1_MASK) printf ("(and btn1 held down)\n"); if (ev->motion.state & GDK_BUTTON2_MASK) printf ("(and btn2 held down)\n"); handled = TRUE; break; default: break; } return (handled); } int main (int argc, char **argv) { GtkWidget *win; GtkWidget *area; gtk_init (&argc, &argv); win = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (win, "destroy", G_CALLBACK (gtk_main_quit), NULL); area = gtk_drawing_area_new (); gtk_widget_add_events (GTK_WIDGET (area), GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); gtk_signal_connect_after (GTK_OBJECT (area), "event", GTK_SIGNAL_FUNC (event_cb), NULL); gtk_container_add (GTK_CONTAINER (win), area); gtk_window_set_default_size (GTK_WINDOW (win), 250, 250); gtk_widget_show_all (win); gtk_main (); return (0); } ------------------------ You get output like: seen a hint! motion at 1367 x 446 seen a hint! motion at 1368 x 446 button 1 press seen a hint! motion at 1368 x 447 (and btn1 held down) button 2 press seen a hint! motion at 1368 x 448 (and btn1 held down) (and btn2 held down) John _______________________________________________ gtk-list mailing list gtk-list@xxxxxxxxx http://mail.gnome.org/mailman/listinfo/gtk-list