| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef UI_BASE_X_SELECTION_REQUESTOR_H_ | 5 #ifndef UI_BASE_X_SELECTION_REQUESTOR_H_ |
| 6 #define UI_BASE_X_SELECTION_REQUESTOR_H_ | 6 #define UI_BASE_X_SELECTION_REQUESTOR_H_ |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 | 55 |
| 56 // Returns the first of |types| offered by the current owner of |selection|. | 56 // Returns the first of |types| offered by the current owner of |selection|. |
| 57 // Returns an empty SelectionData object if none of |types| are available. | 57 // Returns an empty SelectionData object if none of |types| are available. |
| 58 SelectionData RequestAndWaitForTypes(XAtom selection, | 58 SelectionData RequestAndWaitForTypes(XAtom selection, |
| 59 const std::vector<XAtom>& types); | 59 const std::vector<XAtom>& types); |
| 60 | 60 |
| 61 // It is our owner's responsibility to plumb X11 SelectionNotify events on | 61 // It is our owner's responsibility to plumb X11 SelectionNotify events on |
| 62 // |xwindow_| to us. | 62 // |xwindow_| to us. |
| 63 void OnSelectionNotify(const XEvent& event); | 63 void OnSelectionNotify(const XEvent& event); |
| 64 | 64 |
| 65 // Returns true if SelectionOwner can process the XChangeProperty event, |
| 66 // |event|. |
| 67 bool CanDispatchPropertyEvent(const XEvent& event); |
| 68 |
| 69 void OnPropertyEvent(const XEvent& event); |
| 70 |
| 65 private: | 71 private: |
| 66 friend class SelectionRequestorTest; | 72 friend class SelectionRequestorTest; |
| 67 | 73 |
| 68 // A request that has been issued. | 74 // A request that has been issued. |
| 69 struct Request { | 75 struct Request { |
| 70 Request(XAtom selection, XAtom target, base::TimeTicks timeout); | 76 Request(XAtom selection, XAtom target, base::TimeTicks timeout); |
| 71 ~Request(); | 77 ~Request(); |
| 72 | 78 |
| 73 // The target and selection requested in the XConvertSelection() request. | 79 // The target and selection requested in the XConvertSelection() request. |
| 74 // Used for error detection. | 80 // Used for error detection. |
| 75 XAtom selection; | 81 XAtom selection; |
| 76 XAtom target; | 82 XAtom target; |
| 77 | 83 |
| 84 // Whether the result of the XConvertSelection() request is being sent |
| 85 // incrementally. |
| 86 bool data_sent_incrementally; |
| 87 |
| 78 // The result data for the XConvertSelection() request. | 88 // The result data for the XConvertSelection() request. |
| 79 scoped_refptr<base::RefCountedMemory> out_data; | 89 std::vector<scoped_refptr<base::RefCountedMemory> > out_data; |
| 80 size_t out_data_items; | 90 size_t out_data_items; |
| 81 XAtom out_type; | 91 XAtom out_type; |
| 82 | 92 |
| 83 // Whether the XConvertSelection() request was successful. | 93 // Whether the XConvertSelection() request was successful. |
| 84 bool success; | 94 bool success; |
| 85 | 95 |
| 86 // The time when the request should be aborted. | 96 // The time when the request should be aborted. |
| 87 base::TimeTicks timeout; | 97 base::TimeTicks timeout; |
| 88 | 98 |
| 89 // Called to terminate the nested message loop. | 99 // Called to terminate the nested message loop. |
| 90 base::Closure quit_closure; | 100 base::Closure quit_closure; |
| 91 | 101 |
| 92 // True if the request is complete. | 102 // True if the request is complete. |
| 93 bool completed; | 103 bool completed; |
| 94 }; | 104 }; |
| 95 | 105 |
| 96 // Aborts requests which have timed out. | 106 // Aborts requests which have timed out. |
| 97 void AbortStaleRequests(); | 107 void AbortStaleRequests(); |
| 98 | 108 |
| 99 // Mark |request| as completed. If the current request is completed, converts | 109 // Mark |request| as completed. If the current request is completed, converts |
| 100 // the selection for the next request. | 110 // the selection for the next request. |
| 101 void CompleteRequest(size_t index); | 111 void CompleteRequest(size_t index, bool success); |
| 102 | 112 |
| 103 // Converts the selection for the request at |current_request_index_|. | 113 // Converts the selection for the request at |current_request_index_|. |
| 104 void ConvertSelectionForCurrentRequest(); | 114 void ConvertSelectionForCurrentRequest(); |
| 105 | 115 |
| 106 // Blocks till SelectionNotify is received for the target specified in | 116 // Blocks till SelectionNotify is received for the target specified in |
| 107 // |request|. | 117 // |request|. |
| 108 void BlockTillSelectionNotifyForRequest(Request* request); | 118 void BlockTillSelectionNotifyForRequest(Request* request); |
| 109 | 119 |
| 110 // Returns the request at |current_request_index_| or NULL if there isn't any. | 120 // Returns the request at |current_request_index_| or NULL if there isn't any. |
| 111 Request* GetCurrentRequest(); | 121 Request* GetCurrentRequest(); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 139 base::RepeatingTimer<SelectionRequestor> abort_timer_; | 149 base::RepeatingTimer<SelectionRequestor> abort_timer_; |
| 140 | 150 |
| 141 X11AtomCache atom_cache_; | 151 X11AtomCache atom_cache_; |
| 142 | 152 |
| 143 DISALLOW_COPY_AND_ASSIGN(SelectionRequestor); | 153 DISALLOW_COPY_AND_ASSIGN(SelectionRequestor); |
| 144 }; | 154 }; |
| 145 | 155 |
| 146 } // namespace ui | 156 } // namespace ui |
| 147 | 157 |
| 148 #endif // UI_BASE_X_SELECTION_REQUESTOR_H_ | 158 #endif // UI_BASE_X_SELECTION_REQUESTOR_H_ |
| OLD | NEW |