Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libnotify for openSUSE:Factory 
checked in at 2026-10-23 20:21:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libnotify (Old)
 and      /work/SRC/openSUSE:Factory/.libnotify.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libnotify"

Fri Oct 23 20:21:10 2026 rev:52 rq:1386719 version:0.8.9

Changes:
--------
--- /work/SRC/openSUSE:Factory/libnotify/libnotify.changes      2026-03-27 
16:49:44.876034359 +0100
+++ /work/SRC/openSUSE:Factory/.libnotify.new.2252680/libnotify.changes 
2026-10-23 20:21:22.444188534 +0200
@@ -1,0 +2,25 @@
+Sun Oct 18 04:56:49 UTC 2026 - Bjørn Lie <[email protected]>
+
+- Update to version 0.8.9:
+  * This is a maintenance release, mostly with bug fixes around notify-send
+    behaviors and portal notifications, together with more tests coverage for
+    hints edge cases, and some library cleanups:
+    + Notify-send:
+      - Start action ID from 1 as docs states
+      - Fix the activation token FD validity check
+      - Don't write the notification ID and action to stdin
+      - Don't cache the hint conversion error
+    + Notify: Free the application name and icon on uninit
+    + Notification:
+      - Do not send the default action as a button in portal notifications
+      - Read the icon contents using g_file_load_contents()
+      - Use g_clear_handle_id() for the portal timeout
+    + Tests/notify-send:
+      - Add tests for the default action button
+      - Verify behavior on invalid hints
+    + Launch-context: Don't omit parameter names in vfunc implementation
+    + Bugs fixed:
+      - portal: "default" action adds additional button
+      - Omitted parameter names in a vfunc implementation
+
+-------------------------------------------------------------------

Old:
----
  libnotify-0.8.8.tar.xz

New:
----
  libnotify-0.8.9.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libnotify.spec ++++++
--- /var/tmp/diff_new_pack.fiLcfy/_old  2026-10-23 20:21:23.299224315 +0200
+++ /var/tmp/diff_new_pack.fiLcfy/_new  2026-10-23 20:21:23.301224399 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           libnotify
-Version:        0.8.8
+Version:        0.8.9
 Release:        0
 Summary:        Notifications Library
 License:        LGPL-2.1-or-later

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.fiLcfy/_old  2026-10-23 20:21:23.331225654 +0200
+++ /var/tmp/diff_new_pack.fiLcfy/_new  2026-10-23 20:21:23.334225780 +0200
@@ -1,6 +1,7 @@
-mtime: 1774262915
-commit: 95e229b7682ed902e5222a694238f09eda1855b3fad3af7d3e88385a286bcf65
+mtime: 1792299863
+commit: 5927c095685e257320f5b100dd6967941294e18e7ae2808d6eb1beaec86f432a
 url: https://src.opensuse.org/GNOME/libnotify
-revision: 95e229b7682ed902e5222a694238f09eda1855b3fad3af7d3e88385a286bcf65
+revision: 5927c095685e257320f5b100dd6967941294e18e7ae2808d6eb1beaec86f432a
+trackingbranch: factory
 projectscmsync: https://src.opensuse.org/GNOME/_ObsPrj
 

++++++ _service ++++++
--- /var/tmp/diff_new_pack.fiLcfy/_old  2026-10-23 20:21:23.355226659 +0200
+++ /var/tmp/diff_new_pack.fiLcfy/_new  2026-10-23 20:21:23.359226826 +0200
@@ -3,7 +3,7 @@
   <service name="obs_scm" mode="manual">
     <param name="scm">git</param>
     <param name="url">https://gitlab.gnome.org/GNOME/libnotify.git</param>
-    <param name="revision">0.8.8</param>
+    <param name="revision">0.8.9</param>
     <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
     <param name="versionrewrite-pattern">(.*)\+0</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-10-18 07:04:23.000000000 +0200
@@ -0,0 +1,5 @@
+*.obscpio
+*.osc
+_build.*
+.pbuild
+osc-collab.*

++++++ libnotify-0.8.8.tar.xz -> libnotify-0.8.9.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnotify-0.8.8/.gitlab-ci.yml 
new/libnotify-0.8.9/.gitlab-ci.yml
--- old/libnotify-0.8.8/.gitlab-ci.yml  2026-01-09 04:16:29.000000000 +0100
+++ new/libnotify-0.8.9/.gitlab-ci.yml  2026-10-17 22:10:15.000000000 +0200
@@ -1,9 +1,9 @@
 variables:
   DEBIAN_FRONTEND: noninteractive
