@@ -194,12 +194,11 @@ def __init__(
194194 self ._label_shadow = label_shadow
195195 self ._container_shadow = container_shadow
196196 self ._komorebi_screen = None
197- self ._komorebi_focus_container = None
197+ self ._curr_focus_container = None
198+ self ._prev_focus_container = None
198199 self ._komorebi_windows = []
199200 self ._prev_workspace_index = None
200201 self ._curr_workspace_index = None
201- self ._prev_container_index = None
202- self ._curr_container_index = None
203202 self ._prev_window_index = None
204203 self ._curr_window_index = None
205204 self ._prev_num_windows = None
@@ -263,11 +262,11 @@ def _register_signals_and_events(self):
263262 def _reset (self ):
264263 self ._komorebi_state = None
265264 self ._komorebi_screen = None
265+ self ._curr_focus_container = None
266+ self ._prev_focus_container = None
266267 self ._komorebi_windows = []
267268 self ._prev_workspace_index = None
268269 self ._curr_workspace_index = None
269- self ._prev_container_index = None
270- self ._curr_container_index = None
271270 self ._prev_window_index = None
272271 self ._curr_window_index = None
273272 self ._window_buttons = []
@@ -290,10 +289,7 @@ def _on_komorebi_update_event(self, event: dict, state: dict) -> None:
290289
291290 if self ._update_komorebi_state (state ):
292291
293- if self ._show_only_stack :
294- self ._no_window_text .hide ()
295- else :
296- self ._hide_no_window_text ()
292+ self ._hide_no_window_text ()
297293
298294 if event ['type' ] in self ._window_focus_events or self ._has_active_window_index_changed ():
299295 try :
@@ -306,31 +302,23 @@ def _on_komorebi_update_event(self, event: dict, state: dict) -> None:
306302 except (IndexError , TypeError ):
307303 pass
308304
309- if event ['type' ] in self ._reset_buttons_events or self ._has_active_container_index_changed () or self ._has_active_workspace_index_changed ():
310- self ._window_buttons = []
305+ elif event ['type' ] in self ._reset_buttons_events or self ._has_active_container_changed () or self ._has_active_workspace_index_changed ():
306+ while len (self ._window_buttons ) > len (self ._komorebi_windows ):
307+ self ._try_remove_window_button (self ._window_buttons [- 1 ].window_index )
311308 self ._add_or_update_buttons ()
312309
313- if event ['type' ] == KomorebiEvent .TitleUpdate .value :
310+ elif event ['type' ] == KomorebiEvent .TitleUpdate .value :
314311 hwnd = event ['content' ][1 ]['hwnd' ]
315312 for window_btn in self ._window_buttons :
316313 window_btn_hwnd = self ._komorebi_windows [window_btn .window_index ]['hwnd' ]
317314 if window_btn_hwnd == hwnd :
318315 self ._update_button_label (window_btn )
319316 window_btn .update_icon (ignore_cache = True )
320-
321- if self ._has_number_of_windows_changed ():
322- for window_btn in self ._window_buttons :
323- try :
324- window = self ._komorebi_windows [window_btn .window_index ]
325- except IndexError :
326- self ._try_remove_window_button (window_btn .window_index )
327- self ._add_or_update_buttons ()
328317
329- if self ._show_only_stack :
330- if len (self ._window_buttons ) <= 1 :
331- self ._widget_container .hide ()
332- else :
333- self ._widget_container .show ()
318+ if self ._show_only_stack and len (self ._window_buttons ) <= 1 :
319+ self .hide ()
320+ else :
321+ self .show ()
334322
335323 else :
336324 self ._show_no_window_text ()
@@ -349,16 +337,15 @@ def _update_komorebi_state(self, komorebi_state: dict) -> bool:
349337 self ._komorebi_screen = self ._komorebic .get_screen_by_hwnd (self ._komorebi_state , self ._screen_hwnd )
350338 focused_workspace = self ._komorebic .get_focused_workspace (self ._komorebi_screen )
351339 focused_container = self ._komorebic .get_focused_container (focused_workspace , get_monocle = True )
352- self ._komorebi_focus_container = focused_container
353340 self ._komorebi_windows = self ._komorebic .get_windows (focused_container )
354341 focused_window = self ._komorebic .get_focused_window (focused_container )
355342
356343 if focused_workspace :
357344 self ._prev_workspace_index = self ._curr_workspace_index
358345 self ._curr_workspace_index = focused_workspace ['index' ]
359346 if focused_container :
360- self ._prev_container_index = self ._curr_container_index
361- self ._curr_container_index = focused_container [ 'index' ]
347+ self ._prev_focus_container = self ._curr_focus_container
348+ self ._curr_focus_container = focused_container
362349 if focused_window :
363350 self ._prev_window_index = self ._curr_window_index
364351 self ._curr_window_index = focused_window ['index' ]
@@ -369,14 +356,11 @@ def _update_komorebi_state(self, komorebi_state: dict) -> bool:
369356 except TypeError :
370357 return False
371358
372- def _has_number_of_windows_changed (self ):
373- return self ._prev_num_windows != self ._curr_num_windows and not self ._has_active_container_index_changed () and not self ._has_active_workspace_index_changed ()
374-
375359 def _has_active_window_index_changed (self ):
376- return self ._prev_window_index != self ._curr_window_index and not self ._has_active_container_index_changed () and not self ._has_active_workspace_index_changed ()
360+ return self ._prev_window_index != self ._curr_window_index and not self ._has_active_container_changed () and not self ._has_active_workspace_index_changed ()
377361
378- def _has_active_container_index_changed (self ):
379- return self ._prev_container_index != self ._curr_container_index and not self ._has_active_workspace_index_changed ()
362+ def _has_active_container_changed (self ):
363+ return self ._prev_focus_container != self ._curr_focus_container and not self ._has_active_workspace_index_changed ()
380364
381365 def _has_active_workspace_index_changed (self ):
382366 return self ._prev_workspace_index != self ._curr_workspace_index
@@ -429,7 +413,7 @@ def _add_or_update_buttons(self) -> None:
429413 self ._update_button_status (window_btn )
430414
431415 def _get_window_label (self , window_index ):
432- window = self ._komorebic .get_window_by_index (self ._komorebi_focus_container , window_index )
416+ window = self ._komorebic .get_window_by_index (self ._curr_focus_container , window_index )
433417 w_index = window_index if self ._label_zero_index else window_index + 1
434418 process_name = window ['exe' ].removesuffix ('.exe' ).removesuffix ('.EXE' )
435419 default_label = self ._label_window .format (
@@ -464,7 +448,8 @@ def _try_add_window_button(self, window_index: int) -> WindowButton:
464448
465449 def _try_remove_window_button (self , window_index : int ) -> None :
466450 with suppress (IndexError ):
467- self ._window_buttons [window_index ].hide ()
451+ self ._window_buttons [window_index ].setParent (None )
452+ self ._widget_container_layout .removeWidget (self ._window_buttons [window_index ])
468453 self ._window_buttons .pop (window_index )
469454
470455 def _show_offline_status (self ):
@@ -476,8 +461,11 @@ def _hide_offline_status(self):
476461 self ._widget_container .show ()
477462
478463 def _show_no_window_text (self ):
479- self ._no_window_text .show ()
480- self ._widget_container .hide ()
464+ if self ._no_window_text .text ():
465+ self ._no_window_text .show ()
466+ self ._widget_container .hide ()
467+ else :
468+ self .hide ()
481469
482470 def _hide_no_window_text (self ):
483471 self ._no_window_text .hide ()
@@ -492,7 +480,7 @@ def wheelEvent(self, event):
492480 # Determine direction (consider reverse_scroll_direction setting)
493481 direction = - 1 if (delta > 0 ) != self ._reverse_scroll_direction else 1
494482
495- windows = self ._komorebic .get_windows (self ._komorebi_focus_container )
483+ windows = self ._komorebic .get_windows (self ._curr_focus_container )
496484 if not windows :
497485 return
498486
0 commit comments