[Xquartz-dev] Proposal for PRIMARY and CLIPBOARD Copy/Paste
Jeremy Huddleston
jeremyhu at berkeley.edu
Fri Sep 12 07:40:13 PDT 2008
We want to avoid "when switching fg/bg" because this causes unexpected
bahavior when using pbcopy/pbpaste (the expected behavior would be
that pbpaste should paste whatever was just copied via cmd-c)
On Sep 12, 2008, at 05:31, Derek Fawcus wrote:
> On Thu, Sep 11, 2008 at 06:58:07PM -0600, George Peter Staplin wrote:
>>
>> How do you detect the selection when not every toolkit will set the
>> selection owner when text changes? I think it's asking for trouble
>> to
>> have every toolkit set the owner after a change. We'd have to
>> probably patch Tk, Motif, and lots of legacy apps. Some of which may
>> be compiled statically and running remotely...
>
> I've not tried it with code yet, but the documentation I've read
> for the
> pasteboard suggests it can operate in two modes, one of which is
> similar
> to how X selections work.
>
> 1) Synchronous copy - pasteboard immediately updated
> 2) Asynchronous reservation - a 'promise' is put on the pasteboard,
> and a
> form of callback is invoked when some other client tries to copy
> data
> off the pasteboard.
>
> So assume pbxproxy is a seperate add (just makes some cases easier).
>
> It would probably connect to the Window server (i.e. using Cocoa
> stuff),
> and seperately to the X server (maybe a private channel t X server).
>
> It probably also needs to know when the X server becomes a background
> app from OSX pov, so that switching between OSX apps and X apps can
> be detected.
>
> Then:
> If X app in forground:
> If CLIPBOARD selection updated, run the selection protocol to
> copy the contents to pbxproxy (for simple data types), and note
> that we have new contents.
>
> If PRIMARY selection updated, note that someone else owns primary.
>
> When X goes to background:
> If new clipboard has new contents, or primary has new contents
> then run async PB sequence to request a callback.
>
> While in background, and if get PB async callback:
> If primary has new contents (and some run time config option to
> prefer
> primary) provide it to pasteboard, else if clipboard has new
> data
> provide it to pasteboard. This may involve using the selection
> protocol to grab contents and converting. Now use sync PB
> sequence
> to place same data in pasteboard w/o getting subsequent callbacks
> (for only some or all possible data forms?).
>
> Then when X goes to foreground:
> If pasteboard has changed, note that our copy of clipboard data is
> out of date, and take CLIPBOARD selection. Optionally take
> PRIMARY
> selection as well based on some run time config option.
>
> When asked to provide data from X selection protocol:
> If we previously noted that the pasteboard contents changed on
> going to
> foreground then use PB APIs to provide data for X selection
> protocols.
>
> This should then provide a somewhat different approach to copying,
> where
> explicit copy/paste actions (menus, hot keys etc) result in
> CLIPBOARD being
> used and it consider the main data path. But if one sweeps and
> clicks to
> select/paste (xterm) it is used.
>
> The CLIPBOARD approach will be robust in that data (in someform) is
> guarenteed
> to be copied when the explicit copy action is performed, and it can
> even
> survive the program crashing/exiting. Whereas PRIMARY is the 'power
> user'
> approach which still has the possibily of data loss on crash.
>
> We then more or less use CLIPBOARD in a similar fashion to how
> macos, windows,
> and various toolkits do, while allowing those who prefer PRIMARY
> (me) to be
> comfortable.
>
> DF
> _______________________________________________
> Xquartz-dev mailing list
> Xquartz-dev at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/xquartz-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3040 bytes
Desc: not available
Url : http://lists.macosforge.org/pipermail/xquartz-dev/attachments/20080912/3db624ab/attachment.bin
More information about the Xquartz-dev
mailing list