fix stringshare usage in xsettings (wtf), ensure that config theme name, when set, is stringshared

SVN revision: 74376
This commit is contained in:
Mike Blumenkrantz 2012-07-25 09:13:45 +00:00
parent 62dc4cf2b2
commit f45c212c42
1 changed files with 24 additions and 24 deletions

View File

@ -51,10 +51,10 @@ static Eina_Bool running = EINA_FALSE;
static Eio_File *eio_op = NULL;
static Eina_Bool setting = EINA_FALSE;
static Eina_Bool reset = EINA_FALSE;
static const char _setting_icon_theme_name[] = "Net/IconThemeName";
static const char _setting_theme_name[] = "Net/ThemeName";
static const char _setting_font_name[] = "Gtk/FontName";
static const char _setting_xft_dpi[] = "Xft/DPI";
static const char *_setting_icon_theme_name = NULL;
static const char *_setting_theme_name = NULL;
static const char *_setting_font_name = NULL;
static const char *_setting_xft_dpi = NULL;
static const char *_setting_theme = NULL;
static void _e_xsettings_done_cb(void *data, Eio_File *handler, const Eina_Stat *stat);
@ -169,9 +169,6 @@ _e_xsettings_string_set(const char *name, const char *value)
Eina_List *l;
if (!name) return;
if (name == _setting_theme_name)
e_config->xsettings.net_theme_name_detected = value;
name = eina_stringshare_add(name);
EINA_LIST_FOREACH(settings, l, s)
{
@ -181,29 +178,27 @@ _e_xsettings_string_set(const char *name, const char *value)
if (!value)
{
if (!s) return;
DBG("remove %s\n", name);
eina_stringshare_del(name);
eina_stringshare_del(s->name);
DBG("remove %s", name);
eina_stringshare_del(s->s.value);
settings = eina_list_remove(settings, s);
E_FREE(s);
if (name == _setting_theme_name)
e_config->xsettings.net_theme_name_detected = value;
return;
}
if (s)
if (!s)
{
DBG("update %s %s\n", name, value);
eina_stringshare_del(name);
eina_stringshare_replace(&s->s.value, value);
}
else
{
DBG("add %s %s\n", name, value);
DBG("add %s %s", name, value);
s = E_NEW(Setting, 1);
s->type = SETTING_TYPE_STRING;
s->name = name;
s->s.value = eina_stringshare_add(value);
settings = eina_list_append(settings, s);
}
else
DBG("update %s %s", name, value);
eina_stringshare_replace(&s->s.value, value);
if (name == _setting_theme_name)
e_config->xsettings.net_theme_name_detected = s->s.value;
/* type + pad + name-len + last-change-serial + str_len */
s->length = 12;
@ -220,7 +215,6 @@ _e_xsettings_int_set(const char *name, int value, Eina_Bool set)
Eina_List *l;
if (!name) return;
name = eina_stringshare_add(name);
EINA_LIST_FOREACH(settings, l, s)
{
@ -231,8 +225,6 @@ _e_xsettings_int_set(const char *name, int value, Eina_Bool set)
{
if (!s) return;
DBG("remove %s\n", name);
eina_stringshare_del(name);
eina_stringshare_del(s->name);
settings = eina_list_remove(settings, s);
E_FREE(s);
return;
@ -240,7 +232,6 @@ _e_xsettings_int_set(const char *name, int value, Eina_Bool set)
if (s)
{
DBG("update %s %d\n", name, value);
eina_stringshare_del(name);
s->i.value = value;
}
else
@ -573,7 +564,6 @@ _e_xsettings_stop(void)
EINA_LIST_FREE(settings, s)
{
if (s->name) eina_stringshare_del(s->name);
if (s->s.value) eina_stringshare_del(s->s.value);
E_FREE(s);
}
@ -593,6 +583,11 @@ e_xsettings_init(void)
if (e_config->xsettings.enabled)
_e_xsettings_start();
_setting_icon_theme_name = eina_stringshare_add("Net/IconThemeName");
_setting_theme_name = eina_stringshare_add("Net/ThemeName");
_setting_font_name = eina_stringshare_add("Gtk/FontName");
_setting_xft_dpi = eina_stringshare_add("Xft/DPI");
return 1;
}
@ -604,6 +599,11 @@ e_xsettings_shutdown(void)
eio_op = NULL;
setting = EINA_FALSE;
eina_stringshare_replace(&_setting_icon_theme_name, NULL);
eina_stringshare_replace(&_setting_theme_name, NULL);
eina_stringshare_replace(&_setting_font_name, NULL);
eina_stringshare_replace(&_setting_xft_dpi, NULL);
return 1;
}