diff options
author | dec05eba <dec05eba@protonmail.com> | 2021-04-07 06:51:25 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2021-04-07 06:51:25 +0200 |
commit | 477bc6687a05f2820dcd1b8f2663b4a5537fb3ea (patch) | |
tree | 8057ee37bbfb19149caea9e1a59d6bdf2ee83af0 | |
parent | 9939b656bf6a383b793f8b5b402d60b44345a097 (diff) |
Matrix: mark window as urgent when being mentioned or receiving an invite
-rw-r--r-- | include/QuickMedia.hpp | 2 | ||||
-rw-r--r-- | src/QuickMedia.cpp | 23 | ||||
-rw-r--r-- | src/plugins/Matrix.cpp | 10 |
3 files changed, 33 insertions, 2 deletions
diff --git a/include/QuickMedia.hpp b/include/QuickMedia.hpp index a8692bf..c792d2d 100644 --- a/include/QuickMedia.hpp +++ b/include/QuickMedia.hpp @@ -94,6 +94,8 @@ namespace QuickMedia { const char* get_plugin_name() const; void manga_get_watch_history(const char *plugin_name, BodyItems &history_items); void youtube_get_watch_history(BodyItems &history_items); + + void window_set_urgent(); private: void init(Window parent_window); void load_plugin_by_name(std::vector<Tab> &tabs, const char *start_dir); diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index afd8461..ebbbba8 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -445,6 +445,21 @@ namespace QuickMedia { return body_item; } + void Program::window_set_urgent() { + XWMHints *hints = XGetWMHints(disp, x11_window); + if(!hints) { + fprintf(stderr, "seturgent: unable to get window manager hints\n"); + return; + } + + hints->flags |= XUrgencyHint; + + if(!XSetWMHints(disp, x11_window, hints)) + fprintf(stderr, "seturgent: unable to set urgency hint\n"); + + XFree(hints); + } + int Program::run(int argc, char **argv) { if(argc < 2) { usage(); @@ -616,6 +631,14 @@ namespace QuickMedia { XMapWindow(disp, x11_window); XFlush(disp); + XWMHints* hints = XAllocWMHints(); + if(hints) { + hints->flags = AllHints; + hints->initial_state = NormalState; + XSetWMHints(disp, x11_window, hints); + XFree(hints); + } + window.create(x11_window); resources_root = "/usr/share/quickmedia/"; diff --git a/src/plugins/Matrix.cpp b/src/plugins/Matrix.cpp index 0c44130..9db9872 100644 --- a/src/plugins/Matrix.cpp +++ b/src/plugins/Matrix.cpp @@ -387,8 +387,10 @@ namespace QuickMedia { body_item->thumbnail_size = sf::Vector2i(32, 32); body_item->set_timestamp(invite.timestamp); invites_page->add_body_item(std::move(body_item)); - if(invite.new_invite) + if(invite.new_invite) { show_notification("QuickMedia matrix - " + invite.room_name, "You were invited to " + invite.room_name + " by " + invited_by_display_name + " (" + invite.invited_by->user_id + ")"); + program->window_set_urgent(); + } } void MatrixQuickMedia::remove_invite(const std::string &room_id) { @@ -450,6 +452,8 @@ namespace QuickMedia { show_notification("QuickMedia matrix - " + unread_notification.sender + " (" + it.first->get_name() + ")", unread_notification.body); } } + if(!unread_notifications.empty()) + program->window_set_urgent(); //if(!unread_notifications.empty()) { // rooms_page->sort_rooms(); // room_tags_page->sort_rooms(); @@ -579,8 +583,10 @@ namespace QuickMedia { for(auto &message : messages) { if(message->notification_mentions_me) { // TODO: What if the message or username begins with "-"? also make the notification image be the avatar of the user - if((!is_window_focused || room != current_room || page_type == MatrixPageType::ROOM_LIST) && message->related_event_type != RelatedEventType::EDIT && message->related_event_type != RelatedEventType::REDACTION) + if((!is_window_focused || room != current_room || page_type == MatrixPageType::ROOM_LIST) && message->related_event_type != RelatedEventType::EDIT && message->related_event_type != RelatedEventType::REDACTION) { show_notification("QuickMedia matrix - " + matrix->message_get_author_displayname(message.get()) + " (" + room->get_name() + ")", message->body); + program->window_set_urgent(); + } } } } |