https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b608ba9798dc5bf7e7e6b…
commit b608ba9798dc5bf7e7e6b9ee400d833e39860e2a
Author: winesync <ros-dev(a)reactos.org>
AuthorDate: Sun Mar 13 00:04:01 2022 +0100
Commit: Mark Jansen <mark.jansen(a)reactos.org>
CommitDate: Sun Mar 20 19:28:04 2022 +0100
[WINESYNC] msi: Add support for control event DirectoryListNew.
Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=25687
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
wine commit id 97a7a4ff0c8895c3ef1979eeee988c4c121d9839 by Hans Leidekker
<hans(a)codeweavers.com>
---
dll/win32/msi/dialog.c | 164 +++++++++++++++++++++++++++++++------------
dll/win32/msi/lang/msi_Bg.rc | 1 +
dll/win32/msi/lang/msi_Da.rc | 1 +
dll/win32/msi/lang/msi_De.rc | 1 +
dll/win32/msi/lang/msi_En.rc | 1 +
dll/win32/msi/lang/msi_Es.rc | 1 +
dll/win32/msi/lang/msi_Fi.rc | 1 +
dll/win32/msi/lang/msi_Fr.rc | 1 +
dll/win32/msi/lang/msi_He.rc | 1 +
dll/win32/msi/lang/msi_Hu.rc | 1 +
dll/win32/msi/lang/msi_Id.rc | 1 +
dll/win32/msi/lang/msi_It.rc | 1 +
dll/win32/msi/lang/msi_Ja.rc | 1 +
dll/win32/msi/lang/msi_Ko.rc | 1 +
dll/win32/msi/lang/msi_Lt.rc | 1 +
dll/win32/msi/lang/msi_Nl.rc | 1 +
dll/win32/msi/lang/msi_No.rc | 1 +
dll/win32/msi/lang/msi_Pl.rc | 1 +
dll/win32/msi/lang/msi_Pt.rc | 1 +
dll/win32/msi/lang/msi_Ro.rc | 1 +
dll/win32/msi/lang/msi_Ru.rc | 1 +
dll/win32/msi/lang/msi_Si.rc | 1 +
dll/win32/msi/lang/msi_Sq.rc | 1 +
dll/win32/msi/lang/msi_Sr.rc | 1 +
dll/win32/msi/lang/msi_Sv.rc | 1 +
dll/win32/msi/lang/msi_Tr.rc | 1 +
dll/win32/msi/lang/msi_Uk.rc | 1 +
dll/win32/msi/lang/msi_Zh.rc | 1 +
dll/win32/msi/resource.h | 2 +
29 files changed, 149 insertions(+), 44 deletions(-)
diff --git a/dll/win32/msi/dialog.c b/dll/win32/msi/dialog.c
index 860b80e4073..b39e6936678 100644
--- a/dll/win32/msi/dialog.c
+++ b/dll/win32/msi/dialog.c
@@ -2151,23 +2151,27 @@ struct msi_pathedit_info
WNDPROC oldproc;
};
+static WCHAR *get_path_property( msi_dialog *dialog, msi_control *control )
+{
+ WCHAR *prop, *path;
+ BOOL indirect = control->attributes & msidbControlAttributesIndirect;
+ if (!(prop = msi_dialog_dup_property( dialog, control->property, indirect )))
return NULL;
+ path = msi_dialog_dup_property( dialog, prop, TRUE );
+ msi_free( prop );
+ return path;
+}
+
static void msi_dialog_update_pathedit( msi_dialog *dialog, msi_control *control )
{
- LPWSTR prop, path;
- BOOL indirect;
+ WCHAR *path;
if (!control && !(control = msi_dialog_find_control_by_type( dialog,
szPathEdit )))
return;
- indirect = control->attributes & msidbControlAttributesIndirect;
- prop = msi_dialog_dup_property( dialog, control->property, indirect );
- path = msi_dialog_dup_property( dialog, prop, TRUE );
-
+ if (!(path = get_path_property( dialog, control ))) return;
SetWindowTextW( control->hwnd, path );
SendMessageW( control->hwnd, EM_SETSEL, 0, -1 );
-
msi_free( path );
- msi_free( prop );
}
/* FIXME: test when this should fail */
@@ -2921,16 +2925,12 @@ static UINT msi_dialog_list_box( msi_dialog *dialog, MSIRECORD
*rec )
static void msi_dialog_update_directory_combo( msi_dialog *dialog, msi_control *control
)
{
- LPWSTR prop, path;
- BOOL indirect;
+ WCHAR *path;
if (!control && !(control = msi_dialog_find_control_by_type( dialog,
szDirectoryCombo )))
return;
- indirect = control->attributes & msidbControlAttributesIndirect;
- prop = msi_dialog_dup_property( dialog, control->property, indirect );
- path = msi_dialog_dup_property( dialog, prop, TRUE );
-
+ if (!(path = get_path_property( dialog, control ))) return;
PathStripPathW( path );
PathRemoveBackslashW( path );
@@ -2938,7 +2938,6 @@ static void msi_dialog_update_directory_combo( msi_dialog *dialog,
msi_control *
SendMessageW( control->hwnd, CB_SETCURSEL, 0, 0 );
msi_free( path );
- msi_free( prop );
}
static UINT msi_dialog_directory_combo( msi_dialog *dialog, MSIRECORD *rec )
@@ -2967,31 +2966,28 @@ static UINT msi_dialog_directory_combo( msi_dialog *dialog,
MSIRECORD *rec )
static void msi_dialog_update_directory_list( msi_dialog *dialog, msi_control *control )
{
- WCHAR dir_spec[MAX_PATH];
+ static const WCHAR asterisk[] = {'*',0};
+ WCHAR dir_spec[MAX_PATH], *path;
WIN32_FIND_DATAW wfd;
- LPWSTR prop, path;
- BOOL indirect;
LVITEMW item;
HANDLE file;
- static const WCHAR asterisk[] = {'*',0};
-
if (!control && !(control = msi_dialog_find_control_by_type( dialog,
szDirectoryList )))
return;
/* clear the list-view */
SendMessageW( control->hwnd, LVM_DELETEALLITEMS, 0, 0 );
- indirect = control->attributes & msidbControlAttributesIndirect;
- prop = msi_dialog_dup_property( dialog, control->property, indirect );
- path = msi_dialog_dup_property( dialog, prop, TRUE );
-
+ if (!(path = get_path_property( dialog, control ))) return;
lstrcpyW( dir_spec, path );
lstrcatW( dir_spec, asterisk );
file = FindFirstFileW( dir_spec, &wfd );
- if ( file == INVALID_HANDLE_VALUE )
+ if (file == INVALID_HANDLE_VALUE)
+ {
+ msi_free( path );
return;
+ }
do
{
@@ -3010,7 +3006,6 @@ static void msi_dialog_update_directory_list( msi_dialog *dialog,
msi_control *c
SendMessageW( control->hwnd, LVM_INSERTITEMW, 0, (LPARAM)&item );
} while ( FindNextFileW( file, &wfd ) );
- msi_free( prop );
msi_free( path );
FindClose( file );
}
@@ -3043,38 +3038,110 @@ static UINT msi_dialog_directorylist_up( msi_dialog *dialog )
return ERROR_SUCCESS;
}
-static UINT msi_dialog_dirlist_handler( msi_dialog *dialog,
- msi_control *control, WPARAM param )
+static WCHAR *get_unique_folder_name( const WCHAR *root, int *ret_len )
{
- LPNMHDR nmhdr = (LPNMHDR)param;
- WCHAR new_path[MAX_PATH];
- WCHAR text[MAX_PATH];
- LPWSTR path, prop;
- BOOL indirect;
+ static const WCHAR fmtW[] = {'%','s','%','s','
','%','u',0};
+ WCHAR newfolder[MAX_PATH], *path, *ptr;
+ int len, count = 2;
+
+ len = LoadStringW( msi_hInstance, IDS_NEWFOLDER, newfolder, ARRAY_SIZE(newfolder) );
+ len += strlenW(root) + 1;
+ if (!(path = msi_alloc( (len + 4) * sizeof(WCHAR) ))) return NULL;
+ strcpyW( path, root );
+ strcatW( path, newfolder );
+
+ for (;;)
+ {
+ if (GetFileAttributesW( path ) == INVALID_FILE_ATTRIBUTES) break;
+ if (count > 99)
+ {
+ msi_free( path );
+ return NULL;
+ }
+ len = sprintfW( path, fmtW, root, newfolder, count++ ) + 1;
+ }
+
+ ptr = strrchrW( path, '\\' ) + 1;
+ *ret_len = len - (ptr - path);
+ memmove( path, ptr, *ret_len * sizeof(WCHAR) );
+ return path;
+}
+
+static UINT msi_dialog_directorylist_new( msi_dialog *dialog )
+{
+ msi_control *control;
+ WCHAR *path;
LVITEMW item;
int index;
- if (nmhdr->code != LVN_ITEMACTIVATE)
- return ERROR_SUCCESS;
+ control = msi_dialog_find_control_by_type( dialog, szDirectoryList );
+
+ if (!(path = get_path_property( dialog, control ))) return ERROR_OUTOFMEMORY;
+
+ item.mask = LVIF_TEXT;
+ item.iItem = 0;
+ item.iSubItem = 0;
+ item.pszText = get_unique_folder_name( path, &item.cchTextMax );
- index = SendMessageW( control->hwnd, LVM_GETNEXTITEM, -1, LVNI_SELECTED );
- if ( index < 0 )
+ index = SendMessageW( control->hwnd, LVM_INSERTITEMW, 0, (LPARAM)&item );
+ SendMessageW( control->hwnd, LVM_ENSUREVISIBLE, index, 0 );
+ SendMessageW( control->hwnd, LVM_EDITLABELW, index, -1 );
+
+ msi_free( path );
+ msi_free( item.pszText );
+ return ERROR_SUCCESS;
+}
+
+static UINT msi_dialog_dirlist_handler( msi_dialog *dialog, msi_control *control, WPARAM
param )
+{
+ NMHDR *nmhdr = (NMHDR *)param;
+ WCHAR text[MAX_PATH], *new_path, *path, *prop;
+ BOOL indirect;
+
+ switch (nmhdr->code)
{
- ERR("No list-view item selected!\n");
- return ERROR_FUNCTION_FAILED;
+ case LVN_ENDLABELEDITW:
+ {
+ NMLVDISPINFOW *info = (NMLVDISPINFOW *)param;
+ if (!info->item.pszText) return ERROR_SUCCESS;
+ lstrcpynW( text, info->item.pszText, ARRAY_SIZE(text) );
+ text[ARRAY_SIZE(text) - 1] = 0;
+ break;
}
+ case LVN_ITEMACTIVATE:
+ {
+ LVITEMW item;
+ int index = SendMessageW( control->hwnd, LVM_GETNEXTITEM, -1, LVNI_SELECTED
);
+ if (index < 0)
+ {
+ ERR("no list-view item selected\n");
+ return ERROR_FUNCTION_FAILED;
+ }
- item.iSubItem = 0;
- item.pszText = text;
- item.cchTextMax = MAX_PATH;
- SendMessageW( control->hwnd, LVM_GETITEMTEXTW, index, (LPARAM)&item );
+ item.iSubItem = 0;
+ item.pszText = text;
+ item.cchTextMax = MAX_PATH;
+ SendMessageW( control->hwnd, LVM_GETITEMTEXTW, index, (LPARAM)&item );
+ text[ARRAY_SIZE(text) - 1] = 0;
+ break;
+ }
+ default:
+ return ERROR_SUCCESS;
+ }
indirect = control->attributes & msidbControlAttributesIndirect;
prop = msi_dialog_dup_property( dialog, control->property, indirect );
path = msi_dialog_dup_property( dialog, prop, TRUE );
+ if (!(new_path = msi_alloc( (strlenW(path) + strlenW(text) + 2) * sizeof(WCHAR) )))
+ {
+ msi_free( prop );
+ msi_free( path );
+ return ERROR_OUTOFMEMORY;
+ }
lstrcpyW( new_path, path );
lstrcatW( new_path, text );
+ if (nmhdr->code == LVN_ENDLABELEDITW) CreateDirectoryW( new_path, NULL );
lstrcatW( new_path, szBackSlash );
msi_dialog_set_property( dialog->package, prop, new_path );
@@ -3085,6 +3152,8 @@ static UINT msi_dialog_dirlist_handler( msi_dialog *dialog,
msi_free( prop );
msi_free( path );
+ msi_free( new_path );
+
return ERROR_SUCCESS;
}
@@ -3094,7 +3163,7 @@ static UINT msi_dialog_directory_list( msi_dialog *dialog, MSIRECORD
*rec )
LPCWSTR prop;
DWORD style;
- style = LVS_LIST | WS_VSCROLL | LVS_SHAREIMAGELISTS |
+ style = LVS_LIST | WS_VSCROLL | LVS_SHAREIMAGELISTS | LVS_EDITLABELS |
LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER |
LVS_SORTASCENDING | WS_CHILD | WS_GROUP | WS_TABSTOP;
control = msi_dialog_add_control( dialog, rec, WC_LISTVIEWW, style );
@@ -4533,6 +4602,11 @@ static UINT event_directory_list_up( msi_dialog *dialog, const
WCHAR *argument )
return msi_dialog_directorylist_up( dialog );
}
+static UINT event_directory_list_new( msi_dialog *dialog, const WCHAR *argument )
+{
+ return msi_dialog_directorylist_new( dialog );
+}
+
static UINT event_reinstall_mode( msi_dialog *dialog, const WCHAR *argument )
{
return msi_set_property( dialog->package->db, szReinstallMode, argument, -1 );
@@ -4560,6 +4634,7 @@ static const WCHAR set_target_pathW[] =
{'S','e','t','T','a','r','g','e','t','P'
static const WCHAR resetW[] =
{'R','e','s','e','t',0};
static const WCHAR set_install_levelW[] =
{'S','e','t','I','n','s','t','a','l','l','L','e','v','e','l',0};
static const WCHAR directory_list_upW[] =
{'D','i','r','e','c','t','o','r','y','L','i','s','t','U','p',0};
+static const WCHAR directory_list_newW[] =
{'D','i','r','e','c','t','o','r','y','L','i','s','t','N','e','w',0};
static const WCHAR selection_browseW[] =
{'S','e','l','e','c','t','i','o','n','B','r','o','w','s','e',0};
static const WCHAR reinstall_modeW[] =
{'R','e','i','n','s','t','a','l','l','M','o','d','e',0};
static const WCHAR reinstallW[] =
{'R','e','i','n','s','t','a','l','l',0};
@@ -4579,6 +4654,7 @@ static const struct control_event control_events[] =
{ resetW, event_reset },
{ set_install_levelW, event_set_install_level },
{ directory_list_upW, event_directory_list_up },
+ { directory_list_newW, event_directory_list_new },
{ selection_browseW, event_spawn_dialog },
{ reinstall_modeW, event_reinstall_mode },
{ reinstallW, event_reinstall },
diff --git a/dll/win32/msi/lang/msi_Bg.rc b/dll/win32/msi/lang/msi_Bg.rc
index 46ab527b806..ec165ec2b23 100644
--- a/dll/win32/msi/lang/msi_Bg.rc
+++ b/dll/win32/msi/lang/msi_Bg.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "ìðåæîâîòî óñòðîéñòâà íóæíî çà ôóíêöèîíàëíîñòòà ëèïñâà "
14 "ôóíêöèîíàëíîñò îò:"
15 "èçáåðåòå ïàïêàòà, êîÿòî ñúäúðæà %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Da.rc b/dll/win32/msi/lang/msi_Da.rc
index b14bd9f285e..87f26254b10 100644
--- a/dll/win32/msi/lang/msi_Da.rc
+++ b/dll/win32/msi/lang/msi_Da.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "featurens netværksdrev mangler."
14 "feature fra:"
15 "Vælg kataloget som indeholder '%s'."
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_De.rc b/dll/win32/msi/lang/msi_De.rc
index 0d486f3f871..d5e68537c82 100644
--- a/dll/win32/msi/lang/msi_De.rc
+++ b/dll/win32/msi/lang/msi_De.rc
@@ -32,6 +32,7 @@ STRINGTABLE
13 "Das Netzwerklaufwerk für das Feature fehlt."
14 "Feature von:"
15 "Wählen Sie das Verzeichnis aus, dass %s enthält."
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_En.rc b/dll/win32/msi/lang/msi_En.rc
index d7972f7409f..1015a7d5116 100644
--- a/dll/win32/msi/lang/msi_En.rc
+++ b/dll/win32/msi/lang/msi_En.rc
@@ -32,6 +32,7 @@ STRINGTABLE
13 "network drive for feature missing"
14 "feature from:"
15 "choose which folder contains %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Es.rc b/dll/win32/msi/lang/msi_Es.rc
index 8affa466c77..a94859a12f8 100644
--- a/dll/win32/msi/lang/msi_Es.rc
+++ b/dll/win32/msi/lang/msi_Es.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "unidad de red para característica ausente"
14 "característica de:"
15 "elija qué carpeta contiene %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Fi.rc b/dll/win32/msi/lang/msi_Fi.rc
index 233aa2c3ae0..77f5f4dd102 100644
--- a/dll/win32/msi/lang/msi_Fi.rc
+++ b/dll/win32/msi/lang/msi_Fi.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "Ominaisuuden verkkolevy puuttuu."
14 "Ominaisuus:"
15 "Valitse kansio, jossa on %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Fr.rc b/dll/win32/msi/lang/msi_Fr.rc
index 026baa11ea9..58393f31ace 100644
--- a/dll/win32/msi/lang/msi_Fr.rc
+++ b/dll/win32/msi/lang/msi_Fr.rc
@@ -32,6 +32,7 @@ STRINGTABLE
13 "lecteur réseau pour la fonctionnalité manquante"
14 "fonctionnalité depuis :"
15 "sélectionnez le dossier contenant %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_He.rc b/dll/win32/msi/lang/msi_He.rc
index 492e2aae4c2..ede76d78c3c 100644
--- a/dll/win32/msi/lang/msi_He.rc
+++ b/dll/win32/msi/lang/msi_He.rc
@@ -34,6 +34,7 @@ STRINGTABLE
13 "כונן רשת עבור התכונה חסר"
14 "מהתקן מ:"
15 "בחר איזו תיקיה מכילה את %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Hu.rc b/dll/win32/msi/lang/msi_Hu.rc
index 70ab46f9d9b..33c427c83e3 100644
--- a/dll/win32/msi/lang/msi_Hu.rc
+++ b/dll/win32/msi/lang/msi_Hu.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "hiányzó tulajdonság a hálózati meghajtóhoz"
14 "tulajdonság innen:"
15 "válassza ki, melyik mappa tartalmazza ezt: %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Id.rc b/dll/win32/msi/lang/msi_Id.rc
index 62c6da9810d..ae8afecc6f4 100644
--- a/dll/win32/msi/lang/msi_Id.rc
+++ b/dll/win32/msi/lang/msi_Id.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "drive jatingan untuk fitur hilang"
14 "fitur dari:"
15 "pilih folder yang berisi %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_It.rc b/dll/win32/msi/lang/msi_It.rc
index 4a437a8ab20..ecad1172585 100644
--- a/dll/win32/msi/lang/msi_It.rc
+++ b/dll/win32/msi/lang/msi_It.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "periferica di rete per la funzionalità mancante"
14 "funzionalità da:"
15 "selezionare la cartella che contiene %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Ja.rc b/dll/win32/msi/lang/msi_Ja.rc
index c3ac0197d50..caa036cb77f 100644
--- a/dll/win32/msi/lang/msi_Ja.rc
+++ b/dll/win32/msi/lang/msi_Ja.rc
@@ -10,6 +10,7 @@ STRINGTABLE
13 "機能があるネットワーク ドライブがありません"
14 "機能の場所:"
15 "%s のあるフォルダを選択してください"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Ko.rc b/dll/win32/msi/lang/msi_Ko.rc
index 47d29b92023..f57cb862772 100644
--- a/dll/win32/msi/lang/msi_Ko.rc
+++ b/dll/win32/msi/lang/msi_Ko.rc
@@ -33,6 +33,7 @@ STRINGTABLE
13 "빠진 부분(feature)을 위한 네트워크 드라이브"
14 "부분(feature)에서:"
15 " %s를 포함하는 폴더 선택"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Lt.rc b/dll/win32/msi/lang/msi_Lt.rc
index 597b360ab22..7fb9b00557f 100644
--- a/dll/win32/msi/lang/msi_Lt.rc
+++ b/dll/win32/msi/lang/msi_Lt.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "trūksta tinklo disko komponentui"
14 "komponentas iš:"
15 "parinkite aplanką, kuris turi %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Nl.rc b/dll/win32/msi/lang/msi_Nl.rc
index 29197e89164..07676578fdf 100644
--- a/dll/win32/msi/lang/msi_Nl.rc
+++ b/dll/win32/msi/lang/msi_Nl.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "De netwerkschijf met de feature ontbreekt"
14 "Feature van:"
15 "Kies de map die %s bevat"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_No.rc b/dll/win32/msi/lang/msi_No.rc
index 8c020bfe61e..fde6574d80f 100644
--- a/dll/win32/msi/lang/msi_No.rc
+++ b/dll/win32/msi/lang/msi_No.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "Egenskapens nettverksstasjon mangler."
14 "Egenskap fra::"
15 "Velg katalogen som inneholder '%s'."
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Pl.rc b/dll/win32/msi/lang/msi_Pl.rc
index 01e2de2e72c..d42c1b142c9 100644
--- a/dll/win32/msi/lang/msi_Pl.rc
+++ b/dll/win32/msi/lang/msi_Pl.rc
@@ -32,6 +32,7 @@ STRINGTABLE
13 "dysk siecowy zawierający żądaną funckje jest niedostępny"
14 "funkcja z:"
15 "wybierz folder zawierający '%s'"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Pt.rc b/dll/win32/msi/lang/msi_Pt.rc
index 1d919c993b1..136225c1496 100644
--- a/dll/win32/msi/lang/msi_Pt.rc
+++ b/dll/win32/msi/lang/msi_Pt.rc
@@ -33,6 +33,7 @@ STRINGTABLE
13 "faltando drive de rede para característica"
14 "origem da característica:"
15 "escolha a pasta que contém %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Ro.rc b/dll/win32/msi/lang/msi_Ro.rc
index 127ebb49e2f..8fb9e3929e1 100644
--- a/dll/win32/msi/lang/msi_Ro.rc
+++ b/dll/win32/msi/lang/msi_Ro.rc
@@ -45,6 +45,7 @@ STRINGTABLE
13 "lipsește unitatea de rețea pentru această caracteristică"
14 "caracteristică de la:"
15 "selectați fișierul care conține %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Ru.rc b/dll/win32/msi/lang/msi_Ru.rc
index a485fd957c8..c1f577c80c7 100644
--- a/dll/win32/msi/lang/msi_Ru.rc
+++ b/dll/win32/msi/lang/msi_Ru.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "сетевой диск для данной возможности не указан"
14 "возможность из:"
15 "выберите каталог, содержащий %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Si.rc b/dll/win32/msi/lang/msi_Si.rc
index ed6df345a37..a760270f721 100644
--- a/dll/win32/msi/lang/msi_Si.rc
+++ b/dll/win32/msi/lang/msi_Si.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "manjkajoč omrežni pogon za namestitev funkcijo"
14 "funkcija z:"
15 "izberite mapo, ki vsebuje %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Sq.rc b/dll/win32/msi/lang/msi_Sq.rc
index bb6c7702bb7..bb1a847b103 100644
--- a/dll/win32/msi/lang/msi_Sq.rc
+++ b/dll/win32/msi/lang/msi_Sq.rc
@@ -32,6 +32,7 @@ STRINGTABLE
13 "rrjet drive-ri për funksionin e munguar"
14 "funksione nga:"
15 "zgjidhni dosjen që përmban %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Sr.rc b/dll/win32/msi/lang/msi_Sr.rc
index eaaeb09f058..e7119247e92 100644
--- a/dll/win32/msi/lang/msi_Sr.rc
+++ b/dll/win32/msi/lang/msi_Sr.rc
@@ -32,6 +32,7 @@ STRINGTABLE
13 "mrežni drajv nedostaje"
14 "dodatak sa:"
15 "izaberite koji folder sadrži %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Sv.rc b/dll/win32/msi/lang/msi_Sv.rc
index f4aa3a4a9d6..d6764cc8c65 100644
--- a/dll/win32/msi/lang/msi_Sv.rc
+++ b/dll/win32/msi/lang/msi_Sv.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "nätverksenhet för funktion saknar"
14 "funktion från:"
15 "välj den mapp som innehåller %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Tr.rc b/dll/win32/msi/lang/msi_Tr.rc
index c9d1029eed9..5abe5a0d208 100644
--- a/dll/win32/msi/lang/msi_Tr.rc
+++ b/dll/win32/msi/lang/msi_Tr.rc
@@ -31,6 +31,7 @@ STRINGTABLE
13 "Eksik özellik için ağ sürücüsü"
14 "Şuradan özellik:"
15 "%s içeren dizini seçiniz."
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Uk.rc b/dll/win32/msi/lang/msi_Uk.rc
index bd293eeb949..ca9b42e04d6 100644
--- a/dll/win32/msi/lang/msi_Uk.rc
+++ b/dll/win32/msi/lang/msi_Uk.rc
@@ -33,6 +33,7 @@ STRINGTABLE
13 "мережевий диск для даної можливості не вказаний"
14 "можливість з:"
15 "виберіть папку, що містить %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/lang/msi_Zh.rc b/dll/win32/msi/lang/msi_Zh.rc
index e2b6ed44e54..9270486fb2d 100644
--- a/dll/win32/msi/lang/msi_Zh.rc
+++ b/dll/win32/msi/lang/msi_Zh.rc
@@ -34,6 +34,7 @@ STRINGTABLE
13 "本功能的网络驱动器不存在"
14 "功能来自:"
15 "选择包含 %s 的文件夹"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dll/win32/msi/resource.h b/dll/win32/msi/resource.h
index 7977747f617..f88e587f4bb 100644
--- a/dll/win32/msi/resource.h
+++ b/dll/win32/msi/resource.h
@@ -25,6 +25,8 @@
#define MSIERR_INFO_ACTIONSTART 14
#define MSIERR_INFO_ACTIONENDED 15
+#define IDS_NEWFOLDER 100
+
#define MSIERR_INSERTDISK 1302
#define MSIERR_CABNOTFOUND 1311