123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- diff -ur fltk-1.3.0r9110.org/src/Fl.cxx fltk-1.3.0r9110/src/Fl.cxx
- --- fltk-1.3.0r9110.org/src/Fl.cxx 2012-06-17 19:47:09.988183253 +0200
- +++ fltk-1.3.0r9110/src/Fl.cxx 2012-06-17 19:47:10.127189919 +0200
- @@ -1421,6 +1421,7 @@
- // hide() destroys the X window, it does not do unmap!
-
- #if defined(WIN32)
- +extern void fl_clipboard_notify_untarget(HWND wnd);
- extern void fl_update_clipboard(void);
- #elif USE_XFT
- extern void fl_destroy_xft_draw(Window);
- @@ -1471,6 +1472,8 @@
- // to destroy the window that owns the selection.
- if (GetClipboardOwner()==ip->xid)
- fl_update_clipboard();
- + // Make sure we unlink this window from the clipboard chain
- + fl_clipboard_notify_untarget(ip->xid);
- // Send a message to myself so that I'll get out of the event loop...
- PostMessage(ip->xid, WM_APP, 0, 0);
- if (ip->private_dc) fl_release_dc(ip->xid, ip->private_dc);
- diff -ur fltk-1.3.0r9110.org/src/Fl_win32.cxx fltk-1.3.0r9110/src/Fl_win32.cxx
- --- fltk-1.3.0r9110.org/src/Fl_win32.cxx 2012-06-17 19:47:09.987183205 +0200
- +++ fltk-1.3.0r9110/src/Fl_win32.cxx 2012-06-17 19:47:19.069618739 +0200
- @@ -646,6 +646,38 @@
- }
- }
-
- +static HWND clipboard_wnd = 0;
- +static HWND next_clipboard_wnd = 0;
- +
- +static bool initial_clipboard = true;
- +
- +void fl_clipboard_notify_change() {
- + // No need to do anything here...
- +}
- +
- +void fl_clipboard_notify_target(HWND wnd) {
- + if (clipboard_wnd)
- + return;
- +
- + // We get one fake WM_DRAWCLIPBOARD immediately, which we therefore
- + // need to ignore.
- + initial_clipboard = true;
- +
- + clipboard_wnd = wnd;
- + next_clipboard_wnd = SetClipboardViewer(wnd);
- +}
- +
- +void fl_clipboard_notify_untarget(HWND wnd) {
- + if (wnd != clipboard_wnd)
- + return;
- +
- + ChangeClipboardChain(wnd, next_clipboard_wnd);
- + clipboard_wnd = next_clipboard_wnd = 0;
- +
- + if (Fl::first_window())
- + fl_clipboard_notify_target(fl_xid(Fl::first_window()));
- +}
- +
- ////////////////////////////////////////////////////////////////
- char fl_is_ime = 0;
- void fl_get_codepage()
- @@ -1327,6 +1359,27 @@
- Fl::handle(FL_SCREEN_CONFIGURATION_CHANGED, NULL);
- return 0;
-
- + case WM_CHANGECBCHAIN:
- + if ((hWnd == clipboard_wnd) &&
- + (next_clipboard_wnd == (HWND)wParam)) {
- + next_clipboard_wnd = (HWND)lParam;
- + return 0;
- + }
- + break;
- +
- + case WM_DRAWCLIPBOARD:
- + // When the clipboard moves between two FLTK windows,
- + // fl_i_own_selection will temporarily be false as we are
- + // processing this message. Hence the need to use fl_find().
- + if (!initial_clipboard && !fl_find(GetClipboardOwner()))
- + fl_trigger_clipboard_notify(1);
- + initial_clipboard = false;
- +
- + if (next_clipboard_wnd)
- + SendMessage(next_clipboard_wnd, WM_DRAWCLIPBOARD, wParam, lParam);
- +
- + return 0;
- +
- default:
- if (Fl::handle(0,0)) return 0;
- break;
- @@ -1685,6 +1738,8 @@
- x->next = Fl_X::first;
- Fl_X::first = x;
-
- + fl_clipboard_notify_target(x->xid);
- +
- x->wait_for_expose = 1;
- if (fl_show_iconic) {showit = 0; fl_show_iconic = 0;}
- if (showit) {
|