From bf2c30dd9381093412c1a37bf919f8493cc4ad3b Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Thu, 19 May 2022 19:37:17 +0300 Subject: [PATCH] Fixed a bug with brackets in the Gnome file dialog (bug 56815) # Conflicts: # win-linux/src/cfiledialog.cpp --- win-linux/defaults.pri | 1 + win-linux/src/cfiledialog.cpp | 22 ++++++++++++++++++++++ win-linux/src/cmainpanel.cpp | 1 + win-linux/src/utils.cpp | 18 ++++++++++++++++++ win-linux/src/utils.h | 2 ++ 5 files changed, 44 insertions(+) diff --git a/win-linux/defaults.pri b/win-linux/defaults.pri index 0b22b1fad..d15862209 100644 --- a/win-linux/defaults.pri +++ b/win-linux/defaults.pri @@ -119,6 +119,7 @@ SOURCES += \ $$PWD/src/cascapplicationmanagerwrapper.cpp \ $$PWD/src/ctabbar.cpp \ $$PWD/src/casctabdata.cpp \ + $$PWD/src/utils.cpp \ $$PWD/src/cstyletweaks.cpp \ $$PWD/src/chelp.cpp \ $$PWD/src/cmainpanel.cpp \ diff --git a/win-linux/src/cfiledialog.cpp b/win-linux/src/cfiledialog.cpp index 051d5e4a7..8f89b46ef 100644 --- a/win-linux/src/cfiledialog.cpp +++ b/win-linux/src/cfiledialog.cpp @@ -300,6 +300,28 @@ bool CFileDialogWrapper::modalSaveAs(QString& fileName, int selected) #else QString _croped_name = fileName.left(fileName.lastIndexOf(".")); QWidget * _mess_parent = (QWidget *)parent(); + + if ( WindowHelper::getEnvInfo() == "GNOME" ) { + auto _correctGnomeFilters = [](QString &filters) -> void { + QString flt(""); + foreach (QString str, filters.split(";;")) { + const int pos = str.indexOf('('); + if (pos != -1) { + const QString suffix = str.mid(pos); + str.replace("(", "\uFF08").replace(")", "\uFF09"); + str += suffix; + } + flt += str + ";;"; + } + const int pos = flt.lastIndexOf(";;"); + if (pos != -1) + flt = flt.mid(0, pos); + filters = flt; + }; + + _correctGnomeFilters(_filters); + _correctGnomeFilters(_sel_filter); + } #endif reFilter.setPattern("\\(\\*(\\.\\w+)\\)$"); diff --git a/win-linux/src/cmainpanel.cpp b/win-linux/src/cmainpanel.cpp index 08ae44ead..53cc1b540 100644 --- a/win-linux/src/cmainpanel.cpp +++ b/win-linux/src/cmainpanel.cpp @@ -793,6 +793,7 @@ void CMainPanel::onDocumentReady(int uid) refreshAboutVersion(); emit mainPageReady(); + WindowHelper::initEnvInfo(); AscAppManager::sendCommandTo(SEND_TO_ALL_START_PAGE, L"app:ready"); focus(); // TODO: move to app manager }); diff --git a/win-linux/src/utils.cpp b/win-linux/src/utils.cpp index eec00c5dd..274bcfc3b 100644 --- a/win-linux/src/utils.cpp +++ b/win-linux/src/utils.cpp @@ -640,6 +640,24 @@ namespace WindowHelper { } } + // Linux Environment Info + QString desktop_env("OTHER"); + + auto initEnvInfo() -> void { + QProcess process; + process.setProcessChannelMode(QProcess::MergedChannels); + process.start("printenv", {"XDG_CURRENT_DESKTOP"}); + if (process.waitForFinished(2000)) { + const QString out = QString(process.readAllStandardOutput()); + if (out.indexOf("GNOME") != -1) + desktop_env = "GNOME"; + } else desktop_env = "UNDEF"; + } + + auto getEnvInfo() -> QString { + return desktop_env; + } + #else auto isWindowSystemDocked(HWND handle) -> bool { RECT windowrect; diff --git a/win-linux/src/utils.h b/win-linux/src/utils.h index 48ee12738..0d8bfdf59 100644 --- a/win-linux/src/utils.h +++ b/win-linux/src/utils.h @@ -100,6 +100,8 @@ namespace WindowHelper { }; // auto check_button_state(Qt::MouseButton b) -> bool; + auto initEnvInfo() -> void; + auto getEnvInfo() -> QString; #else auto isWindowSystemDocked(HWND handle) -> bool; auto correctWindowMinimumSize(HWND handle) -> void;