diff --git a/src/fe-gtk/chanview-tabs.c b/src/fe-gtk/chanview-tabs.c index fecbcbec..1f04d062 100644 --- a/src/fe-gtk/chanview-tabs.c +++ b/src/fe-gtk/chanview-tabs.c @@ -52,6 +52,26 @@ static int tab_right_is_moving = 0; * */ +static inline gint +cv_tabs_get_viewport_size (GdkWindow *parent_win, gboolean vertical) +{ + gint viewport_size = 0; + +#if HAVE_GTK3 + if (vertical) + viewport_size = gdk_window_get_height (parent_win); + else + viewport_size = gdk_window_get_width (parent_win); +#else + if (vertical) + gdk_window_get_geometry (parent_win, 0, 0, 0, &viewport_size, 0); + else + gdk_window_get_geometry (parent_win, 0, 0, &viewport_size, 0, 0); +#endif + + return viewport_size; +} + /* * GtkViewports request at least as much space as their children do. * If we don't intervene here, the GtkViewport will be granted its @@ -80,13 +100,13 @@ cv_tabs_sizealloc (GtkWidget *widget, GtkAllocation *allocation, chanview *cv) if (cv->vertical) { adj = gtk_viewport_get_vadjustment (GTK_VIEWPORT (gtk_widget_get_parent (inner))); - gdk_window_get_geometry (parent_win, 0, 0, 0, &viewport_size, 0); } else { adj = gtk_viewport_get_hadjustment (GTK_VIEWPORT (gtk_widget_get_parent (inner))); - gdk_window_get_geometry (parent_win, 0, 0, &viewport_size, 0, 0); } + viewport_size = cv_tabs_get_viewport_size (parent_win, cv->vertical); + if (gtk_adjustment_get_upper (adj) <= viewport_size) { gtk_widget_hide (((tabview *)cv)->b1); @@ -157,13 +177,13 @@ tab_scroll_left_up_clicked (GtkWidget *widget, chanview *cv) if (cv->vertical) { adj = gtk_viewport_get_vadjustment (GTK_VIEWPORT (gtk_widget_get_parent(inner))); - gdk_window_get_geometry (parent_win, 0, 0, 0, &viewport_size, 0); } else { adj = gtk_viewport_get_hadjustment (GTK_VIEWPORT (gtk_widget_get_parent(inner))); - gdk_window_get_geometry (parent_win, 0, 0, &viewport_size, 0, 0); } + viewport_size = cv_tabs_get_viewport_size (parent_win, cv->vertical); + new_value = tab_search_offset (inner, gtk_adjustment_get_value (adj), 0, cv->vertical); if (new_value + viewport_size > gtk_adjustment_get_upper (adj)) @@ -206,13 +226,13 @@ tab_scroll_right_down_clicked (GtkWidget *widget, chanview *cv) if (cv->vertical) { adj = gtk_viewport_get_vadjustment (GTK_VIEWPORT (gtk_widget_get_parent(inner))); - gdk_window_get_geometry (parent_win, 0, 0, 0, &viewport_size, 0); } else { adj = gtk_viewport_get_hadjustment (GTK_VIEWPORT (gtk_widget_get_parent(inner))); - gdk_window_get_geometry (parent_win, 0, 0, &viewport_size, 0, 0); } + viewport_size = cv_tabs_get_viewport_size (parent_win, cv->vertical); + new_value = tab_search_offset (inner, gtk_adjustment_get_value (adj), 1, cv->vertical); if (new_value == 0 || new_value + viewport_size > gtk_adjustment_get_upper (adj))