def test_event_routing(self): w1 = self.window() w2 = self.window() w2.reparent(w1, 0, 0) results = set() r1 = _EventRoutingReceiver(1, results) r2 = _EventRoutingReceiver(2, results) r3 = _EventRoutingReceiver(3, results) r4 = _EventRoutingReceiver(4, results) l.add_event_receiver(w1, r1) l.add_event_receiver(w1, r2) l.add_event_receiver(w2, r3) l.add_event_receiver(w2, r4) w1.set_events(gtk.gdk.SUBSTRUCTURE_MASK) w2.set_events(gtk.gdk.STRUCTURE_MASK) w2.show() while len(results) != 4: gtk.main() w2.hide() assert results == set([("child-map", 1), ("child-map", 2), ("map", 3), ("map", 4)]) l.remove_event_receiver(w1, r2) l.remove_event_receiver(w2, r4) results.clear() w2.show() while len(results) != 2: gtk.main() assert results == set([("child-map", 1), ("map", 3)])
def destroy(self): self.keymap.disconnect(self.keymap_id) self.keymap = None self.keymap_id = None trap.swallow(self.unbind_all) remove_event_receiver(self.window, self) self.window = None
def destroy(self): if not self._already_composited: trap.swallow(xcomposite_unredirect_window, self._window) trap.swallow(xdamage_stop, self._window, self._damage_handle) self._damage_handle = None self._contents_handle = None self.invalidate_pixmap() remove_event_receiver(self._window, self) self._window = None
def invalidate_pixmap(self): log("invalidating named pixmap", type="pixmap") if self._listening_to is not None: # Don't want to stop listening to self._window!: assert self._window not in self._listening_to for w in self._listening_to: remove_event_receiver(w, self) self._listening_to = None self._contents_handle = None
def destroy(self): if self._window is None: log.warn("composite window %s already destroyed!", self) return #clear the reference to the window early: win = self._window #Note: invalidate_pixmap()/_cleanup_listening() use self._window, but won't care if it's None self._window = None remove_event_receiver(win, self) self.invalidate_pixmap() if not self._already_composited: trap.swallow_synced(xcomposite_unredirect_window, win) if self._damage_handle: trap.swallow_synced(xdamage_stop, win, self._damage_handle) self._damage_handle = None #note: this should be redundant since we cleared the #reference to self._window and shortcut out in do_get_property_contents_handle #but it's cheap anyway self.invalidate_pixmap()
def cleanup(self): log("Tray.cleanup()") root = gtk.gdk.get_default_root_window() owner = myGetSelectionOwner(root, SELECTION) if owner==get_xwindow(self.tray_window): mySetSelectionOwner(root, const["XNone"], SELECTION) else: log.warn("Tray.cleanup() we were no longer the selection owner") remove_event_receiver(self.tray_window, self) def undock(window): log("undocking %s", window) withdraw(window) reparent(window, root, 0, 0) map_raised(window) for window, tray_window in self.tray_windows.items(): trap.swallow_synced(undock, window) tray_window.destroy() self.tray_window.destroy() self.tray_window = None log("Tray.cleanup() done")
def do_wimpiggy_destroy_event(self, event): remove_event_receiver(event.window, self) gtk.main_quit()
def _cleanup_listening(self, listening): # Don't want to stop listening to self._window!: if self._listening_to: assert self._window not in self._listening_to for w in self._listening_to: remove_event_receiver(w, self)
def _cleanup_listening(self, listening): if listening: # Don't want to stop listening to self._window!: assert self._window is None or self._window not in listening for w in listening: remove_event_receiver(w, self)
def _cleanup_listening(self, listening): # Don't want to stop listening to self._window!: assert self._window not in self._listening_to for w in self._listening_to: remove_event_receiver(w, self)