diff --git a/Telegram/SourceFiles/window/window_title_qt.cpp b/Telegram/SourceFiles/window/window_title_qt.cpp index d9703107f6..6d89f14a41 100644 --- a/Telegram/SourceFiles/window/window_title_qt.cpp +++ b/Telegram/SourceFiles/window/window_title_qt.cpp @@ -110,6 +110,16 @@ bool TitleWidgetQt::hasShadow() const { && Ui::Platform::TranslucentWindowsSupported(center); } +Ui::IconButton *TitleWidgetQt::controlWidget(Control control) const { + switch (control) { + case Control::Minimize: return _minimize; + case Control::Maximize: return _maximizeRestore; + case Control::Close: return _close; + } + + return nullptr; +} + void TitleWidgetQt::paintEvent(QPaintEvent *e) { auto active = isActiveWindow(); if (_activeState != active) { @@ -141,22 +151,24 @@ void TitleWidgetQt::updateControlsPosition() { const auto controlsLeft = controlsLayout.left; const auto controlsRight = controlsLayout.right; - if (ranges::contains(controlsLeft, Control::Minimize) - || ranges::contains(controlsRight, Control::Minimize)) { + const auto controlPresent = [&](Control control) { + return ranges::contains(controlsLeft, control) + || ranges::contains(controlsRight, control); + }; + + if (controlPresent(Control::Minimize)) { _minimize->show(); } else { _minimize->hide(); } - if (ranges::contains(controlsLeft, Control::Maximize) - || ranges::contains(controlsRight, Control::Maximize)) { + if (controlPresent(Control::Maximize)) { _maximizeRestore->show(); } else { _maximizeRestore->hide(); } - if (ranges::contains(controlsLeft, Control::Close) - || ranges::contains(controlsRight, Control::Close)) { + if (controlPresent(Control::Close)) { _close->show(); } else { _close->hide(); @@ -175,35 +187,18 @@ void TitleWidgetQt::updateControlsPositionBySide( auto position = 0; for (const auto &control : preparedControls) { - switch (control) { - case Control::Minimize: - if (right) { - _minimize->moveToRight(position, 0); - } else { - _minimize->moveToLeft(position, 0); - } - - position += _minimize->width(); - break; - case Control::Maximize: - if (right) { - _maximizeRestore->moveToRight(position, 0); - } else { - _maximizeRestore->moveToLeft(position, 0); - } - - position += _maximizeRestore->width(); - break; - case Control::Close: - if (right) { - _close->moveToRight(position, 0); - } else { - _close->moveToLeft(position, 0); - } - - position += _close->width(); - break; + const auto widget = controlWidget(control); + if (!widget) { + continue; } + + if (right) { + widget->moveToRight(position, 0); + } else { + widget->moveToLeft(position, 0); + } + + position += widget->width(); } } diff --git a/Telegram/SourceFiles/window/window_title_qt.h b/Telegram/SourceFiles/window/window_title_qt.h index e248ae97d1..9bed674707 100644 --- a/Telegram/SourceFiles/window/window_title_qt.h +++ b/Telegram/SourceFiles/window/window_title_qt.h @@ -51,6 +51,7 @@ private: void toggleFramelessWindow(bool enabled); bool hasShadow() const; + Ui::IconButton *controlWidget(Control control) const; QMargins resizeArea() const; Qt::Edges edgesFromPos(const QPoint &pos) const; void updateCursor(Qt::Edges edges);