我有一个C GTK3 application使用GtkScrolledWindow,里面有一个GtkGrid。我对所有内容的布局感到满意,但是如果光标在滚动条上方,或者我用光标移动滚动条,ScrolledWindow只会通过鼠标滚轮滚动。我正在寻找的行为是鼠标滚轮在使用鼠标滚轮时总是滚动ScrolledWindow,或者至少当光标在ScrolledWindow上时(这是我认为的默认值)。
以下是创建ScrolledWindow的地方:
scroll = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scroll), BANNER_HIGHT * 4);
(The location of these lines in the application (GitHub))
我现在想知道是否必须将GtkAdjustment传递给构造函数,但似乎所有这一切都设置了滚动边界。我也想知道我是否可以在主窗口上连接mousescroll事件并尝试在回调时手动触发它,但我也没有办法做到这一点。
答案 0 :(得分:0)
这实际上似乎是GTK和/或操作系统(Ubuntu)中的一个错误,我试图在我的笔记本电脑的触控板上使用多点触控滚动手势滚动,但这不起作用。今天,我碰巧有一个普通的鼠标插入了一个实际的滚轮,发现它工作得很好。
更新:我通过订阅滚动事件并使用GtkAdjustment手动调整滚动窗口来添加我正在寻找的行为:
bool scroll_entrires(GtkWidget * widget, GdkEvent * event, gpointer data) {
double delta_x, delta_y; // delta_y is not used
if (gdk_event_get_scroll_deltas(event, &delta_x, &delta_y)) {
GtkAdjustment * adj = gtk_scrolled_window_get_vadjustment(
GTK_SCROLLED_WINDOW(scroll));
gtk_adjustment_set_value(adj,
gtk_adjustment_get_value(adj) + 30 * delta_y);
// 30 is a number that I like for my setup but can
// be changed for other situations.
return true; // We have responded to the event
}
return false; // Let other handlers respond to this event
}
// ... (In my init code)
g_signal_connect(window, "scroll-event", G_CALLBACK(scroll_entries), NULL);