From 668fe450a4d14a4d6009c076a9f47d93cc2acccc Mon Sep 17 00:00:00 2001 From: kichik Date: Fri, 30 Nov 2007 09:54:13 +0000 Subject: [PATCH] fixed bug #1841573 - RTL components & instfiles page WS_EX_LAYOUTRTL can be used for individual controls git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@5387 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/nsDialogs/rtl.c | 2 +- Source/DialogTemplate.cpp | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Contrib/nsDialogs/rtl.c b/Contrib/nsDialogs/rtl.c index 8850c557..a2474289 100644 --- a/Contrib/nsDialogs/rtl.c +++ b/Contrib/nsDialogs/rtl.c @@ -75,7 +75,7 @@ void NSDFUNC ConvertStyleToRTL(enum nsControlType type, LPDWORD style, LPDWORD e case NSCTL_TREE: *style |= TVS_RTLREADING; - *exStyle |= WS_EX_RIGHT; + *exStyle |= WS_EX_RIGHT | WS_EX_LAYOUTRTL; break; default: diff --git a/Source/DialogTemplate.cpp b/Source/DialogTemplate.cpp index 0ece79d3..109a1d79 100644 --- a/Source/DialogTemplate.cpp +++ b/Source/DialogTemplate.cpp @@ -435,6 +435,7 @@ void CDialogTemplate::CTrimToString(WORD id, char *str, int margins) { void CDialogTemplate::ConvertToRTL() { for (unsigned int i = 0; i < m_vItems.size(); i++) { bool addExStyle = false; + bool addExLeftScrollbar = true; char *szClass; if (IS_INTRESOURCE(m_vItems[i]->szClass)) @@ -480,14 +481,22 @@ void CDialogTemplate::ConvertToRTL() { } else if (!IS_INTRESOURCE(m_vItems[i]->szClass) && !stricmp(szClass, "SysTreeView32")) { m_vItems[i]->dwStyle |= TVS_RTLREADING; + m_vItems[i]->dwExtStyle |= WS_EX_LAYOUTRTL; addExStyle = true; + addExLeftScrollbar = false; + } + else if (!IS_INTRESOURCE(m_vItems[i]->szClass) && !stricmp(szClass, "SysListView32")) { + m_vItems[i]->dwExtStyle |= WS_EX_LAYOUTRTL; + addExLeftScrollbar = false; } else addExStyle = true; if (addExStyle) m_vItems[i]->dwExtStyle |= WS_EX_RIGHT; + if (addExLeftScrollbar) + m_vItems[i]->dwExtStyle |= WS_EX_LEFTSCROLLBAR; - m_vItems[i]->dwExtStyle |= WS_EX_RTLREADING | WS_EX_LEFTSCROLLBAR; + m_vItems[i]->dwExtStyle |= WS_EX_RTLREADING; m_vItems[i]->sX = m_sWidth - m_vItems[i]->sWidth - m_vItems[i]->sX;