From 91898597dd15d2d8661ab587a69585b232b7d00e Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Thu, 21 Oct 2021 15:30:01 +0200 Subject: Allow utf8 in roster header char This and the following commits should make a couple of more configs allow utf8 chars so people can use their weird icons :-) We did the same for the otr/omemo/pgp indicators at: https://github.com/profanity-im/profanity/commit/1f8b1eb740391941e79e1004ad041f8178a2b674 https://github.com/profanity-im/profanity/commit/5cf6ee1bc6d0b99b01891bc455a657bf022a72b0 --- src/ui/console.c | 5 +++-- src/ui/rosterwin.c | 20 ++++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) (limited to 'src/ui') diff --git a/src/ui/console.c b/src/ui/console.c index bdb8f24d..b2773f2d 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -1475,11 +1475,12 @@ cons_roster_setting(void) else cons_show("Roster offline (/roster) : hide"); - char header_ch = prefs_get_roster_header_char(); + char* header_ch = prefs_get_roster_header_char(); if (header_ch) - cons_show("Roster header char (/roster) : %c", header_ch); + cons_show("Roster header char (/roster) : %s", header_ch); else cons_show("Roster header char (/roster) : none"); + free(header_ch); char contact_ch = prefs_get_roster_contact_char(); if (contact_ch) diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c index 5c41fc82..9a5926a9 100644 --- a/src/ui/rosterwin.c +++ b/src/ui/rosterwin.c @@ -1028,9 +1028,10 @@ _rosterwin_unsubscribed_header(ProfLayoutSplit* layout, GList* wins) win_sub_newline_lazy(layout->subwin); GString* header = g_string_new(" "); - char ch = prefs_get_roster_header_char(); + char* ch = prefs_get_roster_header_char(); if (ch) { - g_string_append_printf(header, "%c", ch); + g_string_append_printf(header, "%s", ch); + free(ch); } g_string_append(header, "Unsubscribed"); @@ -1074,9 +1075,10 @@ _rosterwin_contacts_header(ProfLayoutSplit* layout, const char* const title, GSL win_sub_newline_lazy(layout->subwin); GString* header = g_string_new(" "); - char ch = prefs_get_roster_header_char(); + char* ch = prefs_get_roster_header_char(); if (ch) { - g_string_append_printf(header, "%c", ch); + g_string_append_printf(header, "%s", ch); + free(ch); } g_string_append(header, title); @@ -1125,9 +1127,10 @@ _rosterwin_rooms_header(ProfLayoutSplit* layout, GList* rooms, char* title) { win_sub_newline_lazy(layout->subwin); GString* header = g_string_new(" "); - char ch = prefs_get_roster_header_char(); + char* ch = prefs_get_roster_header_char(); if (ch) { - g_string_append_printf(header, "%c", ch); + g_string_append_printf(header, "%s", ch); + free(ch); } g_string_append(header, title); @@ -1188,9 +1191,10 @@ _rosterwin_private_header(ProfLayoutSplit* layout, GList* privs) win_sub_newline_lazy(layout->subwin); GString* title_str = g_string_new(" "); - char ch = prefs_get_roster_header_char(); + char* ch = prefs_get_roster_header_char(); if (ch) { - g_string_append_printf(title_str, "%c", ch); + g_string_append_printf(title_str, "%s", ch); + free(ch); } g_string_append(title_str, "Private chats"); -- cgit 1.4.1-2-gfad0 From a668ca45b78bf9653f93c0380e58101da3c3bced Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Fri, 22 Oct 2021 16:23:18 +0200 Subject: Allow utf8 in roster contact char --- src/command/cmd_funcs.c | 4 ++-- src/config/preferences.c | 24 ++++++++---------------- src/config/preferences.h | 4 ++-- src/config/theme.c | 4 ++-- src/ui/console.c | 17 ++++++++++------- src/ui/rosterwin.c | 8 ++++---- 6 files changed, 28 insertions(+), 33 deletions(-) (limited to 'src/ui') diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 3f221ff3..575ccaf3 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -2407,8 +2407,8 @@ cmd_roster(ProfWin* window, const char* const command, gchar** args) cons_show("Roster contact char removed."); rosterwin_roster(); } else { - prefs_set_roster_contact_char(args[2][0]); - cons_show("Roster contact char set to %c.", args[2][0]); + prefs_set_roster_contact_char(args[2]); + cons_show("Roster contact char set to %s.", args[2]); rosterwin_roster(); } } else if (g_strcmp0(args[1], "indent") == 0) { diff --git a/src/config/preferences.c b/src/config/preferences.c index 6539fc0c..3bc5800f 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -1110,30 +1110,22 @@ prefs_clear_roster_header_char(void) g_key_file_remove_key(prefs, PREF_GROUP_UI, "roster.header.char", NULL); } -char +char* prefs_get_roster_contact_char(void) { - char result = 0; - - char* resultstr = g_key_file_get_string(prefs, PREF_GROUP_UI, "roster.contact.char", NULL); - if (!resultstr) { - result = 0; - } else { - result = resultstr[0]; - } - free(resultstr); + char* result = g_key_file_get_string(prefs, PREF_GROUP_UI, "roster.contact.char", NULL); return result; } void -prefs_set_roster_contact_char(char ch) +prefs_set_roster_contact_char(char* ch) { - char str[2]; - str[0] = ch; - str[1] = '\0'; - - g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.contact.char", str); + if (g_utf8_strlen(ch, 4) == 1) { + g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.contact.char", ch); + } else { + log_error("Could not set roster contact char: %s", ch); + } } void diff --git a/src/config/preferences.h b/src/config/preferences.h index 1eddceca..2fb5b9b1 100644 --- a/src/config/preferences.h +++ b/src/config/preferences.h @@ -257,8 +257,8 @@ gboolean prefs_set_ox_char(char* ch); char* prefs_get_roster_header_char(void); void prefs_set_roster_header_char(char* ch); void prefs_clear_roster_header_char(void); -char prefs_get_roster_contact_char(void); -void prefs_set_roster_contact_char(char ch); +char* prefs_get_roster_contact_char(void); +void prefs_set_roster_contact_char(char* ch); void prefs_clear_roster_contact_char(void); char prefs_get_roster_resource_char(void); void prefs_set_roster_resource_char(char ch); diff --git a/src/config/theme.c b/src/config/theme.c index 61346167..26c3c669 100644 --- a/src/config/theme.c +++ b/src/config/theme.c @@ -430,8 +430,8 @@ _load_preferences(void) if (g_key_file_has_key(theme, "ui", "roster.contact.char", NULL)) { gchar* ch = g_key_file_get_string(theme, "ui", "roster.contact.char", NULL); - if (ch && strlen(ch) > 0) { - prefs_set_roster_contact_char(ch[0]); + if (ch && g_utf8_strlen(ch, 4) == 1) { + prefs_set_roster_contact_char(ch); g_free(ch); } } diff --git a/src/ui/console.c b/src/ui/console.c index b2773f2d..d6306dcc 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -1476,17 +1476,20 @@ cons_roster_setting(void) cons_show("Roster offline (/roster) : hide"); char* header_ch = prefs_get_roster_header_char(); - if (header_ch) + if (header_ch) { cons_show("Roster header char (/roster) : %s", header_ch); - else + free(header_ch); + } else { cons_show("Roster header char (/roster) : none"); - free(header_ch); + } - char contact_ch = prefs_get_roster_contact_char(); - if (contact_ch) - cons_show("Roster contact char (/roster) : %c", contact_ch); - else + char* contact_ch = prefs_get_roster_contact_char(); + if (contact_ch) { + cons_show("Roster contact char (/roster) : %s", contact_ch); + free(contact_ch); + } else { cons_show("Roster contact char (/roster) : none"); + } char resource_ch = prefs_get_roster_resource_char(); if (resource_ch) diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c index 9a5926a9..a3dfffba 100644 --- a/src/ui/rosterwin.c +++ b/src/ui/rosterwin.c @@ -314,9 +314,9 @@ _rosterwin_unsubscribed_item(ProfLayoutSplit* layout, ProfChatWin* chatwin) indent--; } } - char ch = prefs_get_roster_contact_char(); + char *ch = prefs_get_roster_contact_char(); if (ch) { - g_string_append_printf(msg, "%c", ch); + g_string_append_printf(msg, "%s", ch); } char* unreadpos = prefs_get_string(PREF_ROSTER_UNREAD); @@ -376,9 +376,9 @@ _rosterwin_contact(ProfLayoutSplit* layout, PContact contact) indent--; } } - char ch = prefs_get_roster_contact_char(); + char *ch = prefs_get_roster_contact_char(); if (ch) { - g_string_append_printf(msg, "%c", ch); + g_string_append_printf(msg, "%s", ch); } char* unreadpos = prefs_get_string(PREF_ROSTER_UNREAD); -- cgit 1.4.1-2-gfad0 From 83ee4a27cb04f1fc314536e72993476d59bd42a2 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Fri, 22 Oct 2021 16:29:08 +0200 Subject: Allow utf8 in roster resource char --- src/command/cmd_funcs.c | 4 ++-- src/config/preferences.c | 24 ++++++++---------------- src/config/preferences.h | 4 ++-- src/config/theme.c | 4 ++-- src/ui/console.c | 10 ++++++---- src/ui/rosterwin.c | 12 ++++++++---- 6 files changed, 28 insertions(+), 30 deletions(-) (limited to 'src/ui') diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 575ccaf3..e0747d40 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -2442,8 +2442,8 @@ cmd_roster(ProfWin* window, const char* const command, gchar** args) cons_show("Roster resource char removed."); rosterwin_roster(); } else { - prefs_set_roster_resource_char(args[2][0]); - cons_show("Roster resource char set to %c.", args[2][0]); + prefs_set_roster_resource_char(args[2]); + cons_show("Roster resource char set to %s.", args[2]); rosterwin_roster(); } } else if (g_strcmp0(args[1], "indent") == 0) { diff --git a/src/config/preferences.c b/src/config/preferences.c index 3bc5800f..e713598f 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -1134,30 +1134,22 @@ prefs_clear_roster_contact_char(void) g_key_file_remove_key(prefs, PREF_GROUP_UI, "roster.contact.char", NULL); } -char +char* prefs_get_roster_resource_char(void) { - char result = 0; - - char* resultstr = g_key_file_get_string(prefs, PREF_GROUP_UI, "roster.resource.char", NULL); - if (!resultstr) { - result = 0; - } else { - result = resultstr[0]; - } - free(resultstr); + char* result = g_key_file_get_string(prefs, PREF_GROUP_UI, "roster.resource.char", NULL); return result; } void -prefs_set_roster_resource_char(char ch) +prefs_set_roster_resource_char(char* ch) { - char str[2]; - str[0] = ch; - str[1] = '\0'; - - g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.resource.char", str); + if (g_utf8_strlen(ch, 4) == 1) { + g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.resource.char", ch); + } else { + log_error("Could not set roster resource char: %s", ch); + } } void diff --git a/src/config/preferences.h b/src/config/preferences.h index 2fb5b9b1..79312e76 100644 --- a/src/config/preferences.h +++ b/src/config/preferences.h @@ -260,8 +260,8 @@ void prefs_clear_roster_header_char(void); char* prefs_get_roster_contact_char(void); void prefs_set_roster_contact_char(char* ch); void prefs_clear_roster_contact_char(void); -char prefs_get_roster_resource_char(void); -void prefs_set_roster_resource_char(char ch); +char* prefs_get_roster_resource_char(void); +void prefs_set_roster_resource_char(char* ch); void prefs_clear_roster_resource_char(void); char prefs_get_roster_private_char(void); void prefs_set_roster_private_char(char ch); diff --git a/src/config/theme.c b/src/config/theme.c index 26c3c669..a3f74d94 100644 --- a/src/config/theme.c +++ b/src/config/theme.c @@ -438,8 +438,8 @@ _load_preferences(void) if (g_key_file_has_key(theme, "ui", "roster.resource.char", NULL)) { gchar* ch = g_key_file_get_string(theme, "ui", "roster.resource.char", NULL); - if (ch && strlen(ch) > 0) { - prefs_set_roster_resource_char(ch[0]); + if (ch && g_utf8_strlen(ch, 4) == 1) { + prefs_set_roster_resource_char(ch); g_free(ch); } } else { diff --git a/src/ui/console.c b/src/ui/console.c index d6306dcc..d86fb158 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -1491,11 +1491,13 @@ cons_roster_setting(void) cons_show("Roster contact char (/roster) : none"); } - char resource_ch = prefs_get_roster_resource_char(); - if (resource_ch) - cons_show("Roster resource char (/roster) : %c", resource_ch); - else + char* resource_ch = prefs_get_roster_resource_char(); + if (resource_ch) { + cons_show("Roster resource char (/roster) : %s", resource_ch); + free(resource_ch); + } else { cons_show("Roster resource char (/roster) : none"); + } char room_ch = prefs_get_roster_room_char(); if (room_ch) diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c index a3dfffba..91b8e7cc 100644 --- a/src/ui/rosterwin.c +++ b/src/ui/rosterwin.c @@ -317,6 +317,7 @@ _rosterwin_unsubscribed_item(ProfLayoutSplit* layout, ProfChatWin* chatwin) char *ch = prefs_get_roster_contact_char(); if (ch) { g_string_append_printf(msg, "%s", ch); + free(ch); } char* unreadpos = prefs_get_string(PREF_ROSTER_UNREAD); @@ -379,6 +380,7 @@ _rosterwin_contact(ProfLayoutSplit* layout, PContact contact) char *ch = prefs_get_roster_contact_char(); if (ch) { g_string_append_printf(msg, "%s", ch); + free(ch); } char* unreadpos = prefs_get_string(PREF_ROSTER_UNREAD); @@ -527,9 +529,10 @@ _rosterwin_resources(ProfLayoutSplit* layout, PContact contact, int current_inde wattron(layout->subwin, theme_attrs(resource_presence_colour)); GString* msg = g_string_new(""); - char ch = prefs_get_roster_resource_char(); + char* ch = prefs_get_roster_resource_char(); if (ch) { - g_string_append_printf(msg, "%c", ch); + g_string_append_printf(msg, "%s", ch); + free(ch); } else { g_string_append(msg, " "); } @@ -590,9 +593,10 @@ _rosterwin_resources(ProfLayoutSplit* layout, PContact contact, int current_inde g_string_append(msg, " "); this_indent--; } - char ch = prefs_get_roster_resource_char(); + char* ch = prefs_get_roster_resource_char(); if (ch) { - g_string_append_printf(msg, "%c", ch); + g_string_append_printf(msg, "%s", ch); + free(ch); } g_string_append(msg, resource->name); if (prefs_get_boolean(PREF_ROSTER_PRIORITY)) { -- cgit 1.4.1-2-gfad0 From 7faf15a18cabeb5117d0ac9d79081710abcbda9b Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Fri, 22 Oct 2021 16:33:10 +0200 Subject: Allow utf8 in roster private char --- src/command/cmd_funcs.c | 4 ++-- src/config/preferences.c | 24 ++++++++---------------- src/config/preferences.h | 4 ++-- src/config/theme.c | 4 ++-- src/ui/console.c | 8 +++++--- src/ui/rosterwin.c | 5 +++-- 6 files changed, 22 insertions(+), 27 deletions(-) (limited to 'src/ui') diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index e0747d40..0e024e91 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -2680,8 +2680,8 @@ cmd_roster(ProfWin* window, const char* const command, gchar** args) cons_show("Roster private room chat char removed."); rosterwin_roster(); } else { - prefs_set_roster_private_char(args[2][0]); - cons_show("Roster private room chat char set to %c.", args[2][0]); + prefs_set_roster_private_char(args[2]); + cons_show("Roster private room chat char set to %s.", args[2]); rosterwin_roster(); } return TRUE; diff --git a/src/config/preferences.c b/src/config/preferences.c index e713598f..6af779db 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -1158,30 +1158,22 @@ prefs_clear_roster_resource_char(void) g_key_file_remove_key(prefs, PREF_GROUP_UI, "roster.resource.char", NULL); } -char +char* prefs_get_roster_private_char(void) { - char result = 0; - - char* resultstr = g_key_file_get_string(prefs, PREF_GROUP_UI, "roster.private.char", NULL); - if (!resultstr) { - result = 0; - } else { - result = resultstr[0]; - } - free(resultstr); + char* result = g_key_file_get_string(prefs, PREF_GROUP_UI, "roster.private.char", NULL); return result; } void -prefs_set_roster_private_char(char ch) +prefs_set_roster_private_char(char* ch) { - char str[2]; - str[0] = ch; - str[1] = '\0'; - - g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.private.char", str); + if (g_utf8_strlen(ch, 4) == 1) { + g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.private.char", ch); + } else { + log_error("Could not set roster resource char: %s", ch); + } } void diff --git a/src/config/preferences.h b/src/config/preferences.h index 79312e76..e26deeaf 100644 --- a/src/config/preferences.h +++ b/src/config/preferences.h @@ -263,8 +263,8 @@ void prefs_clear_roster_contact_char(void); char* prefs_get_roster_resource_char(void); void prefs_set_roster_resource_char(char* ch); void prefs_clear_roster_resource_char(void); -char prefs_get_roster_private_char(void); -void prefs_set_roster_private_char(char ch); +char* prefs_get_roster_private_char(void); +void prefs_set_roster_private_char(char* ch); void prefs_clear_roster_private_char(void); char prefs_get_roster_room_char(void); void prefs_set_roster_room_char(char ch); diff --git a/src/config/theme.c b/src/config/theme.c index a3f74d94..868601be 100644 --- a/src/config/theme.c +++ b/src/config/theme.c @@ -464,8 +464,8 @@ _load_preferences(void) if (g_key_file_has_key(theme, "ui", "roster.private.char", NULL)) { gchar* ch = g_key_file_get_string(theme, "ui", "roster.private.char", NULL); - if (ch && strlen(ch) > 0) { - prefs_set_roster_private_char(ch[0]); + if (ch && g_utf8_strlen(ch, 4) == 1) { + prefs_set_roster_private_char(ch); g_free(ch); } } diff --git a/src/ui/console.c b/src/ui/console.c index d86fb158..76295d63 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -1511,11 +1511,13 @@ cons_roster_setting(void) else cons_show("Roster room private char (/roster) : none"); - char private_ch = prefs_get_roster_private_char(); - if (private_ch) + char* private_ch = prefs_get_roster_private_char(); + if (private_ch) { cons_show("Roster private char (/roster) : %c", private_ch); - else + free(private_ch); + } else { cons_show("Roster private char (/roster) : none"); + } gint contact_indent = prefs_get_roster_contact_indent(); cons_show("Roster contact indent (/roster) : %d", contact_indent); diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c index 91b8e7cc..b9a84950 100644 --- a/src/ui/rosterwin.c +++ b/src/ui/rosterwin.c @@ -951,9 +951,10 @@ _rosterwin_private_chats(ProfLayoutSplit* layout, GList* orphaned_privchats) g_string_append_printf(privmsg, "(%d) ", privwin->unread); } - char ch = prefs_get_roster_private_char(); + char* ch = prefs_get_roster_private_char(); if (ch) { - g_string_append_printf(privmsg, "%c", ch); + g_string_append_printf(privmsg, "%s", ch); + free(ch); } g_string_append(privmsg, privwin->fulljid); -- cgit 1.4.1-2-gfad0 From 8fc359ba2d91db757ab509a7d1839f0afe0d577d Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Fri, 22 Oct 2021 16:39:54 +0200 Subject: Allow utf8 in roster rooms char --- src/command/cmd_funcs.c | 4 ++-- src/config/preferences.c | 24 ++++++++---------------- src/config/preferences.h | 4 ++-- src/config/theme.c | 4 ++-- src/ui/console.c | 10 ++++++---- src/ui/rosterwin.c | 7 ++++--- 6 files changed, 24 insertions(+), 29 deletions(-) (limited to 'src/ui') diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 0e024e91..77e12e3a 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -2720,8 +2720,8 @@ cmd_roster(ProfWin* window, const char* const command, gchar** args) cons_show("Roster room char removed."); rosterwin_roster(); } else { - prefs_set_roster_room_char(args[2][0]); - cons_show("Roster room char set to %c.", args[2][0]); + prefs_set_roster_room_char(args[2]); + cons_show("Roster room char set to %s.", args[2]); rosterwin_roster(); } return TRUE; diff --git a/src/config/preferences.c b/src/config/preferences.c index 6af779db..edbf6f63 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -1182,30 +1182,22 @@ prefs_clear_roster_private_char(void) g_key_file_remove_key(prefs, PREF_GROUP_UI, "roster.private.char", NULL); } -char +char* prefs_get_roster_room_char(void) { - char result = 0; - - char* resultstr = g_key_file_get_string(prefs, PREF_GROUP_UI, "roster.rooms.char", NULL); - if (!resultstr) { - result = 0; - } else { - result = resultstr[0]; - } - free(resultstr); + char* result = g_key_file_get_string(prefs, PREF_GROUP_UI, "roster.rooms.char", NULL); return result; } void -prefs_set_roster_room_char(char ch) +prefs_set_roster_room_char(char* ch) { - char str[2]; - str[0] = ch; - str[1] = '\0'; - - g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.rooms.char", str); + if (g_utf8_strlen(ch, 4) == 1) { + g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.rooms.char", ch); + } else { + log_error("Could not set roster resource char: %s", ch); + } } void diff --git a/src/config/preferences.h b/src/config/preferences.h index e26deeaf..972dfa8a 100644 --- a/src/config/preferences.h +++ b/src/config/preferences.h @@ -266,8 +266,8 @@ void prefs_clear_roster_resource_char(void); char* prefs_get_roster_private_char(void); void prefs_set_roster_private_char(char* ch); void prefs_clear_roster_private_char(void); -char prefs_get_roster_room_char(void); -void prefs_set_roster_room_char(char ch); +char* prefs_get_roster_room_char(void); +void prefs_set_roster_room_char(char* ch); void prefs_clear_roster_room_char(void); char prefs_get_roster_room_private_char(void); void prefs_set_roster_room_private_char(char ch); diff --git a/src/config/theme.c b/src/config/theme.c index 868601be..407fb82e 100644 --- a/src/config/theme.c +++ b/src/config/theme.c @@ -448,8 +448,8 @@ _load_preferences(void) if (g_key_file_has_key(theme, "ui", "roster.rooms.char", NULL)) { gchar* ch = g_key_file_get_string(theme, "ui", "roster.rooms.char", NULL); - if (ch && strlen(ch) > 0) { - prefs_set_roster_room_char(ch[0]); + if (ch && g_utf8_strlen(ch, 4) == 1) { + prefs_set_roster_room_char(ch); g_free(ch); } } diff --git a/src/ui/console.c b/src/ui/console.c index 76295d63..5702f26f 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -1499,11 +1499,13 @@ cons_roster_setting(void) cons_show("Roster resource char (/roster) : none"); } - char room_ch = prefs_get_roster_room_char(); - if (room_ch) - cons_show("Roster room char (/roster) : %c", room_ch); - else + char* room_ch = prefs_get_roster_room_char(); + if (room_ch) { + cons_show("Roster room char (/roster) : %s", room_ch); + free(room_ch); + } else { cons_show("Roster room char (/roster) : none"); + } char room_priv_ch = prefs_get_roster_room_private_char(); if (room_priv_ch) diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c index b9a84950..fbfbd9cc 100644 --- a/src/ui/rosterwin.c +++ b/src/ui/rosterwin.c @@ -756,9 +756,10 @@ _rosterwin_room(ProfLayoutSplit* layout, ProfMucWin* mucwin) indent--; } } - char ch = prefs_get_roster_room_char(); + char* ch = prefs_get_roster_room_char(); if (ch) { - g_string_append_printf(msg, "%c", ch); + g_string_append_printf(msg, "%s", ch); + free(ch); } char* unreadpos = prefs_get_string(PREF_ROSTER_ROOMS_UNREAD); @@ -856,7 +857,7 @@ _rosterwin_room(ProfLayoutSplit* layout, ProfMucWin* mucwin) g_string_append_printf(privmsg, "(%d) ", privwin->unread); } - ch = prefs_get_roster_room_private_char(); + char ch = prefs_get_roster_room_private_char(); if (ch) { g_string_append_printf(privmsg, "%c", ch); } -- cgit 1.4.1-2-gfad0 From fa2881fcea9009ffbd50947d755a4c847a157cae Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Fri, 22 Oct 2021 16:42:57 +0200 Subject: Allow utf8 in roster room private char --- src/command/cmd_funcs.c | 4 ++-- src/config/preferences.c | 24 ++++++++---------------- src/config/preferences.h | 4 ++-- src/config/theme.c | 4 ++-- src/ui/console.c | 8 +++++--- src/ui/rosterwin.c | 5 +++-- 6 files changed, 22 insertions(+), 27 deletions(-) (limited to 'src/ui') diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 77e12e3a..58c08331 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -2798,8 +2798,8 @@ cmd_roster(ProfWin* window, const char* const command, gchar** args) cons_show("Roster room private char removed."); rosterwin_roster(); } else { - prefs_set_roster_room_private_char(args[3][0]); - cons_show("Roster room private char set to %c.", args[3][0]); + prefs_set_roster_room_private_char(args[3]); + cons_show("Roster room private char set to %s.", args[3]); rosterwin_roster(); } return TRUE; diff --git a/src/config/preferences.c b/src/config/preferences.c index edbf6f63..b1686424 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -1206,30 +1206,22 @@ prefs_clear_roster_room_char(void) g_key_file_remove_key(prefs, PREF_GROUP_UI, "roster.rooms.char", NULL); } -char +char* prefs_get_roster_room_private_char(void) { - char result = 0; - - char* resultstr = g_key_file_get_string(prefs, PREF_GROUP_UI, "roster.rooms.private.char", NULL); - if (!resultstr) { - result = 0; - } else { - result = resultstr[0]; - } - free(resultstr); + char* result = g_key_file_get_string(prefs, PREF_GROUP_UI, "roster.rooms.private.char", NULL); return result; } void -prefs_set_roster_room_private_char(char ch) +prefs_set_roster_room_private_char(char* ch) { - char str[2]; - str[0] = ch; - str[1] = '\0'; - - g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.rooms.private.char", str); + if (g_utf8_strlen(ch, 4) == 1) { + g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.rooms.private.char", ch); + } else { + log_error("Could not set roster resource char: %s", ch); + } } void diff --git a/src/config/preferences.h b/src/config/preferences.h index 972dfa8a..aec27094 100644 --- a/src/config/preferences.h +++ b/src/config/preferences.h @@ -269,8 +269,8 @@ void prefs_clear_roster_private_char(void); char* prefs_get_roster_room_char(void); void prefs_set_roster_room_char(char* ch); void prefs_clear_roster_room_char(void); -char prefs_get_roster_room_private_char(void); -void prefs_set_roster_room_private_char(char ch); +char* prefs_get_roster_room_private_char(void); +void prefs_set_roster_room_private_char(char* ch); void prefs_clear_roster_room_private_char(void); char prefs_get_occupants_char(void); void prefs_set_occupants_char(char ch); diff --git a/src/config/theme.c b/src/config/theme.c index 407fb82e..118cbaa2 100644 --- a/src/config/theme.c +++ b/src/config/theme.c @@ -456,8 +456,8 @@ _load_preferences(void) if (g_key_file_has_key(theme, "ui", "roster.rooms.private.char", NULL)) { gchar* ch = g_key_file_get_string(theme, "ui", "roster.rooms.private.char", NULL); - if (ch && strlen(ch) > 0) { - prefs_set_roster_room_private_char(ch[0]); + if (ch && g_utf8_strlen(ch, 4) == 1) { + prefs_set_roster_room_private_char(ch); g_free(ch); } } diff --git a/src/ui/console.c b/src/ui/console.c index 5702f26f..a20d9fce 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -1507,11 +1507,13 @@ cons_roster_setting(void) cons_show("Roster room char (/roster) : none"); } - char room_priv_ch = prefs_get_roster_room_private_char(); - if (room_priv_ch) + char* room_priv_ch = prefs_get_roster_room_private_char(); + if (room_priv_ch) { cons_show("Roster room private char (/roster) : %c", room_priv_ch); - else + free(room_priv_ch); + } else { cons_show("Roster room private char (/roster) : none"); + } char* private_ch = prefs_get_roster_private_char(); if (private_ch) { diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c index fbfbd9cc..5d368253 100644 --- a/src/ui/rosterwin.c +++ b/src/ui/rosterwin.c @@ -857,9 +857,10 @@ _rosterwin_room(ProfLayoutSplit* layout, ProfMucWin* mucwin) g_string_append_printf(privmsg, "(%d) ", privwin->unread); } - char ch = prefs_get_roster_room_private_char(); + ch = prefs_get_roster_room_private_char(); if (ch) { - g_string_append_printf(privmsg, "%c", ch); + g_string_append_printf(privmsg, "%s", ch); + free(ch); } char* nick = privwin->fulljid + strlen(mucwin->roomjid) + 1; -- cgit 1.4.1-2-gfad0 From 1c96115f97c1d72a12840a81ea54b8efd0f2a162 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Fri, 22 Oct 2021 16:47:15 +0200 Subject: Allow utf8 in occupants char --- src/command/cmd_funcs.c | 4 ++-- src/config/preferences.c | 23 ++++++++--------------- src/config/preferences.h | 4 ++-- src/config/theme.c | 4 ++-- src/ui/console.c | 14 ++++++++------ src/ui/occupantswin.c | 5 +++-- 6 files changed, 25 insertions(+), 29 deletions(-) (limited to 'src/ui') diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 58c08331..734401f4 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -4414,8 +4414,8 @@ cmd_occupants(ProfWin* window, const char* const command, gchar** args) occupantswin_occupants_all(); } else { - prefs_set_occupants_char(args[1][0]); - cons_show("Occupants char set to %c.", args[1][0]); + prefs_set_occupants_char(args[1]); + cons_show("Occupants char set to %s.", args[1]); occupantswin_occupants_all(); } diff --git a/src/config/preferences.c b/src/config/preferences.c index b1686424..fae150c8 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -902,30 +902,23 @@ prefs_get_occupants_size(void) } } -char +char* prefs_get_occupants_char(void) { - char result = 0; - char* resultstr = g_key_file_get_string(prefs, PREF_GROUP_UI, "occupants.char", NULL); - if (!resultstr) { - result = 0; - } else { - result = resultstr[0]; - } - free(resultstr); + char* result = g_key_file_get_string(prefs, PREF_GROUP_UI, "occupants.char", NULL); return result; } void -prefs_set_occupants_char(char ch) +prefs_set_occupants_char(char* ch) { - char str[2]; - str[0] = ch; - str[1] = '\0'; - - g_key_file_set_string(prefs, PREF_GROUP_UI, "occupants.char", str); + if (g_utf8_strlen(ch, 4) == 1) { + g_key_file_set_string(prefs, PREF_GROUP_UI, "occupants.char", ch); + } else { + log_error("Could not set roster resource char: %s", ch); + } } void diff --git a/src/config/preferences.h b/src/config/preferences.h index aec27094..1f8df60d 100644 --- a/src/config/preferences.h +++ b/src/config/preferences.h @@ -272,8 +272,8 @@ void prefs_clear_roster_room_char(void); char* prefs_get_roster_room_private_char(void); void prefs_set_roster_room_private_char(char* ch); void prefs_clear_roster_room_private_char(void); -char prefs_get_occupants_char(void); -void prefs_set_occupants_char(char ch); +char* prefs_get_occupants_char(void); +void prefs_set_occupants_char(char* ch); void prefs_clear_occupants_char(void); char prefs_get_occupants_header_char(void); void prefs_set_occupants_header_char(char ch); diff --git a/src/config/theme.c b/src/config/theme.c index 118cbaa2..1af68afd 100644 --- a/src/config/theme.c +++ b/src/config/theme.c @@ -406,8 +406,8 @@ _load_preferences(void) // with custom set functions if (g_key_file_has_key(theme, "ui", "occupants.char", NULL)) { gchar* ch = g_key_file_get_string(theme, "ui", "occupants.char", NULL); - if (ch && strlen(ch) > 0) { - prefs_set_occupants_char(ch[0]); + if (ch && g_utf8_strlen(ch, 4) == 1) { + prefs_set_occupants_char(ch); g_free(ch); } } diff --git a/src/ui/console.c b/src/ui/console.c index a20d9fce..3ca981ba 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -1340,11 +1340,13 @@ cons_occupants_setting(void) else cons_show("Occupants wrap (/occupants) : OFF"); - char occupants_ch = prefs_get_occupants_char(); - if (occupants_ch) - cons_show("Occupants char (/occupants) : %c", occupants_ch); - else + char* occupants_ch = prefs_get_occupants_char(); + if (occupants_ch) { + cons_show("Occupants char (/occupants) : %s", occupants_ch); + free(occupants_ch); + } else { cons_show("Occupants char (/occupants) : none"); + } gint occupant_indent = prefs_get_occupants_indent(); cons_show("Occupant indent (/occupants) : %d", occupant_indent); @@ -1509,7 +1511,7 @@ cons_roster_setting(void) char* room_priv_ch = prefs_get_roster_room_private_char(); if (room_priv_ch) { - cons_show("Roster room private char (/roster) : %c", room_priv_ch); + cons_show("Roster room private char (/roster) : %s", room_priv_ch); free(room_priv_ch); } else { cons_show("Roster room private char (/roster) : none"); @@ -1517,7 +1519,7 @@ cons_roster_setting(void) char* private_ch = prefs_get_roster_private_char(); if (private_ch) { - cons_show("Roster private char (/roster) : %c", private_ch); + cons_show("Roster private char (/roster) : %s", private_ch); free(private_ch); } else { cons_show("Roster private char (/roster) : none"); diff --git a/src/ui/occupantswin.c b/src/ui/occupantswin.c index 4ceb5575..8d06de0e 100644 --- a/src/ui/occupantswin.c +++ b/src/ui/occupantswin.c @@ -77,9 +77,10 @@ _occuptantswin_occupant(ProfLayoutSplit* layout, GList* item, gboolean showjid, GString* msg = g_string_new(spaces->str); - char ch = prefs_get_occupants_char(); + char* ch = prefs_get_occupants_char(); if (ch) { - g_string_append_printf(msg, "%c", ch); + g_string_append_printf(msg, "%s", ch); + free(ch); } gboolean wrap = prefs_get_boolean(PREF_OCCUPANTS_WRAP); -- cgit 1.4.1-2-gfad0 From a9bcc8e8bd1d8fabfd2d0536358eb4f355fc6f7f Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Fri, 22 Oct 2021 16:51:15 +0200 Subject: Allow utf8 in occupants header char --- src/command/cmd_funcs.c | 6 +++--- src/config/preferences.c | 24 ++++++++---------------- src/config/preferences.h | 4 ++-- src/config/theme.c | 4 ++-- src/ui/console.c | 10 ++++++---- src/ui/occupantswin.c | 5 +++-- 6 files changed, 24 insertions(+), 29 deletions(-) (limited to 'src/ui') diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 734401f4..ee27ebbd 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -2389,7 +2389,7 @@ cmd_roster(ProfWin* window, const char* const command, gchar** args) rosterwin_roster(); } else { prefs_set_roster_header_char(args[2]); - cons_show("Roster header char set to %c.", args[2]); + cons_show("Roster header char set to %s.", args[2]); rosterwin_roster(); } } else { @@ -4470,8 +4470,8 @@ cmd_occupants(ProfWin* window, const char* const command, gchar** args) occupantswin_occupants_all(); } else { - prefs_set_occupants_header_char(args[2][0]); - cons_show("Occupants header char set to %c.", args[2][0]); + prefs_set_occupants_header_char(args[2]); + cons_show("Occupants header char set to %s.", args[2]); occupantswin_occupants_all(); } diff --git a/src/config/preferences.c b/src/config/preferences.c index fae150c8..16da777d 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -948,30 +948,22 @@ prefs_set_occupants_indent(gint value) g_key_file_set_integer(prefs, PREF_GROUP_UI, "occupants.indent", value); } -char +char* prefs_get_occupants_header_char(void) { - char result = 0; - - char* resultstr = g_key_file_get_string(prefs, PREF_GROUP_UI, "occupants.header.char", NULL); - if (!resultstr) { - result = 0; - } else { - result = resultstr[0]; - } - free(resultstr); + char* result = g_key_file_get_string(prefs, PREF_GROUP_UI, "occupants.header.char", NULL); return result; } void -prefs_set_occupants_header_char(char ch) +prefs_set_occupants_header_char(char* ch) { - char str[2]; - str[0] = ch; - str[1] = '\0'; - - g_key_file_set_string(prefs, PREF_GROUP_UI, "occupants.header.char", str); + if (g_utf8_strlen(ch, 4) == 1) { + g_key_file_set_string(prefs, PREF_GROUP_UI, "occupants.header.char", ch); + } else { + log_error("Could not set roster resource char: %s", ch); + } } void diff --git a/src/config/preferences.h b/src/config/preferences.h index 1f8df60d..25fc16ad 100644 --- a/src/config/preferences.h +++ b/src/config/preferences.h @@ -275,8 +275,8 @@ void prefs_clear_roster_room_private_char(void); char* prefs_get_occupants_char(void); void prefs_set_occupants_char(char* ch); void prefs_clear_occupants_char(void); -char prefs_get_occupants_header_char(void); -void prefs_set_occupants_header_char(char ch); +char* prefs_get_occupants_header_char(void); +void prefs_set_occupants_header_char(char* ch); void prefs_clear_occupants_header_char(void); gint prefs_get_roster_contact_indent(void); diff --git a/src/config/theme.c b/src/config/theme.c index 1af68afd..9becc833 100644 --- a/src/config/theme.c +++ b/src/config/theme.c @@ -414,8 +414,8 @@ _load_preferences(void) if (g_key_file_has_key(theme, "ui", "occupants.header.char", NULL)) { gchar* ch = g_key_file_get_string(theme, "ui", "occupants.header.char", NULL); - if (ch && strlen(ch) > 0) { - prefs_set_occupants_header_char(ch[0]); + if (ch && g_utf8_strlen(ch, 4) == 1) { + prefs_set_occupants_header_char(ch); g_free(ch); } } diff --git a/src/ui/console.c b/src/ui/console.c index 3ca981ba..61c1f1c2 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -1354,11 +1354,13 @@ cons_occupants_setting(void) int size = prefs_get_occupants_size(); cons_show("Occupants size (/occupants) : %d", size); - char header_ch = prefs_get_occupants_header_char(); - if (header_ch) - cons_show("Occupants header char (/occupants) : %c", header_ch); - else + char* header_ch = prefs_get_occupants_header_char(); + if (header_ch) { + cons_show("Occupants header char (/occupants) : %s", header_ch); + free(header_ch); + } else { cons_show("Occupants header char (/occupants) : none"); + } } void diff --git a/src/ui/occupantswin.c b/src/ui/occupantswin.c index 8d06de0e..1524de3f 100644 --- a/src/ui/occupantswin.c +++ b/src/ui/occupantswin.c @@ -131,9 +131,10 @@ occupantswin_occupants(const char* const roomjid) GString* prefix = g_string_new(" "); - char ch = prefs_get_occupants_header_char(); + char* ch = prefs_get_occupants_header_char(); if (ch) { - g_string_append_printf(prefix, "%c", ch); + g_string_append_printf(prefix, "%s", ch); + free(ch); } if (prefs_get_boolean(PREF_MUC_PRIVILEGES)) { -- cgit 1.4.1-2-gfad0