LINUX.ORG.RU

Gtk floating widget


0

2

Мои интернеты на сабж выдают два решения:

1) Использовать GtkFixed или аналогичный самописный контейнер.

2) Помещать виджет в отдельное окно и мудохаться с его позиционированием.

Честно говоря, оба варианта никакого восторга не вызывают. Но сегодня пришло озарение.

parent_window # GdkWindow родителя, куда будет помещен плавающий виджет
widget # Собственно виджет

window = gtk.Window(gtk.WINDOW_POPUP)
window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_TOOLTIP)
window.add(widget)
widget.show_all()
window.realize()

# Внимание, сейчас вылетит птичка!
window.window.reparent(parent_window, pos_x, pos_y)
window.show()

В итоге получаем как бы плавающий виджет с такими плюшками:

* Не надо вмешиваться в структуру лейаутов.

* Мы можем использовать GTK_WINDOW_POPUP, который адекватно воспринимается всеми(?) wm и при этом не следить за перекрытиями родительского окна или его потерями/приобретениями фокуса.

* Такой плавающий виджет привязан к окну, то есть перемещения родителя никак не повлияют на позицию. Надо следить только за ресайзом.

Метод проверен на open/flux-боксах и в awesome — работает там просто прекрасно. Посему вопрос: кто нибудь трогал репарентинг гдкашных окон, будут ли сюрпризы в офтопике (ну это я скоро сам проверю) или макоси? Или всё хорошо и эта часть полностью абстрагирована от бэкенда?

★★★
Ответ на: комментарий от Amp

Для фидбэка. Разные информационные плашки, по типу прогресса операции. И сообщения пользователю что он не так делает или наоборот его действие успешно выполнено.

Сейчас пилю UX-либу которая воплощает принцип Snaked: на экране должна быть только необходимая в данный момент информация. Весь мусор хочу загнать в плавающие скрываемые виджеты.

GtkInfoBar не устраивает вообще никак. Омерзительное нечто которое меняет текущие размеры объектов. Какой светлой голове пришла идея так рвать контекст пользователю? Даже всплывающие окна не такое зло.

baverman ★★★
() автор топика

UPD: В винде работает, но криво. Забирает фокус у главного окна. Надо разбираться с флагами.

baverman ★★★
() автор топика
Ответ на: комментарий от baverman

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

tensai_cirno ★★★★★
()

я менюшки похожие на крайзисный выбор режима брони делал из toplevel window(не popup то есть), без декораций, skippager=tru, skipчототамbar=tru, добавляешь alpha канал к окну, делаешь его app_paintable, при отрисовке сперва рисуешь в окно source, а потом что хочешь

ckotinko ☆☆☆
()
Ответ на: комментарий от ckotinko

делаешь его app_paintable, при отрисовке сперва рисуешь в окно source, а потом что хочешь

Ok, возьму на заметку, как самый последний вариант.

baverman ★★★
() автор топика

UPD2: Под компизом тоже всё пучком. Пожалуй, метод можно считать годным к применению, по крайней мере в линуксах.

baverman ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.