/** mousegrab.c **/ #include gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data); gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data); void grabMouse(GtkWidget *widget,GtkWidget *containWidget); void ungrabMouse(GtkWidget *widget,gpointer data); int main(int argc,char *argv[]) { GtkWidget *window; GtkWidget *box; GtkWidget *button; gnome_init("mousegrab","1.0",argc,argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width( GTK_CONTAINER(window),30); gtk_signal_connect(GTK_OBJECT(window),"delete_event", GTK_SIGNAL_FUNC(eventDelete),NULL); gtk_signal_connect(GTK_OBJECT(window),"destroy", GTK_SIGNAL_FUNC(eventDestroy),NULL); box = gtk_vbox_new(FALSE,0); button = gtk_button_new_with_label("Grab Mouse"); gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0); gtk_signal_connect(GTK_OBJECT(button),"clicked", GTK_SIGNAL_FUNC(grabMouse),window); button = gtk_button_new_with_label("Ungrab Mouse"); gtk_box_pack_end(GTK_BOX(box),button,FALSE,FALSE,0); gtk_signal_connect(GTK_OBJECT(button),"clicked", GTK_SIGNAL_FUNC(ungrabMouse),NULL); gtk_container_add(GTK_CONTAINER(window),box); gtk_widget_show_all(window); gtk_main(); exit(0); } void grabMouse(GtkWidget *widget,GtkWidget *containWidget) { GdkWindow *window = containWidget->window; GdkCursor *cursor = gdk_cursor_new(GDK_CROSSHAIR); gdk_pointer_grab(window, TRUE, (GdkEventMask)0, window, cursor, GDK_CURRENT_TIME); } void ungrabMouse(GtkWidget *widget,gpointer data) { if(gdk_pointer_is_grabbed()) gdk_pointer_ungrab(GDK_CURRENT_TIME); } gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data) { return(FALSE); } gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data) { if(gdk_pointer_is_grabbed()) gdk_pointer_ungrab(GDK_CURRENT_TIME); gtk_main_quit(); return(0); }