ui/motif/toolkit.c

changeset 27
77b09bb52ca0
parent 24
06bceda81a03
child 28
794a5c91c479
equal deleted inserted replaced
26:a137277f9173 27:77b09bb52ca0
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
61 uic_docmgr_init(); 63 uic_docmgr_init();
62 ui_toolbar_init(); 64 ui_toolbar_init();
63 ui_stock_init(); 65 ui_stock_init();
64 66
65 uic_load_app_properties(); 67 uic_load_app_properties();
68 }
69
70 char* ui_appname() {
71 return application_name;
66 } 72 }
67 73
68 Display* ui_get_display() { 74 Display* ui_get_display() {
69 return display; 75 return display;
70 } 76 }
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 }

mercurial