--- old/modules/graphics/src/main/native-glass/win/GlassApplication.cpp 2014-05-07 09:36:36.279674900 -0700 +++ new/modules/graphics/src/main/native-glass/win/GlassApplication.cpp 2014-05-07 09:36:35.824648900 -0700 @@ -123,6 +123,18 @@ return szGlassToolkitWindow; } +jstring GetThemeName(JNIEnv* env) +{ + HIGHCONTRAST contrastInfo; + contrastInfo.cbSize = sizeof(HIGHCONTRAST); + SystemParametersInfo(SPI_GETHIGHCONTRAST, sizeof(HIGHCONTRAST), &contrastInfo, 0); + if (contrastInfo.dwFlags & HCF_HIGHCONTRASTON) { + size_t length = wcslen(contrastInfo.lpszDefaultScheme); + return env->NewString((jchar*)contrastInfo.lpszDefaultScheme, length); + } + return NULL; +} + LRESULT GlassApplication::WindowProc(UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { @@ -174,6 +186,13 @@ case WM_DISPLAYCHANGE: GlassScreen::HandleDisplayChange(); break; + case WM_THEMECHANGED: { + JNIEnv* env = GetEnv(); + jstring themeName = GetThemeName(env); + jboolean result = env->CallBooleanMethod(m_grefThis, javaIDs.Application.notifyThemeChangedMID, themeName); + if (CheckAndClearException(env)) return 1; + return !!result; + } } return ::DefWindowProc(GetHWND(), msg, wParam, lParam); } @@ -333,6 +352,11 @@ ASSERT(javaIDs.Application.reportExceptionMID); if (CheckAndClearException(env)) return; + javaIDs.Application.notifyThemeChangedMID = + env->GetMethodID(cls, "notifyThemeChanged", "(Ljava/lang/String;)Z"); + ASSERT(javaIDs.Application.notifyThemeChangedMID); + if (CheckAndClearException(env)) return; + //NOTE: substitute the cls cls = (jclass)env->FindClass("java/lang/Runnable"); if (CheckAndClearException(env)) return; @@ -426,6 +450,17 @@ } /* + * Class: com_sun_glass_ui_win_WinApplication + * Method: _getHighContrastTheme + * Signature: ()Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_com_sun_glass_ui_win_WinApplication__1getHighContrastTheme + (JNIEnv * env, jobject self) +{ + return GetThemeName(env); +} + +/* * Class: com_sun_glass_ui_win_WinApplication * Method: _leaveNestedEventLoopImpl * Signature: (Ljava/lang/Object;)V