From 08c8b9c6d63784f3db1fa3423e629db3ca461b94 Mon Sep 17 00:00:00 2001 From: Rahix Date: Sat, 17 Feb 2018 21:45:44 +0100 Subject: Implement notification sounds Add a new setting to toggle notification sounds on or off. Plays the systems default instant messaging message sound (message-new-instant) whenever a notification is shown if toggled on. --- main/CMakeLists.txt | 1 + main/data/settings_dialog.ui | 14 +++++++++++++- main/src/ui/notifications.vala | 8 ++++++++ main/src/ui/settings_dialog.vala | 3 +++ 4 files changed, 25 insertions(+), 1 deletion(-) (limited to 'main') diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 58e1ab7d..0ef6099d 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -9,6 +9,7 @@ find_packages(MAIN_PACKAGES REQUIRED GModule GObject GTK3>=3.22 + Canberra ) set(RESOURCE_LIST diff --git a/main/data/settings_dialog.ui b/main/data/settings_dialog.ui index 9d18bdc7..861d8b74 100644 --- a/main/data/settings_dialog.ui +++ b/main/data/settings_dialog.ui @@ -53,6 +53,18 @@ 1 + + + Play a sound when a new message arrives + True + + + 0 + 3 + 1 + 1 + + Convert smileys to emojis @@ -60,7 +72,7 @@ 0 - 3 + 4 1 1 diff --git a/main/src/ui/notifications.vala b/main/src/ui/notifications.vala index 246452ea..2eb144e4 100644 --- a/main/src/ui/notifications.vala +++ b/main/src/ui/notifications.vala @@ -14,11 +14,14 @@ public class Notifications : Object { private HashMap notifications = new HashMap(Conversation.hash_func, Conversation.equals_func); private Set? active_conversation_ids = null; private Set? active_ids = new HashSet(); + private Canberra.Context sound_context; public Notifications(StreamInteractor stream_interactor, Gtk.Window window) { this.stream_interactor = stream_interactor; this.window = window; + Canberra.Context.create(out sound_context); + stream_interactor.get_module(ChatInteraction.IDENTITY).focused_in.connect((focused_conversation) => { if (active_conversation_ids == null) { Gee.List conversations = stream_interactor.get_module(ConversationManager.IDENTITY).get_active_conversations(); @@ -68,6 +71,11 @@ public class Notifications : Object { active_conversation_ids.add(conversation.id.to_string()); window.urgency_hint = true; } + if (conversation.get_sound_setting(stream_interactor)) { + sound_context.play (0, + Canberra.PROP_EVENT_ID, "message-new-instant", + Canberra.PROP_EVENT_DESCRIPTION, "New Dino message"); + } } private void on_received_subscription_request(Jid jid, Account account) { diff --git a/main/src/ui/settings_dialog.vala b/main/src/ui/settings_dialog.vala index e40b2993..58c86bde 100644 --- a/main/src/ui/settings_dialog.vala +++ b/main/src/ui/settings_dialog.vala @@ -8,6 +8,7 @@ class SettingsDialog : Dialog { [GtkChild] private CheckButton typing_checkbutton; [GtkChild] private CheckButton marker_checkbutton; [GtkChild] private CheckButton notification_checkbutton; + [GtkChild] private CheckButton sound_checkbutton; [GtkChild] private CheckButton emoji_checkbutton; Dino.Entities.Settings settings = Dino.Application.get_default().settings; @@ -18,11 +19,13 @@ class SettingsDialog : Dialog { typing_checkbutton.active = settings.send_typing; marker_checkbutton.active = settings.send_marker; notification_checkbutton.active = settings.notifications; + sound_checkbutton.active = settings.sound; emoji_checkbutton.active = settings.convert_utf8_smileys; typing_checkbutton.toggled.connect(() => { settings.send_typing = typing_checkbutton.active; } ); marker_checkbutton.toggled.connect(() => { settings.send_marker = marker_checkbutton.active; } ); notification_checkbutton.toggled.connect(() => { settings.notifications = notification_checkbutton.active; } ); + sound_checkbutton.toggled.connect(() => { settings.sound = sound_checkbutton.active; } ); emoji_checkbutton.toggled.connect(() => { settings.convert_utf8_smileys = emoji_checkbutton.active; }); } } -- cgit v1.2.3-70-g09d2