Commit dc825592 authored by cinamod's avatar cinamod

xp theme definitions for platforms NOT winxp, catch system settings changes,...

xp theme definitions for platforms NOT winxp, catch system settings changes, disable theme switching
parent 906746ae
2003-10-06 Dom Lachowicz <cinamod@hotmail.com>
* src/wimp_style_main.c: Catch system settings changes, disable theme and color changes as they're too experimental
* src/wimp_style.[ch]: Export some things, make them accept 0 args
* src/xp_theme_dfns.h: New file. WinXP's UXTHEME constants, for building on platforms without them
* src/xp_theme.c: Should be able to build on Win32 != [WinXP,2k3] now
2003-10-03 Dom Lachowicz <cinamod@hotmail.com>
* src/wimp_style.c wimp_style_main.c: Refactor how we're doing styles. Much faster, lower memory consumption
......
......@@ -221,49 +221,49 @@ sys_font_to_pango_font (SystemFontType type, char * buf)
static void
setup_menu_settings (void)
{
int menu_delay;
gboolean win95 = FALSE;
GtkSettings * settings;
OSVERSIONINFOEX osvi;
settings = gtk_settings_get_default ();
if (!settings)
return;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if (!GetVersionEx ( (OSVERSIONINFO *) &osvi))
win95 = TRUE; /* assume the worst */
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
win95 = TRUE;
if (!win95) {
if (SystemParametersInfo (SPI_GETMENUSHOWDELAY, 0, &menu_delay, 0)) {
GObjectClass * klazz = G_OBJECT_GET_CLASS(G_OBJECT(settings));
if (klazz) {
if (g_object_class_find_property (klazz, "gtk-menu-bar-popup-delay")) {
g_object_set (G_OBJECT (settings), "gtk-menu-bar-popup-delay",
0, NULL);
}
if (g_object_class_find_property (klazz, "gtk-menu-popup-delay")) {
g_object_set (G_OBJECT (settings), "gtk-menu-popup-delay",
menu_delay, NULL);
}
if (g_object_class_find_property (klazz, "gtk-menu-popdown-delay")) {
g_object_set (G_OBJECT (settings), "gtk-menu-popdown-delay",
menu_delay, NULL);
}
}
}
int menu_delay;
gboolean win95 = FALSE;
GtkSettings * settings;
OSVERSIONINFOEX osvi;
settings = gtk_settings_get_default ();
if (!settings)
return;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if (!GetVersionEx ( (OSVERSIONINFO *) &osvi))
win95 = TRUE; /* assume the worst */
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
win95 = TRUE;
if (!win95) {
if (SystemParametersInfo (SPI_GETMENUSHOWDELAY, 0, &menu_delay, 0)) {
GObjectClass * klazz = G_OBJECT_GET_CLASS(G_OBJECT(settings));
if (klazz) {
if (g_object_class_find_property (klazz, "gtk-menu-bar-popup-delay")) {
g_object_set (G_OBJECT (settings), "gtk-menu-bar-popup-delay",
0, NULL);
}
if (g_object_class_find_property (klazz, "gtk-menu-popup-delay")) {
g_object_set (G_OBJECT (settings), "gtk-menu-popup-delay",
menu_delay, NULL);
}
if (g_object_class_find_property (klazz, "gtk-menu-popdown-delay")) {
g_object_set (G_OBJECT (settings), "gtk-menu-popdown-delay",
menu_delay, NULL);
}
}
}
}
}
static void
void
setup_system_settings (void)
{
GtkSettings * settings;
......@@ -1593,4 +1593,4 @@ wimp_init (void)
xp_theme_init ();
setup_system_settings ();
setup_wimp_rc_style ();
}
\ No newline at end of file
}
......@@ -49,5 +49,6 @@ struct _WimpStyleClass
void wimp_style_register_type (GTypeModule *module);
void wimp_style_init (void);
void setup_system_settings (void);
#endif /* WIMP_TYPE_STYLE */
......@@ -31,6 +31,12 @@
#define WM_THEMECHANGED 0x031A /* winxp only */
#endif
/* TODO - look into whether we need to handle these:
*
* WM_STYLECHANGED
* WM_PALETTECHANGED
*/
static GdkFilterReturn
global_filter_func (void *xevent,
GdkEvent *event,
......@@ -40,15 +46,25 @@ global_filter_func (void *xevent,
switch (msg->message)
{
#if ENABLE_THEME_CHANGING
/* catch theme changes */
case WM_THEMECHANGED:
case WM_SYSCOLORCHANGE:
xp_theme_exit();
wimp_init ();
gtk_rc_reparse_all_for_settings (gtk_settings_get_default(), TRUE);
return GDK_FILTER_REMOVE;
default:
return GDK_FILTER_CONTINUE;
}
case WM_SYSCOLORCHANGE:
xp_theme_exit();
wimp_init ();
/* force all gtkwidgets to redraw */
gtk_rc_reparse_all_for_settings (gtk_settings_get_default(), TRUE);
return GDK_FILTER_REMOVE;
#endif
case WM_SETTINGCHANGE:
setup_system_settings (); /* catch cursor blink, etc... changes */
return GDK_FILTER_REMOVE;
default:
return GDK_FILTER_CONTINUE;
}
}
G_MODULE_EXPORT void
......@@ -64,7 +80,7 @@ theme_init (GTypeModule *module)
G_MODULE_EXPORT void
theme_exit (void)
{
gdk_window_remove_filter (NULL, global_filter_func, NULL);
gdk_window_remove_filter (NULL, global_filter_func, NULL);
}
G_MODULE_EXPORT GtkRcStyle *
......@@ -85,4 +101,3 @@ g_module_check_init (GModule *module)
GTK_MINOR_VERSION,
GTK_MICRO_VERSION - GTK_INTERFACE_AGE);
}
......@@ -29,6 +29,11 @@
#include <stdio.h>
/* MS defines this when it includes its schema definitions */
#ifndef TMSCHEMA_H
#include "xp_theme_dfns.h"
#endif
static const LPCWSTR class_descriptors[] =
{
L"Scrollbar",
......@@ -112,7 +117,7 @@ static DrawThemeBackgroundFunc draw_theme_background_func = NULL;
static EnableThemeDialogTextureFunc enable_theme_dialog_texture_func = NULL;
void
xp_theme_init()
xp_theme_init(void)
{
if (uxtheme_dll)
return;
......@@ -128,7 +133,7 @@ xp_theme_init()
}
void
xp_theme_exit()
xp_theme_exit(void)
{
int i;
......
......@@ -85,8 +85,8 @@ typedef enum
XP_THEME_ELEMENT__SIZEOF
} XpThemeElement;
void xp_theme_init();
void xp_theme_exit();
void xp_theme_init(void);
void xp_theme_exit(void);
gboolean xp_theme_draw(GdkWindow *win, XpThemeElement element, GtkStyle *style,
int x, int y, int width, int height, GtkStateType state_type,
GdkRectangle *area);
......
/* Wimp "Windows Impersonator" Engine
*
* Copyright (C) 2003 Dom Lachowicz <cinamod@hotmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/*
* These are the real values of these UXTHEME constants, provided so that we can
* compile/link on Win32 platforms that aren't WinXP, and also build against
* MinGW 1.0/1.1, which also doesn't have these things defined in its header files
*/
#ifndef XP_THEME_DFNS_H
#define XP_THEME_DFNS_H
#define BP_PUSHBUTTON 1
#define BP_CHECKBOX 3
#define HP_HEADERITEM 1
#define CP_DROPDOWNBUTTON 1
#define TABP_TABITEM 1
#define TABP_TABITEMLEFTEDGE 2
#define TABP_PANE 9
#define TABP_BODY 10
#define SBP_ARROWBTN 1
#define SBP_THUMBBTNHORZ 2
#define SBP_THUMBBTNVERT 3
#define SBP_LOWERTRACKHORZ 5
#define SBP_LOWERTRACKVERT 6
#define SBP_GRIPPERHORZ 8
#define SBP_GRIPPERVERT 9
#define EP_EDITTEXT 1
#define SPNP_UP 1
#define SPNP_DOWN 2
#define BP_RADIOBUTTON 2
#define TVP_GLYPH 2
#define PP_BAR 1
#define PP_BARVERT 2
#define PP_CHUNK 3
#define PP_CHUNKVERT 4
#define TTP_STANDARD 1
#define RP_GRIPPER 1
#define RP_GRIPPERVERT 2
#define RP_BAND 3
#define RP_CHEVRON 4
#define TP_BUTTON 1
#define TTSS_NORMAL 1
#define CHEVS_NORMAL 1
#define CHEVS_HOT 2
#define CHEVS_PRESSED 3
#define TIS_NORMAL 1
#define TIS_HOT 2
#define TIS_SELECTED 3
#define TIS_DISABLED 4
#define ETS_NORMAL 1
#define ETS_FOCUSED 5
#define ETS_READONLY 6
#define SCRBS_NORMAL 1
#define SCRBS_HOT 2
#define SCRBS_PRESSED 3
#define SCRBS_DISABLED 4
#define ABS_UPNORMAL 1
#define ABS_UPHOT 2
#define ABS_UPPRESSED 3
#define ABS_UPDISABLED 4
#define ABS_DOWNNORMAL 5
#define ABS_DOWNHOT 6
#define ABS_DOWNDISABLED 8
#define ABS_LEFTNORMAL 9
#define ABS_LEFTHOT 10
#define ABS_LEFTPRESSED 11
#define ABS_LEFTDISABLED 12
#define ABS_RIGHTNORMAL 13
#define ABS_RIGHTHOT 14
#define ABS_RIGHTPRESSED 15
#define ABS_RIGHTDISABLED 16
#define CBS_UNCHECKEDNORMAL 1
#define CBS_UNCHECKEDHOT 2
#define CBS_UNCHECKEDPRESSED 3
#define CBS_UNCHECKEDDISABLED 4
#define CBS_CHECKEDNORMAL 5
#define CBS_CHECKEDHOT 6
#define CBS_CHECKEDPRESSED 7
#define CBS_CHECKEDDISABLED 8
#define PBS_NORMAL 1
#define PBS_HOT 2
#define PBS_PRESSED 3
#define PBS_DISABLED 4
#define PBS_DEFAULTED 5
#define DNS_NORMAL 1
#define DNS_HOT 2
#define DNS_PRESSED 3
#define DNS_DISABLED 4
#define UPS_NORMAL 1
#define UPS_HOT 2
#define UPS_PRESSED 3
#define UPS_DISABLED 4
#define GLPS_OPENED 1
#define GLPS_CLOSED 2
#if UXTHEME_HAS_LINES
#error unknown/undocumented uxtheme values
/* #define GP_LINEHORZ */
/* #define GP_LINEVERT */
/* #define LHS_RAISED */
/* #define LHS_SUNKEN */
/* #define LHS_FLAT */
/* #define LVS_RAISED */
/* #define LVS_SUNKEN */
/* #define LHS_FLAT */
#endif /* UXTHEME_HAS_LINES */
#endif /* XP_THEME_DFNS_H */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment