summary refs log tree commit diff stats
path: root/src/common
diff options
context:
space:
mode:
authorTingPing <tingping@tingping.se>2013-06-12 10:41:52 -0400
committerTingPing <tingping@tingping.se>2013-06-12 10:41:52 -0400
commit8be56d700309fad3966356249f024ed94ff36f8b (patch)
tree8158cfd61a68e8c37252babc98ef62a68be9b644 /src/common
parent8ce1a9476d07c38317b6f2d3fd5245174f76211a (diff)
Don't open libcanberra connection for every event
Closes #645
Diffstat (limited to 'src/common')
-rw-r--r--src/common/text.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/common/text.c b/src/common/text.c
index 3d1c9280..f0a1dfb1 100644
--- a/src/common/text.c
+++ b/src/common/text.c
@@ -58,6 +58,9 @@ struct pevt_stage1
 	struct pevt_stage1 *next;
 };
 
+#ifdef USE_LIBCANBERRA
+static ca_context *ca_con;
+#endif
 
 static void mkdir_p (char *filename);
 static char *log_create_filename (char *channame);
@@ -2209,9 +2212,6 @@ sound_play (const char *file, gboolean quiet)
 	char *wavfile;
 #ifndef WIN32
 	char *cmd;
-#ifdef USE_LIBCANBERRA
-	ca_context *con;
-#endif
 #endif
 
 	/* the pevents GUI editor triggers this after removing a soundfile */
@@ -2240,9 +2240,16 @@ sound_play (const char *file, gboolean quiet)
 		PlaySound (wavfile, NULL, SND_NODEFAULT|SND_FILENAME|SND_ASYNC);
 #else
 #ifdef USE_LIBCANBERRA
-		ca_context_create (&con);
-		/* TODO: Volume setting? */
-		if (ca_context_play (con, 0, CA_PROP_MEDIA_FILENAME, wavfile, NULL) != 0)
+		if (ca_con == NULL)
+		{
+			ca_context_create (&ca_con);
+			ca_context_change_props (ca_con,
+											CA_PROP_APPLICATION_ID, "hexchat",
+											CA_PROP_APPLICATION_NAME, "HexChat",
+											CA_PROP_APPLICATION_ICON_NAME, "hexchat", NULL);
+		}
+
+		if (ca_context_play (ca_con, 0, CA_PROP_MEDIA_FILENAME, wavfile, NULL) != 0)
 #endif
 		{
 			cmd = g_find_program_in_path ("play");