StTheme: retrive the list of custom stylesheets and use it in loadTheme()
Using the list of stylesheets loaded with st_theme_load_stylesheet(), one can build an StTheme that is completely identical to the previous one, except for one property (application-stylesheet). This allows rt and the user-theme extension to work while respecting the theming of other extensions. https://bugzilla.gnome.org/show_bug.cgi?id=650971
This commit is contained in:
parent
0c98fe8546
commit
2674d96e54
@ -393,12 +393,21 @@ function setThemeStylesheet(cssStylesheet)
|
|||||||
*/
|
*/
|
||||||
function loadTheme() {
|
function loadTheme() {
|
||||||
let themeContext = St.ThemeContext.get_for_stage (global.stage);
|
let themeContext = St.ThemeContext.get_for_stage (global.stage);
|
||||||
|
let previousTheme = themeContext.get_theme();
|
||||||
|
|
||||||
let cssStylesheet = _defaultCssStylesheet;
|
let cssStylesheet = _defaultCssStylesheet;
|
||||||
if (_cssStylesheet != null)
|
if (_cssStylesheet != null)
|
||||||
cssStylesheet = _cssStylesheet;
|
cssStylesheet = _cssStylesheet;
|
||||||
|
|
||||||
let theme = new St.Theme ({ application_stylesheet: cssStylesheet });
|
let theme = new St.Theme ({ application_stylesheet: cssStylesheet });
|
||||||
|
|
||||||
|
if (previousTheme) {
|
||||||
|
let customStylesheets = previousTheme.get_custom_stylesheets();
|
||||||
|
|
||||||
|
for (let i = 0; i < customStylesheets.length; i++)
|
||||||
|
theme.load_stylesheet(customStylesheets[i]);
|
||||||
|
}
|
||||||
|
|
||||||
themeContext.set_theme (theme);
|
themeContext.set_theme (theme);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,6 +256,30 @@ st_theme_unload_stylesheet (StTheme *theme,
|
|||||||
cr_stylesheet_unref (stylesheet);
|
cr_stylesheet_unref (stylesheet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* st_theme_get_custom_stylesheets:
|
||||||
|
* @theme: an #StTheme
|
||||||
|
*
|
||||||
|
* Returns: (transfer full) (element-type utf8): the list of stylesheet filenames
|
||||||
|
* that were loaded with st_theme_load_stylesheet()
|
||||||
|
*/
|
||||||
|
GSList*
|
||||||
|
st_theme_get_custom_stylesheets (StTheme *theme)
|
||||||
|
{
|
||||||
|
GSList *result = NULL;
|
||||||
|
GSList *iter;
|
||||||
|
|
||||||
|
for (iter = theme->custom_stylesheets; iter; iter = iter->next)
|
||||||
|
{
|
||||||
|
CRStyleSheet *stylesheet = iter->data;
|
||||||
|
gchar *filename = g_hash_table_lookup (theme->filenames_by_stylesheet, stylesheet);
|
||||||
|
|
||||||
|
result = g_slist_prepend (result, g_strdup (filename));
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static GObject *
|
static GObject *
|
||||||
st_theme_constructor (GType type,
|
st_theme_constructor (GType type,
|
||||||
guint n_construct_properties,
|
guint n_construct_properties,
|
||||||
|
@ -51,9 +51,9 @@ StTheme *st_theme_new (const char *application_stylesheet,
|
|||||||
const char *theme_stylesheet,
|
const char *theme_stylesheet,
|
||||||
const char *default_stylesheet);
|
const char *default_stylesheet);
|
||||||
|
|
||||||
gboolean st_theme_load_stylesheet (StTheme *theme, const char *path, GError **error);
|
gboolean st_theme_load_stylesheet (StTheme *theme, const char *path, GError **error);
|
||||||
|
void st_theme_unload_stylesheet (StTheme *theme, const char *path);
|
||||||
void st_theme_unload_stylesheet (StTheme *theme, const char *path);
|
GSList *st_theme_get_custom_stylesheets (StTheme *theme);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user