From 9be11d94c663ea66cd41a9364a78531537ae405e Mon Sep 17 00:00:00 2001 From: Robert Tari Date: Mon, 14 Jun 2021 23:08:17 +0200 Subject: Add ability to ellipsize dynamic menu item lengths. Plus making the maximum length of non-ellipsized strings configurable via GSettings. - data/org.ayatana.common.gschema.xml.in: Add file. - data/CMakeLists.txt: Add file. - CMakeLists.txt: Add gio-2.0 dependency + 'data' build folder. - src/utils.*: Add ayatana_common_utils_elipsize function + include glib-object.h and gio.h - tests/tst_utils.cpp: Add StringFunctionsTest. - tests/CMakeLists.txt: Add GLIB_LIBRARIES to target. --- src/utils.c | 26 ++++++++++++++++++++++++++ src/utils.h | 4 ++++ 2 files changed, 30 insertions(+) (limited to 'src') diff --git a/src/utils.c b/src/utils.c index d735172..1d21b02 100644 --- a/src/utils.c +++ b/src/utils.c @@ -273,3 +273,29 @@ ayatana_common_utils_zenity_warning (const char * icon_name, g_free (zenity); return confirmed; } + +void ayatana_common_utils_elipsize(char *sText) +{ + guint nMaxLetters = 50; + glong nLetters = g_utf8_strlen(sText, -1); + GSettingsSchemaSource *pSource = g_settings_schema_source_get_default(); + + if (pSource != NULL) + { + GSettingsSchema *pSchema = g_settings_schema_source_lookup(pSource, "org.ayatana.common", FALSE); + + if (pSchema != NULL) + { + g_settings_schema_unref(pSchema); + GSettings *pSettings = g_settings_new("org.ayatana.common"); + nMaxLetters = g_settings_get_uint(pSettings, "max-menu-text-length"); + g_object_unref(pSettings); + } + } + + if (nLetters > nMaxLetters + 4) + { + gchar *pLastChar = g_utf8_offset_to_pointer(sText, nMaxLetters); + memcpy(pLastChar, "...\0", 4); + } +} diff --git a/src/utils.h b/src/utils.h index 0fa643b..13e2d2f 100644 --- a/src/utils.h +++ b/src/utils.h @@ -19,6 +19,8 @@ #pragma once #include +#include +#include #define DESKTOP_LOMIRI "Lomiri" #define DESKTOP_UNITY "Unity" @@ -47,3 +49,5 @@ gboolean ayatana_common_utils_execute_command(const gchar * cmd); gboolean ayatana_common_utils_open_url(const gchar * url); gboolean ayatana_common_utils_have_program(const gchar * program); gboolean ayatana_common_utils_zenity_warning(const char *icon_name, const char *title, const char *text); + +void ayatana_common_utils_elipsize(char *sText); -- cgit v1.2.3