| /* | |
| Licensed to the Software Freedom Conservancy (SFC) under one | |
| or more contributor license agreements. See the NOTICE file | |
| distributed with this work for additional information | |
| regarding copyright ownership. The SFC licenses this file | |
| to you under the Apache License, Version 2.0 (the "License"); | |
| you may not use this file except in compliance with the License. | |
| You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| */ | |
| #ifndef event_firing_thread_h_ | |
| #define event_firing_thread_h_ | |
| /** | |
| * The purpose of background, persistent event firing is to make mouse hovering | |
| * on Windows work. IE, specifically, would consider the mouse to have moved | |
| * outside the window if WM_MOUSEMOVE messages are not constantly sent to | |
| * the window. | |
| * | |
| * This is achieved by starting a background thread that keeps firing those | |
| * messages every 10 ms. Event firing is paused when other mouse actions occur. | |
| * Additionally, the state of the input devices must be updated so that | |
| * WM_MOUSEMOVE events sent are consistent with previous actions. This | |
| * boils down to whether the Shift key is pressed and whether the left | |
| * mouse button is pressed (for drag-and-drop to work). | |
| **/ | |
| // Start or resume persistent "mouse over" event firing by a | |
| // background thread. | |
| extern void resumePersistentEventsFiring( | |
| HWND inputTo, long toX, long toY, WPARAM buttonValue); | |
| // Resume without changing the target. Used after pausing evennt | |
| // firing for mouse actions. | |
| extern void resumePersistentEventsFiring(); | |
| // Pauses persistent event firing by the background thread. | |
| extern void pausePersistentEventsFiring(); | |
| // When the state of the shift key changes, update the background thread | |
| // so that subsequent mouse over events will have the right keyboard state. | |
| extern void updateShiftKeyState(bool isShiftPressed); | |
| // When the left mouse button is pressed, update the background thread. | |
| // Otherwise IE gets confused. | |
| extern void updateLeftMouseButtonState(bool isButtonPressed); | |
| #endif // event_firing_thread_h_ |