commit df7e4a4517d0078deebaac2348838d8e4658d11f
parent 234dfa1c2918437f40a27a2fe70d6faf72289eaf
Author: lumidify <nobody@lumidify.org>
Date:   Sat, 20 Feb 2021 22:52:57 +0100
Fix lots of warnings
...but at what cost?
Seriously, I need to rethink some things to make this less ugly.
Diffstat:
17 files changed, 142 insertions(+), 119 deletions(-)
diff --git a/box.c b/box.c
@@ -25,6 +25,7 @@
 #include <stdlib.h>
 #include <stdarg.h>
 #include <stdint.h>
+#include <string.h>
 
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
@@ -45,7 +46,7 @@ static void ltk_box_child_size_change(ltk_widget *self, ltk_widget *widget);
 static int ltk_box_add(ltk_window *window, ltk_widget *widget, ltk_box *box, unsigned short sticky, char **errstr);
 static int ltk_box_remove(ltk_window *window, ltk_widget *widget, ltk_widget *self, char **errstr);
 /* static int ltk_box_clear(ltk_window *window, ltk_box *box, int shallow, char **errstr); */
-static void ltk_box_scroll(ltk_box *box);
+static void ltk_box_scroll(ltk_widget *self);
 static int ltk_box_mouse_event(ltk_box *box, XEvent event, void (*handler)(ltk_widget *, XEvent));
 static int ltk_box_mouse_press(ltk_widget *self, XEvent event);
 static int ltk_box_mouse_release(ltk_widget *self, XEvent event);
