From b608ba9798dc5bf7e7e6b9ee400d833e39860e2a Mon Sep 17 00:00:00 2001 From: winesync Date: Sun, 13 Mar 2022 00:04:01 +0100 Subject: [PATCH] [WINESYNC] msi: Add support for control event DirectoryListNew. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=25687 Signed-off-by: Hans Leidekker Signed-off-by: Alexandre Julliard wine commit id 97a7a4ff0c8895c3ef1979eeee988c4c121d9839 by Hans Leidekker --- dll/win32/msi/dialog.c | 166 +++++++++++++++++++++++++---------- 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, 150 insertions(+), 45 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 ); - index = SendMessageW( control->hwnd, LVM_GETNEXTITEM, -1, LVNI_SELECTED ); - if ( index < 0 ) - { - ERR("No list-view item selected!\n"); - return ERROR_FUNCTION_FAILED; - } + if (!(path = get_path_property( dialog, control ))) return ERROR_OUTOFMEMORY; + item.mask = LVIF_TEXT; + item.iItem = 0; item.iSubItem = 0; - item.pszText = text; - item.cchTextMax = MAX_PATH; - SendMessageW( control->hwnd, LVM_GETITEMTEXTW, index, (LPARAM)&item ); + item.pszText = get_unique_folder_name( path, &item.cchTextMax ); + + 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) + { + 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 ); + 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