Module: wine Branch: master Commit: 828ac88f24e96537a28bf30f055cfef264268a87 URL: http://source.winehq.org/git/wine.git/?a=commit;h=828ac88f24e96537a28bf30f05...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Apr 8 12:24:54 2008 +0200
winex11: Improved handling of broken 8-bit TARGETS selection.
---
dlls/winex11.drv/clipboard.c | 18 ++++++++++++++++-- 1 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/dlls/winex11.drv/clipboard.c b/dlls/winex11.drv/clipboard.c index 2404a71..cdf54c1 100644 --- a/dlls/winex11.drv/clipboard.c +++ b/dlls/winex11.drv/clipboard.c @@ -1902,8 +1902,22 @@ static int X11DRV_CLIPBOARD_QueryAvailableData(LPCLIPBOARDINFO lpcbinfo) * The TARGETS property should have returned us a list of atoms * corresponding to each selection target format supported. */ - if (aformat == 32 && (atype == XA_ATOM || atype == x11drv_atom(TARGETS))) - X11DRV_CLIPBOARD_InsertSelectionProperties(display, targetList, cSelectionTargets); + if (atype == XA_ATOM || atype == x11drv_atom(TARGETS)) + { + if (aformat == 32) + { + X11DRV_CLIPBOARD_InsertSelectionProperties(display, targetList, cSelectionTargets); + } + else if (aformat == 8) /* work around quartz-wm brain damage */ + { + unsigned long i, count = cSelectionTargets / sizeof(CARD32); + Atom *atoms = HeapAlloc( GetProcessHeap(), 0, count * sizeof(Atom) ); + for (i = 0; i < count; i++) + atoms[i] = ((CARD32 *)targetList)[i]; /* FIXME: byte swapping */ + X11DRV_CLIPBOARD_InsertSelectionProperties( display, atoms, count ); + HeapFree( GetProcessHeap(), 0, atoms ); + } + }
/* Free the list of targets */ wine_tsx11_lock();