1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <string.h>
32
33 #include "dnd.h"
34 #include <ucx/buffer.h>
35
36 #ifdef UI_GTK2LEGACY
37 static gboolean selection_data_set_uris(GtkSelectionData *selection_data,
char **uris) {
38 UcxBuffer *buf = ucx_buffer_new(
NULL,
1024,
UCX_BUFFER_AUTOEXTEND);
39 char *uri;
40 int i =
0;
41 while((uri = uris[i]) !=
NULL) {
42 ucx_buffer_puts(buf, uri);
43 ucx_buffer_puts(buf,
"\r\n");
44 }
45 GdkAtom type = gdk_atom_intern(
"text/uri-list",
FALSE);
46 gtk_selection_data_set(selection_data, type,
8, (guchar*)buf->space, buf->pos);
47 ucx_buffer_free(buf);
48 return TRUE;
49 }
50 static char** selection_data_get_uris(GtkSelectionData *selection_data) {
51
52 return NULL;
53 }
54 #define gtk_selection_data_set_uris selection_data_set_uris
55 #define gtk_selection_data_get_uris selection_data_get_uris
56 #endif
57
58 void ui_selection_settext(UiSelection *sel,
char *str,
int len) {
59
60 gtk_selection_data_set_text(sel->data, str, len);
61 }
62
63 void ui_selection_seturis(UiSelection *sel,
char **uris,
int nelm) {
64 char **uriarray = calloc(nelm+
1,
sizeof(
char*));
65 for(
int i=
0;i<nelm;i++) {
66 uriarray[i] = uris[i];
67 }
68 uriarray[nelm] =
NULL;
69 gtk_selection_data_set_uris(sel->data, uriarray);
70 }
71
72 char* ui_selection_gettext(UiSelection *sel) {
73 guchar *text = gtk_selection_data_get_text(sel->data);
74 if(text) {
75 char *textcp = strdup((
char*)text);
76 g_free(text);
77 return textcp;
78 }
79 return NULL;
80 }
81
82 char** ui_selection_geturis(UiSelection *sel,
size_t *nelm) {
83 gchar **uris = gtk_selection_data_get_uris(sel->data);
84 if(uris) {
85 size_t al =
32;
86 char **array = malloc(al *
sizeof(
char*));
87 size_t i =
0;
88 while(uris[i] !=
NULL) {
89 if(i >= al) {
90 al *=
2;
91 array = realloc(array, al *
sizeof(
char*));
92 }
93 array[i] = strdup((
char*)uris[i]);
94 i++;
95 }
96 *nelm = i;
97 g_strfreev(uris);
98 return array;
99 }
100 return NULL;
101 }
102