fix clipboard pasting
This commit is contained in:
parent
e42372cb17
commit
a9607ec0cd
28
platform.d
28
platform.d
@ -425,6 +425,7 @@ enum Atoms
|
|||||||
WMProtocols,
|
WMProtocols,
|
||||||
DeleteWindow,
|
DeleteWindow,
|
||||||
StateHidden,
|
StateHidden,
|
||||||
|
XselData,
|
||||||
Max,
|
Max,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,6 +439,7 @@ const char[][] ATOM_STRS = [
|
|||||||
Atoms.WMProtocols: CastStr!(char)("WM_PROTOCOLS"),
|
Atoms.WMProtocols: CastStr!(char)("WM_PROTOCOLS"),
|
||||||
Atoms.DeleteWindow: CastStr!(char)("WM_DELETE_WINDOW"),
|
Atoms.DeleteWindow: CastStr!(char)("WM_DELETE_WINDOW"),
|
||||||
Atoms.StateHidden: CastStr!(char)("_NET_WM_STATE_HIDDEN"),
|
Atoms.StateHidden: CastStr!(char)("_NET_WM_STATE_HIDDEN"),
|
||||||
|
Atoms.XselData: CastStr!(char)("XSEL_DATA"),
|
||||||
];
|
];
|
||||||
|
|
||||||
alias PThreadProc = extern (C) void* function(void*);
|
alias PThreadProc = extern (C) void* function(void*);
|
||||||
@ -1059,32 +1061,24 @@ ClipboardText(PlatformWindow* w, ClipboardMode mode)
|
|||||||
if(sel.owned)
|
if(sel.owned)
|
||||||
{
|
{
|
||||||
buf = GetClipboardSelection(w, sel);
|
buf = GetClipboardSelection(w, sel);
|
||||||
|
Unlock(&w.cb_mut);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Window owner = XGetSelectionOwner(w.display, sel.xmode);
|
Free(sel.data);
|
||||||
|
sel.data = [];
|
||||||
|
|
||||||
if(owner == None)
|
u64 ticket = Unlock(&w.cb_mut)+1;
|
||||||
{
|
|
||||||
Free(sel.data);
|
|
||||||
sel.data = [];
|
|
||||||
|
|
||||||
Unlock(&w.cb_mut);
|
sel.target = w.atoms[Atoms.Utf8String];
|
||||||
|
XConvertSelection(w.display, sel.xmode, sel.target, sel.xmode, w.window, CurrentTime);
|
||||||
|
XFlush(w.display);
|
||||||
|
|
||||||
u64 ticket = w.cb_mut.next_ticket;
|
while(ticket == w.cb_mut.next_ticket) {}
|
||||||
|
|
||||||
sel.target = w.atoms[Atoms.Utf8String];
|
buf = GetClipboardSelection(w, sel);
|
||||||
XConvertSelection(w.display, sel.xmode, sel.target, sel.xmode, w.window, CurrentTime);
|
|
||||||
XFlush(w.display);
|
|
||||||
|
|
||||||
while(ticket == w.cb_mut.next_ticket) {}
|
|
||||||
|
|
||||||
buf = GetClipboardSelection(w, sel);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Unlock(&w.cb_mut);
|
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user