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. */ 43 struct propdata { 44 unsigned char *data; 45 size_t length; 46 int format; 47 }; 48 49 struct 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 */ 109 extern x_selection * _selection_object; 110 111 #endif /* X_SELECTION_H */ 112