Commit d5781bb6 authored by Jason Rumney's avatar Jason Rumney

(w32_msg_pump) <WM_EMACS_CREATEWINDOW>: Initialize COM.

(w32_msg_pump) <WM_DESTROY>: Uninitialize COM.
parent c1c5c06d
2007-07-11 Jason Rumney <jasonr@gnu.org>
* makefile.w32-in (LIBS): Include OLE32.
* w32fns.c (w32_msg_pump) <WM_EMACS_CREATEWINDOW>: Initialize COM.
(w32_msg_pump) <WM_DESTROY>: Uninitialize COM.
2007-06-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* macterm.c [USE_MAC_TSM] (mac_handle_text_input_event):
......
......@@ -52,6 +52,7 @@ Boston, MA 02110-1301, USA. */
#include <shellapi.h>
#include <ctype.h>
#include <winspool.h>
#include <objbase.h>
#include <dlgs.h>
#define FILE_NAME_TEXT_FIELD edt1
......@@ -2514,6 +2515,13 @@ w32_msg_pump (deferred_msg * msg_buf)
/* Produced by complete_deferred_msg; just ignore. */
break;
case WM_EMACS_CREATEWINDOW:
/* Initialize COM for this window. Even though we don't use it,
some third party shell extensions can cause it to be used in
system dialogs, which causes a crash if it is not initialized.
This is a known bug in Windows, which was fixed long ago, but
the patch for XP is not publically available until XP SP3,
and older versions will never be patched. */
CoInitialize (NULL);
w32_createwindow ((struct frame *) msg.wParam);
if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, 0, 0))
abort ();
......@@ -3660,6 +3668,10 @@ w32_wnd_proc (hwnd, msg, wParam, lParam)
my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
goto dflt;
case WM_DESTROY:
CoUninitialize ();
return 0;
case WM_CLOSE:
wmsg.dwModifiers = w32_get_modifiers ();
my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment