GtkScrolledWindow - 如何始终显示覆盖滚动条



我正在使用一个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 移植的旧版应用程序(出现布局问题。

但是,如果我启用覆盖滚动,滚动条会在几秒钟后隐藏,而不会对 GtkScolledWindow 发生运动事件。

我一直在使用 GtkInspector 来弄乱任何我能尝试和禁用隐藏滚动条的东西,但没有成功。

一个技巧是设置一个计时器来不断向窗口发送运动事件,以防止滚动条隐藏......但这太丑了。

关于在哪里可以找到禁用覆盖滚动条隐藏的秘密武器的任何建议?

简短的回答是你不能按原样使用 GtkScrollableWindow。

我深入研究了GtkScrollableWindow的源代码(搜索"不透明度"(,以确认这种行为是内置的。

这可以通过向窗口发送周期性的"运动"信号来欺骗它保持滚动条可见(丑陋!(,或者,当然,修改GtkScrollableWindow源代码。 实现我自己的GtkScrollable,或者通过创建一个GtkOverlay并将GtkScrollbar放在GtkScrollableWindow的顶部并将这些滚动条操作映射到窗口

。这是该项目的较低优先级,因此我可能没有机会进一步研究它,但如果任何读者能够使用"最佳"方法,至少我的好奇心将不胜感激:)

最新更新