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:
Giovanni Campagna 2011-06-02 17:05:08 +02:00
parent 0c98fe8546
commit 2674d96e54
3 changed files with 36 additions and 3 deletions

View File

@ -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);
} }

View File

@ -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,

View File

@ -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