Make sure we unregister for clipboard notifications on exit
on Windows. This is necessary because Windows doesn't implicitly clean up when a process dies, and we cannot trust applications to always explicitly unregister. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10367 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
933840f353
commit
3e4af3cd8c
@ -472,6 +472,11 @@ public:
|
|||||||
OleUninitialize();
|
OleUninitialize();
|
||||||
fl_brush_action(1);
|
fl_brush_action(1);
|
||||||
fl_cleanup_dc_list();
|
fl_cleanup_dc_list();
|
||||||
|
// This is actually too late in the cleanup process to remove the
|
||||||
|
// clipboard notifications, but we have no earlier hook so we try
|
||||||
|
// to work around it anyway.
|
||||||
|
if (clipboard_wnd != NULL)
|
||||||
|
fl_clipboard_notify_untarget(clipboard_wnd);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
static Fl_Win32_At_Exit win32_at_exit;
|
static Fl_Win32_At_Exit win32_at_exit;
|
||||||
@ -812,7 +817,30 @@ static void fl_clipboard_notify_untarget(HWND wnd) {
|
|||||||
if (wnd != clipboard_wnd)
|
if (wnd != clipboard_wnd)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// We might be called late in the cleanup where Windows has already
|
||||||
|
// implicitly destroyed our clipboard window. At that point we need
|
||||||
|
// to do some extra work to manually repair the clipboard chain.
|
||||||
|
if (IsWindow(wnd))
|
||||||
ChangeClipboardChain(wnd, next_clipboard_wnd);
|
ChangeClipboardChain(wnd, next_clipboard_wnd);
|
||||||
|
else {
|
||||||
|
HWND tmp, head;
|
||||||
|
|
||||||
|
tmp = CreateWindow("STATIC", "Temporary FLTK Clipboard Window", 0,
|
||||||
|
0, 0, 0, 0, HWND_MESSAGE, NULL, NULL, NULL);
|
||||||
|
if (tmp == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
head = SetClipboardViewer(tmp);
|
||||||
|
if (head == NULL)
|
||||||
|
ChangeClipboardChain(tmp, next_clipboard_wnd);
|
||||||
|
else {
|
||||||
|
SendMessage(head, WM_CHANGECBCHAIN, (WPARAM)wnd, (LPARAM)next_clipboard_wnd);
|
||||||
|
ChangeClipboardChain(tmp, head);
|
||||||
|
}
|
||||||
|
|
||||||
|
DestroyWindow(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
clipboard_wnd = next_clipboard_wnd = 0;
|
clipboard_wnd = next_clipboard_wnd = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user