Bug 7398

Summary: Исправить explorer
Product: WINE@Etersoft Reporter: Виталий Перов <vitperov>
Component: Консоль ; Вызов программAssignee: Виталий Перов <vitperov>
Status: CLOSED FIXED QA Contact: Andrey Vusik <night>
Severity: minor    
Priority: P4 CC: baraka, ddv, lav
Version: 1.0.9   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on: 2465    
Bug Blocks: 42, 2088    

Description Виталий Перов 2011-06-28 16:20:54 MSK
+++ Данная задача создана размножением задачи 2465 +++

В 1С81 можно открывать вложеные файлы (например *.doc).

> trace:process:CreateProcessW app (null) cmdline L"explorer
> C:\\windows\\temp\\123g.doc"
>

Просто бага воспроизводится при помощи:
$ wine explorer документ.doc

-------------------------------------------
Откатил патч:
commit 33206ccfdf6ebaedc7555aa13b5bee0188e59199
Author: Vitaly Perov <vitperov@etersoft.ru>
Date:   Sun Dec 13 01:54:18 2009 +0300

    fix eterbug #2465: explorer can't open *.doc files

Для начала надо проверить воспроизводится ли бага.
Патч точно должнен быть в eterwine после версии 1.3.23
Comment 1 Виталий Перов 2011-06-28 17:10:27 MSK
Проверил. Бага воспроизводится
Comment 2 Виталий Перов 2011-06-28 17:44:48 MSK
Новые изменения в winehq вызваны патчем:

commit f2ac486e21c64b664dea527e2621e3c1d830c2cc
Author: Jay Yang <jkelleyy@gmail.com>
Date:   Sat Jun 11 17:42:17 2011 -0400

    explorer: Implement the explorer using IExplorerBrowser.


Там больше не используется CreateProcessW, вместо этого окно обозревателя создаётся прямо в программе.

Пока не нашёл на каком этапе можно проверить передаваемые параметры и выполнить открытие файла.
Comment 3 Виталий Перов 2011-06-30 15:53:38 MSK
Сейчас поддерживается открытие эксплорером только заданной директории.

Директория берётся из параметров коммандной строки. На основе её создаётся класс IShellFolder.

Класс может хранить только параметры директории.
Если ещё класс IShellItem, он может быть связан с конкретным файлом или директорией.
Нужно проверить, поддерживает ли этот класс IExplorerBrowser. Если да, то можно сделать вполне корректный патч
Comment 4 Виталий Перов 2011-06-30 17:59:34 MSK
Сделал... не работает.
Нормального патча видимо не получится, придётся делать хак.

На всякий случай выкладываю свои наработки (вдруг в будущем пригодится).

    SetWindowLongPtrW(window,EXPLORER_INFO_INDEX,(LONG_PTR)info);

static void make_explorer_window(IShellFolder* startFolder, WCHAR* pathW)
ret = IShellFolder_ParseDisplayName(startFolder, NULL, NULL, pathW, NULL, &pidl_testfile, NULL);
    WINE_FIXME("ParseDisplayName returned %x\n", ret);

    //ret = pSHCreateShellItem(pidl_cwd, NULL, pidl_testfile, &shellitem);
    ret = SHCreateShellItem(NULL, NULL, pidl_testfile, &shellitem);
    WINE_FIXME( "SHCreateShellItem returned %x\n", ret);

    //ret = IExplorerBrowser_BrowseToObject(info->browser,(IUnknown*)shellitem, SBSP_ABSOLUTE);
    ret = IExplorerBrowser_BrowseToIDList(info->browser,pidl_testfile, SBSP_ABSOLUTE);
    WINE_FIXME( "ExplorerBrowser_BrowseToObject %x\n", ret);
    ShowWindow(window,SW_SHOWDEFAULT);
    UpdateWindow(window);
Comment 5 Виталий Перов 2011-06-30 18:24:44 MSK
Сделал патч, отправил в рассылку.
Comment 6 Виталий Перов 2011-06-30 18:42:12 MSK
Патч приложен. Всё должно работать
Comment 7 Виталий Перов 2011-07-01 16:05:45 MSK
Отправил письмо с текущей реализацией в wine-devel@winehq.org. Возможно кто-нибудь подскажет правильную реализацию