Как мы уже писали, тайлингу в KDE с GSoC’ом не повезло, но соответствующая заявка-то была сделана!
И что самое интересное, её автор — Nikhil Marathe, не смотря на неудачу, свою идею не бросил, а начал, под мудрым руководством Martin Graesslin, медленно, но верно воплощать её в жизнь.
Задачи, которые поставил перед собой Nikhil:
- Предоставить интуитивно-понятный фреймовый режим, с различными слоями (как в Awesome) и поддержкой для отдельных плавающих окон.
- Предоставить D-BUS API для тайлинга, чтобы другие приложения, включая плазму, могли им легко воспользоваться.
- Использовать композит и мышь где только это возможно
- При перетаскивании окон к краям экрана они должны автоматически вдвое уменьшаться в размере как было предложено здесь. По возможности расширить и дополнить эту возможность.
- Пометка/выделение – перемещать/размещать в фрейме только определенные окна.
- Стек фреймов как цельный набор окон, может быть задвинут назад, выдвинут вперёд или передвинут, без нарушения порядка оконной мозаики. Это свойство также можно расширить и на работу несколькими мониторами.
- Позаимствовать из KWin-эффекта ‘Present Windows’ возможность выделения пользователем окон, печатая определенный фильтр для оконного заголовка: фильтр по слову Dolphin расположит в мозаике только окна Dolphin’a, оставив окно xchat болтаться в центре.
Детали воплощения
В идеале — полная поддержка тайлинга в KWin, что включает в себя:
- Согласование всех вносимых изменений с командами KWin и KDE Usability.
- Код поддержки тайлинга, включая новые режимы расположения, стэки, управление сессиями и экранные жесты, должен быть добавлен непосредственно в ядро KWin.
- Awesome как источник вдохновения и алгоритмов.
- Правильное взаимодействие с командами WM, такими как Cascade, Unclutter или Present Windows.
- Выделение/отметка окон и соответствующие клавиатурные комбинации.
- D-BUS API.
- Работа со слоями, стэком окон.
- Настраиваемые опции перемещения окон, «вменяемые» шорткаты для слоёв, исключающие конфликты с существующими горячими клавишами. Эквивалентная поддержка мыши и клавиатуры: всё, что можно сделать с помощью клавиатуры, можно будет выполнить и мышью.
- Добавить поддержку группировки plasma-панелей и виджетов в код панели задач и API D-BUS.
- Возможность исключить стандартными средствами KWin встраивание некоторых типов окон и приложений в мозаику.
- Пользовательская документация, исправление ошибок.
Текущий прогресс
Для совсем нетерпеливых — код лежит здесь. Также понадобится отредактировать $KDEDIR/share/config/kwinrc и выставить Placement=Tiling
Один из первых прототипов, решено использовать бинарное дерево в качестве внутреннего представления.
После этого была добавлена поддержка минимизации, вертикальная и горизонтальная ориентация, коэффициент заполнения (пропорция, определяющая сколько места слева займёт потомок).
Не забыт и D-BUS, можно использовать следующие вызовы:
qdbus org.kde.kwin /KWin slotToggleOrientation qdbus org.kde.kwin /KWin slotSetRatio # between 0 and 1 qdbus org.kde.kwin /KWin dumpTiles # get a nice tree if you have debugging enabled and visible
За тем была реализована поддержка динамического изменения размера — если увеличить размер одного окна, остальные подстроятся под него; и первая схема (layout) размещения окон — Спираль, уполовинивающая размеры фреймов по направлению движения к центру спирали. Планируется реализовать все схемы/макеты в виде отдельных плагинов, и дать возможность назначить на каждый виртуальный рабочий стол свою схему размещения.
Ну и в последнем на сегодняшний день статус-репорте сообщается следующее:
- Каждый рабочий стол теперь имеет свою собственную схему.
- Корневой фрейм теперь теперь не содержится непосредственно в рабочем пространстве (workspace), а наоборот, workspace хранит схемы для каждого десктопа.
- Сейчас каждый десктоп по умолчанию имеет схему Спираль, но схему можно поменять и на ходу.
- Добавлена поддержка перемещения окон между виртуальными рабочими столами: сначала это было большой проблемой, но теперь — просто дело удаления фрейма на одном десктопе и добавления его на другой.
В текущих планах значится исправление некоторых багов: например, спираль не понимает, когда окно было закрыто и не подстраивает следующее как нужно.
Скриншотов нет, так как все последние изменения видны только в динамике, а скринкаст автору было делать лениво. Но вы-то всегда можете скомпилировать KWin из соответствующей ветки репозитория :)
-
Aleksey Kunitkiy
-
SeaJey
-
muhas





