mirror of
https://github.com/reactos/reactos.git
synced 2025-06-07 18:30:37 +00:00
input: Overwrite font substitutes settings on lang change
This commit is contained in:
parent
7bd33ac4df
commit
3dbd44fde1
25 changed files with 189 additions and 5 deletions
|
@ -2,11 +2,129 @@
|
||||||
* PROJECT: input.dll
|
* PROJECT: input.dll
|
||||||
* FILE: dll/cpl/input/input_list.c
|
* FILE: dll/cpl/input/input_list.c
|
||||||
* PURPOSE: input.dll
|
* PURPOSE: input.dll
|
||||||
* PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
|
* PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
|
||||||
|
* Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "input_list.h"
|
#include "input_list.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
PWCHAR FontName;
|
||||||
|
PWCHAR SubFontName;
|
||||||
|
} MUI_SUBFONT;
|
||||||
|
|
||||||
|
#include "../../../base/setup/usetup/muifonts.h"
|
||||||
|
|
||||||
|
BOOL UpdateRegistryForFontSubstitutes(MUI_SUBFONT *pSubstitutes)
|
||||||
|
{
|
||||||
|
DWORD cbData;
|
||||||
|
HKEY hKey;
|
||||||
|
static const WCHAR pszKey[] =
|
||||||
|
L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes";
|
||||||
|
|
||||||
|
hKey = NULL;
|
||||||
|
RegOpenKeyExW(HKEY_LOCAL_MACHINE, pszKey, 0, KEY_ALL_ACCESS, &hKey);
|
||||||
|
if (hKey == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* Overwrite only */
|
||||||
|
for (; pSubstitutes->FontName; ++pSubstitutes)
|
||||||
|
{
|
||||||
|
cbData = (lstrlenW(pSubstitutes->SubFontName) + 1) * sizeof(WCHAR);
|
||||||
|
RegSetValueExW(hKey, pSubstitutes->FontName, 0,
|
||||||
|
REG_SZ, (LPBYTE)pSubstitutes->SubFontName, cbData);
|
||||||
|
}
|
||||||
|
|
||||||
|
RegCloseKey(hKey);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
InputList_SetFontSubstitutes(LCID dwLocaleId)
|
||||||
|
{
|
||||||
|
MUI_SUBFONT *pSubstitutes;
|
||||||
|
WORD wLangID, wPrimaryLangID, wSubLangID;
|
||||||
|
|
||||||
|
wLangID = LANGIDFROMLCID(dwLocaleId);
|
||||||
|
wPrimaryLangID = PRIMARYLANGID(wLangID);
|
||||||
|
wSubLangID = SUBLANGID(wLangID);
|
||||||
|
|
||||||
|
/* FIXME: Add more if necessary */
|
||||||
|
switch (wPrimaryLangID)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
pSubstitutes = LatinFonts;
|
||||||
|
break;
|
||||||
|
case LANG_AZERI:
|
||||||
|
case LANG_BELARUSIAN:
|
||||||
|
case LANG_BULGARIAN:
|
||||||
|
case LANG_KAZAK:
|
||||||
|
case LANG_RUSSIAN:
|
||||||
|
case LANG_SERBIAN:
|
||||||
|
case LANG_TATAR:
|
||||||
|
case LANG_UKRAINIAN:
|
||||||
|
case LANG_UZBEK:
|
||||||
|
pSubstitutes = CyrillicFonts;
|
||||||
|
break;
|
||||||
|
case LANG_GREEK:
|
||||||
|
pSubstitutes = GreekFonts;
|
||||||
|
break;
|
||||||
|
case LANG_HEBREW:
|
||||||
|
pSubstitutes = HebrewFonts;
|
||||||
|
break;
|
||||||
|
case LANG_CHINESE:
|
||||||
|
switch (wSubLangID)
|
||||||
|
{
|
||||||
|
case SUBLANG_CHINESE_SIMPLIFIED:
|
||||||
|
case SUBLANG_CHINESE_SINGAPORE:
|
||||||
|
case SUBLANG_CHINESE_MACAU:
|
||||||
|
pSubstitutes = ChineseSimplifiedFonts;
|
||||||
|
break;
|
||||||
|
case SUBLANG_CHINESE_TRADITIONAL:
|
||||||
|
case SUBLANG_CHINESE_HONGKONG:
|
||||||
|
pSubstitutes = ChineseTraditionalFonts;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pSubstitutes = NULL;
|
||||||
|
DebugBreak();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LANG_JAPANESE:
|
||||||
|
pSubstitutes = JapaneseFonts;
|
||||||
|
break;
|
||||||
|
case LANG_KOREAN:
|
||||||
|
pSubstitutes = KoreanFonts;
|
||||||
|
break;
|
||||||
|
case LANG_ARABIC:
|
||||||
|
case LANG_ARMENIAN:
|
||||||
|
case LANG_BENGALI:
|
||||||
|
case LANG_FARSI:
|
||||||
|
case LANG_GEORGIAN:
|
||||||
|
case LANG_GUJARATI:
|
||||||
|
case LANG_HINDI:
|
||||||
|
case LANG_KONKANI:
|
||||||
|
case LANG_MARATHI:
|
||||||
|
case LANG_PUNJABI:
|
||||||
|
case LANG_SANSKRIT:
|
||||||
|
case LANG_TAMIL:
|
||||||
|
case LANG_TELUGU:
|
||||||
|
case LANG_THAI:
|
||||||
|
case LANG_URDU:
|
||||||
|
case LANG_VIETNAMESE:
|
||||||
|
pSubstitutes = UnicodeFonts;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pSubstitutes)
|
||||||
|
{
|
||||||
|
UpdateRegistryForFontSubstitutes(pSubstitutes);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static INPUT_LIST_NODE *_InputList = NULL;
|
static INPUT_LIST_NODE *_InputList = NULL;
|
||||||
|
|
||||||
|
@ -216,11 +334,12 @@ InputList_AddInputMethodToUserRegistry(DWORD dwIndex, INPUT_LIST_NODE *pNode)
|
||||||
/*
|
/*
|
||||||
* Writes any changes in input methods to the registry
|
* Writes any changes in input methods to the registry
|
||||||
*/
|
*/
|
||||||
VOID
|
BOOL
|
||||||
InputList_Process(VOID)
|
InputList_Process(VOID)
|
||||||
{
|
{
|
||||||
INPUT_LIST_NODE *pCurrent;
|
INPUT_LIST_NODE *pCurrent;
|
||||||
DWORD dwIndex;
|
DWORD dwIndex;
|
||||||
|
BOOL bRet = FALSE;
|
||||||
|
|
||||||
/* Process deleted and edited input methods */
|
/* Process deleted and edited input methods */
|
||||||
for (pCurrent = _InputList; pCurrent != NULL; pCurrent = pCurrent->pNext)
|
for (pCurrent = _InputList; pCurrent != NULL; pCurrent = pCurrent->pNext)
|
||||||
|
@ -246,6 +365,7 @@ InputList_Process(VOID)
|
||||||
{
|
{
|
||||||
if (pCurrent->wFlags & INPUT_LIST_NODE_FLAG_DEFAULT)
|
if (pCurrent->wFlags & INPUT_LIST_NODE_FLAG_DEFAULT)
|
||||||
{
|
{
|
||||||
|
bRet = InputList_SetFontSubstitutes(pCurrent->pLocale->dwId);
|
||||||
InputList_AddInputMethodToUserRegistry(1, pCurrent);
|
InputList_AddInputMethodToUserRegistry(1, pCurrent);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -279,6 +399,8 @@ InputList_Process(VOID)
|
||||||
|
|
||||||
dwIndex++;
|
dwIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return bRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ typedef struct _INPUT_LIST_NODE
|
||||||
VOID
|
VOID
|
||||||
InputList_Create(VOID);
|
InputList_Create(VOID);
|
||||||
|
|
||||||
VOID
|
BOOL
|
||||||
InputList_Process(VOID);
|
InputList_Process(VOID);
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
|
|
|
@ -106,6 +106,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "Ляв Alt+Shift"
|
IDS_LEFT_ALT_SHIFT "Ляв Alt+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "Превключване на езиците за въвеждане"
|
IDS_SWITCH_BET_INLANG "Превключване на езиците за въвеждане"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -111,6 +111,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "Levý Alt+Shift"
|
IDS_LEFT_ALT_SHIFT "Levý Alt+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "Přepnout mezi vstupními jazyky"
|
IDS_SWITCH_BET_INLANG "Přepnout mezi vstupními jazyky"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -106,6 +106,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Strg+Umschalt"
|
IDS_CTRL_SHIFT "Strg+Umschalt"
|
||||||
IDS_LEFT_ALT_SHIFT "Alt links+Umschalt"
|
IDS_LEFT_ALT_SHIFT "Alt links+Umschalt"
|
||||||
IDS_SWITCH_BET_INLANG "Zwischen Eingabesprachen umschalten"
|
IDS_SWITCH_BET_INLANG "Zwischen Eingabesprachen umschalten"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -106,6 +106,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "Left Alt+Shift"
|
IDS_LEFT_ALT_SHIFT "Left Alt+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "Switch between input languages"
|
IDS_SWITCH_BET_INLANG "Switch between input languages"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -106,6 +106,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "Left Alt+Shift"
|
IDS_LEFT_ALT_SHIFT "Left Alt+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "Switch between input languages"
|
IDS_SWITCH_BET_INLANG "Switch between input languages"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -108,6 +108,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Mayús"
|
IDS_CTRL_SHIFT "Ctrl+Mayús"
|
||||||
IDS_LEFT_ALT_SHIFT "Alt Izq+Mayús"
|
IDS_LEFT_ALT_SHIFT "Alt Izq+Mayús"
|
||||||
IDS_SWITCH_BET_INLANG "Cambiar entre los idiomas de entrada"
|
IDS_SWITCH_BET_INLANG "Cambiar entre los idiomas de entrada"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -106,6 +106,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Maj"
|
IDS_CTRL_SHIFT "Ctrl+Maj"
|
||||||
IDS_LEFT_ALT_SHIFT "Alt Gauche+Maj"
|
IDS_LEFT_ALT_SHIFT "Alt Gauche+Maj"
|
||||||
IDS_SWITCH_BET_INLANG "Changer les langues de saisie"
|
IDS_SWITCH_BET_INLANG "Changer les langues de saisie"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
/* FIXME : À améliorer/compléter */
|
/* FIXME : À améliorer/compléter */
|
||||||
|
|
|
@ -108,6 +108,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "Left Alt+Shift"
|
IDS_LEFT_ALT_SHIFT "Left Alt+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "החלף בין שפות כתיבה"
|
IDS_SWITCH_BET_INLANG "החלף בין שפות כתיבה"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -106,6 +106,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "Alt sinistro+Shift"
|
IDS_LEFT_ALT_SHIFT "Alt sinistro+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "Cambia lingua di digitazione"
|
IDS_SWITCH_BET_INLANG "Cambia lingua di digitazione"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -106,6 +106,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "左Alt+Shift"
|
IDS_LEFT_ALT_SHIFT "左Alt+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "入力言語の切り替え"
|
IDS_SWITCH_BET_INLANG "入力言語の切り替え"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -106,6 +106,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "Venstre Alt+Shift"
|
IDS_LEFT_ALT_SHIFT "Venstre Alt+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "Bytt mellom inndataspråk"
|
IDS_SWITCH_BET_INLANG "Bytt mellom inndataspråk"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -114,6 +114,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "Lewy Alt+Shift"
|
IDS_LEFT_ALT_SHIFT "Lewy Alt+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "Przełącza pomiędzy układami klawiatury"
|
IDS_SWITCH_BET_INLANG "Przełącza pomiędzy układami klawiatury"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -106,6 +106,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "CTRL+SHIFT"
|
IDS_CTRL_SHIFT "CTRL+SHIFT"
|
||||||
IDS_LEFT_ALT_SHIFT "ALT esquerdo+SHIFT"
|
IDS_LEFT_ALT_SHIFT "ALT esquerdo+SHIFT"
|
||||||
IDS_SWITCH_BET_INLANG "Alternar entre idiomas de entrada"
|
IDS_SWITCH_BET_INLANG "Alternar entre idiomas de entrada"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -108,6 +108,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "«Ctrl» + «Shift»"
|
IDS_CTRL_SHIFT "«Ctrl» + «Shift»"
|
||||||
IDS_LEFT_ALT_SHIFT "«Alt» (stâng) + «Shift»"
|
IDS_LEFT_ALT_SHIFT "«Alt» (stâng) + «Shift»"
|
||||||
IDS_SWITCH_BET_INLANG "Comutarea între limbile de intrare"
|
IDS_SWITCH_BET_INLANG "Comutarea între limbile de intrare"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -106,6 +106,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "Alt слева+Shift"
|
IDS_LEFT_ALT_SHIFT "Alt слева+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "Переключение между языками ввода"
|
IDS_SWITCH_BET_INLANG "Переключение между языками ввода"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -111,6 +111,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "Ľavý Alt+Shift"
|
IDS_LEFT_ALT_SHIFT "Ľavý Alt+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "Switch between input languages"
|
IDS_SWITCH_BET_INLANG "Switch between input languages"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -110,6 +110,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "Left Alt+Shift"
|
IDS_LEFT_ALT_SHIFT "Left Alt+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "Ndërro ndër gjuhët hyrese"
|
IDS_SWITCH_BET_INLANG "Ndërro ndër gjuhët hyrese"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -108,6 +108,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Denetim + Üst Damga"
|
IDS_CTRL_SHIFT "Denetim + Üst Damga"
|
||||||
IDS_LEFT_ALT_SHIFT "Sol Seçenek + Üst Damga"
|
IDS_LEFT_ALT_SHIFT "Sol Seçenek + Üst Damga"
|
||||||
IDS_SWITCH_BET_INLANG "Giriş dilleri arasında geçiş yap."
|
IDS_SWITCH_BET_INLANG "Giriş dilleri arasında geçiş yap."
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -114,6 +114,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "Alt зліва+Shift"
|
IDS_LEFT_ALT_SHIFT "Alt зліва+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "Перемикання мов вводу"
|
IDS_SWITCH_BET_INLANG "Перемикання мов вводу"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -108,6 +108,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "左 Alt+Shift"
|
IDS_LEFT_ALT_SHIFT "左 Alt+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "在输入语言间切换"
|
IDS_SWITCH_BET_INLANG "在输入语言间切换"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -108,6 +108,7 @@ BEGIN
|
||||||
IDS_CTRL_SHIFT "Ctrl+Shift"
|
IDS_CTRL_SHIFT "Ctrl+Shift"
|
||||||
IDS_LEFT_ALT_SHIFT "左 Alt+Shift"
|
IDS_LEFT_ALT_SHIFT "左 Alt+Shift"
|
||||||
IDS_SWITCH_BET_INLANG "在輸入語言間切換"
|
IDS_SWITCH_BET_INLANG "在輸入語言間切換"
|
||||||
|
IDS_REBOOT_NOW, "Reboot now?"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
|
|
|
@ -57,6 +57,7 @@
|
||||||
#define IDS_LEFT_ALT_SHIFT 15
|
#define IDS_LEFT_ALT_SHIFT 15
|
||||||
#define IDS_SWITCH_BET_INLANG 16
|
#define IDS_SWITCH_BET_INLANG 16
|
||||||
#define IDC_TURNOFFTEXTSVCS_CB 17
|
#define IDC_TURNOFFTEXTSVCS_CB 17
|
||||||
|
#define IDS_REBOOT_NOW 18
|
||||||
|
|
||||||
/* Layouts */
|
/* Layouts */
|
||||||
#define IDS_US_LAYOUT 5000
|
#define IDS_US_LAYOUT 5000
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
* PROJECT: input.dll
|
* PROJECT: input.dll
|
||||||
* FILE: dll/cpl/input/settings_page.c
|
* FILE: dll/cpl/input/settings_page.c
|
||||||
* PURPOSE: input.dll
|
* PURPOSE: input.dll
|
||||||
* PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
|
* PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
|
||||||
|
* Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
|
@ -357,6 +358,32 @@ OnCommandSettingsPage(HWND hwndDlg, WPARAM wParam)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL EnableProcessPrivileges(LPCWSTR lpPrivilegeName, BOOL bEnable)
|
||||||
|
{
|
||||||
|
HANDLE hToken;
|
||||||
|
LUID luid;
|
||||||
|
TOKEN_PRIVILEGES tokenPrivileges;
|
||||||
|
BOOL Ret;
|
||||||
|
|
||||||
|
Ret = OpenProcessToken(GetCurrentProcess(),
|
||||||
|
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
|
||||||
|
&hToken);
|
||||||
|
if (!Ret)
|
||||||
|
return Ret; // failure
|
||||||
|
|
||||||
|
Ret = LookupPrivilegeValueW(NULL, lpPrivilegeName, &luid);
|
||||||
|
if (Ret)
|
||||||
|
{
|
||||||
|
tokenPrivileges.PrivilegeCount = 1;
|
||||||
|
tokenPrivileges.Privileges[0].Luid = luid;
|
||||||
|
tokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
|
||||||
|
|
||||||
|
Ret = AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseHandle(hToken);
|
||||||
|
return Ret;
|
||||||
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
OnNotifySettingsPage(HWND hwndDlg, LPARAM lParam)
|
OnNotifySettingsPage(HWND hwndDlg, LPARAM lParam)
|
||||||
|
@ -405,7 +432,20 @@ OnNotifySettingsPage(HWND hwndDlg, LPARAM lParam)
|
||||||
case PSN_APPLY:
|
case PSN_APPLY:
|
||||||
{
|
{
|
||||||
/* Write Input Methods list to registry */
|
/* Write Input Methods list to registry */
|
||||||
InputList_Process();
|
if (InputList_Process())
|
||||||
|
{
|
||||||
|
/* Needs reboot */
|
||||||
|
WCHAR szNeedsReboot[128], szLanguage[64];
|
||||||
|
LoadStringW(hApplet, IDS_REBOOT_NOW, szNeedsReboot, _countof(szNeedsReboot));
|
||||||
|
LoadStringW(hApplet, IDS_LANGUAGE, szLanguage, _countof(szLanguage));
|
||||||
|
|
||||||
|
if (MessageBoxW(hwndDlg, szNeedsReboot, szLanguage,
|
||||||
|
MB_ICONINFORMATION | MB_YESNOCANCEL) == IDYES)
|
||||||
|
{
|
||||||
|
EnableProcessPrivileges(SE_SHUTDOWN_NAME, TRUE);
|
||||||
|
ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue