mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-06 09:29:38 +01:00
JBR-2490 Add option to work with Surface Pen
(cherry picked from commit5acc7680a1) (cherry picked from commitb604023cef)
This commit is contained in:
@@ -18,4 +18,10 @@ public class TouchEvent {
|
||||
* in ms
|
||||
*/
|
||||
public static final long NO_UPDATE_TIMEOUT = 1000L;
|
||||
|
||||
public final static String defaultTouchHandlingOption = "com.jetbrains.default.touchscreen.mode";
|
||||
|
||||
@Native
|
||||
public final static boolean defaultTouchHandling = "true".equalsIgnoreCase(
|
||||
Util.getProperty(defaultTouchHandlingOption, "false"));
|
||||
}
|
||||
|
||||
@@ -1333,6 +1333,19 @@ static BOOL IsMouseEventFromTouch()
|
||||
{
|
||||
return (::GetMessageExtraInfo() & MOUSEEVENTF_FROMTOUCH_MASK) == MOUSEEVENTF_FROMTOUCH;
|
||||
}
|
||||
|
||||
// consider making general function
|
||||
// T getClassStaticField(cls, field, default_val)
|
||||
static BOOL IsDefaultTouch()
|
||||
{
|
||||
JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
|
||||
jclass cls = env->FindClass("sun/awt/event/TouchEvent");
|
||||
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
|
||||
*/
|
||||
@@ -1358,6 +1371,8 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||||
return (LRESULT)TRUE;
|
||||
}
|
||||
|
||||
static const BOOL PROCESS_TOUCH_EVENTS = !IsDefaultTouch();
|
||||
|
||||
DWORD curPos = 0;
|
||||
|
||||
UINT switchMessage = message;
|
||||
@@ -1641,7 +1656,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();
|
||||
@@ -1721,8 +1736,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) {
|
||||
|
||||
Reference in New Issue
Block a user