def with_clipboard_lock(self, success_callback, failure_callback, retries=RETRY, delay=DELAY): log("with_clipboard_lock%s", (success_callback, failure_callback, retries, delay)) r = OpenClipboard(self.window) if r: log("OpenClipboard(%#x)=%s", self.window, r) try: r = success_callback() log("%s()=%s", success_callback, r) if r: return finally: r = CloseClipboard() log("CloseClipboard()=%s", r) e = WinError(GetLastError()) owner = GetClipboardOwner() log("OpenClipboard(%#x)=%s, current owner: %s", self.window, e, get_owner_info(owner, self.window)) if retries <= 0: failure_callback( "OpenClipboard: too many failed attempts, giving up") return #try again later: GLib.timeout_add(delay, self.with_clipboard_lock, success_callback, failure_callback, retries - 1, delay + 5)
def got_clipboard_lock(): EmptyClipboard() c = 0 for fmt, handle in image_formats.items(): log("do_set_clipboard_image: %s", format_name(fmt)) r = SetClipboardData(fmt, handle) if not r: e = WinError(GetLastError()) log("SetClipboardData(%s, %#x)=%s (%s)", format_name(fmt), handle, r, e) else: c += 1 return bool(c)
def set_clipboard_data(): r = EmptyClipboard() log("EmptyClipboard()=%s", r) if not r: self.set_err("failed to empty the clipboard") return False r = SetClipboardData(win32con.CF_UNICODETEXT, buf) if not r: e = WinError(GetLastError()) log("SetClipboardData(CF_UNICODETEXT, %i chars)=%s (%s)", wlen, r, e) return False log("SetClipboardData(CF_UNICODETEXT, %i chars)=%s", wlen, r) cleanup() return True
def with_clipboard_lock(self, success_callback, failure_callback, retries=5, delay=5): r = OpenClipboard(self.window) log("OpenClipboard(%#x)=%s", self.window, r) if r: try: success_callback() return finally: CloseClipboard() if GetLastError()!=ERROR_ACCESS_DENIED: failure_callback("OpenClipboard: access denied") return log("clipboard lock: access denied") if retries<=0: failure_callback("OpenClipboard: too many failed attemps, giving up") return #try again later: glib.timeout_add(delay, self.with_clipboard_lock, success_callback, failure_callback, retries-1, delay)
def with_clipboard_lock(self, success_callback, failure_callback, retries=5, delay=5): r = OpenClipboard(self.window) if r: log("OpenClipboard(%#x)=%s", self.window, r) try: success_callback() return finally: CloseClipboard() log("OpenClipboard(%#x)=%s, owner=%#x", self.window, WinError(GetLastError()), GetClipboardOwner()) if retries <= 0: failure_callback( "OpenClipboard: too many failed attemps, giving up") return #try again later: glib.timeout_add(delay, self.with_clipboard_lock, success_callback, failure_callback, retries - 1, delay + 5)