[Ttssh2-commit] [7434] IMEの状態設定/取得をメッセージを元に行うようにした

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2019年 2月 24日 (日) 02:46:16 JST


Revision: 7434
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7434
Author:   zmatsuo
Date:     2019-02-24 02:46:15 +0900 (Sun, 24 Feb 2019)
Log Message:
-----------
IMEの状態設定/取得をメッセージを元に行うようにした
CaretOn()#vtdisp.cの処理を軽くした

Modified Paths:
--------------
    trunk/teraterm/teraterm/ttime.c
    trunk/teraterm/teraterm/vtdisp.c
    trunk/teraterm/teraterm/vtdisp.h
    trunk/teraterm/teraterm/vtterm.c
    trunk/teraterm/teraterm/vtwin.cpp
    trunk/teraterm/teraterm/vtwin.h

-------------- next part --------------
Modified: trunk/teraterm/teraterm/ttime.c
===================================================================
--- trunk/teraterm/teraterm/ttime.c	2019-02-20 11:01:29 UTC (rev 7433)
+++ trunk/teraterm/teraterm/ttime.c	2019-02-23 17:46:15 UTC (rev 7434)
@@ -248,6 +248,7 @@
 	HIMC hIMC;
 	BOOL stat;
 
+	if (HIMEDLL==NULL) return FALSE;
 	hIMC = (*PImmGetContext)(HVTWin);
 	stat = (*PImmGetOpenStatus)(hIMC);
 	(*PImmReleaseContext)(HVTWin, hIMC);
