MD_DOCS = README.md doc/CONTRIBUTING.md doc/INSTALL.md doc/MISC.md doc/TODO.md
XSESSIONS ?= $(PREFIX)/share/xsessions
-WM_SRC = bspwm.c helpers.c jsmn.c settings.c monitor.c desktop.c tree.c stack.c history.c \
+WM_SRC = bspwm.c helpers.c geometry.c jsmn.c settings.c monitor.c desktop.c tree.c stack.c history.c \
events.c pointer.c window.c messages.c parse.c query.c restore.c rule.c ewmh.c subscribe.c
WM_OBJ = $(WM_SRC:.c=.o)
CLI_SRC = bspc.c helpers.c
--- /dev/null
+/* Copyright (c) 2012, Bastien Dejean
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <math.h>
+#include "geometry.h"
+
+double distance(xcb_point_t a, xcb_point_t b)
+{
+ return hypot(a.x - b.x, a.y - b.y);
+}
+
+bool is_inside(xcb_point_t p, xcb_rectangle_t r)
+{
+ return (p.x >= r.x && p.x < (r.x + r.width) &&
+ p.y >= r.y && p.y < (r.y + r.height));
+}
+
+unsigned int area(xcb_rectangle_t r)
+{
+ return r.width * r.height;
+}
+
+bool rect_eq(xcb_rectangle_t a, xcb_rectangle_t b)
+{
+ return (a.x == b.x && a.y == b.y &&
+ a.width == b.width && a.height == b.height);
+}
+
+int rect_cmp(xcb_rectangle_t r1, xcb_rectangle_t r2)
+{
+ if (r1.y >= (r2.y + r2.height)) {
+ return 1;
+ } else if (r2.y >= (r1.y + r1.height)) {
+ return -1;
+ } else {
+ if (r1.x >= (r2.x + r2.width)) {
+ return 1;
+ } else if (r2.x >= (r1.x + r1.width)) {
+ return -1;
+ } else {
+ return area(r1) - area(r2);
+ }
+ }
+}
--- /dev/null
+/* Copyright (c) 2012, Bastien Dejean
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef BSPWM_GEOMETRY_H
+#define BSPWM_GEOMETRY_H
+
+#include <stdbool.h>
+#include <xcb/xcb.h>
+
+double distance(xcb_point_t a, xcb_point_t b);
+bool is_inside(xcb_point_t p, xcb_rectangle_t r);
+unsigned int area(xcb_rectangle_t r);
+bool rect_eq(xcb_rectangle_t a, xcb_rectangle_t b);
+int rect_cmp(xcb_rectangle_t r1, xcb_rectangle_t r2);
+
+#endif
#include <sys/stat.h>
#include <fcntl.h>
#include <ctype.h>
-#include <math.h>
#include "bspwm.h"
void warn(char *fmt, ...)
}
return true;
}
-
-bool rect_eq(xcb_rectangle_t a, xcb_rectangle_t b)
-{
- return (a.x == b.x && a.y == b.y && a.width == b.width && a.height == b.height);
-}
-
-bool is_inside(xcb_point_t p, xcb_rectangle_t r)
-{
- return (p.x >= r.x && p.x < (r.x + r.width) &&
- p.y >= r.y && p.y < (r.y + r.height));
-}
-
-double distance(xcb_point_t a, xcb_point_t b)
-{
- return hypot(a.x - b.x, a.y - b.y);
-}
char *read_string(const char *file_path, size_t *tlen);
uint32_t get_color_pixel(const char *color);
bool is_hex_color(const char *color);
-bool rect_eq(xcb_rectangle_t a, xcb_rectangle_t b);
-bool is_inside(xcb_point_t p, xcb_rectangle_t r);
-double distance(xcb_point_t a, xcb_point_t b);
#endif
#include "history.h"
#include "query.h"
#include "settings.h"
+#include "geometry.h"
#include "tree.h"
#include "subscribe.h"
#include "window.h"
put_status(SBSC_MASK_MONITOR_FOCUS, "monitor_focus %s\n", m->name);
}
-int monitor_cmp(monitor_t *m1, monitor_t *m2)
-{
- xcb_rectangle_t r1 = m1->rectangle;
- xcb_rectangle_t r2 = m2->rectangle;
- if (r1.y >= (r2.y + r2.height)) {
- return 1;
- } else if (r2.y >= (r1.y + r1.height)) {
- return -1;
- } else {
- if (r1.x >= (r2.x + r2.width)) {
- return 1;
- } else if (r2.x >= (r1.x + r1.width)) {
- return -1;
- } else {
- return 0;
- }
- }
-}
-
void add_monitor(monitor_t *m)
{
xcb_rectangle_t r = m->rectangle;
mon_tail = m;
} else {
monitor_t *a = mon_head;
- while (a != NULL && monitor_cmp(m, a) > 0) {
+ while (a != NULL && rect_cmp(m->rectangle, a->rectangle) > 0) {
a = a->next;
}
if (a != NULL) {
void embrace_client(monitor_t *m, client_t *c);
void adapt_geometry(xcb_rectangle_t *rs, xcb_rectangle_t *rd, node_t *n);
void focus_monitor(monitor_t *m);
-int monitor_cmp(monitor_t *m1, monitor_t *m2);
void add_monitor(monitor_t *m);
void remove_monitor(monitor_t *m);
void merge_monitors(monitor_t *ms, monitor_t *md);
#include "history.h"
#include "monitor.h"
#include "query.h"
+#include "geometry.h"
#include "subscribe.h"
#include "settings.h"
#include "stack.h"
if (n == NULL) {
return 0;
}
- xcb_rectangle_t rect = get_rectangle(d, n);
- return rect.width * rect.height;
+ return area(get_rectangle(d, n));
}
int tiled_count(node_t *n)
#include "query.h"
#include "rule.h"
#include "settings.h"
+#include "geometry.h"
#include "stack.h"
#include "tree.h"
#include "parse.h"