diff --git a/Contrib/nsDialogs/InstallOptions.nsi b/Contrib/nsDialogs/InstallOptions.nsi index b2c68205..95b81dfb 100644 --- a/Contrib/nsDialogs/InstallOptions.nsi +++ b/Contrib/nsDialogs/InstallOptions.nsi @@ -18,6 +18,10 @@ Function nsDialogsIO InitPluginsDir File /oname=$PLUGINSDIR\io.ini "${NSISDIR}\Examples\InstallOptions\test.ini" + ${If} ${Cmd} `MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Test the right-to-left version?" IDYES` + WriteINIStr $PLUGINSDIR\io.ini Settings RTL 1 + ${EndIf} + StrCpy $0 $PLUGINSDIR\io.ini Call CreateDialogFromINI diff --git a/Contrib/nsDialogs/SConscript b/Contrib/nsDialogs/SConscript index 48b1d1f8..c2a7a9a1 100644 --- a/Contrib/nsDialogs/SConscript +++ b/Contrib/nsDialogs/SConscript @@ -5,6 +5,7 @@ files = Split(""" input.c nsDialogs.c nsis.c + rtl.c """) resources = Split(""" diff --git a/Contrib/nsDialogs/defs.h b/Contrib/nsDialogs/defs.h index dbe0a615..e322644d 100644 --- a/Contrib/nsDialogs/defs.h +++ b/Contrib/nsDialogs/defs.h @@ -16,7 +16,8 @@ enum nsControlType NSCTL_LISTBOX, NSCTL_RICHEDIT, NSCTL_RICHEDIT2, - NSCTL_STATIC + NSCTL_STATIC, + NSCTL_TREE }; struct nsDialogCallbacks @@ -52,6 +53,8 @@ struct nsDialog WNDPROC parentOriginalWndproc; + BOOL rtl; + struct nsDialogCallbacks callbacks; unsigned controlCount; diff --git a/Contrib/nsDialogs/input.c b/Contrib/nsDialogs/input.c index 67e77d91..bfda3dce 100644 --- a/Contrib/nsDialogs/input.c +++ b/Contrib/nsDialogs/input.c @@ -3,6 +3,7 @@ #include "input.h" #include "defs.h" #include "nsis.h" +#include "rtl.h" extern struct nsDialog g_dialog; @@ -73,5 +74,7 @@ int NSDFUNC PopPlacement(int *x, int *y, int *width, int *height) *height = ConvertPlacement(buf, dialogHeight, 1); + ConvertPosToRTL(x, *width, dialogWidth); + return 0; } diff --git a/Contrib/nsDialogs/nsDialogs.c b/Contrib/nsDialogs/nsDialogs.c index 9eb61b0a..db14ab55 100644 --- a/Contrib/nsDialogs/nsDialogs.c +++ b/Contrib/nsDialogs/nsDialogs.c @@ -3,6 +3,7 @@ #include "defs.h" #include "nsis.h" #include "input.h" +#include "rtl.h" HINSTANCE g_hInstance; struct nsDialog g_dialog; @@ -143,6 +144,8 @@ void __declspec(dllexport) Create(HWND hwndParent, int string_size, char *variab g_dialog.parentOriginalWndproc = (WNDPROC) SetWindowLong(hwndParent, DWL_DLGPROC, (long) ParentProc); + g_dialog.rtl = FALSE; + g_dialog.controlCount = 0; g_dialog.controls = (struct nsControl*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 0); @@ -211,6 +214,10 @@ void __declspec(dllexport) CreateItem(HWND hwndParent, int string_size, char *va else g_dialog.controls[id].type = NSCTL_UNKNOWN; + // apply rtl to style + + ConvertStyleToRTL(g_dialog.controls[id].type, &style, &exStyle); + // create item's window hwItem = CreateWindowEx( diff --git a/Contrib/nsDialogs/nsDialogs.nsh b/Contrib/nsDialogs/nsDialogs.nsh index 1eeeda4f..06b788dd 100644 --- a/Contrib/nsDialogs/nsDialogs.nsh +++ b/Contrib/nsDialogs/nsDialogs.nsh @@ -304,6 +304,9 @@ Function CreateDialogFromINI nsDialogs::Create /NOUNLOAD $R0 Pop $R9 + ReadINIStr $R0 $0 Settings RTL + nsDialogs::SetRTL /NOUNLOAD $R0 + ReadINIStr $R0 $0 Settings NumFields ${DEBUG} "NumFields = $R0"