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

View File

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

View File

@ -486,6 +486,25 @@ bool Instance::activateCurrentCall() {
return false; 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 { Call *Instance::currentCall() const {
return _currentCall.get(); return _currentCall.get();
} }

View File

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

View File

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

View File

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

View File

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