[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