< prev index next >

src/java.desktop/windows/native/libawt/windows/awt_DnDDT.cpp

Print this page




 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;


< prev index next >