summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Fourdan <fourdan@xfce.org>2015-01-26 20:52:29 +0100
committerOlivier Fourdan <fourdan@xfce.org>2015-01-26 20:52:29 +0100
commit120c4746a24df5d74c9ecfaa76b44e3ace5ed47b (patch)
treee5c9a8b9b443771232d75a51c34d83f3e188b114
parent3af37ad21eead0c26e3a9813aa2f0ff4e9bd7dce (diff)
downloadxfwm4-120c4746a24df5d74c9ecfaa76b44e3ace5ed47b.tar.gz
Fix tabwin cols/rows computation
Signed-off-by: Olivier Fourdan <fourdan@xfce.org>
-rw-r--r--configure.ac.in10
-rw-r--r--src/tabwin.c20
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)