32 #include "toolkit.h" |
32 #include "toolkit.h" |
33 #include "toolbar.h" |
33 #include "toolbar.h" |
34 #include "stock.h" |
34 #include "stock.h" |
35 #include "../common/document.h" |
35 #include "../common/document.h" |
36 #include "../common/properties.h" |
36 #include "../common/properties.h" |
|
37 #include "../../ucx/buffer.h" |
37 |
38 |
38 static XtAppContext app; |
39 static XtAppContext app; |
39 static Display *display; |
40 static Display *display; |
|
41 static Widget active_window; |
40 static char *application_name; |
42 static char *application_name; |
41 |
43 |
42 static ui_callback appclose_fnc; |
44 static ui_callback appclose_fnc; |
43 static void *appclose_udata; |
45 static void *appclose_udata; |
44 |
46 |
48 "*fontList: -dt-interface system-medium-r-normal-s*utf*:", |
50 "*fontList: -dt-interface system-medium-r-normal-s*utf*:", |
49 NULL |
51 NULL |
50 }; |
52 }; |
51 |
53 |
52 void ui_init(char *appname, int argc, char **argv) { |
54 void ui_init(char *appname, int argc, char **argv) { |
53 char *name = application_name ? application_name : "application"; |
55 application_name = appname; |
54 |
56 |
55 XtToolkitInitialize(); |
57 XtToolkitInitialize(); |
56 XtSetLanguageProc(NULL, NULL, NULL); |
58 XtSetLanguageProc(NULL, NULL, NULL); |
57 app = XtCreateApplicationContext(); |
59 app = XtCreateApplicationContext(); |
58 |
60 |
88 } |
94 } |
89 |
95 |
90 void ui_set_enabled(UIWIDGET widget, int enabled) { |
96 void ui_set_enabled(UIWIDGET widget, int enabled) { |
91 XtSetSensitive(widget, enabled); |
97 XtSetSensitive(widget, enabled); |
92 } |
98 } |
|
99 |
|
100 void ui_clipboard_set(char *str) { |
|
101 printf("copy: {%s}\n", str); |
|
102 int length = strlen(str) + 1; |
|
103 |
|
104 Display *dp = XtDisplayOfObject(active_window); |
|
105 Window window = XtWindowOfObject(active_window); |
|
106 |
|
107 XmString label = XmStringCreateLocalized("toolkit_clipboard"); |
|
108 long id = 0; |
|
109 |
|
110 while(XmClipboardStartCopy( |
|
111 dp, |
|
112 window, |
|
113 label, |
|
114 CurrentTime, |
|
115 NULL, |
|
116 NULL, |
|
117 &id) == ClipboardLocked); |
|
118 XmStringFree(label); |
|
119 |
|
120 while(XmClipboardCopy( |
|
121 dp, |
|
122 window, |
|
123 id, |
|
124 "STRING", |
|
125 str, |
|
126 length, |
|
127 1, |
|
128 NULL) == ClipboardLocked); |
|
129 |
|
130 while(XmClipboardEndCopy(dp, window, id) == ClipboardLocked); |
|
131 } |
|
132 |
|
133 char* ui_clipboard_get() { |
|
134 Display *dp = XtDisplayOfObject(active_window); |
|
135 Window window = XtWindowOfObject(active_window); |
|
136 |
|
137 long id; |
|
138 size_t size = 128; |
|
139 char *buf = malloc(size); |
|
140 |
|
141 int r; |
|
142 for(;;) { |
|
143 r = XmClipboardRetrieve(dp, window, "STRING", buf, size, NULL, &id); |
|
144 if(r == ClipboardSuccess) { |
|
145 break; |
|
146 } else if(r == ClipboardTruncate) { |
|
147 size *= 2; |
|
148 buf = realloc(buf, size); |
|
149 } else if(r == ClipboardNoData) { |
|
150 free(buf); |
|
151 buf = NULL; |
|
152 break; |
|
153 } |
|
154 } |
|
155 |
|
156 return buf; |
|
157 } |
|
158 |
|
159 void ui_set_active_window(Widget w) { |
|
160 active_window = w; |
|
161 } |
|
162 |
|
163 Widget ui_get_active_window() { |
|
164 return active_window; |
|
165 } |