diff --git a/ui/abstract_button.h b/ui/abstract_button.h index cc38809..1b04bbb 100644 --- a/ui/abstract_button.h +++ b/ui/abstract_button.h @@ -51,6 +51,8 @@ public: lifetime()); } + void clicked(Qt::KeyboardModifiers modifiers, Qt::MouseButton button); + protected: void enterEventHook(QEvent *e) override; void leaveEventHook(QEvent *e) override; @@ -82,8 +84,6 @@ protected: virtual void onStateChanged(State was, StateChangeSource source) { } - void clicked(Qt::KeyboardModifiers modifiers, Qt::MouseButton button); - private: void updateCursor(); void checkIfOver(QPoint localPos); diff --git a/ui/layers/box_content.h b/ui/layers/box_content.h index 9f21c0a..6551f87 100644 --- a/ui/layers/box_content.h +++ b/ui/layers/box_content.h @@ -73,6 +73,7 @@ public: virtual void setNoContentMargin(bool noContentMargin) = 0; virtual bool isBoxShown() const = 0; virtual void closeBox() = 0; + virtual void triggerButton(int index) = 0; template QPointer show( @@ -102,6 +103,9 @@ public: void closeBox() { getDelegate()->closeBox(); } + void triggerButton(int index) { + getDelegate()->triggerButton(index); + } void setTitle(rpl::producer title); void setTitle(rpl::producer title) { @@ -158,7 +162,7 @@ public: setFocus(); } - rpl::producer<> boxClosing() const { + [[nodiscard]] rpl::producer<> boxClosing() const { return _boxClosingStream.events(); } void notifyBoxClosing() { @@ -171,7 +175,7 @@ public: prepare(); finishPrepare(); } - not_null getDelegate() const { + [[nodiscard]] not_null getDelegate() const { return _delegate; } diff --git a/ui/layers/box_layer_widget.cpp b/ui/layers/box_layer_widget.cpp index cfe7a5c..4dd0604 100644 --- a/ui/layers/box_layer_widget.cpp +++ b/ui/layers/box_layer_widget.cpp @@ -156,6 +156,12 @@ void BoxLayerWidget::setAdditionalTitle(rpl::producer additional) { _additionalTitle = std::move(additional); } +void BoxLayerWidget::triggerButton(int index) { + if (index < _buttons.size()) { + _buttons[index]->clicked(Qt::KeyboardModifiers(), Qt::LeftButton); + } +} + void BoxLayerWidget::setCloseByOutsideClick(bool close) { _closeByOutsideClick = close; } diff --git a/ui/layers/box_layer_widget.h b/ui/layers/box_layer_widget.h index 2c7861b..f823d43 100644 --- a/ui/layers/box_layer_widget.h +++ b/ui/layers/box_layer_widget.h @@ -84,6 +84,7 @@ public: void closeBox() override { closeLayer(); } + void triggerButton(int index) override; void setCloseByOutsideClick(bool close) override; bool closeByOutsideClick() const override; diff --git a/ui/layers/generic_box.h b/ui/layers/generic_box.h index 86e81bc..9dce70c 100644 --- a/ui/layers/generic_box.h +++ b/ui/layers/generic_box.h @@ -72,6 +72,8 @@ public: void setInnerFocus() override { if (_focus) { _focus(); + } else { + BoxContent::setInnerFocus(); } }