1/* x-selection.h -- proxies between NSPasteboard and X11 selections
2 *
3 * Copyright (c) 2002-2012 Apple Inc. All rights reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person
6 * obtaining a copy of this software and associated documentation files
7 * (the "Software"), to deal in the Software without restriction,
8 * including without limitation the rights to use, copy, modify, merge,
9 * publish, distribute, sublicense, and/or sell copies of the Software,
10 * and to permit persons to whom the Software is furnished to do so,
11 * subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be
14 * included in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NONINFRINGEMENT.  IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT
20 * HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 * DEALINGS IN THE SOFTWARE.
24 *
25 * Except as contained in this notice, the name(s) of the above
26 * copyright holders shall not be used in advertising or otherwise to
27 * promote the sale, use or other dealings in this Software without
28 * prior written authorization.
29 */
30
31#ifndef X_SELECTION_H
32#define X_SELECTION_H 1
33
34#include "pbproxy.h"
35
36#define  Cursor X_Cursor
37#include <X11/extensions/Xfixes.h>
38#undef Cursor
39
40#include <AppKit/NSPasteboard.h>
41
42/* This stores image data or text. */
43struct propdata {
44    unsigned char *data;
45    size_t length;
46    int format;
47};
48
49struct atom_list {
50    Atom primary, clipboard, text, utf8_string, string, targets, multiple,
51         cstring, image_png, image_jpeg, incr, atom, clipboard_manager,
52         compound_text, atom_pair;
53};
54
55@interface x_selection : NSObject
56{
57    @private
58
59    /* The unmapped window we use for fetching selections. */
60    Window _selection_window;
61
62    Atom request_atom;
63
64    struct {
65        struct propdata propdata;
66        Window requestor;
67        Atom selection;
68    } pending;
69
70    /*
71     * This is the number of times the user has requested a copy.
72     * Once the copy is completed, we --pending_copy, and if the
73     * pending_copy is > 0 we do it again.
74     */
75    int pending_copy;
76    /*
77     * This is used for the same purpose as pending_copy, but for the
78     * CLIPBOARD.  It also prevents a race with INCR transfers.
79     */
80    int pending_clipboard;
81
82    struct atom_list atoms[1];
83}
84
85- (void)x_active:(Time)timestamp;
86- (void)x_inactive:(Time)timestamp;
87
88- (void)x_copy:(Time)timestamp;
89
90- (void)clear_event:(XSelectionClearEvent *)e;
91- (void)request_event:(XSelectionRequestEvent *)e;
92- (void)notify_event:(XSelectionEvent *)e;
93- (void)property_event:(XPropertyEvent *)e;
94- (void)xfixes_selection_notify:(XFixesSelectionNotifyEvent *)e;
95- (void)handle_selection:(Atom) selection type:(Atom) type propdata:(struct
96                                                                     propdata
97                                                                     *)pdata;
98- (void)claim_clipboard;
99- (BOOL)set_clipboard_manager_status:(BOOL)value;
100- (void)own_clipboard;
101- (void)copy_completed:(Atom)selection;
102
103- (void)reload_preferences;
104- (BOOL)is_active;
105- (void)send_none:(XSelectionRequestEvent *)e;
106@end
107
108/* main.m */
109extern x_selection * _selection_object;
110
111#endif /* X_SELECTION_H */
112