Skip to content

Commit ec5ccd9

Browse files
committed
Add system clipboard reads, writes and change monitoring
1 parent cdb6e3a commit ec5ccd9

27 files changed

Lines changed: 2254 additions & 1 deletion

‎CMakeLists.txt‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,6 @@ add_subdirectory(examples/desktop_features_example)
4545
if(BUILD_TESTING)
4646
add_subdirectory(tests)
4747
endif()
48+
49+
add_subdirectory(examples/clipboard_example)
50+
add_subdirectory(examples/clipboard_c_example)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
add_executable(clipboard_c_example main.c)
2+
set_target_properties(clipboard_c_example PROPERTIES LINKER_LANGUAGE CXX)
3+
target_link_libraries(clipboard_c_example PRIVATE nativeapi)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include <stdio.h>
2+
#include "../../src/capi/application_c.h"
3+
#include "../../src/capi/clipboard_c.h"
4+
5+
static void Read(bool success,
6+
const native_clipboard_data_t* data,
7+
native_event_delivery_t delivery,
8+
void* user_data) {
9+
(void)user_data;
10+
if (success)
11+
printf("text=%d html=%d image=%d files=%ld\n", data->text != NULL, data->html != NULL,
12+
data->image != 0, data->file_paths.count);
13+
// Copy data or native_handle_retain(image) before acknowledging if keeping it.
14+
native_event_delivery_complete(delivery, success);
15+
native_application_quit(success ? 0 : 1);
16+
}
17+
int main(void) {
18+
if (!native_clipboard_is_supported())
19+
return 1;
20+
native_clipboard_read(Read, NULL, NULL);
21+
return native_application_run();
22+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
add_executable(clipboard_example main.cpp)
2+
target_link_libraries(clipboard_example PRIVATE nativeapi)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include <iostream>
2+
#include "../../src/clipboard.h"
3+
#include "../../src/foundation/dispatcher.h"
4+
5+
int main(int argc, char** argv) {
6+
auto& clipboard = nativeapi::Clipboard::GetInstance();
7+
if (!nativeapi::Clipboard::IsSupported())
8+
return 1;
9+
// Passing an argument copies it; otherwise inspect the existing clipboard.
10+
if (argc > 1 && !clipboard.WriteText(argv[1]))
11+
return 1;
12+
bool done = false;
13+
bool success = false;
14+
clipboard.Read([&](bool ok, nativeapi::ClipboardData data) {
15+
success = ok;
16+
if (ok)
17+
std::cout << "text=" << bool(data.text) << " html=" << bool(data.html)
18+
<< " image=" << bool(data.image) << " files=" << data.file_paths.size() << '\n';
19+
done = true;
20+
});
21+
while (!done)
22+
nativeapi::RunMainThreadLoopFor(10);
23+
return success ? 0 : 1;
24+
}

‎include/nativeapi.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include "../src/accessibility_manager.h"
99
#include "../src/app_info.h"
1010
#include "../src/application.h"
11+
#include "../src/clipboard.h"
1112
#include "../src/device_info.h"
1213
#include "../src/dialog.h"
1314
#include "../src/display.h"
@@ -46,6 +47,7 @@
4647
#include "../src/capi/accessibility_manager_c.h"
4748
#include "../src/capi/app_info_c.h"
4849
#include "../src/capi/application_c.h"
50+
#include "../src/capi/clipboard_c.h"
4951
#include "../src/capi/color_c.h"
5052
#include "../src/capi/common_c.h"
5153
#include "../src/capi/device_info_c.h"

0 commit comments

Comments
 (0)