[Galago-commits] r2445 - in trunk/notification-daemon: . src themes/standard

galago-commits at freedesktop.org galago-commits at freedesktop.org
Thu Jan 19 23:45:21 PST 2006


Author: chipx86
Date: 2006-01-19 23:45:19 -0800 (Thu, 19 Jan 2006)
New Revision: 2445

Modified:
   trunk/notification-daemon/ChangeLog
   trunk/notification-daemon/src/daemon.c
   trunk/notification-daemon/src/engines.c
   trunk/notification-daemon/src/engines.h
   trunk/notification-daemon/themes/standard/theme.c
Log:
- Pass a couple of callbacks to the theme engine's create_notification() function: action_invoked and url_clicked.
- Move the URL clicking callback to daemon.c from the standard engine.  The standard engine now calls the passed url_clicked function.


Modified: trunk/notification-daemon/ChangeLog
===================================================================
--- trunk/notification-daemon/ChangeLog	2006-01-20 07:34:00 UTC (rev 2444)
+++ trunk/notification-daemon/ChangeLog	2006-01-20 07:45:19 UTC (rev 2445)
@@ -1,3 +1,14 @@
+Thu Jan 19 23:44:31 PST 2006  Christian Hammond <chipx86 at chipx86.com>
+
+	* src/daemon.c:
+	* src/engines.c:
+	* src/engines.h:
+	* themes/standard/theme.c:
+	  - Pass a couple of callbacks to the theme engine's
+	    create_notification() function: action_invoked and url_clicked.
+	  - Move the URL clicking callback to daemon.c from the standard engine.
+	    The standard engine now calls the passed url_clicked function.
+
 Thu Jan 19 23:33:46 PST 2006  Christian Hammond <chipx86 at chipx86.com>
 
 	* themes/standard/theme.c:

Modified: trunk/notification-daemon/src/daemon.c
===================================================================
--- trunk/notification-daemon/src/daemon.c	2006-01-20 07:34:00 UTC (rev 2444)
+++ trunk/notification-daemon/src/daemon.c	2006-01-20 07:45:19 UTC (rev 2445)
@@ -623,6 +623,55 @@
 	priv->poptart_stack = g_slist_prepend(priv->poptart_stack, nw);
 }
 
+static void
+action_invoked_cb(GtkWindow *nw, const char *key)
+{
+	printf("Action invoked: '%s'\n", key);
+}
+
+static void
+url_clicked_cb(GtkWindow *nw, const char *url)
+{
+	char *escaped_url;
+	char *cmd = NULL;
+
+	escaped_url = g_shell_quote(url);
+
+	/*
+	 * We can't actually check for GNOME_DESKTOP_SESSION_ID, because it's
+	 * not in the environment for this program :(
+	 */
+	if (/*g_getenv("GNOME_DESKTOP_SESSION_ID") != NULL &&*/
+		g_find_program_in_path("gnome-open") != NULL)
+	{
+		cmd = g_strdup_printf("gnome-open %s", escaped_url);
+	}
+	else if (g_find_program_in_path("mozilla-firefox") != NULL)
+	{
+		cmd = g_strdup_printf("mozilla-firefox %s", escaped_url);
+	}
+	else if (g_find_program_in_path("firefox") != NULL)
+	{
+		cmd = g_strdup_printf("firefox %s", escaped_url);
+	}
+	else if (g_find_program_in_path("mozilla") != NULL)
+	{
+		cmd = g_strdup_printf("mozilla %s", escaped_url);
+	}
+	else
+	{
+		g_warning("Unable to find a browser.");
+	}
+
+	g_free(escaped_url);
+
+	if (cmd != NULL)
+	{
+		g_spawn_command_line_async(cmd, NULL);
+		g_free(cmd);
+	}
+}
+
 gboolean
 notify_daemon_notify_handler(NotifyDaemon *daemon,
 							 const gchar *app_name,
@@ -653,7 +702,7 @@
 	}
 	else
 	{
-		nw = theme_create_notification();
+		nw = theme_create_notification(action_invoked_cb, url_clicked_cb);
 	}
 
 	theme_set_notification_text(nw, summary, body);

Modified: trunk/notification-daemon/src/engines.c
===================================================================
--- trunk/notification-daemon/src/engines.c	2006-01-20 07:34:00 UTC (rev 2444)
+++ trunk/notification-daemon/src/engines.c	2006-01-20 07:45:19 UTC (rev 2445)
@@ -9,7 +9,8 @@
 	GModule *module;
 	guint ref_count;
 
-	GtkWindow *(*create_notification)(void);
+	GtkWindow *(*create_notification)(ActionInvokedCb action_invoked_cb,
+									  UrlClickedCb url_clicked_cb);
 	void (*destroy_notification)(GtkWindow *nw);
 	void (*show_notification)(GtkWindow *nw);
 	void (*hide_notification)(GtkWindow *nw);
@@ -146,10 +147,12 @@
 }
 
 GtkWindow *
