aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt9
-rw-r--r--data/CMakeLists.txt5
-rw-r--r--src/notifications.cpp41
-rw-r--r--src/snap.cpp11
4 files changed, 53 insertions, 13 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1ff9bf7..8451544 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -72,6 +72,15 @@ if(URLDISPATCHER_FOUND)
add_definitions( -DHAS_URLDISPATCHER )
endif()
+# lomiri-app-launch
+
+pkg_check_modules(LOMIRIAPPLAUNCH lomiri-app-launch>=0)
+include_directories(${LOMIRIAPPLAUNCH_INCLUDE_DIRS})
+
+if(LOMIRIAPPLAUNCH_FOUND)
+ add_definitions( -DHAS_LOMIRIAPPLAUNCH )
+endif()
+
if(EXISTS "/usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml")
set (HAVE_UT_ACCTSERVICE_SYSTEMSOUND_SETTINGS ON)
add_definitions ( -DHAS_UT_ACCTSERVICE_SYSTEMSOUND_SETTINGS )
diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt
index 6bbc246..d7ab10f 100644
--- a/data/CMakeLists.txt
+++ b/data/CMakeLists.txt
@@ -32,7 +32,6 @@ if (${SYSTEMD_FOUND})
# build it
set (pkglibexecdir "${CMAKE_INSTALL_FULL_PKGLIBEXECDIR}")
- set (messaging_menu_icon "${CMAKE_INSTALL_FULL_DATAROOTDIR}/icons/suru/actions/scalable/calendar.svg")
configure_file ("${SYSTEMD_USER_FILE_IN}" "${SYSTEMD_USER_FILE}")
# install it
@@ -56,10 +55,6 @@ set (XDG_AUTOSTART_FILE_IN "${CMAKE_CURRENT_SOURCE_DIR}/${XDG_AUTOSTART_NAME}.in
set (pkglibexecdir "${CMAKE_INSTALL_FULL_PKGLIBEXECDIR}")
configure_file ("${XDG_AUTOSTART_FILE_IN}" "${XDG_AUTOSTART_FILE}")
-# install desktop file used by messaging-menu
-install (FILES "${XDG_AUTOSTART_FILE}"
- DESTINATION "${CMAKE_INSTALL_FULL_DATAROOTDIR}/applications/")
-
# install XDG autostart
install (FILES "${XDG_AUTOSTART_FILE}"
DESTINATION "${XDG_AUTOSTART_DIR}")
diff --git a/src/notifications.cpp b/src/notifications.cpp
index f59a421..dc42534 100644
--- a/src/notifications.cpp
+++ b/src/notifications.cpp
@@ -24,9 +24,14 @@
#include <messaging-menu/messaging-menu-app.h>
#include <messaging-menu/messaging-menu-message.h>
+#ifdef HAS_LOMIRIAPPLAUNCH
+#include <liblomiri-app-launch/lomiri-app-launch/appid.h>
+#endif
#include <uuid/uuid.h>
+#include <gio/gdesktopappinfo.h>
+
#include <map>
#include <set>
#include <string>
@@ -145,7 +150,7 @@ class Engine::Impl
public:
Impl(const std::string& app_name):
- m_messaging_app(messaging_menu_app_new(DATETIME_INDICATOR_DESKTOP_FILE), g_object_unref),
+ m_messaging_app(messaging_menu_app_new(calendar_app_id().c_str()), g_object_unref),
m_app_name(app_name)
{
if (!notify_init(app_name.c_str()))
@@ -282,11 +287,15 @@ public:
uuid_unparse(message_uuid, uuid_buf);
const std::string message_id(uuid_buf);
- GIcon *icon = g_themed_icon_new(data.m_icon_name.c_str());
+ // use full icon path name, "calendar-app" does not work with themed icons
+ auto icon_file = g_file_new_for_path(calendar_app_icon().c_str());
+ // messaging_menu_message_new: will take control of icon object
+ GIcon *icon = g_file_icon_new(icon_file);
+ g_object_unref(icon_file);
// check if source exists
if (!messaging_menu_app_has_source(m_messaging_app.get(), m_app_name.c_str()))
- messaging_menu_app_append_source(m_messaging_app.get(), m_app_name.c_str(), icon, "Calendar");
+ messaging_menu_app_append_source(m_messaging_app.get(), m_app_name.c_str(), nullptr, "Calendar");
auto msg = messaging_menu_message_new(message_id.c_str(),
icon,
@@ -294,7 +303,6 @@ public:
nullptr,
data.m_body.c_str(),
data.m_start_time * G_USEC_PER_SEC); // secs -> microsecs
- g_object_unref(icon);
if (msg)
{
std::shared_ptr<messaging_menu_data> msg_data(new messaging_menu_data{message_id, data.m_missed_click_callback, this});
@@ -427,6 +435,31 @@ private:
m_notifications.erase(it);
}
+ static std::string calendar_app_id()
+ {
+ #ifdef HAS_LOMIRIAPPLAUNCH
+ auto app_id = lomiri::app_launch::AppID::discover("com.lomiri.calendar");
+ return std::string(app_id) + ".desktop";
+ #else
+ return "";
+ #endif
+ }
+
+ static std::string calendar_app_icon()
+ {
+ auto app_desktop = g_desktop_app_info_new(calendar_app_id().c_str());
+ if (app_desktop != nullptr) {
+ auto icon_name = g_desktop_app_info_get_string(app_desktop, "Icon");
+ g_object_unref(app_desktop);
+ std::string result(icon_name);
+ g_free(icon_name);
+ return result;
+ } else {
+ g_warning("Fail to get calendar icon");
+ return std::string();
+ }
+ }
+
/***
****
***/
diff --git a/src/snap.cpp b/src/snap.cpp
index 1e7dd5e..60005f3 100644
--- a/src/snap.cpp
+++ b/src/snap.cpp
@@ -124,7 +124,7 @@ public:
const auto minutes = std::chrono::minutes(m_settings->alarm_duration.get());
ain::Builder b;
b.set_body (appointment.summary);
- b.set_icon_name (appointment.is_ubuntu_alarm() ? "alarm-clock" : "calendar");
+ b.set_icon_name (appointment.is_ubuntu_alarm() ? "alarm-clock" : "calendar-app");
b.add_hint (ain::Builder::HINT_NONSHAPED_ICON);
b.set_start_time (appointment.begin.to_unix());
@@ -171,9 +171,12 @@ public:
ok(appointment, alarm);
});
- b.set_missed_click_callback([appointment, alarm, ok](){
- ok(appointment, alarm);
- });
+ //TODO: we need to extend it to support alarms appoitments
+ if (!appointment.is_ubuntu_alarm()) {
+ b.set_missed_click_callback([appointment, alarm, ok](){
+ ok(appointment, alarm);
+ });
+ }
const auto key = m_engine->show(b);
if (key)