From 25583fa813fcc2c7dd4328105922ad876a56997e Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 11 Feb 2017 14:24:37 +0300 Subject: [PATCH] Replace T_WIDGET macro with a template base class. --- Telegram/SourceFiles/boxes/addcontactbox.cpp | 2 +- Telegram/SourceFiles/boxes/addcontactbox.h | 2 +- Telegram/SourceFiles/boxes/confirmbox.cpp | 4 +- Telegram/SourceFiles/boxes/confirmbox.h | 4 +- Telegram/SourceFiles/boxes/contactsbox.cpp | 4 +- Telegram/SourceFiles/boxes/contactsbox.h | 4 +- Telegram/SourceFiles/boxes/members_box.cpp | 4 +- Telegram/SourceFiles/boxes/members_box.h | 4 +- .../SourceFiles/boxes/notifications_box.cpp | 2 +- .../SourceFiles/boxes/notifications_box.h | 2 +- Telegram/SourceFiles/boxes/sharebox.cpp | 4 +- Telegram/SourceFiles/boxes/sharebox.h | 4 +- Telegram/SourceFiles/boxes/stickers_box.cpp | 2 +- Telegram/SourceFiles/boxes/stickers_box.h | 2 +- Telegram/SourceFiles/boxes/stickersetbox.cpp | 2 +- Telegram/SourceFiles/boxes/stickersetbox.h | 2 +- Telegram/SourceFiles/dialogswidget.cpp | 4 +- Telegram/SourceFiles/dialogswidget.h | 4 +- .../history/field_autocomplete.cpp | 4 +- .../SourceFiles/history/field_autocomplete.h | 4 +- Telegram/SourceFiles/historywidget.cpp | 20 +- Telegram/SourceFiles/historywidget.h | 10 +- .../media/player/media_player_cover.cpp | 2 +- .../media/player/media_player_cover.h | 2 +- .../media/player/media_player_panel.cpp | 8 +- .../media/player/media_player_panel.h | 4 +- .../player/media_player_volume_controller.cpp | 8 +- .../player/media_player_volume_controller.h | 4 +- .../media/player/media_player_widget.cpp | 2 +- .../media/player/media_player_widget.h | 2 +- .../view/media_clip_volume_controller.cpp | 4 +- .../media/view/media_clip_volume_controller.h | 4 +- Telegram/SourceFiles/overviewwidget.cpp | 8 +- Telegram/SourceFiles/overviewwidget.h | 4 +- .../profile/profile_block_info.cpp | 2 +- .../SourceFiles/profile/profile_block_info.h | 2 +- .../profile/profile_block_peer_list.cpp | 4 +- .../profile/profile_block_peer_list.h | 8 +- Telegram/SourceFiles/stickers/emoji_pan.cpp | 18 +- Telegram/SourceFiles/stickers/emoji_pan.h | 12 +- Telegram/SourceFiles/ui/abstract_button.cpp | 8 +- Telegram/SourceFiles/ui/abstract_button.h | 4 +- Telegram/SourceFiles/ui/countryinput.cpp | 8 +- Telegram/SourceFiles/ui/countryinput.h | 8 +- Telegram/SourceFiles/ui/twidget.h | 182 ++++++++++-------- .../ui/widgets/continuous_sliders.cpp | 4 +- .../ui/widgets/continuous_sliders.h | 4 +- .../SourceFiles/ui/widgets/inner_dropdown.cpp | 8 +- .../SourceFiles/ui/widgets/inner_dropdown.h | 4 +- .../SourceFiles/ui/widgets/input_fields.cpp | 6 +- .../SourceFiles/ui/widgets/input_fields.h | 21 +- Telegram/SourceFiles/ui/widgets/labels.cpp | 4 +- Telegram/SourceFiles/ui/widgets/labels.h | 4 +- Telegram/SourceFiles/ui/widgets/menu.cpp | 8 +- Telegram/SourceFiles/ui/widgets/menu.h | 4 +- .../SourceFiles/ui/widgets/multi_select.cpp | 2 +- .../SourceFiles/ui/widgets/multi_select.h | 2 +- .../SourceFiles/ui/widgets/scroll_area.cpp | 8 +- Telegram/SourceFiles/ui/widgets/scroll_area.h | 13 +- .../window/notifications_manager_default.cpp | 8 +- .../window/notifications_manager_default.h | 8 +- .../themes/window_theme_editor_block.cpp | 2 +- .../window/themes/window_theme_editor_block.h | 2 +- 63 files changed, 256 insertions(+), 258 deletions(-) diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index e04685ccee..3dc25907fa 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -546,7 +546,7 @@ void SetupChannelBox::mousePressEvent(QMouseEvent *e) { } } -void SetupChannelBox::leaveEvent(QEvent *e) { +void SetupChannelBox::leaveEventHook(QEvent *e) { updateSelected(QCursor::pos()); } diff --git a/Telegram/SourceFiles/boxes/addcontactbox.h b/Telegram/SourceFiles/boxes/addcontactbox.h index d2762985dc..768299b7b8 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.h +++ b/Telegram/SourceFiles/boxes/addcontactbox.h @@ -146,7 +146,7 @@ protected: void resizeEvent(QResizeEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; private slots: void onSave(); diff --git a/Telegram/SourceFiles/boxes/confirmbox.cpp b/Telegram/SourceFiles/boxes/confirmbox.cpp index 09dbfc3182..07272358c9 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.cpp +++ b/Telegram/SourceFiles/boxes/confirmbox.cpp @@ -168,7 +168,7 @@ void ConfirmBox::mouseReleaseEvent(QMouseEvent *e) { return BoxContent::mouseReleaseEvent(e); } -void ConfirmBox::leaveEvent(QEvent *e) { +void ConfirmBox::leaveEventHook(QEvent *e) { ClickHandler::clearActive(this); } @@ -245,7 +245,7 @@ void MaxInviteBox::mousePressEvent(QMouseEvent *e) { } } -void MaxInviteBox::leaveEvent(QEvent *e) { +void MaxInviteBox::leaveEventHook(QEvent *e) { updateSelected(QCursor::pos()); } diff --git a/Telegram/SourceFiles/boxes/confirmbox.h b/Telegram/SourceFiles/boxes/confirmbox.h index be6cc9908f..113fc198ac 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.h +++ b/Telegram/SourceFiles/boxes/confirmbox.h @@ -57,7 +57,7 @@ protected: void mouseMoveEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; private: struct InformBoxTag { @@ -109,7 +109,7 @@ protected: void resizeEvent(QResizeEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; private: void updateSelected(const QPoint &cursorGlobalPosition); diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index 812bc5eae6..04cdc011d0 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -1169,7 +1169,7 @@ void ContactsBox::Inner::paintEvent(QPaintEvent *e) { } } -void ContactsBox::Inner::enterEvent(QEvent *e) { +void ContactsBox::Inner::enterEventHook(QEvent *e) { setMouseTracking(true); } @@ -1235,7 +1235,7 @@ void ContactsBox::Inner::updateRowWithPeer(PeerData *peer) { } } -void ContactsBox::Inner::leaveEvent(QEvent *e) { +void ContactsBox::Inner::leaveEventHook(QEvent *e) { _mouseSelection = false; setMouseTracking(false); if (_selected || _filteredSelected >= 0 || _searchedSelected >= 0) { diff --git a/Telegram/SourceFiles/boxes/contactsbox.h b/Telegram/SourceFiles/boxes/contactsbox.h index ee4cc8d2be..5fa5a37a84 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.h +++ b/Telegram/SourceFiles/boxes/contactsbox.h @@ -208,8 +208,8 @@ private slots: protected: void paintEvent(QPaintEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; diff --git a/Telegram/SourceFiles/boxes/members_box.cpp b/Telegram/SourceFiles/boxes/members_box.cpp index 87770de518..3246258c76 100644 --- a/Telegram/SourceFiles/boxes/members_box.cpp +++ b/Telegram/SourceFiles/boxes/members_box.cpp @@ -181,11 +181,11 @@ void MembersBox::Inner::paintEvent(QPaintEvent *e) { } } -void MembersBox::Inner::enterEvent(QEvent *e) { +void MembersBox::Inner::enterEventHook(QEvent *e) { setMouseTracking(true); } -void MembersBox::Inner::leaveEvent(QEvent *e) { +void MembersBox::Inner::leaveEventHook(QEvent *e) { _mouseSelection = false; setMouseTracking(false); if (_selected >= 0) { diff --git a/Telegram/SourceFiles/boxes/members_box.h b/Telegram/SourceFiles/boxes/members_box.h index 79c8a08a07..31ca104ed6 100644 --- a/Telegram/SourceFiles/boxes/members_box.h +++ b/Telegram/SourceFiles/boxes/members_box.h @@ -118,8 +118,8 @@ public slots: protected: void paintEvent(QPaintEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; diff --git a/Telegram/SourceFiles/boxes/notifications_box.cpp b/Telegram/SourceFiles/boxes/notifications_box.cpp index 86cd98ac10..de0f70e6ec 100644 --- a/Telegram/SourceFiles/boxes/notifications_box.cpp +++ b/Telegram/SourceFiles/boxes/notifications_box.cpp @@ -332,7 +332,7 @@ void NotificationsBox::mouseMoveEvent(QMouseEvent *e) { } } -void NotificationsBox::leaveEvent(QEvent *e) { +void NotificationsBox::leaveEventHook(QEvent *e) { clearOverCorner(); } diff --git a/Telegram/SourceFiles/boxes/notifications_box.h b/Telegram/SourceFiles/boxes/notifications_box.h index 623fbf40df..7dfc824820 100644 --- a/Telegram/SourceFiles/boxes/notifications_box.h +++ b/Telegram/SourceFiles/boxes/notifications_box.h @@ -39,7 +39,7 @@ protected: void resizeEvent(QResizeEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; private: diff --git a/Telegram/SourceFiles/boxes/sharebox.cpp b/Telegram/SourceFiles/boxes/sharebox.cpp index 2ba88b3c44..5e9bc31248 100644 --- a/Telegram/SourceFiles/boxes/sharebox.cpp +++ b/Telegram/SourceFiles/boxes/sharebox.cpp @@ -578,11 +578,11 @@ void ShareBox::Inner::paintEvent(QPaintEvent *e) { } } -void ShareBox::Inner::enterEvent(QEvent *e) { +void ShareBox::Inner::enterEventHook(QEvent *e) { setMouseTracking(true); } -void ShareBox::Inner::leaveEvent(QEvent *e) { +void ShareBox::Inner::leaveEventHook(QEvent *e) { setMouseTracking(false); } diff --git a/Telegram/SourceFiles/boxes/sharebox.h b/Telegram/SourceFiles/boxes/sharebox.h index d1c03cacb8..523da41b15 100644 --- a/Telegram/SourceFiles/boxes/sharebox.h +++ b/Telegram/SourceFiles/boxes/sharebox.h @@ -140,8 +140,8 @@ signals: protected: void paintEvent(QPaintEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void resizeEvent(QResizeEvent *e) override; diff --git a/Telegram/SourceFiles/boxes/stickers_box.cpp b/Telegram/SourceFiles/boxes/stickers_box.cpp index d3256d31c5..4e7edcb434 100644 --- a/Telegram/SourceFiles/boxes/stickers_box.cpp +++ b/Telegram/SourceFiles/boxes/stickers_box.cpp @@ -972,7 +972,7 @@ void StickersBox::Inner::setRowRemoved(int index, bool removed) { } } -void StickersBox::Inner::leaveEvent(QEvent *e) { +void StickersBox::Inner::leaveEventHook(QEvent *e) { _mouse = QPoint(-1, -1); onUpdateSelected(); } diff --git a/Telegram/SourceFiles/boxes/stickers_box.h b/Telegram/SourceFiles/boxes/stickers_box.h index e84a2415d8..75ea838b6a 100644 --- a/Telegram/SourceFiles/boxes/stickers_box.h +++ b/Telegram/SourceFiles/boxes/stickers_box.h @@ -183,7 +183,7 @@ protected: void mousePressEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; signals: void draggingScrollDelta(int delta); diff --git a/Telegram/SourceFiles/boxes/stickersetbox.cpp b/Telegram/SourceFiles/boxes/stickersetbox.cpp index baa7ca2de6..1b357a6d63 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.cpp +++ b/Telegram/SourceFiles/boxes/stickersetbox.cpp @@ -277,7 +277,7 @@ void StickerSetBox::Inner::mouseMoveEvent(QMouseEvent *e) { } } -void StickerSetBox::Inner::leaveEvent(QEvent *e) { +void StickerSetBox::Inner::leaveEventHook(QEvent *e) { setSelected(-1); } diff --git a/Telegram/SourceFiles/boxes/stickersetbox.h b/Telegram/SourceFiles/boxes/stickersetbox.h index 350e0ca806..7128aae7b7 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.h +++ b/Telegram/SourceFiles/boxes/stickersetbox.h @@ -86,7 +86,7 @@ protected: void mouseMoveEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; void paintEvent(QPaintEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; private slots: void onPreview(); diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index d2a9653696..6e7f1451c6 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -1088,7 +1088,7 @@ void DialogsInner::updateDialogRow(PeerData *peer, MsgId msgId, QRect updateRect } } -void DialogsInner::enterEvent(QEvent *e) { +void DialogsInner::enterEventHook(QEvent *e) { setMouseTracking(true); updateSelected(); } @@ -1131,7 +1131,7 @@ void DialogsInner::updateSelectedRow(PeerData *peer) { } } -void DialogsInner::leaveEvent(QEvent *e) { +void DialogsInner::leaveEventHook(QEvent *e) { setMouseTracking(false); clearSelection(); } diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index 5cc2d237ee..e12b58104e 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -146,8 +146,8 @@ protected: void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; void resizeEvent(QResizeEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void contextMenuEvent(QContextMenuEvent *e) override; private: diff --git a/Telegram/SourceFiles/history/field_autocomplete.cpp b/Telegram/SourceFiles/history/field_autocomplete.cpp index d762e70d0d..ba8e32e2e4 100644 --- a/Telegram/SourceFiles/history/field_autocomplete.cpp +++ b/Telegram/SourceFiles/history/field_autocomplete.cpp @@ -836,13 +836,13 @@ void FieldAutocompleteInner::mouseReleaseEvent(QMouseEvent *e) { chooseSelected(FieldAutocomplete::ChooseMethod::ByClick); } -void FieldAutocompleteInner::enterEvent(QEvent *e) { +void FieldAutocompleteInner::enterEventHook(QEvent *e) { setMouseTracking(true); _mousePos = QCursor::pos(); onUpdateSelected(true); } -void FieldAutocompleteInner::leaveEvent(QEvent *e) { +void FieldAutocompleteInner::leaveEventHook(QEvent *e) { setMouseTracking(false); if (_sel >= 0) { setSel(-1); diff --git a/Telegram/SourceFiles/history/field_autocomplete.h b/Telegram/SourceFiles/history/field_autocomplete.h index ed007ccad4..6db13b67e8 100644 --- a/Telegram/SourceFiles/history/field_autocomplete.h +++ b/Telegram/SourceFiles/history/field_autocomplete.h @@ -165,8 +165,8 @@ private: void paintEvent(QPaintEvent *e) override; void resizeEvent(QResizeEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 9d9ce8ea62..96c416fb25 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -1834,12 +1834,12 @@ void HistoryInner::updateSize() { } } -void HistoryInner::enterEvent(QEvent *e) { +void HistoryInner::enterEventHook(QEvent *e) { dragActionUpdate(QCursor::pos()); -// return QWidget::enterEvent(e); + return TWidget::enterEventHook(e); } -void HistoryInner::leaveEvent(QEvent *e) { +void HistoryInner::leaveEventHook(QEvent *e) { if (auto item = App::hoveredItem()) { repaintItem(item); App::hoveredItem(nullptr); @@ -1850,7 +1850,7 @@ void HistoryInner::leaveEvent(QEvent *e) { _cursor = style::cur_default; setCursor(_cursor); } - return QWidget::leaveEvent(e); + return TWidget::leaveEventHook(e); } HistoryInner::~HistoryInner() { @@ -2577,12 +2577,12 @@ void BotKeyboard::mouseReleaseEvent(QMouseEvent *e) { } } -void BotKeyboard::enterEvent(QEvent *e) { +void BotKeyboard::enterEventHook(QEvent *e) { _lastMousePos = QCursor::pos(); updateSelected(); } -void BotKeyboard::leaveEvent(QEvent *e) { +void BotKeyboard::leaveEventHook(QEvent *e) { clearSelection(); } @@ -2988,7 +2988,7 @@ public: protected: void mouseMoveEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; private: bool _checked = false; @@ -3015,8 +3015,8 @@ void SilentToggle::setChecked(bool checked) { } } -void SilentToggle::leaveEvent(QEvent *e) { - IconButton::leaveEvent(e); +void SilentToggle::leaveEventHook(QEvent *e) { + IconButton::leaveEventHook(e); Ui::Tooltip::Hide(); } @@ -5627,7 +5627,7 @@ void HistoryWidget::dragLeaveEvent(QDragLeaveEvent *e) { } } -void HistoryWidget::leaveEvent(QEvent *e) { +void HistoryWidget::leaveEventHook(QEvent *e) { if (_attachDrag != DragStateNone || !_attachDragPhoto->isHidden() || !_attachDragDocument->isHidden()) { _attachDrag = DragStateNone; updateDragAreas(); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index fedf4a6426..3b09b4d9b0 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -129,8 +129,8 @@ protected: void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; void mouseDoubleClickEvent(QMouseEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void resizeEvent(QResizeEvent *e) override; void keyPressEvent(QKeyEvent *e) override; @@ -413,8 +413,8 @@ protected: void mousePressEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; private: void updateSelected(); @@ -734,7 +734,7 @@ protected: void keyPressEvent(QKeyEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void paintEvent(QPaintEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void contextMenuEvent(QContextMenuEvent *e) override; diff --git a/Telegram/SourceFiles/media/player/media_player_cover.cpp b/Telegram/SourceFiles/media/player/media_player_cover.cpp index 5b19d9118a..e1d70e3f7b 100644 --- a/Telegram/SourceFiles/media/player/media_player_cover.cpp +++ b/Telegram/SourceFiles/media/player/media_player_cover.cpp @@ -194,7 +194,7 @@ void CoverWidget::mouseMoveEvent(QMouseEvent *e) { setCloseVisible(closeVisible); } -void CoverWidget::leaveEvent(QEvent *e) { +void CoverWidget::leaveEventHook(QEvent *e) { setCloseVisible(false); } diff --git a/Telegram/SourceFiles/media/player/media_player_cover.h b/Telegram/SourceFiles/media/player/media_player_cover.h index e9c6b0c9af..043e70e3df 100644 --- a/Telegram/SourceFiles/media/player/media_player_cover.h +++ b/Telegram/SourceFiles/media/player/media_player_cover.h @@ -50,7 +50,7 @@ protected: void resizeEvent(QResizeEvent *e) override; void paintEvent(QPaintEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; private: void setCloseVisible(bool visible); diff --git a/Telegram/SourceFiles/media/player/media_player_panel.cpp b/Telegram/SourceFiles/media/player/media_player_panel.cpp index 9442997ea4..493ad4a815 100644 --- a/Telegram/SourceFiles/media/player/media_player_panel.cpp +++ b/Telegram/SourceFiles/media/player/media_player_panel.cpp @@ -177,7 +177,7 @@ void Panel::paintEvent(QPaintEvent *e) { App::roundRect(p, shadowedRect, st::menuBg, MenuCorners, nullptr, parts); } -void Panel::enterEvent(QEvent *e) { +void Panel::enterEventHook(QEvent *e) { if (_ignoringEnterEvents) return; _hideTimer.stop(); @@ -186,17 +186,17 @@ void Panel::enterEvent(QEvent *e) { } else { _showTimer.start(0); } - return TWidget::enterEvent(e); + return TWidget::enterEventHook(e); } -void Panel::leaveEvent(QEvent *e) { +void Panel::leaveEventHook(QEvent *e) { _showTimer.stop(); if (_a_appearance.animating(getms())) { onHideStart(); } else { _hideTimer.start(300); } - return TWidget::leaveEvent(e); + return TWidget::leaveEventHook(e); } void Panel::showFromOther() { diff --git a/Telegram/SourceFiles/media/player/media_player_panel.h b/Telegram/SourceFiles/media/player/media_player_panel.h index 8279f557f2..7160fe2b87 100644 --- a/Telegram/SourceFiles/media/player/media_player_panel.h +++ b/Telegram/SourceFiles/media/player/media_player_panel.h @@ -59,8 +59,8 @@ public: protected: void resizeEvent(QResizeEvent *e) override; void paintEvent(QPaintEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; private slots: void onShowStart(); diff --git a/Telegram/SourceFiles/media/player/media_player_volume_controller.cpp b/Telegram/SourceFiles/media/player/media_player_volume_controller.cpp index c2ce3c3468..58f911c393 100644 --- a/Telegram/SourceFiles/media/player/media_player_volume_controller.cpp +++ b/Telegram/SourceFiles/media/player/media_player_volume_controller.cpp @@ -150,24 +150,24 @@ void VolumeWidget::paintEvent(QPaintEvent *e) { App::roundRect(p, QRect(shadowedRect.x(), -st::buttonRadius, shadowedRect.width(), shadowedRect.y() + shadowedRect.height() + st::buttonRadius), st::menuBg, MenuCorners, nullptr, parts); } -void VolumeWidget::enterEvent(QEvent *e) { +void VolumeWidget::enterEventHook(QEvent *e) { _hideTimer.stop(); if (_a_appearance.animating(getms())) { onShowStart(); } else { _showTimer.start(0); } - return TWidget::enterEvent(e); + return TWidget::enterEventHook(e); } -void VolumeWidget::leaveEvent(QEvent *e) { +void VolumeWidget::leaveEventHook(QEvent *e) { _showTimer.stop(); if (_a_appearance.animating(getms())) { onHideStart(); } else { _hideTimer.start(300); } - return TWidget::leaveEvent(e); + return TWidget::leaveEventHook(e); } void VolumeWidget::otherEnter() { diff --git a/Telegram/SourceFiles/media/player/media_player_volume_controller.h b/Telegram/SourceFiles/media/player/media_player_volume_controller.h index 7321d0f5eb..96ff1ff8f1 100644 --- a/Telegram/SourceFiles/media/player/media_player_volume_controller.h +++ b/Telegram/SourceFiles/media/player/media_player_volume_controller.h @@ -58,8 +58,8 @@ public: protected: void resizeEvent(QResizeEvent *e) override; void paintEvent(QPaintEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; bool eventFilter(QObject *obj, QEvent *e) override; diff --git a/Telegram/SourceFiles/media/player/media_player_widget.cpp b/Telegram/SourceFiles/media/player/media_player_widget.cpp index 4bd714316e..bd511eb351 100644 --- a/Telegram/SourceFiles/media/player/media_player_widget.cpp +++ b/Telegram/SourceFiles/media/player/media_player_widget.cpp @@ -233,7 +233,7 @@ void Widget::paintEvent(QPaintEvent *e) { } } -void Widget::leaveEvent(QEvent *e) { +void Widget::leaveEventHook(QEvent *e) { updateOverLabelsState(false); } diff --git a/Telegram/SourceFiles/media/player/media_player_widget.h b/Telegram/SourceFiles/media/player/media_player_widget.h index 09911d4e66..8161881967 100644 --- a/Telegram/SourceFiles/media/player/media_player_widget.h +++ b/Telegram/SourceFiles/media/player/media_player_widget.h @@ -60,7 +60,7 @@ protected: void resizeEvent(QResizeEvent *e) override; void paintEvent(QPaintEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; private: diff --git a/Telegram/SourceFiles/media/view/media_clip_volume_controller.cpp b/Telegram/SourceFiles/media/view/media_clip_volume_controller.cpp index 101ccc7142..693d5c723b 100644 --- a/Telegram/SourceFiles/media/view/media_clip_volume_controller.cpp +++ b/Telegram/SourceFiles/media/view/media_clip_volume_controller.cpp @@ -93,11 +93,11 @@ void VolumeController::mouseReleaseEvent(QMouseEvent *e) { _downCoord = -1; } -void VolumeController::enterEvent(QEvent *e) { +void VolumeController::enterEventHook(QEvent *e) { setOver(true); } -void VolumeController::leaveEvent(QEvent *e) { +void VolumeController::leaveEventHook(QEvent *e) { setOver(false); } diff --git a/Telegram/SourceFiles/media/view/media_clip_volume_controller.h b/Telegram/SourceFiles/media/view/media_clip_volume_controller.h index d58dc5a156..0142cacb44 100644 --- a/Telegram/SourceFiles/media/view/media_clip_volume_controller.h +++ b/Telegram/SourceFiles/media/view/media_clip_volume_controller.h @@ -39,8 +39,8 @@ protected: void mouseMoveEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; private: void setOver(bool over); diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index faf9ecd216..3ee7afd85e 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -1137,11 +1137,11 @@ void OverviewInner::keyPressEvent(QKeyEvent *e) { } } -void OverviewInner::enterEvent(QEvent *e) { - return QWidget::enterEvent(e); +void OverviewInner::enterEventHook(QEvent *e) { + return TWidget::enterEventHook(e); } -void OverviewInner::leaveEvent(QEvent *e) { +void OverviewInner::leaveEventHook(QEvent *e) { if (auto selectedMsgId = base::take(_selectedMsgId)) { repaintItem(selectedMsgId, -1); } @@ -1150,7 +1150,7 @@ void OverviewInner::leaveEvent(QEvent *e) { _cursor = style::cur_default; setCursor(_cursor); } - return QWidget::leaveEvent(e); + return TWidget::leaveEventHook(e); } void OverviewInner::resizeEvent(QResizeEvent *e) { diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index 3f401f79fb..ee9e299adf 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -101,8 +101,8 @@ protected: void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; void keyPressEvent(QKeyEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void resizeEvent(QResizeEvent *e) override; public slots: diff --git a/Telegram/SourceFiles/profile/profile_block_info.cpp b/Telegram/SourceFiles/profile/profile_block_info.cpp index 9e3fc846e8..eb6b5bd7bf 100644 --- a/Telegram/SourceFiles/profile/profile_block_info.cpp +++ b/Telegram/SourceFiles/profile/profile_block_info.cpp @@ -120,7 +120,7 @@ int InfoWidget::resizeGetHeight(int newWidth) { return newHeight; } -void InfoWidget::leaveEvent(QEvent *e) { +void InfoWidget::leaveEventHook(QEvent *e) { BotCommandClickHandler::setPeerForCommand(nullptr); BotCommandClickHandler::setBotForCommand(nullptr); } diff --git a/Telegram/SourceFiles/profile/profile_block_info.h b/Telegram/SourceFiles/profile/profile_block_info.h index 0ff725e1fb..1b35e0122f 100644 --- a/Telegram/SourceFiles/profile/profile_block_info.h +++ b/Telegram/SourceFiles/profile/profile_block_info.h @@ -40,7 +40,7 @@ protected: // Resizes content and counts natural widget height for the desired width. int resizeGetHeight(int newWidth) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; private: // Observed notifications. diff --git a/Telegram/SourceFiles/profile/profile_block_peer_list.cpp b/Telegram/SourceFiles/profile/profile_block_peer_list.cpp index ae306dc5cf..7c9db79e0c 100644 --- a/Telegram/SourceFiles/profile/profile_block_peer_list.cpp +++ b/Telegram/SourceFiles/profile/profile_block_peer_list.cpp @@ -225,12 +225,12 @@ void PeerListWidget::contextMenuEvent(QContextMenuEvent *e) { } } -void PeerListWidget::enterEvent(QEvent *e) { +void PeerListWidget::enterEventHook(QEvent *e) { _mousePosition = QCursor::pos(); updateSelection(); } -void PeerListWidget::leaveEvent(QEvent *e) { +void PeerListWidget::leaveEventHook(QEvent *e) { _mousePosition = QPoint(-1, -1); updateSelection(); } diff --git a/Telegram/SourceFiles/profile/profile_block_peer_list.h b/Telegram/SourceFiles/profile/profile_block_peer_list.h index 787e7cd55e..282bbcca1b 100644 --- a/Telegram/SourceFiles/profile/profile_block_peer_list.h +++ b/Telegram/SourceFiles/profile/profile_block_peer_list.h @@ -107,13 +107,13 @@ protected: void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; void contextMenuEvent(QContextMenuEvent *e) override; - void enterEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; void enterFromChildEvent(QEvent *e, QWidget *child) override { - enterEvent(e); + enterEventHook(e); } - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void leaveToChildEvent(QEvent *e, QWidget *child) override { - leaveEvent(e); + leaveEventHook(e); } virtual Ui::PopupMenu *fillPeerMenu(PeerData *peer) { diff --git a/Telegram/SourceFiles/stickers/emoji_pan.cpp b/Telegram/SourceFiles/stickers/emoji_pan.cpp index 37563ae5a9..9570d20e9e 100644 --- a/Telegram/SourceFiles/stickers/emoji_pan.cpp +++ b/Telegram/SourceFiles/stickers/emoji_pan.cpp @@ -105,14 +105,14 @@ void EmojiColorPicker::paintEvent(QPaintEvent *e) { } } -void EmojiColorPicker::enterEvent(QEvent *e) { +void EmojiColorPicker::enterEventHook(QEvent *e) { _hideTimer.stop(); if (_hiding) showAnimated(); - TWidget::enterEvent(e); + TWidget::enterEventHook(e); } -void EmojiColorPicker::leaveEvent(QEvent *e) { - TWidget::leaveEvent(e); +void EmojiColorPicker::leaveEventHook(QEvent *e) { + TWidget::leaveEventHook(e); } void EmojiColorPicker::mousePressEvent(QMouseEvent *e) { @@ -542,7 +542,7 @@ void EmojiPanInner::mouseMoveEvent(QMouseEvent *e) { updateSelected(); } -void EmojiPanInner::leaveEvent(QEvent *e) { +void EmojiPanInner::leaveEventHook(QEvent *e) { clearSelection(); } @@ -1253,7 +1253,7 @@ void StickerPanInner::mouseMoveEvent(QMouseEvent *e) { updateSelected(); } -void StickerPanInner::leaveEvent(QEvent *e) { +void StickerPanInner::leaveEventHook(QEvent *e) { clearSelection(); } @@ -2991,7 +2991,7 @@ void EmojiPan::moveByBottom() { updateContentHeight(); } -void EmojiPan::enterEvent(QEvent *e) { +void EmojiPan::enterEventHook(QEvent *e) { _hideTimer.stop(); if (_hiding) showAnimated(_origin); } @@ -3000,7 +3000,7 @@ bool EmojiPan::preventAutoHide() const { return _removingSetId || _displayingSetId; } -void EmojiPan::leaveEvent(QEvent *e) { +void EmojiPan::leaveEventHook(QEvent *e) { if (preventAutoHide() || s_inner->inlineResultsShown()) return; auto ms = getms(); if (_a_show.animating(ms) || _a_opacity.animating(ms)) { @@ -3008,7 +3008,7 @@ void EmojiPan::leaveEvent(QEvent *e) { } else { _hideTimer.start(300); } - return TWidget::leaveEvent(e); + return TWidget::leaveEventHook(e); } void EmojiPan::otherEnter() { diff --git a/Telegram/SourceFiles/stickers/emoji_pan.h b/Telegram/SourceFiles/stickers/emoji_pan.h index 19a16b5d9b..347f63128d 100644 --- a/Telegram/SourceFiles/stickers/emoji_pan.h +++ b/Telegram/SourceFiles/stickers/emoji_pan.h @@ -82,8 +82,8 @@ signals: protected: void paintEvent(QPaintEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; @@ -141,7 +141,7 @@ protected: void mouseReleaseEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void paintEvent(QPaintEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void leaveToChildEvent(QEvent *e, QWidget *child) override; void enterFromChildEvent(QEvent *e, QWidget *child) override; @@ -258,7 +258,7 @@ protected: void mouseReleaseEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void paintEvent(QPaintEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void leaveToChildEvent(QEvent *e, QWidget *child) override; void enterFromChildEvent(QEvent *e, QWidget *child) override; @@ -505,8 +505,8 @@ public: ~EmojiPan(); protected: - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void otherEnter(); void otherLeave(); diff --git a/Telegram/SourceFiles/ui/abstract_button.cpp b/Telegram/SourceFiles/ui/abstract_button.cpp index a1b0ec72d5..5652797bbc 100644 --- a/Telegram/SourceFiles/ui/abstract_button.cpp +++ b/Telegram/SourceFiles/ui/abstract_button.cpp @@ -23,16 +23,16 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org namespace Ui { -void AbstractButton::leaveEvent(QEvent *e) { +void AbstractButton::leaveEventHook(QEvent *e) { if (_state & StateFlag::Down) return; setOver(false, StateChangeSource::ByHover); - return TWidget::leaveEvent(e); + return TWidget::leaveEventHook(e); } -void AbstractButton::enterEvent(QEvent *e) { +void AbstractButton::enterEventHook(QEvent *e) { checkIfOver(mapFromGlobal(QCursor::pos())); - return TWidget::enterEvent(e); + return TWidget::enterEventHook(e); } void AbstractButton::setAcceptBoth(bool acceptBoth) { diff --git a/Telegram/SourceFiles/ui/abstract_button.h b/Telegram/SourceFiles/ui/abstract_button.h index 5ce0219e8a..a878bb01cb 100644 --- a/Telegram/SourceFiles/ui/abstract_button.h +++ b/Telegram/SourceFiles/ui/abstract_button.h @@ -64,8 +64,8 @@ public: } protected: - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; diff --git a/Telegram/SourceFiles/ui/countryinput.cpp b/Telegram/SourceFiles/ui/countryinput.cpp index d2e1355f09..4ddd5e98fe 100644 --- a/Telegram/SourceFiles/ui/countryinput.cpp +++ b/Telegram/SourceFiles/ui/countryinput.cpp @@ -165,11 +165,11 @@ void CountryInput::mousePressEvent(QMouseEvent *e) { } } -void CountryInput::enterEvent(QEvent *e) { +void CountryInput::enterEventHook(QEvent *e) { setMouseTracking(true); } -void CountryInput::leaveEvent(QEvent *e) { +void CountryInput::leaveEventHook(QEvent *e) { setMouseTracking(false); _active = false; setCursor(style::cur_default); @@ -366,11 +366,11 @@ void CountrySelectBox::Inner::paintEvent(QPaintEvent *e) { } } -void CountrySelectBox::Inner::enterEvent(QEvent *e) { +void CountrySelectBox::Inner::enterEventHook(QEvent *e) { setMouseTracking(true); } -void CountrySelectBox::Inner::leaveEvent(QEvent *e) { +void CountrySelectBox::Inner::leaveEventHook(QEvent *e) { _mouseSelection = false; setMouseTracking(false); if (_selected >= 0) { diff --git a/Telegram/SourceFiles/ui/countryinput.h b/Telegram/SourceFiles/ui/countryinput.h index 415b7ae1c5..d94fe51a8f 100644 --- a/Telegram/SourceFiles/ui/countryinput.h +++ b/Telegram/SourceFiles/ui/countryinput.h @@ -46,8 +46,8 @@ protected: void paintEvent(QPaintEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; private: void setText(const QString &newText); @@ -112,8 +112,8 @@ signals: protected: void paintEvent(QPaintEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; diff --git a/Telegram/SourceFiles/ui/twidget.h b/Telegram/SourceFiles/ui/twidget.h index a0db0eea39..c214bd2254 100644 --- a/Telegram/SourceFiles/ui/twidget.h +++ b/Telegram/SourceFiles/ui/twidget.h @@ -125,82 +125,108 @@ private: }; -#define T_WIDGET \ -public: \ - TWidget *tparent() { \ - return qobject_cast(parentWidget()); \ - } \ - const TWidget *tparent() const { \ - return qobject_cast(parentWidget()); \ - } \ - virtual void leaveToChildEvent(QEvent *e, QWidget *child) { /* e -- from enterEvent() of child TWidget */ \ - } \ - virtual void enterFromChildEvent(QEvent *e, QWidget *child) { /* e -- from leaveEvent() of child TWidget */ \ - } \ - void moveToLeft(int x, int y, int outerw = 0) { \ - auto margins = getMargins(); \ - x -= margins.left(); \ - y -= margins.top(); \ - move(rtl() ? ((outerw > 0 ? outerw : parentWidget()->width()) - x - width()) : x, y); \ - } \ - void moveToRight(int x, int y, int outerw = 0) { \ - auto margins = getMargins(); \ - x -= margins.right(); \ - y -= margins.top(); \ - move(rtl() ? x : ((outerw > 0 ? outerw : parentWidget()->width()) - x - width()), y); \ - } \ - void setGeometryToLeft(int x, int y, int w, int h, int outerw = 0) { \ - auto margins = getMargins(); \ - x -= margins.left(); \ - y -= margins.top(); \ - w -= margins.left() - margins.right(); \ - h -= margins.top() - margins.bottom(); \ - setGeometry(rtl() ? ((outerw > 0 ? outerw : parentWidget()->width()) - x - w) : x, y, w, h); \ - } \ - void setGeometryToRight(int x, int y, int w, int h, int outerw = 0) { \ - auto margins = getMargins(); \ - x -= margins.right(); \ - y -= margins.top(); \ - w -= margins.left() - margins.right(); \ - h -= margins.top() - margins.bottom(); \ - setGeometry(rtl() ? x : ((outerw > 0 ? outerw : parentWidget()->width()) - x - w), y, w, h); \ - } \ - QPoint myrtlpoint(int x, int y) const { \ - return rtlpoint(x, y, width()); \ - } \ - QPoint myrtlpoint(const QPoint p) const { \ - return rtlpoint(p, width()); \ - } \ - QRect myrtlrect(int x, int y, int w, int h) const { \ - return rtlrect(x, y, w, h, width()); \ - } \ - QRect myrtlrect(const QRect &r) const { \ - return rtlrect(r, width()); \ - } \ - void rtlupdate(const QRect &r) { \ - update(myrtlrect(r)); \ - } \ - void rtlupdate(int x, int y, int w, int h) { \ - update(myrtlrect(x, y, w, h)); \ - } \ -protected: \ - void enterEvent(QEvent *e) override { \ - TWidget *p(tparent()); \ - if (p) p->leaveToChildEvent(e, this); \ - return enterEventHook(e); \ - } \ - void leaveEvent(QEvent *e) override { \ - TWidget *p(tparent()); \ - if (p) p->enterFromChildEvent(e, this); \ - return leaveEventHook(e); \ +class TWidget; + +template +class TWidgetHelper : public Base { +public: + using Base::Base; + + virtual QMargins getMargins() const { + return QMargins(); } -class TWidget : public QWidget { + void moveToLeft(int x, int y, int outerw = 0) { + auto margins = getMargins(); + x -= margins.left(); + y -= margins.top(); + move(rtl() ? ((outerw > 0 ? outerw : parentWidget()->width()) - x - width()) : x, y); + } + void moveToRight(int x, int y, int outerw = 0) { + auto margins = getMargins(); + x -= margins.right(); + y -= margins.top(); + move(rtl() ? x : ((outerw > 0 ? outerw : parentWidget()->width()) - x - width()), y); + } + void setGeometryToLeft(int x, int y, int w, int h, int outerw = 0) { + auto margins = getMargins(); + x -= margins.left(); + y -= margins.top(); + w -= margins.left() - margins.right(); + h -= margins.top() - margins.bottom(); + setGeometry(rtl() ? ((outerw > 0 ? outerw : parentWidget()->width()) - x - w) : x, y, w, h); + } + void setGeometryToRight(int x, int y, int w, int h, int outerw = 0) { + auto margins = getMargins(); + x -= margins.right(); + y -= margins.top(); + w -= margins.left() - margins.right(); + h -= margins.top() - margins.bottom(); + setGeometry(rtl() ? x : ((outerw > 0 ? outerw : parentWidget()->width()) - x - w), y, w, h); + } + QPoint myrtlpoint(int x, int y) const { + return rtlpoint(x, y, width()); + } + QPoint myrtlpoint(const QPoint p) const { + return rtlpoint(p, width()); + } + QRect myrtlrect(int x, int y, int w, int h) const { + return rtlrect(x, y, w, h, width()); + } + QRect myrtlrect(const QRect &r) const { + return rtlrect(r, width()); + } + void rtlupdate(const QRect &r) { + update(myrtlrect(r)); + } + void rtlupdate(int x, int y, int w, int h) { + update(myrtlrect(x, y, w, h)); + } + +protected: + void enterEvent(QEvent *e) final override { + if (auto parent = tparent()) { + parent->leaveToChildEvent(e, this); + } + return enterEventHook(e); + } + virtual void enterEventHook(QEvent *e) { + return Base::enterEvent(e); + } + + void leaveEvent(QEvent *e) final override { + if (auto parent = tparent()) { + parent->enterFromChildEvent(e, this); + } + return leaveEventHook(e); + } + virtual void leaveEventHook(QEvent *e) { + return Base::leaveEvent(e); + } + + // e - from enterEvent() of child TWidget + virtual void leaveToChildEvent(QEvent *e, QWidget *child) { + } + + // e - from leaveEvent() of child TWidget + virtual void enterFromChildEvent(QEvent *e, QWidget *child) { + } + +private: + TWidget *tparent() { + return qobject_cast(parentWidget()); + } + const TWidget *tparent() const { + return qobject_cast(parentWidget()); + } + +}; + +class TWidget : public TWidgetHelper { Q_OBJECT - T_WIDGET public: - TWidget(QWidget *parent = nullptr) : QWidget(parent) { + TWidget(QWidget *parent = nullptr) : TWidgetHelper(parent) { } virtual void grabStart() { } @@ -224,10 +250,6 @@ public: } } - virtual QMargins getMargins() const { - return QMargins(); - } - // Get the size of the widget as it should be. // Negative return value means no default width. virtual int naturalWidth() const { @@ -276,18 +298,14 @@ signals: void heightUpdated(); protected: - void enterEventHook(QEvent *e) { - return QWidget::enterEvent(e); - } - void leaveEventHook(QEvent *e) { - return QWidget::leaveEvent(e); - } - // Resizes content and counts natural widget height for the desired width. virtual int resizeGetHeight(int newWidth) { return height(); } + template + friend class TWidgetHelper; + }; template diff --git a/Telegram/SourceFiles/ui/widgets/continuous_sliders.cpp b/Telegram/SourceFiles/ui/widgets/continuous_sliders.cpp index 1b88891cd8..4c4272543e 100644 --- a/Telegram/SourceFiles/ui/widgets/continuous_sliders.cpp +++ b/Telegram/SourceFiles/ui/widgets/continuous_sliders.cpp @@ -156,11 +156,11 @@ void ContinuousSlider::updateDownValueFromPos(const QPoint &pos) { } } -void ContinuousSlider::enterEvent(QEvent *e) { +void ContinuousSlider::enterEventHook(QEvent *e) { setOver(true); } -void ContinuousSlider::leaveEvent(QEvent *e) { +void ContinuousSlider::leaveEventHook(QEvent *e) { setOver(false); } diff --git a/Telegram/SourceFiles/ui/widgets/continuous_sliders.h b/Telegram/SourceFiles/ui/widgets/continuous_sliders.h index 73df0ab394..2496c236eb 100644 --- a/Telegram/SourceFiles/ui/widgets/continuous_sliders.h +++ b/Telegram/SourceFiles/ui/widgets/continuous_sliders.h @@ -63,8 +63,8 @@ protected: void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; void wheelEvent(QWheelEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; float64 fadeOpacity() const { return _fadeOpacity; diff --git a/Telegram/SourceFiles/ui/widgets/inner_dropdown.cpp b/Telegram/SourceFiles/ui/widgets/inner_dropdown.cpp index b62286474c..ada1e7c858 100644 --- a/Telegram/SourceFiles/ui/widgets/inner_dropdown.cpp +++ b/Telegram/SourceFiles/ui/widgets/inner_dropdown.cpp @@ -127,19 +127,19 @@ void InnerDropdown::paintEvent(QPaintEvent *e) { } } -void InnerDropdown::enterEvent(QEvent *e) { +void InnerDropdown::enterEventHook(QEvent *e) { showAnimated(_origin); - return TWidget::enterEvent(e); + return TWidget::enterEventHook(e); } -void InnerDropdown::leaveEvent(QEvent *e) { +void InnerDropdown::leaveEventHook(QEvent *e) { auto ms = getms(); if (_a_show.animating(ms) || _a_opacity.animating(ms)) { hideAnimated(); } else { _hideTimer.start(300); } - return TWidget::leaveEvent(e); + return TWidget::leaveEventHook(e); } void InnerDropdown::otherEnter() { diff --git a/Telegram/SourceFiles/ui/widgets/inner_dropdown.h b/Telegram/SourceFiles/ui/widgets/inner_dropdown.h index 7b3a31f661..75fd11ccc9 100644 --- a/Telegram/SourceFiles/ui/widgets/inner_dropdown.h +++ b/Telegram/SourceFiles/ui/widgets/inner_dropdown.h @@ -73,8 +73,8 @@ public: protected: void resizeEvent(QResizeEvent *e) override; void paintEvent(QPaintEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; bool eventFilter(QObject *obj, QEvent *e) override; int resizeGetHeight(int newWidth) override; diff --git a/Telegram/SourceFiles/ui/widgets/input_fields.cpp b/Telegram/SourceFiles/ui/widgets/input_fields.cpp index d7be4cb818..bcb4700072 100644 --- a/Telegram/SourceFiles/ui/widgets/input_fields.cpp +++ b/Telegram/SourceFiles/ui/widgets/input_fields.cpp @@ -133,7 +133,7 @@ QString FlatTextarea::tagsMimeType() { return qsl("application/x-td-field-tags"); } -FlatTextarea::FlatTextarea(QWidget *parent, const style::FlatTextarea &st, const QString &pholder, const QString &v, const TagList &tags) : QTextEdit(parent) +FlatTextarea::FlatTextarea(QWidget *parent, const style::FlatTextarea &st, const QString &pholder, const QString &v, const TagList &tags) : TWidgetHelper(parent) , _placeholderVisible(!v.length()) , _lastTextWithTags { v, tags } , _st(st) { @@ -1464,7 +1464,7 @@ void FlatTextarea::contextMenuEvent(QContextMenuEvent *e) { } } -FlatInput::FlatInput(QWidget *parent, const style::FlatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent) +FlatInput::FlatInput(QWidget *parent, const style::FlatInput &st, const QString &pholder, const QString &v) : TWidgetHelper(v, parent) , _oldtext(v) , _fullph(pholder) , _placeholderVisible(!v.length()) @@ -3228,7 +3228,7 @@ void InputField::setErrorShown(bool error) { } } -MaskedInputField::MaskedInputField(QWidget *parent, const style::InputField &st, const QString &placeholder, const QString &val) : QLineEdit(val, parent) +MaskedInputField::MaskedInputField(QWidget *parent, const style::InputField &st, const QString &placeholder, const QString &val) : TWidgetHelper(val, parent) , _st(st) , _oldtext(val) , _placeholderFull(placeholder) { diff --git a/Telegram/SourceFiles/ui/widgets/input_fields.h b/Telegram/SourceFiles/ui/widgets/input_fields.h index 3e833decce..ec563db336 100644 --- a/Telegram/SourceFiles/ui/widgets/input_fields.h +++ b/Telegram/SourceFiles/ui/widgets/input_fields.h @@ -28,9 +28,8 @@ namespace Ui { static UserData * const LookingUpInlineBot = SharedMemoryLocation(); -class FlatTextarea : public QTextEdit, private base::Subscriber { +class FlatTextarea : public TWidgetHelper, private base::Subscriber { Q_OBJECT - T_WIDGET public: using TagList = TextWithTags::Tags; @@ -112,10 +111,6 @@ public: }; void setTagMimeProcessor(std_::unique_ptr &&processor); - QMargins getMargins() const { - return QMargins(); - } - public slots: void onTouchTimer(); @@ -243,9 +238,8 @@ inline bool operator!=(const FlatTextarea::LinkRange &a, const FlatTextarea::Lin return !(a == b); } -class FlatInput : public QLineEdit, private base::Subscriber { +class FlatInput : public TWidgetHelper, private base::Subscriber { Q_OBJECT - T_WIDGET public: FlatInput(QWidget *parent, const style::FlatInput &st, const QString &ph = QString(), const QString &val = QString()); @@ -264,10 +258,6 @@ public: return _oldtext; } - QMargins getMargins() const { - return QMargins(); - } - public slots: void onTextChange(const QString &text); void onTextEdited(); @@ -694,9 +684,8 @@ private: bool _correcting = false; }; -class MaskedInputField : public QLineEdit, private base::Subscriber { +class MaskedInputField : public TWidgetHelper, private base::Subscriber { Q_OBJECT - T_WIDGET public: MaskedInputField(QWidget *parent, const style::InputField &st, const QString &placeholder = QString(), const QString &val = QString()); @@ -729,10 +718,6 @@ public: startPlaceholderAnimation(); } - QMargins getMargins() const { - return QMargins(); - } - public slots: void onTextChange(const QString &text); void onCursorPositionChanged(int oldPosition, int position); diff --git a/Telegram/SourceFiles/ui/widgets/labels.cpp b/Telegram/SourceFiles/ui/widgets/labels.cpp index 700d05c64d..0df368a1c2 100644 --- a/Telegram/SourceFiles/ui/widgets/labels.cpp +++ b/Telegram/SourceFiles/ui/widgets/labels.cpp @@ -359,12 +359,12 @@ void FlatLabel::mouseDoubleClickEvent(QMouseEvent *e) { } } -void FlatLabel::enterEvent(QEvent *e) { +void FlatLabel::enterEventHook(QEvent *e) { _lastMousePos = QCursor::pos(); dragActionUpdate(); } -void FlatLabel::leaveEvent(QEvent *e) { +void FlatLabel::leaveEventHook(QEvent *e) { ClickHandler::clearActive(this); } diff --git a/Telegram/SourceFiles/ui/widgets/labels.h b/Telegram/SourceFiles/ui/widgets/labels.h index 8e72c8473e..32f4ff78cd 100644 --- a/Telegram/SourceFiles/ui/widgets/labels.h +++ b/Telegram/SourceFiles/ui/widgets/labels.h @@ -120,8 +120,8 @@ protected: void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; void mouseDoubleClickEvent(QMouseEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void focusOutEvent(QFocusEvent *e) override; void focusInEvent(QFocusEvent *e) override; void keyPressEvent(QKeyEvent *e) override; diff --git a/Telegram/SourceFiles/ui/widgets/menu.cpp b/Telegram/SourceFiles/ui/widgets/menu.cpp index 6dcebc8285..19bfe357a1 100644 --- a/Telegram/SourceFiles/ui/widgets/menu.cpp +++ b/Telegram/SourceFiles/ui/widgets/menu.cpp @@ -298,17 +298,17 @@ void Menu::clearMouseSelection() { } } -void Menu::enterEvent(QEvent *e) { +void Menu::enterEventHook(QEvent *e) { QPoint mouse = QCursor::pos(); if (!rect().marginsRemoved(QMargins(0, _st.skip, 0, _st.skip)).contains(mapFromGlobal(mouse))) { clearMouseSelection(); } - return TWidget::enterEvent(e); + return TWidget::enterEventHook(e); } -void Menu::leaveEvent(QEvent *e) { +void Menu::leaveEventHook(QEvent *e) { clearMouseSelection(); - return TWidget::leaveEvent(e); + return TWidget::leaveEventHook(e); } void Menu::setSelected(int selected) { diff --git a/Telegram/SourceFiles/ui/widgets/menu.h b/Telegram/SourceFiles/ui/widgets/menu.h index 14aeb0537a..a9488f05c2 100644 --- a/Telegram/SourceFiles/ui/widgets/menu.h +++ b/Telegram/SourceFiles/ui/widgets/menu.h @@ -89,8 +89,8 @@ protected: void mouseMoveEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; private slots: void actionChanged(); diff --git a/Telegram/SourceFiles/ui/widgets/multi_select.cpp b/Telegram/SourceFiles/ui/widgets/multi_select.cpp index bfa900e2aa..ae991b56ec 100644 --- a/Telegram/SourceFiles/ui/widgets/multi_select.cpp +++ b/Telegram/SourceFiles/ui/widgets/multi_select.cpp @@ -606,7 +606,7 @@ QMargins MultiSelect::Inner::itemPaintMargins() const { }; } -void MultiSelect::Inner::leaveEvent(QEvent *e) { +void MultiSelect::Inner::leaveEventHook(QEvent *e) { clearSelection(); } diff --git a/Telegram/SourceFiles/ui/widgets/multi_select.h b/Telegram/SourceFiles/ui/widgets/multi_select.h index f6c3c3974a..615e968615 100644 --- a/Telegram/SourceFiles/ui/widgets/multi_select.h +++ b/Telegram/SourceFiles/ui/widgets/multi_select.h @@ -100,7 +100,7 @@ protected: int resizeGetHeight(int newWidth) override; void paintEvent(QPaintEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void keyPressEvent(QKeyEvent *e) override; diff --git a/Telegram/SourceFiles/ui/widgets/scroll_area.cpp b/Telegram/SourceFiles/ui/widgets/scroll_area.cpp index e3f6858be4..a9d658635d 100644 --- a/Telegram/SourceFiles/ui/widgets/scroll_area.cpp +++ b/Telegram/SourceFiles/ui/widgets/scroll_area.cpp @@ -40,7 +40,7 @@ void ScrollShadow::changeVisibility(bool shown) { setVisible(shown); } -ScrollBar::ScrollBar(ScrollArea *parent, bool vert, const style::ScrollArea *st) : QWidget(parent) +ScrollBar::ScrollBar(ScrollArea *parent, bool vert, const style::ScrollArea *st) : TWidget(parent) , _st(st) , _vertical(vert) , _hiding(_st->hiding != 0) @@ -214,13 +214,13 @@ void ScrollBar::hideTimeout(TimeMs dt) { } } -void ScrollBar::enterEvent(QEvent *e) { +void ScrollBar::enterEventHook(QEvent *e) { _hideTimer.stop(); setMouseTracking(true); setOver(true); } -void ScrollBar::leaveEvent(QEvent *e) { +void ScrollBar::leaveEventHook(QEvent *e) { if (!_moving) { setMouseTracking(false); } @@ -320,7 +320,7 @@ void SplittedWidgetOther::paintEvent(QPaintEvent *e) { } } -ScrollArea::ScrollArea(QWidget *parent, const style::ScrollArea &st, bool handleTouch) : QScrollArea(parent) +ScrollArea::ScrollArea(QWidget *parent, const style::ScrollArea &st, bool handleTouch) : TWidgetHelper(parent) , _st(st) , _horizontalBar(this, false, &_st) , _verticalBar(this, true, &_st) diff --git a/Telegram/SourceFiles/ui/widgets/scroll_area.h b/Telegram/SourceFiles/ui/widgets/scroll_area.h index 31189a24b3..f481125401 100644 --- a/Telegram/SourceFiles/ui/widgets/scroll_area.h +++ b/Telegram/SourceFiles/ui/widgets/scroll_area.h @@ -51,7 +51,7 @@ private: }; -class ScrollBar : public QWidget { +class ScrollBar : public TWidget { Q_OBJECT public: @@ -73,8 +73,8 @@ signals: protected: void paintEvent(QPaintEvent *e) override; - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; @@ -170,9 +170,8 @@ private: }; class SplittedWidgetOther; -class ScrollArea : public QScrollArea { +class ScrollArea : public TWidgetHelper { Q_OBJECT - T_WIDGET public: ScrollArea(QWidget *parent, const style::ScrollArea &st = st::defaultScrollArea, bool handleTouch = true); @@ -205,10 +204,6 @@ public: bool viewportEvent(QEvent *e) override; void keyPressEvent(QKeyEvent *e) override; - QMargins getMargins() const { - return QMargins(); - } - protected: bool eventFilter(QObject *obj, QEvent *e) override; diff --git a/Telegram/SourceFiles/window/notifications_manager_default.cpp b/Telegram/SourceFiles/window/notifications_manager_default.cpp index b1f7ea6810..47d6ed6928 100644 --- a/Telegram/SourceFiles/window/notifications_manager_default.cpp +++ b/Telegram/SourceFiles/window/notifications_manager_default.cpp @@ -792,7 +792,7 @@ bool Notification::unlinkHistory(History *history) { return unlink; } -void Notification::enterEvent(QEvent *e) { +void Notification::enterEventHook(QEvent *e) { if (!_history) return; if (auto manager = ManagerInstance.data()) { manager->stopAllHiding(); @@ -802,7 +802,7 @@ void Notification::enterEvent(QEvent *e) { } } -void Notification::leaveEvent(QEvent *e) { +void Notification::leaveEventHook(QEvent *e) { if (!_history) return; if (auto manager = ManagerInstance.data()) { manager->startAllHiding(); @@ -892,12 +892,12 @@ HideAllButton::~HideAllButton() { } } -void HideAllButton::enterEvent(QEvent *e) { +void HideAllButton::enterEventHook(QEvent *e) { _mouseOver = true; update(); } -void HideAllButton::leaveEvent(QEvent *e) { +void HideAllButton::leaveEventHook(QEvent *e) { _mouseOver = false; update(); } diff --git a/Telegram/SourceFiles/window/notifications_manager_default.h b/Telegram/SourceFiles/window/notifications_manager_default.h index 136ada4483..d37eed7b1d 100644 --- a/Telegram/SourceFiles/window/notifications_manager_default.h +++ b/Telegram/SourceFiles/window/notifications_manager_default.h @@ -203,8 +203,8 @@ public: ~Notification(); protected: - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void paintEvent(QPaintEvent *e) override; void mousePressEvent(QMouseEvent *e) override; bool eventFilter(QObject *o, QEvent *e) override; @@ -269,8 +269,8 @@ public: ~HideAllButton(); protected: - void enterEvent(QEvent *e) override; - void leaveEvent(QEvent *e) override; + void enterEventHook(QEvent *e) override; + void leaveEventHook(QEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; void paintEvent(QPaintEvent *e) override; diff --git a/Telegram/SourceFiles/window/themes/window_theme_editor_block.cpp b/Telegram/SourceFiles/window/themes/window_theme_editor_block.cpp index f692e79fc5..e15ad93fb3 100644 --- a/Telegram/SourceFiles/window/themes/window_theme_editor_block.cpp +++ b/Telegram/SourceFiles/window/themes/window_theme_editor_block.cpp @@ -621,7 +621,7 @@ void EditorBlock::updateSelected(QPoint localPosition) { setSelected(underMouseIndex); } -void EditorBlock::leaveEvent(QEvent *e) { +void EditorBlock::leaveEventHook(QEvent *e) { _mouseSelection = false; setSelected(-1); } diff --git a/Telegram/SourceFiles/window/themes/window_theme_editor_block.h b/Telegram/SourceFiles/window/themes/window_theme_editor_block.h index 5730e1ac85..0c910bf259 100644 --- a/Telegram/SourceFiles/window/themes/window_theme_editor_block.h +++ b/Telegram/SourceFiles/window/themes/window_theme_editor_block.h @@ -92,7 +92,7 @@ protected: void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; - void leaveEvent(QEvent *e) override; + void leaveEventHook(QEvent *e) override; private: class Row;