aboutsummaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorRahix <rahix@rahix.de>2018-02-17 21:45:44 +0100
committerRahix <rahix@rahix.de>2018-02-17 21:51:02 +0100
commit08c8b9c6d63784f3db1fa3423e629db3ca461b94 (patch)
treea2a2cc5667e3c10f5d4f5314c253fba2e0b335c6 /main
parent5436d716c0f508eb8ab70f322da862f996ce421e (diff)
downloaddino-08c8b9c6d63784f3db1fa3423e629db3ca461b94.tar.gz
dino-08c8b9c6d63784f3db1fa3423e629db3ca461b94.zip
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.
Diffstat (limited to 'main')
-rw-r--r--main/CMakeLists.txt1
-rw-r--r--main/data/settings_dialog.ui14
-rw-r--r--main/src/ui/notifications.vala8
-rw-r--r--main/src/ui/settings_dialog.vala3
4 files changed, 25 insertions, 1 deletions
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
@@ -54,13 +54,25 @@
</packing>
</child>
<child>
+ <object class="GtkCheckButton" id="sound_checkbutton">
+ <property name="label" translatable="yes">Play a sound when a new message arrives</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkCheckButton" id="emoji_checkbutton">
<property name="label" translatable="yes">Convert smileys to emojis</property>
<property name="visible">True</property>
</object>
<packing>
<property name="left_attach">0</property>
- <property name="top_attach">3</property>
+ <property name="top_attach">4</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
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<Conversation, Notification> notifications = new HashMap<Conversation, Notification>(Conversation.hash_func, Conversation.equals_func);
private Set<string>? active_conversation_ids = null;
private Set<string>? active_ids = new HashSet<string>();
+ 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<Conversation> 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; });
}
}