@@ -76,7 +77,7 @@ static int ltk_box_cmd_create(
 
 static void
 ltk_box_draw(ltk_widget *self, ltk_rect clip) {
-	ltk_box *box = self;
+	ltk_box *box = (ltk_box *)self;
 	ltk_widget *ptr;
 	ltk_rect real_clip = ltk_rect_intersect(box->widget.rect, clip);
 	for (size_t i = 0; i < box->num_widgets; i++) {
@@ -85,7 +86,7 @@ ltk_box_draw(ltk_widget *self, ltk_rect clip) {
 		   obviously outside of clipping rect */
 		ptr->draw(ptr, real_clip);
 	}
-	box->sc->widget.draw(box->sc, real_clip);
+	box->sc->widget.draw((ltk_widget *)box->sc, real_clip);
 }
 
 static ltk_box *
@@ -112,7 +113,7 @@ ltk_box_create(ltk_window *window, const char *id, ltk_orientation orient) {
 
 static void
 ltk_box_destroy(ltk_widget *self, int shallow) {
-	ltk_box *box = self;
+	ltk_box *box = (ltk_box *)self;
 	ltk_widget *ptr;
 	if (!shallow) {
 		for (size_t i = 0; i < box->num_widgets; i++) {
@@ -123,7 +124,7 @@ ltk_box_destroy(ltk_widget *self, int shallow) {
 	ltk_free(box->widgets);
 	ltk_remove_widget(box->widget.id);
 	ltk_free(box->widget.id);
-	box->sc->widget.destroy(box->sc, 0);
+	box->sc->widget.destroy((ltk_widget *)box->sc, 0);
 	ltk_free(box);
 }
 
@@ -133,7 +134,7 @@ ltk_box_destroy(ltk_widget *self, int shallow) {
    (in the scrolled direction) when resized. */
 static void
 ltk_recalculate_box(ltk_widget *self) {
-	ltk_box *box = self;
+	ltk_box *box = (ltk_box *)self;
 	ltk_widget *ptr;
 	ltk_rect *sc_rect = &box->sc->widget.rect;
 	int offset = box->orient == LTK_HORIZONTAL ? box->widget.rect.x : box->widget.rect.y;
@@ -189,7 +190,7 @@ ltk_recalculate_box(ltk_widget *self) {
 
 static void
 ltk_box_child_size_change(ltk_widget *self, ltk_widget *widget) {
-	ltk_box *box = self;
+	ltk_box *box = (ltk_box *)self;
 	short size_changed = 0;
 	/* This is always reset here - if it needs to be changed,
 	   the resize function called by the last child_size_change
@@ -214,9 +215,9 @@ ltk_box_child_size_change(ltk_widget *self, ltk_widget *widget) {
 	}
 
 	if (size_changed && box->widget.parent && box->widget.parent->child_size_change)
-		box->widget.parent->child_size_change(box->widget.parent, box);
+		box->widget.parent->child_size_change(box->widget.parent, (ltk_widget *)box);
 	else
-		ltk_recalculate_box(box);
+		ltk_recalculate_box((ltk_widget *)box);
 }
 
 static int
@@ -245,9 +246,9 @@ ltk_box_add(ltk_window *window, ltk_widget *widget, ltk_box *box, unsigned short
 		if (widget->ideal_w + sc_w > box->widget.ideal_w)
 			box->widget.ideal_w = widget->ideal_w + sc_w;
 	}
-	widget->parent = box;
+	widget->parent = (ltk_widget *)box;
 	widget->sticky = sticky;
-	ltk_box_child_size_change(box, widget);
+	ltk_box_child_size_change((ltk_widget *)box, widget);
 	ltk_window_invalidate_rect(window, box->widget.rect);
 
 	return 0;
@@ -255,10 +256,10 @@ ltk_box_add(ltk_window *window, ltk_widget *widget, ltk_box *box, unsigned short
 
 static int
 ltk_box_remove(ltk_window *window, ltk_widget *widget, ltk_widget *self, char **errstr) {
-	ltk_box *box = self;
+	ltk_box *box = (ltk_box *)self;
 	int sc_w = box->sc->widget.rect.w;
 	int sc_h = box->sc->widget.rect.h;
-	if (widget->parent != box) {
+	if (widget->parent != (ltk_widget *)box) {
 		*errstr = "Widget isn't contained in given box.\n";
 		return 1;
 	}
@@ -298,19 +299,18 @@ ltk_box_remove(ltk_window *window, ltk_widget *widget, ltk_widget *self, char **
 }
 
 static void
-ltk_box_scroll(ltk_box *box) {
-	ltk_recalculate_box(box);
+ltk_box_scroll(ltk_widget *self) {
+	ltk_box *box = (ltk_box *)self;
+	ltk_recalculate_box(self);
 	ltk_window_invalidate_rect(box->widget.window, box->widget.rect);
 }
 
 static int
 ltk_box_mouse_event(ltk_box *box, XEvent event, void (*handler)(ltk_widget *, XEvent)) {
-	int pos, start, size;
 	ltk_widget *widget;
-	int old_sc_pos = box->sc->cur_pos;
 
 	if (ltk_collide_rect(box->sc->widget.rect, event.xbutton.x, event.xbutton.y)) {
-		handler(box->sc, event);
+		handler((ltk_widget *)box->sc, event);
 		return 0;
 	}
 
@@ -327,19 +327,19 @@ ltk_box_mouse_event(ltk_box *box, XEvent event, void (*handler)(ltk_widget *, XE
 
 static int
 ltk_box_mouse_press(ltk_widget *self, XEvent event) {
-	ltk_box *box = self;
+	ltk_box *box = (ltk_box *)self;
 	return ltk_box_mouse_event(box, event, <k_widget_mouse_press_event);
 }
 
 static int
 ltk_box_mouse_release(ltk_widget *self, XEvent event) {
-	ltk_box *box = self;
+	ltk_box *box = (ltk_box *)self;
 	return ltk_box_mouse_event(box, event, <k_widget_mouse_release_event);
 }
 
 static int
 ltk_box_motion_notify(ltk_widget *self, XEvent event) {
-	ltk_box *box = self;
+	ltk_box *box = (ltk_box *)self;
 	return ltk_box_mouse_event(box, event, <k_widget_motion_notify_event);
 }
 
@@ -359,7 +359,7 @@ ltk_box_cmd_add(
 		*errstr = "Invalid number of arguments.\n";
 		return 1;
 	}
-	box = ltk_get_widget(tokens[1], LTK_BOX, errstr);
+	box = (ltk_box *)ltk_get_widget(tokens[1], LTK_BOX, errstr);
 	widget = ltk_get_widget(tokens[3], LTK_WIDGET, errstr);
 	if (!box || !widget) {
 		*errstr = "Invalid widget ID.\n";
@@ -400,14 +400,14 @@ ltk_box_cmd_remove(
 		*errstr = "Invalid number of arguments.\n";
 		return 1;
 	}
-	box = ltk_get_widget(tokens[1], LTK_BOX, errstr);
+	box = (ltk_box *)ltk_get_widget(tokens[1], LTK_BOX, errstr);
 	widget = ltk_get_widget(tokens[3], LTK_WIDGET, errstr);
 	if (!box || !widget) {
 		*errstr = "Invalid widget ID.\n";
 		return 1;
 	}
 
-	return ltk_box_remove(window, widget, box, errstr);
+	return ltk_box_remove(window, widget, (ltk_widget *)box, errstr);
 }
 
 /* box <box id> create <orientation> */
@@ -436,8 +436,8 @@ ltk_box_cmd_create(
 		*errstr = "Invalid orientation.\n";
 		return 1;
 	}
-	box = ltk_box_create(window, tokens[1], orient);
-	ltk_set_widget(box, tokens[1]);
+	box = (ltk_box *)ltk_box_create(window, tokens[1], orient);
+	ltk_set_widget((ltk_widget *)box, tokens[1]);
 
 	return 0;
 }
diff --git a/button.c b/button.c
@@ -127,7 +127,7 @@ ltk_button_ini_handler(ltk_window *window, const char *prop, const char *value) 
 
 static void
 ltk_button_draw(ltk_widget *self, ltk_rect clip) {
-	ltk_button *button = self;
+	ltk_button *button = (ltk_button *)self;
 	ltk_window *window = button->widget.window;
 	ltk_rect rect = button->widget.rect;
 	ltk_rect clip_final = ltk_rect_intersect(clip, rect);
@@ -188,16 +188,17 @@ ltk_button_redraw_pixmap(ltk_button *button) {
 /* FIXME: Make this amortised constant; make it generic for all widgets */
 static void
 ltk_button_resize(ltk_widget *self) {
-	ltk_button *button = self;
+	ltk_button *button = (ltk_button *)self;
 	Window win;
-	int x, y, w, h, bw, d;
-	int new_w, new_h;
+	int x, y;
+	unsigned int w, h, bw, d;
+	unsigned int new_w, new_h;
 	ltk_window *window = button->widget.window;
 	ltk_rect rect = button->widget.rect;
 	XGetGeometry(window->dpy, button->pixmap, &win, &x, &y, &w, &h, &bw, &d);
 
-	new_w = w < rect.w ? rect.w : w;
-	new_h = h < rect.h ? rect.h : h;
+	new_w = (int)w < rect.w ? rect.w : (int)w;
+	new_h = (int)h < rect.h ? rect.h : (int)h;
 	if (new_w < w && new_h < h)
 		return;
 	XFreePixmap(window->dpy, button->pixmap);
@@ -208,8 +209,7 @@ ltk_button_resize(ltk_widget *self) {
 
 static void
 ltk_button_change_state(ltk_widget *self) {
-	ltk_button *button = self;
-	ltk_window *window = button->widget.window;
+	ltk_button *button = (ltk_button *)self;
 	LtkColor *fill;
 	switch (button->widget.state) {
 	case LTK_NORMAL:
@@ -233,7 +233,8 @@ ltk_button_change_state(ltk_widget *self) {
 
 static int
 ltk_button_mouse_release(ltk_widget *self, XEvent event) {
-	ltk_button *button = self;
+	(void)event;
+	ltk_button *button = (ltk_button *)self;
 	ltk_queue_event(button->widget.window, LTK_EVENT_BUTTON, button->widget.id, "button_click");
 	return 1;
 }
@@ -257,14 +258,15 @@ ltk_button_create(ltk_window *window, const char *id, const char *text) {
 	button->pixmap = XCreatePixmap(window->dpy, window->xwindow,
 	    button->widget.ideal_w, button->widget.ideal_h, window->depth);
 	/* render text */
-	ltk_button_change_state(button);
+	ltk_button_change_state((ltk_widget *)button);
 
 	return button;
 }
 
 static void
 ltk_button_destroy(ltk_widget *self, int shallow) {
-	ltk_button *button = self;
+	(void)shallow;
+	ltk_button *button = (ltk_button *)self;
 	if (!button) {
 		ltk_warn("Tried to destroy NULL button.\n");
 		return;
@@ -292,7 +294,7 @@ ltk_button_cmd_create(
 		return 1;
 	}
 	button = ltk_button_create(window, tokens[1], tokens[3]);
-	ltk_set_widget(button, tokens[1]);
+	ltk_set_widget((ltk_widget *)button, tokens[1]);
 
 	return 0;
 }
diff --git a/color.c b/color.c
@@ -15,5 +15,7 @@ ltk_color_create(Display *dpy, int screen, Colormap cm, const char *hex, LtkColo
 	/* FIXME: replace with XftColorAllocValue; error checking */
 	#if USE_PANGO == 1
 	XftColorAllocName(dpy, DefaultVisual(dpy, screen), cm, hex, &col->xftcolor);
+	#else
+	(void)screen;
 	#endif
 }
diff --git a/draw.c b/draw.c
@@ -36,7 +36,7 @@
 #include "util.h"
 #include "draw.h"
 
-static void ltk_draw_draw(ltk_widget *self);
+static void ltk_draw_draw(ltk_widget *self, ltk_rect clip_rect);
 static ltk_draw *ltk_draw_create(ltk_window *window,
     const char *id, int w, int h, const char *color);
 static void ltk_draw_resize(ltk_widget *self);
@@ -72,8 +72,9 @@ static int ltk_draw_cmd_create(
     char **errstr);
 
 static void
-ltk_draw_draw(ltk_widget *self) {
-	ltk_draw *draw = self;
+ltk_draw_draw(ltk_widget *self, ltk_rect clip_rect) {
+	(void)clip_rect; /* FIXME: actually use this */
+	ltk_draw *draw = (ltk_draw *)self;
 	ltk_window *window = draw->widget.window;
 	ltk_rect rect = draw->widget.rect;
 	XCopyArea(window->dpy, draw->pix, window->xwindow, window->gc, 0, 0, rect.w, rect.h, rect.x, rect.y);
@@ -103,16 +104,18 @@ ltk_draw_create(ltk_window *window, const char *id, int w, int h, const char *co
 
 static void
 ltk_draw_resize(ltk_widget *self) {
-	ltk_draw *draw = self;
+	ltk_draw *draw = (ltk_draw *)self;
 	Window win;
-	int x, y, w, h, bw, d;
-	int new_w, new_h;
+	int x, y;
+	unsigned int w, h, bw, d;
+	unsigned int new_w, new_h;
 	ltk_window *window = draw->widget.window;
 	ltk_rect rect = draw->widget.rect;
 	XGetGeometry(window->dpy, draw->pix, &win, &x, &y, &w, &h, &bw, &d);
 
-	new_w = w < rect.w ? rect.w : w;
-	new_h = h < rect.h ? rect.h : h;
+	/* FIXME: get rid of casts */
+	new_w = (int)w < rect.w ? rect.w : (int)w;
+	new_h = (int)h < rect.h ? rect.h : (int)h;
 	if (new_w < w && new_h < h)
 		return;
 	Pixmap tmp = XCreatePixmap(window->dpy, window->xwindow,
@@ -127,7 +130,8 @@ ltk_draw_resize(ltk_widget *self) {
 
 static void
 ltk_draw_destroy(ltk_widget *self, int shallow) {
-	ltk_draw *draw = self;
+	(void)shallow;
+	ltk_draw *draw = (ltk_draw *)self;
 	if (!draw) {
 		ltk_warn("Tried to destroy NULL draw.\n");
 		return;
@@ -141,11 +145,12 @@ ltk_draw_destroy(ltk_widget *self, int shallow) {
 static void
 ltk_draw_clear(ltk_window *window, ltk_draw *draw) {
 	Window win;
-	int x, y, w, h, bw, d;
+	int x, y;
+	unsigned int w, h, bw, d;
 	XGetGeometry(window->dpy, draw->pix, &win, &x, &y, &w, &h, &bw, &d);
 	XSetForeground(window->dpy, window->gc, draw->bg.pixel);
 	XFillRectangle(window->dpy, window->xwindow, window->gc, 0, 0, w, h);
-	ltk_draw_draw(draw);
+	ltk_draw_draw((ltk_widget *)draw, draw->widget.rect);
 }
 
 /* FIXME: Error return */
@@ -204,7 +209,7 @@ ltk_draw_cmd_clear(
 		*errstr = "Invalid number of arguments.\n";
 		return 1;
 	}
-	draw = ltk_get_widget(tokens[1], LTK_DRAW, errstr);
+	draw = (ltk_draw *)ltk_get_widget(tokens[1], LTK_DRAW, errstr);
 	if (!draw) return 1;
 	ltk_draw_clear(window, draw);
 
@@ -222,7 +227,7 @@ ltk_draw_cmd_set_color(
 		*errstr = "Invalid number of arguments.\n";
 		return 1;
 	}
-	draw = ltk_get_widget(tokens[1], LTK_DRAW, errstr);
+	draw = (ltk_draw *)ltk_get_widget(tokens[1], LTK_DRAW, errstr);
 	if (!draw) return 1;
 	ltk_draw_set_color(window, draw, tokens[3]);
 
@@ -242,7 +247,7 @@ ltk_draw_cmd_line(
 		*errstr = "Invalid number of arguments.\n";
 		return 1;
 	}
-	draw = ltk_get_widget(tokens[1], LTK_DRAW, errstr);
+	draw = (ltk_draw *)ltk_get_widget(tokens[1], LTK_DRAW, errstr);
 	if (!draw) return 1;
 	x1 = strtonum(tokens[3], 0, 100000, &errstr_num);
 	if (errstr_num) {
@@ -282,7 +287,7 @@ ltk_draw_cmd_rect(
 		*errstr = "Invalid number of arguments.\n";
 		return 1;
 	}
-	draw = ltk_get_widget(tokens[1], LTK_DRAW, errstr);
+	draw = (ltk_draw *)ltk_get_widget(tokens[1], LTK_DRAW, errstr);
 	if (!draw) return 1;
 	x = strtonum(tokens[3], 0, 100000, &errstr_num);
 	if (errstr_num) {
@@ -343,7 +348,7 @@ ltk_draw_cmd_create(
 		return 1;
 	}
 	draw = ltk_draw_create(window, tokens[1], w, h, tokens[5]);
-	ltk_set_widget(draw, tokens[1]);
+	ltk_set_widget((ltk_widget *)draw, tokens[1]);
 
 	return 0;
 }
diff --git a/grid.c b/grid.c
@@ -89,18 +89,18 @@ static int ltk_grid_cmd_set_column_weight(
 static void
 ltk_grid_set_row_weight(ltk_grid *grid, int row, int weight) {
 	grid->row_weights[row] = weight;
-	ltk_recalculate_grid(grid);
+	ltk_recalculate_grid((ltk_widget *)grid);
 }
 
 static void
 ltk_grid_set_column_weight(ltk_grid *grid, int column, int weight) {
 	grid->column_weights[column] = weight;
-	ltk_recalculate_grid(grid);
+	ltk_recalculate_grid((ltk_widget *)grid);
 }
 
 static void
 ltk_grid_draw(ltk_widget *self, ltk_rect clip) {
-	ltk_grid *grid = self;
+	ltk_grid *grid = (ltk_grid *)self;
 	int i;
 	for (i = 0; i < grid->rows * grid->columns; i++) {
 		if (!grid->widget_grid[i])
@@ -151,13 +151,13 @@ ltk_grid_create(ltk_window *window, const char *id, int rows, int columns) {
 		grid->widget_grid[i] = NULL;
 	}
 
-	ltk_recalculate_grid(grid);
+	ltk_recalculate_grid((ltk_widget *)grid);
 	return grid;
 }
 
 static void
 ltk_grid_destroy(ltk_widget *self, int shallow) {
-	ltk_grid *grid = self;
+	ltk_grid *grid = (ltk_grid *)self;
 	ltk_widget *ptr;
 	if (!shallow) {
 		for (int i = 0; i < grid->rows * grid->columns; i++) {
@@ -188,7 +188,7 @@ ltk_grid_destroy(ltk_widget *self, int shallow) {
 
 static void
 ltk_recalculate_grid(ltk_widget *self) {
-	ltk_grid *grid = self;
+	ltk_grid *grid = (ltk_grid *)self;
 	unsigned int height_static = 0, width_static = 0;
 	unsigned int total_row_weight = 0, total_column_weight = 0;
 	float height_unit = 0, width_unit = 0;
@@ -275,7 +275,7 @@ ltk_recalculate_grid(ltk_widget *self) {
 /* FIXME: Maybe add debug stuff to check that grid is actually parent of widget */
 static void
 ltk_grid_child_size_change(ltk_widget *self, ltk_widget *widget) {
-	ltk_grid *grid = self;
+	ltk_grid *grid = (ltk_grid *)self;
 	short size_changed = 0;
 	widget->rect.w = widget->ideal_w;
 	widget->rect.h = widget->ideal_h;
@@ -292,9 +292,9 @@ ltk_grid_child_size_change(ltk_widget *self, ltk_widget *widget) {
 		size_changed = 1;
 	}
 	if (size_changed && grid->widget.parent && grid->widget.parent->child_size_change)
-		grid->widget.parent->child_size_change(grid->widget.parent, grid);
+		grid->widget.parent->child_size_change(grid->widget.parent, (ltk_widget *)grid);
 	else
-		ltk_recalculate_grid(grid);
+		ltk_recalculate_grid((ltk_widget *)grid);
 }
 
 /* FIXME: Check if widget already exists at position */
@@ -315,8 +315,8 @@ ltk_grid_add(ltk_window *window, ltk_widget *widget, ltk_grid *grid,
 			grid->widget_grid[i * grid->columns + j] = widget;
 		}
 	}
-	widget->parent = grid;
-	ltk_grid_child_size_change(grid, widget);
+	widget->parent = (ltk_widget *)grid;
+	ltk_grid_child_size_change((ltk_widget *)grid, widget);
 	ltk_window_invalidate_rect(window, grid->widget.rect);
 
 	return 0;
@@ -324,8 +324,8 @@ ltk_grid_add(ltk_window *window, ltk_widget *widget, ltk_grid *grid,
 
 static int
 ltk_grid_ungrid(ltk_window *window, ltk_widget *widget, ltk_widget *self, char **errstr) {
-	ltk_grid *grid = self;
-	if (widget->parent != grid) {
+	ltk_grid *grid = (ltk_grid *)self;
+	if (widget->parent != (ltk_widget *)grid) {
 		*errstr = "Widget isn't gridded in given grid.\n";
 		return 1;
 	}
@@ -364,7 +364,7 @@ ltk_grid_find_nearest_row(ltk_grid *grid, int y) {
 
 static int
 ltk_grid_mouse_press(ltk_widget *self, XEvent event) {
-	ltk_grid *grid = self;
+	ltk_grid *grid = (ltk_grid *)self;
 	int x = event.xbutton.x;
 	int y = event.xbutton.y;
 	int row = ltk_grid_find_nearest_row(grid, y);
@@ -381,7 +381,7 @@ ltk_grid_mouse_press(ltk_widget *self, XEvent event) {
 
 static int
 ltk_grid_mouse_release(ltk_widget *self, XEvent event) {
-	ltk_grid *grid = self;
+	ltk_grid *grid = (ltk_grid *)self;
 	int x = event.xbutton.x;
 	int y = event.xbutton.y;
 	int row = ltk_grid_find_nearest_row(grid, y);
@@ -398,7 +398,7 @@ ltk_grid_mouse_release(ltk_widget *self, XEvent event) {
 
 static int
 ltk_grid_motion_notify(ltk_widget *self, XEvent event) {
-	ltk_grid *grid = self;
+	ltk_grid *grid = (ltk_grid *)self;
 	/* FIXME: Why does it check this? */
 	short pressed = (event.xmotion.state & Button1Mask) == Button1Mask;
 	if (pressed)
@@ -434,7 +434,7 @@ ltk_grid_cmd_add(
 		*errstr = "Invalid number of arguments.\n";
 		return 1;
 	}
-	grid = ltk_get_widget(tokens[1], LTK_GRID, errstr);
+	grid = (ltk_grid *)ltk_get_widget(tokens[1], LTK_GRID, errstr);
 	widget = ltk_get_widget(tokens[3], LTK_WIDGET, errstr);
 	if (!grid || !widget) {
 		*errstr = "Invalid widget ID.\n";
@@ -494,10 +494,10 @@ ltk_grid_cmd_ungrid(
 		*errstr = "Invalid number of arguments.\n";
 		return 1;
 	}
-	grid = ltk_get_widget(tokens[1], LTK_GRID, errstr);
+	grid = (ltk_grid *)ltk_get_widget(tokens[1], LTK_GRID, errstr);
 	widget = ltk_get_widget(tokens[3], LTK_WIDGET, errstr);
 	if (!grid || !widget) return 1;
-	return ltk_grid_ungrid(window, widget, grid, errstr);
+	return ltk_grid_ungrid(window, widget, (ltk_widget *)grid, errstr);
 }
 
 /* grid <grid id> create <rows> <columns> */
@@ -529,7 +529,7 @@ ltk_grid_cmd_create(
 		return 1;
 	}
 	grid = ltk_grid_create(window, tokens[1], rows, columns);
-	ltk_set_widget(grid, tokens[1]);
+	ltk_set_widget((ltk_widget *)grid, tokens[1]);
 
 	return 0;
 }
@@ -541,6 +541,7 @@ ltk_grid_cmd_set_row_weight(
     char **tokens,
     size_t num_tokens,
     char **errstr) {
+	(void)window;
 	ltk_grid *grid;
 	int row, weight;
 	const char *errstr_num;
@@ -548,7 +549,7 @@ ltk_grid_cmd_set_row_weight(
 		*errstr = "Invalid number of arguments.\n";
 		return 1;
 	}
-	grid = ltk_get_widget(tokens[1], LTK_GRID, errstr);
+	grid = (ltk_grid *)ltk_get_widget(tokens[1], LTK_GRID, errstr);
 	if (!grid) return 1;
 	row    = strtonum(tokens[3], 0, grid->rows, &errstr_num);
 	if (errstr_num) {
@@ -572,6 +573,7 @@ ltk_grid_cmd_set_column_weight(
     char **tokens,
     size_t num_tokens,
     char **errstr) {
+	(void)window;
 	ltk_grid *grid;
 	int column, weight;
 	const char *errstr_num;
@@ -579,7 +581,7 @@ ltk_grid_cmd_set_column_weight(
 		*errstr = "Invalid number of arguments.\n";
 		return 1;
 	}
-	grid = ltk_get_widget(tokens[1], LTK_GRID, errstr);
+	grid = (ltk_grid *)ltk_get_widget(tokens[1], LTK_GRID, errstr);
 	if (!grid) return 1;
 	column = strtonum(tokens[3], 0, grid->columns, &errstr_num);
 	if (errstr_num) {
diff --git a/grid.h b/grid.h
@@ -31,15 +31,15 @@
  */
 typedef struct {
 	ltk_widget widget;
-	unsigned int rows;
-	unsigned int columns;
+	int rows;
+	int columns;
 	ltk_widget **widget_grid;
-	unsigned int *row_heights;
-	unsigned int *column_widths;
-	unsigned int *row_weights;
-	unsigned int *column_weights;
-	unsigned int *row_pos;
-	unsigned int *column_pos;
+	int *row_heights;
+	int *column_widths;
+	int *row_weights;
+	int *column_weights;
+	int *row_pos;
+	int *column_pos;
 } ltk_grid;
 
 int ltk_grid_cmd(ltk_window *window, char **tokens, size_t num_tokens, char **errstr);
diff --git a/label.c b/label.c
@@ -74,7 +74,7 @@ ltk_label_ini_handler(ltk_window *window, const char *prop, const char *value) {
 
 static void
 ltk_label_draw(ltk_widget *self, ltk_rect clip) {
-	ltk_label *label = self;
+	ltk_label *label = (ltk_label *)self;
 	ltk_window *window = label->widget.window;
 	ltk_rect rect = label->widget.rect;
 	ltk_rect clip_final = ltk_rect_intersect(clip, rect);
@@ -119,7 +119,8 @@ ltk_label_create(ltk_window *window, const char *id, const char *text) {
 
 static void
 ltk_label_destroy(ltk_widget *self, int shallow) {
-	ltk_label *label = self;
+	(void)shallow;
+	ltk_label *label = (ltk_label *)self;
 	if (!label) {
 		ltk_warn("Tried to destroy NULL label.\n");
 		return;
@@ -147,7 +148,7 @@ ltk_label_cmd_create(
 		return 1;
 	}
 	label = ltk_label_create(window, tokens[1], tokens[3]);
-	ltk_set_widget(label, tokens[1]);
+	ltk_set_widget((ltk_widget *)label, tokens[1]);
 
 	return 0;
 }
diff --git a/ltkc.c b/ltkc.c
@@ -59,7 +59,7 @@ int main(int argc, char *argv[]) {
 	struct timeval tv, tv_master;
 	tv_master.tv_sec = 0;
 	tv_master.tv_usec = 20000;
-	int path_size;
+	size_t path_size;
 
 	if (argc != 2) {
 		(void)fprintf(stderr, "USAGE: ltkc <socket id>\n");
diff --git a/ltkd.c b/ltkd.c
@@ -335,7 +335,6 @@ get_sock_path(char *basedir, Window id) {
 
 static FILE *
 open_log(char *dir) {
-	int len;
 	FILE *f;
 	char *path;
 
@@ -384,6 +383,7 @@ ltk_cleanup(void) {
 
 void
 ltk_quit(ltk_window *window) {
+	(void)window;
 	running = 0;
 }
 
@@ -427,6 +427,9 @@ ltk_set_root_widget_cmd(
 	return 0;
 }
 
+/* FIXME */
+#undef MAX
+#undef MIN
 #define MAX(a, b) ((a) > (b) ? (a) : (b))
 #define MIN(a, b) ((a) < (b) ? (a) : (b))
 
@@ -509,7 +512,7 @@ static void
 ltk_window_other_event(ltk_window *window, XEvent event) {
 	ltk_widget *ptr = window->root_widget;
 	if (event.type == ConfigureNotify) {
-		unsigned int w, h;
+		int w, h;
 		w = event.xconfigure.width;
 		h = event.xconfigure.height;
 		int orig_w = window->rect.w;
@@ -532,7 +535,7 @@ ltk_window_other_event(ltk_window *window, XEvent event) {
 		r.h = event.xexpose.height;
 		ltk_window_invalidate_rect(window, r);
 	} else if (event.type == ClientMessage
-	    && event.xclient.data.l[0] == window->wm_delete_msg) {
+	    && (Atom)event.xclient.data.l[0] == window->wm_delete_msg) {
 		ltk_quit(window);
 	}
 }
@@ -1187,7 +1190,6 @@ ltk_widget_destroy(
     size_t num_tokens,
     char **errstr) {
 	int err = 0, shallow = 1;
-	khint_t k;
 	if (num_tokens != 2 && num_tokens != 3) {
 		*errstr = "Invalid number of arguments.\n";
 		return 1;
diff --git a/memory.c b/memory.c
@@ -43,7 +43,7 @@ char *
 ltk_strdup_debug(const char *s, const char *caller, const char *file, int line) {
 	char *str = strdup(s);
 	fprintf(stderr, "DEBUG: strdup %p to %p in %s (%s:%d)\n",
-		s, str, caller, file, line);
+		(void *)s, (void *)str, caller, file, line);
 	if (!str)
 		ltk_fatal("Out of memory.\n");
 	return str;
diff --git a/scrollbar.c b/scrollbar.c
@@ -106,7 +106,8 @@ ltk_scrollbar_set_virtual_size(ltk_scrollbar *scrollbar, int virtual_size) {
 
 static void
 ltk_scrollbar_draw(ltk_widget *self, ltk_rect clip) {
-	ltk_scrollbar *scrollbar = self;
+	(void)clip; /* FIXME: actually use this */
+	ltk_scrollbar *scrollbar = (ltk_scrollbar *)self;
 	LtkColor *bg, *fg;
 	int handle_x, handle_y, handle_w, handle_h;
 	ltk_window *window = scrollbar->widget.window;
@@ -162,7 +163,7 @@ ltk_scrollbar_draw(ltk_widget *self, ltk_rect clip) {
 
 static int
 ltk_scrollbar_mouse_press(ltk_widget *self, XEvent event) {
-	ltk_scrollbar *sc = self;
+	ltk_scrollbar *sc = (ltk_scrollbar *)self;
 	int max_pos;
 	double rel_pos;
 	if (event.xbutton.button != 1 && event.xbutton.button != 3)
@@ -195,7 +196,8 @@ ltk_scrollbar_mouse_press(ltk_widget *self, XEvent event) {
 /* FIXME: Make this scrollbar more "traditional" */
 static int
 ltk_scrollbar_motion_notify(ltk_widget *self, XEvent event) {
-	ltk_scrollbar *sc = self;
+	(void)self;
+	(void)event;
 	/*
 	double scale;
 	int delta, max_pos;
@@ -224,9 +226,9 @@ ltk_scrollbar_motion_notify(ltk_widget *self, XEvent event) {
 }
 
 ltk_scrollbar *
-ltk_scrollbar_create(ltk_window *window, ltk_orientation orient, void (*callback)(void *), void *data) {
+ltk_scrollbar_create(ltk_window *window, ltk_orientation orient, void (*callback)(ltk_widget *), void *data) {
 	ltk_scrollbar *sc = ltk_malloc(sizeof(ltk_scrollbar));
-	ltk_fill_widget_defaults(sc, NULL, window, <k_scrollbar_draw,
+	ltk_fill_widget_defaults((ltk_widget *)sc, NULL, window, <k_scrollbar_draw,
 	    NULL, <k_scrollbar_destroy, 1, LTK_UNKNOWN);
 	sc->last_mouse_x = sc->last_mouse_y = 0;
 	sc->widget.motion_notify = <k_scrollbar_motion_notify;
@@ -247,6 +249,7 @@ ltk_scrollbar_create(ltk_window *window, ltk_orientation orient, void (*callback
 
 static void
 ltk_scrollbar_destroy(ltk_widget *self, int shallow) {
-	ltk_scrollbar *scrollbar = self;
+	(void)shallow;
+	ltk_scrollbar *scrollbar = (ltk_scrollbar *)self;
 	ltk_free(scrollbar);
 }
diff --git a/scrollbar.h b/scrollbar.h
@@ -28,7 +28,7 @@
 
 typedef struct {
 	ltk_widget widget;
-	void (*callback)(void *);
+	void (*callback)(ltk_widget *);
 	void *callback_data;
 	double cur_pos;
 	int virtual_size;
@@ -40,6 +40,6 @@ typedef struct {
 void ltk_scrollbar_set_virtual_size(ltk_scrollbar *scrollbar, int virtual_size);
 void ltk_scrollbar_setup_theme_defaults(ltk_window *window);
 void ltk_scrollbar_ini_handler(ltk_window *window, const char *prop, const char *value);
-ltk_scrollbar *ltk_scrollbar_create(ltk_window *window, ltk_orientation orient, void (*callback)(void *), void *data);
+ltk_scrollbar *ltk_scrollbar_create(ltk_window *window, ltk_orientation orient, void (*callback)(ltk_widget *), void *data);
 
 #endif /* _LTK_SCROLLBAR_H_ */
diff --git a/strtonum.c b/strtonum.c
@@ -17,7 +17,7 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#ifndef __OpenBSD__
+/* #ifndef __OpenBSD__ */
 
 #include <errno.h>
 #include <limits.h>
@@ -68,4 +68,4 @@ strtonum(const char *numstr, long long minval, long long maxval,
 /* FIXME: What does this do? - lumidify */
 /* DEF_WEAK(strtonum); */
 
-#endif
+/* #endif */
diff --git a/text_pango.c b/text_pango.c
@@ -54,6 +54,8 @@ ltk_cleanup_text(void) {
 
 void
 ltk_text_line_set_width(LtkTextLine *tl, int width) {
+	(void)tl;
+	(void)width;
 	/* TODO: Implement! */
 }
 
@@ -99,6 +101,7 @@ ltk_text_line_render(LtkTextLine *tl, LtkColor *bg, LtkColor *fg) {
 
 void
 ltk_text_line_draw(LtkTextLine *tl, Drawable d, GC gc, int x, int y, ltk_rect clip) {
+	(void)clip; /* FIXME: use this */
 	XCopyArea(tm.dpy, tl->pixmap, d, gc, 0, 0, tl->w, tl->h, x, y);
 }
 
diff --git a/text_stb.c b/text_stb.c
@@ -128,7 +128,7 @@ static XImage *ltk_create_ximage(int w, int h, int depth, XColor bg);
 /* These unicode routines are taken from
  * https://github.com/JeffBezanson/cutef8 */
 
-static size_t u8_wc_toutf8(char *dest, uint32_t ch);
+/* static size_t u8_wc_toutf8(char *dest, uint32_t ch); */
 static size_t u8_strlen(const char *s);
 static uint32_t u8_nextmemchar(const char *s, size_t *i);
 
@@ -171,6 +171,7 @@ static size_t u8_strlen(const char *s) {
     return count;
 }
 
+/*
 static size_t u8_wc_toutf8(char *dest, uint32_t ch) {
     if (ch < 0x80) {
         dest[0] = (char)ch;
@@ -196,6 +197,7 @@ static size_t u8_wc_toutf8(char *dest, uint32_t ch) {
     }
     return 0;
 }
+*/
 
 void
 ltk_init_text(const char *default_font, Display *dpy, int screen, Colormap cm) {
@@ -214,7 +216,7 @@ ltk_cleanup_text(void) {
 		ltk_destroy_font(tm.fonts[i]);
 	}
 	if (!tm.glyph_cache) return;
-	for (int k = kh_begin(tm.glyph_cache); k != kh_end(tm.glyph_cache); k++) {
+	for (khint_t k = kh_begin(tm.glyph_cache); k != kh_end(tm.glyph_cache); k++) {
 		if (kh_exist(tm.glyph_cache, k)) {
 			ltk_destroy_glyph_cache(kh_value(tm.glyph_cache, k));
 		}
@@ -285,8 +287,7 @@ ltk_create_glyph_cache(uint16_t font_id, uint16_t font_size) {
 
 static void
 ltk_destroy_glyph_cache(khash_t(glyphinfo) *cache) {
-	int k;
-	for (k = kh_begin(cache); k != kh_end(cache); k++) {
+	for (khint_t k = kh_begin(cache); k != kh_end(cache); k++) {
 		if (kh_exist(cache, k)) {
 			ltk_destroy_glyph_info(kh_value(cache, k));
 		}
@@ -300,11 +301,11 @@ ltk_load_default_font(const char *name) {
 	FcResult result;
 	char *file;
 	int index;
-	uint16_t font;
 
-	tm.fcpattern = FcNameParse(name);
+	/* FIXME: Get rid of this stupid cast somehow */
+	tm.fcpattern = FcNameParse((const FcChar8 *)name);
 	/*tm.fcpattern = FcPatternCreate();*/
-	FcPatternAddString(tm.fcpattern, FC_FONTFORMAT, "truetype");
+	FcPatternAddString(tm.fcpattern, FC_FONTFORMAT, (const FcChar8 *)"truetype");
 	FcConfigSubstitute(NULL, tm.fcpattern, FcMatchPattern);
 	FcDefaultSubstitute(tm.fcpattern);
 	match = FcFontMatch(NULL, tm.fcpattern, &result);
@@ -324,8 +325,8 @@ ltk_create_font(char *path, uint16_t id, int index) {
 	char *contents = ltk_read_file(path, &len);
 	if (!contents)
 		ltk_fatal_errno("Unable to read font file %s\n", path);
-	int offset = stbtt_GetFontOffsetForIndex(contents, index);
-	if (!stbtt_InitFont(&font->info, contents, offset))
+	int offset = stbtt_GetFontOffsetForIndex((unsigned char *)contents, index);
+	if (!stbtt_InitFont(&font->info, (unsigned char *)contents, offset))
 		ltk_fatal("Failed to load font %s\n", path);
 	font->id = id;
 	font->refs = 0;
@@ -409,7 +410,7 @@ ltk_text_to_glyphs(LtkGlyph *glyphs, int num_glyphs, char *text, uint16_t font_s
 			match = FcFontMatch(NULL, pat, &result);
 			FcPatternGetString(match, FC_FILE, 0, &file);
 			FcPatternGetInteger(match, FC_INDEX, 0, &index);
-			font = ltk_get_font(file, index);
+			font = ltk_get_font((char *)file, index);
 			glyph_cache = ltk_get_glyph_cache(font->id, font_size);
 			FcPatternDestroy(match);
 			FcPatternDestroy(pat);
@@ -513,8 +514,6 @@ ltk_text_line_render(
 	LtkColor *bg,
 	LtkColor *fg)
 {
-	LtkGlyph *glyph;
-
 	XWindowAttributes attrs;
 	XGetWindowAttributes(tm.dpy, tl->window, &attrs);
 	int depth = attrs.depth;
@@ -522,7 +521,7 @@ ltk_text_line_render(
 	if (tl->img)
 		XDestroyImage(tl->img);
 	tl->img = ltk_create_ximage(tl->w, tl->h, depth, bg->xcolor);
-	for (int i = 0; i < tl->glyph_len; i++) {
+	for (size_t i = 0; i < tl->glyph_len; i++) {
 		ltk_text_line_draw_glyph(&tl->glyphs[i], -tl->x_min, -tl->y_min, tl->img, fg->xcolor);
 	}
 }
@@ -530,6 +529,7 @@ ltk_text_line_render(
 /* FIXME: error checking if img is rendered yet, tm initialized, etc. */
 void
 ltk_text_line_draw(LtkTextLine *tl, Drawable d, GC gc, int x, int y, ltk_rect clip) {
+	(void)clip;
 	/*
 	int xoff = clip.x - x;
 	int yoff = clip.y - y;
@@ -544,6 +544,8 @@ ltk_text_line_draw(LtkTextLine *tl, Drawable d, GC gc, int x, int y, ltk_rect cl
 
 void
 ltk_text_line_set_width(LtkTextLine *tl, int width) {
+	(void)tl;
+	(void)width;
 	/* FIXME: implement */
 }
 
@@ -567,6 +569,7 @@ ltk_text_line_create_glyphs(LtkTextLine *tl) {
 
 LtkTextLine *
 ltk_text_line_create(Window window, uint16_t font_size, char *text, int width) {
+	(void)width;
 	LtkTextLine *line = ltk_malloc(sizeof(LtkTextLine));
 	line->window = window;
 	line->img = NULL;
diff --git a/util.c b/util.c
@@ -138,7 +138,7 @@ ltk_fatal(const char *format, ...) {
 	ltk_cleanup();
 
 	exit(1);
-};
+}
 
 void
 ltk_warn_errno(const char *format, ...) {
diff --git a/util.h b/util.h
@@ -23,11 +23,11 @@
 
 /* Requires: <stdarg.h> */
 
-#ifndef __OpenBSD__
+/* #ifndef __OpenBSD__ */
 long long
 strtonum(const char *numstr, long long minval, long long maxval,
     const char **errstrp);
-#endif
+/* #endif */
 
 char *ltk_read_file(const char *path, unsigned long *len);
 int ltk_grow_string(char **str, int *alloc_size, int needed);