Commit 1f148a52 authored by Guido van Rossum's avatar Guido van Rossum

Added pollevent(); returns None if no event available.

Don't throw away key events with no window.
parent 001ee7c3
...@@ -1282,8 +1282,8 @@ stdwin_open(sw, args) ...@@ -1282,8 +1282,8 @@ stdwin_open(sw, args)
} }
static object * static object *
stdwin_getevent(sw, args) stdwin_get_poll_event(poll, args)
object *sw; int poll;
object *args; object *args;
{ {
EVENT e; EVENT e;
...@@ -1294,15 +1294,24 @@ stdwin_getevent(sw, args) ...@@ -1294,15 +1294,24 @@ stdwin_getevent(sw, args)
err_setstr(RuntimeError, "cannot getevent() while drawing"); err_setstr(RuntimeError, "cannot getevent() while drawing");
return NULL; return NULL;
} }
again: /* again: */
if (poll) {
if (!wpollevent(&e)) {
INCREF(None);
return None;
}
}
else
wgetevent(&e); wgetevent(&e);
if (e.type == WE_COMMAND && e.u.command == WC_CANCEL) { if (e.type == WE_COMMAND && e.u.command == WC_CANCEL) {
/* Turn keyboard interrupts into exceptions */ /* Turn keyboard interrupts into exceptions */
err_set(KeyboardInterrupt); err_set(KeyboardInterrupt);
return NULL; return NULL;
} }
/*
if (e.window == NULL && (e.type == WE_COMMAND || e.type == WE_CHAR)) if (e.window == NULL && (e.type == WE_COMMAND || e.type == WE_CHAR))
goto again; goto again;
*/
if (e.type == WE_COMMAND && e.u.command == WC_CLOSE) { if (e.type == WE_COMMAND && e.u.command == WC_CLOSE) {
/* Turn WC_CLOSE commands into WE_CLOSE events */ /* Turn WC_CLOSE commands into WE_CLOSE events */
e.type = WE_CLOSE; e.type = WE_CLOSE;
...@@ -1323,11 +1332,15 @@ stdwin_getevent(sw, args) ...@@ -1323,11 +1332,15 @@ stdwin_getevent(sw, args)
w = None; w = None;
else else
w = (object *)windowlist[tag]; w = (object *)windowlist[tag];
#ifdef sgi
/* XXX Trap for unexplained weird bug */
if ((long)w == (long)0x80000001) {
err_setstr(SystemError,
"bad pointer in stdwin.getevent()");
return NULL;
}
#endif
} }
if ((long)w == (long)0x80000001) {
err_setstr(SystemError, "bad pointer in stdwin.getevent()");
return NULL;
}
INCREF(w); INCREF(w);
settupleitem(v, 1, w); settupleitem(v, 1, w);
switch (e.type) { switch (e.type) {
...@@ -1377,6 +1390,22 @@ return NULL; ...@@ -1377,6 +1390,22 @@ return NULL;
return v; return v;
} }
static object *
stdwin_getevent(sw, args)
object *sw;
object *args;
{
return stdwin_get_poll_event(0, args);
}
static object *
stdwin_pollevent(sw, args)
object *sw;
object *args;
{
return stdwin_get_poll_event(1, args);
}
static object * static object *
stdwin_setdefwinpos(sw, args) stdwin_setdefwinpos(sw, args)
object *sw; object *sw;
...@@ -1584,6 +1613,7 @@ static struct methodlist stdwin_methods[] = { ...@@ -1584,6 +1613,7 @@ static struct methodlist stdwin_methods[] = {
{"menucreate", stdwin_menucreate}, {"menucreate", stdwin_menucreate},
{"message", stdwin_message}, {"message", stdwin_message},
{"open", stdwin_open}, {"open", stdwin_open},
{"pollevent", stdwin_pollevent},
{"resetselection", stdwin_resetselection}, {"resetselection", stdwin_resetselection},
{"rotatecutbuffers", stdwin_rotatecutbuffers}, {"rotatecutbuffers", stdwin_rotatecutbuffers},
{"setcutbuffer", stdwin_setcutbuffer}, {"setcutbuffer", stdwin_setcutbuffer},
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment