Merge lp:~dandrader/platform-api/removeMirClipboard into lp:platform-api

Proposed by Daniel d'Andrada
Status: Merged
Approved by: Robert Carr
Approved revision: 266
Merged at revision: 278
Proposed branch: lp:~dandrader/platform-api/removeMirClipboard
Merge into: lp:platform-api
Diff against target: 260 lines (+19/-116)
8 files modified
CMakeLists.txt (+0/-5)
debian/control (+0/-1)
include/ubuntu/application/ui/clipboard.h (+8/-0)
src/ubuntu/application/common/mirclient/CMakeLists.txt (+0/-8)
src/ubuntu/application/common/mirclient/application_instance_mirclient.cpp (+1/-3)
src/ubuntu/application/common/mirclient/application_instance_mirclient_priv.h (+3/-18)
src/ubuntu/application/common/mirclient/ubuntu_application_api_mirclient.cpp (+7/-64)
src/ubuntu/application/common/mirclient/unityrpc.proto (+0/-17)
To merge this branch: bzr merge lp:~dandrader/platform-api/removeMirClipboard
Reviewer Review Type Date Requested Status
Robert Carr (community) Approve
PS Jenkins bot continuous-integration Approve
Review via email: mp+237094@code.launchpad.net

Commit message

Remove clipboard implementation

- Using Mir custom messages as the RPC method is bad because
  it's not possible for the server to send a message/signal to the
  client. We need this to tell a client when the global clipboard
  contents have changed. Besides there's currently a bug in mir
  custom messages that hasn't been dealt with.

- The clipboard API is bad. See comments in clipboard.h

Description of the change

This is already dead code as we are currently using D-Bus as the clipboard IPC.

