summary refs log tree commit diff stats
path: root/src
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
parent8ce1a9476d07c38317b6f2d3fd5245174f76211a (diff)
Don't open libcanberra connection for every event
Closes #645
Diffstat (limited to 'src')
-rw-r--r--src/common/text.c19
-rw-r--r--src/fe-gtk/fe-gtk.c18
2 files changed, 26 insertions, 11 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");
diff --git a/src/fe-gtk/fe-gtk.c b/src/fe-gtk/fe-gtk.c
index d737b744..e017b9b9 100644
--- a/src/fe-gtk/fe-gtk.c
+++ b/src/fe-gtk/fe-gtk.c
@@ -62,6 +62,9 @@
 
 GdkPixmap *channelwin_pix;
 
+#ifdef USE_LIBCANBERRA
+static ca_context *ca_con;
+#endif
 
 #ifdef USE_XLIB
 
@@ -674,11 +677,16 @@ fe_beep (session *sess)
 	}
 #else
 #ifdef USE_LIBCANBERRA
-	ca_context *con;
-	ca_context_create (&con);
-	if (ca_context_play (con, 0,
-					CA_PROP_APPLICATION_NAME, DISPLAY_NAME,
-					CA_PROP_EVENT_ID, "message-new-instant", 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, DISPLAY_NAME,
+										CA_PROP_APPLICATION_ICON_NAME, "hexchat", NULL);
+	}
+
+	if (ca_context_play (ca_con, 0, CA_PROP_EVENT_ID, "message-new-instant", NULL) != 0)
 #endif
 	gdk_beep ();
 #endif