Хинты размеров окна и максимизация (gtk3, broadway)

Модератор: Модераторы разделов

nick87720z
Сообщения: 169
ОС: Gentoo / Calculate

Хинты размеров окна и максимизация (gtk3, broadway)

Сообщение nick87720z »

У меня приложение - анализатор спектра, в котором ширина фиксирована по кол-ву полос (1 пикс на полосу, всего 512). Чтобы зафиксировать размер, прописал запрос ширины 512 в форме gtkbuilder ui, и зафиксировал макс. ширину через хинты - gtk_window_set_geometry_hints():

Код: Выделить всё

    GdkGeometry geom = {
        .min_width  = -1 ,
        .max_width  = WIN_W ,
        .min_height = 200 ,
        .max_height = mrect.height };
    gtk_window_set_geometry_hints (
        GTK_WINDOW (main_win),
        GTK_WIDGET (gtk_builder_get_object (builder, "spect_panned")),
        & geom,
        GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
На десктопе проблем нет. Максимизацию я никогда не использовал. Хотя было бы не плохо. Хотя развернуть по вертикали можно (средней кнопкой по кнопке развернуть), обычный клик тупо игнорируется.
Здесь https://mail.gnome.org/archives/gtk-list/2009-April/msg00044.html оно работает, хотя явно и gtk старый, и макс. размер только слегка ограничен, но не фиксирован.

Проблема начинается если приложение юзать с GDK_BACKEND=broadway - окна в broadway не ресайзятся. Можно только свернуть/развернут. Однако разворот по ЛКМ тупо игнорируется - ни сигналов, ни событий (проверял window-state-change). Судя по всему, окна в broadway работают с GTK_CSD=1. Однако в том же xfwm4 у окон с CSD также можно цепляться за рамку, в broadway такого нет. Добавление явного GTK_CSD=1 смысла не имеет (похоже, ресайз не зависит от CSD). И это при том, что resize_grip сам по себе выпилен - хотя такая опция есть и в gtk и в glade, её включение ничего не делает.

Можно ли как-то починить максимизацию при фиксированной ширине окна (min_width == max_width == 512), например заставив разворачивать только по вертикали; чтобы решение было универсальным, а не только для CSD ?

Также всё-ещё интересует ресайз окон в broadway. Правильно ли я понял, что сам CSD его не поддерживает, и реализуется только ручным дополнением CSD, реализующим нижнюю рамку?

Edit 1
совсем забыл, прямо перед кодом выше:

Код: Выделить всё

gdk_monitor_get_workarea (mon, & mrect);
Edit 2
Если .max_height = -1, то весь ресайз отключается, и сама максимизация отключается целиком (кнопка Maximize скрыта).

P.S. Кто знает, если вообще смысл соваться на irc://irc.gnome.org/#gtk с подобными вопросами? Сам как-то пробовал, но похоже был проигнорен (несколько раз, ни разу не получал ответов). Или это закрытая тусовка гномеров, фильтрующих всех, кто не в команде?
Спасибо сказали: