def _on_window_opened(self, screen, window): workspace = Wnck.Window.get_workspace(window) if workspace: self.workspaces[workspace].append(window) GObject.signal_connect_closure( window, "geometry-changed", self._geometry_changed, True) GObject.signal_connect_closure( window, "workspace-changed", self._update_workspace, True)
def test_signal_handler_block_matching(self): def dummy(*args): "Hack to work around: " def foo(obj): obj.status += 1 obj = self.Object() handler_id = GObject.signal_connect_closure(obj, 'my-signal', foo, after=False) handler_id self.assertEqual(obj.status, 0) obj.emit('my-signal') self.assertEqual(obj.status, 1) # Blocking by match criteria disables the foo callback signal_id, detail = GObject.signal_parse_name('my-signal', obj, True) count = GObject.signal_handlers_block_matched( obj, GObject.SignalMatchType.ID | GObject.SignalMatchType.CLOSURE, signal_id=signal_id, detail=detail, closure=foo, func=dummy, data=dummy) self.assertEqual(count, 1) obj.emit('my-signal') self.assertEqual(obj.status, 1) # Unblocking by the same match criteria allows callback to work again count = GObject.signal_handlers_unblock_matched( obj, GObject.SignalMatchType.ID | GObject.SignalMatchType.CLOSURE, signal_id=signal_id, detail=detail, closure=foo, func=dummy, data=dummy) self.assertEqual(count, 1) obj.emit('my-signal') self.assertEqual(obj.status, 2) # Disconnecting by match criteria completely removes the handler count = GObject.signal_handlers_disconnect_matched( obj, GObject.SignalMatchType.ID | GObject.SignalMatchType.CLOSURE, signal_id=signal_id, detail=detail, closure=foo, func=dummy, data=dummy) self.assertEqual(count, 1) obj.emit('my-signal') self.assertEqual(obj.status, 2)
def test_signal_handler_find(self): def foo(obj): obj.status += 1 obj = self.Object() handler_id = GObject.signal_connect_closure(obj, 'my-signal', foo, after=False) signal_id, detail = GObject.signal_parse_name('my-signal', obj, True) found_id = GObject.signal_handler_find(obj, GObject.SignalMatchType.ID, signal_id=signal_id, detail=detail, closure=None, func=0, data=0) self.assertEqual(handler_id, found_id)
def test_signal_handler_find(self): def foo(obj): obj.status += 1 obj = self.Object() handler_id = GObject.signal_connect_closure(obj, 'my-signal', foo, after=False) signal_id, detail = GObject.signal_parse_name('my-signal', obj, True) found_id = GObject.signal_handler_find(obj, GObject.SignalMatchType.ID, signal_id=signal_id, detail=detail, closure=None, func=0, data=0) self.assertEqual(handler_id, found_id)
def test_signal_handler_block_matching(self): def dummy(*args): "Hack to work around: " def foo(obj): obj.status += 1 obj = self.Object() handler_id = GObject.signal_connect_closure(obj, 'my-signal', foo, after=False) handler_id self.assertEqual(obj.status, 0) obj.emit('my-signal') self.assertEqual(obj.status, 1) # Blocking by match criteria disables the foo callback signal_id, detail = GObject.signal_parse_name('my-signal', obj, True) count = GObject.signal_handlers_block_matched(obj, GObject.SignalMatchType.ID | GObject.SignalMatchType.CLOSURE, signal_id=signal_id, detail=detail, closure=foo, func=dummy, data=dummy) self.assertEqual(count, 1) obj.emit('my-signal') self.assertEqual(obj.status, 1) # Unblocking by the same match criteria allows callback to work again count = GObject.signal_handlers_unblock_matched(obj, GObject.SignalMatchType.ID | GObject.SignalMatchType.CLOSURE, signal_id=signal_id, detail=detail, closure=foo, func=dummy, data=dummy) self.assertEqual(count, 1) obj.emit('my-signal') self.assertEqual(obj.status, 2) # Disconnecting by match criteria completely removes the handler count = GObject.signal_handlers_disconnect_matched(obj, GObject.SignalMatchType.ID | GObject.SignalMatchType.CLOSURE, signal_id=signal_id, detail=detail, closure=foo, func=dummy, data=dummy) self.assertEqual(count, 1) obj.emit('my-signal') self.assertEqual(obj.status, 2)
def connect_signals(self): GObject.signal_connect_closure( self.screen, "active-window-changed", self._on_active_window_changed, True) GObject.signal_connect_closure( self.screen, "active-workspace-changed", self._on_active_workspace_changed, True) GObject.signal_connect_closure( self.screen, "window-closed", self._on_window_closed, True) GObject.signal_connect_closure( self.screen, "window-opened", self._on_window_opened, True) GObject.signal_connect_closure( self.screen, "workspace-created", self._on_workspace_created, True) GObject.signal_connect_closure( self.screen, "workspace-destroyed", self._on_workspace_destroyed, True)