diff --git a/wx/py/crust.py b/wx/py/crust.py index c58428e2..e55e2676 100644 --- a/wx/py/crust.py +++ b/wx/py/crust.py @@ -169,6 +169,9 @@ class Display(editwindow.EditWindow): def push(self, command, more): """Receiver for Interpreter.push signal.""" + if not self: + dispatcher.disconnect(receiver=self.push, signal='Interpreter.push') + return self.Refresh() def Refresh(self): @@ -205,7 +208,11 @@ class Calltip(wx.TextCtrl): self.SetFont(font) def display(self, calltip): - """Receiver for """+self.ShellClassName+""".calltip signal.""" + """Receiver for this.calltip signal.""" + if not self: + dispatcher.disconnect(receiver=self.display, signal=self.ShellClassName+'.calltip') + return + ## self.SetValue(calltip) # Caused refresh problem on Windows. self.Clear() self.AppendText(calltip) @@ -220,30 +227,50 @@ class SessionListing(wx.TextCtrl): style = (wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_RICH2 | wx.TE_DONTWRAP) wx.TextCtrl.__init__(self, parent, id, style=style) + self.ShellClassName = ShellClassName dispatcher.connect(receiver=self.addHistory, - signal=ShellClassName+".addHistory") + signal=self.ShellClassName+".addHistory") dispatcher.connect(receiver=self.clearHistory, - signal=ShellClassName+".clearHistory") + signal=self.ShellClassName+".clearHistory") dispatcher.connect(receiver=self.loadHistory, - signal=ShellClassName+".loadHistory") + signal=self.ShellClassName+".loadHistory") df = self.GetFont() font = wx.Font(df.GetPointSize(), wx.FONTFAMILY_TELETYPE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) self.SetFont(font) + + def _disconnect(self): + dispatcher.disconnect(receiver=self.addHistory, + signal=self.ShellClassName+".addHistory") + dispatcher.disconnect(receiver=self.clearHistory, + signal=self.ShellClassName+".clearHistory") + dispatcher.disconnect(receiver=self.loadHistory, + signal=self.ShellClassName+".loadHistory") + + def loadHistory(self, history): # preload the existing history, if any + if not self: + self._disconnect() + return hist = history[:] hist.reverse() self.SetValue('\n'.join(hist) + '\n') self.SetInsertionPointEnd() def addHistory(self, command): + if not self: + self._disconnect() + return if command: self.SetInsertionPointEnd() self.AppendText(command + '\n') def clearHistory(self): + if not self: + self._disconnect() + return self.SetValue("") @@ -262,6 +289,9 @@ class DispatcherListing(wx.TextCtrl): def spy(self, signal, sender): """Receiver for Any signal from Any sender.""" + if not self: + dispatcher.disconnect(receiver=self.spy) + return text = '%r from %s' % (signal, sender) self.SetInsertionPointEnd() start, end = self.GetSelection() diff --git a/wx/py/document.py b/wx/py/document.py index 624c4762..a25a1143 100644 --- a/wx/py/document.py +++ b/wx/py/document.py @@ -23,7 +23,7 @@ class Document: def read(self): """Return contents of file.""" if self.filepath and os.path.exists(self.filepath): - f = file(self.filepath, 'rb') + f = open(self.filepath, 'rb') try: return f.read() finally: @@ -34,7 +34,7 @@ class Document: def write(self, text): """Write text to file.""" try: - f = file(self.filepath, 'wb') + f = open(self.filepath, 'wb') f.write(text) finally: if f: diff --git a/wx/py/editor.py b/wx/py/editor.py index b6b85f8c..4f5a2b48 100644 --- a/wx/py/editor.py +++ b/wx/py/editor.py @@ -292,6 +292,10 @@ class EditorNotebookFrame(EditorFrame): def _editorChange(self, editor): """Editor change signal receiver.""" + if not self: + dispatcher.disconnect(receiver=self._editorChange, + signal='EditorChange', sender=self.notebook) + return self.setEditor(editor) def OnAbout(self, event): diff --git a/wx/py/editwindow.py b/wx/py/editwindow.py index f223669f..e19216c1 100644 --- a/wx/py/editwindow.py +++ b/wx/py/editwindow.py @@ -81,6 +81,11 @@ class EditWindow(stc.StyledTextCtrl): def _fontsizer(self, signal): """Receiver for Font* signals.""" + if not self: + dispatcher.disconnect(receiver=self._fontsizer, signal='FontIncrease') + dispatcher.disconnect(receiver=self._fontsizer, signal='FontDecrease') + dispatcher.disconnect(receiver=self._fontsizer, signal='FontDefault') + return size = self.GetZoom() if signal == 'FontIncrease': size += 1 diff --git a/wx/py/filling.py b/wx/py/filling.py index d2ae5a43..2590f8d4 100644 --- a/wx/py/filling.py +++ b/wx/py/filling.py @@ -66,6 +66,9 @@ class FillingTree(wx.TreeCtrl): def push(self, command, more): """Receiver for Interpreter.push signal.""" + if not self: + dispatcher.disconnect(receiver=self.push, signal='Interpreter.push') + return self.display() def OnItemExpanding(self, event): @@ -258,6 +261,9 @@ class FillingText(editwindow.EditWindow): def push(self, command, more): """Receiver for Interpreter.push signal.""" + if not self: + dispatcher.disconnect(receiver=self.push, signal='Interpreter.push') + return self.Refresh() def SetText(self, *args, **kwds): diff --git a/wx/py/frame.py b/wx/py/frame.py index 73b7d170..89a532cd 100644 --- a/wx/py/frame.py +++ b/wx/py/frame.py @@ -845,7 +845,7 @@ class ShellFrameMixin: if self.dataDir: try: name = os.path.join(self.dataDir, 'history') - f = file(name, 'w') + f = open(name, 'w') hist = [] enc = 'utf-8' for h in self.shell.history: @@ -867,7 +867,7 @@ class ShellFrameMixin: name = os.path.join(self.dataDir, 'history') if os.path.exists(name): try: - f = file(name, 'U') + f = open(name, 'U') hist = f.read() f.close() self.shell.history = hist.split('\x00\n') @@ -921,7 +921,7 @@ class ShellFrameMixin: def EditStartupScript(self): if os.path.exists(self.startupScript): - text = file(self.startupScript, 'U').read() + text = open(self.startupScript, 'U').read() else: text = '' @@ -929,7 +929,7 @@ class ShellFrameMixin: if dlg.ShowModal() == wx.ID_OK: text = dlg.GetText() try: - f = file(self.startupScript, 'w') + f = open(self.startupScript, 'w') f.write(text) f.close() except: