aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornyamatongwe <unknown>2008-07-27 08:17:23 +0000
committernyamatongwe <unknown>2008-07-27 08:17:23 +0000
commit5846f322feaf16de1e146530769ffd42f752f057 (patch)
treebd3759d875fdd15341bbd0d4ec325c164b814b55
parent74bf9b9fc6186ad580d333823fb0bfb9db43f083 (diff)
downloadscintilla-mirror-5846f322feaf16de1e146530769ffd42f752f057.tar.gz
Property to set interpratation of keys to always use Unicode.
-rw-r--r--doc/ScintillaDoc.html8
-rw-r--r--include/Scintilla.h2
-rw-r--r--include/Scintilla.iface6
-rw-r--r--win32/ScintillaWin.cxx12
4 files changed, 27 insertions, 1 deletions
diff --git a/doc/ScintillaDoc.html b/doc/ScintillaDoc.html
index cb4728e06..ee4e1670d 100644
--- a/doc/ScintillaDoc.html
+++ b/doc/ScintillaDoc.html
@@ -2431,6 +2431,8 @@ struct TextToFind {
<a class="message" href="#SCI_GETTWOPHASEDRAW">SCI_GETTWOPHASEDRAW</a><br />
<a class="message" href="#SCI_SETCODEPAGE">SCI_SETCODEPAGE(int codePage)</a><br />
<a class="message" href="#SCI_GETCODEPAGE">SCI_GETCODEPAGE</a><br />
+ <a class="message" href="#SCI_SETKEYSUNICODE">SCI_SETKEYSUNICODE(bool keysUnicode)</a><br />
+ <a class="message" href="#SCI_GETKEYSUNICODE">SCI_GETKEYSUNICODE</a><br />
<a class="message" href="#SCI_SETWORDCHARS">SCI_SETWORDCHARS(&lt;unused&gt;, const char
*chars)</a><br />
<a class="message" href="#SCI_SETWHITESPACECHARS">SCI_SETWHITESPACECHARS(&lt;unused&gt;, const char
@@ -2527,6 +2529,12 @@ struct TextToFind {
<p>Setting <code>codePage</code> to a non-zero value that is not <code>SC_CP_UTF8</code> is
operating system dependent.</p>
+ <p><b id="SCI_SETKEYSUNICODE">SCI_SETKEYSUNICODE(bool keysUnicode)</b><br />
+ <b id="SCI_GETKEYSUNICODE">SCI_GETKEYSUNICODE</b><br />
+ On Windows, character keys are normally handled differently depending on whether Scintilla is a wide
+ or narrow character window with character messages treated as Unicode when wide and as 8 bit otherwise.
+ Set this property to always treat as Unicode. This option is needed for Delphi.</p>
+
<p><b id="SCI_SETWORDCHARS">SCI_SETWORDCHARS(&lt;unused&gt;, const char *chars)</b><br />
Scintilla has several functions that operate on words, which are defined to be contiguous
sequences of characters from a particular set of characters. This message defines which
diff --git a/include/Scintilla.h b/include/Scintilla.h
index b1e6e3504..7dca10ae4 100644
--- a/include/Scintilla.h
+++ b/include/Scintilla.h
@@ -669,6 +669,8 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_GETPOSITIONCACHE 2515
#define SCI_COPYALLOWLINE 2519
#define SCI_GETCHARACTERPOINTER 2520
+#define SCI_SETKEYSUNICODE 2521
+#define SCI_GETKEYSUNICODE 2522
#define SCI_STARTRECORD 3001
#define SCI_STOPRECORD 3002
#define SCI_SETLEXER 4001
diff --git a/include/Scintilla.iface b/include/Scintilla.iface
index 949452efb..c8759e591 100644
--- a/include/Scintilla.iface
+++ b/include/Scintilla.iface
@@ -1804,6 +1804,12 @@ fun void CopyAllowLine=2519(,)
# characters in the document.
get int GetCharacterPointer=2520(,)
+# Always interpret keyboard input as Unicode
+set void SetKeysUnicode=2521(bool keysUnicode,)
+
+# Are keys always interpreted as Unicode?
+get bool GetKeysUnicode=2522(,)
+
# Start notifying the container of all key presses and commands.
fun void StartRecord=3001(,)
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index b06683a9b..b4c5a825f 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -283,6 +283,7 @@ private:
HBITMAP sysCaretBitmap;
int sysCaretWidth;
int sysCaretHeight;
+ bool keysAlwaysUnicode;
};
HINSTANCE ScintillaWin::hInstance = 0;
@@ -320,6 +321,8 @@ ScintillaWin::ScintillaWin(HWND hwnd) {
sysCaretWidth = 0;
sysCaretHeight = 0;
+ keysAlwaysUnicode = false;
+
Initialise();
}
@@ -763,7 +766,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
case WM_CHAR:
if (((wParam >= 128) || !iscntrl(wParam)) || !lastKeyDownConsumed) {
- if (::IsWindowUnicode(MainHWND())) {
+ if (::IsWindowUnicode(MainHWND()) || keysAlwaysUnicode) {
wchar_t wcs[2] = {wParam, 0};
if (IsUnicodeMode()) {
// For a wide character version of the window:
@@ -1011,6 +1014,13 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
::SetFocus(MainHWND());
break;
+ case SCI_SETKEYSUNICODE:
+ keysAlwaysUnicode = wParam != 0;
+ break;
+
+ case SCI_GETKEYSUNICODE:
+ return keysAlwaysUnicode;
+
#ifdef SCI_LEXER
case SCI_LOADLEXERLIBRARY:
LexerManager::GetInstance()->Load(reinterpret_cast<const char*>(lParam));