diff --git a/src/aare/gui/widgets/status_bar.py b/src/aare/gui/widgets/status_bar.py
index d7f046ff..c24fc8b8 100644
--- a/src/aare/gui/widgets/status_bar.py
+++ b/src/aare/gui/widgets/status_bar.py
@@ -210,6 +210,10 @@ class StatusBar(QStatusBar):
session_flag = """ Owned ⬤ """
elif status.session.session == SessionsStateEnum.OwnedByElse:
session_flag = """ Other 🔒 """
+ elif status.session.session == SessionsStateEnum.PendingYouToElse:
+ session_flag = """ Waiting... ⏳ """
+ elif status.session.session == SessionsStateEnum.PendingElseToYou:
+ session_flag = """ Request! ⚡ """
html_content_session = f"""Session: {session_flag}"""
self.session_label.setText(html_content_session)
@@ -272,15 +276,18 @@ class StatusBar(QStatusBar):
# Base text
if session_state == SessionsStateEnum.OwnedByYou:
text = "Session: You"
- if self._baton_status and self._baton_status.incoming_request:
- text = "Session: You (⚡ Request)"
+ elif session_state == SessionsStateEnum.PendingElseToYou:
+ text = "Session: You (⚡ Request)"
elif session_state == SessionsStateEnum.OwnedByElse:
holder_name = ""
if self._baton_status and self._baton_status.holder:
holder_name = self._baton_status.holder.username
text = f"Session: {holder_name or 'Other'}"
- if self._has_pending_request:
- text += " (⏳ Waiting)"
+ elif session_state == SessionsStateEnum.PendingYouToElse:
+ holder_name = ""
+ if self._baton_status and self._baton_status.holder:
+ holder_name = self._baton_status.holder.username
+ text = f"Session: {holder_name or 'Other'} (⏳ Waiting)"
else:
text = "Session: Vacant"
@@ -289,9 +296,16 @@ class StatusBar(QStatusBar):
def show_session_menu(self):
menu = QMenu(self)
is_busy = self.__status and self.__status.busy
- is_vacant = self.__status and self.__status.session.session == SessionsStateEnum.Vacant
- is_yours = self.__status and self.__status.session.session == SessionsStateEnum.OwnedByYou
- is_other = self.__status and self.__status.session.session == SessionsStateEnum.OwnedByElse
+ session_state = self.__status.session.session if self.__status else SessionsStateEnum.Vacant
+ # Determine if we are the holder or waiting for baton
+ is_yours = session_state in (SessionsStateEnum.OwnedByYou, SessionsStateEnum.PendingElseToYou)
+ # Check baton status for fallback if status.session is not yet updated
+ if not is_yours and self._baton_status:
+ is_yours = self._baton_status.you_are_holder or self._baton_status.incoming_request
+
+ is_vacant = session_state == SessionsStateEnum.Vacant
+ is_other = session_state in (SessionsStateEnum.OwnedByElse, SessionsStateEnum.PendingYouToElse)
+ has_pending = session_state == SessionsStateEnum.PendingYouToElse
# Determine holder info from baton status
holder_is_staff = (
@@ -308,7 +322,7 @@ class StatusBar(QStatusBar):
action_grab.triggered.connect(self._on_grab_clicked)
elif is_other:
# Someone else has it
- if self._has_pending_request:
+ if has_pending:
# Already have a pending request - show cancel option
action_cancel = menu.addAction("Cancel Request")
action_cancel.triggered.connect(self._on_cancel_request_clicked)
@@ -332,14 +346,18 @@ class StatusBar(QStatusBar):
elif is_yours:
# You have it - show release option
action_release = menu.addAction("Release")
- action_release.setEnabled(not is_busy)
+ action_release.setEnabled(True) # Always allow release
action_release.triggered.connect(self._on_release_clicked)
+ if session_state == SessionsStateEnum.PendingElseToYou:
+ action_accept = menu.addAction("Accept Request")
+ action_accept.triggered.connect(self._on_baton_dialog_accepted)
+
menu.addSeparator()
# --- END SESSION (cleanup) ---
action_end = menu.addAction("End Session")
- action_end.setEnabled(bool((is_yours and not is_busy) or self.__is_staff))
+ action_end.setEnabled(bool(is_yours or self.__is_staff))
action_end.triggered.connect(self.end_session_clicked)
# --- STAFF: FORCE GRAB (emergency) ---
@@ -472,9 +490,8 @@ class StatusBar(QStatusBar):
pgroups=pgroups,
parent=self,
)
-
+ selected_pgroup = self._pgroup_dialog_for_baton.get_input()
if self._pgroup_dialog_for_baton.exec() == QDialog.DialogCode.Accepted:
- selected_pgroup = self._pgroup_dialog_for_baton.get_input()
if selected_pgroup:
self.set_pgroup.emit(selected_pgroup)