-  MESON_TEST_TIMEOUT_MULTIPLIER: 3
-  MESON_BUILD_DIR: _build
+  TEST_TIMEOUT_MULTIPLIER: 3
+  BUILD_DIR: _build
   DOCS_BUILD_DIR: _reference
-  TARBALL_ARTIFACT_PATH: 
${MESON_BUILD_DIR}/meson-dist/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.tar.xz
+  TARBALL_ARTIFACT_PATH: 
${BUILD_DIR}/meson-dist/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.tar.xz
 
 include:
   - component: "gitlab.gnome.org/GNOME/citemplates/release-service@master"
@@ -66,7 +66,7 @@
         gi-docgen
         xvfb
   script:
-    - meson setup ${MESON_BUILD_DIR} -Ddocbook_docs=enabled
+    - meson setup ${BUILD_DIR} -Ddocbook_docs=enabled
 
 build:ubuntu:
   stage: build
@@ -74,14 +74,14 @@
     - .build:ubuntu:base
   script:
     - !reference [".build:ubuntu:base", "script"]
-    - meson install -C ${MESON_BUILD_DIR}
-    - mv ${MESON_BUILD_DIR}/docs/reference/libnotify-0 ${DOCS_BUILD_DIR}
+    - meson install -C ${BUILD_DIR}
+    - mv ${BUILD_DIR}/docs/reference/libnotify-0 ${DOCS_BUILD_DIR}
   artifacts:
     expose_as: "Build artifacts"
     paths:
-      - ${MESON_BUILD_DIR}/docs/notification-spec.html
+      - ${BUILD_DIR}/docs/notification-spec.html
       - ${DOCS_BUILD_DIR}
-      - ${MESON_BUILD_DIR}/meson-logs
+      - ${BUILD_DIR}/meson-logs
 
 build:coverage:ubuntu:
   stage: build
@@ -91,21 +91,21 @@
     - !reference [".build:ubuntu:base", "before_script"]
     - apt-get install -q -y gcovr
   script:
-    - meson setup ${MESON_BUILD_DIR} -Db_coverage=true
-    - meson test -C ${MESON_BUILD_DIR} --print-errorlogs
-    - ninja -C ${MESON_BUILD_DIR} coverage || true
-    - cat ${MESON_BUILD_DIR}/meson-logs/coverage.txt || true
+    - meson setup ${BUILD_DIR} -Db_coverage=true
+    - meson test -C ${BUILD_DIR} --print-errorlogs -t 
${TEST_TIMEOUT_MULTIPLIER}
+    - ninja -C ${BUILD_DIR} coverage || true
+    - cat ${BUILD_DIR}/meson-logs/coverage.txt || true
   artifacts:
     reports:
-      junit: ${MESON_BUILD_DIR}/meson-logs/testlog.junit.xml
+      junit: ${BUILD_DIR}/meson-logs/testlog.junit.xml
       coverage_report:
         coverage_format: cobertura
-        path: ${MESON_BUILD_DIR}/meson-logs/coverage.xml
+        path: ${BUILD_DIR}/meson-logs/coverage.xml
     expose_as: 'Coverage Report'
     when: always
     paths:
-      - ${MESON_BUILD_DIR}/meson-logs
-      - ${MESON_BUILD_DIR}/meson-logs/coveragereport/index.html
+      - ${BUILD_DIR}/meson-logs
+      - ${BUILD_DIR}/meson-logs/coveragereport/index.html
     expire_in: 1 week
   coverage: '/^TOTAL.*\s+(\d+\%)$/'
 
@@ -118,7 +118,7 @@
     - apt-get install -q -y git
   script:
     - !reference [".build:ubuntu:base", "script"]
-    - meson dist -C "${MESON_BUILD_DIR}" --include-subprojects
+    - meson dist -C "${BUILD_DIR}" --include-subprojects
   artifacts:
     name: "${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
     when: "always"
