From 120c4746a24df5d74c9ecfaa76b44e3ace5ed47b Mon Sep 17 00:00:00 2001 From: Olivier Fourdan <fourdan@xfce.org> Date: Mon, 26 Jan 2015 20:52:29 +0100 Subject: [PATCH] Fix tabwin cols/rows computation Signed-off-by: Olivier Fourdan <fourdan@xfce.org> --- configure.ac.in | 10 ++++++---- src/tabwin.c | 20 +++++++++++++++----- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/configure.ac.in b/configure.ac.in index aaf122a29..6223afa17 100644 --- a/configure.ac.in +++ b/configure.ac.in @@ -67,6 +67,11 @@ AC_CHECK_HEADERS([stropts.h]) AC_CHECK_FUNCS([daemon setsid]) AC_CHECK_FUNCS(opendir) +dnl Math lib is required (if available) +MATH_LIBS="" +AC_CHECK_LIB(m, ceil, MATH_LIBS="-lm") +AC_SUBST([MATH_LIBS]) + dnl Check for i18n support XDT_I18N([@LINGUAS@]) @@ -184,7 +189,7 @@ dnl Xcomposite and related extensions dnl compositor="no" ENABLE_COMPOSITOR="" -MATH_LIBS="" + AC_ARG_ENABLE([compositor], AC_HELP_STRING([--enable-compositor], [enable compositor in xfwm4 (default)]) AC_HELP_STRING([--disable-compositor], [disable compositor in xfwm4]), @@ -198,12 +203,9 @@ if test x"$enable_compositor" = x"yes"; then ENABLE_COMPOSITOR="--enable-compositor" AC_DEFINE([HAVE_COMPOSITOR], [1], [Define to enable compositor]) compositor="yes" - dnl Math lib is required for compositor internals - MATH_LIBS=" -lm" fi fi fi -AC_SUBST([MATH_LIBS]) AC_SUBST(ENABLE_COMPOSITOR) dnl diff --git a/src/tabwin.c b/src/tabwin.c index 9d9fb1d0d..d3beaca5b 100644 --- a/src/tabwin.c +++ b/src/tabwin.c @@ -44,6 +44,10 @@ #define WIN_BORDER_WIDTH 1 #endif +#ifndef WIN_MAX_RATIO +#define WIN_MAX_RATIO 0.80 +#endif + #ifndef WIN_ALPHA #define WIN_ALPHA 0.85 #endif @@ -56,6 +60,7 @@ #define WIN_BORDER_RADIUS 10 #endif +#include <math.h> #include <glib.h> #include <gdk/gdk.h> #include <gtk/gtk.h> @@ -727,11 +732,14 @@ computeTabwinData (ScreenInfo *screen_info, TabwinWidget *tabwin_widget) "icon-size", &tabwin->icon_size, NULL); } size_request = tabwin->icon_size + tabwin->label_height + 2 * WIN_ICON_BORDER; - tabwin->grid_cols = (tabwin->monitor_width / (size_request)) * 0.75; - tabwin->grid_rows = tabwin->client_count / tabwin->grid_cols; + tabwin->grid_cols = (int) (floor ((double) tabwin->monitor_width * WIN_MAX_RATIO / + (double) size_request)); + tabwin->grid_rows = (int) (ceil ((double) tabwin->client_count / + (double) tabwin->grid_cols)); /* If we run out of space, halve the icon size to make more room. */ - while ((size_request) * tabwin->grid_rows > tabwin->monitor_height - tabwin->label_height) + while ((size_request) * tabwin->grid_rows + tabwin->label_height > + ((double) tabwin->monitor_height) * WIN_MAX_RATIO) { /* Disable preview otherwise it'd be too slow */ if (preview) @@ -749,8 +757,10 @@ computeTabwinData (ScreenInfo *screen_info, TabwinWidget *tabwin_widget) size_request = tabwin->icon_size + tabwin->label_height + 2 * WIN_ICON_BORDER; /* Recalculate with new icon size */ - tabwin->grid_cols = (tabwin->monitor_width / (size_request)) * 0.75; - tabwin->grid_rows = tabwin->client_count / tabwin->grid_cols + 1; + tabwin->grid_cols = (int) (floor ((double) tabwin->monitor_width * WIN_MAX_RATIO / + (double) size_request)); + tabwin->grid_rows = (int) (ceil ((double) tabwin->client_count / + (double) tabwin->grid_cols)); /* Shrinking the icon too much makes it hard to see */ if (tabwin->icon_size < 8) -- GitLab