Bug 5930

Summary: Не создаётся новая папка
Product: WINE@Etersoft Reporter: Сычев Александр <alexander90>
Component: Файловые операцииAssignee: Роман Дадьков <romand>
Status: CLOSED FIXED QA Contact: Денис Баранов <baraka>
Severity: minor    
Priority: P4 CC: amorozov, kondratyuk, lav, sonner
Version: 1.0.12   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 2000    
Deadline: 2011-08-02   

Description Сычев Александр 2010-08-31 13:43:18 MSD
Не создается новая папка в дереве каталога. Воспроизвести можно в распаковщике Беста4+. Полный путь: /var/ftp/pvt/Windows/Учётные, бухгалтерские/БЭСТ/Best4+_12_01. 

В консоле появляется ошибка: fixme:shell:BrsFolder_OnCommand make new folder not implemented.

Версия wine 1.0.12eter7.7/eter13
Comment 1 Александр Морозов 2010-08-31 15:16:13 MSD
> fixme:shell:BrsFolder_OnCommand make new folder not implemented.

Ни при запуске BEST.part1.exe, ни при запуске распакованного Setup.exe такого не увидел.
Comment 2 Сычев Александр 2010-09-08 15:57:36 MSD
во время запуска BEST.part1.exe появляется окно инсталяции. При нажатии Browse в окне выбора нужного диска и папки, кнопка создать новую папку не работает.
Консоль выдает:fixme:shell:BrsFolder_OnCommand make new folder not implemented.

Версия wine 1.0.12eter7.7/eter13
Comment 3 Роман Дадьков 2011-01-26 19:19:25 MSK
приступил к выполнению
Comment 4 Роман Дадьков 2011-01-26 21:26:11 MSK
проблема воспроизводится.
все дело в том что в функции static BOOL BrsFolder_OnCommand( browse_info *info, UINT id )не описано действие по нажатию кнопки создать новую папку:
case IDD_MAKENEWFOLDER:
        FIXME("make new folder not implemented\n");
        return TRUE;
