Skip to content

Commit 8358e1f

Browse files
committed
Change Clipboard.synchronized_changes() to raise an error on timeout
Re: dictation-toolbox#390. This context manager now always raises an error on timeout. This makes more sense than failing silently.
1 parent 4bd7f98 commit 8358e1f

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

dragonfly/windows/base_clipboard.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,8 @@ def synchronized_changes(cls, timeout, step=0.001, formats=None,
163163
"""
164164
Context manager for synchronizing local and system clipboard
165165
changes. This takes the same arguments as the
166-
:meth:`wait_for_change` method.
166+
:meth:`wait_for_change` method. A ``RuntimeError`` is raised if
167+
the system clipboard does not change.
167168
168169
Arguments:
169170
- *timeout* (float) -- timeout in seconds.
@@ -197,8 +198,13 @@ def synchronized_changes(cls, timeout, step=0.001, formats=None,
197198
# Yield for clipboard operations.
198199
yield
199200
finally:
200-
# Wait for the system clipboard to change.
201-
cls.wait_for_change(timeout, step, formats, initial_clipboard)
201+
# Wait for the system clipboard to change, raising an error on
202+
# failure.
203+
changed = cls.wait_for_change(timeout, step, formats,
204+
initial_clipboard)
205+
if not changed:
206+
message = "Timed out waiting for clipboard to change"
207+
raise RuntimeError(message)
202208

203209
#-----------------------------------------------------------------------
204210

dragonfly/windows/win32_clipboard.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -217,18 +217,21 @@ def wait_for_change(cls, timeout, step=0.001, formats=None,
217217
@classmethod
218218
@contextlib.contextmanager
219219
def synchronized_changes(cls, timeout, step=0.001, formats=None,
220-
initial_clipboard=None, raise_exception_on_timeout=False):
220+
initial_clipboard=None):
221221
seq_no = win32clipboard.GetClipboardSequenceNumber()
222222
if formats and not initial_clipboard:
223223
initial_clipboard = cls(from_system=True)
224224
try:
225225
# Yield for clipboard operations.
226226
yield
227227
finally:
228-
# Wait for the system clipboard to change.
229-
if not cls._wait_for_change(timeout, step, formats, initial_clipboard,
230-
seq_no) and raise_exception_on_timeout:
231-
raise TimeoutError("Timed out waiting for clipboard to change.")
228+
# Wait for the system clipboard to change, raising an error on
229+
# failure.
230+
changed = cls._wait_for_change(timeout, step, formats,
231+
initial_clipboard, seq_no)
232+
if not changed:
233+
message = "Timed out waiting for clipboard to change"
234+
raise RuntimeError(message)
232235

233236
#-----------------------------------------------------------------------
234237

0 commit comments

Comments
 (0)