Changeset 0ce9eb8 in mainline for uspace/app/nav/nav.c
- Timestamp:
- 2026-02-10T12:52:07Z (4 weeks ago)
- Branches:
- master
- Children:
- 857fba8
- Parents:
- 26a9388
- git-author:
- Jiri Svoboda <jiri@…> (2026-02-10 18:51:59)
- git-committer:
- Jiri Svoboda <jiri@…> (2026-02-10 12:52:07)
- File:
-
- 1 edited
-
uspace/app/nav/nav.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/nav/nav.c
r26a9388 r0ce9eb8 1 1 /* 2 * Copyright (c) 202 5Jiri Svoboda2 * Copyright (c) 2026 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 49 49 #include <ui/window.h> 50 50 #include "copy.h" 51 #include "dlg/existsdlg.h" 51 52 #include "dlg/ioerrdlg.h" 52 53 #include "menu.h" … … 106 107 .bretry = navigator_io_err_retry, 107 108 .close = navigator_io_err_close 109 }; 110 111 static void navigator_exists_overwrite(exists_dlg_t *, void *); 112 static void navigator_exists_skip(exists_dlg_t *, void *); 113 static void navigator_exists_abort(exists_dlg_t *, void *); 114 static void navigator_exists_close(exists_dlg_t *, void *); 115 116 static exists_dlg_cb_t navigator_exists_dlg_cb = { 117 .boverwrite = navigator_exists_overwrite, 118 .bskip = navigator_exists_skip, 119 .babort = navigator_exists_abort, 120 .close = navigator_exists_close 108 121 }; 109 122 … … 273 286 navigator->io_err_act_sel = false; 274 287 288 fibril_mutex_initialize(&navigator->exists_act_lock); 289 fibril_condvar_initialize(&navigator->exists_act_cv); 290 navigator->exists_act_sel = false; 291 275 292 *rnavigator = navigator; 276 293 return EOK; … … 857 874 } 858 875 876 /** Called by fmgt to query for file/directory exists recovery action. 877 * 878 * @param arg Argument (navigator_t *) 879 * @param exists File/directory exists report 880 * @return Recovery action to take. 881 */ 882 fmgt_exists_action_t navigator_exists_query(void *arg, fmgt_exists_t *exists) 883 { 884 navigator_t *nav = (navigator_t *)arg; 885 exists_dlg_t *dlg; 886 exists_dlg_params_t params; 887 fmgt_exists_action_t exists_act; 888 char *text1; 889 errno_t rc; 890 int rv; 891 892 exists_dlg_params_init(¶ms); 893 rv = asprintf(&text1, "File %s exists.", exists->fname); 894 if (rv < 0) 895 return fmgt_exr_abort; 896 897 params.text1 = text1; 898 899 ui_lock(nav->ui); 900 rc = exists_dlg_create(nav->ui, ¶ms, &dlg); 901 if (rc != EOK) { 902 ui_unlock(nav->ui); 903 free(text1); 904 return fmgt_exr_abort; 905 } 906 907 exists_dlg_set_cb(dlg, &navigator_exists_dlg_cb, (void *)nav); 908 909 ui_unlock(nav->ui); 910 free(text1); 911 912 fibril_mutex_lock(&nav->exists_act_lock); 913 914 while (!nav->exists_act_sel) { 915 fibril_condvar_wait(&nav->exists_act_cv, 916 &nav->exists_act_lock); 917 } 918 919 exists_act = nav->exists_act; 920 nav->exists_act_sel = false; 921 fibril_mutex_unlock(&nav->exists_act_lock); 922 923 return exists_act; 924 } 925 926 /** File/directory exists dialog overwrite button was pressed. 927 * 928 * @param dlg File/directory exists dialog 929 * @param arg Argument (navigator_t *) 930 */ 931 static void navigator_exists_overwrite(exists_dlg_t *dlg, void *arg) 932 { 933 navigator_t *nav = (navigator_t *)arg; 934 935 exists_dlg_destroy(dlg); 936 937 fibril_mutex_lock(&nav->exists_act_lock); 938 nav->exists_act = fmgt_exr_overwrite; 939 nav->exists_act_sel = true; 940 fibril_condvar_signal(&nav->exists_act_cv); 941 fibril_mutex_unlock(&nav->exists_act_lock); 942 } 943 944 /** File/directory exists dialog skip button was pressed. 945 * 946 * @param dlg File/directory exists dialog 947 * @param arg Argument (navigator_t *) 948 */ 949 static void navigator_exists_skip(exists_dlg_t *dlg, void *arg) 950 { 951 navigator_t *nav = (navigator_t *)arg; 952 953 exists_dlg_destroy(dlg); 954 955 fibril_mutex_lock(&nav->exists_act_lock); 956 nav->exists_act = fmgt_exr_skip; 957 nav->exists_act_sel = true; 958 fibril_condvar_signal(&nav->exists_act_cv); 959 fibril_mutex_unlock(&nav->exists_act_lock); 960 } 961 962 /** File/directory exists dialog abort button was pressed. 963 * 964 * @param dlg File/directory exists dialog 965 * @param arg Argument (navigator_t *) 966 */ 967 static void navigator_exists_abort(exists_dlg_t *dlg, void *arg) 968 { 969 navigator_t *nav = (navigator_t *)arg; 970 971 exists_dlg_destroy(dlg); 972 973 fibril_mutex_lock(&nav->exists_act_lock); 974 nav->exists_act = fmgt_exr_abort; 975 nav->exists_act_sel = true; 976 fibril_condvar_signal(&nav->exists_act_cv); 977 fibril_mutex_unlock(&nav->exists_act_lock); 978 } 979 980 /** File/directory exists dialog closure requested. 981 * 982 * @param dlg File/directory exists dialog 983 * @param arg Argument (navigator_t *) 984 */ 985 static void navigator_exists_close(exists_dlg_t *dlg, void *arg) 986 { 987 navigator_t *nav = (navigator_t *)arg; 988 989 exists_dlg_destroy(dlg); 990 991 fibril_mutex_lock(&nav->exists_act_lock); 992 nav->exists_act = fmgt_exr_abort; 993 nav->exists_act_sel = true; 994 fibril_condvar_signal(&nav->exists_act_cv); 995 fibril_mutex_unlock(&nav->exists_act_lock); 996 } 997 859 998 /** @} 860 999 */
Note:
See TracChangeset
for help on using the changeset viewer.
