[gtk+] win32: Canonicalize theme-name before adding to hash table
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] win32: Canonicalize theme-name before adding to hash table
- Date: Mon, 15 Feb 2016 03:45:13 +0000 (UTC)
commit a1617c6d6d2e84abe6f6cc1c0df1ac38c144b550
Author: Benjamin Otte <otte gnome org>
Date: Sun Feb 14 04:51:37 2016 +0100
win32: Canonicalize theme-name before adding to hash table
This way, we get rid of du0plicates.
gtk/gtkwin32theme.c | 26 ++++++++++++++++----------
1 files changed, 16 insertions(+), 10 deletions(-)
---
diff --git a/gtk/gtkwin32theme.c b/gtk/gtkwin32theme.c
index 4f9452d..352e20a 100644
--- a/gtk/gtkwin32theme.c
+++ b/gtk/gtkwin32theme.c
@@ -66,7 +66,7 @@ typedef HRESULT (FAR PASCAL *GetThemePartSizeFunc) (HTHEME hTheme,
static GetThemeSysFontFunc get_theme_sys_font = NULL;
static GetThemeSysColorFunc get_theme_sys_color = NULL;
static GetThemeSysSizeFunc get_theme_sys_metric = NULL;
-static OpenThemeDataFunc open_theme_data = NULL;
+static OpenThemeDataFunc OpenThemeData = NULL;
static CloseThemeDataFunc CloseThemeData = NULL;
static DrawThemeBackgroundFunc draw_theme_background = NULL;
static EnableThemeDialogTextureFunc enable_theme_dialog_texture = NULL;
@@ -200,7 +200,7 @@ gtk_win32_theme_init (void)
if (is_app_themed)
{
is_theme_active = (IsThemeActiveFunc) GetProcAddress (uxtheme_dll, "IsThemeActive");
- open_theme_data = (OpenThemeDataFunc) GetProcAddress (uxtheme_dll, "OpenThemeData");
+ OpenThemeData = (OpenThemeDataFunc) GetProcAddress (uxtheme_dll, "OpenThemeData");
CloseThemeData = (CloseThemeDataFunc) GetProcAddress (uxtheme_dll, "CloseThemeData");
draw_theme_background = (DrawThemeBackgroundFunc) GetProcAddress (uxtheme_dll, "DrawThemeBackground");
enable_theme_dialog_texture = (EnableThemeDialogTextureFunc) GetProcAddress (uxtheme_dll,
"EnableThemeDialogTexture");
@@ -228,25 +228,29 @@ static HTHEME
gtk_win32_theme_get_htheme (GtkWin32Theme *theme)
{
guint16 *wclass;
- char *lower;
gtk_win32_theme_init ();
if (theme->htheme)
return theme->htheme;
- lower = g_ascii_strdown (theme->class_name, -1);
-
- wclass = g_utf8_to_utf16 (lower, -1, NULL, NULL, NULL);
- theme->htheme = open_theme_data (NULL, wclass);
+ wclass = g_utf8_to_utf16 (theme->class_name, -1, NULL, NULL, NULL);
+ theme->htheme = OpenThemeData (NULL, wclass);
g_free (wclass);
- g_free (lower);
return theme->htheme;
}
#endif /* G_OS_WIN32 */
+static char *
+canonicalize_class_name (const char *classname)
+{
+ /* Wine claims class names are case insensitive, so we convert them
+ here to avoid multiple theme objects referencing the same HTHEME. */
+ return g_ascii_strdown (classname, -1);
+}
+
static GtkWin32Theme *
gtk_win32_theme_lookup (const char *classname)
{
@@ -273,7 +277,7 @@ GtkWin32Theme *
gtk_win32_theme_parse (GtkCssParser *parser)
{
GtkWin32Theme *theme;
- char *class_name;
+ char *canonical_class_name, *class_name;
class_name = _gtk_css_parser_try_name (parser, TRUE);
if (class_name == NULL)
@@ -281,8 +285,10 @@ gtk_win32_theme_parse (GtkCssParser *parser)
_gtk_css_parser_error (parser, "Expected valid win32 theme name");
return NULL;
}
+ canonical_class_name = canonicalize_class_name (class_name);
- theme = gtk_win32_theme_lookup (class_name);
+ theme = gtk_win32_theme_lookup (canonical_class_name);
+ g_free (canonical_class_name);
g_free (class_name);
return theme;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]