GUI: no system file picker on Flatpak

portals bring too many issues to deal with
issue #2490
This commit is contained in:
tildearrow 2025-04-30 15:17:07 -05:00
parent 0ea4310b22
commit 184b8efcc4
3 changed files with 18 additions and 6 deletions

View file

@ -5028,6 +5028,7 @@ bool FurnaceGUI::loop() {
} }
#ifndef NFD_NON_THREADED #ifndef NFD_NON_THREADED
#ifndef FLATPAK_WORKAROUNDS
if (fileDialog->isOpen() && settings.sysFileDialog) { if (fileDialog->isOpen() && settings.sysFileDialog) {
ImGui::OpenPopup(_("System File Dialog Pending")); ImGui::OpenPopup(_("System File Dialog Pending"));
} }
@ -5040,6 +5041,7 @@ bool FurnaceGUI::loop() {
dl->AddRectFilled(ImVec2(0.0f,0.0f),ImVec2(canvasW,canvasH),ImGui::ColorConvertFloat4ToU32(uiColors[GUI_COLOR_MODAL_BACKDROP])); dl->AddRectFilled(ImVec2(0.0f,0.0f),ImVec2(canvasW,canvasH),ImGui::ColorConvertFloat4ToU32(uiColors[GUI_COLOR_MODAL_BACKDROP]));
ImGui::EndPopup(); ImGui::EndPopup();
} }
#endif
#endif #endif
if (fileDialog->render(mobileUI?ImVec2(canvasW-(portrait?0:(60.0*dpiScale)),canvasH-60.0*dpiScale):ImVec2(600.0f*dpiScale,400.0f*dpiScale),ImVec2(canvasW-((mobileUI && !portrait)?(60.0*dpiScale):0),canvasH-(mobileUI?(60.0*dpiScale):0)))) { if (fileDialog->render(mobileUI?ImVec2(canvasW-(portrait?0:(60.0*dpiScale)),canvasH-60.0*dpiScale):ImVec2(600.0f*dpiScale,400.0f*dpiScale),ImVec2(canvasW-((mobileUI && !portrait)?(60.0*dpiScale):0),canvasH-(mobileUI?(60.0*dpiScale):0)))) {
@ -5160,13 +5162,7 @@ bool FurnaceGUI::loop() {
} else { } else {
fileName=fileDialog->getFileName()[0]; fileName=fileDialog->getFileName()[0];
} }
#ifdef FLATPAK_WORKAROUNDS
// https://github.com/tildearrow/furnace/issues/2096
// Flatpak Portals mangling our path hinders us from adding extension
if (fileName!="" && !settings.sysFileDialog) {
#else
if (fileName!="") { if (fileName!="") {
#endif
if (curFileDialog==GUI_FILE_SAVE) { if (curFileDialog==GUI_FILE_SAVE) {
checkExtension(".fur"); checkExtension(".fur");
} }

View file

@ -1873,7 +1873,9 @@ class FurnaceGUI {
int insFocusesPattern; int insFocusesPattern;
int stepOnInsert; int stepOnInsert;
int unifiedDataView; int unifiedDataView;
#ifndef FLATPAK_WORKAROUNDS
int sysFileDialog; int sysFileDialog;
#endif
int roundedWindows; int roundedWindows;
int roundedButtons; int roundedButtons;
int roundedMenus; int roundedMenus;
@ -2128,7 +2130,9 @@ class FurnaceGUI {
insFocusesPattern(1), insFocusesPattern(1),
stepOnInsert(0), stepOnInsert(0),
unifiedDataView(0), unifiedDataView(0),
#ifndef FLATPAK_WORKAROUNDS
sysFileDialog(1), sysFileDialog(1),
#endif
roundedWindows(1), roundedWindows(1),
roundedButtons(1), roundedButtons(1),
roundedMenus(0), roundedMenus(0),

View file

@ -825,11 +825,13 @@ void FurnaceGUI::drawSettings() {
// SUBSECTION FILE // SUBSECTION FILE
CONFIG_SUBSECTION(_("File")); CONFIG_SUBSECTION(_("File"));
#ifndef FLATPAK_WORKAROUNDS
bool sysFileDialogB=settings.sysFileDialog; bool sysFileDialogB=settings.sysFileDialog;
if (ImGui::Checkbox(_("Use system file picker"),&sysFileDialogB)) { if (ImGui::Checkbox(_("Use system file picker"),&sysFileDialogB)) {
settings.sysFileDialog=sysFileDialogB; settings.sysFileDialog=sysFileDialogB;
settingsChanged=true; settingsChanged=true;
} }
#endif
if (ImGui::InputInt(_("Number of recent files"),&settings.maxRecentFile,1,5)) { if (ImGui::InputInt(_("Number of recent files"),&settings.maxRecentFile,1,5)) {
if (settings.maxRecentFile<0) settings.maxRecentFile=0; if (settings.maxRecentFile<0) settings.maxRecentFile=0;
@ -4874,7 +4876,9 @@ void FurnaceGUI::readConfig(DivConfig& conf, FurnaceGUISettingGroups groups) {
settings.hiddenSystems=conf.getInt("hiddenSystems",0); settings.hiddenSystems=conf.getInt("hiddenSystems",0);
settings.mswEnabled=conf.getInt("mswEnabled",0); settings.mswEnabled=conf.getInt("mswEnabled",0);
settings.allowEditDocking=conf.getInt("allowEditDocking",1); settings.allowEditDocking=conf.getInt("allowEditDocking",1);
#ifndef FLATPAK_WORKAROUNDS
settings.sysFileDialog=conf.getInt("sysFileDialog",SYS_FILE_DIALOG_DEFAULT); settings.sysFileDialog=conf.getInt("sysFileDialog",SYS_FILE_DIALOG_DEFAULT);
#endif
settings.displayAllInsTypes=conf.getInt("displayAllInsTypes",0); settings.displayAllInsTypes=conf.getInt("displayAllInsTypes",0);
settings.displayPartial=conf.getInt("displayPartial",0); settings.displayPartial=conf.getInt("displayPartial",0);
@ -5284,7 +5288,9 @@ void FurnaceGUI::readConfig(DivConfig& conf, FurnaceGUISettingGroups groups) {
clampSetting(settings.insFocusesPattern,0,1); clampSetting(settings.insFocusesPattern,0,1);
clampSetting(settings.stepOnInsert,0,1); clampSetting(settings.stepOnInsert,0,1);
clampSetting(settings.unifiedDataView,0,1); clampSetting(settings.unifiedDataView,0,1);
#ifndef FLATPAK_WORKAROUNDS
clampSetting(settings.sysFileDialog,0,1); clampSetting(settings.sysFileDialog,0,1);
#endif
clampSetting(settings.roundedWindows,0,1); clampSetting(settings.roundedWindows,0,1);
clampSetting(settings.roundedButtons,0,1); clampSetting(settings.roundedButtons,0,1);
clampSetting(settings.roundedMenus,0,1); clampSetting(settings.roundedMenus,0,1);
@ -5470,7 +5476,9 @@ void FurnaceGUI::writeConfig(DivConfig& conf, FurnaceGUISettingGroups groups) {
conf.set("hiddenSystems",settings.hiddenSystems); conf.set("hiddenSystems",settings.hiddenSystems);
conf.set("mswEnabled",settings.mswEnabled); conf.set("mswEnabled",settings.mswEnabled);
conf.set("allowEditDocking",settings.allowEditDocking); conf.set("allowEditDocking",settings.allowEditDocking);
#ifndef FLATPAK_WORKAROUNDS
conf.set("sysFileDialog",settings.sysFileDialog); conf.set("sysFileDialog",settings.sysFileDialog);
#endif
conf.set("displayAllInsTypes",settings.displayAllInsTypes); conf.set("displayAllInsTypes",settings.displayAllInsTypes);
conf.set("displayPartial",settings.displayPartial); conf.set("displayPartial",settings.displayPartial);
@ -7207,7 +7215,11 @@ void FurnaceGUI::applyUISettings(bool updateFonts) {
if (updateFonts) { if (updateFonts) {
if (fileDialog!=NULL) delete fileDialog; if (fileDialog!=NULL) delete fileDialog;
#ifdef FLATPAK_WORKAROUNDS
fileDialog=new FurnaceGUIFileDialog(false);
#else
fileDialog=new FurnaceGUIFileDialog(settings.sysFileDialog); fileDialog=new FurnaceGUIFileDialog(settings.sysFileDialog);
#endif
fileDialog->mobileUI=mobileUI; fileDialog->mobileUI=mobileUI;
} }