2012-11-21 16:24:10 -05:00
|
|
|
/*
|
|
|
|
* theme.c
|
|
|
|
*
|
2019-01-22 05:31:45 -05:00
|
|
|
* Copyright (C) 2012 - 2019 James Booth <boothj5@gmail.com>
|
2019-06-17 04:44:08 -04:00
|
|
|
* Copyright (C) 2019 Michael Vetter <jubalh@iodoru.org>
|
2012-11-21 16:24:10 -05:00
|
|
|
*
|
|
|
|
* This file is part of Profanity.
|
|
|
|
*
|
|
|
|
* Profanity is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* Profanity is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
2016-07-23 20:14:49 -04:00
|
|
|
* along with Profanity. If not, see <https://www.gnu.org/licenses/>.
|
2012-11-21 16:24:10 -05:00
|
|
|
*
|
2014-08-24 15:57:39 -04:00
|
|
|
* In addition, as a special exception, the copyright holders give permission to
|
|
|
|
* link the code of portions of this program with the OpenSSL library under
|
|
|
|
* certain conditions as described in each individual source file, and
|
|
|
|
* distribute linked combinations including the two.
|
|
|
|
*
|
|
|
|
* You must obey the GNU General Public License in all respects for all of the
|
|
|
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
|
|
|
* may extend this exception to your version of the file(s), but you are not
|
|
|
|
* obligated to do so. If you do not wish to do so, delete this exception
|
|
|
|
* statement from your version. If you delete this exception statement from all
|
|
|
|
* source files in the program, then also delete it here.
|
|
|
|
*
|
2012-11-21 16:24:10 -05:00
|
|
|
*/
|
|
|
|
|
2016-03-31 16:05:02 -04:00
|
|
|
#include "config.h"
|
2012-11-21 16:24:10 -05:00
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include <glib.h>
|
2016-07-24 10:43:51 -04:00
|
|
|
|
2016-03-31 16:05:02 -04:00
|
|
|
#ifdef HAVE_NCURSESW_NCURSES_H
|
2013-01-02 15:27:37 -05:00
|
|
|
#include <ncursesw/ncurses.h>
|
2016-03-31 16:05:02 -04:00
|
|
|
#elif HAVE_NCURSES_H
|
2013-01-03 19:35:54 -05:00
|
|
|
#include <ncurses.h>
|
2012-11-21 16:24:10 -05:00
|
|
|
#endif
|
|
|
|
|
2013-02-02 17:23:34 -05:00
|
|
|
#include "common.h"
|
2012-11-21 16:24:10 -05:00
|
|
|
#include "log.h"
|
2016-07-24 11:22:15 -04:00
|
|
|
#include "config/files.h"
|
|
|
|
#include "config/theme.h"
|
|
|
|
#include "config/preferences.h"
|
2019-08-23 06:32:55 -04:00
|
|
|
#include "config/color.h"
|
2012-11-21 16:24:10 -05:00
|
|
|
|
|
|
|
static GString *theme_loc;
|
|
|
|
static GKeyFile *theme;
|
2014-11-16 16:56:19 -05:00
|
|
|
static GHashTable *bold_items;
|
2016-01-21 18:59:45 -05:00
|
|
|
static GHashTable *defaults;
|
2012-11-21 16:24:10 -05:00
|
|
|
|
2014-11-19 18:58:55 -05:00
|
|
|
static void _load_preferences(void);
|
2015-10-25 18:23:38 -04:00
|
|
|
void _theme_list_dir(const gchar *const dir, GSList **result);
|
|
|
|
static GString* _theme_find(const char *const theme_name);
|
|
|
|
static gboolean _theme_load_file(const char *const theme_name);
|
2012-11-21 16:24:10 -05:00
|
|
|
|
|
|
|
void
|
2015-10-25 18:23:38 -04:00
|
|
|
theme_init(const char *const theme_name)
|
2012-11-21 16:24:10 -05:00
|
|
|
{
|
2014-11-30 16:25:13 -05:00
|
|
|
if (!_theme_load_file(theme_name) && !_theme_load_file("default")) {
|
2014-04-08 18:52:53 -04:00
|
|
|
log_error("Theme initialisation failed");
|
2012-12-08 19:21:33 -05:00
|
|
|
}
|
2016-01-09 22:11:05 -05:00
|
|
|
|
2016-02-13 20:37:13 -05:00
|
|
|
defaults = g_hash_table_new_full(g_str_hash, g_str_equal, free, free);
|
2016-01-21 18:59:45 -05:00
|
|
|
|
|
|
|
g_hash_table_insert(defaults, strdup("main.text"), strdup("white"));
|
2019-09-11 07:20:32 -04:00
|
|
|
g_hash_table_insert(defaults, strdup("main.text.history"), strdup("white"));
|
2016-01-21 18:59:45 -05:00
|
|
|
g_hash_table_insert(defaults, strdup("main.text.me"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("main.text.them"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("main.splash"), strdup("cyan"));
|
2016-10-29 11:27:32 -04:00
|
|
|
g_hash_table_insert(defaults, strdup("main.help.header"), strdup("white"));
|
2016-01-21 18:59:45 -05:00
|
|
|
g_hash_table_insert(defaults, strdup("error"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("incoming"), strdup("yellow"));
|
2016-02-10 16:38:28 -05:00
|
|
|
g_hash_table_insert(defaults, strdup("mention"), strdup("yellow"));
|
|
|
|
g_hash_table_insert(defaults, strdup("trigger"), strdup("yellow"));
|
2016-01-21 18:59:45 -05:00
|
|
|
g_hash_table_insert(defaults, strdup("input.text"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("main.time"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("titlebar.text"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("titlebar.brackets"), strdup("cyan"));
|
|
|
|
g_hash_table_insert(defaults, strdup("titlebar.unencrypted"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("titlebar.encrypted"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("titlebar.untrusted"), strdup("yellow"));
|
|
|
|
g_hash_table_insert(defaults, strdup("titlebar.trusted"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("titlebar.online"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("titlebar.offline"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("titlebar.away"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("titlebar.chat"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("titlebar.dnd"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("titlebar.xa"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("statusbar.text"), strdup("white"));
|
|
|
|
g_hash_table_insert(defaults, strdup("statusbar.brackets"), strdup("cyan"));
|
|
|
|
g_hash_table_insert(defaults, strdup("statusbar.active"), strdup("cyan"));
|
2019-09-20 04:40:54 -04:00
|
|
|
g_hash_table_insert(defaults, strdup("statusbar.current"), strdup("cyan"));
|
2016-01-21 18:59:45 -05:00
|
|
|
g_hash_table_insert(defaults, strdup("statusbar.new"), strdup("white"));
|
2017-02-15 08:34:57 -05:00
|
|
|
g_hash_table_insert(defaults, strdup("statusbar.time"), strdup("white"));
|
2016-01-21 18:59:45 -05:00
|
|
|
g_hash_table_insert(defaults, strdup("me"), strdup("yellow"));
|
|
|
|
g_hash_table_insert(defaults, strdup("them"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("receipt.sent"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roominfo"), strdup("yellow"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roommention"), strdup("yellow"));
|
2016-02-10 18:03:23 -05:00
|
|
|
g_hash_table_insert(defaults, strdup("roommention.term"), strdup("yellow"));
|
2016-01-24 12:33:26 -05:00
|
|
|
g_hash_table_insert(defaults, strdup("roomtrigger"), strdup("yellow"));
|
2016-02-13 17:46:25 -05:00
|
|
|
g_hash_table_insert(defaults, strdup("roomtrigger.term"), strdup("yellow"));
|
2016-01-21 18:59:45 -05:00
|
|
|
g_hash_table_insert(defaults, strdup("online"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("offline"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("away"), strdup("cyan"));
|
|
|
|
g_hash_table_insert(defaults, strdup("chat"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("dnd"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("xa"), strdup("cyan"));
|
|
|
|
g_hash_table_insert(defaults, strdup("typing"), strdup("yellow"));
|
|
|
|
g_hash_table_insert(defaults, strdup("gone"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("subscribed"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("unsubscribed"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("otr.started.trusted"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("otr.started.untrusted"), strdup("yellow"));
|
|
|
|
g_hash_table_insert(defaults, strdup("otr.ended"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("otr.trusted"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("otr.untrusted"), strdup("yellow"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.header"), strdup("yellow"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.online"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.offline"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.chat"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.away"), strdup("cyan"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.dnd"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.xa"), strdup("cyan"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.online.active"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.offline.active"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.chat.active"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.away.active"), strdup("cyan"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.dnd.active"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.xa.active"), strdup("cyan"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.online.unread"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.offline.unread"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.chat.unread"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.away.unread"), strdup("cyan"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.dnd.unread"), strdup("red"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.xa.unread"), strdup("cyan"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.room"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.room.unread"), strdup("green"));
|
2016-01-24 19:19:26 -05:00
|
|
|
g_hash_table_insert(defaults, strdup("roster.room.trigger"), strdup("green"));
|
|
|
|
g_hash_table_insert(defaults, strdup("roster.room.mention"), strdup("green"));
|
2016-01-21 18:59:45 -05:00
|
|
|
g_hash_table_insert(defaults, strdup("occupants.header"), strdup("yellow"));
|
2019-06-18 00:23:06 -04:00
|
|
|
g_hash_table_insert(defaults, strdup("untrusted"), strdup("red"));
|
2016-09-19 18:40:45 -04:00
|
|
|
|
|
|
|
_load_preferences();
|
2012-12-08 19:21:33 -05:00
|
|
|
}
|
|
|
|
|
2016-01-21 20:06:28 -05:00
|
|
|
gboolean
|
|
|
|
theme_exists(const char *const theme_name)
|
|
|
|
{
|
|
|
|
if (g_strcmp0(theme_name, "default") == 0) {
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
GString *new_theme_file = _theme_find(theme_name);
|
|
|
|
if (new_theme_file == NULL) {
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
g_string_free(new_theme_file, TRUE);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-11-21 17:33:07 -05:00
|
|
|
gboolean
|
2015-10-25 18:23:38 -04:00
|
|
|
theme_load(const char *const theme_name)
|
2014-11-30 16:25:13 -05:00
|
|
|
{
|
2019-08-23 07:54:09 -04:00
|
|
|
color_pair_cache_reset();
|
|
|
|
|
2014-11-30 16:25:13 -05:00
|
|
|
if (_theme_load_file(theme_name)) {
|
|
|
|
_load_preferences();
|
|
|
|
return TRUE;
|
|
|
|
} else {
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
2015-10-25 18:23:38 -04:00
|
|
|
_theme_load_file(const char *const theme_name)
|
2012-11-21 17:33:07 -05:00
|
|
|
{
|
|
|
|
// use default theme
|
2014-04-08 18:52:53 -04:00
|
|
|
if (theme_name == NULL || strcmp(theme_name, "default") == 0) {
|
2015-05-04 17:33:55 -04:00
|
|
|
if (theme) {
|
2014-04-08 18:52:53 -04:00
|
|
|
g_key_file_free(theme);
|
|
|
|
}
|
2012-11-21 17:33:07 -05:00
|
|
|
theme = g_key_file_new();
|
|
|
|
|
2014-04-08 18:52:53 -04:00
|
|
|
// load theme from file
|
|
|
|
} else {
|
|
|
|
GString *new_theme_file = _theme_find(theme_name);
|
|
|
|
if (new_theme_file == NULL) {
|
2012-11-21 17:33:07 -05:00
|
|
|
log_info("Theme does not exist \"%s\"", theme_name);
|
|
|
|
return FALSE;
|
2014-04-08 18:52:53 -04:00
|
|
|
}
|
2012-11-21 17:33:07 -05:00
|
|
|
|
2015-05-04 17:33:55 -04:00
|
|
|
if (theme_loc) {
|
2014-04-08 18:52:53 -04:00
|
|
|
g_string_free(theme_loc, TRUE);
|
|
|
|
}
|
|
|
|
theme_loc = new_theme_file;
|
|
|
|
log_info("Loading theme \"%s\"", theme_name);
|
2015-05-04 17:33:55 -04:00
|
|
|
if (theme) {
|
2012-11-21 17:33:07 -05:00
|
|
|
g_key_file_free(theme);
|
|
|
|
}
|
2014-04-08 18:52:53 -04:00
|
|
|
theme = g_key_file_new();
|
|
|
|
g_key_file_load_from_file(theme, theme_loc->str, G_KEY_FILE_KEEP_COMMENTS,
|
|
|
|
NULL);
|
2012-11-21 17:33:07 -05:00
|
|
|
}
|
2014-04-08 18:52:53 -04:00
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2015-10-25 18:23:38 -04:00
|
|
|
GSList*
|
2014-04-08 18:52:53 -04:00
|
|
|
theme_list(void)
|
|
|
|
{
|
|
|
|
GSList *result = NULL;
|
2016-07-24 16:35:12 -04:00
|
|
|
char *themes_dir = files_get_config_path(DIR_THEMES);
|
2015-02-09 16:21:22 -05:00
|
|
|
_theme_list_dir(themes_dir, &result);
|
|
|
|
free(themes_dir);
|
2014-04-08 18:52:53 -04:00
|
|
|
#ifdef THEMES_PATH
|
|
|
|
_theme_list_dir(THEMES_PATH, &result);
|
|
|
|
#endif
|
|
|
|
return result;
|
2012-11-21 17:33:07 -05:00
|
|
|
}
|
|
|
|
|
2012-11-21 16:24:10 -05:00
|
|
|
void
|
|
|
|
theme_close(void)
|
|
|
|
{
|
2015-05-04 17:33:55 -04:00
|
|
|
if (theme) {
|
2014-04-08 18:52:53 -04:00
|
|
|
g_key_file_free(theme);
|
2015-05-17 17:05:43 -04:00
|
|
|
theme = NULL;
|
2014-04-08 18:52:53 -04:00
|
|
|
}
|
2015-05-04 17:33:55 -04:00
|
|
|
if (theme_loc) {
|
2012-11-26 19:44:05 -05:00
|
|
|
g_string_free(theme_loc, TRUE);
|
2015-05-17 17:05:43 -04:00
|
|
|
theme_loc = NULL;
|
2012-11-26 19:44:05 -05:00
|
|
|
}
|
2014-11-16 16:56:19 -05:00
|
|
|
if (bold_items) {
|
|
|
|
g_hash_table_destroy(bold_items);
|
2015-05-17 17:05:43 -04:00
|
|
|
bold_items = NULL;
|
2014-11-16 16:56:19 -05:00
|
|
|
}
|
2016-01-21 18:59:45 -05:00
|
|
|
if (defaults) {
|
|
|
|
g_hash_table_destroy(defaults);
|
|
|
|
defaults = NULL;
|
|
|
|
}
|
2012-11-21 16:24:10 -05:00
|
|
|
}
|
|
|
|
|
2016-01-09 22:11:05 -05:00
|
|
|
void
|
|
|
|
theme_init_colours(void)
|
2012-11-21 16:24:10 -05:00
|
|
|
{
|
2016-01-09 22:11:05 -05:00
|
|
|
assume_default_colors(-1, -1);
|
2019-08-23 06:32:55 -04:00
|
|
|
color_pair_cache_reset();
|
2012-11-21 16:24:10 -05:00
|
|
|
}
|
2013-02-02 17:23:34 -05:00
|
|
|
|
2014-11-19 18:58:55 -05:00
|
|
|
static void
|
|
|
|
_set_string_preference(char *prefstr, preference_t pref)
|
|
|
|
{
|
|
|
|
if (g_key_file_has_key(theme, "ui", prefstr, NULL)) {
|
|
|
|
gchar *val = g_key_file_get_string(theme, "ui", prefstr, NULL);
|
|
|
|
prefs_set_string(pref, val);
|
2014-11-23 19:29:02 -05:00
|
|
|
g_free(val);
|
2014-11-19 18:58:55 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_set_boolean_preference(char *prefstr, preference_t pref)
|
|
|
|
{
|
|
|
|
if (g_key_file_has_key(theme, "ui", prefstr, NULL)) {
|
|
|
|
gboolean val = g_key_file_get_boolean(theme, "ui", prefstr, NULL);
|
|
|
|
prefs_set_boolean(pref, val);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_load_preferences(void)
|
|
|
|
{
|
|
|
|
_set_boolean_preference("beep", PREF_BEEP);
|
|
|
|
_set_boolean_preference("flash", PREF_FLASH);
|
2015-02-24 19:01:41 -05:00
|
|
|
_set_boolean_preference("splash", PREF_SPLASH);
|
2014-11-19 18:58:55 -05:00
|
|
|
_set_boolean_preference("wrap", PREF_WRAP);
|
2015-02-24 19:01:41 -05:00
|
|
|
_set_boolean_preference("resource.title", PREF_RESOURCE_TITLE);
|
|
|
|
_set_boolean_preference("resource.message", PREF_RESOURCE_MESSAGE);
|
2014-11-19 18:58:55 -05:00
|
|
|
_set_boolean_preference("occupants", PREF_OCCUPANTS);
|
2015-04-11 21:14:37 -04:00
|
|
|
_set_boolean_preference("occupants.jid", PREF_OCCUPANTS_JID);
|
2019-04-23 10:54:40 -04:00
|
|
|
_set_boolean_preference("occupants.wrap", PREF_OCCUPANTS_WRAP);
|
2014-11-19 18:58:55 -05:00
|
|
|
_set_boolean_preference("roster", PREF_ROSTER);
|
|
|
|
_set_boolean_preference("roster.offline", PREF_ROSTER_OFFLINE);
|
|
|
|
_set_boolean_preference("roster.resource", PREF_ROSTER_RESOURCE);
|
2015-11-22 12:45:38 -05:00
|
|
|
_set_boolean_preference("roster.resource.join", PREF_ROSTER_RESOURCE_JOIN);
|
2015-11-18 19:45:03 -05:00
|
|
|
_set_boolean_preference("roster.presence", PREF_ROSTER_PRESENCE);
|
|
|
|
_set_boolean_preference("roster.status", PREF_ROSTER_STATUS);
|
2015-07-08 07:11:56 -04:00
|
|
|
_set_boolean_preference("roster.empty", PREF_ROSTER_EMPTY);
|
2015-11-21 20:39:20 -05:00
|
|
|
_set_boolean_preference("roster.wrap", PREF_ROSTER_WRAP);
|
2016-01-27 18:02:28 -05:00
|
|
|
_set_boolean_preference("roster.count.zero", PREF_ROSTER_COUNT_ZERO);
|
2015-11-18 19:45:03 -05:00
|
|
|
_set_boolean_preference("roster.priority", PREF_ROSTER_PRIORITY);
|
2016-01-19 20:48:41 -05:00
|
|
|
_set_boolean_preference("roster.contacts", PREF_ROSTER_CONTACTS);
|
2016-02-06 19:49:48 -05:00
|
|
|
_set_boolean_preference("roster.unsubscribed", PREF_ROSTER_UNSUBSCRIBED);
|
2016-01-01 20:29:12 -05:00
|
|
|
_set_boolean_preference("roster.rooms", PREF_ROSTER_ROOMS);
|
2018-02-09 19:01:26 -05:00
|
|
|
_set_boolean_preference("roster.rooms.server", PREF_ROSTER_ROOMS_SERVER);
|
2016-01-23 21:28:22 -05:00
|
|
|
_set_boolean_preference("privileges", PREF_MUC_PRIVILEGES);
|
|
|
|
_set_boolean_preference("presence", PREF_PRESENCE);
|
|
|
|
_set_boolean_preference("intype", PREF_INTYPE);
|
|
|
|
_set_boolean_preference("enc.warn", PREF_ENC_WARN);
|
|
|
|
_set_boolean_preference("tls.show", PREF_TLS_SHOW);
|
2018-03-10 18:22:58 -05:00
|
|
|
_set_boolean_preference("statusbar.show.name", PREF_STATUSBAR_SHOW_NAME);
|
2019-04-24 08:48:24 -04:00
|
|
|
_set_boolean_preference("statusbar.show.number", PREF_STATUSBAR_SHOW_NUMBER);
|
2016-01-23 21:28:22 -05:00
|
|
|
|
|
|
|
_set_string_preference("time.console", PREF_TIME_CONSOLE);
|
|
|
|
_set_string_preference("time.chat", PREF_TIME_CHAT);
|
|
|
|
_set_string_preference("time.muc", PREF_TIME_MUC);
|
2018-04-11 12:57:50 -04:00
|
|
|
_set_string_preference("time.config", PREF_TIME_CONFIG);
|
2016-01-23 21:28:22 -05:00
|
|
|
_set_string_preference("time.private", PREF_TIME_PRIVATE);
|
|
|
|
_set_string_preference("time.xmlconsole", PREF_TIME_XMLCONSOLE);
|
|
|
|
_set_string_preference("time.statusbar", PREF_TIME_STATUSBAR);
|
|
|
|
_set_string_preference("time.lastactivity", PREF_TIME_LASTACTIVITY);
|
|
|
|
_set_string_preference("statuses.console", PREF_STATUSES_CONSOLE);
|
|
|
|
_set_string_preference("statuses.chat", PREF_STATUSES_CHAT);
|
|
|
|
_set_string_preference("statuses.muc", PREF_STATUSES_MUC);
|
|
|
|
_set_string_preference("console.muc", PREF_CONSOLE_MUC);
|
2016-02-03 18:39:20 -05:00
|
|
|
_set_string_preference("console.private", PREF_CONSOLE_PRIVATE);
|
2016-02-03 18:02:52 -05:00
|
|
|
_set_string_preference("console.chat", PREF_CONSOLE_CHAT);
|
2016-01-23 21:28:22 -05:00
|
|
|
_set_string_preference("roster.by", PREF_ROSTER_BY);
|
|
|
|
_set_string_preference("roster.order", PREF_ROSTER_ORDER);
|
|
|
|
_set_string_preference("roster.unread", PREF_ROSTER_UNREAD);
|
2016-01-09 17:21:09 -05:00
|
|
|
_set_string_preference("roster.rooms.order", PREF_ROSTER_ROOMS_ORDER);
|
2016-01-17 16:20:00 -05:00
|
|
|
_set_string_preference("roster.rooms.unread", PREF_ROSTER_ROOMS_UNREAD);
|
2016-01-19 17:38:00 -05:00
|
|
|
_set_string_preference("roster.rooms.pos", PREF_ROSTER_ROOMS_POS);
|
2016-01-31 20:11:01 -05:00
|
|
|
_set_string_preference("roster.rooms.by", PREF_ROSTER_ROOMS_BY);
|
2016-01-23 20:04:21 -05:00
|
|
|
_set_string_preference("roster.private", PREF_ROSTER_PRIVATE);
|
2016-01-27 18:02:28 -05:00
|
|
|
_set_string_preference("roster.count", PREF_ROSTER_COUNT);
|
2018-03-10 18:22:58 -05:00
|
|
|
_set_string_preference("statusbar.self", PREF_STATUSBAR_SELF);
|
|
|
|
_set_string_preference("statusbar.chat", PREF_STATUSBAR_CHAT);
|
|
|
|
_set_string_preference("statusbar.room", PREF_STATUSBAR_ROOM);
|
|
|
|
|
|
|
|
if (g_key_file_has_key(theme, "ui", "statusbar.tabs", NULL)) {
|
|
|
|
gint tabs_size = g_key_file_get_integer(theme, "ui", "statusbar.tabs", NULL);
|
|
|
|
prefs_set_statusbartabs(tabs_size);
|
|
|
|
}
|
2016-01-23 21:28:22 -05:00
|
|
|
|
2018-03-10 20:18:46 -05:00
|
|
|
if (g_key_file_has_key(theme, "ui", "statusbar.tablen", NULL)) {
|
|
|
|
gint tab_len = g_key_file_get_integer(theme, "ui", "statusbar.tablen", NULL);
|
2018-03-10 20:21:36 -05:00
|
|
|
prefs_set_statusbartablen(tab_len);
|
2018-03-10 20:18:46 -05:00
|
|
|
}
|
|
|
|
|
2016-01-23 21:28:22 -05:00
|
|
|
if (g_key_file_has_key(theme, "ui", "occupants.size", NULL)) {
|
|
|
|
gint occupants_size = g_key_file_get_integer(theme, "ui", "occupants.size", NULL);
|
|
|
|
prefs_set_occupants_size(occupants_size);
|
|
|
|
}
|
|
|
|
|
2019-05-02 11:01:55 -04:00
|
|
|
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]);
|
|
|
|
g_free(ch);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
prefs_clear_occupants_char();
|
|
|
|
}
|
|
|
|
|
2019-04-18 14:53:02 -04:00
|
|
|
if (g_key_file_has_key(theme, "ui", "occupants.indent", NULL)) {
|
|
|
|
gint occupants_indent = g_key_file_get_integer(theme, "ui", "occupants.indent", NULL);
|
|
|
|
prefs_set_occupants_indent(occupants_indent);
|
|
|
|
}
|
|
|
|
|
2019-04-23 07:50:58 -04:00
|
|
|
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]);
|
|
|
|
g_free(ch);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
prefs_clear_occupants_header_char();
|
|
|
|
}
|
|
|
|
|
2014-11-19 18:58:55 -05:00
|
|
|
if (g_key_file_has_key(theme, "ui", "roster.size", NULL)) {
|
|
|
|
gint roster_size = g_key_file_get_integer(theme, "ui", "roster.size", NULL);
|
|
|
|
prefs_set_roster_size(roster_size);
|
|
|
|
}
|
2016-01-23 21:28:22 -05:00
|
|
|
|
2015-11-19 18:21:51 -05:00
|
|
|
if (g_key_file_has_key(theme, "ui", "roster.header.char", NULL)) {
|
|
|
|
gchar *ch = g_key_file_get_string(theme, "ui", "roster.header.char", NULL);
|
|
|
|
if (ch && strlen(ch) > 0) {
|
|
|
|
prefs_set_roster_header_char(ch[0]);
|
|
|
|
g_free(ch);
|
|
|
|
}
|
2015-11-22 12:45:38 -05:00
|
|
|
} else {
|
|
|
|
prefs_clear_roster_header_char();
|
2015-11-19 18:21:51 -05:00
|
|
|
}
|
2016-01-23 21:28:22 -05:00
|
|
|
|
2015-11-19 19:06:46 -05:00
|
|
|
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]);
|
|
|
|
g_free(ch);
|
2015-11-21 21:04:59 -05:00
|
|
|
}
|
2015-11-22 12:45:38 -05:00
|
|
|
} else {
|
|
|
|
prefs_clear_roster_contact_char();
|
2015-11-21 21:04:59 -05:00
|
|
|
}
|
2016-01-23 21:28:22 -05:00
|
|
|
|
2015-11-21 21:04:59 -05:00
|
|
|
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]);
|
|
|
|
g_free(ch);
|
2015-11-19 19:06:46 -05:00
|
|
|
}
|
2015-11-22 12:45:38 -05:00
|
|
|
} else {
|
|
|
|
prefs_clear_roster_resource_char();
|
2015-11-19 19:06:46 -05:00
|
|
|
}
|
2016-01-23 21:28:22 -05:00
|
|
|
|
|
|
|
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]);
|
|
|
|
g_free(ch);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
prefs_clear_roster_room_char();
|
|
|
|
}
|
|
|
|
|
2016-01-31 15:17:20 -05:00
|
|
|
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]);
|
|
|
|
g_free(ch);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
prefs_clear_roster_room_private_char();
|
|
|
|
}
|
|
|
|
|
2016-01-23 21:28:22 -05:00
|
|
|
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]);
|
|
|
|
g_free(ch);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
prefs_clear_roster_private_char();
|
|
|
|
}
|
|
|
|
|
2015-11-21 19:48:18 -05:00
|
|
|
if (g_key_file_has_key(theme, "ui", "roster.contact.indent", NULL)) {
|
|
|
|
gint contact_indent = g_key_file_get_integer(theme, "ui", "roster.contact.indent", NULL);
|
|
|
|
prefs_set_roster_contact_indent(contact_indent);
|
|
|
|
}
|
2016-01-23 21:28:22 -05:00
|
|
|
|
2015-11-21 19:48:18 -05:00
|
|
|
if (g_key_file_has_key(theme, "ui", "roster.resource.indent", NULL)) {
|
|
|
|
gint resource_indent = g_key_file_get_integer(theme, "ui", "roster.resource.indent", NULL);
|
|
|
|
prefs_set_roster_resource_indent(resource_indent);
|
|
|
|
}
|
2016-01-23 21:28:22 -05:00
|
|
|
|
2015-11-21 19:48:18 -05:00
|
|
|
if (g_key_file_has_key(theme, "ui", "roster.presence.indent", NULL)) {
|
|
|
|
gint presence_indent = g_key_file_get_integer(theme, "ui", "roster.presence.indent", NULL);
|
|
|
|
prefs_set_roster_presence_indent(presence_indent);
|
|
|
|
}
|
2014-11-19 18:58:55 -05:00
|
|
|
|
2015-08-25 20:36:41 -04:00
|
|
|
if (g_key_file_has_key(theme, "ui", "otr.char", NULL)) {
|
|
|
|
gchar *ch = g_key_file_get_string(theme, "ui", "otr.char", NULL);
|
|
|
|
if (ch && strlen(ch) > 0) {
|
|
|
|
prefs_set_otr_char(ch[0]);
|
|
|
|
g_free(ch);
|
|
|
|
}
|
|
|
|
}
|
2016-01-23 21:28:22 -05:00
|
|
|
|
2015-08-25 20:36:41 -04:00
|
|
|
if (g_key_file_has_key(theme, "ui", "pgp.char", NULL)) {
|
|
|
|
gchar *ch = g_key_file_get_string(theme, "ui", "pgp.char", NULL);
|
|
|
|
if (ch && strlen(ch) > 0) {
|
|
|
|
prefs_set_pgp_char(ch[0]);
|
|
|
|
g_free(ch);
|
|
|
|
}
|
|
|
|
}
|
2016-09-22 19:56:53 -04:00
|
|
|
|
2019-06-05 05:01:08 -04:00
|
|
|
if (g_key_file_has_key(theme, "ui", "omemo.char", NULL)) {
|
|
|
|
gchar *ch = g_key_file_get_string(theme, "ui", "omemo.char", NULL);
|
|
|
|
if (ch && strlen(ch) > 0) {
|
|
|
|
prefs_set_omemo_char(ch[0]);
|
|
|
|
g_free(ch);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-09-25 16:47:00 -04:00
|
|
|
if (g_key_file_has_key(theme, "ui", "titlebar.position", NULL) &&
|
|
|
|
g_key_file_has_key(theme, "ui", "mainwin.position", NULL) &&
|
|
|
|
g_key_file_has_key(theme, "ui", "statusbar.position", NULL) &&
|
|
|
|
g_key_file_has_key(theme, "ui", "inputwin.position", NULL)) {
|
|
|
|
int titlebar_pos = g_key_file_get_integer(theme, "ui", "titlebar.position", NULL);
|
|
|
|
int mainwin_pos = g_key_file_get_integer(theme, "ui", "mainwin.position", NULL);
|
|
|
|
int statusbar_pos = g_key_file_get_integer(theme, "ui", "statusbar.position", NULL);
|
|
|
|
int inputwin_pos = g_key_file_get_integer(theme, "ui", "inputwin.position", NULL);
|
|
|
|
ProfWinPlacement *placement = prefs_create_profwin_placement(titlebar_pos, mainwin_pos, statusbar_pos, inputwin_pos);
|
|
|
|
prefs_save_win_placement(placement);
|
|
|
|
prefs_free_win_placement(placement);
|
|
|
|
}
|
2014-11-19 18:58:55 -05:00
|
|
|
}
|
|
|
|
|
2014-04-08 18:52:53 -04:00
|
|
|
void
|
2015-10-25 18:23:38 -04:00
|
|
|
_theme_list_dir(const gchar *const dir, GSList **result)
|
2014-04-08 18:52:53 -04:00
|
|
|
{
|
|
|
|
GDir *themes = g_dir_open(dir, 0, NULL);
|
2015-05-04 17:33:55 -04:00
|
|
|
if (themes) {
|
2014-04-08 18:52:53 -04:00
|
|
|
const gchar *theme = g_dir_read_name(themes);
|
2015-05-04 17:33:55 -04:00
|
|
|
while (theme) {
|
2014-04-08 18:52:53 -04:00
|
|
|
*result = g_slist_append(*result, strdup(theme));
|
|
|
|
theme = g_dir_read_name(themes);
|
|
|
|
}
|
|
|
|
g_dir_close(themes);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-10-25 18:23:38 -04:00
|
|
|
static GString*
|
|
|
|
_theme_find(const char *const theme_name)
|
2014-04-08 18:52:53 -04:00
|
|
|
{
|
|
|
|
GString *path = NULL;
|
2016-07-24 16:35:12 -04:00
|
|
|
char *themes_dir = files_get_config_path(DIR_THEMES);
|
2014-04-08 18:52:53 -04:00
|
|
|
|
2015-05-04 17:33:55 -04:00
|
|
|
if (themes_dir) {
|
2014-04-08 18:52:53 -04:00
|
|
|
path = g_string_new(themes_dir);
|
2016-07-24 16:35:12 -04:00
|
|
|
free(themes_dir);
|
2014-04-08 18:52:53 -04:00
|
|
|
g_string_append(path, "/");
|
|
|
|
g_string_append(path, theme_name);
|
|
|
|
if (!g_file_test(path->str, G_FILE_TEST_EXISTS)) {
|
|
|
|
g_string_free(path, true);
|
|
|
|
path = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef THEMES_PATH
|
|
|
|
if (path == NULL) {
|
|
|
|
path = g_string_new(THEMES_PATH);
|
|
|
|
g_string_append(path, "/");
|
|
|
|
g_string_append(path, theme_name);
|
|
|
|
if (!g_file_test(path->str, G_FILE_TEST_EXISTS)) {
|
|
|
|
g_string_free(path, true);
|
|
|
|
path = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif /* THEMES_PATH */
|
|
|
|
|
|
|
|
return path;
|
2013-02-02 17:23:34 -05:00
|
|
|
}
|
2014-11-16 15:40:19 -05:00
|
|
|
|
2016-01-14 17:54:50 -05:00
|
|
|
theme_item_t
|
|
|
|
theme_roster_unread_presence_attrs(const char *const presence)
|
|
|
|
{
|
|
|
|
if (g_strcmp0(presence, "online") == 0) {
|
|
|
|
return THEME_ROSTER_ONLINE_UNREAD;
|
|
|
|
} else if (g_strcmp0(presence, "away") == 0) {
|
|
|
|
return THEME_ROSTER_AWAY_UNREAD;
|
|
|
|
} else if (g_strcmp0(presence, "chat") == 0) {
|
|
|
|
return THEME_ROSTER_CHAT_UNREAD;
|
|
|
|
} else if (g_strcmp0(presence, "dnd") == 0) {
|
|
|
|
return THEME_ROSTER_DND_UNREAD;
|
|
|
|
} else if (g_strcmp0(presence, "xa") == 0) {
|
|
|
|
return THEME_ROSTER_XA_UNREAD;
|
|
|
|
} else {
|
|
|
|
return THEME_ROSTER_OFFLINE_UNREAD;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
theme_item_t
|
|
|
|
theme_roster_active_presence_attrs(const char *const presence)
|
|
|
|
{
|
|
|
|
if (g_strcmp0(presence, "online") == 0) {
|
|
|
|
return THEME_ROSTER_ONLINE_ACTIVE;
|
|
|
|
} else if (g_strcmp0(presence, "away") == 0) {
|
|
|
|
return THEME_ROSTER_AWAY_ACTIVE;
|
|
|
|
} else if (g_strcmp0(presence, "chat") == 0) {
|
|
|
|
return THEME_ROSTER_CHAT_ACTIVE;
|
|
|
|
} else if (g_strcmp0(presence, "dnd") == 0) {
|
|
|
|
return THEME_ROSTER_DND_ACTIVE;
|
|
|
|
} else if (g_strcmp0(presence, "xa") == 0) {
|
|
|
|
return THEME_ROSTER_XA_ACTIVE;
|
|
|
|
} else {
|
|
|
|
return THEME_ROSTER_OFFLINE_ACTIVE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
theme_item_t
|
|
|
|
theme_roster_presence_attrs(const char *const presence)
|
|
|
|
{
|
|
|
|
if (g_strcmp0(presence, "online") == 0) {
|
|
|
|
return THEME_ROSTER_ONLINE;
|
|
|
|
} else if (g_strcmp0(presence, "away") == 0) {
|
|
|
|
return THEME_ROSTER_AWAY;
|
|
|
|
} else if (g_strcmp0(presence, "chat") == 0) {
|
|
|
|
return THEME_ROSTER_CHAT;
|
|
|
|
} else if (g_strcmp0(presence, "dnd") == 0) {
|
|
|
|
return THEME_ROSTER_DND;
|
|
|
|
} else if (g_strcmp0(presence, "xa") == 0) {
|
|
|
|
return THEME_ROSTER_XA;
|
|
|
|
} else {
|
|
|
|
return THEME_ROSTER_OFFLINE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-11-16 18:37:07 -05:00
|
|
|
theme_item_t
|
2015-10-25 18:23:38 -04:00
|
|
|
theme_main_presence_attrs(const char *const presence)
|
2014-11-16 18:37:07 -05:00
|
|
|
{
|
|
|
|
if (g_strcmp0(presence, "online") == 0) {
|
|
|
|
return THEME_ONLINE;
|
|
|
|
} else if (g_strcmp0(presence, "away") == 0) {
|
|
|
|
return THEME_AWAY;
|
|
|
|
} else if (g_strcmp0(presence, "chat") == 0) {
|
|
|
|
return THEME_CHAT;
|
|
|
|
} else if (g_strcmp0(presence, "dnd") == 0) {
|
|
|
|
return THEME_DND;
|
|
|
|
} else if (g_strcmp0(presence, "xa") == 0) {
|
|
|
|
return THEME_XA;
|
|
|
|
} else {
|
|
|
|
return THEME_OFFLINE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-01-09 22:11:05 -05:00
|
|
|
static void
|
|
|
|
_theme_prep_bgnd(char *setting, char *def, GString *lookup_str)
|
|
|
|
{
|
|
|
|
gchar *val = g_key_file_get_string(theme, "colours", setting, NULL);
|
|
|
|
if (!val) {
|
|
|
|
g_string_append(lookup_str, def);
|
|
|
|
} else {
|
|
|
|
if (g_str_has_prefix(val, "bold_")) {
|
|
|
|
g_string_append(lookup_str, &val[5]);
|
|
|
|
} else {
|
|
|
|
g_string_append(lookup_str, val);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
g_free(val);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2016-01-24 19:27:56 -05:00
|
|
|
_theme_prep_fgnd(char *setting, GString *lookup_str, gboolean *bold)
|
2016-01-09 22:11:05 -05:00
|
|
|
{
|
|
|
|
gchar *val = g_key_file_get_string(theme, "colours", setting, NULL);
|
|
|
|
if (!val) {
|
2016-01-24 19:27:56 -05:00
|
|
|
char *def = g_hash_table_lookup(defaults, setting);
|
2016-01-09 22:11:05 -05:00
|
|
|
g_string_append(lookup_str, def);
|
|
|
|
} else {
|
|
|
|
if (g_str_has_prefix(val, "bold_")) {
|
|
|
|
g_string_append(lookup_str, &val[5]);
|
|
|
|
*bold = TRUE;
|
|
|
|
} else {
|
|
|
|
g_string_append(lookup_str, val);
|
|
|
|
*bold = FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
g_free(val);
|
|
|
|
}
|
|
|
|
|
2016-01-20 21:00:12 -05:00
|
|
|
char*
|
|
|
|
theme_get_string(char *str)
|
|
|
|
{
|
2016-01-21 18:59:45 -05:00
|
|
|
char *res = g_key_file_get_string(theme, "colours", str, NULL);
|
|
|
|
if (!res) {
|
|
|
|
return strdup(g_hash_table_lookup(defaults, str));
|
|
|
|
} else {
|
|
|
|
return res;
|
|
|
|
}
|
2016-01-20 21:00:12 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
theme_free_string(char *str)
|
|
|
|
{
|
|
|
|
if (str) {
|
|
|
|
g_free(str);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-11-16 15:40:19 -05:00
|
|
|
int
|
|
|
|
theme_attrs(theme_item_t attrs)
|
|
|
|
{
|
|
|
|
int result = 0;
|
|
|
|
|
2016-01-09 22:11:05 -05:00
|
|
|
GString *lookup_str = g_string_new("");
|
|
|
|
gboolean bold = FALSE;
|
|
|
|
|
|
|
|
// get forground colour
|
2014-11-16 15:40:19 -05:00
|
|
|
switch (attrs) {
|
2016-01-24 19:27:56 -05:00
|
|
|
case THEME_TEXT: _theme_prep_fgnd("main.text", lookup_str, &bold); break;
|
2019-09-10 05:20:03 -04:00
|
|
|
case THEME_TEXT_HISTORY: _theme_prep_fgnd("main.text.history", lookup_str, &bold); break;
|
2016-01-24 19:27:56 -05:00
|
|
|
case THEME_TEXT_ME: _theme_prep_fgnd("main.text.me", lookup_str, &bold); break;
|
|
|
|
case THEME_TEXT_THEM: _theme_prep_fgnd("main.text.them", lookup_str, &bold); break;
|
|
|
|
case THEME_SPLASH: _theme_prep_fgnd("main.splash", lookup_str, &bold); break;
|
2016-10-29 11:27:32 -04:00
|
|
|
case THEME_HELP_HEADER: _theme_prep_fgnd("main.help.header", lookup_str, &bold); break;
|
2016-01-24 19:27:56 -05:00
|
|
|
case THEME_ERROR: _theme_prep_fgnd("error", lookup_str, &bold); break;
|
|
|
|
case THEME_INCOMING: _theme_prep_fgnd("incoming", lookup_str, &bold); break;
|
2016-02-10 16:38:28 -05:00
|
|
|
case THEME_MENTION: _theme_prep_fgnd("mention", lookup_str, &bold); break;
|
|
|
|
case THEME_TRIGGER: _theme_prep_fgnd("trigger", lookup_str, &bold); break;
|
2016-01-24 19:27:56 -05:00
|
|
|
case THEME_INPUT_TEXT: _theme_prep_fgnd("input.text", lookup_str, &bold); break;
|
|
|
|
case THEME_TIME: _theme_prep_fgnd("main.time", lookup_str, &bold); break;
|
|
|
|
case THEME_TITLE_TEXT: _theme_prep_fgnd("titlebar.text", lookup_str, &bold); break;
|
|
|
|
case THEME_TITLE_BRACKET: _theme_prep_fgnd("titlebar.brackets", lookup_str, &bold); break;
|
|
|
|
case THEME_TITLE_UNENCRYPTED: _theme_prep_fgnd("titlebar.unencrypted", lookup_str, &bold); break;
|
|
|
|
case THEME_TITLE_ENCRYPTED: _theme_prep_fgnd("titlebar.encrypted", lookup_str, &bold); break;
|
|
|
|
case THEME_TITLE_UNTRUSTED: _theme_prep_fgnd("titlebar.untrusted", lookup_str, &bold); break;
|
|
|
|
case THEME_TITLE_TRUSTED: _theme_prep_fgnd("titlebar.trusted", lookup_str, &bold); break;
|
|
|
|
case THEME_TITLE_ONLINE: _theme_prep_fgnd("titlebar.online", lookup_str, &bold); break;
|
|
|
|
case THEME_TITLE_OFFLINE: _theme_prep_fgnd("titlebar.offline", lookup_str, &bold); break;
|
|
|
|
case THEME_TITLE_AWAY: _theme_prep_fgnd("titlebar.away", lookup_str, &bold); break;
|
|
|
|
case THEME_TITLE_CHAT: _theme_prep_fgnd("titlebar.chat", lookup_str, &bold); break;
|
|
|
|
case THEME_TITLE_DND: _theme_prep_fgnd("titlebar.dnd", lookup_str, &bold); break;
|
|
|
|
case THEME_TITLE_XA: _theme_prep_fgnd("titlebar.xa", lookup_str, &bold); break;
|
|
|
|
case THEME_STATUS_TEXT: _theme_prep_fgnd("statusbar.text", lookup_str, &bold); break;
|
|
|
|
case THEME_STATUS_BRACKET: _theme_prep_fgnd("statusbar.brackets", lookup_str, &bold); break;
|
|
|
|
case THEME_STATUS_ACTIVE: _theme_prep_fgnd("statusbar.active", lookup_str, &bold); break;
|
2019-09-20 04:40:54 -04:00
|
|
|
case THEME_STATUS_CURRENT: _theme_prep_fgnd("statusbar.current", lookup_str, &bold); break;
|
2016-01-24 19:27:56 -05:00
|
|
|
case THEME_STATUS_NEW: _theme_prep_fgnd("statusbar.new", lookup_str, &bold); break;
|
2017-02-15 08:34:57 -05:00
|
|
|
case THEME_STATUS_TIME: _theme_prep_fgnd("statusbar.time", lookup_str, &bold); break;
|
2016-01-24 19:27:56 -05:00
|
|
|
case THEME_ME: _theme_prep_fgnd("me", lookup_str, &bold); break;
|
|
|
|
case THEME_THEM: _theme_prep_fgnd("them", lookup_str, &bold); break;
|
|
|
|
case THEME_RECEIPT_SENT: _theme_prep_fgnd("receipt.sent", lookup_str, &bold); break;
|
|
|
|
case THEME_ROOMINFO: _theme_prep_fgnd("roominfo", lookup_str, &bold); break;
|
|
|
|
case THEME_ROOMMENTION: _theme_prep_fgnd("roommention", lookup_str, &bold); break;
|
2016-02-10 18:03:23 -05:00
|
|
|
case THEME_ROOMMENTION_TERM: _theme_prep_fgnd("roommention.term", lookup_str, &bold); break;
|
2016-01-24 19:27:56 -05:00
|
|
|
case THEME_ROOMTRIGGER: _theme_prep_fgnd("roomtrigger", lookup_str, &bold); break;
|
2016-02-13 17:46:25 -05:00
|
|
|
case THEME_ROOMTRIGGER_TERM: _theme_prep_fgnd("roomtrigger.term", lookup_str, &bold); break;
|
2016-01-24 19:27:56 -05:00
|
|
|
case THEME_ONLINE: _theme_prep_fgnd("online", lookup_str, &bold); break;
|
|
|
|
case THEME_OFFLINE: _theme_prep_fgnd("offline", lookup_str, &bold); break;
|
|
|
|
case THEME_AWAY: _theme_prep_fgnd("away", lookup_str, &bold); break;
|
|
|
|
case THEME_CHAT: _theme_prep_fgnd("chat", lookup_str, &bold); break;
|
|
|
|
case THEME_DND: _theme_prep_fgnd("dnd", lookup_str, &bold); break;
|
|
|
|
case THEME_XA: _theme_prep_fgnd("xa", lookup_str, &bold); break;
|
|
|
|
case THEME_TYPING: _theme_prep_fgnd("typing", lookup_str, &bold); break;
|
|
|
|
case THEME_GONE: _theme_prep_fgnd("gone", lookup_str, &bold); break;
|
|
|
|
case THEME_SUBSCRIBED: _theme_prep_fgnd("subscribed", lookup_str, &bold); break;
|
|
|
|
case THEME_UNSUBSCRIBED: _theme_prep_fgnd("unsubscribed", lookup_str, &bold); break;
|
|
|
|
case THEME_OTR_STARTED_TRUSTED: _theme_prep_fgnd("otr.started.trusted", lookup_str, &bold); break;
|
|
|
|
case THEME_OTR_STARTED_UNTRUSTED: _theme_prep_fgnd("otr.started.untrusted", lookup_str, &bold); break;
|
|
|
|
case THEME_OTR_ENDED: _theme_prep_fgnd("otr.ended", lookup_str, &bold); break;
|
|
|
|
case THEME_OTR_TRUSTED: _theme_prep_fgnd("otr.trusted", lookup_str, &bold); break;
|
|
|
|
case THEME_OTR_UNTRUSTED: _theme_prep_fgnd("otr.untrusted", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_HEADER: _theme_prep_fgnd("roster.header", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_ONLINE: _theme_prep_fgnd("roster.online", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_OFFLINE: _theme_prep_fgnd("roster.offline", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_CHAT: _theme_prep_fgnd("roster.chat", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_AWAY: _theme_prep_fgnd("roster.away", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_DND: _theme_prep_fgnd("roster.dnd", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_XA: _theme_prep_fgnd("roster.xa", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_ONLINE_ACTIVE: _theme_prep_fgnd("roster.online.active", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_OFFLINE_ACTIVE: _theme_prep_fgnd("roster.offline.active", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_CHAT_ACTIVE: _theme_prep_fgnd("roster.chat.active", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_AWAY_ACTIVE: _theme_prep_fgnd("roster.away.active", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_DND_ACTIVE: _theme_prep_fgnd("roster.dnd.active", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_XA_ACTIVE: _theme_prep_fgnd("roster.xa.active", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_ONLINE_UNREAD: _theme_prep_fgnd("roster.online.unread", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_OFFLINE_UNREAD: _theme_prep_fgnd("roster.offline.unread", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_CHAT_UNREAD: _theme_prep_fgnd("roster.chat.unread", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_AWAY_UNREAD: _theme_prep_fgnd("roster.away.unread", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_DND_UNREAD: _theme_prep_fgnd("roster.dnd.unread", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_XA_UNREAD: _theme_prep_fgnd("roster.xa.unread", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_ROOM: _theme_prep_fgnd("roster.room", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_ROOM_UNREAD: _theme_prep_fgnd("roster.room.unread", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_ROOM_TRIGGER: _theme_prep_fgnd("roster.room.trigger", lookup_str, &bold); break;
|
|
|
|
case THEME_ROSTER_ROOM_MENTION: _theme_prep_fgnd("roster.room.mention", lookup_str, &bold); break;
|
|
|
|
case THEME_OCCUPANTS_HEADER: _theme_prep_fgnd("occupants.header", lookup_str, &bold); break;
|
2019-06-18 00:23:06 -04:00
|
|
|
case THEME_UNTRUSTED: _theme_prep_fgnd("untrusted", lookup_str, &bold); break;
|
2016-01-09 22:11:05 -05:00
|
|
|
case THEME_WHITE: g_string_append(lookup_str, "white"); bold = FALSE; break;
|
|
|
|
case THEME_WHITE_BOLD: g_string_append(lookup_str, "white"); bold = TRUE; break;
|
|
|
|
case THEME_GREEN: g_string_append(lookup_str, "green"); bold = FALSE; break;
|
|
|
|
case THEME_GREEN_BOLD: g_string_append(lookup_str, "green"); bold = TRUE; break;
|
|
|
|
case THEME_RED: g_string_append(lookup_str, "red"); bold = FALSE; break;
|
|
|
|
case THEME_RED_BOLD: g_string_append(lookup_str, "red"); bold = TRUE; break;
|
|
|
|
case THEME_YELLOW: g_string_append(lookup_str, "yellow"); bold = FALSE; break;
|
|
|
|
case THEME_YELLOW_BOLD: g_string_append(lookup_str, "yellow"); bold = TRUE; break;
|
|
|
|
case THEME_BLUE: g_string_append(lookup_str, "blue"); bold = FALSE; break;
|
|
|
|
case THEME_BLUE_BOLD: g_string_append(lookup_str, "blue"); bold = TRUE; break;
|
|
|
|
case THEME_CYAN: g_string_append(lookup_str, "cyan"); bold = FALSE; break;
|
|
|
|
case THEME_CYAN_BOLD: g_string_append(lookup_str, "cyan"); bold = TRUE; break;
|
|
|
|
case THEME_BLACK: g_string_append(lookup_str, "black"); bold = FALSE; break;
|
|
|
|
case THEME_BLACK_BOLD: g_string_append(lookup_str, "black"); bold = TRUE; break;
|
|
|
|
case THEME_MAGENTA: g_string_append(lookup_str, "magenta"); bold = FALSE; break;
|
|
|
|
case THEME_MAGENTA_BOLD: g_string_append(lookup_str, "magenta"); bold = TRUE; break;
|
|
|
|
default: g_string_append(lookup_str, "default"); bold = FALSE; break;
|
2014-11-16 15:40:19 -05:00
|
|
|
}
|
|
|
|
|
2016-01-09 22:11:05 -05:00
|
|
|
g_string_append(lookup_str, "_");
|
2014-11-16 16:56:19 -05:00
|
|
|
|
2016-01-09 22:11:05 -05:00
|
|
|
// append background str
|
|
|
|
switch (attrs) {
|
|
|
|
case THEME_TITLE_TEXT:
|
|
|
|
case THEME_TITLE_BRACKET:
|
|
|
|
case THEME_TITLE_UNENCRYPTED:
|
|
|
|
case THEME_TITLE_ENCRYPTED:
|
|
|
|
case THEME_TITLE_UNTRUSTED:
|
|
|
|
case THEME_TITLE_TRUSTED:
|
|
|
|
case THEME_TITLE_ONLINE:
|
|
|
|
case THEME_TITLE_OFFLINE:
|
|
|
|
case THEME_TITLE_AWAY:
|
|
|
|
case THEME_TITLE_CHAT:
|
|
|
|
case THEME_TITLE_DND:
|
|
|
|
case THEME_TITLE_XA:
|
|
|
|
_theme_prep_bgnd("titlebar", "blue", lookup_str);
|
|
|
|
break;
|
|
|
|
case THEME_STATUS_TEXT:
|
|
|
|
case THEME_STATUS_BRACKET:
|
|
|
|
case THEME_STATUS_ACTIVE:
|
2019-09-20 04:40:54 -04:00
|
|
|
case THEME_STATUS_CURRENT:
|
2016-01-09 22:11:05 -05:00
|
|
|
case THEME_STATUS_NEW:
|
2017-02-15 08:34:57 -05:00
|
|
|
case THEME_STATUS_TIME:
|
2016-01-09 22:11:05 -05:00
|
|
|
_theme_prep_bgnd("statusbar", "blue", lookup_str);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
_theme_prep_bgnd("bkgnd", "default", lookup_str);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
// lookup colour pair
|
2019-08-23 06:32:55 -04:00
|
|
|
result = color_pair_cache_get(lookup_str->str);
|
|
|
|
if (result < 0) {
|
2019-08-23 08:56:29 -04:00
|
|
|
log_error("Unable to load colour theme");
|
2019-08-23 07:46:14 -04:00
|
|
|
result = 0;
|
2019-08-23 06:32:55 -04:00
|
|
|
}
|
2016-01-09 22:11:05 -05:00
|
|
|
g_string_free(lookup_str, TRUE);
|
|
|
|
if (bold) {
|
|
|
|
return COLOR_PAIR(result) | A_BOLD;
|
|
|
|
} else {
|
|
|
|
return COLOR_PAIR(result);
|
2014-11-16 16:56:19 -05:00
|
|
|
}
|
2015-05-17 17:05:43 -04:00
|
|
|
}
|