# HG changeset patch # User Andrey Skvortsov # Date 1527258195 -10800 # Node ID 5ce6d08ff2c74faedf5f5c5bb8edc8e21c18df34 # Parent c76d4be6f4382c6cb187ecd3b39c2837e0cf2d30 make clipboard open minimal time as wxPython documentation recommends https://wxpython.org/Phoenix/docs/html/wx.Clipboard.html#wx.Clipboard.GetData "Call wx.Clipboard.Open to get ownership of the clipboard. If this operation returns True, you now own the clipboard. Call wx.Clipboard.SetData to put data on the clipboard, or wx.Clipboard.GetData to retrieve data from the clipboard. Call wx.Clipboard.Close to close the clipboard and relinquish ownership. You should keep the clipboard open only momentarily." Maybe it makes situation with pretty annoying error 'clipboard already open' a little bit better. traceback: File "/home/developer/WorkData/PLC/beremiz/avangard-beremiz-ide/src/../../beremiz/BeremizIDE.py", line 955, in OnSaveProjectMenu self.RefreshAfterSave() File "/home/developer/WorkData/PLC/beremiz/avangard-beremiz-ide/src/../../beremiz/BeremizIDE.py", line 946, in RefreshAfterSave self._Refresh(TITLE, FILEMENU, EDITMENU, PAGETITLES) File "/home/developer/WorkData/PLC/beremiz/avangard-beremiz-ide/src/../../beremiz/IDEFrame.py", line 926, in _Refresh self.RefreshFunctions[element]() File "/home/developer/WorkData/PLC/beremiz/avangard-beremiz-ide/src/../../beremiz/BeremizIDE.py", line 766, in RefreshEditMenu IDEFrame.RefreshEditMenu(self) File "/home/developer/WorkData/PLC/beremiz/avangard-beremiz-ide/src/../../beremiz/IDEFrame.py", line 1185, in RefreshEditMenu if self.GetCopyBuffer() is not None: File "/home/developer/WorkData/PLC/beremiz/avangard-beremiz-ide/src/../../beremiz/IDEFrame.py", line 956, in GetCopyBuffer if wx.TheClipboard.Open(): File "/usr/lib/python2.7/dist-packages/wx-3.0-gtk3/wx/_misc.py", line 5793, in Open return _misc_.Clipboard_Open(*args, **kwargs) : C++ assertion "!m_open" failed at ../src/gtk/clipbrd.cpp(598) in Open(): clipboard already open diff -r c76d4be6f438 -r 5ce6d08ff2c7 IDEFrame.py --- a/IDEFrame.py Wed May 23 20:22:45 2018 +0200 +++ b/IDEFrame.py Fri May 25 17:23:15 2018 +0300 @@ -953,11 +953,14 @@ return data else: wx.TheClipboard.UsePrimarySelection(primary_selection) - if wx.TheClipboard.Open(): + + if not wx.TheClipboard.IsOpened(): dataobj = wx.TextDataObject() - if wx.TheClipboard.GetData(dataobj): - data = dataobj.GetText() - wx.TheClipboard.Close() + if wx.TheClipboard.Open(): + success = wx.TheClipboard.GetData(dataobj) + wx.TheClipboard.Close() + if success: + data = dataobj.GetText() return data def SetCopyBuffer(self, text, primary_selection=False): @@ -965,12 +968,13 @@ return else: wx.TheClipboard.UsePrimarySelection(primary_selection) - if wx.TheClipboard.Open(): + if not wx.TheClipboard.IsOpened(): data = wx.TextDataObject() data.SetText(text) - wx.TheClipboard.SetData(data) - wx.TheClipboard.Flush() - wx.TheClipboard.Close() + if wx.TheClipboard.Open(): + wx.TheClipboard.SetData(data) + wx.TheClipboard.Flush() + wx.TheClipboard.Close() self.RefreshEditMenu() def GetDrawingMode(self):