mirror of
https://github.com/kasmtech/KasmVNC.git
synced 2024-12-01 12:33:20 +01:00
100 lines
3.0 KiB
Diff
100 lines
3.0 KiB
Diff
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) {
|