Beispiel #1
0
int ftr_loop_run(struct FTR *ff)
{
	struct _FTR *f = (void*)ff;

	//f->changed = 1;

	while (!f->stop_loop)
	{
		if (!f->handle_idle || f->changed || XPending(f->display) > 0)
			process_next_event(ff);
		else if (f->handle_idle) {
			f->handle_idle(ff, 0, 0, 0, 0);
			XEvent ev;
			ev.type = Expose;
			//XLockDisplay(f->display);
			XSendEvent(f->display, f->window, 0, NoEventMask, &ev);
			XFlush(f->display);
			//XUnlockDisplay(f->display);
		}
	}

	int r = f->stop_loop;
	f->stop_loop = 0;
	return r;
}
Beispiel #2
0
int ftr_loop_run2(struct FTR *ff, struct FTR *gg)
{
	struct _FTR *f = (void*)ff;
	struct _FTR *g = (void*)gg;

	char *dn_f = XDisplayString(f->display);
	char *dn_g = XDisplayString(g->display);
	if (0 != strcmp(dn_f, dn_g))
		exit(fprintf(stderr, "FTR error: two displays bad bad bad (%p,%p)(\"%s\",\"%s\")\n", (void*)f->display, (void*)g->display, dn_f, dn_g));

	fprintf(stderr, "dn_f = %p \"%s\"\n", (void*)f->display, dn_f);
	fprintf(stderr, "dn_g = %p \"%s\"\n", (void*)g->display, dn_g);

	while (!f->stop_loop && !g->stop_loop)
	{
		int pending_f = XPending(f->display);
		int pending_g = XPending(g->display);

		fprintf(stderr, "pending fg = %d %d\n", pending_f, pending_g);

		// treat g
		if (!g->handle_idle || g->changed || pending_g > 0)
			process_next_event(gg);
		else if (g->handle_idle) {
			g->handle_idle(gg, 0, 0, 0, 0);
			XEvent ev;
			ev.type = Expose;
			XSendEvent(g->display, g->window, 0, NoEventMask, &ev);
			XFlush(g->display);
		}

		// treat f
		if (!f->handle_idle || f->changed || pending_f > 0)
			process_next_event(ff);
		else if (f->handle_idle) {
			f->handle_idle(ff, 0, 0, 0, 0);
			XEvent ev;
			ev.type = Expose;
			XSendEvent(f->display, f->window, 0, NoEventMask, &ev);
			XFlush(f->display);
		}
	}

	int r = f->stop_loop + g->stop_loop;
	f->stop_loop = g->stop_loop = 0;
	return r;
}
Beispiel #3
0
static void
enter_event_loop(struct piglit_winsys_framework *winsys_fw)
{
	struct piglit_x11_framework *x11_fw = (void*) winsys_fw;

	assert(x11_fw->display != NULL);
	assert(x11_fw->window != 0);

	while (true)
		process_next_event(x11_fw);
}