From 7f2c98f17a7f5aa2ee330d5965d6df8095cf6a3e Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 15 Nov 2024 22:46:07 +0300 Subject: [PATCH] Fixed mouse events in chats filters strip with inner padding. --- .../ui/widgets/chat_filters_tabs_slider.cpp | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.cpp b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.cpp index def399081..ac6f6dcbd 100644 --- a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.cpp +++ b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.cpp @@ -15,6 +15,18 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include namespace Ui { +namespace { + +[[nodiscard]] QMouseEvent TranslatedMouseEvent(QMouseEvent *e) { + return QMouseEvent( + e->type(), + e->pos() + QPoint(-st::dialogsSearchTabsPadding, 0), + e->button(), + e->buttons(), + e->modifiers()); +} + +} // namespace ChatsFiltersTabs::ChatsFiltersTabs( not_null parent, @@ -278,29 +290,32 @@ void ChatsFiltersTabs::paintEvent(QPaintEvent *e) { } void ChatsFiltersTabs::mousePressEvent(QMouseEvent *e) { - const auto mouseButton = e->button(); + auto m = TranslatedMouseEvent(e); + const auto mouseButton = m.button(); if (mouseButton == Qt::MouseButton::LeftButton) { - _lockedPressed = (e->pos().x() >= _lockedFromX); + _lockedPressed = (m.pos().x() >= _lockedFromX); if (_lockedPressed) { - Ui::RpWidget::mousePressEvent(e); + Ui::RpWidget::mousePressEvent(&m); } else { - Ui::SettingsSlider::mousePressEvent(e); + Ui::SettingsSlider::mousePressEvent(&m); } } else { - Ui::RpWidget::mousePressEvent(e); + Ui::RpWidget::mousePressEvent(&m); } } void ChatsFiltersTabs::mouseMoveEvent(QMouseEvent *e) { + auto m = TranslatedMouseEvent(e); if (_reordering) { - Ui::RpWidget::mouseMoveEvent(e); + Ui::RpWidget::mouseMoveEvent(&m); } else { - Ui::SettingsSlider::mouseMoveEvent(e); + Ui::SettingsSlider::mouseMoveEvent(&m); } } void ChatsFiltersTabs::mouseReleaseEvent(QMouseEvent *e) { - const auto mouseButton = e->button(); + auto m = TranslatedMouseEvent(e); + const auto mouseButton = m.button(); if (mouseButton == Qt::MouseButton::LeftButton) { if (base::take(_lockedPressed)) { _lockedPressed = false; @@ -313,16 +328,16 @@ void ChatsFiltersTabs::mouseReleaseEvent(QMouseEvent *e) { } } } else { - Ui::SettingsSlider::mouseReleaseEvent(e); + Ui::SettingsSlider::mouseReleaseEvent(&m); } } } else { - Ui::RpWidget::mouseReleaseEvent(e); + Ui::RpWidget::mouseReleaseEvent(&m); } } void ChatsFiltersTabs::contextMenuEvent(QContextMenuEvent *e) { - const auto pos = e->pos(); + const auto pos = e->pos() + QPoint(-st::dialogsSearchTabsPadding, 0); if (pos.x() >= _lockedFromX) { return; }