我正在使用一个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进行处理,以尝试禁用隐藏滚动条,但是没有成功。
一种技巧是设置一个计时器,以将运动事件不断发送到窗口,以防止滚动条隐藏...但这非常丑陋。
关于在哪里找到秘密调味料以禁用覆盖滚动条隐藏的任何建议吗?
答案 0 :(得分:1)
简短的答案是您不能按原样使用GtkScrollableWindow。
我进入source code of the GtkScrollableWindow(搜索“不透明性”)以确认此行为已被证实。
这可能是通过向窗口发送一个周期性的“运动”信号来欺骗它,以使其保持滚动条可见(丑陋!),或者当然是修改GtkScrollableWindow源代码来破解的。更少的技巧是实现我自己的GtkScrollable,或者通过创建GtkOverlay并将GtkScrollbar放在GtkScrollableWindow之上并将这些滚动条动作映射到窗口来实现。
这是该项目的优先级较低的项目,因此我可能没有机会进一步介绍该项目,但是如果有读者能够通过“最佳”方法获得成功,那么至少出于我的好奇心,我们将不胜感激:)