aboutsummaryrefslogtreecommitdiff
path: root/src/dirbrowserformaction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dirbrowserformaction.cpp')
-rw-r--r--src/dirbrowserformaction.cpp31
1 files changed, 13 insertions, 18 deletions
diff --git a/src/dirbrowserformaction.cpp b/src/dirbrowserformaction.cpp
index 92e26175..49cda190 100644
--- a/src/dirbrowserformaction.cpp
+++ b/src/dirbrowserformaction.cpp
@@ -1,5 +1,3 @@
-#define ENABLE_IMPLICIT_FILEPATH_CONVERSIONS
-
#include "dirbrowserformaction.h"
#include <algorithm>
@@ -177,31 +175,31 @@ void DirBrowserFormAction::update_title(const Filepath& working_directory)
FmtStrFormatter fmt;
fmt.register_fmt('N', PROGRAM_NAME);
fmt.register_fmt('V', utils::program_version());
- fmt.register_fmt('f', working_directory);
+ fmt.register_fmt('f', working_directory.display());
set_title(fmt.do_format(
cfg->get_configvalue("dirbrowser-title-format"), width));
}
-std::vector<std::string> get_sorted_dirlist()
+std::vector<Filepath> get_sorted_dirlist()
{
- std::vector<std::string> ret;
+ std::vector<Filepath> ret;
- const std::string cwdtmp = utils::getcwd();
+ const auto cwdtmp = utils::getcwd();
- DIR* dirp = ::opendir(cwdtmp.c_str());
+ DIR* dirp = ::opendir(cwdtmp.to_locale_string().c_str());
if (dirp) {
struct dirent* de = ::readdir(dirp);
while (de) {
if (strcmp(de->d_name, ".") != 0 &&
strcmp(de->d_name, "..") != 0) {
struct stat sb;
- auto dpath = strprintf::fmt(
- "%s/%s", cwdtmp, de->d_name);
- if (::lstat(dpath.c_str(), &sb) == 0) {
+ auto entry = Filepath::from_locale_string(de->d_name);
+ const auto dpath = cwdtmp.join(entry);
+ if (::lstat(dpath.to_locale_string().c_str(), &sb) == 0) {
const auto ftype = file_system::mode_to_filetype(sb.st_mode);
if (ftype == file_system::FileType::Directory) {
- ret.push_back(de->d_name);
+ ret.emplace_back(std::move(entry));
}
}
}
@@ -213,8 +211,8 @@ std::vector<std::string> get_sorted_dirlist()
std::sort(ret.begin(), ret.end());
- if (cwdtmp != "/") {
- ret.insert(ret.begin(), "..");
+ if (cwdtmp != Filepath::from_locale_string("/")) {
+ ret.emplace(ret.begin(), Filepath::from_locale_string(".."));
}
return ret;
@@ -228,14 +226,11 @@ void DirBrowserFormAction::prepare()
* in the current directory.
*/
if (do_redraw) {
- const std::string cwdtmp = utils::getcwd();
- update_title(cwdtmp);
-
- std::vector<std::string> directories = get_sorted_dirlist();
+ update_title(utils::getcwd());
id_at_position.clear();
lines.clear();
- for (std::string directory : directories) {
+ for (auto directory : get_sorted_dirlist()) {
add_directory(id_at_position, directory);
}