diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 58f23fef..854d57d7 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -156,6 +156,7 @@ ChatPage::ChatPage(QSharedPointer userSettings, QWidget *parent) if (user_mentions_popup_->isVisible()) { user_mentions_popup_->hide(); } else { + showNotificationsDialog(mentionsPos); http::client()->notifications( 1000, "", @@ -525,13 +526,12 @@ ChatPage::ChatPage(QSharedPointer userSettings, QWidget *parent) connect(this, &ChatPage::highlightedNotifsRetrieved, this, - [this](const mtx::responses::Notifications ¬if, const QPoint &widgetPos) { + [this](const mtx::responses::Notifications ¬if) { try { cache::client()->saveTimelineMentions(notif); } catch (const lmdb::error &e) { nhlog::db()->error("failed to save mentions: {}", e.what()); } - showNotificationsDialog(notif, widgetPos); }); connect(communitiesList_, @@ -1004,32 +1004,13 @@ ChatPage::sendDesktopNotifications(const mtx::responses::Notifications &res) } void -ChatPage::showNotificationsDialog(const mtx::responses::Notifications &res, const QPoint &widgetPos) +ChatPage::showNotificationsDialog(const QPoint &widgetPos) { - // TODO: Remove notifications from this function call. - Q_UNUSED(res); - auto notifDialog = user_mentions_popup_; - // for (const auto &item : res.notifications) { - // const auto event_id = QString::fromStdString(utils::event_id(item.event)); - // try { - // const auto room_id = QString::fromStdString(item.room_id); - // const auto user_id = utils::event_sender(item.event); - // const auto body = utils::event_body(item.event); - - // notifDialog->pushItem(event_id, user_id, body, room_id, current_room_); - - // } catch (const lmdb::error &e) { - // nhlog::db()->warn("error while sending desktop notification: {}", - // e.what()); - // } - // } notifDialog->setGeometry( widgetPos.x() - (width() / 10), widgetPos.y() + 25, width() / 5, height() / 2); - // notifDialog->move(widgetPos.x(), widgetPos.y()); - // notifDialog->setFixedWidth(width() / 10); - // notifDialog->setFixedHeight(height() / 2); + notifDialog->raise(); notifDialog->showPopup(); } diff --git a/src/ChatPage.h b/src/ChatPage.h index fb6fbb06..189af387 100644 --- a/src/ChatPage.h +++ b/src/ChatPage.h @@ -210,7 +210,7 @@ private: //! Send desktop notification for the received messages. void sendDesktopNotifications(const mtx::responses::Notifications &); - void showNotificationsDialog(const mtx::responses::Notifications &, const QPoint &point); + void showNotificationsDialog(const QPoint &point); QStringList generateTypingUsers(const QString &room_id, const std::vector &typing_users); diff --git a/src/popups/UserMentions.cpp b/src/popups/UserMentions.cpp index 267540cc..152cd82d 100644 --- a/src/popups/UserMentions.cpp +++ b/src/popups/UserMentions.cpp @@ -3,6 +3,7 @@ #include "Cache.h" #include "ChatPage.h" +#include "Logging.h" #include "UserMentions.h" #include "timeline/TimelineItem.h" @@ -12,7 +13,7 @@ UserMentions::UserMentions(QWidget *parent) : QWidget{parent} { setAttribute(Qt::WA_ShowWithoutActivating, true); - setWindowFlags(Qt::ToolTip | Qt::NoDropShadowWindowHint); + setWindowFlags(Qt::FramelessWindowHint | Qt::Popup); tab_layout_ = new QTabWidget(this); @@ -66,12 +67,7 @@ void UserMentions::initializeMentions(const QMap ¬ifs) { nhlog::ui()->debug("Initializing " + std::to_string(notifs.size()) + " notifications."); - for (auto widget : all_scroll_layout_->findChildren()) { - delete widget; - } - for (auto widget : local_scroll_layout_->findChildren()) { - delete widget; - } + for (const auto &item : notifs) { for (const auto notif : item.notifications) { const auto event_id = QString::fromStdString(utils::event_id(notif.event)); @@ -98,10 +94,16 @@ UserMentions::initializeMentions(const QMapfindChildren()) { + delete widget; + } + for (auto widget : local_scroll_layout_->findChildren()) { + delete widget; + } + auto notifs = cache::client()->getTimelineMentions(); initializeMentions(notifs); - show(); } diff --git a/src/popups/UserMentions.h b/src/popups/UserMentions.h index 0029eedd..a74bf2ec 100644 --- a/src/popups/UserMentions.h +++ b/src/popups/UserMentions.h @@ -2,6 +2,8 @@ #include +#include +#include #include #include #include @@ -9,6 +11,9 @@ #include #include #include +#include + +#include "Logging.h" namespace popups { @@ -18,8 +23,8 @@ class UserMentions : public QWidget public: UserMentions(QWidget *parent = nullptr); - void showPopup(); void initializeMentions(const QMap ¬ifs); + void showPopup(); private: void pushItem(const QString &event_id,