mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-21 05:00:19 +00:00
Added a GTK2/GTK3-aware helper to compute tab viewport size based on orientation and reused it in sizing/scroll handlers to centralize logic.
This commit is contained in:
@@ -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.
|
* GtkViewports request at least as much space as their children do.
|
||||||
* If we don't intervene here, the GtkViewport will be granted its
|
* 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)
|
if (cv->vertical)
|
||||||
{
|
{
|
||||||
adj = gtk_viewport_get_vadjustment (GTK_VIEWPORT (gtk_widget_get_parent (inner)));
|
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
|
} else
|
||||||
{
|
{
|
||||||
adj = gtk_viewport_get_hadjustment (GTK_VIEWPORT (gtk_widget_get_parent (inner)));
|
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)
|
if (gtk_adjustment_get_upper (adj) <= viewport_size)
|
||||||
{
|
{
|
||||||
gtk_widget_hide (((tabview *)cv)->b1);
|
gtk_widget_hide (((tabview *)cv)->b1);
|
||||||
@@ -157,13 +177,13 @@ tab_scroll_left_up_clicked (GtkWidget *widget, chanview *cv)
|
|||||||
if (cv->vertical)
|
if (cv->vertical)
|
||||||
{
|
{
|
||||||
adj = gtk_viewport_get_vadjustment (GTK_VIEWPORT (gtk_widget_get_parent(inner)));
|
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
|
} else
|
||||||
{
|
{
|
||||||
adj = gtk_viewport_get_hadjustment (GTK_VIEWPORT (gtk_widget_get_parent(inner)));
|
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);
|
new_value = tab_search_offset (inner, gtk_adjustment_get_value (adj), 0, cv->vertical);
|
||||||
|
|
||||||
if (new_value + viewport_size > gtk_adjustment_get_upper (adj))
|
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)
|
if (cv->vertical)
|
||||||
{
|
{
|
||||||
adj = gtk_viewport_get_vadjustment (GTK_VIEWPORT (gtk_widget_get_parent(inner)));
|
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
|
} else
|
||||||
{
|
{
|
||||||
adj = gtk_viewport_get_hadjustment (GTK_VIEWPORT (gtk_widget_get_parent(inner)));
|
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);
|
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))
|
if (new_value == 0 || new_value + viewport_size > gtk_adjustment_get_upper (adj))
|
||||||
|
|||||||
Reference in New Issue
Block a user