summaryrefslogtreecommitdiffstats
path: root/x11/zenity/files
diff options
context:
space:
mode:
authorkwm <kwm@df743ca5-7f9a-e211-a948-0013205c9059>2011-03-07 02:40:54 +0800
committerkwm <kwm@df743ca5-7f9a-e211-a948-0013205c9059>2011-03-07 02:40:54 +0800
commit5eb30550d545134961b6eded1a8607147fd3b37c (patch)
tree33c075991931d89b6b7724a2d8f3fb9e539ad5ab /x11/zenity/files
parent8104460893225650ea52b59d607fdc4c954d3eb1 (diff)
downloadmarcuscom-ports-5eb30550d545134961b6eded1a8607147fd3b37c.tar
marcuscom-ports-5eb30550d545134961b6eded1a8607147fd3b37c.tar.gz
marcuscom-ports-5eb30550d545134961b6eded1a8607147fd3b37c.tar.bz2
marcuscom-ports-5eb30550d545134961b6eded1a8607147fd3b37c.tar.lz
marcuscom-ports-5eb30550d545134961b6eded1a8607147fd3b37c.tar.xz
marcuscom-ports-5eb30550d545134961b6eded1a8607147fd3b37c.tar.zst
marcuscom-ports-5eb30550d545134961b6eded1a8607147fd3b37c.zip
Fix build with new libnotify api.
git-svn-id: svn://creme-brulee.marcuscom.com/ports/trunk@15353 df743ca5-7f9a-e211-a948-0013205c9059
Diffstat (limited to 'x11/zenity/files')
-rw-r--r--x11/zenity/files/patch-src_notification.c284
1 files changed, 284 insertions, 0 deletions
diff --git a/x11/zenity/files/patch-src_notification.c b/x11/zenity/files/patch-src_notification.c
new file mode 100644
index 000000000..8adaef867
--- /dev/null
+++ b/x11/zenity/files/patch-src_notification.c
@@ -0,0 +1,284 @@
+From 620d5505c59b5b5dd092bfa35bdf3e7723f1e7c3 Mon Sep 17 00:00:00 2001
+From: William Jon McCann <jmccann@redhat.com>
+Date: Sat, 09 Oct 2010 08:59:44 +0000
+Subject: Require libnotify 0.6.1
+
+https://bugzilla.gnome.org/show_bug.cgi?id=631737
+---
+diff --git a/src/notification.c b/src/notification.c
+index 99a2e36..531aed2 100644
+--- src/notification.c
++++ src/notification.c
+@@ -24,75 +24,31 @@
+
+ #include <config.h>
+
++#include <unistd.h>
++#include <stdlib.h>
+ #include <gtk/gtk.h>
+ #include <time.h>
+ #include <string.h>
+-
+-#ifdef HAVE_LIBNOTIFY
+ #include <libnotify/notify.h>
+-#endif
+
+ #include "zenity.h"
+ #include "util.h"
+
+-static GtkStatusIcon *status_icon;
+-static gchar *icon_file;
+-static const gchar *icon_stock;
+-static gint icon_size;
++static char *icon_file;
+
+ static void
+-zenity_notification_icon_update (void)
++on_notification_default_action (NotifyNotification *n,
++ const char *action,
++ void *user_data)
+ {
+- GdkPixbuf *pixbuf;
+- GError *error = NULL;
+-
+- pixbuf = gdk_pixbuf_new_from_file_at_scale (icon_file, icon_size, icon_size, TRUE, &error);
+-
+- if (error) {
+- g_warning ("Could not load notification icon '%s': %s",
+- icon_file, error->message);
+- g_clear_error (&error);
+- }
+- if (!pixbuf) {
+- pixbuf = gdk_pixbuf_new_from_file_at_scale (ZENITY_IMAGE_FULLPATH ("zenity-notification.png"),
+- icon_size, icon_size, TRUE, NULL);
+- }
+-
+- gtk_status_icon_set_from_pixbuf (status_icon, pixbuf);
+-
+- if (pixbuf) {
+- g_object_unref (pixbuf);
+- }
+-}
+-
+-static gboolean
+-zenity_notification_icon_size_changed_cb (GtkStatusIcon *icon,
+- gint size,
+- gpointer user_data)
+-{
+- icon_size = size;
+-
+- /* If we're displaying not a stock icon but a custom pixbuf,
+- * we need to update the icon for the new size.
+- */
+- if (!icon_stock) {
+- zenity_notification_icon_update ();
+-
+- return TRUE;
+- }
++ ZenityData *zen_data;
+
+- return FALSE;
+-}
++ zen_data = (ZenityData *)user_data;
++ notify_notification_close (n, NULL);
+
+-static gboolean
+-zenity_notification_icon_activate_cb (GtkWidget *widget,
+- ZenityData *data)
+-{
+- data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
++ zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
+
+ gtk_main_quit ();
+-
+- return TRUE;
+ }
+
+ static gboolean
+@@ -145,26 +101,14 @@ zenity_notification_handle_stdin (GIOChannel *channel,
+ while (*value && g_ascii_isspace (*value)) value++;
+
+ if (!g_ascii_strcasecmp (command, "icon")) {
+- icon_stock = zenity_util_stock_from_filename (value);
+-
+ g_free (icon_file);
+ icon_file = g_strdup (value);
+-
+- if (icon_stock) {
+- gtk_status_icon_set_from_stock (status_icon, icon_stock);
+- } else if (gtk_status_icon_get_visible (status_icon) &&
+- gtk_status_icon_is_embedded (status_icon)) {
+- zenity_notification_icon_update ();
+- }
+ } else if (!g_ascii_strcasecmp (command, "message")) {
+-#ifdef HAVE_LIBNOTIFY
+ /* display a notification bubble */
+ if (!g_utf8_validate (value, -1, NULL)) {
+ g_warning ("Invalid UTF-8 in input!");
+- } else if (notify_is_initted ()) {
++ } else {
+ NotifyNotification *notif;
+- const gchar *icon = NULL;
+- gchar *freeme = NULL;
+ gchar **message;
+ error = NULL;
+
+@@ -178,46 +122,37 @@ zenity_notification_handle_stdin (GIOChannel *channel,
+ continue;
+ }
+
+- if (icon_stock) {
+- icon = icon_stock;
+- } else if (icon_file) {
+- icon = freeme = g_filename_to_uri (icon_file, NULL, NULL);
+- }
+-
+- notif = notify_notification_new_with_status_icon (
+- message[0] /* title */,
+- message[1] /* summary */,
+- icon, status_icon);
++ notif = notify_notification_new (message[0] /* title */,
++ message[1] /* summary */,
++ icon_file);
+
+ g_strfreev (message);
+- g_free (freeme);
+
+- notify_notification_show (notif, &error);
+-
+- if (error) {
+- g_warning ("Error showing notification: %s", error->message);
+- g_error_free (error);
+- }
++ notify_notification_show (notif, &error);
++ if (error) {
++ g_warning ("Error showing notification: %s", error->message);
++ g_error_free (error);
++ }
+
+ g_object_unref (notif);
+- } else {
+-#else
+- { /* this brace is for balance */
+-#endif
+- g_warning ("Notification framework not available");
+- }
++ }
+ } else if (!g_ascii_strcasecmp (command, "tooltip")) {
+- if (g_utf8_validate (value, -1, NULL)) {
+- gtk_status_icon_set_tooltip_text (status_icon, value);
+- } else {
++ if (!g_utf8_validate (value, -1, NULL)) {
+ g_warning ("Invalid UTF-8 in input!");
++ } else {
++ NotifyNotification *notif;
++
++ notif = notify_notification_new (value,
++ NULL,
++ icon_file);
++ notify_notification_show (notif, &error);
++ if (error) {
++ g_warning ("Error showing notification: %s", error->message);
++ g_error_free (error);
++ }
+ }
+ } else if (!g_ascii_strcasecmp (command, "visible")) {
+- if (!g_ascii_strcasecmp (value, "false")) {
+- gtk_status_icon_set_visible (status_icon, FALSE);
+- } else {
+- gtk_status_icon_set_visible (status_icon, TRUE);
+- }
++
+ } else {
+ g_warning ("Unknown command '%s'", command);
+ }
+@@ -249,55 +184,52 @@ zenity_notification_listen_on_stdin (ZenityData *data)
+ zenity_notification_handle_stdin, data);
+ }
+
+-void
++void
+ zenity_notification (ZenityData *data, ZenityNotificationData *notification_data)
+ {
+- status_icon = gtk_status_icon_new ();
+- g_signal_connect (status_icon, "size-changed",
+- G_CALLBACK (zenity_notification_icon_size_changed_cb), data);
++ GError *error;
++ NotifyNotification *notification;
+
+- if (notification_data->notification_text) {
+- gtk_status_icon_set_tooltip_text (status_icon, notification_data->notification_text);
+- } else {
+- gtk_status_icon_set_tooltip_text (status_icon, _("Zenity notification"));
+- }
+-
+- icon_file = g_strdup (data->window_icon);
+- icon_stock = zenity_util_stock_from_filename (data->window_icon);
+-
+- /* Only set the stock icon here; if we're going to display a
+- * custom pixbuf we wait for the size-changed signal to load
+- * it at the right size.
+- */
+- if (icon_stock) {
+- gtk_status_icon_set_from_stock (status_icon, icon_stock);
+- }
+-
+-#ifdef HAVE_LIBNOTIFY
+ /* create the notification widget */
+ if (!notify_is_initted ()) {
+ notify_init (_("Zenity notification"));
+ }
+-#endif
+-
++
+ if (notification_data->listen) {
+ zenity_notification_listen_on_stdin (data);
+ } else {
+- /* if we aren't listening for changes, then close on activate (left-click) */
+- g_signal_connect (status_icon, "activate",
+- G_CALLBACK (zenity_notification_icon_activate_cb), data);
+- }
++ if (notification_data->notification_text == NULL) {
++ exit (1);
++ }
++
++ notification = notify_notification_new (notification_data->notification_text, NULL, data->window_icon);
++ if (notification == NULL) {
++ exit (1);
++ }
++
++ /* if we aren't listening for changes, then close on default action */
++ notify_notification_add_action (notification,
++ "default",
++ "Do Default Action",
++ (NotifyActionCallback) on_notification_default_action,
++ data,
++ NULL);
++
++ /* Show icon and wait */
++ error = NULL;
++ if (!notify_notification_show (notification, &error)) {
++ if (error != NULL) {
++ g_warning ("Error showing notification: %s", error->message);
++ g_error_free (error);
++ }
++ exit (1);
++ }
+
+- /* Show icon and wait */
+- gtk_status_icon_set_visible (status_icon, TRUE);
++ }
+
+- if(data->timeout_delay > 0) {
++ if (data->timeout_delay > 0) {
+ g_timeout_add_seconds (data->timeout_delay, (GSourceFunc) zenity_util_timeout_handle, NULL);
+ }
+
+ gtk_main ();
+-
+- /* Cleanup */
+- g_object_unref (status_icon);
+- g_free (icon_file);
+ }
+--
+cgit v0.8.3.4