Compare commits

...

1 Commits

Author SHA1 Message Date
Denis Konoplev
73ad96297b Win touch option 2020-10-09 15:21:30 +03:00
2 changed files with 23 additions and 3 deletions

View File

@@ -20,6 +20,11 @@ public class KeyEventProcessing {
public final static boolean useLatinNonAlphaNumKeycodes = "true".equals(
getProperty(useLatinNonAlphaNumKeycodesOption, "false"));
public final static String defaultTouchHandlingOption = "com.jetbrains.default.touchscreen.mode";
@Native
public final static boolean defaultTouchHandling = "true".equalsIgnoreCase(getProperty(defaultTouchHandlingOption, "false"));
private static String getProperty(String option, String dflt) {
return java.security.AccessController.doPrivileged(
(PrivilegedAction<String>) () -> System.getProperty(option, dflt)

View File

@@ -1400,6 +1400,17 @@ static BOOL IsMouseEventFromTouch()
{
return (::GetMessageExtraInfo() & MOUSEEVENTF_FROMTOUCH_MASK) == MOUSEEVENTF_FROMTOUCH;
}
static BOOL IsDefaultTouch()
{
JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
jclass cls = env->FindClass("sun/awt/event/KeyEventProcessing");
CHECK_NULL_RETURN(cls, FALSE);
jfieldID fieldID = env->GetStaticFieldID(cls, "defaultTouchHandling", "Z");
CHECK_NULL_RETURN(fieldID, FALSE);
return static_cast<BOOL>(env->GetStaticBooleanField(cls, fieldID));
}
/*
* Dispatch messages for this window class--general component
*/
@@ -1427,6 +1438,8 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
DWORD curPos = 0;
static const BOOL PROCESS_TOUCH_EVENTS = !IsDefaultTouch();
UINT switchMessage = message;
switch (switchMessage) {
case WM_AWT_GETDC:
@@ -1716,7 +1729,7 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
case WM_MOUSEHWHEEL:
case WM_AWT_MOUSEENTER:
case WM_AWT_MOUSEEXIT:
if (IsMouseEventFromTouch()) {
if (IsMouseEventFromTouch() && PROCESS_TOUCH_EVENTS) {
break;
}
curPos = ::GetMessagePos();
@@ -1796,8 +1809,10 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
}
break;
case WM_TOUCH:
WmTouch(wParam, lParam);
break;
if (PROCESS_TOUCH_EVENTS) {
WmTouch(wParam, lParam);
break;
}
case WM_SETCURSOR:
mr = mrDoDefault;
if (LOWORD(lParam) == HTCLIENT) {