Kaydet (Commit) a865cec5 authored tarafından Marc Garcia's avatar Marc Garcia Kaydeden (comit) Caolán McNamara

Related: fdo#54493 determine if a CJK/CTL keyboard is installed

Change-Id: If21a34c69f58612f8ec2eba1253f325f352962cd
üst 20cbceac
...@@ -98,6 +98,8 @@ class SVL_DLLPUBLIC SvtSystemLanguageOptions : public utl::ConfigItem ...@@ -98,6 +98,8 @@ class SVL_DLLPUBLIC SvtSystemLanguageOptions : public utl::ConfigItem
private: private:
OUString m_sWin16SystemLocale; OUString m_sWin16SystemLocale;
bool isKeyboardLayoutTypeInstalled(sal_Int16 scriptType);
public: public:
SvtSystemLanguageOptions(); SvtSystemLanguageOptions();
~SvtSystemLanguageOptions(); ~SvtSystemLanguageOptions();
...@@ -106,6 +108,9 @@ public: ...@@ -106,6 +108,9 @@ public:
virtual void Notify( const com::sun::star::uno::Sequence< OUString >& rPropertyNames ); virtual void Notify( const com::sun::star::uno::Sequence< OUString >& rPropertyNames );
LanguageType GetWin16SystemLanguage(); LanguageType GetWin16SystemLanguage();
bool isCTLKeyboardLayoutInstalled();
bool isCJKKeyboardLayoutInstalled();
}; };
#endif // _SVTOOLS_LANGUAGEOPTIONS_HXX #endif // _SVTOOLS_LANGUAGEOPTIONS_HXX
......
...@@ -28,6 +28,10 @@ ...@@ -28,6 +28,10 @@
#include <com/sun/star/i18n/ScriptType.hpp> #include <com/sun/star/i18n/ScriptType.hpp>
#include <unotools/syslocale.hxx> #include <unotools/syslocale.hxx>
#ifdef WNT
#include <windows.h>
#endif
using namespace ::com::sun::star; using namespace ::com::sun::star;
// global ---------------------------------------------------------------------- // global ----------------------------------------------------------------------
...@@ -205,4 +209,47 @@ LanguageType SvtSystemLanguageOptions::GetWin16SystemLanguage() ...@@ -205,4 +209,47 @@ LanguageType SvtSystemLanguageOptions::GetWin16SystemLanguage()
} }
bool SvtSystemLanguageOptions::isKeyboardLayoutTypeInstalled(sal_Int16 scriptType)
{
bool isInstalled = false;
#ifdef WNT
int nLayouts = GetKeyboardLayoutList(0, NULL);
if (nLayouts > 0)
{
HKL *lpList = (HKL*)LocalAlloc(LPTR, (nLayouts * sizeof(HKL)));
if (lpList)
{
nLayouts = GetKeyboardLayoutList(nLayouts, lpList);
for(int i = 0; i < nLayouts; ++i)
{
LCID lang = MAKELCID(((UINT)lpList[i] & 0xffffffff), SORT_DEFAULT);
if (MsLangId::getScriptType(lang) == scriptType)
{
isInstalled = true;
break;
}
}
LocalFree(lpList);
}
}
#else
(void)scriptType;
#endif
return isInstalled;
}
bool SvtSystemLanguageOptions::isCTLKeyboardLayoutInstalled()
{
return isKeyboardLayoutTypeInstalled(::com::sun::star::i18n::ScriptType::COMPLEX);
}
bool SvtSystemLanguageOptions::isCJKKeyboardLayoutInstalled()
{
return isKeyboardLayoutTypeInstalled(::com::sun::star::i18n::ScriptType::ASIAN);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
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