< prev index next >

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

Print this page




 288 jmethodID AwtToolkit::insetsMID;
 289 
 290 /************************************************************************
 291  * AwtToolkit methods
 292  */
 293 
 294 AwtToolkit::AwtToolkit() {
 295     m_localPump = FALSE;
 296     m_mainThreadId = 0;
 297     m_toolkitHWnd = NULL;
 298     m_inputMethodHWnd = NULL;
 299     m_verbose = FALSE;
 300     m_isActive = TRUE;
 301     m_isDisposed = FALSE;
 302 
 303     m_vmSignalled = FALSE;
 304 
 305     m_isDynamicLayoutSet = FALSE;
 306     m_areExtraMouseButtonsEnabled = TRUE;
 307 



 308     m_verifyComponents = FALSE;
 309     m_breakOnError = FALSE;
 310 
 311     m_breakMessageLoop = FALSE;
 312     m_messageLoopResult = 0;
 313 
 314     m_lastMouseOver = NULL;
 315     m_mouseDown = FALSE;
 316 
 317     m_hGetMessageHook = 0;
 318     m_hMouseLLHook = 0;
 319     m_lastWindowUnderMouse = NULL;
 320     m_timer = 0;
 321 
 322     m_cmdIDs = new AwtCmdIDList();
 323     m_pModalDialog = NULL;
 324     m_peer = NULL;
 325     m_dllHandle = NULL;
 326 
 327     m_displayChanged = FALSE;


 500     tk.m_localPump = localPump;
 501     tk.m_mainThreadId = ::GetCurrentThreadId();
 502 
 503     /*
 504      * Create the one-and-only toolkit window.  This window isn't
 505      * displayed, but is used to route messages to this thread.
 506      */
 507     tk.m_toolkitHWnd = tk.CreateToolkitWnd(TEXT("theAwtToolkitWindow"));
 508     DASSERT(tk.m_toolkitHWnd != NULL);
 509 
 510     /*
 511      * Setup a GetMessage filter to watch all messages coming out of our
 512      * queue from PreProcessMsg().
 513      */
 514     tk.m_hGetMessageHook = ::SetWindowsHookEx(WH_GETMESSAGE,
 515                                               (HOOKPROC)GetMessageFilter,
 516                                               0, tk.m_mainThreadId);
 517 
 518     awt_dnd_initialize();
 519 













 520     return TRUE;
 521 }
 522 
 523 BOOL AwtToolkit::Dispose() {
 524     DTRACE_PRINTLN("In AwtToolkit::Dispose()");
 525 
 526     AwtToolkit& tk = AwtToolkit::GetInstance();
 527 
 528     if (!tk.m_isActive || tk.m_mainThreadId != ::GetCurrentThreadId()) {
 529         return FALSE;
 530     }
 531 
 532     tk.m_isActive = FALSE;
 533 
 534     // dispose Direct3D-related resources. This should be done
 535     // before AwtObjectList::Cleanup() as the d3d will attempt to
 536     // shutdown when the last of its windows is disposed of
 537     D3DInitializer::GetInstance().Clean();
 538 
 539     AwtObjectList::Cleanup();
 540 
 541     awt_dnd_uninitialize();
 542     awt_clipboard_uninitialize((JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2));
 543 


 544     if (tk.m_inputMethodHWnd != NULL) {
 545         ::SendMessage(tk.m_inputMethodHWnd, WM_IME_CONTROL, IMC_OPENSTATUSWINDOW, 0);
 546     }
 547     tk.m_inputMethodHWnd = NULL;
 548 
 549     // wait for any messages to be processed, in particular,
 550     // all WM_AWT_DELETEOBJECT messages that delete components; no
 551     // new messages will appear as all the windows except toolkit
 552     // window are unsubclassed and destroyed
 553     MSG msg;
 554     while (::GetMessage(&msg, NULL, 0, 0)) {
 555         ::TranslateMessage(&msg);
 556         ::DispatchMessage(&msg);
 557     }
 558 
 559     AwtFont::Cleanup();
 560 
 561     HWND toolkitHWndToDestroy = tk.m_toolkitHWnd;
 562     tk.m_toolkitHWnd = 0;
 563     VERIFY(::DestroyWindow(toolkitHWndToDestroy) != NULL);


2806  * Signature: (Z)V
2807  */
2808 extern "C" JNIEXPORT void JNICALL Java_sun_awt_windows_WToolkit_setExtraMouseButtonsEnabledNative
2809 (JNIEnv *env, jclass self, jboolean enable){
2810     TRY;
2811     AwtToolkit::GetInstance().setExtraMouseButtonsEnabled(enable);
2812     CATCH_BAD_ALLOC;
2813 }
2814 
2815 void AwtToolkit::setExtraMouseButtonsEnabled(BOOL enable) {
2816     m_areExtraMouseButtonsEnabled = enable;
2817 }
2818 
2819 JNIEXPORT jint JNICALL Java_sun_awt_windows_WToolkit_getNumberOfButtonsImpl
2820 (JNIEnv *, jobject self) {
2821     return AwtToolkit::GetNumberOfButtons();
2822 }
2823 
2824 UINT AwtToolkit::GetNumberOfButtons() {
2825     return MOUSE_BUTTONS_WINDOWS_SUPPORTED;









2826 }


 288 jmethodID AwtToolkit::insetsMID;
 289 
 290 /************************************************************************
 291  * AwtToolkit methods
 292  */
 293 
 294 AwtToolkit::AwtToolkit() {
 295     m_localPump = FALSE;
 296     m_mainThreadId = 0;
 297     m_toolkitHWnd = NULL;
 298     m_inputMethodHWnd = NULL;
 299     m_verbose = FALSE;
 300     m_isActive = TRUE;
 301     m_isDisposed = FALSE;
 302 
 303     m_vmSignalled = FALSE;
 304 
 305     m_isDynamicLayoutSet = FALSE;
 306     m_areExtraMouseButtonsEnabled = TRUE;
 307 
 308     m_isWin8OrLater = FALSE;
 309     m_pGetPointerInfoHandle = NULL;
 310 
 311     m_verifyComponents = FALSE;
 312     m_breakOnError = FALSE;
 313 
 314     m_breakMessageLoop = FALSE;
 315     m_messageLoopResult = 0;
 316 
 317     m_lastMouseOver = NULL;
 318     m_mouseDown = FALSE;
 319 
 320     m_hGetMessageHook = 0;
 321     m_hMouseLLHook = 0;
 322     m_lastWindowUnderMouse = NULL;
 323     m_timer = 0;
 324 
 325     m_cmdIDs = new AwtCmdIDList();
 326     m_pModalDialog = NULL;
 327     m_peer = NULL;
 328     m_dllHandle = NULL;
 329 
 330     m_displayChanged = FALSE;


 503     tk.m_localPump = localPump;
 504     tk.m_mainThreadId = ::GetCurrentThreadId();
 505 
 506     /*
 507      * Create the one-and-only toolkit window.  This window isn't
 508      * displayed, but is used to route messages to this thread.
 509      */
 510     tk.m_toolkitHWnd = tk.CreateToolkitWnd(TEXT("theAwtToolkitWindow"));
 511     DASSERT(tk.m_toolkitHWnd != NULL);
 512 
 513     /*
 514      * Setup a GetMessage filter to watch all messages coming out of our
 515      * queue from PreProcessMsg().
 516      */
 517     tk.m_hGetMessageHook = ::SetWindowsHookEx(WH_GETMESSAGE,
 518                                               (HOOKPROC)GetMessageFilter,
 519                                               0, tk.m_mainThreadId);
 520 
 521     awt_dnd_initialize();
 522 
 523     /*
 524      * Initialization of the touch related variables.
 525      */
 526     tk.m_isWin8OrLater = IS_WIN8;
 527 
 528     if (tk.m_isWin8OrLater) {
 529         HMODULE hUser32Dll = ::LoadLibrary(_T("user32.dll"));
 530         if (hUser32Dll != NULL) {
 531             tk.m_pGetPointerInfoHandle = (GetPointerInfoHandleFunc)
 532                 ::GetProcAddress(hUser32Dll, "GetPointerInfo");
 533         }
 534     }
 535 
 536     return TRUE;
 537 }
 538 
 539 BOOL AwtToolkit::Dispose() {
 540     DTRACE_PRINTLN("In AwtToolkit::Dispose()");
 541 
 542     AwtToolkit& tk = AwtToolkit::GetInstance();
 543 
 544     if (!tk.m_isActive || tk.m_mainThreadId != ::GetCurrentThreadId()) {
 545         return FALSE;
 546     }
 547 
 548     tk.m_isActive = FALSE;
 549 
 550     // dispose Direct3D-related resources. This should be done
 551     // before AwtObjectList::Cleanup() as the d3d will attempt to
 552     // shutdown when the last of its windows is disposed of
 553     D3DInitializer::GetInstance().Clean();
 554 
 555     AwtObjectList::Cleanup();
 556 
 557     awt_dnd_uninitialize();
 558     awt_clipboard_uninitialize((JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2));
 559 
 560     m_pGetPointerInfoHandle = NULL;
 561 
 562     if (tk.m_inputMethodHWnd != NULL) {
 563         ::SendMessage(tk.m_inputMethodHWnd, WM_IME_CONTROL, IMC_OPENSTATUSWINDOW, 0);
 564     }
 565     tk.m_inputMethodHWnd = NULL;
 566 
 567     // wait for any messages to be processed, in particular,
 568     // all WM_AWT_DELETEOBJECT messages that delete components; no
 569     // new messages will appear as all the windows except toolkit
 570     // window are unsubclassed and destroyed
 571     MSG msg;
 572     while (::GetMessage(&msg, NULL, 0, 0)) {
 573         ::TranslateMessage(&msg);
 574         ::DispatchMessage(&msg);
 575     }
 576 
 577     AwtFont::Cleanup();
 578 
 579     HWND toolkitHWndToDestroy = tk.m_toolkitHWnd;
 580     tk.m_toolkitHWnd = 0;
 581     VERIFY(::DestroyWindow(toolkitHWndToDestroy) != NULL);


2824  * Signature: (Z)V
2825  */
2826 extern "C" JNIEXPORT void JNICALL Java_sun_awt_windows_WToolkit_setExtraMouseButtonsEnabledNative
2827 (JNIEnv *env, jclass self, jboolean enable){
2828     TRY;
2829     AwtToolkit::GetInstance().setExtraMouseButtonsEnabled(enable);
2830     CATCH_BAD_ALLOC;
2831 }
2832 
2833 void AwtToolkit::setExtraMouseButtonsEnabled(BOOL enable) {
2834     m_areExtraMouseButtonsEnabled = enable;
2835 }
2836 
2837 JNIEXPORT jint JNICALL Java_sun_awt_windows_WToolkit_getNumberOfButtonsImpl
2838 (JNIEnv *, jobject self) {
2839     return AwtToolkit::GetNumberOfButtons();
2840 }
2841 
2842 UINT AwtToolkit::GetNumberOfButtons() {
2843     return MOUSE_BUTTONS_WINDOWS_SUPPORTED;
2844 }
2845 
2846 BOOL AwtToolkit::TIGetPointerInfo(UINT32 pointerID, POINTER_INFO *pointerInfo)
2847 {
2848     if (m_pGetPointerInfoHandle == NULL) {
2849         return FALSE;
2850     }
2851 
2852     return m_pGetPointerInfoHandle(pointerID, pointerInfo);
2853 }
< prev index next >