|
|
@@ -1,5 +1,5 @@ |
|
|
/* |
|
|
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. |
|
|
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved. |
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
|
* |
|
|
* This code is free software; you can redistribute it and/or modify it |
|
@@ -282,7 +282,7 @@ void AwtDragSource::_DoDragDrop(void* param) { |
|
|
|
|
|
call_dSCddfinished(env, peer, res == DRAGDROP_S_DROP && effects != DROPEFFECT_NONE, |
|
|
convertDROPEFFECTToActions(effects), |
|
|
dragSource->m_dragPoint.x, dragSource->m_dragPoint.y); |
|
|
dragSource->m_dragPoint); |
|
|
|
|
|
env->DeleteLocalRef(peer); |
|
|
|
|
@@ -649,8 +649,7 @@ HRESULT __stdcall AwtDragSource::QueryContinueDrag(BOOL fEscapeKeyPressed, DWOR |
|
|
|
|
|
if ( (dragPoint.x != m_dragPoint.x || dragPoint.y != m_dragPoint.y) && |
|
|
m_lastmods == modifiers) {//cannot move before cursor change |
|
|
call_dSCmouseMoved(env, m_peer, |
|
|
m_actions, modifiers, dragPoint.x, dragPoint.y); |
|
|
call_dSCmouseMoved(env, m_peer, m_actions, modifiers, dragPoint); |
|
|
JNU_CHECK_EXCEPTION_RETURN(env, E_UNEXPECTED); |
|
|
m_dragPoint = dragPoint; |
|
|
} |
|
@@ -662,8 +661,7 @@ HRESULT __stdcall AwtDragSource::QueryContinueDrag(BOOL fEscapeKeyPressed, DWOR |
|
|
} else if ((modifiers & JAVA_BUTTON_MASK) != (m_initmods & JAVA_BUTTON_MASK)) { |
|
|
return DRAGDROP_S_CANCEL; |
|
|
} else if (m_lastmods != modifiers) { |
|
|
call_dSCchanged(env, m_peer, |
|
|
m_actions, modifiers, dragPoint.x, dragPoint.y); |
|
|
call_dSCchanged(env, m_peer, m_actions, modifiers, dragPoint); |
|
|
m_bRestoreNodropCustomCursor = TRUE; |
|
|
} |
|
|
|
|
@@ -726,13 +724,13 @@ HRESULT __stdcall AwtDragSource::GiveFeedback(DWORD dwEffect) { |
|
|
if (invalid) { |
|
|
// Don't call dragExit if dragEnter and dragOver haven't been called. |
|
|
if (!m_enterpending) { |
|
|
call_dSCexit(env, m_peer, curs.x, curs.y); |
|
|
call_dSCexit(env, m_peer, curs); |
|
|
} |
|
|
m_droptarget = (HWND)NULL; |
|
|
m_enterpending = TRUE; |
|
|
} else if (m_droptarget != NULL) { |
|
|
(*(m_enterpending ? call_dSCenter : call_dSCmotion)) |
|
|
(env, m_peer, m_actions, modifiers, curs.x, curs.y); |
|
|
(env, m_peer, m_actions, modifiers, curs); |
|
|
|
|
|
m_enterpending = FALSE; |
|
|
} |
|
@@ -1176,14 +1174,26 @@ HRESULT __stdcall AwtDragSource::GetProcessId(FORMATETC __RPC_FAR *pFormatEtc, S |
|
|
return S_OK; |
|
|
} |
|
|
|
|
|
static void ScaleDown(POINT &pt) { |
|
|
HMONITOR monitor = MonitorFromPoint(pt, MONITOR_DEFAULTTOPRIMARY); |
|
|
int screen = AwtWin32GraphicsDevice::GetScreenFromHMONITOR(monitor); |
|
|
Devices::InstanceAccess devices; |
|
|
AwtWin32GraphicsDevice *device = devices->GetDevice(screen); |
|
|
if (device) { |
|
|
pt.x = device->ScaleDownX(pt.x); |
|
|
pt.y = device->ScaleDownY(pt.y); |
|
|
} |
|
|
} |
|
|
|
|
|
DECLARE_JAVA_CLASS(dSCClazz, "sun/awt/windows/WDragSourceContextPeer") |
|
|
|
|
|
void |
|
|
AwtDragSource::call_dSCenter(JNIEnv* env, jobject self, jint targetActions, |
|
|
jint modifiers, jint x, jint y) { |
|
|
jint modifiers, POINT pt) { |
|
|
ScaleDown(pt); |
|
|
DECLARE_VOID_JAVA_METHOD(dSCenter, dSCClazz, "dragEnter", "(IIII)V"); |
|
|
DASSERT(!JNU_IsNull(env, self)); |
|
|
env->CallVoidMethod(self, dSCenter, targetActions, modifiers, x, y); |
|
|
env->CallVoidMethod(self, dSCenter, targetActions, modifiers, pt.x, pt.y); |
|
|
if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) { |
|
|
env->ExceptionDescribe(); |
|
|
env->ExceptionClear(); |
|
@@ -1192,10 +1202,11 @@ AwtDragSource::call_dSCenter(JNIEnv* env, jobject self, jint targetActions, |
|
|
|
|
|
void |
|
|
AwtDragSource::call_dSCmotion(JNIEnv* env, jobject self, jint targetActions, |
|
|
jint modifiers, jint x, jint y) { |
|
|
jint modifiers, POINT pt) { |
|
|
ScaleDown(pt); |
|
|
DECLARE_VOID_JAVA_METHOD(dSCmotion, dSCClazz, "dragMotion", "(IIII)V"); |
|
|
DASSERT(!JNU_IsNull(env, self)); |
|
|
env->CallVoidMethod(self, dSCmotion, targetActions, modifiers, x, y); |
|
|
env->CallVoidMethod(self, dSCmotion, targetActions, modifiers, pt.x, pt.y); |
|
|
if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) { |
|
|
env->ExceptionDescribe(); |
|
|
env->ExceptionClear(); |
|
@@ -1204,22 +1215,24 @@ AwtDragSource::call_dSCmotion(JNIEnv* env, jobject self, jint targetActions, |
|
|
|
|
|
void |
|
|
AwtDragSource::call_dSCchanged(JNIEnv* env, jobject self, jint targetActions, |
|
|
jint modifiers, jint x, jint y) { |
|
|
jint modifiers, POINT pt) { |
|
|
ScaleDown(pt); |
|
|
DECLARE_VOID_JAVA_METHOD(dSCchanged, dSCClazz, "operationChanged", |
|
|
"(IIII)V"); |
|
|
DASSERT(!JNU_IsNull(env, self)); |
|
|
env->CallVoidMethod(self, dSCchanged, targetActions, modifiers, x, y); |
|
|
env->CallVoidMethod(self, dSCchanged, targetActions, modifiers, pt.x, pt.y); |
|
|
if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) { |
|
|
env->ExceptionDescribe(); |
|
|
env->ExceptionClear(); |
|
|
} |
|
|
} |
|
|
|
|
|
void |
|
|
AwtDragSource::call_dSCexit(JNIEnv* env, jobject self, jint x, jint y) { |
|
|
AwtDragSource::call_dSCexit(JNIEnv* env, jobject self, POINT pt) { |
|
|
ScaleDown(pt); |
|
|
DECLARE_VOID_JAVA_METHOD(dSCexit, dSCClazz, "dragExit", "(II)V"); |
|
|
DASSERT(!JNU_IsNull(env, self)); |
|
|
env->CallVoidMethod(self, dSCexit, x, y); |
|
|
env->CallVoidMethod(self, dSCexit, pt.x, pt.y); |
|
|
if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) { |
|
|
env->ExceptionDescribe(); |
|
|
env->ExceptionClear(); |
|
@@ -1228,10 +1241,11 @@ AwtDragSource::call_dSCexit(JNIEnv* env, jobject self, jint x, jint y) { |
|
|
|
|
|
void |
|
|
AwtDragSource::call_dSCddfinished(JNIEnv* env, jobject self, jboolean success, |
|
|
jint operations, jint x, jint y) { |
|
|
jint operations, POINT pt) { |
|
|
ScaleDown(pt); |
|
|
DECLARE_VOID_JAVA_METHOD(dSCddfinished, dSCClazz, "dragDropFinished", "(ZIII)V"); |
|
|
DASSERT(!JNU_IsNull(env, self)); |
|
|
env->CallVoidMethod(self, dSCddfinished, success, operations, x, y); |
|
|
env->CallVoidMethod(self, dSCddfinished, success, operations, pt.x, pt.y); |
|
|
if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) { |
|
|
env->ExceptionDescribe(); |
|
|
env->ExceptionClear(); |
|
@@ -1240,11 +1254,12 @@ AwtDragSource::call_dSCddfinished(JNIEnv* env, jobject self, jboolean success, |
|
|
|
|
|
void |
|
|
AwtDragSource::call_dSCmouseMoved(JNIEnv* env, jobject self, jint targetActions, |
|
|
jint modifiers, jint x, jint y) { |
|
|
jint modifiers, POINT pt) { |
|
|
ScaleDown(pt); |
|
|
DECLARE_VOID_JAVA_METHOD(dSCmouseMoved, dSCClazz, "dragMouseMoved", |
|
|
"(IIII)V"); |
|
|
DASSERT(!JNU_IsNull(env, self)); |
|
|
env->CallVoidMethod(self, dSCmouseMoved, targetActions, modifiers, x, y); |
|
|
env->CallVoidMethod(self, dSCmouseMoved, targetActions, modifiers, pt.x, pt.y); |
|
|
if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) { |
|
|
env->ExceptionDescribe(); |
|
|
env->ExceptionClear(); |
|
|