A TODO item is to move the code that does the clipboard access through D-Bus from qtubuntu to here.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Robert Carr (robertcarr) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'CMakeLists.txt'
2--- CMakeLists.txt 2014-09-29 20:55:58 +0000
3+++ CMakeLists.txt 2014-10-03 15:46:47 +0000
4@@ -61,11 +61,6 @@
5 pkg_check_modules(MIRSERVER REQUIRED mirserver)
6 pkg_check_modules(MIRCLIENT REQUIRED mirclient)
7
8-find_package(Protobuf REQUIRED)
9-if(PROTOBUF_PROTOC_EXECUTABLE STREQUAL "PROTOBUF_PROTOC_EXECUTABLE-NOTFOUND")
10- message(SEND_ERROR "protoc executable not found! Missing protobuf-compiler package?")
11-endif()
12-
13 # Try to find hybris, and disable hybris from build if not found
14 find_library(Hybris
15 NAMES hybris-common
16
17=== modified file 'debian/control'
18--- debian/control 2014-08-06 08:33:54 +0000
19+++ debian/control 2014-10-03 15:46:47 +0000
20@@ -23,7 +23,6 @@
21 libgtest-dev,
22 libprocess-cpp-dev (>= 0.0.1+14.04.20131212),
23 libproperties-cpp-dev,
24- protobuf-compiler,
25 Standards-Version: 3.9.4
26 Homepage: https://launchpad.net/platform-api
27 Vcs-Bzr: lp:platform-api
28
29=== modified file 'include/ubuntu/application/ui/clipboard.h'
30--- include/ubuntu/application/ui/clipboard.h 2014-02-07 14:32:44 +0000
31+++ include/ubuntu/application/ui/clipboard.h 2014-10-03 15:46:47 +0000
32@@ -26,6 +26,9 @@
33 extern "C" {
34 #endif
35
36+ /*
37+ FIXME: See ua_ui_get_clipboard_content
38+ */
39 UBUNTU_DLL_PUBLIC void
40 ua_ui_set_clipboard_content(
41 void* data,
42@@ -36,6 +39,11 @@
43 Caller is expected to not attempt to modify or delete it.
44 It's also not guaranteed to remain valid after any other call is made
45 to the Ubuntu Application API.
46+
47+ FIXME:
48+ This API is bad as the user has no idea what kind of data the clipboard
49+ contains. It should provide a mapping between mime types (as plain ascii strings)
50+ and their respective data so the user is able to interpret the contents properly.
51 */
52 UBUNTU_DLL_PUBLIC void
53 ua_ui_get_clipboard_content(
54
55=== modified file 'src/ubuntu/application/common/mirclient/CMakeLists.txt'
56--- src/ubuntu/application/common/mirclient/CMakeLists.txt 2014-08-06 08:33:54 +0000
57+++ src/ubuntu/application/common/mirclient/CMakeLists.txt 2014-10-03 15:46:47 +0000
58@@ -1,14 +1,8 @@
59-protobuf_generate_cpp(
60- GENERATED_PROTOBUF_SRCS GENERATED_PROTOBUF_HDRS
61- unityrpc.proto
62-)
63-
64 set(SOURCES
65 ubuntu_application_api_mirclient.cpp
66 application_instance_mirclient.cpp
67 window_properties_mirclient.cpp
68 window_mirclient.cpp
69- ${GENERATED_PROTOBUF_SRCS}
70 )
71
72 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11 -fPIC")
73@@ -16,7 +10,6 @@
74 include_directories(
75 ${CMAKE_BINARY_DIR}/include
76 ${MIRCLIENT_INCLUDE_DIRS}
77- ${PROTOBUF_INCLUDE_DIRS}
78 ${CMAKE_CURRENT_BINARY_DIR}
79 )
80
81@@ -29,5 +22,4 @@
82 ubuntu_application_api_mirclient
83
84 ${MIRCLIENT_LDFLAGS} ${MIRCLIENT_LIBRARIES}
85- ${PROTOBUF_LIBRARIES}
86 )
87
88=== modified file 'src/ubuntu/application/common/mirclient/application_instance_mirclient.cpp'
89--- src/ubuntu/application/common/mirclient/application_instance_mirclient.cpp 2014-02-07 14:32:44 +0000
90+++ src/ubuntu/application/common/mirclient/application_instance_mirclient.cpp 2014-10-03 15:46:47 +0000
91@@ -22,10 +22,8 @@
92
93 uamc::Instance::Instance()
94 : con(nullptr),
95- ref_count(1),
96- rpc_waiting_reply(false)
97+ ref_count(1)
98 {
99-
100 }
101
102 UApplicationInstance* uamc::Instance::as_u_application_instance()
103
104=== modified file 'src/ubuntu/application/common/mirclient/application_instance_mirclient_priv.h'
105--- src/ubuntu/application/common/mirclient/application_instance_mirclient_priv.h 2014-02-07 14:32:44 +0000
106+++ src/ubuntu/application/common/mirclient/application_instance_mirclient_priv.h 2014-10-03 15:46:47 +0000
107@@ -23,13 +23,9 @@
108
109 #include <memory>
110 #include <string>
111-#include <condition_variable>
112-#include <mutex>
113
114 #include <mir_toolkit/mir_client_library.h>
115
116-#include <unityrpc.pb.h>
117-
118 namespace ubuntu
119 {
120 namespace application
121@@ -43,27 +39,16 @@
122 public:
123 Instance();
124 ~Instance() = default;
125-
126+
127 UApplicationInstance* as_u_application_instance();
128 static Instance* from_u_application_instance(UApplicationInstance* u_instance);
129-
130+
131 void ref();
132 void unref();
133-
134+
135 MirConnection* connection() const;
136 bool connect(std::string const& application_name);
137
138- // Variables used for direct protobuf manipulation. Needed for calling unity8 functions
139- // through the mir_socket.
140- unity::protobuf::Clip rpc_clip;
141- unity::protobuf::Void rpc_void;
142- std::condition_variable rpc_condition_variable;
143- std::mutex rpc_mutex;
144- bool rpc_waiting_reply;
145- // ensure one clipboard operation (copy or paste) at a time.
146- std::mutex clipboard_api_mutex;
147- std::string clip;
148-
149 protected:
150 Instance(Instance const&) = delete;
151 Instance& operator=(Instance const&) = delete;
152
153=== modified file 'src/ubuntu/application/common/mirclient/ubuntu_application_api_mirclient.cpp'
154--- src/ubuntu/application/common/mirclient/ubuntu_application_api_mirclient.cpp 2014-09-22 22:52:59 +0000
155+++ src/ubuntu/application/common/mirclient/ubuntu_application_api_mirclient.cpp 2014-10-03 15:46:47 +0000
156@@ -142,75 +142,18 @@
157 (void) instance;
158 }
159
160-namespace {
161-void got_rpc_reply_callback(uamc::Instance* instance)
162-{
163- {
164- std::unique_lock<std::mutex> rpc_lock(instance->rpc_mutex);
165- instance->rpc_waiting_reply = false;
166- }
167- instance->rpc_condition_variable.notify_all();
168-}
169-} // anonymous namespace
170-
171-void ua_ui_set_clipboard_content(void* content, size_t content_size)
172-{
173- // TODO<papi>: We will need a MirConnection.
174- // Add a non-blocking version?
175-
176- uamc::Instance* instance = global_mir_instance();
177- std::unique_lock<std::mutex> clipboard_lock(instance->clipboard_api_mutex);
178- std::unique_lock<std::mutex> rpc_lock(instance->rpc_mutex);
179- auto const rpc_channel = mir::client::the_rpc_channel(instance->connection());
180-
181- std::string contentString(reinterpret_cast<char*>(content), content_size);
182-
183- unity::protobuf::UnityService::Stub unityService(rpc_channel.get(),
184- google::protobuf::Service::STUB_DOESNT_OWN_CHANNEL);
185-
186- instance->rpc_clip.set_content(contentString);
187-
188- instance->rpc_waiting_reply = true;
189- unityService.copy(
190- nullptr, /* rpc_controller */
191- &instance->rpc_clip, /* request */
192- &instance->rpc_void,
193- google::protobuf::NewCallback(&got_rpc_reply_callback, instance));
194-
195- // Wait until we get a reply from the server
196- instance->rpc_condition_variable.wait(rpc_lock, [&]{return !instance->rpc_waiting_reply;});
197+void ua_ui_set_clipboard_content(void* /*content*/, size_t /*content_size*/)
198+{
199+ // TODO<papi>: Fix API and implement it
200+ printf("ERROR: ua_ui_set_clipboard_content() is not implemented!\n");
201 }
202
203 void ua_ui_get_clipboard_content(void** out_content, size_t* out_content_size)
204 {
205- // TODO<papi>: see get_clipboard_comment.
206-
207- uamc::Instance* instance = global_mir_instance();
208- std::unique_lock<std::mutex> clipboard_lock(instance->clipboard_api_mutex);
209- std::unique_lock<std::mutex> rpc_lock(instance->rpc_mutex);
210-
211- *out_content = NULL;
212+ // TODO<papi>: Fix API and implement it
213+ printf("ERROR: ua_ui_get_clipboard_content() is not implemented!\n");
214+ *out_content = nullptr;
215 *out_content_size = 0;
216-
217- auto const rpc_channel = mir::client::the_rpc_channel(instance->connection());
218- unity::protobuf::UnityService::Stub unityService(rpc_channel.get(),
219- google::protobuf::Service::STUB_DOESNT_OWN_CHANNEL);
220-
221- unityService.paste(
222- nullptr, /* rpc_controller */
223- &instance->rpc_void, /* request */
224- &instance->rpc_clip, /* response */
225- google::protobuf::NewCallback(&got_rpc_reply_callback, instance));
226-
227- // Wait until we get a reply from the server
228- instance->rpc_condition_variable.wait(rpc_lock, [&]{return !instance->rpc_waiting_reply;});
229-
230- instance->clip = instance->rpc_clip.content();
231- if (!instance->clip.empty()) {
232- *out_content_size = instance->clip.size();
233- // argh!
234- *out_content = const_cast<void*>(static_cast<const void*>(instance->clip.data()));
235- }
236 }
237
238 //
239
240=== removed file 'src/ubuntu/application/common/mirclient/unityrpc.proto'
241--- src/ubuntu/application/common/mirclient/unityrpc.proto 2014-02-07 14:32:44 +0000
242+++ src/ubuntu/application/common/mirclient/unityrpc.proto 1970-01-01 00:00:00 +0000
243@@ -1,17 +0,0 @@
244-option cc_generic_services = true;
245-
246-package unity.protobuf;
247-
248-message Clip {
249- required bytes content = 1;
250- optional string error = 127;
251-}
252-
253-message Void {
254- optional string error = 127;
255-}
256-
257-service UnityService {
258- rpc copy(Clip) returns (Void);
259- rpc paste(Void) returns (Clip);
260-}

Subscribers

People subscribed via source and target branches