Date: Thursday, October 9, 2014 @ 00:13:52 Author: bgyorgy Revision: 120414
upgpkg: notification-daemon 0.7.6-3 Fix some critical bugs Added: notification-daemon/trunk/fix-boolean-hint.patch notification-daemon/trunk/fix-gsource-usage.patch notification-daemon/trunk/fix-position.patch Modified: notification-daemon/trunk/PKGBUILD Deleted: notification-daemon/trunk/notification-daemon.install -----------------------------+ PKGBUILD | 35 +++++++++-- fix-boolean-hint.patch | 104 ++++++++++++++++++++++++++++++++++ fix-gsource-usage.patch | 49 ++++++++++++++++ fix-position.patch | 128 ++++++++++++++++++++++++++++++++++++++++++ notification-daemon.install | 22 ------- 5 files changed, 309 insertions(+), 29 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2014-10-08 20:01:11 UTC (rev 120413) +++ PKGBUILD 2014-10-08 22:13:52 UTC (rev 120414) @@ -1,20 +1,41 @@ # $Id$ -# Maintainer: Jan de Groot <[email protected]> +# Contributor: Jan de Groot <[email protected]> # Contributor: Mark Rosenstand <[email protected]> pkgname=notification-daemon pkgver=0.7.6 -pkgrel=2 +pkgrel=3 pkgdesc="Notification daemon for the desktop notifications framework" arch=(i686 x86_64) license=(GPL) -url="http://www.galago-project.org/specs/notification/" +url="http://www.gnome.org/" depends=(gtk3 libcanberra) -makedepends=(pkgconfig intltool) -options=('!emptydirs') -source=(http://download.gnome.org/sources/${pkgname}/0.7/${pkgname}-${pkgver}.tar.xz) -sha256sums=('64d0ce6fb12c94c3b73b701502c804c408cb5a94580bcae5ac37607639f7a0b3') +makedepends=(intltool) +source=(http://download.gnome.org/sources/${pkgname}/0.7/${pkgname}-${pkgver}.tar.xz + fix-boolean-hint.patch + fix-gsource-usage.patch + fix-position.patch) +sha256sums=('64d0ce6fb12c94c3b73b701502c804c408cb5a94580bcae5ac37607639f7a0b3' + 'ba4e4fe42d82034cd12cb10d1c3c9c6f4318b5d9e10e7829ec0478b6ce801282' + '2c36bb0c77f27345f18240c7ba39aff7e559fd5155c54d83bc18e21ca13ce9ff' + 'a4e5ed7cdf42a137b1672b8128eb7a754ceece57243a02e0dc4dd977911beea2') +prepare() { + cd ${pkgname}-${pkgver} + + # Avoid crashes for boolean hints + # https://bugzilla.gnome.org/show_bug.cgi?id=665166 + patch -Np1 -i ../fix-boolean-hint.patch + + # Fix GSource usage with recent GLib + # https://bugzilla.gnome.org/show_bug.cgi?id=728157 + patch -Np1 -i ../fix-gsource-usage.patch + + # Fix positioning notifications with long text + # https://bugzilla.gnome.org/show_bug.cgi?id=687724 + patch -Np1 -i ../fix-position.patch +} + build() { cd ${pkgname}-${pkgver} ./configure --prefix=/usr --sysconfdir=/etc \ Added: fix-boolean-hint.patch =================================================================== --- fix-boolean-hint.patch (rev 0) +++ fix-boolean-hint.patch 2014-10-08 22:13:52 UTC (rev 120414) @@ -0,0 +1,104 @@ +From 9eb0d66eb763ecd3f232b7fd65287835c3ac5bcf Mon Sep 17 00:00:00 2001 +From: [email protected] +Date: Wed, 8 Oct 2014 23:40:59 +0200 +Subject: [PATCH] Avoid crashes for boolean hints + +Check the type of the incoming hint and use the appropriate +g_variant_get_* function. +It also applies the same fix for the "resident" and "action-icons" +hints. + +https://bugzilla.gnome.org/show_bug.cgi?id=665166 +--- + src/nd-notification.c | 55 +++++++++++++++++++++++++-------------------------- + 1 file changed, 27 insertions(+), 28 deletions(-) + +diff --git a/src/nd-notification.c b/src/nd-notification.c +index 05372d0..fdb2c2b 100644 +--- a/src/nd-notification.c ++++ b/src/nd-notification.c +@@ -224,54 +224,53 @@ nd_notification_get_is_closed (NdNotification *notification) + } + + gboolean +-nd_notification_get_is_transient (NdNotification *notification) ++nd_notification_get_bool (NdNotification *notification, const char *name) + { + gboolean ret; + GVariant *value; +- + ret = FALSE; + g_return_val_if_fail (ND_IS_NOTIFICATION (notification), FALSE); + +- value = g_hash_table_lookup (notification->hints, "transient"); ++ value = g_hash_table_lookup (notification->hints, name); + if (value != NULL) { +- ret = g_variant_get_boolean (value); ++ if (g_variant_is_of_type (value, G_VARIANT_TYPE_BOOLEAN)) { ++ ret = g_variant_get_boolean (value); ++ } else if (g_variant_is_of_type (value, G_VARIANT_TYPE_BYTE)) { ++ ret = (g_variant_get_byte (value) != 0); ++ } else if (g_variant_is_of_type (value, G_VARIANT_TYPE_INT16)) { ++ ret = (g_variant_get_int16 (value) != 0); ++ } else if (g_variant_is_of_type (value, G_VARIANT_TYPE_UINT16)) { ++ ret = (g_variant_get_uint16 (value) != 0); ++ } else if (g_variant_is_of_type (value, G_VARIANT_TYPE_INT32)) { ++ ret = (g_variant_get_int32 (value) != 0); ++ } else if (g_variant_is_of_type (value, G_VARIANT_TYPE_UINT32)) { ++ ret = (g_variant_get_uint32 (value) != 0); ++ } else if (g_variant_is_of_type (value, G_VARIANT_TYPE_INT64)) { ++ ret = (g_variant_get_int64 (value) != 0); ++ } else if (g_variant_is_of_type (value, G_VARIANT_TYPE_UINT64)) { ++ ret = (g_variant_get_uint64 (value) != 0); ++ } + } + + return ret; + } + + gboolean +-nd_notification_get_is_resident (NdNotification *notification) ++nd_notification_get_is_transient (NdNotification *notification) + { +- gboolean ret; +- GVariant *value; +- +- ret = FALSE; +- g_return_val_if_fail (ND_IS_NOTIFICATION (notification), FALSE); +- +- value = g_hash_table_lookup (notification->hints, "resident"); +- if (value != NULL) { +- ret = g_variant_get_boolean (value); +- } ++ return nd_notification_get_bool (notification, "transient"); ++} + +- return ret; ++gboolean ++nd_notification_get_is_resident (NdNotification *notification) ++{ ++ return nd_notification_get_bool (notification, "resident"); + } + + gboolean + nd_notification_get_action_icons (NdNotification *notification) + { +- gboolean ret; +- GVariant *value; +- +- ret = FALSE; +- g_return_val_if_fail (ND_IS_NOTIFICATION (notification), FALSE); +- +- value = g_hash_table_lookup (notification->hints, "action-icons"); +- if (value != NULL) { +- ret = g_variant_get_boolean (value); +- } +- +- return ret; ++ return nd_notification_get_bool (notification, "action-icons"); + } + + guint32 +-- +2.1.2 + Added: fix-gsource-usage.patch =================================================================== --- fix-gsource-usage.patch (rev 0) +++ fix-gsource-usage.patch 2014-10-08 22:13:52 UTC (rev 120414) @@ -0,0 +1,49 @@ +From 7e458afddc7c57eba5c392a7a89990600a070ae5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= <[email protected]> +Date: Wed, 8 Oct 2014 23:35:37 +0200 +Subject: [PATCH] Fix GSource usage with recent GLib + +https://bugzilla.gnome.org/show_bug.cgi?id=728157 +--- + src/nd-bubble.c | 1 + + src/nd-queue.c | 5 +++++ + 2 files changed, 6 insertions(+) + +diff --git a/src/nd-bubble.c b/src/nd-bubble.c +index 0587478..6de7f8f 100644 +--- a/src/nd-bubble.c ++++ b/src/nd-bubble.c +@@ -420,6 +420,7 @@ nd_bubble_enter_notify_event (GtkWidget *widget, + NdBubble *bubble = ND_BUBBLE (widget); + if (bubble->priv->timeout_id != 0) { + g_source_remove (bubble->priv->timeout_id); ++ bubble->priv->timeout_id = 0; + } + + return FALSE; +diff --git a/src/nd-queue.c b/src/nd-queue.c +index de73940..b744b88 100644 +--- a/src/nd-queue.c ++++ b/src/nd-queue.c +@@ -532,6 +532,10 @@ nd_queue_finalize (GObject *object) + + g_return_if_fail (queue->priv != NULL); + ++ if (queue->priv->update_id != 0) { ++ g_source_remove (queue->priv->update_id); ++ } ++ + g_hash_table_destroy (queue->priv->notifications); + g_queue_free (queue->priv->queue); + +@@ -919,6 +923,7 @@ update_idle (NdQueue *queue) + } + } + ++ queue->priv->update_id = 0; + return FALSE; + } + +-- +2.1.2 + Added: fix-position.patch =================================================================== --- fix-position.patch (rev 0) +++ fix-position.patch 2014-10-08 22:13:52 UTC (rev 120414) @@ -0,0 +1,128 @@ +From cef286903c24795e72cae8795c7b433b6baf9f57 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= <[email protected]> +Date: Wed, 8 Oct 2014 23:57:34 +0200 +Subject: [PATCH] Fix positioning notifications with long text + +https://bugzilla.gnome.org/show_bug.cgi?id=687724 +--- + src/nd-bubble.c | 13 +++++++++++++ + src/nd-notification-box.c | 2 ++ + src/nd-stack.c | 16 ++++++++-------- + 3 files changed, 23 insertions(+), 8 deletions(-) + +diff --git a/src/nd-bubble.c b/src/nd-bubble.c +index 0587478..2d36003 100644 +--- a/src/nd-bubble.c ++++ b/src/nd-bubble.c +@@ -413,6 +413,16 @@ nd_bubble_realize (GtkWidget *widget) + GTK_WIDGET_CLASS (nd_bubble_parent_class)->realize (widget); + } + ++static void ++nd_bubble_get_preferred_width (GtkWidget *widget, ++ gint *min_width, ++ gint *nat_width) ++{ ++ if (nat_width != NULL) { ++ *nat_width = WIDTH; ++ } ++} ++ + static gboolean + nd_bubble_enter_notify_event (GtkWidget *widget, + GdkEventCrossing *event) +@@ -450,6 +460,7 @@ nd_bubble_class_init (NdBubbleClass *klass) + widget_class->enter_notify_event = nd_bubble_enter_notify_event; + widget_class->leave_notify_event = nd_bubble_leave_notify_event; + widget_class->realize = nd_bubble_realize; ++ widget_class->get_preferred_width = nd_bubble_get_preferred_width; + + g_type_class_add_private (klass, sizeof (NdBubblePrivate)); + } +@@ -622,6 +633,7 @@ nd_bubble_init (NdBubble *bubble) + gtk_box_pack_start (GTK_BOX (vbox), bubble->priv->summary_label, TRUE, TRUE, 0); + gtk_misc_set_alignment (GTK_MISC (bubble->priv->summary_label), 0, 0); + gtk_label_set_line_wrap (GTK_LABEL (bubble->priv->summary_label), TRUE); ++ gtk_label_set_line_wrap_mode (GTK_LABEL (bubble->priv->summary_label), PANGO_WRAP_WORD_CHAR); + + atkobj = gtk_widget_get_accessible (bubble->priv->summary_label); + atk_object_set_description (atkobj, "Notification summary text."); +@@ -644,6 +656,7 @@ nd_bubble_init (NdBubble *bubble) + gtk_box_pack_start (GTK_BOX (vbox), bubble->priv->body_label, TRUE, TRUE, 0); + gtk_misc_set_alignment (GTK_MISC (bubble->priv->body_label), 0, 0); + gtk_label_set_line_wrap (GTK_LABEL (bubble->priv->body_label), TRUE); ++ gtk_label_set_line_wrap_mode (GTK_LABEL (bubble->priv->body_label), PANGO_WRAP_WORD_CHAR); + g_signal_connect (bubble->priv->body_label, + "activate-link", + G_CALLBACK (on_activate_link), +diff --git a/src/nd-notification-box.c b/src/nd-notification-box.c +index 352c515..12267a9 100644 +--- a/src/nd-notification-box.c ++++ b/src/nd-notification-box.c +@@ -336,6 +336,7 @@ nd_notification_box_init (NdNotificationBox *notification_box) + gtk_box_pack_start (GTK_BOX (vbox), notification_box->priv->summary_label, TRUE, TRUE, 0); + gtk_misc_set_alignment (GTK_MISC (notification_box->priv->summary_label), 0, 0); + gtk_label_set_line_wrap (GTK_LABEL (notification_box->priv->summary_label), TRUE); ++ gtk_label_set_line_wrap_mode (GTK_LABEL (notification_box->priv->summary_label), PANGO_WRAP_WORD_CHAR); + + atkobj = gtk_widget_get_accessible (notification_box->priv->summary_label); + atk_object_set_description (atkobj, "Notification summary text."); +@@ -354,6 +355,7 @@ nd_notification_box_init (NdNotificationBox *notification_box) + gtk_box_pack_start (GTK_BOX (vbox), notification_box->priv->body_label, TRUE, TRUE, 0); + gtk_misc_set_alignment (GTK_MISC (notification_box->priv->body_label), 0, 0); + gtk_label_set_line_wrap (GTK_LABEL (notification_box->priv->body_label), TRUE); ++ gtk_label_set_line_wrap_mode (GTK_LABEL (notification_box->priv->body_label), PANGO_WRAP_WORD_CHAR); + + atkobj = gtk_widget_get_accessible (notification_box->priv->body_label); + atk_object_set_description (atkobj, "Notification body text."); +diff --git a/src/nd-stack.c b/src/nd-stack.c +index 6c03acc..2206dad 100644 +--- a/src/nd-stack.c ++++ b/src/nd-stack.c +@@ -357,10 +357,10 @@ nd_stack_shift_notifications (NdStack *stack, + + for (i = 0, l = stack->priv->bubbles; l != NULL; i++, l = l->next) { + NdBubble *nw2 = ND_BUBBLE (l->data); +- GtkRequisition req; ++ GtkRequisition minimum_size, natural_size; + + if (bubble == NULL || nw2 != bubble) { +- gtk_widget_size_request (GTK_WIDGET (nw2), &req); ++ gtk_widget_get_preferred_size (GTK_WIDGET (nw2), &minimum_size, &natural_size); + + translate_coordinates (stack->priv->location, + &workarea, +@@ -368,8 +368,8 @@ nd_stack_shift_notifications (NdStack *stack, + &y, + &shiftx, + &shifty, +- req.width, +- req.height + NOTIFY_STACK_SPACING); ++ natural_size.width, ++ natural_size.height + NOTIFY_STACK_SPACING); + positions[i].x = x; + positions[i].y = y; + } else if (nw_l != NULL) { +@@ -428,15 +428,15 @@ nd_stack_add_bubble (NdStack *stack, + NdBubble *bubble, + gboolean new_notification) + { +- GtkRequisition req; ++ GtkRequisition minimum_size, natural_size; + int x, y; + +- gtk_widget_size_request (GTK_WIDGET (bubble), &req); ++ gtk_widget_get_preferred_size (GTK_WIDGET (bubble), &minimum_size, &natural_size); + nd_stack_shift_notifications (stack, + bubble, + NULL, +- req.width, +- req.height + NOTIFY_STACK_SPACING, ++ natural_size.width, ++ natural_size.height + NOTIFY_STACK_SPACING, + &x, + &y); + gtk_widget_show (GTK_WIDGET (bubble)); +-- +2.1.2 + Deleted: notification-daemon.install =================================================================== --- notification-daemon.install 2014-10-08 20:01:11 UTC (rev 120413) +++ notification-daemon.install 2014-10-08 22:13:52 UTC (rev 120414) @@ -1,22 +0,0 @@ -pkgname=notification-daemon - -post_install() { - usr/sbin/gconfpkg --install ${pkgname} - gtk-update-icon-cache -q -t -f usr/share/icons/hicolor -} - -pre_upgrade() { - pre_remove $1 -} - -post_upgrade() { - post_install $1 -} - -pre_remove() { - usr/sbin/gconfpkg --uninstall ${pkgname} -} - -post_remove() { - gtk-update-icon-cache -q -t -f usr/share/icons/hicolor -}
