comparison src/gui_gtk.c @ 29:ac33b7c03fac v7.0018

updated for version 7.0018
author vimboss
date Mon, 11 Oct 2004 10:16:09 +0000
parents 404aac550f35
children 410fa1a31baf
comparison
equal deleted inserted replaced
28:726bdc53fa49 29:ac33b7c03fac
1274 char_u *dflt, 1274 char_u *dflt,
1275 char_u *ext, 1275 char_u *ext,
1276 char_u *initdir, 1276 char_u *initdir,
1277 char_u *filter) 1277 char_u *filter)
1278 { 1278 {
1279 GtkFileSelection *fs; /* shortcut */ 1279 GtkFileSelection *fs; /* shortcut */
1280 char_u dirbuf[MAXPATHL]; 1280 char_u dirbuf[MAXPATHL];
1281 char_u *p; 1281 char_u *p;
1282 1282
1283 # ifdef HAVE_GTK2 1283 # ifdef HAVE_GTK2
1284 title = CONVERT_TO_UTF8(title); 1284 title = CONVERT_TO_UTF8(title);
1285 # endif 1285 # endif
1286 1286
1344 mch_dirname(dirbuf, MAXPATHL); 1344 mch_dirname(dirbuf, MAXPATHL);
1345 p = shorten_fname(gui.browse_fname, dirbuf); 1345 p = shorten_fname(gui.browse_fname, dirbuf);
1346 if (p == NULL) 1346 if (p == NULL)
1347 p = gui.browse_fname; 1347 p = gui.browse_fname;
1348 return vim_strsave(p); 1348 return vim_strsave(p);
1349 }
1350
1351 /*
1352 * Put up a directory selector
1353 * Returns the selected name in allocated memory, or NULL for Cancel.
1354 * title title for the window
1355 * dflt default name
1356 * initdir initial directory, NULL for current dir
1357 */
1358 /*ARGSUSED*/
1359 char_u *
1360 gui_mch_browsedir(
1361 char_u *title,
1362 char_u *initdir)
1363 {
1364 # if defined(GTK_FILE_CHOOSER) /* Only in GTK 2.4 and later. */
1365 char_u dirbuf[MAXPATHL];
1366 char_u *p;
1367 GtkWidget *dirdlg; /* file selection dialog */
1368 char_u *dirname = NULL;
1369
1370 title = CONVERT_TO_UTF8(title);
1371
1372 dirdlg = gtk_file_chooser_dialog_new(
1373 (const gchar *)title,
1374 GTK_WINDOW(gui.mainwin),
1375 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
1376 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
1377 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
1378 NULL);
1379
1380 CONVERT_TO_UTF8_FREE(title);
1381
1382 /* if our pointer is currently hidden, then we should show it. */
1383 gui_mch_mousehide(FALSE);
1384
1385 /* GTK appears to insist on an absolute path. */
1386 if (initdir == NULL || *initdir == NUL
1387 || vim_FullName(initdir, dirbuf, MAXPATHL - 10, FALSE) == FAIL)
1388 mch_dirname(dirbuf, MAXPATHL - 10);
1389
1390 /* Always need a trailing slash for a directory.
1391 * Also add a dummy file name, so that we get to the directory. */
1392 add_pathsep(dirbuf);
1393 STRCAT(dirbuf, "@zd(*&1|");
1394 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dirdlg),
1395 (const gchar *)dirbuf);
1396
1397 /* Run the dialog. */
1398 if (gtk_dialog_run(GTK_DIALOG(dirdlg)) == GTK_RESPONSE_ACCEPT)
1399 dirname = (char_u *)gtk_file_chooser_get_filename(
1400 GTK_FILE_CHOOSER(dirdlg));
1401 gtk_widget_destroy(dirdlg);
1402 if (dirname == NULL)
1403 return NULL;
1404
1405 /* shorten the file name if possible */
1406 mch_dirname(dirbuf, MAXPATHL);
1407 p = shorten_fname(dirname, dirbuf);
1408 if (p == NULL || *p == NUL)
1409 p = dirname;
1410 p = vim_strsave(p);
1411 g_free(dirname);
1412 return p;
1413
1414 # else
1415 /* For GTK 2.2 and earlier: fall back to ordinary file selector. */
1416 return gui_mch_browse(0, title, NULL, NULL, initdir, NULL);
1417 # endif
1349 } 1418 }
1350 1419
1351 #endif /* FEAT_BROWSE */ 1420 #endif /* FEAT_BROWSE */
1352 1421
1353 #if (defined(FEAT_GUI_DIALOG) && !defined(HAVE_GTK2)) || defined(PROTO) 1422 #if (defined(FEAT_GUI_DIALOG) && !defined(HAVE_GTK2)) || defined(PROTO)
3036 3105
3037 gtk_widget_set_uposition(child, pos_x, pos_y); 3106 gtk_widget_set_uposition(child, pos_x, pos_y);
3038 } 3107 }
3039 3108
3040 #endif /* !HAVE_GTK2 */ 3109 #endif /* !HAVE_GTK2 */
3041