diff --git a/src/xpra/client/gtk_base/gtk_client_window_base.py b/src/xpra/client/gtk_base/gtk_client_window_base.py index f98841a378..6a9238c2e5 100644 --- a/src/xpra/client/gtk_base/gtk_client_window_base.py +++ b/src/xpra/client/gtk_base/gtk_client_window_base.py @@ -226,7 +226,7 @@ def init_window(self, metadata): self.connect_after("realize", self.on_realize) self.connect('unrealize', self.on_unrealize) self.add_events(self.WINDOW_EVENT_MASK) - if DRAGNDROP: + if DRAGNDROP and not self._client.readonly: self.init_dragndrop() self.init_focus() ClientWindowBase.init_window(self, metadata) @@ -781,6 +781,9 @@ def window_state_updated(self, widget, event): self.update_window_state(state_updates) def update_window_state(self, state_updates): + if self._client.readonly: + log("update_window_state(%s) ignored in readonly mode", state_updates) + return if state_updates.get("maximized") is False or state_updates.get("fullscreen") is False: #if we unfullscreen or unmaximize, re-calculate offsets if we have any: w, h = self._backing.render_size @@ -842,6 +845,8 @@ def cancel_window_state_timer(self): def schedule_send_iconify(self): #calculate a good delay to prevent races causing minimize/unminimize loops: + if self._client.readonly: + return delay = 150 spl = tuple(self._client.server_ping_latency) if spl: