ROS Shell

Материал из Русский WINE
(перенаправлено с «Оболочка в ReactOS»)
Перейти к: навигация, поиск

Содержание

Оболочка в ReactOS

История разработки

Начало

Первое время в ReactOS не было графической оболочки. Она была реализована в выпуске 0.2, Мартином Фуксом, при чем реализована неправильно с точки зрения ее программной архитектуры. В ReactOS, кроме этого проводника есть еще один - explorer_new. В идеале он должен по функциональности быть аналогичным проводнику Windows, но для нормальной работы ему была необходима библиотека Shell32.dll.

Работу над новой оболочкой начал Томас Блюмел (Thomas Bluemel), в качестве прототипа он выбрал оболочку Windows 2003 и провёл большую работу по разграничению функциональности между Explorer и Shell32. Но из-за отсутствия Shell32, новая версия Explorer ещё не работала. Позднее Эндрю Хилл (Andrew Hill) позаимствовал и доработал некоторые библиотеки из Wine.[1]

Первым большим шагом в разработке Shell32 был контракт, заключённый с Яннисом Адамопулосом (Giannis Adamopoulos) на доработку библиотеки shell32 и компонента browseui, который необходим проводнику для отображения файлового браузера. Итогом контракта стал перевод shell32 на C++, а также создание библиотеки browseui.dll. Так же Яннис изучил инфраструктуру поддержки оболочки и написал на нее документацию.

После контракта с Яннисом

Позже, 2 февраля 2014 г. была создана отдельная ветка разработки shell-experiments, в которой над shell32 работал Дэвид Кинтана (David Quintana) c ником Gigaherz.

С 26 октября 2014 г. над оболочкой так же работает Яннис Адамопулос (Giannis Adamopoulos).

  • С 7 марта 2014 г. в ветке shell-experiments новая оболочка запускается по умолчанию (explorer_new переименован в explorer, а explorer в explorer_old).
  • 26 ноября 2014 г. наработки Shell-experiments влиты в транк в ревизии 65496.
  • Все подзадачи разработки shell32
  • 9 января 2017 года был заключен новый контракт с Яннисом на доработку поддержки тем

Прогресс

  • 13 июля 2014г. завершена работа над CMergedFolder
  • 24 августа 2014г. были реализованы горячие клавиши Ctrl+C, Ctrl+X, Ctrl+V.
  • 28 сентября 2014г. реализован IPC

Схема компонентов Shell32

ReactShellProgress.png

На данной схеме визуально отмечены компоненты Shell32.

Нереализованные возможности

не реализовано начата работа
  • динамический обмен данными (DDE)

Отчеты о оболочке в багтеркере

  • Задачи по разработке оболочки CORE-5620
  • Основные нереализованные возможности CORE-9277
  • Переписывание реализации системных папок оболочки (CORE-7585)
  • Переписывание кэша значков и извлечения значков (CORE-7563)

Реорганизация ресурсов оболочки

В рамках своей работы (CORE-10030) Robert Naumann:

  • переработал диалоги свойств, сделав их лучше, добавил недостающие ресурсы и удалил ненужные
  • заменил значок меню Пуск растровым
  • исправил существующие значки и добавил недостающие (CORE-9240)
  • реорганизовал структуру ресурсов папок

Компоненты

ReactOS-browseui.jpg

Browseui.dll

На 13 июля 2017 г.:

  • отображается содержимое текущей папки
  • в заголовке окна отображается значок папки
  • отображаются кнопки
  • у кнопок появились значки
  • в режиме списка были реализованы сортировочные стрелки

Реализация кнопок

Кнопки в панели инструментов браузера файлов можно разделить на 4 группы:

  • Навигационные кнопки, с историей назад / вперед и «вверх»,
  • Кнопки боковой панели "папки" и "поиск"
  • Операции с файлами, "копировать в", "переместить в", "удалить" и "отменить".
  • Режим просмотра

Работают:

  • навигация
  • изменение размера значков
  • папки

Разрабатываются:

  • копировать в/переместить в (CORE-11132)

Dynamic Data Exchange

Динамический обмен данными (Dynamic Data Exchange, DDE) — это функция Windows, которая позволяет приложениям Windows взаимодействовать друг с другом. DDE основан на системе обмена сообщениями, встроенной в Windows. Две Windows-программы могут вести DDE-«беседу», отправляя сообщения друг другу. Эти две программы известны как «сервер» и «клиент». DDE-сервер - программа, которая имеет доступ к данным, которые могут быть полезны для других Windows-программ. DDE-клиент - программа, получающая эти данные с сервера. [2]

24 августа 2014 г. был импортирован код основы DDE из trunk.

29 сентября 2014 г. была начата работа над ним.

Протестировав и отладив компонент в Windows, Gigaherz добавил его в Shell32.dll и протестировал в ReactOS.

Из-за ошибок в Win32k DDE в ReactOS работает плохо, и поэтому разработчик пока прервал над ним работу, пока их не исправят. [3]

IPC

IPC - механизм оболочки, необходимый для открытия новых окон проводника в существующем процессе explorer.exe. На 28 сентября 2014 г. данная функция реализована. [4]

CBaseBar.png

Боковая панель

3 декабря 2014 г. была начата реализация класса CExplorerBand, который необходим для отображения боковой панели. Gigaherz добавил этот класс, чтобы исследовать, как реализуется боковая панель в оболочке Windows.

5 февраля 2016 г. был опубликован патч (CORE-10838) начальной реализации классов BaseBar и CBaseBarSite (см. схему).

19 февраля Sylvain Deverre начал работу над боковой панелью в github-репозитории.

30 мая в rr71459-71465 наработки из ветви были добавлены в транк.

1 июня в rr71471-71475 была релизована боковая панель.

26 июля в r72003 было реализовано разворачивание списка до текущей папки и в r72004 - отображение контекстного меню в панели "Папки".

2 августа в боковой панели было реализовано отображение имени диска.

1 февраля 2017 года было реализовано элементарное перетаскивание значков.

Обработка аргументов командной строки

8 сентября 2014 г. была написана основа парсера параметров командной строки, которые используются проводником Windows.

Команды см. на сайте поддержки Microsoft.

Отчет CORE-12163 был закрыт 7 ноября 2016 года.

На данный момент проводник поддерживает параметры:

  • /separate
  • /e
  • /select

Рабочий стол

5 февраля 2017 года было реализовано автоматическое обновление рабочего стола после изменения его содержимого.

Панель задач

15 мая 2014 г. начата работа над панелью задач.

Taskbar.png

На 31 июля 2017 г.:

  • отображается список окон
  • левым кликом окна можно свернуть/развернуть
  • правым кликом отображается и работает список действий над окном
  • окна нельзя перемещать в списке
  • реализовано автоскрытие панели задач

(т.к. на данный момент диалог настройки панели задач не реализован, автоскрытие настраивается в реестре. Для включения данной функции, необходимо установить значение HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2 на 1.)[5]

  • добавлено пустое место между кнопками на панели задач

В r75446 было реализовано изменение панели задач на определенный размер.

Область уведомлений в explorer_new

Настройка панели задач

14 апреля 2017 года Robert Naumann начал реализацию сохранения/загрузки настроек панели задач (CORE-11498).

Область уведомлений

5 июля 2014 г. была реализована область уведомлений. На текущий момент:

  • в трее отображаются значки программ
  • при клике левой кнопкой мыши по значку программа сворачивается/разворачивается
  • при клике правой кнопкой мыши по значку отображается меню
  • скрытие неиспользуемых значков не реализовано

Объекты службы оболочки

Объекты службы оболочки (Shell service objects) - компонент, отвечающий за отображение в системном трее регулятора громкости, значка батареи, диалога отключения USB-устройства, и др. Работа над ним была начата 23 июля.

На 17 августа 2014 г. был реализован базовый функционал.

Дальнейшая работа

23-24 марта 2017 года Эрик Коль сделал следующие реализации:

  • r74225 - начальная реализация кода для скрытия/отображения значков питания и звука
  • r74226 - скрытие/отображение значка питания
    • r74228 - выбор схемы питания в значке
  • r74227 - реализация скрытия/отображения значка звука

Адресная строка

4 мая 2014 г. начата работа над адресной строкой.

Shell-adress.png

На 25 августа 2016 г.:

  • реализовано:
    • отображение пути текущей папки
    • значок
    • поддержка распознавания ввода
    • вместо GUID/CLSID пути отображается имя системной папки
    • ввод адреса с нажатием Enter
    • автоизменение размера адресной строки
    • выпадающий список[6]
Shell adresslist.png

Строка меню

Горизонтальное меню в explorer new.png

На 29 октября 2014 г.:

  • нереализованные пункты отображаются как неактивные
  • при нажатии разворачиваются все пункты меню
  • написаны ​​контекстное меню для элементов оболочки
  • реализована навигация с помощью клавиатуры на вертикальных всплывающих меню и горизонтальной панели меню
    • реализован выбор первого и последнего пункта кнопками home и end
    • автоматический выбор первого пункта при открытии подменю с помощью клавиатуры.

В отличие от прочих пунктов меню, которые инициализируются только один раз, меню "файл" каждый раз очищается и к нему добавляются элементы из текущего выбора. В Windows, для этого, существует специальная функция, которая собирает доступные действия для текущего выбора, и строит специальное меню из этих элементов. Поскольку данная функция отсутствует, в меню отображается контекстное меню. В будущем эта функция будет усовершенствованна, но на данный момент, она выполняет поставленную задачу.

Реализация пунктов подменю

На 5 февраля 2017 г.:

Цвет и значение
Не функционирует
Реализовано
Меню
Файл Закрыть
Правка Отменить
Вырезать
Копировать
Вставить
Вставить ярлык
Копировать в
Переместить в
Выделить все
Обратить выделение
Вид Панели инструментов
Строка состояния
Панели обозревателя
Размеры значков
Переход
Обновить
Избранное Добавить в избранное
Упорядочить избранное
Сервис Подключить сетевой диск
Отключить сетевой диск
Синхронизировать
Свойства папки
Справка Легальна ли эта копия ReactOS?
О ReactOS
Свойства папки
File-options.png
  • CORE-10837 - Невозможно запустить Свойства папки из-за отсутствия класса
  • CORE-11141 - Свойства папки не реализованы
  • CORE-10800 - Улучшения диалога свойств папки
  • CORE-1246 - Изменение или создание файловых ассоциаций не реализовано
  • CORE-12540 - реализация отображения параметров папки
  • CORE-12906 - реализация изменения типов файлов

5 февраля 2017 года в ревизии r73703 был реализован диалог со всеми доступными, на данный момент, настройками.

Копировать в / Переместить в

18 апреля 2016 года Barrett Karish опубликовал патч с реализацией данной функции.

Подключить/отключить сетевой диск

3 июля 2017 года Jared Smudde начал реализацию библиотеки netplwiz.dll, выполняющей данную функцию.

Pusk.png

Меню "Пуск"

На 24 июня 2014 г. в "Пуске" скрыт пункт "Поиск" до реализации данной функции.

16 июля 2016г. была реализована команда "открыть общее меню пуск".

Classicconf.png

В настоящее время, в меню "пуск" работают:

  • выключение
  • завершение сеанса
  • запуск
  • настройки
  • программы
  • справка и поддержка (URL ссылка на сайт проекта)

  • CORE-12158 - "Стандартное" меню пуск

Настройка меню Пуск

  • 21 ноября 2015 года в ревизии r69992 была начата реализация диалога настройки классического меню "Пуск".
  • 22 ноября 2015 года в ревизии r70001 были реализованы кнопки:
    • Add (Добавить) > Открывает мастер создания ярлыков
    • Advancad (Дополнительно) > Открывает %username%/Главное меню
    • Clear (Очистить) > Очищает %username%/Recent (Пуск>Недавнее) [Которое обычно так и не заполняется]

Диалог завершения работы

Shell-poweroff.png

29 сентября 2014 г. в shell-experiments был применен патч нового диалога завершения работы с вариантами "Завершение работы", "Перезагрузка" и "Выход из системы".

Дополнительные возможности

Диалог копирования файлов

Copydialog.png

Работа над диалогом копирования была начата в ноябре 2014 года. (CORE-4476)

  • По состоянию на 23-фев-2015 г. диалог реализован, но без анимации.
  • 23 апреля 2015 г. была добавлена анимация

Отображение скрытых файлов

Реализация данной возможности была начата 17-февраля-2015 года и 14-марта-2015 завершена. (CORE-9207)

Как отображать скрытые файлы см здесь.

Расширения оболочки

Обзор реестра и NT-объектов

15 марта 2015г. была реализована замена обзору реестра и NT-объектов из старого проводника в качестве расширений оболочки. (CORE-9244)

Reg new.png NTObj new.png

Виртуальные рабочие столы

Предположительно, планируется реализовать функцию, известную по старому проводнику, в качестве расширения оболочки.

Улучшение поддержки расширений оболочки

Расширения для панели задач

Разрабатываются в рамках GSoC (панель быстрого запуска, состояние батареи и извлечение USB-устройства).

18 августа 2017 года в транке, в r75611 было добавлено расширение извлечения USB-устройства.

Стрелки сортировки

13 июля в оболочке были реализованы сортировочные стрелки в списке.

Прочие классы

Работа CMergedFolder на примере "Пуска"

CMergedFolder

Классовая структура CMergedFolder - набор классов, основная цель которых - объединение содержимого нескольких папок оболочки в один виртуальный каталог, который включает элементы из всех источников, а также объединение дочерних элементов папок с одинаковым именем в один виртуальный пункт.

Работа над ней была начата 28 июня 2014 г., и на 13 июля 2014 г. она полностью реализована.

Используется в таких меню как:

Программы

CMergedFolder позволяет меню пуск отображать ярлыки программ в:

  • меню "Программы": из обоих каталогов с программами: общего и пользовательского (содержимое папок %userprofile%/Главное меню/Программы и All Users/Главное меню/Программы).
  • меню пуск (содержимое папок %userprofile%/Главное меню и All Users/Главное меню)

Избранное

CMergedFolder позволяет меню избранное отображать содержимое папки %userprofile%/Избранное.

Недавние документы

CMergedFolder позволяет меню пуск отображать пункт "Документы" (содержимое папки %userprofile%/Recent)

CFocusManager

Этот класс необходим для определения и установки областей фокуса и для установки элементов, имеющих фокус на панели меню. Работа над ним была начата вместе со строкой меню.

CShellDispatch

Класс CShellDispatch реализует объекты IShellDispatch v1-6. Т.к. ReactOS стремится к совместимости с Windows Server 2003, то в ней будут реализованы (CORE-6892) v1-4.

Код IShellDispatch2 планируется взять из Wine, перевести на C++, добавить в ReactOS и дописать.

В shldisp.idl также отсутствуют IShellDispatch3 и IShellDispatch4 (а так же v5 и 6, но они не относятся к Windows Server 2003). Они и написанные для них тесты позже будут отправлены в Wine.

Первые коммиты были внесены в ревизиях r71116 и 71117.

  • CORE-12955 - реализация:
    • ShellExecute - открывает или выводит на печать указанный файл. Файл может быть исполняемым файлом или файлом документа[7]
    • IsServiceRunning - возвращает значение, указывающее, запущен ли конкретный сервис[8]
  • 2 апреля 2017 в ревизии r74268 был реализован объект ShutdownWindows - отображающий диалог завершения работы

PaintMenuBar

31 марта 2017 года Янисом был добавлен прототип функции PaintMenuBar, которая отрисовывает градиент и текст сбоку от меню (например, пуск).

Темы в новом проводнике

  • 27 авг 2017 - исправлена поддержка альфа-каналов в темах (CORE-13464, r75688)

Пакет тем см. в Сторонние компоненты.

Настройки через реестр

В ReactOS реализованы некоторые настроки, аналогичные Windows. Их можно изменить как через графический интерфейс, так и через реестр. Для этого следующим параметрам нужно поменять значение (1 - вкл, 0 - выкл) и перезапустить проводник:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\

  • Hidden - показать скрытые файлы и папки
  • HideFileExt - скрыть расширение файлов
  • ListviewShadow - тени у подписей значков на рабочем столе
  • StartMenuLogoff - пункт завершение сеанса в "Пуск"

Скачать сборки

26 ноября 2014 наработки Shell-experiments влиты в транк в ревизии 65496.

ReactOS
Search.png
Доклады
О ReactOSARWINSSЧеЗа
Информация Новости Выпуски новостейПереводы блоговНовости проектаВидеоReactOS на ХабреUSB от Вадима Галянта
Разработка Руководство по программированиюОтсутствующая функциональностьВетви разработкиКомпоненты системыReactOS и WineПлан работРазработчикиСовместимость с dll WindowsНаиболее значимые изменения за годИспользуемые проектыGoogle Summer of CodeИзвестные проблемы
Порты AMD64ARMXboxPowerPC
Компоненты Файловые системыРежим совместимостиОтчеты об ошибкахПечатьUSBЯдро
Загрузчик Восстановление MBRЗагрузка из GRUBПараметры загрузки
Прочее ARWINSSПриложения в ReactOSОформление ReactOSКоординаторы"Пасхальные яйца"Монетизация
Другое Типы ядерFreeWin95
Помощь
RAM-диск ReactOS по PXEс жесткого диска
Разработка Стиль написания кодаСтандарты RC-файловРабота с документациейВенгерская нотацияGNU Indent • [ Subversion : ветвислияниеиспользование TortoiseSVN ] • Основы переводаОтправка патчей
Репорты Отладка в VirtualBoxОтладка на экранДобавление программы в менеджер приложенийОтправка отчетов
Отладка Com0comGDBKdbgRossym.gdbRoswin.gdbWinDBGРуководство по WinDBGВключение трассировки ядраКоды DPRINTУдалённый отладчик ReactOS
Сборка CMakeRBuildФайлы RBuildАвтоматическое копирование файловСборка MINGW-w64Сборка модулейСреда сборки
Тестирование VirtualBoxVMwareQEMUHyper-VНеобходимый объём дискаПеренос файлов на виртуальный дискУстановка ReactOSУстановка драйверов
Сеть Общие папкиSambaNFS
Игры Установка DirectPlay
Обновление ReactOSЗагрузочная флешкаЧем можно помочь проектуСоздание нового пользователяЗвук и сеть в VirtualBoxСъемка и публикация видеоIRC-каналСторонние компоненты
Обзоры ОболочкаNTVDMWOWCommunity Edition