diff options
author | Grant Gayed <ggayed> | 2009-01-30 19:19:17 +0000 |
---|---|---|
committer | Grant Gayed <ggayed> | 2009-01-30 19:19:17 +0000 |
commit | 5d24937b771810089684ca03e660e8eb90a5f7e2 (patch) | |
tree | 674218d9820f0b3868061349f2474fc1f04fbca6 /bundles/org.eclipse.swt/Eclipse SWT OLE Win32 | |
parent | ddd9017ce8bae73701ac9682652f7f0bf7a3cd78 (diff) | |
download | eclipse.platform.swt-5d24937b771810089684ca03e660e8eb90a5f7e2.tar.gz eclipse.platform.swt-5d24937b771810089684ca03e660e8eb90a5f7e2.tar.xz eclipse.platform.swt-5d24937b771810089684ca03e660e8eb90a5f7e2.zip |
248400 - Backspace does not work flash files viewed in SWT browser when eclipse is minimised and restored
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT OLE Win32')
-rwxr-xr-x | bundles/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleControlSite.java | 128 |
1 files changed, 65 insertions, 63 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleControlSite.java b/bundles/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleControlSite.java index 7c71ede3dd..48213fd7a8 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleControlSite.java +++ b/bundles/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleControlSite.java @@ -64,10 +64,6 @@ public class OleControlSite extends OleClientSite private Font font; - // work around for IE destroying the caret - static int SWT_RESTORECARET; - - static final String SHELL_PROG_ID = "Shell.Explorer"; //$NON-NLS-1$ /** * Create an OleControlSite child widget using the OLE Document type associated with the @@ -656,65 +652,71 @@ private int OnControlInfoChanged() { } return COM.S_OK; } -void onFocusIn(Event e) { - String progID = getProgramID(); - if (progID == null) return; - if (!progID.startsWith(SHELL_PROG_ID)) { - super.onFocusIn(e); - return; - } - if (objIOleInPlaceObject == null) return; - doVerb(OLE.OLEIVERB_UIACTIVATE); - if (isFocusControl()) return; - int /*long*/[] phwnd = new int /*long*/[1]; - objIOleInPlaceObject.GetWindow(phwnd); - if (phwnd[0] == 0) return; - OS.SetFocus(phwnd[0]); -} -void onFocusOut(Event e) { - if (objIOleInPlaceObject == null) return; - String progID = getProgramID(); - if (progID == null) return; - if (!progID.startsWith(SHELL_PROG_ID)) { - super.onFocusOut(e); - return; - } - /* - * Bug in Windows. When IE7 loses focus and UIDeactivate() - * is called, IE destroys the caret even though it is - * no longer owned by IE. If focus has moved to a control - * that shows a caret then the caret disappears. The fix - * is to detect this case and restore the caret. - */ - int threadId = OS.GetCurrentThreadId(); - GUITHREADINFO lpgui1 = new GUITHREADINFO(); - lpgui1.cbSize = GUITHREADINFO.sizeof; - OS.GetGUIThreadInfo(threadId, lpgui1); - objIOleInPlaceObject.UIDeactivate(); - if (lpgui1.hwndCaret != 0) { - GUITHREADINFO lpgui2 = new GUITHREADINFO(); - lpgui2.cbSize = GUITHREADINFO.sizeof; - OS.GetGUIThreadInfo(threadId, lpgui2); - if (lpgui2.hwndCaret == 0 && lpgui1.hwndCaret == OS.GetFocus()) { - if (SWT_RESTORECARET == 0) { - SWT_RESTORECARET = OS.RegisterWindowMessage (new TCHAR (0, "SWT_RESTORECARET", true)); - } - /* - * If the caret was not restored by SWT, put it back using - * the information from GUITHREADINFO. Note that this will - * not be correct when the caret has a bitmap. There is no - * API to query the bitmap that the caret is using. - */ - if (OS.SendMessage (lpgui1.hwndCaret, SWT_RESTORECARET, 0, 0) == 0) { - int width = lpgui1.right - lpgui1.left; - int height = lpgui1.bottom - lpgui1.top; - OS.CreateCaret (lpgui1.hwndCaret, 0, width, height); - OS.SetCaretPos (lpgui1.left, lpgui1.top); - OS.ShowCaret (lpgui1.hwndCaret); - } - } - } -} + +// The following is intentionally commented, it's not believed that +// OLEIVERB_UIACTIVATE and UIDeactivate should be invoked for every +// received focusIn and focusOut, respectively. +// +//void onFocusIn(Event e) { +// String progID = getProgramID(); +// if (progID == null) return; +// if (!progID.startsWith("Shell.Explorer")) { +// super.onFocusIn(e); +// return; +// } +// if (objIOleInPlaceObject == null) return; +// doVerb(OLE.OLEIVERB_UIACTIVATE); +// if (isFocusControl()) return; +// int /*long*/[] phwnd = new int /*long*/[1]; +// objIOleInPlaceObject.GetWindow(phwnd); +// if (phwnd[0] == 0) return; +// OS.SetFocus(phwnd[0]); +//} +//void onFocusOut(Event e) { +// if (objIOleInPlaceObject == null) return; +// String progID = getProgramID(); +// if (progID == null) return; +// if (!progID.startsWith("Shell.Explorer")) { +// super.onFocusOut(e); +// return; +// } +// /* +// * Bug in Windows. When IE7 loses focus and UIDeactivate() +// * is called, IE destroys the caret even though it is +// * no longer owned by IE. If focus has moved to a control +// * that shows a caret then the caret disappears. The fix +// * is to detect this case and restore the caret. +// */ +// int threadId = OS.GetCurrentThreadId(); +// GUITHREADINFO lpgui1 = new GUITHREADINFO(); +// lpgui1.cbSize = GUITHREADINFO.sizeof; +// OS.GetGUIThreadInfo(threadId, lpgui1); +// objIOleInPlaceObject.UIDeactivate(); +// if (lpgui1.hwndCaret != 0) { +// GUITHREADINFO lpgui2 = new GUITHREADINFO(); +// lpgui2.cbSize = GUITHREADINFO.sizeof; +// OS.GetGUIThreadInfo(threadId, lpgui2); +// if (lpgui2.hwndCaret == 0 && lpgui1.hwndCaret == OS.GetFocus()) { +// if (SWT_RESTORECARET == 0) { +// SWT_RESTORECARET = OS.RegisterWindowMessage (new TCHAR (0, "SWT_RESTORECARET", true)); +// } +// /* +// * If the caret was not restored by SWT, put it back using +// * the information from GUITHREADINFO. Note that this will +// * not be correct when the caret has a bitmap. There is no +// * API to query the bitmap that the caret is using. +// */ +// if (OS.SendMessage (lpgui1.hwndCaret, SWT_RESTORECARET, 0, 0) == 0) { +// int width = lpgui1.right - lpgui1.left; +// int height = lpgui1.bottom - lpgui1.top; +// OS.CreateCaret (lpgui1.hwndCaret, 0, width, height); +// OS.SetCaretPos (lpgui1.left, lpgui1.top); +// OS.ShowCaret (lpgui1.hwndCaret); +// } +// } +// } +//} + private int OnFocus(int fGotFocus) { return COM.S_OK; } |