Skip to content

Commit 210ae0e

Browse files
authored
Portal: Support defaultPath for OpenDialog, OpenDialogMultiple, and PickFolder (#108)
This has been implemented in flatpak/xdg-desktop-portal#1045.
1 parent dbd7139 commit 210ae0e

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

src/nfd_portal.cpp

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ void AppendSaveFileQueryDictEntryCurrentName(DBusMessageIter& sub_iter, const ch
484484
dbus_message_iter_close_container(&sub_iter, &sub_sub_iter);
485485
}
486486

487-
void AppendSaveFileQueryDictEntryCurrentFolder(DBusMessageIter& sub_iter, const char* path) {
487+
void AppendOpenFileQueryDictEntryCurrentFolder(DBusMessageIter& sub_iter, const char* path) {
488488
if (!path) return;
489489
DBusMessageIter sub_sub_iter;
490490
DBusMessageIter variant_iter;
@@ -551,7 +551,8 @@ template <bool Multiple, bool Directory>
551551
void AppendOpenFileQueryParams(DBusMessage* query,
552552
const char* handle_token,
553553
const nfdnfilteritem_t* filterList,
554-
nfdfiltersize_t filterCount) {
554+
nfdfiltersize_t filterCount,
555+
const nfdnchar_t* defaultPath) {
555556
DBusMessageIter iter;
556557
dbus_message_iter_init_append(query, &iter);
557558

@@ -565,6 +566,7 @@ void AppendOpenFileQueryParams(DBusMessage* query,
565566
AppendOpenFileQueryDictEntryMultiple<Multiple>(sub_iter);
566567
AppendOpenFileQueryDictEntryDirectory<Directory>(sub_iter);
567568
AppendOpenFileQueryDictEntryFilters<!Directory>(sub_iter, filterList, filterCount);
569+
AppendOpenFileQueryDictEntryCurrentFolder(sub_iter, defaultPath);
568570
dbus_message_iter_close_container(&iter, &sub_iter);
569571
}
570572

@@ -587,7 +589,7 @@ void AppendSaveFileQueryParams(DBusMessage* query,
587589
AppendOpenFileQueryDictEntryHandleToken(sub_iter, handle_token);
588590
AppendSaveFileQueryDictEntryFilters(sub_iter, filterList, filterCount, defaultName);
589591
AppendSaveFileQueryDictEntryCurrentName(sub_iter, defaultName);
590-
AppendSaveFileQueryDictEntryCurrentFolder(sub_iter, defaultPath);
592+
AppendOpenFileQueryDictEntryCurrentFolder(sub_iter, defaultPath);
591593
AppendSaveFileQueryDictEntryCurrentFile(sub_iter, defaultPath, defaultName);
592594
dbus_message_iter_close_container(&iter, &sub_iter);
593595
}
@@ -1120,7 +1122,8 @@ nfdresult_t AllocAndCopyFilePathWithExtn(const char* fileUri, const char* extn,
11201122
template <bool Multiple, bool Directory>
11211123
nfdresult_t NFD_DBus_OpenFile(DBusMessage*& outMsg,
11221124
const nfdnfilteritem_t* filterList,
1123-
nfdfiltersize_t filterCount) {
1125+
nfdfiltersize_t filterCount,
1126+
const nfdnchar_t* defaultPath) {
11241127
const char* handle_token_ptr;
11251128
char* handle_obj_path = MakeUniqueObjectPath(&handle_token_ptr);
11261129
Free_Guard<char> handle_obj_path_guard(handle_obj_path);
@@ -1141,7 +1144,7 @@ nfdresult_t NFD_DBus_OpenFile(DBusMessage*& outMsg,
11411144
DBUS_DESTINATION, DBUS_PATH, DBUS_FILECHOOSER_IFACE, "OpenFile");
11421145
DBusMessage_Guard query_guard(query);
11431146
AppendOpenFileQueryParams<Multiple, Directory>(
1144-
query, handle_token_ptr, filterList, filterCount);
1147+
query, handle_token_ptr, filterList, filterCount, defaultPath);
11451148

11461149
DBusMessage* reply =
11471150
dbus_connection_send_with_reply_and_block(dbus_conn, query, DBUS_TIMEOUT_INFINITE, &err);
@@ -1372,11 +1375,10 @@ nfdresult_t NFD_OpenDialogN(nfdnchar_t** outPath,
13721375
const nfdnfilteritem_t* filterList,
13731376
nfdfiltersize_t filterCount,
13741377
const nfdnchar_t* defaultPath) {
1375-
(void)defaultPath; // Default path not supported for portal backend
1376-
13771378
DBusMessage* msg;
13781379
{
1379-
const nfdresult_t res = NFD_DBus_OpenFile<false, false>(msg, filterList, filterCount);
1380+
const nfdresult_t res =
1381+
NFD_DBus_OpenFile<false, false>(msg, filterList, filterCount, defaultPath);
13801382
if (res != NFD_OKAY) {
13811383
return res;
13821384
}
@@ -1398,11 +1400,10 @@ nfdresult_t NFD_OpenDialogMultipleN(const nfdpathset_t** outPaths,
13981400
const nfdnfilteritem_t* filterList,
13991401
nfdfiltersize_t filterCount,
14001402
const nfdnchar_t* defaultPath) {
1401-
(void)defaultPath; // Default path not supported for portal backend
1402-
14031403
DBusMessage* msg;
14041404
{
1405-
const nfdresult_t res = NFD_DBus_OpenFile<true, false>(msg, filterList, filterCount);
1405+
const nfdresult_t res =
1406+
NFD_DBus_OpenFile<true, false>(msg, filterList, filterCount, defaultPath);
14061407
if (res != NFD_OKAY) {
14071408
return res;
14081409
}
@@ -1479,7 +1480,7 @@ nfdresult_t NFD_PickFolderN(nfdnchar_t** outPath, const nfdnchar_t* defaultPath)
14791480

14801481
DBusMessage* msg;
14811482
{
1482-
const nfdresult_t res = NFD_DBus_OpenFile<false, true>(msg, nullptr, 0);
1483+
const nfdresult_t res = NFD_DBus_OpenFile<false, true>(msg, nullptr, 0, defaultPath);
14831484
if (res != NFD_OKAY) {
14841485
return res;
14851486
}

0 commit comments

Comments
 (0)