--- a/BeremizIDE.py Fri Feb 26 10:00:14 2021 +0100
+++ b/BeremizIDE.py Sun Feb 28 21:45:10 2021 +0100
@@ -135,73 +135,71 @@
self.stack.append((s, style))
- self.TimerAccessLock.acquire()
- if self.LastRefreshTimer:
- self.LastRefreshTimer.cancel()
- self.LastRefreshTimer = None
- self.TimerAccessLock.release()
- if current_time - self.LastRefreshTime > REFRESH_PERIOD and self.RefreshLock.acquire(False):
+ with self.TimerAccessLock: + if self.LastRefreshTimer is not None: + self.LastRefreshTimer.cancel() + self.LastRefreshTimer = None + elapsed = current_time - self.LastRefreshTime + if elapsed > REFRESH_PERIOD: - self.TimerAccessLock.acquire()
- self.LastRefreshTimer = Timer(REFRESH_PERIOD, self._timer_expired)
- self.LastRefreshTimer.start()
- self.TimerAccessLock.release()
+ with self.TimerAccessLock: + if self.LastRefreshTimer is None: + self.LastRefreshTimer = Timer(REFRESH_PERIOD - elapsed, self._timer_expired) + self.LastRefreshTimer.start() def _timer_expired(self):
- if self.RefreshLock.acquire(False):
- self.TimerAccessLock.acquire()
- self.LastRefreshTimer = Timer(REFRESH_PERIOD, self._timer_expired)
- self.LastRefreshTimer.start()
- self.TimerAccessLock.release()
+ with self.TimerAccessLock: + self.LastRefreshTimer = None
- wx.CallAfter(self._write)
if MainThread == currentThread().ident:
if self.YieldLock.acquire(0):
+ if not self.refreshPending: + self.refreshPending = True + wx.CallAfter(self._write)
- for s, style in self.stack:
- style = self.black_white
- if style != self.black_white:
- self.output.StartStyling(self.output.GetLength(), 0xff)
+ for s, style in self.stack: + style = self.black_white + if style != self.black_white: + self.output.StartStyling(self.output.GetLength(), 0xff) - # Temporary deactivate read only mode on StyledTextCtrl for
- # adding text. It seems that text modifications, even
- # programmatically, are disabled in StyledTextCtrl when read
- start_pos = self.output.GetLength()
- self.output.SetReadOnly(False)
- self.output.AppendText(s)
- self.output.SetReadOnly(True)
- text_len = self.output.GetLength() - start_pos
+ # Temporary deactivate read only mode on StyledTextCtrl for + # adding text. It seems that text modifications, even + # programmatically, are disabled in StyledTextCtrl when read + start_pos = self.output.GetLength() + self.output.SetReadOnly(False) + self.output.AppendText(s) + self.output.SetReadOnly(True) + text_len = self.output.GetLength() - start_pos - if style != self.black_white:
- self.output.SetStyling(text_len, style)
- self.LastRefreshTime = gettime()
- self.RefreshLock.release()
- if newtime - self.rising_timer > 1:
- self.risecall(self.output)
- self.rising_timer = newtime
+ if style != self.black_white: + self.output.SetStyling(text_len, style) + self.LastRefreshTime = gettime() + if newtime - self.rising_timer > 1: + self.risecall(self.output) + self.rising_timer = newtime + self.refreshPending = False def write_warning(self, s):
self.write(s, self.red_white)