9
9
from . import colors
10
10
from . import sending
11
11
from .exceptions import Error
12
- from .flow import ahk_call , global_ahk_lock , _wait_for
12
+ from .flow import ahk_call , global_ahk_lock
13
13
from .hotkey_context import HotkeyContext
14
14
from .settings import get_settings , optional_ms
15
15
from .unset import UNSET , UnsetType
@@ -280,7 +280,7 @@ def wait(self, title=UNSET, *, class_name=UNSET, id=UNSET, pid=UNSET, exe=UNSET,
280
280
<https://www.autohotkey.com/docs/commands/WinWait.htm>`_
281
281
"""
282
282
self = self ._filter (title , class_name , id , pid , exe , text , match )
283
- return _wait_for ( timeout , self .exist ) or Window ( None )
283
+ return self ._wait ( "WinWait" , timeout )
284
284
285
285
def wait_active (self , title = UNSET , * , class_name = UNSET , id = UNSET , pid = UNSET , exe = UNSET , text = UNSET , match = None ,
286
286
timeout = None ):
@@ -297,7 +297,7 @@ def wait_active(self, title=UNSET, *, class_name=UNSET, id=UNSET, pid=UNSET, exe
297
297
query = self ._query ()
298
298
if query == ("" , "" , "" , "" ):
299
299
self = dc .replace (self , title = "A" )
300
- return _wait_for ( timeout , self .get_active ) or Window ( None )
300
+ return self ._wait ( "WinWaitActive" , timeout )
301
301
302
302
def wait_inactive (self , title = UNSET , * , class_name = UNSET , id = UNSET , pid = UNSET , exe = UNSET , text = UNSET , match = None ,
303
303
timeout = None ) -> bool :
@@ -316,7 +316,7 @@ def wait_inactive(self, title=UNSET, *, class_name=UNSET, id=UNSET, pid=UNSET, e
316
316
<https://www.autohotkey.com/docs/commands/WinWaitActive.htm>`_
317
317
"""
318
318
self = self ._filter (title , class_name , id , pid , exe , text , match )
319
- return _wait_for ( timeout , lambda : not self .get_active ()) or False
319
+ return self ._wait_close ( "WinWaitNotActive" , timeout )
320
320
321
321
def wait_close (self , title = UNSET , * , class_name = UNSET , id = UNSET , pid = UNSET , exe = UNSET , text = UNSET , match = None ,
322
322
timeout = None ):
@@ -335,9 +335,22 @@ def wait_close(self, title=UNSET, *, class_name=UNSET, id=UNSET, pid=UNSET, exe=
335
335
<https://www.autohotkey.com/docs/commands/WinWaitClose.htm>`_
336
336
"""
337
337
self = self ._filter (title , class_name , id , pid , exe , text , match )
338
- # WinWaitClose doesn't set Last Found Window, return False if the wait
339
- # was timed out.
340
- return _wait_for (timeout , lambda : not self .exist ()) or False
338
+ return self ._wait_close ("WinWaitClose" , timeout )
339
+
340
+ def _wait (self , cmd , timeout ):
341
+ win_id = self ._call (cmd , * self ._include (), timeout , * self ._exclude (), set_delay = True )
342
+ if not win_id :
343
+ return Window (None )
344
+ return Window (win_id )
345
+
346
+ def _wait_close (self , cmd , timeout ):
347
+ # WinWaitClose and WinWaitNotActive don't set the Last Found Window,
348
+ # return False if the wait was timed out.
349
+ ok = self ._call (cmd , * self ._include (), timeout , * self ._exclude (), set_delay = True )
350
+ if ok is None :
351
+ # There are no matching windows, and that's what we are waiting for.
352
+ return True
353
+ return bool (ok )
341
354
342
355
def close_all (self , title = UNSET , * , class_name = UNSET , id = UNSET , pid = UNSET , exe = UNSET , text = UNSET , match = None ,
343
356
timeout = None ):
@@ -455,9 +468,9 @@ def _group_action(self, cmd, timeout=UNSET):
455
468
query_hash_str = str (query_hash ).replace ("-" , "m" ) # AHK doesn't allow "-" in group names
456
469
label = ""
457
470
self ._call ("GroupAdd" , query_hash_str , * self ._include (), label , * self ._exclude ())
458
- self ._call (cmd , f"ahk_group { query_hash_str } " , "" , "" , set_delay = True )
471
+ self ._call (cmd , f"ahk_group { query_hash_str } " , "" , timeout or "" , set_delay = True )
459
472
if timeout is not UNSET :
460
- return self .wait_close ( timeout = timeout )
473
+ return not self .exist ( )
461
474
462
475
def window_context (self , title = UNSET , * , class_name = UNSET , id = UNSET , pid = UNSET , exe = UNSET , text = UNSET , match = None ):
463
476
"""window_context(title: str = UNSET, **criteria) -> ahkpy.HotkeyContext
@@ -1961,14 +1974,11 @@ def wait_status_bar(self, bar_text="", *,
1961
1974
:command: `StatusBarWait
1962
1975
<https://www.autohotkey.com/docs/commands/StatusBarWait.htm>`_
1963
1976
"""
1964
- # TODO: StatusBarWait is blocking and is not interruptable. However, it
1965
- # is usually more efficient to use StatusBarWait rather than calling
1966
- # StatusBarGetText in a loop.
1967
1977
try :
1968
1978
ok = self ._call (
1969
1979
"StatusBarWait" ,
1970
1980
bar_text ,
1971
- timeout ,
1981
+ timeout if timeout is not None else "" ,
1972
1982
part + 1 ,
1973
1983
* self ._include (),
1974
1984
interval * 1000 ,
0 commit comments