Не создается новая папка в дереве каталога. Воспроизвести можно в распаковщике Беста4+. Полный путь: /var/ftp/pvt/Windows/Учётные, бухгалтерские/БЭСТ/Best4+_12_01. В консоле появляется ошибка: fixme:shell:BrsFolder_OnCommand make new folder not implemented. Версия wine 1.0.12eter7.7/eter13
> fixme:shell:BrsFolder_OnCommand make new folder not implemented. Ни при запуске BEST.part1.exe, ни при запуске распакованного Setup.exe такого не увидел.
во время запуска BEST.part1.exe появляется окно инсталяции. При нажатии Browse в окне выбора нужного диска и папки, кнопка создать новую папку не работает. Консоль выдает:fixme:shell:BrsFolder_OnCommand make new folder not implemented. Версия wine 1.0.12eter7.7/eter13
приступил к выполнению
проблема воспроизводится. все дело в том что в функции static BOOL BrsFolder_OnCommand( browse_info *info, UINT id )не описано действие по нажатию кнопки создать новую папку: case IDD_MAKENEWFOLDER: FIXME("make new folder not implemented\n"); return TRUE;
в файле dlls/shell32/brsfolder.c
тест, на эту ошибку уже есть
начал писать добавление новой папки.
сделал создание новой папки. осталось доделать, чтобы список обновлялся.
список обновляется
Нужно подробнее писать — в чём проблема, как собираешься решить, как решил, где решение (опубликовал, патч отправил в wine-patches@) Сейчас из записей абсолютно не ясно, что куда движется. Никакой записи про тест не появилось. Ну представь, что ты комментатор футбольного матча, пиши так, чтобы другим было понятно, что ты делаешь.
в тесте уже присутствует проверка создания папки 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; ... этого не достаточно? или нужно написать другой?
Не вижу там проверки создания каталога. Проверка, как обычно: 1. Без нашего исправления тест должен выдавать ошибку 2. С нашим исправлением, или на Windows, тест не должен выдавать ошибку
переделал создание папки. тест "Clicking "Make New Folder" button" ошибки больше не выдает, все создается нормально. пока что все еще валятся два теста: на возвращения pidl новой папки и ее имени.
отправил патч на wine-patches@
время выполнения
отправил на wine-patches@
переделал создание с папки. теперь если в поле имя папки не введено, просто ничего не происходит. убрал комментарии про то, что не работает кнопка создания. убрал лишнюю пересылку адреса, который в фокусе, при нажатии кнопки. отправил на wine-patches@
Посмотрел патч. Надо заменить folder_object->lpVtbl-> на IShellFolder_. Ещё непонятно, зачем по два раза вызывается Release для folder_object и освобождается память. Вообще, патч надо поделить на два (доработка теста и собственно исправление бага) и попробовать отправить в winehq.
ясно, посмотрю освобождение памяти. патч один, потому что Виталий сказал, когда-то давно, что тест и исправление бага должны быть в одном патче.
сделал тест. плюс к нему пришлось добавить изменения в файлах ресурсов shell32_Ru.rc и shell32_En.rc. отправил на wine-patches@lists.etersoft.ru
сделал патч исправляющий багу. отправил на wine-patches@lists.etersoft.ru
переписал тест и создание папки без изменения файлов ресурсов
если не менять тест, то мы возвращаемся к варианту, который был месяц назад. А если изменить foo на NewFolder, будет очень похоже на то, что делает windows2000.
проблема в том, что тут не работает управление деревом, в то время как в других программах оно работает. видима задача, глобальнее, чем просто создание папки.
проблема состоит в том, что не устанавливается фокус на созданную папку и не перерисовывается дерево.
дерево обновляется. проблема с фокусом пока не решена.
отправил на wine-patches@ папка создается, показывается в дереве, после закрытия диалога она директория для сохранения
Думаю, надо сделать, чтобы можно было задать имя папки. Никому ведь не нужно ставить программу в директорию "New Folder". Ещё такой момент. Если выбрать диск C: и нажать кнопку создания папки, то "Мой компьютер" сворачивается и не видно, что там создалось, и непонятно, создалось ли.
думаю, что переименование папки стоит вынести в отдельную багу. сейчас постараюсь разобраться с неправильным проходом по дереву, скорее всего именно в этом проблема при создании новой папки на диске с:
на самом деле, при создании именно на диске с: не раскрывается тот каталог в котором папка, была собственно создана. проверил создание на дисках d:, p: там все открывается нормально. пока не удалось определить в чем причина
видимо, проблема в том, что при таком варианте обхода дерева, не просматриваются скрытые файлы
оптимизировал код. пришлось поправить функции установки фокуса и выделения (убрал static и заменил параметр TVGN_CARET на TVGN_DROPHILITE в функции BrsFolder_OnSetSelectionW).
начал делать, возможность изменения названия папки. это можно сделать двумя способами: чтобы выглядело как в windows, либо быстро и легко, с использованием edita, который был скрыт разработчиками. пока делаю первый вариант, если нужно будет слишком много переделывать, то, наверное, лучше перейти ко второму.
тут обнаружилась одна проблема. после того как папка создана(на нее устанавливается фокус и она выделяется цветом). после нажатия на любую другую папку фокус устанавливается на нее, а выделение цветом с созданной не снимается.
дело в том, что неправильно использовался параметр TVGN_DROPHILITE
в версии wine-etersoft-1.3.27-alt1.15 бага уже не воспроизводится. функционал уже сделан. можно считать багу неактуальной. закрываю.