From 99e98ac8d97296b0a34351d3bc8b155b0c8fc6db Mon Sep 17 00:00:00 2001 From: fiaxh Date: Wed, 30 Dec 2020 20:22:14 +0100 Subject: [PATCH] Set window urgency hint independent of notification setting fixes #960 --- libdino/src/service/notification_events.vala | 14 ++++++++------ main/src/ui/application.vala | 15 +++++++++++++-- main/src/ui/notifier_freedesktop.vala | 9 --------- main/src/ui/notifier_gnotifications.vala | 9 --------- 4 files changed, 21 insertions(+), 26 deletions(-) diff --git a/libdino/src/service/notification_events.vala b/libdino/src/service/notification_events.vala index d1e55113..7e99dcf9 100644 --- a/libdino/src/service/notification_events.vala +++ b/libdino/src/service/notification_events.vala @@ -10,10 +10,6 @@ public class NotificationEvents : StreamInteractionModule, Object { public string id { get { return IDENTITY.id; } } public signal void notify_content_item(ContentItem content_item, Conversation conversation); - public signal void notify_subscription_request(Conversation conversation); - public signal void notify_connection_error(Account account, ConnectionManager.ConnectionError error); - public signal void notify_muc_invite(Account account, Jid room_jid, Jid from_jid, string? password, string? reason); - public signal void notify_voice_request(Account account, Jid room_jid, Jid from_jid, string nick); private StreamInteractor stream_interactor; private NotificationProvider? notifier; @@ -77,7 +73,10 @@ public class NotificationEvents : StreamInteractionModule, Object { if (!highlight) return; } - notifier.notify_message.begin(message, conversation, conversation_display_name, participant_display_name); + notify_content_item(item, conversation); + if (notify != Conversation.NotifySetting.OFF) { + notifier.notify_message.begin(message, conversation, conversation_display_name, participant_display_name); + } break; case FileItem.TYPE: FileTransfer file_transfer = ((FileItem) item).file_transfer; @@ -87,7 +86,10 @@ public class NotificationEvents : StreamInteractionModule, Object { if (notify == Conversation.NotifySetting.HIGHLIGHT) return; if (file_transfer.direction == FileTransfer.DIRECTION_SENT) return; - notifier.notify_file.begin(file_transfer, conversation, is_image, conversation_display_name, participant_display_name); + notify_content_item(item, conversation); + if (notify != Conversation.NotifySetting.OFF) { + notifier.notify_file.begin(file_transfer, conversation, is_image, conversation_display_name, participant_display_name); + } break; } } diff --git a/main/src/ui/application.vala b/main/src/ui/application.vala index 008b15c7..29b61357 100644 --- a/main/src/ui/application.vala +++ b/main/src/ui/application.vala @@ -28,11 +28,22 @@ public class Dino.Ui.Application : Gtk.Application, Dino.Application { create_actions(); startup.connect(() => { - stream_interactor.get_module(NotificationEvents.IDENTITY).register_notification_provider(new GNotificationsNotifier(stream_interactor)); + NotificationEvents notification_events = stream_interactor.get_module(NotificationEvents.IDENTITY); + notification_events.register_notification_provider(new GNotificationsNotifier(stream_interactor)); FreeDesktopNotifier? free_desktop_notifier = FreeDesktopNotifier.try_create(stream_interactor); if (free_desktop_notifier != null) { - stream_interactor.get_module(NotificationEvents.IDENTITY).register_notification_provider(free_desktop_notifier); + notification_events.register_notification_provider(free_desktop_notifier); } + notification_events.notify_content_item.connect((content_item, conversation) => { + // Set urgency hint also if (normal) notifications are disabled + // Don't set urgency hint in GNOME, produces "Window is active" notification + var desktop_env = Environment.get_variable("XDG_CURRENT_DESKTOP"); + if (desktop_env == null || !desktop_env.down().contains("gnome")) { + if (this.active_window != null) { + this.active_window.urgency_hint = true; + } + } + }); }); activate.connect(() => { diff --git a/main/src/ui/notifier_freedesktop.vala b/main/src/ui/notifier_freedesktop.vala index 22b104bc..00ba0d06 100644 --- a/main/src/ui/notifier_freedesktop.vala +++ b/main/src/ui/notifier_freedesktop.vala @@ -107,15 +107,6 @@ public class Dino.Ui.FreeDesktopNotifier : NotificationProvider, Object { } catch (Error e) { warning("Failed showing content item notification: %s", e.message); } - - // Don't set urgency hint in GNOME, produces "Window is active" notification - var desktop_env = Environment.get_variable("XDG_CURRENT_DESKTOP"); - if (desktop_env == null || !desktop_env.down().contains("gnome")) { - var app = (GLib.Application.get_default() as Application); - if (app.active_window != null) { - app.active_window.urgency_hint = true; - } - } } public async void notify_subscription_request(Conversation conversation) { diff --git a/main/src/ui/notifier_gnotifications.vala b/main/src/ui/notifier_gnotifications.vala index a7aab753..31d1ffa3 100644 --- a/main/src/ui/notifier_gnotifications.vala +++ b/main/src/ui/notifier_gnotifications.vala @@ -63,15 +63,6 @@ namespace Dino.Ui { if (active_conversation_ids != null) { active_conversation_ids.add(conversation.id.to_string()); } - - // Don't set urgency hint in GNOME, produces "Window is active" notification - var desktop_env = Environment.get_variable("XDG_CURRENT_DESKTOP"); - if (desktop_env == null || !desktop_env.down().contains("gnome")) { - var app = (GLib.Application.get_default() as Application); - if (app.active_window != null) { - app.active_window.urgency_hint = true; - } - } } public async void notify_subscription_request(Conversation conversation) {