@@ -135,7 +135,7 @@
   script:
     - mkdir public
     - mv ${DOCS_BUILD_DIR}/* public/
-    - mv ${MESON_BUILD_DIR}/meson-logs/coveragereport public/coverage
+    - mv ${BUILD_DIR}/meson-logs/coveragereport public/coverage
   artifacts:
     when: on_success
     paths:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnotify-0.8.8/NEWS new/libnotify-0.8.9/NEWS
--- old/libnotify-0.8.8/NEWS    2026-01-09 04:16:29.000000000 +0100
+++ new/libnotify-0.8.9/NEWS    2026-10-17 22:10:15.000000000 +0200
@@ -1,3 +1,32 @@
+New in 0.8.9
+============
+
+This is a maintenance release, mostly with bug fixes around notify-send
+behaviors and portal notifications, together with more tests coverage for
+hints edge cases, and some library cleanups.
+
+* notify-send: Start action ID from 1 as docs states [Marco]
+* notification: Do not send the default action as a button in portal
+  notifications [Cajus]
+* notify-send: Fix the activation token FD validity check [Marco]
+* notify-send: Don't write the notification ID and action to stdin [Marco]
+* notify: Free the application name and icon on uninit [Cajus]
+* notification: Read the icon contents using g_file_load_contents() [Cajus]
+* notification: Use g_clear_handle_id() for the portal timeout [Cajus]
+* notify-send: Don't cache the hint conversion error [Cajus]
+* tests/notify-send: Add tests for the default action button [Cajus]
+* tests/notify-send: Verify behavior on invalid hints [Marco]
+* launch-context: Don't omit parameter names in vfunc implementation [Logan]
+* ci: Do not involve MESON into non-meson env variables [Marco]
+* ci: Actually use the meson test multiplier value [Marco]
+
+* Bugs fixed:
+  - #66 portal: "default" action adds additional button [Cajus]
+  - #67 Omitted parameter names in a vfunc implementation [Logan]
+
+Contributors:
+  Cajus Pollmeier, Logan Rathbone, Marco Trevisan
+
 New in 0.8.8
 ============
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnotify-0.8.8/libnotify/launch-context.c 
new/libnotify-0.8.9/libnotify/launch-context.c
--- old/libnotify-0.8.8/libnotify/launch-context.c      2026-01-09 
04:16:29.000000000 +0100
+++ new/libnotify-0.8.9/libnotify/launch-context.c      2026-10-17 
22:10:15.000000000 +0200
@@ -49,8 +49,8 @@
 
 static char *
 notification_app_launch_context_get_startup_notify_id (GAppLaunchContext 
*context,
-                                                       GAppInfo *,
-                                                       GList *)
+                                                       GAppInfo *info 
G_GNUC_UNUSED,
+                                                       GList *files 
G_GNUC_UNUSED)
 {
         NotificationAppLaunchContext *self = NOTIFICATION_APP_LAUNCH_CONTEXT 
(context);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnotify-0.8.8/libnotify/notification.c 
new/libnotify-0.8.9/libnotify/notification.c
--- old/libnotify-0.8.8/libnotify/notification.c        2026-01-09 
04:16:29.000000000 +0100
+++ new/libnotify-0.8.9/libnotify/notification.c        2026-10-17 
22:10:15.000000000 +0200
@@ -879,10 +879,7 @@
         GVariant *ret;
         gchar *notification_id;
 
-        if (priv->portal_timeout_id) {
-                g_source_remove (priv->portal_timeout_id);
-                priv->portal_timeout_id = 0;
-        }
+        g_clear_handle_id (&priv->portal_timeout_id, g_source_remove);
 
         notification_id = get_portal_notification_id (notification);
 
@@ -933,8 +930,10 @@
 {
         NotifyNotificationPrivate *priv =
                 notify_notification_get_instance_private (notification);
-        GFileInputStream *input;
         g_autoptr(GFile) file = NULL;
+        g_autofree gchar *contents = NULL;
+        g_autoptr(GByteArray) bytes_array = NULL;
+        gsize length;
 
         if (priv->icon_pixbuf) {
                 return G_ICON (g_object_ref (priv->icon_pixbuf));
@@ -952,37 +951,12 @@
                 return g_themed_icon_new (priv->icon_name);
         }
 
-        if (!(input = g_file_read (file, NULL, error))) {
+        if (!g_file_load_contents (file, NULL, &contents, &length, NULL, 
error)) {
                 return NULL;
         }
 
-        g_autoptr(GByteArray) bytes_array = g_byte_array_new ();
-        g_autoptr(GInputStream) buffered_stream = NULL;
-
-        buffered_stream = g_buffered_input_stream_new (G_INPUT_STREAM (input));
-
-        while (TRUE) {
-                gssize read;
-
-                read = g_buffered_input_stream_fill (G_BUFFERED_INPUT_STREAM 
(buffered_stream),
-                                                     -1, NULL, error);
-
-                if (read < 0) {
-                        return NULL;
-                }
-
-                if (read > 0) {
-                        gconstpointer buffer;
-                        gsize buffer_size;
-
-                        buffer = g_buffered_input_stream_peek_buffer 
(G_BUFFERED_INPUT_STREAM (buffered_stream),
-                                                                      
&buffer_size);
-                        g_byte_array_append (bytes_array, buffer, buffer_size);
-                        continue;
-                }
-
-                break;
-        }
+        bytes_array = g_byte_array_new_take ((guint8 *) g_steal_pointer 
(&contents),
+                                             length);
 
         if (bytes_array->len) {
                 g_autoptr(GBytes) bytes = NULL;
@@ -1034,6 +1008,10 @@
                         GVariantBuilder button;
                         ActionInfo *ai = g_ptr_array_index (priv->actions, i);
 
+                        if (g_ascii_strcasecmp (ai->id, "default") == 0) {
+                            continue;
+                        }
+
                         g_variant_builder_init (&button, 
G_VARIANT_TYPE_VARDICT);
 
                         g_variant_builder_add (&button, "{sv}", "action",
@@ -1101,11 +1079,7 @@
                                       NULL,
                                       error);
 
-        if (priv->portal_timeout_id) {
-                g_source_remove (priv->portal_timeout_id);
-                priv->portal_timeout_id = 0;
-        }
-
+        g_clear_handle_id (&priv->portal_timeout_id, g_source_remove);
         g_free (notification_id);
 
         if (!ret) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnotify-0.8.8/libnotify/notify.c 
new/libnotify-0.8.9/libnotify/notify.c
--- old/libnotify-0.8.8/libnotify/notify.c      2026-01-09 04:16:29.000000000 
+0100
+++ new/libnotify-0.8.9/libnotify/notify.c      2026-10-17 22:10:15.000000000 
+0200
@@ -497,8 +497,6 @@
                 return;
         }
 
-        g_clear_pointer (&_app_name, g_free);
-
         for (l = _active_notifications; l != NULL; l = l->next) {
                 NotifyNotification *n = NOTIFY_NOTIFICATION (l->data);
 
@@ -510,6 +508,9 @@
                 g_object_run_dispose (G_OBJECT (n));
         }
 
+        g_clear_pointer (&_app_name, g_free);
+        g_clear_pointer (&_app_icon, g_free);
+
         g_clear_object (&_proxy);
         g_clear_pointer (&_snap_name, g_free);
         g_clear_pointer (&_snap_app, g_free);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnotify-0.8.8/meson.build 
new/libnotify-0.8.9/meson.build
--- old/libnotify-0.8.8/meson.build     2026-01-09 04:16:29.000000000 +0100
+++ new/libnotify-0.8.9/meson.build     2026-10-17 22:10:15.000000000 +0200
@@ -1,6 +1,6 @@
 project('libnotify',
   'c',
-  version: '0.8.8',
+  version: '0.8.9',
   meson_version: '>= 0.64.0')
 
 fs = import('fs')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnotify-0.8.8/tests/test_notify_send.py 
new/libnotify-0.8.9/tests/test_notify_send.py
--- old/libnotify-0.8.8/tests/test_notify_send.py       2026-01-09 
04:16:29.000000000 +0100
+++ new/libnotify-0.8.9/tests/test_notify_send.py       2026-10-17 
22:10:15.000000000 +0200
@@ -339,6 +339,46 @@
             },
         )
 
+    def test_invalid_hint(self):
+        """notify-send with an invalid hint is not shown"""
+
+        # Any hint error stops the parsing, so nothing is ever shown
+        invalid_hints = {
+            "unknown-type:hint:value":
+                'Invalid hint type "unknown-type"',
+            "string:just-a-name":
+                "Invalid hint syntax specified. Use TYPE:NAME:VALUE.",
+            "int:int-hint:not-a-number":
+                'Value "not-a-number" of hint "int-hint" could not be parsed '
+                'as type "int".',
+            "double:double-hint:not-a-number":
+                'Value "not-a-number" of hint "double-hint" could not be '
+                'parsed as type "double".',
+            "byte:byte-hint:300":
+                'Value "300" of hint "byte-hint" could not be parsed as '
+                'type "byte".',
+            "byte:byte-hint:0x100":
+                'Value "0x100" of hint "byte-hint" could not be parsed as '
+                'type "byte".',
+            "variant:variant-hint:not-a-variant":
+                'Value "not-a-variant" of hint "variant-hint" could not be '
+                'parsed as type "variant".',
+        }
+
+        for hint, expected_error in invalid_hints.items():
+            with self.subTest(hint=hint):
+                ns_proc = self.notify_send_proc(
+                    ["-h", hint, "hints!"],
+                    stdout=subprocess.PIPE,
+                    stderr=subprocess.PIPE,
+                )
+
+                [stdout, stderr] = ns_proc.communicate(timeout=5)
+
+                self.assertEqual(ns_proc.returncode, 1)
+                self.assertIn(expected_error, stderr.decode("utf-8"))
+                self.assertNoDaemonCall("Notify")
+
     def test_actions_not_supported(self):
         """notify-send with action not supported"""
 
@@ -410,7 +450,7 @@
                 action_id = action[1]
                 args.append(f"--action={action_id}={label}")
             else:
-                action_id = str(int(len(exp_actions) / 2))
+                action_id = str(int(len(exp_actions) / 2) + 1)
                 args.append(f"--action={label}")
 
             if action_id in exp_actions:
@@ -482,7 +522,7 @@
 
     def test_activate_numeric_action(self):
         """notify-send with action"""
-        self.check_activate_action(0)
+        self.check_activate_action(1)
 
     def test_activate_named_action(self):
         """notify-send with action"""
@@ -490,7 +530,7 @@
 
     def test_activate_third_unnamed_action(self):
         """notify-send with action"""
-        self.check_activate_action(action_id=2, actions=[
+        self.check_activate_action(action_id=3, actions=[
             ("foo",), ("default", "id"), ("baz",)])
 
     def test_activate_replaced_action(self):
@@ -520,6 +560,31 @@
 
             self.assertFalse(tmp.readlines())
 
+    def test_default_action_is_kept(self):
+        """The default action is only filtered out in the portal path, standard
+        FDO action list must keep it"""
+        [ns_proc, _] = self.notify_send_wait_id([
+            "action!", "Body",
+            "--action=default=Default label",
+            "--action=foo=Foo label",
+        ], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+
+        notification = self.assertDaemonCall("Notify")
+        self.assertNotificationMatches(
+            notification,
+            exp_summary="action!",
+            exp_body="Body",
+            exp_actions=["default", "Default label", "foo", "Foo label"],
+            exp_hints={
+                "urgency": 1,
+                "sender-pid": ns_proc.pid,
+            },
+        )
+
+        ns_proc.send_signal(signal.SIGINT)
+        ns_proc.communicate(timeout=5)
+        self.assertEqual(ns_proc.returncode, 0)
+
     def test_close_notification(self):
         [ns_proc, notification_id] = self.show_actions_notification([("Foo",)])
 
@@ -713,7 +778,7 @@
                 action_id = action[1]
                 args.append(f"--action={action_id}={label}")
             else:
-                action_id = str(int(len(exp_actions)))
+                action_id = str(int(len(exp_actions)) + 1)
                 args.append(f"--action={label}")
 
             other = [a for a in exp_actions if a["action"] == action_id]
@@ -765,9 +830,27 @@
         self.assertIn(action_id, stdout.decode('utf-8'))
         self.assertEqual(ns_proc.returncode, 0)
 
+    def notification_options_for_actions(self, actions):
+        """Shows a notification with the given action/label pairs and returns
+        the options received by the portal"""
+
+        args = ["action!", "Body"]
+        args += [f"--action={action_id}={label}" for label, action_id in 
actions]
+
+        [ns_proc, _] = self.notify_send_wait_id(args, stdout=subprocess.PIPE,
+                                                stderr=subprocess.PIPE)
+
+        [_, notification] = self.assertDaemonCall("AddNotification")
+
+        ns_proc.send_signal(signal.SIGINT)
+        ns_proc.communicate(timeout=5)
+        self.assertEqual(ns_proc.returncode, 0)
+
+        return notification
+
     def test_activate_numeric_action(self):
         """notify-send with action"""
-        self.check_activate_action(0)
+        self.check_activate_action(1)
 
     def test_activate_named_action(self):
         """notify-send with action"""
@@ -775,7 +858,7 @@
 
     def test_activate_third_unnamed_action(self):
         """notify-send with action"""
-        self.check_activate_action(action_id=2, actions=[
+        self.check_activate_action(action_id=3, actions=[
             ("foo",), ("default", "id"), ("baz",)])
 
     def test_activate_replaced_action(self):
@@ -783,6 +866,45 @@
         self.check_activate_action(action_id="foo-action", actions=[
             ("Foo", "foo-action"), ("FooBar", "foo-action")])
 
+    def test_default_action_alone_has_no_buttons(self):
+        """notify-send just with default action must not show a button"""
+
+        notification = self.notification_options_for_actions([
+            ("Default label", "default"),
+        ])
+
+        self.assertEqual(notification["default-action"], "default")
+        self.assertNotIn("buttons", notification)
+
+    def test_default_action_is_not_a_button(self):
+        """notify-send with default action must not show a button for the
+        default action"""
+
+        notification = self.notification_options_for_actions([
+            ("Default label", "default"),
+            ("Foo label", "foo"),
+        ])
+
+        self.assertEqual(notification["default-action"], "default")
+        self.assertEqual(notification["buttons"], dbus.Array([
+            {"label": "Foo label", "action": "foo"},
+        ], signature="a{sv}"))
+
+    def test_default_action_is_not_a_button_ignore_case(self):
+        """notify-send default action is recognized with mixed case"""
+
+        notification = self.notification_options_for_actions([
+            ("Foo label", "foo"),
+            ("Default label", "DefAulT"),
+            ("Bar label", "bar"),
+        ])
+
+        self.assertEqual(notification["default-action"], "default")
+        self.assertEqual(notification["buttons"], dbus.Array([
+            {"label": "Foo label", "action": "foo"},
+            {"label": "Bar label", "action": "bar"},
+        ], signature="a{sv}"))
+
     def test_activate_invalid_action(self):
         with TemporaryFD("action-id") as tmpfd:
             [fd, tmp] = tmpfd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnotify-0.8.8/tools/notify-send.c 
new/libnotify-0.8.9/tools/notify-send.c
--- old/libnotify-0.8.8/tools/notify-send.c     2026-01-09 04:16:29.000000000 
+0100
+++ new/libnotify-0.8.9/tools/notify-send.c     2026-10-17 22:10:15.000000000 
+0200
@@ -69,7 +69,7 @@
                                       const char         *value,
                                       GError            **error)
 {
-        static gboolean conv_error = FALSE;
+        gboolean conv_error = FALSE;
         if (!strcasecmp (type, "string")) {
                 notify_notification_set_hint_string (notification,
                                                      key,
@@ -180,7 +180,7 @@
 
         g_printf ("%s\n", action);
 
-        if (action_data->selected_action_fd >= 0) {
+        if (action_data->selected_action_fd > 0) {
                 write (action_data->selected_action_fd, action, strlen 
(action));
                 write (action_data->selected_action_fd, "\n", 1);
                 fsync (action_data->selected_action_fd);
@@ -194,13 +194,13 @@
                                                                     NULL, 
NULL);
                 g_debug ("Activation Token: %s", activation_token);
 
-                if (action_data->activation_token_fd) {
+                if (action_data->activation_token_fd > 0) {
                         write (action_data->activation_token_fd,
                                activation_token, strlen (activation_token));
                 }
         }
 
-        if (action_data->activation_token_fd) {
+        if (action_data->activation_token_fd > 0) {
                 write (action_data->activation_token_fd, "\n", 1);
                 fsync (action_data->activation_token_fd);
         }
@@ -489,7 +489,7 @@
                         spl = g_strsplit (action, "=", 2);
 
                         if (g_strv_length (spl) == 1) {
-                                name = g_strdup_printf ("%d", i - 1);
+                                name = g_strdup_printf ("%d", i);
                                 label = g_strstrip (spl[0]);
                         } else {
                                 name = g_strdup (g_strstrip (spl[0]));
@@ -549,7 +549,7 @@
                 fflush (stdout);
         }
 
-        if (id_fd >= 0) {
+        if (id_fd > 0) {
                 g_autofree char *id_str = NULL;
 
                 g_object_get (notify, "id", &notification_id, NULL);

++++++ libnotify.obsinfo ++++++
--- /var/tmp/diff_new_pack.fiLcfy/_old  2026-10-23 20:21:23.619237707 +0200
+++ /var/tmp/diff_new_pack.fiLcfy/_new  2026-10-23 20:21:23.622237833 +0200
@@ -1,5 +1,5 @@
 name: libnotify
-version: 0.8.8
-mtime: 1767928589
-commit: 8b35b6b74e4af71a20b024330b71ce0daf6c022f
+version: 0.8.9
+mtime: 1792267815
+commit: 9b53a46b0307fe3a7ddd2545de1e395ee2f94d18
 

Reply via email to