diff --git a/status-applets/mate/mate-xapp-status-applet.py b/status-applets/mate/mate-xapp-status-applet.py index 32cbb88..b26d5f2 100755 --- a/status-applets/mate/mate-xapp-status-applet.py +++ b/status-applets/mate/mate-xapp-status-applet.py @@ -56,6 +56,10 @@ return Gtk.PositionType.LEFT class StatusWidget(Gtk.ToggleButton): + __gsignals__ = { + "re-sort": (GObject.SignalFlags.RUN_LAST, None, ()) + } + def __init__(self, icon, orientation, size): super(Gtk.ToggleButton, self).__init__() self.theme = Gtk.IconTheme.get_default() @@ -108,6 +112,7 @@ print("Could not read metadata: %s" % e) self.proxy.connect("notify::icon-name", self._on_icon_name_changed) + self.proxy.connect("notify::name", self._on_name_changed) self.in_widget = False self.plain_surface = None @@ -126,6 +131,9 @@ def _on_icon_name_changed(self, proxy, gparamspec, data=None): self.update_icon() + + def _on_name_changed(self, proxy, gparamspec, data=None): + self.emit("re-sort") def update_icon(self): string = self.proxy.props.icon_name @@ -376,6 +384,7 @@ self.indicators[name] = StatusWidget(proxy, self.applet.get_orient(), self.applet.get_size()) self.indicator_box.add(self.indicators[name]) + self.indicators[name].connect("re-sort", self.sort_icons) self.sort_icons() @@ -383,6 +392,7 @@ name = proxy.get_name() self.indicator_box.remove(self.indicators[name]) + self.indicators[name].disconnect_by_func(self.sort_icons) del(self.indicators[name]) self.sort_icons() @@ -425,7 +435,7 @@ self.indicator_box.queue_resize() - def sort_icons(self): + def sort_icons(self, status_widget=None): icon_list = list(self.indicators.values()) # for i in icon_list: diff --git a/test-scripts/xapp-status-applet b/test-scripts/xapp-status-applet index 975b0e8..e5f6d2a 100755 --- a/test-scripts/xapp-status-applet +++ b/test-scripts/xapp-status-applet @@ -11,6 +11,9 @@ DBUS_PATH = "/org/x/StatusIcon" class StatusWidget(Gtk.ToggleButton): + __gsignals__ = { + "re-sort": (GObject.SignalFlags.RUN_LAST, None, ()) + } def __init__(self, icon): super(Gtk.ToggleButton, self).__init__() @@ -42,6 +45,7 @@ self.proxy.bind_property("secondary-menu-is-open", self, "active", flags) self.proxy.connect("notify::icon-name", self.on_icon_name_changed) + self.proxy.connect("notify::name", self.on_name_changed) self.connect("button-press-event", self.on_button_press) self.connect("button-release-event", self.on_button_release) @@ -51,6 +55,9 @@ string = self.proxy.props.icon_name self.set_icon(string) + + def on_name_changed(self, proxy, gparamspec, data=None): + self.emit("re-sort") def set_icon(self, string): if string: @@ -164,6 +171,7 @@ self.indicators[name] = StatusWidget(proxy) self.indicator_box.add(self.indicators[name]) + self.indicators[name].connect("re-sort", self.sort_icons) self.sort_icons() @@ -171,6 +179,7 @@ name = proxy.get_name() self.indicator_box.remove(self.indicators[name]) + self.indicators[name].disconnect_by_func(self.sort_icons) del(self.indicators[name]) self.sort_icons()