ui/motif/window.c

changeset 926
32b16cbca280
parent 925
df27741d02b5
child 930
4ce8df2311f0
equal deleted inserted replaced
925:df27741d02b5 926:32b16cbca280
26 * POSSIBILITY OF SUCH DAMAGE. 26 * POSSIBILITY OF SUCH DAMAGE.
27 */ 27 */
28 28
29 #include <stdio.h> 29 #include <stdio.h>
30 #include <stdlib.h> 30 #include <stdlib.h>
31 #include <errno.h>
32 #include <limits.h>
33 #include <unistd.h>
31 34
32 #include "toolkit.h" 35 #include "toolkit.h"
33 #include "menu.h" 36 #include "menu.h"
34 #include "toolbar.h" 37 #include "toolbar.h"
35 #include "container.h" 38 #include "container.h"
39 #include "pathbar.h"
36 #include "../ui/window.h" 40 #include "../ui/window.h"
37 #include "../common/context.h" 41 #include "../common/context.h"
38 42
39 #include "Grid.h" 43 #include "Grid.h"
40 #include "Fsb.h" 44 #include "Fsb.h"
208 212
209 XtManageChild(dialog); 213 XtManageChild(dialog);
210 } 214 }
211 215
212 void ui_savefiledialog(UiObject *obj, const char *name, ui_callback file_selected_callback, void *cbdata) { 216 void ui_savefiledialog(UiObject *obj, const char *name, ui_callback file_selected_callback, void *cbdata) {
213 217 Arg args[16];
214 } 218 int n = 0;
219
220 // Save File Dialog needs this parameter
221 XtSetArg(args[n], XnNfsbType, FILEDIALOG_SAVE); n++;
222 char *selectedpath = (char*)name;
223 if(name) {
224 if(name[0] != '/') {
225 char cwd[PATH_MAX];
226 if(getcwd(cwd, PATH_MAX)) {
227 pathbar_concat_path(cwd, name);
228 } else {
229 fprintf(stderr, "Error: getcwd failed: %s\n", strerror(errno));
230 selectedpath = NULL;
231 }
232 }
233 if(selectedpath) {
234 XtSetArg(args[n], XnNselectedPath, selectedpath); n++;
235 }
236 }
237 Widget dialog = XnCreateFileSelectionDialog(obj->widget, "dialog", args, n);
238
239 UiEventData *data = malloc(sizeof(UiEventData));
240 memset(data, 0, sizeof(UiEventData));
241 data->obj = obj;
242 data->callback = file_selected_callback;
243 data->userdata = cbdata;
244
245 XtAddCallback(dialog, XmNokCallback, (XtCallbackProc)filedialog_select, data);
246 XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)filedialog_cancel, data);
247 //XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)filedialog_help, wd);
248
249 XtManageChild(dialog);
250
251 if(selectedpath != name) {
252 free(selectedpath);
253 }
254 }

mercurial