Changeset 0e125698 in mainline for uspace/app/nav/panel.c
- Timestamp:
- 2021-10-16T20:41:33Z (4 years ago)
- Children:
- fd6dc08
- Parents:
- 9bed565
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/nav/panel.c
r9bed565 r0e125698 281 281 panel_page_down(panel); 282 282 break; 283 case KC_ENTER: 284 panel_open(panel, panel->cursor); 285 break; 283 286 default: 284 287 break; … … 344 347 * 345 348 * @param panel Panel 346 */ 347 void panel_activate(panel_t *panel) 348 { 349 * 350 * @return EOK on success or an error code 351 */ 352 errno_t panel_activate(panel_t *panel) 353 { 354 errno_t rc; 355 356 if (panel->dir != NULL) { 357 rc = vfs_cwd_set(panel->dir); 358 if (rc != EOK) 359 return rc; 360 } 361 349 362 panel->active = true; 350 363 (void) panel_paint(panel); 364 return EOK; 351 365 } 352 366 … … 485 499 struct dirent *dirent; 486 500 vfs_stat_t finfo; 501 char newdir[256]; 502 char *ndir = NULL; 487 503 errno_t rc; 488 504 489 dir = opendir(dirname); 490 if (dir == NULL) 491 return errno; 505 rc = vfs_cwd_set(dirname); 506 if (rc != EOK) 507 return rc; 508 509 rc = vfs_cwd_get(newdir, sizeof(newdir)); 510 if (rc != EOK) 511 return rc; 512 513 ndir = str_dup(newdir); 514 if (ndir == NULL) 515 return ENOMEM; 516 517 dir = opendir("."); 518 if (dir == NULL) { 519 rc = errno; 520 goto error; 521 } 522 523 if (str_cmp(ndir, "/") != 0) { 524 /* Need to add a synthetic up-dir entry */ 525 rc = panel_entry_append(panel, "..", 0, true); 526 if (rc != EOK) 527 goto error; 528 } 492 529 493 530 dirent = readdir(dir); 494 531 while (dirent != NULL) { 495 532 rc = vfs_stat_path(dirent->d_name, &finfo); 496 if (rc != EOK) 497 goto error; 498 499 rc = panel_entry_append(panel, dirent->d_name, 1, 533 if (rc != EOK) { 534 /* Possibly a stale entry */ 535 dirent = readdir(dir); 536 continue; 537 } 538 539 rc = panel_entry_append(panel, dirent->d_name, finfo.size, 500 540 finfo.is_directory); 501 541 if (rc != EOK) … … 515 555 panel->page = panel_first(panel); 516 556 panel->page_idx = 0; 557 free(panel->dir); 558 panel->dir = ndir; 517 559 return EOK; 518 560 error: 519 closedir(dir); 561 (void) vfs_cwd_set(panel->dir); 562 if (ndir != NULL) 563 free(ndir); 564 if (dir != NULL) 565 closedir(dir); 520 566 return rc; 521 567 } … … 870 916 } 871 917 918 /** Open panel entry. 919 * 920 * Perform Open action on a panel entry (e.g. switch to a subdirectory). 921 * 922 * @param panel Panel 923 * @param entry Panel entry 924 * 925 * @return EOK on success or an error code 926 */ 927 errno_t panel_open(panel_t *panel, panel_entry_t *entry) 928 { 929 gfx_context_t *gc = ui_window_get_gc(panel->window); 930 char *dirname; 931 errno_t rc; 932 933 if (!entry->isdir) 934 return EOK; 935 936 dirname = str_dup(entry->name); 937 panel_clear_entries(panel); 938 939 rc = panel_read_dir(panel, dirname); 940 if (rc != EOK) { 941 free(dirname); 942 return rc; 943 } 944 945 rc = panel_paint(panel); 946 if (rc != EOK) { 947 free(dirname); 948 return rc; 949 } 950 951 free(dirname); 952 return gfx_update(gc); 953 } 954 872 955 /** @} 873 956 */
Note:
See TracChangeset
for help on using the changeset viewer.