@@ -259,6 +260,7 @@
 void SetIMEOpenStatus(BOOL stat) {
 	HIMC hIMC;
 
+	if (HIMEDLL==NULL) return;
 	hIMC = (*PImmGetContext)(HVTWin);
 	(*PImmSetOpenStatus)(hIMC, stat);
 	(*PImmReleaseContext)(HVTWin, hIMC);

Modified: trunk/teraterm/teraterm/vtdisp.c
===================================================================
--- trunk/teraterm/teraterm/vtdisp.c	2019-02-20 11:01:29 UTC (rev 7433)
+++ trunk/teraterm/teraterm/vtdisp.c	2019-02-23 17:46:15 UTC (rev 7434)
@@ -110,6 +110,7 @@
 // caret variables
 static int CaretStatus;
 static BOOL CaretEnabled = TRUE;
+BOOL IMEstat;		/* IME Status  TRUE=IME ON */
 
 // ---- device context and status flags
 static HDC VTDC = NULL; /* Device context for VT window */
@@ -2208,40 +2209,31 @@
 void CaretOn()
 // Turn on the cursor
 {
-	int CaretX, CaretY, H;
-	HIMC hImc;
-	HBITMAP color;
-	int ime_on;
-
 	if (ts.KillFocusCursor == 0 && !Active)
 		return;
 
-	/* IME\x82\xCCon/off\x8F\xF3\x91Ԃ\xF0\x8C\xA9\x82āA\x83J\x81[\x83\\x83\x8B\x82̐F\x82\xF0\x95ύX\x82\xB7\x82\xE9\x81B
-	 * WM_INPUTLANGCHANGE, WM_IME_NOTIFY \x82ł̓J\x81[\x83\\x83\x8B\x82̍ĕ`\x89\xE6\x82̂ݍs\x82\xA4\x81B
-	 * (2010.5.20 yutaka)
-	 */
-	hImc = ImmGetContext(HVTWin);
-	ime_on = ImmGetOpenStatus(hImc);
-	ImmReleaseContext(HVTWin, hImc);
-	if ((ts.WindowFlag & WF_IMECURSORCHANGE) != 0 && ime_on) {
-		color = (HBITMAP)1;
-	} else {
-		color = NULL;
-	}
+	if (! CaretEnabled) return;
 
-	CaretX = (CursorX-WinOrgX)*FontWidth;
-	CaretY = (CursorY-WinOrgY)*FontHeight;
+	if (Active) {
+		int CaretX, CaretY, H;
+		HBITMAP color;
 
-	if ((ts.Language==IdJapanese || ts.Language==IdKorean || ts.Language==IdUtf8) &&
-	    CanUseIME() && (ts.IMEInline>0))
-	{
-		/* set IME conversion window pos. & font */
-		SetConversionWindow(HVTWin,CaretX,CaretY);
-	}
+		/* IME\x82\xCCon/off\x8F\xF3\x91Ԃ\xF0\x8C\xA9\x82āA\x83J\x81[\x83\\x83\x8B\x82̐F\x82\xF0\x95ύX\x82\xB7\x82\xE9\x81B
+		 * WM_INPUTLANGCHANGE, WM_IME_NOTIFY \x82ł̓J\x81[\x83\\x83\x8B\x82̍ĕ`\x89\xE6\x82̂ݍs\x82\xA4\x81B
+		 * (2010.5.20 yutaka)
+		 */
+		if ((ts.WindowFlag & WF_IMECURSORCHANGE) == 0) {
+			color = 0;
+		} else {
+			if (IMEstat) {
+				color = (HBITMAP)1;
+			} else {
+				color = 0;
+			}
+		}
 
-	if (! CaretEnabled) return;
-
-	if (Active) {
+		CaretX = (CursorX-WinOrgX)*FontWidth;
+		CaretY = (CursorY-WinOrgY)*FontHeight;
 		if (ts.CursorShape!=IdVCur) {
 			if (ts.CursorShape==IdHCur) {
 				CaretY = CaretY+FontHeight-CurWidth;

Modified: trunk/teraterm/teraterm/vtdisp.h
===================================================================
--- trunk/teraterm/teraterm/vtdisp.h	2019-02-20 11:01:29 UTC (rev 7433)
+++ trunk/teraterm/teraterm/vtdisp.h	2019-02-23 17:46:15 UTC (rev 7434)
@@ -127,6 +127,8 @@
 extern int PageStart, BuffEnd;
 extern TCharAttr DefCharAttr;
 
+extern BOOL IMEstat;
+
 #define SCROLL_BOTTOM	1
 #define SCROLL_LINEDOWN	2
 #define SCROLL_LINEUP	3

Modified: trunk/teraterm/teraterm/vtterm.c
===================================================================
--- trunk/teraterm/teraterm/vtterm.c	2019-02-20 11:01:29 UTC (rev 7433)
+++ trunk/teraterm/teraterm/vtterm.c	2019-02-23 17:46:15 UTC (rev 7434)
@@ -197,16 +197,13 @@
 static int NewKeyId, NewKeyLen;
 
 /* Mouse Report */
-int MouseReportMode;
-int MouseReportExtMode;
-unsigned int DecLocatorFlag;
-int LastX, LastY;
-int ButtonStat;
-int FilterTop, FilterBottom, FilterLeft, FilterRight;
+static int MouseReportMode;
+static int MouseReportExtMode;
+static unsigned int DecLocatorFlag;
+static int LastX, LastY;
+static int ButtonStat;
+static int FilterTop, FilterBottom, FilterLeft, FilterRight;
 
-/* IME Status */
-BOOL IMEstat;
-
 /* Beep over-used */
 static DWORD BeepStartTime = 0;
 static DWORD BeepSuppressTime = 0;

Modified: trunk/teraterm/teraterm/vtwin.cpp
===================================================================
--- trunk/teraterm/teraterm/vtwin.cpp	2019-02-20 11:01:29 UTC (rev 7433)
+++ trunk/teraterm/teraterm/vtwin.cpp	2019-02-23 17:46:15 UTC (rev 7434)
@@ -159,6 +159,7 @@
 	ON_WM_TIMER()
 	ON_WM_VSCROLL()
 	ON_WM_DEVICECHANGE()
+	ON_MESSAGE(WM_IME_STARTCOMPOSITION,OnIMEStartComposition)
 	ON_MESSAGE(WM_IME_COMPOSITION,OnIMEComposition)
 	ON_MESSAGE(WM_INPUTLANGCHANGE,OnIMEInputChange)
 	ON_MESSAGE(WM_IME_NOTIFY,OnIMENotify)
@@ -3229,8 +3230,18 @@
 }
 //-->
 
-LONG CVTWindow::OnIMEComposition(UINT wParam, LONG lParam)
+LRESULT CVTWindow::OnIMEStartComposition(WPARAM wParam, LPARAM lParam)
 {
+	// \x88ʒu\x82\xF0\x92ʒm\x82\xB7\x82\xE9
+	int CaretX = (CursorX-WinOrgX)*FontWidth;
+	int CaretY = (CursorY-WinOrgY)*FontHeight;
+	SetConversionWindow(HVTWin,CaretX,CaretY);
+
+	return CFrameWnd::DefWindowProc(WM_IME_STARTCOMPOSITION,wParam,lParam);
+}
+
+LRESULT CVTWindow::OnIMEComposition(WPARAM wParam, LPARAM lParam)
+{
 	HGLOBAL hstr;
 	//LPSTR lpstr;
 	wchar_t *lpstr;
@@ -3297,6 +3308,15 @@
 LONG CVTWindow::OnIMENotify(UINT wParam, LONG lParam)
 {
 	if (wParam == IMN_SETOPENSTATUS) {
+		// IME\x82\xCCOn/Off\x82\xF0\x8E擾\x82\xB7\x82\xE9
+		IMEstat = GetIMEOpenStatus();
+
+		// \x8F\xF3\x91Ԃ\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9IME\x82̂\xBD\x82߂Ɉʒu\x82\xF0\x92ʒm\x82\xB7\x82\xE9
+		int CaretX = (CursorX-WinOrgX)*FontWidth;
+		int CaretY = (CursorY-WinOrgY)*FontHeight;
+		SetConversionWindow(HVTWin,CaretX,CaretY);
+
+		// \x95`\x89\xE6
 		ChangeCaret();
 	}
 

Modified: trunk/teraterm/teraterm/vtwin.h
===================================================================
--- trunk/teraterm/teraterm/vtwin.h	2019-02-20 11:01:29 UTC (rev 7433)
+++ trunk/teraterm/teraterm/vtwin.h	2019-02-23 17:46:15 UTC (rev 7434)
@@ -135,6 +135,7 @@
 	afx_msg LONG OnEnterSizeMove(UINT wParam, LONG lParam);
 	afx_msg LONG  OnExitSizeMove(UINT wParam, LONG lParam);
 //-->
+	afx_msg LRESULT OnIMEStartComposition(WPARAM wParam, LPARAM lParam);
 	afx_msg LONG OnIMEComposition(UINT wParam, LONG lParam);
 	afx_msg LONG OnIMEInputChange(UINT wParam, LONG lParam);
 	afx_msg LONG OnIMENotify(UINT wParam, LONG lParam);


Ttssh2-commit メーリングリストの案内
Back to archive index