Comment 5 Роман Дадьков 2011-02-01 18:56:40 MSK
в файле dlls/shell32/brsfolder.c
Comment 6 Роман Дадьков 2011-02-01 19:11:35 MSK
тест, на эту ошибку уже есть
Comment 7 Роман Дадьков 2011-02-02 20:46:03 MSK
начал писать добавление новой папки.
Comment 8 Роман Дадьков 2011-02-03 20:52:25 MSK
сделал создание новой папки. 
осталось доделать, чтобы список обновлялся.
Comment 9 Роман Дадьков 2011-02-04 20:57:40 MSK
список обновляется
Comment 10 Vitaly Lipatov 2011-02-04 21:16:44 MSK
Нужно подробнее писать — в чём проблема, как собираешься решить, как решил,
где решение (опубликовал, патч отправил в wine-patches@)
Сейчас из записей абсолютно не ясно, что куда движется.
Никакой записи про тест не появилось.
Ну представь, что ты комментатор футбольного матча, пиши так, чтобы другим было понятно, что ты делаешь.
Comment 11 Роман Дадьков 2011-02-15 20:59:11 MSK
в тесте уже присутствует проверка создания папки
static void CALLBACK make_new_folder_timer_callback(HWND hwnd, UINT uMsg,
                                                    UINT_PTR idEvent, DWORD dwTime)
{
    static int step = 0;

    switch (step++)
    {
    case 0:
        /* Click "Make New Folder" button */
        PostMessage(hwnd, WM_COMMAND, IDD_MAKENEWFOLDER, 0);
        break;
...

этого не достаточно? или нужно написать другой?
Comment 12 Vitaly Lipatov 2011-02-16 17:38:53 MSK
Не вижу там проверки создания каталога.
Проверка, как обычно:
1. Без нашего исправления тест должен выдавать ошибку
2. С нашим исправлением, или на Windows, тест не должен выдавать ошибку
Comment 13 Роман Дадьков 2011-02-21 16:43:22 MSK
переделал создание папки. 
тест "Clicking "Make New Folder" button" ошибки больше не выдает, все создается нормально. пока что все еще валятся два теста: на возвращения pidl новой папки и ее имени.
Comment 14 Роман Дадьков 2011-02-21 20:25:29 MSK
отправил патч на wine-patches@
Comment 15 Роман Дадьков 2011-03-25 21:14:08 MSK
время выполнения
Comment 16 Роман Дадьков 2011-04-01 20:41:18 MSK
отправил на wine-patches@
Comment 17 Роман Дадьков 2011-04-08 16:17:51 MSK
переделал создание с папки. теперь если в поле имя папки не введено, просто ничего не происходит. убрал комментарии про то, что не работает кнопка создания. убрал лишнюю пересылку адреса, который в фокусе, при нажатии кнопки. отправил на wine-patches@
Comment 18 Александр Морозов 2011-04-14 17:48:41 MSK
Посмотрел патч. Надо заменить folder_object->lpVtbl-> на IShellFolder_. Ещё непонятно, зачем по два раза вызывается Release для folder_object и освобождается память.

Вообще, патч надо поделить на два (доработка теста и собственно исправление бага) и попробовать отправить в winehq.
Comment 19 Роман Дадьков 2011-04-15 17:00:23 MSK
ясно, посмотрю освобождение памяти.
патч один, потому что Виталий сказал, когда-то давно, что тест и исправление бага должны быть в одном патче.
Comment 20 Роман Дадьков 2011-04-15 18:26:23 MSK
сделал тест. плюс к нему пришлось добавить изменения в файлах ресурсов shell32_Ru.rc и shell32_En.rc.
отправил на wine-patches@lists.etersoft.ru
Comment 21 Роман Дадьков 2011-04-15 19:18:57 MSK
сделал патч исправляющий багу. отправил на wine-patches@lists.etersoft.ru
Comment 22 Роман Дадьков 2011-04-15 21:35:50 MSK
переписал тест и создание папки без изменения файлов ресурсов
Comment 23 Роман Дадьков 2011-04-16 17:18:55 MSK
если не менять тест, то мы возвращаемся к варианту, который был месяц назад. А если изменить foo на NewFolder, будет очень похоже на то, что делает windows2000.
Comment 24 Роман Дадьков 2011-04-16 22:37:21 MSK
проблема в том, что тут не работает управление деревом, в то время как в других программах оно работает. видима задача, глобальнее, чем просто создание папки.
Comment 25 Роман Дадьков 2011-04-22 21:11:44 MSK
проблема состоит в том, что не устанавливается фокус на созданную папку и не перерисовывается дерево.
Comment 26 Роман Дадьков 2011-04-23 16:26:01 MSK
дерево обновляется. проблема с фокусом пока не решена.
Comment 27 Роман Дадьков 2011-05-06 20:26:00 MSK
отправил патч на wine-patches@
Comment 28 Роман Дадьков 2011-05-21 18:06:05 MSK
отправил на wine-patches@
папка создается, показывается в дереве, после закрытия диалога она директория для сохранения
Comment 29 Александр Морозов 2011-05-23 14:26:37 MSK
Думаю, надо сделать, чтобы можно было задать имя папки. Никому ведь не нужно ставить программу в директорию "New Folder".
Ещё такой момент. Если выбрать диск C: и нажать кнопку создания папки, то "Мой компьютер" сворачивается и не видно, что там создалось, и непонятно, создалось ли.
Comment 30 Роман Дадьков 2011-07-26 11:27:12 MSK
думаю, что переименование папки стоит вынести в отдельную багу.
сейчас постараюсь разобраться с неправильным проходом по дереву, скорее всего именно в этом проблема при создании новой папки на диске с:
Comment 31 Роман Дадьков 2011-07-26 14:25:43 MSK
на самом деле, при создании именно на диске с: не раскрывается тот каталог в котором папка, была собственно создана. проверил создание на дисках d:, p: там все открывается нормально. пока не удалось определить в чем причина
Comment 32 Роман Дадьков 2011-07-27 11:53:21 MSK
видимо, проблема в том, что при таком варианте обхода дерева, не просматриваются скрытые файлы
Comment 33 Роман Дадьков 2011-07-27 13:24:25 MSK
оптимизировал код. 
пришлось поправить функции установки фокуса и выделения (убрал static и заменил параметр TVGN_CARET на TVGN_DROPHILITE в функции BrsFolder_OnSetSelectionW).
Comment 34 Роман Дадьков 2011-07-27 16:11:09 MSK
начал делать, возможность изменения названия папки. 
это можно сделать двумя способами: чтобы выглядело как в windows, либо быстро и легко, с использованием edita, который был скрыт разработчиками.
пока делаю первый вариант, если нужно будет слишком много переделывать, то, наверное, лучше перейти ко второму.
Comment 35 Роман Дадьков 2011-07-28 13:17:27 MSK
тут обнаружилась одна проблема. 
после того как папка создана(на нее устанавливается фокус и она выделяется цветом). после нажатия на любую другую папку фокус устанавливается на нее, а выделение цветом с созданной не снимается.
Comment 36 Роман Дадьков 2011-07-28 16:05:39 MSK
дело в том, что неправильно использовался параметр TVGN_DROPHILITE
Comment 37 Роман Дадьков 2011-09-21 14:30:49 MSK
в версии wine-etersoft-1.3.27-alt1.15 бага уже не воспроизводится.
функционал уже сделан. можно считать багу неактуальной.
закрываю.