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

时间:2018-09-19 21:03:48

标签: css c gtk3

我正在使用一个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进行处理,以尝试禁用隐藏滚动条,但是没有成功。

一种技巧是设置一个计时器,以将运动事件不断发送到窗口,以防止滚动条隐藏...但这非常丑陋。

关于在哪里找到秘密调味料以禁用覆盖滚动条隐藏的任何建议吗?

1 个答案:

答案 0 :(得分:1)

简短的答案是您不能按原样使用GtkScrollableWindow。

我进入source code of the GtkScrollableWindow(搜索“不透明性”)以确认此行为已被证实。

这可能是通过向窗口发送一个周期性的“运动”信号来欺骗它,以使其保持滚动条可见(丑陋!),或者当然是修改GtkScrollableWindow源代码来破解的。更少的技巧是实现我自己的GtkScrollable,或者通过创建GtkOverlay并将GtkScrollbar放在GtkScrollableWindow之上并将这些滚动条动作映射到窗口来实现。

这是该项目的优先级较低的项目,因此我可能没有机会进一步介绍该项目,但是如果有读者能够通过“最佳”方法获得成功,那么至少出于我的好奇心,我们将不胜感激:)