Guido van Rossum | 7045dd0 | 1991-08-16 13:28:28 +0000 | [diff] [blame^] | 1 | # Replacements for getevent() and pollevent(), |
| 2 | # and new functions ungetevent() and sync(). |
| 3 | |
| 4 | |
| 5 | # Every library module should ideally use this instead of |
| 6 | # stdwin.{get,poll}event(), so applications can use the services |
| 7 | # of ungetevent() and sync(). |
| 8 | |
| 9 | |
| 10 | import stdwin |
| 11 | |
| 12 | |
| 13 | # Events read ahead are stored in this queue. |
| 14 | # |
| 15 | queue = [] |
| 16 | |
| 17 | |
| 18 | # Replacement for getevent(). |
| 19 | # |
| 20 | def getevent(): |
| 21 | if queue: |
| 22 | event = queue[0] |
| 23 | del queue[0] |
| 24 | return event |
| 25 | else: |
| 26 | return stdwin.getevent() |
| 27 | |
| 28 | |
| 29 | # Replacement for pollevent(). |
| 30 | # |
| 31 | def pollevent(): |
| 32 | if queue: |
| 33 | return getevent() |
| 34 | else: |
| 35 | return stdwin.pollevent() |
| 36 | |
| 37 | |
| 38 | # Push an event back in the queue. |
| 39 | # |
| 40 | def ungetevent(event): |
| 41 | queue.insert(0, event) |
| 42 | |
| 43 | |
| 44 | # Synchronize the display. It turns out that this is the way to |
| 45 | # force STDWIN to call XSync(), which some (esoteric) applications need. |
| 46 | # (This is stronger than just flushing -- it actually waits for a |
| 47 | # positive response from the X server on the last command issued.) |
| 48 | # |
| 49 | def sync(): |
| 50 | while 1: |
| 51 | event = stdwin.pollevent() |
| 52 | if not event: break |
| 53 | queue.append(event) |