Support ctrl+m/ctrl+w in voice chat panel.

This commit is contained in:
John Preston 2020-12-22 20:09:32 +04:00
parent c80da25450
commit ae6decf70b
7 changed files with 50 additions and 6 deletions

View File

@ -316,6 +316,7 @@ GroupPanel::GroupPanel(not_null<GroupCall*> call)
, _hangup(widget(), st::groupCallHangup) {
_layerBg->setStyleOverrides(&st::groupCallBox, &st::groupCallLayerBox);
_settings->setColorOverrides(_mute->colorOverrides());
_layerBg->setHideByBackgroundClick(true);
SubscribeToMigration(
_peer,
@ -337,6 +338,14 @@ bool GroupPanel::isActive() const {
&& !(_window->windowState() & Qt::WindowMinimized);
}
void GroupPanel::minimize() {
_window->setWindowState(_window->windowState() | Qt::WindowMinimized);
}
void GroupPanel::close() {
_window->close();
}
void GroupPanel::showAndActivate() {
if (_window->isHidden()) {
_window->show();

View File

@ -68,6 +68,8 @@ public:
~GroupPanel();
[[nodiscard]] bool isActive() const;
void minimize();
void close();
void showAndActivate();
void closeBeforeDestroy();

View File

@ -486,6 +486,25 @@ bool Instance::activateCurrentCall() {
return false;
}
bool Instance::minimizeCurrentActiveCall() {
if (inCall() && _currentCallPanel->isActive()) {
_currentCallPanel->minimize();
return true;
} else if (inGroupCall() && _currentGroupCallPanel->isActive()) {
_currentGroupCallPanel->minimize();
return true;
}
return false;
}
bool Instance::closeCurrentActiveCall() {
if (inGroupCall() && _currentGroupCallPanel->isActive()) {
_currentGroupCallPanel->close();
return true;
}
return false;
}
Call *Instance::currentCall() const {
return _currentCall.get();
}

View File

@ -55,6 +55,8 @@ public:
[[nodiscard]] bool hasActivePanel(
not_null<Main::Session*> session) const;
bool activateCurrentCall();
bool minimizeCurrentActiveCall();
bool closeCurrentActiveCall();
auto getVideoCapture()
-> std::shared_ptr<tgcalls::VideoCaptureInterface> override;
void requestPermissionsOrFail(Fn<void()> onSuccess, bool video = true);

View File

@ -221,6 +221,10 @@ void Panel::showAndActivate() {
_window->setFocus();
}
void Panel::minimize() {
_window->setWindowState(_window->windowState() | Qt::WindowMinimized);
}
void Panel::replaceCall(not_null<Call*> call) {
reinitWithCall(call);
updateControlsGeometry();

View File

@ -53,6 +53,7 @@ public:
[[nodiscard]] bool isActive() const;
void showAndActivate();
void minimize();
void replaceCall(not_null<Call*> call);
void closeBeforeDestroy();

View File

@ -915,18 +915,25 @@ bool Application::closeActiveWindow() {
if (hideMediaView()) {
return true;
}
if (const auto window = activeWindow()) {
window->close();
return true;
if (!calls().closeCurrentActiveCall()) {
if (const auto window = activeWindow()) {
if (window->widget()->isVisible()
&& window->widget()->isActive()) {
window->close();
return true;
}
}
}
return false;
}
bool Application::minimizeActiveWindow() {
hideMediaView();
if (const auto window = activeWindow()) {
window->minimize();
return true;
if (!calls().minimizeCurrentActiveCall()) {
if (const auto window = activeWindow()) {
window->minimize();
return true;
}
}
return false;
}