summaryrefslogtreecommitdiffstats
path: root/pica-client/audiovideocallcontroller.cpp
diff options
context:
space:
mode:
authorAnton <anton@picapica.im>2026-08-09 14:30:20 +0400
committerAnton <anton@picapica.im>2026-08-09 14:30:20 +0400
commit4bfdcf3288b921c7a648dc1f85754ee4482c24d5 (patch)
treea432e80cba02277b3a376fc4d19e767335ac04d7 /pica-client/audiovideocallcontroller.cpp
parent3fcb0660953fbf222b6cbe5e08c2b0488b7b68f8 (diff)
downloadpica-pica-4bfdcf3288b921c7a648dc1f85754ee4482c24d5.tar.gz
pica-pica-4bfdcf3288b921c7a648dc1f85754ee4482c24d5.zip
pica-client: fix CallWindow only being usable for the first call
AudioVideoCallController never cleared its callwindow pointer after a call ended, so start_call()/call_from() would see it as non-null forever and silently refuse every subsequent call. CallWindow now sets WA_DeleteOnClose and emits callwindow_closed() from closeEvent(), mirroring the ChatWindow/MsgUIRouter pattern. The controller resets its pointer to 0 in response, and end_call() closes the window once the hangup/reject has been handled.
Diffstat (limited to 'pica-client/audiovideocallcontroller.cpp')
-rw-r--r--pica-client/audiovideocallcontroller.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/pica-client/audiovideocallcontroller.cpp b/pica-client/audiovideocallcontroller.cpp
index d9b6571..4e23a96 100644
--- a/pica-client/audiovideocallcontroller.cpp
+++ b/pica-client/audiovideocallcontroller.cpp
@@ -124,6 +124,7 @@ void AudioVideoCallController::start_call(QByteArray peer_id)
callwindow = new CallWindow(peer_id, false);
connect(callwindow, SIGNAL(start_call_pressed()), this, SLOT(initiate_call()));
connect(callwindow, SIGNAL(hang_call_pressed()), this, SLOT(end_call()));
+ connect(callwindow, SIGNAL(callwindow_closed(CallWindow*)), this, SLOT(callwindow_closed(CallWindow*)));
callwindow->show();
}
@@ -140,6 +141,7 @@ void AudioVideoCallController::call_from(QByteArray peer_id)
callwindow = new CallWindow(peer_id, true);
connect(callwindow, SIGNAL(accept_call_pressed()), this, SLOT(accept_call()));
connect(callwindow, SIGNAL(hang_call_pressed()), this, SLOT(end_call()));
+ connect(callwindow, SIGNAL(callwindow_closed(CallWindow*)), this, SLOT(callwindow_closed(CallWindow*)));
callwindow->show();
/* play ring tone */
@@ -167,5 +169,12 @@ void AudioVideoCallController::end_call()
skynet->HangupCall(m_peer_id);
else
skynet->RejectCall(m_peer_id);
+
+ callwindow->close();
+}
+
+void AudioVideoCallController::callwindow_closed(CallWindow *sender_window)
+{
+ callwindow = 0;
}