#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <gtk/gtk.h>
#include <gdk/gdkx.h>

static GtkWidget *window;
static int press_x, press_y;

void button_press(GtkWidget *widget, GdkEventButton *e) {
    press_x = e->x_root;
    press_y = e->y_root;
}

void button_release(GtkWidget *widget, GdkEventButton *e) {
    if (press_y > 500 && e->y_root < 200) {
	gdk_pointer_ungrab(GDK_CURRENT_TIME);
	gtk_main_quit();
    }
}

int main(int argc, char *argv[]) {
    {
	gtk_init(&argc, &argv);
	window = gtk_window_new(GTK_WINDOW_POPUP);
	assert(window);

	g_signal_connect(G_OBJECT(window),
			 "button_press_event",
			 G_CALLBACK(button_press),
			 NULL);

	g_signal_connect(G_OBJECT(window),
			 "button_release_event",
			 G_CALLBACK(button_release),
			 NULL);

	gtk_widget_show(window);
    }

    {
	int ret;
	ret = gdk_pointer_grab(window->window,
			       TRUE,
			       GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_PRESS_MASK |  GDK_BUTTON_RELEASE_MASK,
			       NULL,
			       NULL,
			       GDK_CURRENT_TIME);
	assert(ret == GDK_GRAB_SUCCESS);
    }
    gtk_main();
    return 0;
}
