diff options
author | Ratchanan Srirattanamet <ratchanan@ubports.com> | 2023-12-07 02:20:08 +0700 |
---|---|---|
committer | Ratchanan Srirattanamet <ratchanan@ubports.com> | 2023-12-07 02:20:08 +0700 |
commit | 6f1c3f7f25052c1f4c001e30bc8368359531af87 (patch) | |
tree | 3ed26119d8ad9fb515a1214b815bc48a2a220c44 | |
parent | 2aace1535ca5dd971b2ac7b796b8eaa03c11bd96 (diff) | |
download | ayatana-indicator-datetime-6f1c3f7f25052c1f4c001e30bc8368359531af87.tar.gz ayatana-indicator-datetime-6f1c3f7f25052c1f4c001e30bc8368359531af87.tar.bz2 ayatana-indicator-datetime-6f1c3f7f25052c1f4c001e30bc8368359531af87.zip |
Bring back Lomiri-specific notification hints
As discussed in [1], Lomiri has a custom logic in notification timeout
and require the custom hint for timeout to work correctly. Restore the
hints from commit 0a88a8d7 ("Remove osd-notify remnants and use native
notification timeout"), while keeping the standard timeout in place.
Lomiri will ignore standard timeout, while other DE's will ignore the
extra hint.
[1] https://gitlab.com/ubports/development/core/content-hub/-/merge_requests/32#note_1552217874
-rw-r--r-- | src/notifications.cpp | 6 | ||||
-rw-r--r-- | tests/notification-fixture.h | 2 | ||||
-rw-r--r-- | tests/test-sound.cpp | 10 |
3 files changed, 18 insertions, 0 deletions
diff --git a/src/notifications.cpp b/src/notifications.cpp index b962e68..a2a1fc3 100644 --- a/src/notifications.cpp +++ b/src/notifications.cpp @@ -249,6 +249,10 @@ public: const auto& d= info.m_duration; auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(d); notify_notification_set_timeout (nn.get (), ms.count ()); + // Lomiri has its own logic regarding timeout. + notify_notification_set_hint (nn.get(), + HINT_LOMIRI_TIMEOUT, + g_variant_new_int32(ms.count())); } for (const auto& hint : info.m_string_hints) @@ -509,6 +513,8 @@ private: // server capabilities. // as the name indicates, don't use this directly: use server_caps() instead mutable std::set<std::string> m_lazy_caps; + + static constexpr char const * HINT_LOMIRI_TIMEOUT {"x-lomiri-snap-decisions-timeout"}; }; /*** diff --git a/tests/notification-fixture.h b/tests/notification-fixture.h index 33bcd7e..7dcc8bf 100644 --- a/tests/notification-fixture.h +++ b/tests/notification-fixture.h @@ -77,6 +77,8 @@ protected: static constexpr char const * SIGNAL_CLOSED {"NotificationClosed"}; + static constexpr char const * HINT_LOMIRI_TIMEOUT {"x-lomiri-snap-decisions-timeout"}; + static constexpr char const * AS_BUSNAME {"org.freedesktop.Accounts"}; static constexpr char const * AS_INTERFACE {"com.lomiri.touch.AccountsService.Sound"}; static constexpr char const * PROP_OTHER_VIBRATIONS {"OtherVibrate"}; diff --git a/tests/test-sound.cpp b/tests/test-sound.cpp index 19dffe3..db1402a 100644 --- a/tests/test-sound.cpp +++ b/tests/test-sound.cpp @@ -100,6 +100,16 @@ TEST_F(NotificationFixture, InteractiveDuration) g_variant_get_child (params, 7, "i", &i32); const auto duration = std::chrono::minutes(duration_minutes); EXPECT_EQ(std::chrono::duration_cast<std::chrono::milliseconds>(duration).count(), i32); + + // Due to custom logic in Lomiri, also make sure custom timeout hint is set. + bool b; + auto hints = g_variant_get_child_value (params, 6); + i32 = 0; + b = g_variant_lookup (hints, HINT_LOMIRI_TIMEOUT, "i", &i32); + EXPECT_TRUE(b); + EXPECT_EQ(std::chrono::duration_cast<std::chrono::milliseconds>(duration).count(), i32); + g_variant_unref(hints); + ne.reset(); } |