diff --git a/win-linux/src/platform_win/filechooser.cpp b/win-linux/src/platform_win/filechooser.cpp index 7f494fcb5..36700dbc0 100644 --- a/win-linux/src/platform_win/filechooser.cpp +++ b/win-linux/src/platform_win/filechooser.cpp @@ -36,6 +36,7 @@ # include #endif #include "filechooser.h" +#include "utils.h" using std::wstring; #ifndef __OS_WIN_XP @@ -248,6 +249,7 @@ QStringList Win::openWinFileChooser(QWidget *parent, QStringList filenames; HWND parent_hwnd = (parent) ? (HWND)parent->winId() : nullptr; + WindowHelper::toggleLayoutDirection(parent_hwnd); nativeFileDialog(parent_hwnd, mode, filenames, @@ -258,5 +260,6 @@ QStringList Win::openWinFileChooser(QWidget *parent, sel_filter, sel_multiple); + WindowHelper::toggleLayoutDirection(parent_hwnd); return filenames; } diff --git a/win-linux/src/platform_win/printdialog.cpp b/win-linux/src/platform_win/printdialog.cpp index 3c13a1fc4..bce29e2d4 100644 --- a/win-linux/src/platform_win/printdialog.cpp +++ b/win-linux/src/platform_win/printdialog.cpp @@ -397,6 +397,7 @@ QDialog::DialogCode PrintDialog::exec() PrintDialogCallback clb(&dialog_was_changed); dlg.lpCallback = static_cast(&clb); + WindowHelper::toggleLayoutDirection(parent_hwnd); QDialog::DialogCode exit_code = QDialog::DialogCode::Rejected; HRESULT hr = PrintDlgEx(&dlg); if (hr == S_OK) { @@ -485,6 +486,7 @@ QDialog::DialogCode PrintDialog::exec() } GlobalFree(page_ranges); + WindowHelper::toggleLayoutDirection(parent_hwnd); return exit_code; } diff --git a/win-linux/src/utils.cpp b/win-linux/src/utils.cpp index 439f421d0..2856badb2 100644 --- a/win-linux/src/utils.cpp +++ b/win-linux/src/utils.cpp @@ -1004,6 +1004,16 @@ namespace WindowHelper { ::SetActiveWindow(hwnd); ::AttachThreadInput(frgID, appID, FALSE); } + + auto toggleLayoutDirection(HWND hwnd) -> void + { + LONG exstyle = GetWindowLong(hwnd, GWL_EXSTYLE); + if (exstyle & WS_EX_LAYOUTRTL) + SetWindowLong(hwnd, GWL_EXSTYLE, exstyle & ~WS_EX_LAYOUTRTL); + else + if (AscAppManager::isRtlEnabled()) + SetWindowLong(hwnd, GWL_EXSTYLE, exstyle | WS_EX_LAYOUTRTL); + } #endif auto correctWindowMinimumSize(const QRect& windowrect, const QSize& minsize) -> QSize diff --git a/win-linux/src/utils.h b/win-linux/src/utils.h index e6f5a3a33..bf53e3b6e 100644 --- a/win-linux/src/utils.h +++ b/win-linux/src/utils.h @@ -159,6 +159,7 @@ namespace WindowHelper { auto correctModalOrder(HWND windowhandle, HWND modalhandle) -> void; auto adjustWindowRect(HWND, double, LPRECT) -> void; auto bringToTop(HWND) -> void; + auto toggleLayoutDirection(HWND hwnd) -> void; #endif auto correctWindowMinimumSize(const QRect&, const QSize&) -> QSize;