-theme_create_notification(void)
+theme_create_notification(ActionInvokedCb action_invoked_cb,
+						  UrlClickedCb url_clicked_cb)
 {
 	ThemeEngine *engine = get_theme_engine();
-	GtkWindow *nw = engine->create_notification();
+	GtkWindow *nw = engine->create_notification(action_invoked_cb,
+												url_clicked_cb);
 	g_object_set_data(G_OBJECT(nw), "_theme_engine", engine);
 	engine->ref_count++;
 	return nw;

Modified: trunk/notification-daemon/src/engines.h
===================================================================
--- trunk/notification-daemon/src/engines.h	2006-01-20 07:34:00 UTC (rev 2444)
+++ trunk/notification-daemon/src/engines.h	2006-01-20 07:45:19 UTC (rev 2445)
@@ -3,7 +3,11 @@
 
 #include <gtk/gtk.h>
 
-GtkWindow *theme_create_notification(void);
+typedef void (*ActionInvokedCb)(GtkWindow *nw, const char *key);
+typedef void (*UrlClickedCb)(GtkWindow *nw, const char *url);
+
+GtkWindow *theme_create_notification(ActionInvokedCb action_invoked_cb,
+									 UrlClickedCb url_clicked_cb);
 void theme_destroy_notification(GtkWindow *nw);
 void theme_show_notification(GtkWindow *nw);
 void theme_hide_notification(GtkWindow *nw);

Modified: trunk/notification-daemon/themes/standard/theme.c
===================================================================
--- trunk/notification-daemon/themes/standard/theme.c	2006-01-20 07:34:00 UTC (rev 2444)
+++ trunk/notification-daemon/themes/standard/theme.c	2006-01-20 07:45:19 UTC (rev 2445)
@@ -1,6 +1,9 @@
 #include <gtk/gtk.h>
 #include <libsexy/sexy-url-label.h>
 
+typedef void (*ActionInvokedCb)(GtkWindow *nw, const char *key);
+typedef void (*UrlClickedCb)(GtkWindow *nw, const char *url);
+
 typedef struct
 {
 	GtkWidget *spacer;
@@ -22,6 +25,9 @@
 	GdkRegion *window_region;
 	GHashTable *hints;
 
+	ActionInvokedCb action_invoked;
+	UrlClickedCb url_clicked;
+
 } WindowData;
 
 #define WIDTH         300
@@ -74,51 +80,9 @@
 	return FALSE;
 }
 
-static void
-url_activated_cb(GtkWidget *url_label, const gchar *url)
-{
-	char *escaped_url;
-	char *cmd = NULL;
-
-	escaped_url = g_shell_quote(url);
-
-	/*
-	 * We can't actually check for GNOME_DESKTOP_SESSION_ID, because it's
-	 * not in the environment for this program :(
-	 */
-	if (/*g_getenv("GNOME_DESKTOP_SESSION_ID") != NULL &&*/
-		g_find_program_in_path("gnome-open") != NULL)
-	{
-		cmd = g_strdup_printf("gnome-open %s", escaped_url);
-	}
-	else if (g_find_program_in_path("mozilla-firefox") != NULL)
-	{
-		cmd = g_strdup_printf("mozilla-firefox %s", escaped_url);
-	}
-	else if (g_find_program_in_path("firefox") != NULL)
-	{
-		cmd = g_strdup_printf("firefox %s", escaped_url);
-	}
-	else if (g_find_program_in_path("mozilla") != NULL)
-	{
-		cmd = g_strdup_printf("mozilla %s", escaped_url);
-	}
-	else
-	{
-		g_warning("Unable to find a browser.");
-	}
-
-	g_free(escaped_url);
-
-	if (cmd != NULL)
-	{
-		g_spawn_command_line_async(cmd, NULL);
-		g_free(cmd);
-	}
-}
-
 GtkWindow *
-create_notification(void)
+create_notification(ActionInvokedCb action_invoked,
+					UrlClickedCb url_clicked)
 {
 	GtkWidget *win;
 	GtkWidget *main_vbox;
@@ -129,6 +93,8 @@
 	WindowData *windata;
 
 	windata = g_new0(WindowData, 1);
+	windata->action_invoked = action_invoked;
+	windata->url_clicked = url_clicked;
 
 	win = gtk_window_new(GTK_WINDOW_POPUP);
 	gtk_widget_add_events(win, GDK_BUTTON_RELEASE_MASK);
@@ -187,8 +153,8 @@
 	gtk_box_pack_start(GTK_BOX(vbox), windata->body_label, TRUE, TRUE, 0);
 	gtk_misc_set_alignment(GTK_MISC(windata->body_label), 0, 0);
 	gtk_label_set_line_wrap(GTK_LABEL(windata->body_label), TRUE);
-	g_signal_connect(G_OBJECT(windata->body_label), "url_activated",
-					 G_CALLBACK(url_activated_cb), NULL);
+	g_signal_connect_swapped(G_OBJECT(windata->body_label), "url_activated",
+							 G_CALLBACK(windata->url_clicked), win);
 
 	windata->actions_box = gtk_hbox_new(FALSE, 0);
 	gtk_widget_show(windata->actions_box);



More information about the galago-commits mailing list