def do_activate(self): self.staticon = Gtk.StatusIcon() # FIXME: Support a scalable image! self.read_pix = Liferea.icon_create_from_file("available.png") self.unread_pix = Liferea.icon_create_from_file("unread.png") self.staticon.set_from_pixbuf( Liferea.icon_create_from_file("unread.png")) self.staticon.connect("activate", self.trayicon_click) self.staticon.connect("popup_menu", self.trayicon_popup) self.staticon.connect("size-changed", self.trayicon_size_changed) self.staticon.set_visible(True) self.menu = Gtk.Menu() menuitem_toggle = Gtk.MenuItem("Show / Hide") menuitem_close_behavior = Gtk.CheckMenuItem( "Minimize to tray on close") menuitem_quit = Gtk.MenuItem("Quit") self.config_path = self.get_config_path() self.min_enabled = self.get_config() if self.min_enabled == "True": menuitem_close_behavior.set_active(True) else: menuitem_close_behavior.set_active(False) menuitem_toggle.connect("activate", self.trayicon_toggle) menuitem_close_behavior.connect("toggled", self.trayicon_close_behavior) menuitem_quit.connect("activate", self.trayicon_quit) self.menu.append(menuitem_toggle) self.menu.append(menuitem_close_behavior) self.menu.append(menuitem_quit) self.menu.show_all() self.window = self.shell.get_window() self.delete_signal_id = GObject.signal_lookup("delete_event", Gtk.Window) GObject.signal_handlers_block_matched( self.window, GObject.SignalMatchType.ID | GObject.SignalMatchType.DATA, self.delete_signal_id, 0, None, None, None) self.window.connect("delete_event", self.trayicon_close_action) self.window.connect("window-state-event", self.window_state_event_cb) # show the window if it is hidden when starting liferea self.window.deiconify() self.window.show() feedlist = self.shell.props.feed_list self.feedlist_new_items_cb(feedlist) sigid = feedlist.connect("new-items", self.feedlist_new_items_cb) self.feedlist_new_items_cb_id = sigid self.feedlist = feedlist
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 do_activate(self): self.staticon = Gtk.StatusIcon () # FIXME: Support a scalable image! self.read_pix = Liferea.icon_create_from_file ("available.png") self.unread_pix = Liferea.icon_create_from_file ("unread.png") self.staticon.set_from_pixbuf(Liferea.icon_create_from_file("unread.png")) self.staticon.connect("activate", self.trayicon_click) self.staticon.connect("popup_menu", self.trayicon_popup) self.staticon.connect("size-changed", self.trayicon_size_changed) self.staticon.set_visible(True) self.menu = Gtk.Menu() menuitem_toggle = Gtk.MenuItem("Show / Hide") menuitem_quit = Gtk.MenuItem("Quit") menuitem_toggle.connect("activate", self.trayicon_toggle) menuitem_quit.connect("activate", self.trayicon_quit) self.menu.append(menuitem_toggle) self.menu.append(menuitem_quit) self.menu.show_all() self.window = self.shell.get_window() self.delete_signal_id = GObject.signal_lookup("delete_event", Gtk.Window) GObject.signal_handlers_block_matched (self.window, GObject.SignalMatchType.ID | GObject.SignalMatchType.DATA, self.delete_signal_id, 0, None, None, None) self.window.connect("delete_event", self.trayicon_minimize_on_close) self.window.connect("window-state-event", self.window_state_event_cb) # show the window if it is hidden when starting liferea self.window.deiconify() self.window.show() feedlist = self.shell.props.feed_list self.feedlist_new_items_cb(feedlist) sigid = feedlist.connect("new-items", self.feedlist_new_items_cb) self.feedlist_new_items_cb_id = sigid self.feedlist = feedlist
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)