GtkScrolledWindow - Как всегда показывать оверлейную полосу прокрутки - PullRequest
0 голосов
/ 20 сентября 2018

Я работаю с приложением GTK3, которому нужны всегда видимые, всегда активные полосы прокрутки с видимыми степперами.Я смог добиться этого с помощью css:

scrollbar.hover,
scrollbar {
    margin-left: 2px;
    -GtkScrollbar-has-backward-stepper: 1;
    -GtkScrollbar-has-forward-stepper: 1;
}

scrollbar trough {
    min-width: 30px;
}

scrollbar button {
    min-height: 30px;
    min-width: 30px;
}

scrollbar.right slider {
    min-height: 70px;
    min-width: 30px;
}

вместе с этим кодом:

GtkWidget *sw = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); //never horizontal, always vertical
g_object_set(sw, "overlay-scrolling", FALSE, NULL);

Однако установка overlay-scrolling в FALSE означает, чтополосы прокрутки расположены в стороне от окна GtkScrolledWindow, а не внутри него.Это вызывает проблемы с макетом приложения (унаследованное приложение, перенесенное из более ранней версии gtk).

Но если я включу прокрутку с наложением, полосы прокрутки будут скрыты через пару секунд без событий движенияthe GtkScolledWindow.

Я использовал GtkInspector, чтобы связываться со всем, что я могу, пытаясь отключить скрытие полос прокрутки, но безуспешно.

Хаком было бы установить таймер для продолжения отправки.Перемещение событий к окну, чтобы скрыть полосу прокрутки ... но это ужасно некрасиво.

Есть ли какой-нибудь совет, где найти секретный соус для отключения скрытия полосы прокрутки наложения?

1 Ответ

0 голосов
/ 24 сентября 2018

Короткий ответ: вы не можете использовать GtkScrollableWindow как есть.

Я копался в исходном коде GtkScrollableWindow (поиск «непрозрачность»), чтобы подтвердить, что это поведение

Вероятно, это можно было бы взломать, посылая в окно периодический сигнал "движения", чтобы обманным путем сделать так, чтобы полоса прокрутки оставалась видимой (некрасиво!), или, конечно, изменив исходный код GtkScrollableWindow.,Менее хакерским было бы реализовать мой собственный GtkScrollable или, возможно, создать GtkOverlay и поместить GtkScrollbar поверх GtkScrollableWindow и сопоставить эти действия полосы прокрутки с окном.

Это более низкий приоритет для проекта, поэтому явозможно, не получит возможности продвинуться дальше, но если какой-либо читатель сможет подключиться к «лучшему» методу, это будет оценено по крайней мере для моего любопытства:)

...