110 /**
111 * AddRef
112 */
113
114 ULONG __stdcall AwtDropTarget::AddRef() {
115 return (ULONG)++m_refs;
116 }
117
118 /**
119 * Release
120 */
121
122 ULONG __stdcall AwtDropTarget::Release() {
123 int refs;
124
125 if ((refs = --m_refs) == 0) delete this;
126
127 return (ULONG)refs;
128 }
129
130 /**
131 * DragEnter
132 */
133
134 HRESULT __stdcall AwtDropTarget::DragEnter(IDataObject __RPC_FAR *pDataObj, DWORD grfKeyState, POINTL pt, DWORD __RPC_FAR *pdwEffect) {
135 TRY;
136 if (NULL != m_pIDropTargetHelper) {
137 m_pIDropTargetHelper->DragEnter(
138 m_window,
139 pDataObj,
140 (LPPOINT)&pt,
141 *pdwEffect);
142 }
143
144 AwtInterfaceLocker _lk(this);
145
146 JNIEnv* env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
147 HRESULT ret = S_OK;
148 DWORD retEffect = DROPEFFECT_NONE;
149 jobject dtcp = NULL;
159 if (dtcp) {
160 env->DeleteGlobalRef(m_dtcp);
161 m_dtcp = env->NewGlobalRef(dtcp);
162 env->DeleteLocalRef(dtcp);
163 }
164
165 if (JNU_IsNull(env, m_dtcp) || !JNU_IsNull(env, safe_ExceptionOccurred(env))) {
166 return ret;
167 }
168
169 LoadCache(pDataObj);
170
171 {
172 POINT cp;
173 RECT wr;
174
175 ::GetWindowRect(m_window, &wr);
176
177 cp.x = pt.x - wr.left;
178 cp.y = pt.y - wr.top;
179
180 jint actions = call_dTCenter(env, m_dtcp, m_target,
181 (jint)cp.x, (jint)cp.y,
182 ::convertDROPEFFECTToActions(mapModsToDROPEFFECT(*pdwEffect, grfKeyState)),
183 ::convertDROPEFFECTToActions(*pdwEffect),
184 m_cfFormats, (jlong)this);
185
186 try {
187 if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) {
188 env->ExceptionDescribe();
189 env->ExceptionClear();
190 actions = java_awt_dnd_DnDConstants_ACTION_NONE;
191 }
192 } catch (std::bad_alloc&) {
193 retEffect = ::convertActionsToDROPEFFECT(actions);
194 *pdwEffect = retEffect;
195 throw;
196 }
197
198 retEffect = ::convertActionsToDROPEFFECT(actions);
220
221 AwtInterfaceLocker _lk(this);
222
223 JNIEnv* env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
224 HRESULT ret = S_OK;
225 POINT cp;
226 RECT wr;
227 jint actions;
228
229 if ( (!IsLocalDnD() && !IsCurrentDnDDataObject(m_dataObject)) ||
230 (IsLocalDnD() && !IsLocalDataObject(m_dataObject)))
231 {
232 *pdwEffect = DROPEFFECT_NONE;
233 return ret;
234 }
235
236 ::GetWindowRect(m_window, &wr);
237
238 cp.x = pt.x - wr.left;
239 cp.y = pt.y - wr.top;
240
241 actions = call_dTCmotion(env, m_dtcp, m_target,(jint)cp.x, (jint)cp.y,
242 ::convertDROPEFFECTToActions(mapModsToDROPEFFECT(*pdwEffect, grfKeyState)),
243 ::convertDROPEFFECTToActions(*pdwEffect),
244 m_cfFormats, (jlong)this);
245
246 try {
247 if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) {
248 env->ExceptionDescribe();
249 env->ExceptionClear();
250 actions = java_awt_dnd_DnDConstants_ACTION_NONE;
251 }
252 } catch (std::bad_alloc&) {
253 *pdwEffect = ::convertActionsToDROPEFFECT(actions);
254 throw;
255 }
256
257 *pdwEffect = ::convertActionsToDROPEFFECT(actions);
258
259 return ret;
319
320 JNIEnv* env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
321 HRESULT ret = S_OK;
322 POINT cp;
323 RECT wr;
324
325 if ( (!IsLocalDnD() && !IsCurrentDnDDataObject(pDataObj)) ||
326 (IsLocalDnD() && !IsLocalDataObject(pDataObj)))
327 {
328 *pdwEffect = DROPEFFECT_NONE;
329 DragCleanup();
330 return ret;
331 }
332
333 LoadCache(pDataObj);
334
335 ::GetWindowRect(m_window, &wr);
336
337 cp.x = pt.x - wr.left;
338 cp.y = pt.y - wr.top;
339
340 m_dropActions = java_awt_dnd_DnDConstants_ACTION_NONE;
341
342 call_dTCdrop(env, m_dtcp, m_target, (jint)cp.x, (jint)cp.y,
343 ::convertDROPEFFECTToActions(mapModsToDROPEFFECT(*pdwEffect, grfKeyState)),
344 ::convertDROPEFFECTToActions(*pdwEffect),
345 m_cfFormats, (jlong)this);
346
347 try {
348 if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) {
349 env->ExceptionDescribe();
350 env->ExceptionClear();
351 ret = E_FAIL;
352 }
353 } catch (std::bad_alloc&) {
354 AwtToolkit::GetInstance().MessageLoop(AwtToolkit::SecondaryIdleFunc,
355 AwtToolkit::CommonPeekMessageFunc);
356 *pdwEffect = ::convertActionsToDROPEFFECT(m_dropActions);
357 DragCleanup();
358 throw;
|
110 /**
111 * AddRef
112 */
113
114 ULONG __stdcall AwtDropTarget::AddRef() {
115 return (ULONG)++m_refs;
116 }
117
118 /**
119 * Release
120 */
121
122 ULONG __stdcall AwtDropTarget::Release() {
123 int refs;
124
125 if ((refs = --m_refs) == 0) delete this;
126
127 return (ULONG)refs;
128 }
129
130 void ScaleDown(POINT &cp, HWND m_window) {
131 int screen = AwtWin32GraphicsDevice::DeviceIndexForWindow(m_window);
132 Devices::InstanceAccess devices;
133 AwtWin32GraphicsDevice* device = devices->GetDevice(screen);
134 if (device) {
135 cp.x = device->ScaleDownX(cp.x);
136 cp.y = device->ScaleDownY(cp.y);
137 }
138 }
139
140 /**
141 * DragEnter
142 */
143
144 HRESULT __stdcall AwtDropTarget::DragEnter(IDataObject __RPC_FAR *pDataObj, DWORD grfKeyState, POINTL pt, DWORD __RPC_FAR *pdwEffect) {
145 TRY;
146 if (NULL != m_pIDropTargetHelper) {
147 m_pIDropTargetHelper->DragEnter(
148 m_window,
149 pDataObj,
150 (LPPOINT)&pt,
151 *pdwEffect);
152 }
153
154 AwtInterfaceLocker _lk(this);
155
156 JNIEnv* env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
157 HRESULT ret = S_OK;
158 DWORD retEffect = DROPEFFECT_NONE;
159 jobject dtcp = NULL;
169 if (dtcp) {
170 env->DeleteGlobalRef(m_dtcp);
171 m_dtcp = env->NewGlobalRef(dtcp);
172 env->DeleteLocalRef(dtcp);
173 }
174
175 if (JNU_IsNull(env, m_dtcp) || !JNU_IsNull(env, safe_ExceptionOccurred(env))) {
176 return ret;
177 }
178
179 LoadCache(pDataObj);
180
181 {
182 POINT cp;
183 RECT wr;
184
185 ::GetWindowRect(m_window, &wr);
186
187 cp.x = pt.x - wr.left;
188 cp.y = pt.y - wr.top;
189 ScaleDown(cp, m_window);
190
191 jint actions = call_dTCenter(env, m_dtcp, m_target,
192 (jint)cp.x, (jint)cp.y,
193 ::convertDROPEFFECTToActions(mapModsToDROPEFFECT(*pdwEffect, grfKeyState)),
194 ::convertDROPEFFECTToActions(*pdwEffect),
195 m_cfFormats, (jlong)this);
196
197 try {
198 if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) {
199 env->ExceptionDescribe();
200 env->ExceptionClear();
201 actions = java_awt_dnd_DnDConstants_ACTION_NONE;
202 }
203 } catch (std::bad_alloc&) {
204 retEffect = ::convertActionsToDROPEFFECT(actions);
205 *pdwEffect = retEffect;
206 throw;
207 }
208
209 retEffect = ::convertActionsToDROPEFFECT(actions);
231
232 AwtInterfaceLocker _lk(this);
233
234 JNIEnv* env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
235 HRESULT ret = S_OK;
236 POINT cp;
237 RECT wr;
238 jint actions;
239
240 if ( (!IsLocalDnD() && !IsCurrentDnDDataObject(m_dataObject)) ||
241 (IsLocalDnD() && !IsLocalDataObject(m_dataObject)))
242 {
243 *pdwEffect = DROPEFFECT_NONE;
244 return ret;
245 }
246
247 ::GetWindowRect(m_window, &wr);
248
249 cp.x = pt.x - wr.left;
250 cp.y = pt.y - wr.top;
251 ScaleDown(cp, m_window);
252
253 actions = call_dTCmotion(env, m_dtcp, m_target,(jint)cp.x, (jint)cp.y,
254 ::convertDROPEFFECTToActions(mapModsToDROPEFFECT(*pdwEffect, grfKeyState)),
255 ::convertDROPEFFECTToActions(*pdwEffect),
256 m_cfFormats, (jlong)this);
257
258 try {
259 if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) {
260 env->ExceptionDescribe();
261 env->ExceptionClear();
262 actions = java_awt_dnd_DnDConstants_ACTION_NONE;
263 }
264 } catch (std::bad_alloc&) {
265 *pdwEffect = ::convertActionsToDROPEFFECT(actions);
266 throw;
267 }
268
269 *pdwEffect = ::convertActionsToDROPEFFECT(actions);
270
271 return ret;
331
332 JNIEnv* env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
333 HRESULT ret = S_OK;
334 POINT cp;
335 RECT wr;
336
337 if ( (!IsLocalDnD() && !IsCurrentDnDDataObject(pDataObj)) ||
338 (IsLocalDnD() && !IsLocalDataObject(pDataObj)))
339 {
340 *pdwEffect = DROPEFFECT_NONE;
341 DragCleanup();
342 return ret;
343 }
344
345 LoadCache(pDataObj);
346
347 ::GetWindowRect(m_window, &wr);
348
349 cp.x = pt.x - wr.left;
350 cp.y = pt.y - wr.top;
351 ScaleDown(cp, m_window);
352
353 m_dropActions = java_awt_dnd_DnDConstants_ACTION_NONE;
354
355 call_dTCdrop(env, m_dtcp, m_target, (jint)cp.x, (jint)cp.y,
356 ::convertDROPEFFECTToActions(mapModsToDROPEFFECT(*pdwEffect, grfKeyState)),
357 ::convertDROPEFFECTToActions(*pdwEffect),
358 m_cfFormats, (jlong)this);
359
360 try {
361 if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) {
362 env->ExceptionDescribe();
363 env->ExceptionClear();
364 ret = E_FAIL;
365 }
366 } catch (std::bad_alloc&) {
367 AwtToolkit::GetInstance().MessageLoop(AwtToolkit::SecondaryIdleFunc,
368 AwtToolkit::CommonPeekMessageFunc);
369 *pdwEffect = ::convertActionsToDROPEFFECT(m_dropActions);
370 DragCleanup();
371 throw;
|