@@ -82,22 +82,39 @@ def request_refresh(when='now'):
8282
8383 def event_or_refresh (timeout = None ):
8484 if timeout is None :
85- timeout = 1
86- else :
87- timeout = min (1 , timeout )
88- starttime = time .time ()
85+ timeout = 2 ** 25 # a year
8986 while True :
90- t = time .time ()
91- refresh_requests .sort (key = lambda r : 0 if r .when == 'now' else r .when )
92- if refresh_requests and (refresh_requests [0 ].when == 'now' or refresh_requests [- 1 ].when < t ):
93- yield refresh_requests .pop (0 )
94- elif reload_requests :
95- e = reload_requests .pop ()
96- yield e
97- else :
98- e = input_generator .send (timeout )
99- if starttime + timeout < time .time () or e is not None :
87+ starttime = time .time ()
88+ while True :
89+ t = time .time ()
90+ refresh_requests .sort (key = lambda r : 0 if r .when == 'now' else r .when )
91+ if refresh_requests and (refresh_requests [0 ].when == 'now' or refresh_requests [- 1 ].when < t ):
92+ yield refresh_requests .pop (0 )
93+ elif reload_requests :
94+ e = reload_requests .pop ()
10095 yield e
96+ else :
97+ if refresh_requests :
98+ next_refresh = refresh_requests .pop (0 )
99+ time_until_next_scheduled_event = max (0 , next_refresh .when - t )
100+ else :
101+ next_refresh = None
102+ time_until_next_scheduled_event = 2 ** 25
103+
104+ time_to_wait = min (time_until_next_scheduled_event , max (0 , starttime + timeout - t ))
105+
106+ e = input_generator .send (time_to_wait )
107+
108+ if next_refresh is not None :
109+ if e is None and time .time () > t + time_until_next_scheduled_event :
110+ yield next_refresh
111+ continue
112+ else :
113+ refresh_requests .insert (0 , next_refresh )
114+
115+ if starttime + timeout < time .time () or e is not None :
116+ yield e
117+ break
101118
102119 def on_suspend ():
103120 window .__exit__ (None , None , None )
@@ -144,7 +161,7 @@ def process_event(e):
144161 for _ , e in izip (find_iterator , event_or_refresh (0 )):
145162 if e is not None :
146163 process_event (e )
147- for e in event_or_refresh ():
164+ for e in event_or_refresh (None ):
148165 process_event (e )
149166
150167if __name__ == '__main__' :
0 commit comments