99from . import colors
1010from . import sending
1111from .exceptions import Error
12- from .flow import ahk_call , global_ahk_lock , _wait_for
12+ from .flow import ahk_call , global_ahk_lock
1313from .hotkey_context import HotkeyContext
1414from .settings import get_settings , optional_ms
1515from .unset import UNSET , UnsetType
@@ -280,7 +280,7 @@ def wait(self, title=UNSET, *, class_name=UNSET, id=UNSET, pid=UNSET, exe=UNSET,
280280 <https://www.autohotkey.com/docs/commands/WinWait.htm>`_
281281 """
282282 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 )
284284
285285 def wait_active (self , title = UNSET , * , class_name = UNSET , id = UNSET , pid = UNSET , exe = UNSET , text = UNSET , match = None ,
286286 timeout = None ):
@@ -297,7 +297,7 @@ def wait_active(self, title=UNSET, *, class_name=UNSET, id=UNSET, pid=UNSET, exe
297297 query = self ._query ()
298298 if query == ("" , "" , "" , "" ):
299299 self = dc .replace (self , title = "A" )
300- return _wait_for ( timeout , self .get_active ) or Window ( None )
300+ return self ._wait ( "WinWaitActive" , timeout )
301301
302302 def wait_inactive (self , title = UNSET , * , class_name = UNSET , id = UNSET , pid = UNSET , exe = UNSET , text = UNSET , match = None ,
303303 timeout = None ) -> bool :
@@ -316,7 +316,7 @@ def wait_inactive(self, title=UNSET, *, class_name=UNSET, id=UNSET, pid=UNSET, e
316316 <https://www.autohotkey.com/docs/commands/WinWaitActive.htm>`_
317317 """
318318 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 )
320320
321321 def wait_close (self , title = UNSET , * , class_name = UNSET , id = UNSET , pid = UNSET , exe = UNSET , text = UNSET , match = None ,
322322 timeout = None ):
@@ -335,9 +335,22 @@ def wait_close(self, title=UNSET, *, class_name=UNSET, id=UNSET, pid=UNSET, exe=
335335 <https://www.autohotkey.com/docs/commands/WinWaitClose.htm>`_
336336 """
337337 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 )
341354
342355 def close_all (self , title = UNSET , * , class_name = UNSET , id = UNSET , pid = UNSET , exe = UNSET , text = UNSET , match = None ,
343356 timeout = None ):
@@ -455,9 +468,9 @@ def _group_action(self, cmd, timeout=UNSET):
455468 query_hash_str = str (query_hash ).replace ("-" , "m" ) # AHK doesn't allow "-" in group names
456469 label = ""
457470 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 )
459472 if timeout is not UNSET :
460- return self .wait_close ( timeout = timeout )
473+ return not self .exist ( )
461474
462475 def window_context (self , title = UNSET , * , class_name = UNSET , id = UNSET , pid = UNSET , exe = UNSET , text = UNSET , match = None ):
463476 """window_context(title: str = UNSET, **criteria) -> ahkpy.HotkeyContext
@@ -1961,14 +1974,11 @@ def wait_status_bar(self, bar_text="", *,
19611974 :command: `StatusBarWait
19621975 <https://www.autohotkey.com/docs/commands/StatusBarWait.htm>`_
19631976 """
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.
19671977 try :
19681978 ok = self ._call (
19691979 "StatusBarWait" ,
19701980 bar_text ,
1971- timeout ,
1981+ timeout if timeout is not None else "" ,
19721982 part + 1 ,
19731983 * self ._include (),
19741984 interval * 1000 ,
0 commit comments