From a64e5e6b9ffc1887203e9d38ebf5838123464162 Mon Sep 17 00:00:00 2001 From: piotr Date: Tue, 14 Mar 2023 01:47:28 +0100 Subject: [PATCH] revert #184 --- nwg_panel/modules/sway_workspaces.py | 134 ++++++++++----------------- 1 file changed, 48 insertions(+), 86 deletions(-) diff --git a/nwg_panel/modules/sway_workspaces.py b/nwg_panel/modules/sway_workspaces.py index 42aa594f..26480ed0 100644 --- a/nwg_panel/modules/sway_workspaces.py +++ b/nwg_panel/modules/sway_workspaces.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -from gi.repository import Gtk, GdkPixbuf, Gdk +from gi.repository import Gtk, GdkPixbuf import nwg_panel.common from nwg_panel.tools import check_key, get_icon_name, update_image, load_autotiling @@ -11,7 +11,6 @@ def __init__(self, settings, i3, icons_path): Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL, spacing=0) self.settings = settings self.i3 = i3 - self.num_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=0) self.ws_num2box = {} self.ws_num2lbl = {} self.name_label = Gtk.Label() @@ -24,7 +23,7 @@ def __init__(self, settings, i3, icons_path): self.build_box() def build_box(self): - check_key(self.settings, "numbers", []) + check_key(self.settings, "numbers", [1, 2, 3, 4, 5, 6, 7, 8]) check_key(self.settings, "custom-labels", []) check_key(self.settings, "focused-labels", []) check_key(self.settings, "show-icon", True) @@ -33,7 +32,6 @@ def build_box(self): check_key(self.settings, "name-length", 40) check_key(self.settings, "mark-autotiling", True) check_key(self.settings, "mark-content", True) - check_key(self.settings, "hide-empty", False) check_key(self.settings, "show-layout", True) check_key(self.settings, "angle", 0.0) if self.settings["angle"] != 0.0: @@ -42,21 +40,32 @@ def build_box(self): # prevent from #142 ws_num = -1 if self.i3.get_tree().find_focused(): - ws_num, win_name, win_id, non_empty, win_layout, numbers = self.find_details() - - if len(self.settings["custom-labels"]) == 1 or len(self.settings["custom-labels"]) == len(self.settings["numbers"]): + ws_num, win_name, win_id, non_empty, win_layout = self.find_details() + + if len(self.settings["custom-labels"]) == 1 or len(self.settings["custom-labels"]) == len( + self.settings["numbers"]): self.settings["custom-labels"] *= len(self.settings["numbers"]) else: self.settings["custom-labels"] = [] - - if len(self.settings["focused-labels"]) == 1 or len(self.settings["focused-labels"]) == len(self.settings["numbers"]): + + if len(self.settings["focused-labels"]) == 1 or len(self.settings["focused-labels"]) == len( + self.settings["numbers"]): self.settings["focused-labels"] *= len(self.settings["numbers"]) else: self.settings["focused-labels"] = [] - self.pack_start(self.num_box, False, False, 0) - for idx, num in enumerate(self.settings["numbers"]): + eb = Gtk.EventBox() + eb.connect("enter_notify_event", self.on_enter_notify_event) + eb.connect("leave_notify_event", self.on_leave_notify_event) + eb.connect("button-release-event", self.on_click, num) + self.pack_start(eb, False, False, 0) + + box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=0) + if self.settings["angle"] != 0.0: + box.set_orientation(Gtk.Orientation.VERTICAL) + eb.add(box) + if num == str(ws_num) and self.settings["focused-labels"]: label = self.settings["focused-labels"][idx] elif self.settings["custom-labels"]: @@ -64,8 +73,23 @@ def build_box(self): else: label = str(num) - eb, lbl = self.build_number(num, label) - self.num_box.pack_start(eb, False, False, 0) + if self.settings["mark-autotiling"]: + try: + at = int(num) in self.autotiling + except: + at = False + autotiling = "a" if at in self.autotiling else "" + lbl = Gtk.Label("{}{}".format(autotiling, label)) + else: + lbl = Gtk.Label("{}".format(label)) + if self.settings["angle"] != 0.0: + lbl.set_angle(self.settings["angle"]) + self.name_label.set_angle(self.settings["angle"]) + + self.ws_num2box[num] = eb + self.ws_num2lbl[num] = lbl + + box.pack_start(lbl, False, False, 6) if num == str(ws_num): eb.set_property("name", "task-box-focused") @@ -81,89 +105,34 @@ def build_box(self): if self.settings["show-layout"]: self.pack_start(self.layout_icon, False, False, 6) - def build_number(self, num, label): - eb = Gtk.EventBox() - eb.connect("enter_notify_event", self.on_enter_notify_event) - eb.connect("leave_notify_event", self.on_leave_notify_event) - eb.connect("button-release-event", self.on_click, num) - eb.add_events(Gdk.EventMask.SCROLL_MASK) - eb.connect('scroll-event', self.on_scroll) - - box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=0) - if self.settings["angle"] != 0.0: - box.set_orientation(Gtk.Orientation.VERTICAL) - eb.add(box) - - if self.settings["mark-autotiling"]: - try: - at = int(num) in self.autotiling - except: - at = False - autotiling = "a" if at in self.autotiling else "" - lbl = Gtk.Label("{}{}".format(autotiling, label)) - else: - lbl = Gtk.Label("{}".format(label)) - if self.settings["angle"] != 0.0: - lbl.set_angle(self.settings["angle"]) - self.name_label.set_angle(self.settings["angle"]) - - self.ws_num2box[num] = eb - self.ws_num2lbl[num] = lbl - - box.pack_start(lbl, False, False, 6) - - return eb, lbl - def refresh(self): if self.i3.get_tree().find_focused(): - ws_num, win_name, win_id, non_empty, win_layout, numbers = self.find_details() - - if len(self.settings["numbers"]) > 0: - numbers = self.settings["numbers"] + ws_num, win_name, win_id, non_empty, win_layout = self.find_details() if ws_num > 0: - for num in self.ws_num2lbl: - self.ws_num2lbl[num].hide() - - for _idx, num in enumerate(numbers): - idx = None - if num in self.settings["numbers"]: - idx = self.settings["numbers"].index(num) - try: - int_num = int(num) - except: - int_num = 0 - - if idx is None: - text = str(num) - elif num == str(ws_num) and self.settings["focused-labels"]: + for idx, num in enumerate(self.settings["numbers"]): + if num == str(ws_num) and self.settings["focused-labels"]: text = self.settings["focused-labels"][idx] elif self.settings["custom-labels"]: text = self.settings["custom-labels"][idx] else: text = str(num) - if num not in self.ws_num2lbl: - eb, lbl = self.build_number(num, text) - self.num_box.pack_start(eb, False, False, 0) - eb.show_all() - lbl = self.ws_num2lbl[num] - if not self.settings["hide-empty"] or int_num in non_empty or num == str(ws_num): - lbl.show() - else: - lbl.hide() - # mark non-empty WS with a dot if self.settings["mark-content"]: + try: + int_num = int(num) + except: + int_num = 0 if int_num in non_empty: if not text.endswith("."): text += "." else: if text.endswith("."): text = text[0:-1] - + lbl.set_text(text) if num == str(ws_num): @@ -228,12 +197,11 @@ def find_details(self): win_name = "" win_id = "" # app_id if available, else window_class layout = None - numbers = [] for ws in workspaces: - numbers.append(str(ws.num)) if ws.focused: ws_num = ws.num + break non_empty = [] if self.settings["show-name"] or self.settings["show-icon"]: @@ -249,7 +217,7 @@ def find_details(self): for item in tree.descendants(): if item.type == "workspace": # find non-empty workspaces - if self.settings["mark-content"] or self.settings["hide-empty"]: + if self.settings["mark-content"]: tasks_num = 0 for d in item.descendants(): if d.type == "con" and d.name: @@ -273,17 +241,11 @@ def find_details(self): if not layout: layout = f.parent.layout - return ws_num, win_name, win_id, non_empty, layout, numbers + return ws_num, win_name, win_id, non_empty, layout def on_click(self, event_box, event_button, num): nwg_panel.common.i3.command("workspace number {}".format(num)) - def on_scroll(self, event_box, event): - if event.direction == Gdk.ScrollDirection.UP: - nwg_panel.common.i3.command("workspace prev") - elif event.direction == Gdk.ScrollDirection.DOWN: - nwg_panel.common.i3.command("workspace next") - def on_enter_notify_event(self, widget, event): widget.set_state_flags(Gtk.StateFlags.DROP_ACTIVE, clear=False) widget.set_state_flags(Gtk.StateFlags.SELECTED, clear=False)