Fix for Fl_Native_File_Chooser::filter_value() - cont'd (#899)

This commit is contained in:
ManoloFLTK 2024-04-22 18:35:34 +02:00
parent 576f7bb9cc
commit 5ec7176e81
3 changed files with 28 additions and 30 deletions

View File

@ -269,7 +269,7 @@ public:
/// Meaningful for the Wayland/X11 platform only. When switched on, the library uses a Zenity-based file dialog. /// Meaningful for the Wayland/X11 platform only. When switched on, the library uses a Zenity-based file dialog.
/// When switched off (default), no zenity-based file dialog is used. /// When switched off (default), no zenity-based file dialog is used.
OPTION_FNFC_USES_ZENITY, OPTION_FNFC_USES_ZENITY,
/// Meaningful for the Wayland/X11 platform only and for the KDE-Plasma desktop only. /// Meaningful for the Wayland/X11 platform only.
/// When switched on, the library uses a kdialog-based file dialog if command 'kdialog' is available on the running system. /// When switched on, the library uses a kdialog-based file dialog if command 'kdialog' is available on the running system.
/// When switched off (default), no kdialog-based file dialog is used. /// When switched off (default), no kdialog-based file dialog is used.
OPTION_FNFC_USES_KDIALOG, OPTION_FNFC_USES_KDIALOG,

View File

@ -144,7 +144,7 @@ Fo_Option_Descr g_option_list[] = {
{ FO_OPTION_BOOL, "Native File Chooser uses Kdialog:", { FO_OPTION_BOOL, "Native File Chooser uses Kdialog:",
Fl::OPTION_FNFC_USES_KDIALOG, "OPTION_FNFC_USES_KDIALOG", "UseKdialog", false, Fl::OPTION_FNFC_USES_KDIALOG, "OPTION_FNFC_USES_KDIALOG", "UseKdialog", false,
"Fl_Native_File_Chooser uses the 'kdialog' command if possible.", "Fl_Native_File_Chooser uses the 'kdialog' command if possible.",
"Meaningful for the Wayland/X11 platform and the KDE-Plasma desktop only. " "Meaningful for the Wayland/X11 platform. "
"When switched on, the library uses a kdialog-based file dialog if command 'kdialog' is " "When switched on, the library uses a kdialog-based file dialog if command 'kdialog' is "
"available. When switched off (default), command 'kdialog' is not used." }, "available. When switched off (default), command 'kdialog' is not used." },
{ FO_HEADLINE, "Print dialog Options" }, { FO_HEADLINE, "Print dialog Options" },

View File

@ -929,38 +929,36 @@ Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) {
// otherwise, use FLTK file chooser. // otherwise, use FLTK file chooser.
platform_fnfc = NULL; platform_fnfc = NULL;
fl_open_display(); fl_open_display();
if (Fl::option(Fl::OPTION_FNFC_USES_ZENITY)&& val != BROWSE_MULTI_DIRECTORY) { if (Fl::option(Fl::OPTION_FNFC_USES_ZENITY)&& val != BROWSE_MULTI_DIRECTORY) {
if (!Fl_Zenity_Native_File_Chooser_Driver::have_looked_for_zenity) { if (!Fl_Zenity_Native_File_Chooser_Driver::have_looked_for_zenity) {
// First Time here, try to find zenity // First Time here, try to find zenity
FILE *pipe = popen("zenity --version 2> /dev/null", "r"); FILE *pipe = popen("zenity --version 2> /dev/null", "r");
if (pipe) { if (pipe) {
char *p, line[100] = ""; char *p, line[100] = "";
p = fgets(line, sizeof(line), pipe); p = fgets(line, sizeof(line), pipe);
if (p && strlen(line) > 0) Fl_Zenity_Native_File_Chooser_Driver::did_find_zenity = true; if (p && strlen(line) > 0) Fl_Zenity_Native_File_Chooser_Driver::did_find_zenity = true;
pclose(pipe); pclose(pipe);
}
Fl_Zenity_Native_File_Chooser_Driver::have_looked_for_zenity = true;
} }
// if we found zenity, we will use the Fl_Zenity_Native_File_Chooser_Driver Fl_Zenity_Native_File_Chooser_Driver::have_looked_for_zenity = true;
if (Fl_Zenity_Native_File_Chooser_Driver::did_find_zenity) platform_fnfc = new Fl_Zenity_Native_File_Chooser_Driver(val);
} }
const char *desktop = getenv("XDG_CURRENT_DESKTOP"); // if we found zenity, we will use the Fl_Zenity_Native_File_Chooser_Driver
if (!platform_fnfc && Fl::option(Fl::OPTION_FNFC_USES_KDIALOG) && desktop && if (Fl_Zenity_Native_File_Chooser_Driver::did_find_zenity) platform_fnfc = new Fl_Zenity_Native_File_Chooser_Driver(val);
strcmp(desktop, "KDE") == 0 && val != BROWSE_MULTI_DIRECTORY) { }
if (!Fl_Kdialog_Native_File_Chooser_Driver::have_looked_for_kdialog) { if (!platform_fnfc && Fl::option(Fl::OPTION_FNFC_USES_KDIALOG) && val != BROWSE_MULTI_DIRECTORY) {
// First Time here, try to find kdialog if (!Fl_Kdialog_Native_File_Chooser_Driver::have_looked_for_kdialog) {
FILE *pipe = popen("kdialog -v 2> /dev/null", "r"); // First Time here, try to find kdialog
if (pipe) { FILE *pipe = popen("kdialog -v 2> /dev/null", "r");
char *p, line[100] = ""; if (pipe) {
p = fgets(line, sizeof(line), pipe); char *p, line[100] = "";
if (p && strlen(line) > 0) Fl_Kdialog_Native_File_Chooser_Driver::did_find_kdialog = true; p = fgets(line, sizeof(line), pipe);
pclose(pipe); if (p && strlen(line) > 0) Fl_Kdialog_Native_File_Chooser_Driver::did_find_kdialog = true;
} pclose(pipe);
Fl_Kdialog_Native_File_Chooser_Driver::have_looked_for_kdialog = true;
} }
// if we found kdialog, we will use the Fl_Kdialog_Native_File_Chooser_Driver Fl_Kdialog_Native_File_Chooser_Driver::have_looked_for_kdialog = true;
if (Fl_Kdialog_Native_File_Chooser_Driver::did_find_kdialog) platform_fnfc = new Fl_Kdialog_Native_File_Chooser_Driver(val);
} }
// if we found kdialog, we will use the Fl_Kdialog_Native_File_Chooser_Driver
if (Fl_Kdialog_Native_File_Chooser_Driver::did_find_kdialog) platform_fnfc = new Fl_Kdialog_Native_File_Chooser_Driver(val);
}
#if HAVE_DLSYM && HAVE_DLFCN_H #if HAVE_DLSYM && HAVE_DLFCN_H
if (!platform_fnfc) { if (!platform_fnfc) {
if (Fl::option(Fl::OPTION_FNFC_USES_GTK)) { if (Fl::option(Fl::OPTION_FNFC_USES_GTK)) {