Merge branch 'quartz-elide-underscores' into 'master'

Bring back elide_underscores

See merge request GNOME/gtk!3581
This commit is contained in:
Matthias Clasen
2021-05-24 22:55:10 +00:00
3 changed files with 49 additions and 1 deletions

View File

@@ -24,6 +24,7 @@
#include "gtkmenutrackerprivate.h"
#include "gtkicontheme.h"
#include "gtkquartz.h"
#include "gtkprivate.h"
#include <gdk/macos/gdkmacos.h>
#include <gdk/macos/gdkmacoskeymap-private.h>
@@ -231,7 +232,7 @@ icon_loaded (GObject *object,
- (void)didChangeLabel
{
const char *label = gtk_menu_tracker_item_get_label (trackerItem);
char *label = _gtk_elide_underscores (gtk_menu_tracker_item_get_label (trackerItem));
NSString *title = [NSString stringWithUTF8String:label ? : ""];
@@ -256,6 +257,8 @@ icon_loaded (GObject *object,
}
[self setTitle:title];
g_free (label);
}
- (void)didChangeIcon

View File

@@ -266,3 +266,46 @@ gtk_get_portal_session_path (GDBusConnection *connection,
{
return get_portal_path (connection, "session", token);
}
char *
_gtk_elide_underscores (const char *original)
{
char *q, *result;
const char *p, *end;
gsize len;
gboolean last_underscore;
if (!original)
return NULL;
len = strlen (original);
q = result = g_malloc (len + 1);
last_underscore = FALSE;
end = original + len;
for (p = original; p < end; p++)
{
if (!last_underscore && *p == '_')
last_underscore = TRUE;
else
{
last_underscore = FALSE;
if (original + 2 <= p && p + 1 <= end &&
p[-2] == '(' && p[-1] == '_' && p[0] != '_' && p[1] == ')')
{
q--;
*q = '\0';
p++;
}
else
*q++ = *p;
}
}
if (last_underscore)
*q++ = '_';
*q = '\0';
return result;
}

View File

@@ -144,6 +144,8 @@ GBytes *get_emoji_data (void);
#endif /* G_ENABLE_DEBUG */
char * _gtk_elide_underscores (const char *original);
G_END_DECLS
#endif /* __GTK_PRIVATE_H__ */