diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/menu.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/menu.cpp b/src/menu.cpp index 416d02c..d19ad73 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -18,15 +18,17 @@ */ #include <datetime/menu.h> - #include <datetime/formatter.h> #include <datetime/state.h> - #include <glib/gi18n.h> #include <gio/gio.h> - #include <vector> +extern "C" +{ + #include <ayatana/common/utils.h> +} + namespace ayatana { namespace indicator { namespace datetime { @@ -56,7 +58,6 @@ GMenuModel* Menu::menu_model() return G_MENU_MODEL(m_menu); } - /**** ***** ****/ @@ -78,6 +79,12 @@ protected: m_actions(actions), m_formatter(formatter) { + if (m_pSettings == NULL && profile_in != Phone && profile_in != PhoneGreeter) + { + m_pSettings = g_settings_new("org.ayatana.common"); + g_signal_connect(m_pSettings, "changed::max-menu-text-length", G_CALLBACK(on_string_length_changed), this); + } + // initialize the menu create_gmenu(); for (int i=0; i<NUM_SECTIONS; i++) @@ -123,10 +130,16 @@ protected: g_clear_object(&m_menu); g_clear_pointer(&m_serialized_alarm_icon, g_variant_unref); g_clear_pointer(&m_serialized_calendar_icon, g_variant_unref); + g_clear_object(&m_pSettings); } virtual GVariant* create_header_state() =0; + static void on_string_length_changed(GSettings *pSettings, gchar *sKey, gpointer pSelf) + { + static_cast<MenuImpl*>(pSelf)->update_section(Appointments); + } + void update_header() { auto action_group = m_actions->action_group(); @@ -308,6 +321,7 @@ private: auto fmt = m_formatter->relative_format(begin, end); auto unix_time = g_date_time_to_unix(begin); + ayatana_common_utils_ellipsize((char*)appt.summary.c_str()); auto menu_item = g_menu_item_new (appt.summary.c_str(), nullptr); g_menu_item_set_attribute (menu_item, "x-ayatana-time", "x", unix_time); g_menu_item_set_attribute (menu_item, "x-ayatana-time-format", "s", fmt.c_str()); @@ -437,6 +451,7 @@ private: //private: GVariant * m_serialized_alarm_icon = nullptr; GVariant * m_serialized_calendar_icon = nullptr; + GSettings *m_pSettings = NULL; }; // class MenuImpl |