win32: Handle size queries for all values

Fall back to GetSystemMetrics() whenever GetThemeSysSize() didn't work.
This commit is contained in:
Benjamin Otte 2016-02-19 09:01:43 +01:00
parent 63eb15b730
commit eda348d2b5

View File

@ -73,7 +73,7 @@ typedef HRESULT (FAR PASCAL *GetThemeBackgroundExtentFunc) (HTHEME hTheme,
static GetThemeSysFontFunc get_theme_sys_font = NULL; static GetThemeSysFontFunc get_theme_sys_font = NULL;
static GetThemeSysColorFunc GetThemeSysColor = NULL; static GetThemeSysColorFunc GetThemeSysColor = NULL;
static GetThemeSysSizeFunc get_theme_sys_metric = NULL; static GetThemeSysSizeFunc GetThemeSysSize = NULL;
static OpenThemeDataFunc OpenThemeData = NULL; static OpenThemeDataFunc OpenThemeData = NULL;
static CloseThemeDataFunc CloseThemeData = NULL; static CloseThemeDataFunc CloseThemeData = NULL;
static DrawThemeBackgroundFunc draw_theme_background = NULL; static DrawThemeBackgroundFunc draw_theme_background = NULL;
@ -215,7 +215,7 @@ gtk_win32_theme_init (void)
enable_theme_dialog_texture = (EnableThemeDialogTextureFunc) GetProcAddress (uxtheme_dll, "EnableThemeDialogTexture"); enable_theme_dialog_texture = (EnableThemeDialogTextureFunc) GetProcAddress (uxtheme_dll, "EnableThemeDialogTexture");
get_theme_sys_font = (GetThemeSysFontFunc) GetProcAddress (uxtheme_dll, "GetThemeSysFont"); get_theme_sys_font = (GetThemeSysFontFunc) GetProcAddress (uxtheme_dll, "GetThemeSysFont");
GetThemeSysColor = (GetThemeSysColorFunc) GetProcAddress (uxtheme_dll, "GetThemeSysColor"); GetThemeSysColor = (GetThemeSysColorFunc) GetProcAddress (uxtheme_dll, "GetThemeSysColor");
get_theme_sys_metric = (GetThemeSysSizeFunc) GetProcAddress (uxtheme_dll, "GetThemeSysSize"); GetThemeSysSize = (GetThemeSysSizeFunc) GetProcAddress (uxtheme_dll, "GetThemeSysSize");
is_theme_partially_transparent = (IsThemeBackgroundPartiallyTransparentFunc) GetProcAddress (uxtheme_dll, "IsThemeBackgroundPartiallyTransparent"); is_theme_partially_transparent = (IsThemeBackgroundPartiallyTransparentFunc) GetProcAddress (uxtheme_dll, "IsThemeBackgroundPartiallyTransparent");
draw_theme_parent_background = (DrawThemeParentBackgroundFunc) GetProcAddress (uxtheme_dll, "DrawThemeParentBackground"); draw_theme_parent_background = (DrawThemeParentBackgroundFunc) GetProcAddress (uxtheme_dll, "DrawThemeParentBackground");
GetThemePartSize = (GetThemePartSizeFunc) GetProcAddress (uxtheme_dll, "GetThemePartSize"); GetThemePartSize = (GetThemePartSizeFunc) GetProcAddress (uxtheme_dll, "GetThemePartSize");
@ -480,15 +480,20 @@ int
gtk_win32_theme_get_size (GtkWin32Theme *theme, gtk_win32_theme_get_size (GtkWin32Theme *theme,
int id) int id)
{ {
int size;
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
if (use_xp_theme && get_theme_sys_metric != NULL) if (use_xp_theme && GetThemeSysSize != NULL)
{ {
HTHEME htheme = gtk_win32_theme_get_htheme (theme); HTHEME htheme = gtk_win32_theme_get_htheme (theme);
/* If htheme is NULL it will just return the GetSystemMetrics value */ /* If htheme is NULL it will just return the GetSystemMetrics value */
return get_theme_sys_metric (htheme, id); size = GetThemeSysSize (htheme, id);
/* fall through on invalid parameter */
if (GetLastError () == 0)
return size;
} }
else
return GetSystemMetrics (id); return GetSystemMetrics (id);
#else #else
return -1; return -1;