changeset 1289:c170d9e55711

Merged in default (pull request #63) Macro-ify and slightly simplify GntWM Approved-by: Gary Kramlich
author Gary Kramlich <grim@reaperworld.com>
date Sat, 11 May 2019 01:00:16 +0000
parents 9992e39d2493 (current diff) 960964d9add2 (diff)
children b54ec8c74501 7def12661316 ce8c67239424 b153641cfe45
files
diffstat 2 files changed, 73 insertions(+), 104 deletions(-) [+]
line wrap: on
line diff
--- a/gntwm.c	Fri May 10 20:14:59 2019 -0400
+++ b/gntwm.c	Sat May 11 01:00:16 2019 +0000
@@ -132,8 +132,8 @@
 static void gnt_wm_win_resized(GntWM *wm, GntNode *node);
 static void gnt_wm_win_moved(GntWM *wm, GntNode *node);
 static void gnt_wm_give_focus(GntWM *wm, GntWidget *widget);
-static void update_window_in_list(GntWM *wm, GntWidget *wid);
-static void shift_window(GntWM *wm, GntWidget *widget, int dir);
+static void update_window_in_list(GntWMPrivate *priv, GntWidget *wid);
+static void shift_window(GntWMPrivate *priv, GntWidget *widget, int dir);
 static gboolean workspace_next(GntBindable *wm, GList *n);
 static gboolean workspace_prev(GntBindable *wm, GList *n);
 
@@ -141,7 +141,7 @@
 static int widestringwidth(wchar_t *wide);
 #endif
 
-static void ensure_normal_mode(GntWM *wm);
+static void ensure_normal_mode(GntWMPrivate *priv);
 static gboolean write_already(gpointer data);
 static int write_timeout;
 static time_t last_active_time;
@@ -278,10 +278,8 @@
 }
 
 static gboolean
-update_screen(GntWM *wm)
+update_screen(GntWMPrivate *priv)
 {
-	GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
-
 	if (priv->mode == GNT_KP_MODE_WAIT_ON_CHILD) {
 		return TRUE;
 	}
@@ -376,9 +374,8 @@
 }
 
 static void
-read_window_positions(GntWM *wm)
+read_window_positions(GntWMPrivate *priv)
 {
-	GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
 	GKeyFile *gfile = g_key_file_new();
 	char *filename = g_build_filename(gnt_get_config_dir(), ".gntpositions", NULL);
 	GError *error = NULL;
@@ -451,8 +448,9 @@
 	priv->nodes = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL,
 	                                    free_node);
 	priv->positions = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
-	if (gnt_style_get_bool(GNT_STYLE_REMPOS, TRUE))
-		read_window_positions(wm);
+	if (gnt_style_get_bool(GNT_STYLE_REMPOS, TRUE)) {
+		read_window_positions(priv);
+	}
 	g_timeout_add_seconds(IDLE_CHECK_INTERVAL, check_idle, NULL);
 	time(&last_active_time);
 	gnt_wm_switch_workspace(wm, 0);
@@ -475,7 +473,7 @@
 	}
 
 	if (priv->mode != GNT_KP_MODE_NORMAL) {
-		ensure_normal_mode(wm);
+		ensure_normal_mode(priv);
 	}
 
 	w = gnt_ws_get_top_widget(priv->cws);
@@ -560,7 +558,7 @@
 	if (node->scroll) {
 		node->scroll--;
 		gnt_wm_copy_win(window, node);
-		update_screen(wm);
+		update_screen(priv);
 	}
 	return TRUE;
 }
@@ -587,7 +585,7 @@
 	if (h - node->scroll > getmaxy(node->window)) {
 		node->scroll++;
 		gnt_wm_copy_win(window, node);
-		update_screen(wm);
+		update_screen(priv);
 	}
 	return TRUE;
 }
@@ -604,30 +602,27 @@
 
 	if (!gnt_ws_is_empty(priv->cws)) {
 		gnt_widget_destroy(gnt_ws_get_top_widget(priv->cws));
-		ensure_normal_mode(wm);
+		ensure_normal_mode(priv);
 	}
 
 	return TRUE;
 }
 
 static void
-destroy__list(G_GNUC_UNUSED GntWidget *widget, GntWM *wm)
+destroy__list(G_GNUC_UNUSED GntWidget *widget, GntWMPrivate *priv)
 {
-	GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
-
 	priv->list.window = NULL;
 	priv->list.tree = NULL;
 	priv->windows = NULL;
 	priv->actions = NULL;
-	update_screen(wm);
+	update_screen(priv);
 }
 
 static void
-setup__list(GntWM *wm)
+setup__list(GntWMPrivate *priv)
 {
-	GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
 	GntWidget *tree, *win;
-	ensure_normal_mode(wm);
+	ensure_normal_mode(priv);
 	win = priv->list.window = gnt_box_new(FALSE, FALSE);
 	gnt_box_set_toplevel(GNT_BOX(win), TRUE);
 	gnt_box_set_pad(GNT_BOX(win), 0);
@@ -636,7 +631,7 @@
 	tree = priv->list.tree = gnt_tree_new();
 	gnt_box_add_widget(GNT_BOX(win), tree);
 
-	g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(destroy__list), wm);
+	g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(destroy__list), priv);
 }
 
 static void
@@ -659,9 +654,8 @@
 }
 
 static void
-populate_window_list(GntWM *wm, gboolean workspace)
+populate_window_list(GntWMPrivate *priv, gboolean workspace)
 {
-	GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
 	GList *iter;
 	GntTree *tree = GNT_TREE(priv->windows->tree);
 	if (!workspace) {
@@ -673,7 +667,7 @@
 			        gnt_tree_create_row(tree,
 			                            gnt_box_get_title(box)),
 			        NULL);
-			update_window_in_list(wm, GNT_WIDGET(box));
+			update_window_in_list(priv, GNT_WIDGET(box));
 		}
 	} else {
 		GList *ws = priv->workspaces;
@@ -689,17 +683,15 @@
 				        gnt_tree_create_row(
 				                tree, gnt_box_get_title(box)),
 				        ws->data);
-				update_window_in_list(wm, GNT_WIDGET(box));
+				update_window_in_list(priv, GNT_WIDGET(box));
 			}
 		}
 	}
 }
 
 static gboolean
-window_list_key_pressed(GntWidget *widget, const char *text, GntWM *wm)
+window_list_key_pressed(GntWidget *widget, const char *text, GntWMPrivate *priv)
 {
-	GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
-
 	if (text[1] == 0 && !gnt_ws_is_empty(priv->cws)) {
 		GntBindable *sel = gnt_tree_get_selection_data(GNT_TREE(widget));
 		switch (text[0]) {
@@ -708,20 +700,20 @@
 				if (GNT_IS_WS(sel)) {
 					/* reorder the workspace. */
 				} else
-					shift_window(wm, GNT_WIDGET(sel), -1);
+					shift_window(priv, GNT_WIDGET(sel), -1);
 				break;
 			case '=':
 			case '.':
 				if (GNT_IS_WS(sel)) {
 					/* reorder the workspace. */
 				} else
-					shift_window(wm, GNT_WIDGET(sel), 1);
+					shift_window(priv, GNT_WIDGET(sel), 1);
 				break;
 			default:
 				return FALSE;
 		}
 		gnt_tree_remove_all(GNT_TREE(widget));
-		populate_window_list(wm, GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "workspace")));
+		populate_window_list(priv, GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "workspace")));
 		gnt_tree_set_selected(GNT_TREE(widget), sel);
 		return TRUE;
 	}
@@ -733,7 +725,7 @@
 {
 	GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
 	GntWidget *tree, *win;
-	setup__list(wm);
+	setup__list(priv);
 	priv->windows = &priv->list;
 
 	win = priv->windows->window;
@@ -741,7 +733,7 @@
 
 	gnt_box_set_title(GNT_BOX(win), workspace ? "Workspace List" : "Window List");
 
-	populate_window_list(wm, workspace);
+	populate_window_list(priv, workspace);
 
 	if (!gnt_ws_is_empty(priv->cws)) {
 		gnt_tree_set_selected(GNT_TREE(tree), gnt_ws_get_top_widget(priv->cws));
@@ -750,7 +742,7 @@
 	}
 
 	g_signal_connect(G_OBJECT(tree), "activate", G_CALLBACK(window_list_activate), wm);
-	g_signal_connect(G_OBJECT(tree), "key_pressed", G_CALLBACK(window_list_key_pressed), wm);
+	g_signal_connect(G_OBJECT(tree), "key_pressed", G_CALLBACK(window_list_key_pressed), priv);
 	g_object_set_data(G_OBJECT(tree), "workspace", GINT_TO_POINTER(workspace));
 
 	gnt_tree_set_col_width(GNT_TREE(tree), 0, getmaxx(stdscr) / 3);
@@ -946,9 +938,8 @@
 }
 
 static void
-shift_window(GntWM *wm, GntWidget *widget, int dir)
+shift_window(GntWMPrivate *priv, GntWidget *widget, int dir)
 {
-	GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
 	GList *all = gnt_ws_get_list(priv->cws);
 	GList *list = g_list_find(all, widget);
 	int length, pos;
@@ -994,7 +985,7 @@
 		return TRUE;
 	}
 
-	shift_window(wm, gnt_ws_get_top_widget(priv->cws), -1);
+	shift_window(priv, gnt_ws_get_top_widget(priv->cws), -1);
 	return TRUE;
 }
 
@@ -1012,14 +1003,13 @@
 		return TRUE;
 	}
 
-	shift_window(wm, gnt_ws_get_top_widget(priv->cws), 1);
+	shift_window(priv, gnt_ws_get_top_widget(priv->cws), 1);
 	return TRUE;
 }
 
 static void
-action_list_activate(GntTree *tree, GntWM *wm)
+action_list_activate(GntTree *tree, GntWMPrivate *priv)
 {
-	GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
 	GntAction *action = gnt_tree_get_selection_data(tree);
 	action->callback();
 	gnt_widget_destroy(priv->list.window);
@@ -1051,7 +1041,7 @@
 		return TRUE;
 	}
 
-	setup__list(wm);
+	setup__list(priv);
 	priv->actions = &priv->list;
 
 	win = priv->actions->window;
@@ -1067,7 +1057,7 @@
 		gnt_tree_add_row_last(GNT_TREE(tree), action,
 				gnt_tree_create_row(GNT_TREE(tree), action->label), NULL);
 	}
-	g_signal_connect(G_OBJECT(tree), "activate", G_CALLBACK(action_list_activate), wm);
+	g_signal_connect(G_OBJECT(tree), "activate", G_CALLBACK(action_list_activate), priv);
 	n = g_list_length(priv->acts);
 	gnt_widget_set_size(tree, 0, n);
 	gnt_widget_set_position(win, 0, getmaxy(stdscr) - 3 - n);
@@ -1118,9 +1108,8 @@
 }
 
 static void
-window_reverse(GntWidget *win, gboolean set, GntWM *wm)
+window_reverse(GntWidget *win, gboolean set, GntWMPrivate *priv)
 {
-	GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
 	int i;
 	int w, h;
 	WINDOW *d;
@@ -1145,17 +1134,15 @@
 	for (i = 0; i < h; i += reverse_char(d, i, w-1, set));
 
 	gnt_wm_copy_win(win, g_hash_table_lookup(priv->nodes, win));
-	update_screen(wm);
+	update_screen(priv);
 }
 
 static void
-ensure_normal_mode(GntWM *wm)
+ensure_normal_mode(GntWMPrivate *priv)
 {
-	GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
-
 	if (priv->mode != GNT_KP_MODE_NORMAL) {
 		if (!gnt_ws_is_empty(priv->cws)) {
-			window_reverse(gnt_ws_get_top_widget(priv->cws), FALSE, wm);
+			window_reverse(gnt_ws_get_top_widget(priv->cws), FALSE, priv);
 		}
 		priv->mode = GNT_KP_MODE_NORMAL;
 	}
@@ -1175,7 +1162,7 @@
 	}
 
 	priv->mode = GNT_KP_MODE_MOVE;
-	window_reverse(gnt_ws_get_top_widget(priv->cws), TRUE, wm);
+	window_reverse(gnt_ws_get_top_widget(priv->cws), TRUE, priv);
 
 	return TRUE;
 }
@@ -1194,7 +1181,7 @@
 	}
 
 	priv->mode = GNT_KP_MODE_RESIZE;
-	window_reverse(gnt_ws_get_top_widget(priv->cws), TRUE, wm);
+	window_reverse(gnt_ws_get_top_widget(priv->cws), TRUE, priv);
 
 	return TRUE;
 }
@@ -1239,7 +1226,7 @@
 	}
 
 	gnt_ws_draw_taskbar(priv->cws, TRUE);
-	update_screen(wm);
+	update_screen(priv);
 
 	curs_set(0);   /* endwin resets the cursor to normal */
 	keypad(stdscr, 1);
@@ -1296,7 +1283,7 @@
 	link = g_list_find(priv->tagged, widget);
 	if (link) {
 		priv->tagged = g_list_delete_link(priv->tagged, link);
-		remove_tag(widget, wm);
+		remove_tag(widget, NULL);
 		return TRUE;
 	}
 
@@ -1318,7 +1305,7 @@
 	for (iter = priv->tagged; iter; iter = g_list_delete_link(iter, iter)) {
 		GntWidget *widget = GNT_WIDGET(iter->data);
 		gnt_wm_widget_move_workspace(wm, priv->cws, widget);
-		remove_tag(widget, wm);
+		remove_tag(widget, NULL);
 	}
 
 	priv->tagged = NULL;
@@ -1753,13 +1740,13 @@
 	if (priv->list.window) {
 		gnt_widget_destroy(priv->list.window);
 	}
-	ensure_normal_mode(wm);
+	ensure_normal_mode(priv);
 	gnt_ws_hide(priv->cws, priv->nodes);
 	priv->cws = s;
 	gnt_ws_show(priv->cws, priv->nodes);
 
 	gnt_ws_draw_taskbar(priv->cws, TRUE);
-	update_screen(wm);
+	update_screen(priv);
 	if (!gnt_ws_is_empty(priv->cws)) {
 		gnt_wm_raise_window(wm, gnt_ws_get_top_widget(priv->cws));
 	}
@@ -1874,9 +1861,8 @@
 }
 
 static void
-update_window_in_list(GntWM *wm, GntWidget *wid)
+update_window_in_list(GntWMPrivate *priv, GntWidget *wid)
 {
-	GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
 	GntTextFormatFlags flag = 0;
 
 	if (priv->windows == NULL) {
@@ -2006,7 +1992,7 @@
 
 	if (!gnt_widget_get_visible(widget) ||
 	    g_hash_table_lookup(priv->nodes, widget)) {
-		update_screen(wm);
+		update_screen(priv);
 		return;
 	}
 
@@ -2037,16 +2023,18 @@
 			                          "workspace")
 			                ? priv->cws
 			                : NULL);
-			update_window_in_list(wm, widget);
+			update_window_in_list(priv, widget);
 		}
 	}
 
 	gnt_ws_draw_taskbar(priv->cws, FALSE);
-	update_screen(wm);
+	update_screen(priv);
 }
 
 void gnt_wm_window_decorate(GntWM *wm, GntWidget *widget)
 {
+	g_return_if_fail(GNT_IS_WM(wm));
+
 	g_signal_emit(wm, signals[SIG_DECORATE_WIN], 0, widget);
 }
 
@@ -2089,19 +2077,23 @@
 	}
 
 	gnt_ws_draw_taskbar(priv->cws, FALSE);
-	update_screen(wm);
+	update_screen(priv);
 }
 
-time_t gnt_wm_get_idle_time()
+time_t
+gnt_wm_get_idle_time(void)
 {
 	return time(NULL) - last_active_time;
 }
 
 gboolean gnt_wm_process_input(GntWM *wm, const char *keys)
 {
-	GntWMPrivate *priv = gnt_wm_get_instance_private(wm);
+	GntWMPrivate *priv = NULL;
 	gboolean ret = FALSE;
 
+	g_return_val_if_fail(GNT_IS_WM(wm), FALSE);
+	priv = gnt_wm_get_instance_private(wm);
+
 	keys = gnt_bindable_remap_keys(GNT_BINDABLE(wm), keys);
 
 	idle_update = TRUE;
@@ -2149,7 +2141,7 @@
 			}
 			if (ox != x || oy != y) {
 				gnt_screen_move_widget(widget, x, y);
-				window_reverse(widget, TRUE, wm);
+				window_reverse(widget, TRUE, priv);
 				return TRUE;
 			}
 		} else if (priv->mode == GNT_KP_MODE_RESIZE) {
@@ -2166,12 +2158,12 @@
 			}
 			if (oh != h || ow != w) {
 				gnt_screen_resize_widget(widget, w, h);
-				window_reverse(widget, TRUE, wm);
+				window_reverse(widget, TRUE, priv);
 				return TRUE;
 			}
 		}
 		if (strcmp(keys, "\r") == 0 || strcmp(keys, "\033") == 0) {
-			window_reverse(widget, FALSE, wm);
+			window_reverse(widget, FALSE, priv);
 			priv->mode = GNT_KP_MODE_NORMAL;
 		}
 		return TRUE;
@@ -2264,7 +2256,7 @@
 	g_signal_emit(wm, signals[SIG_RESIZED], 0, node);
 
 	show_panel(node->panel);
-	update_screen(wm);
+	update_screen(priv);
 }
 
 static void
@@ -2341,7 +2333,7 @@
 		}
 	}
 
-	update_screen(wm);
+	update_screen(priv);
 }
 
 static void
@@ -2367,7 +2359,7 @@
 		top_panel(nd->panel);
 	}
 	gnt_ws_draw_taskbar(priv->cws, FALSE);
-	update_screen(wm);
+	update_screen(priv);
 }
 
 void gnt_wm_update_window(GntWM *wm, GntWidget *widget)
@@ -2396,7 +2388,7 @@
 	if (ws == priv->cws || gnt_widget_get_transient(widget)) {
 		gnt_wm_copy_win(widget, node);
 		gnt_ws_draw_taskbar(priv->cws, FALSE);
-		update_screen(wm);
+		update_screen(priv);
 	} else if (ws && ws != priv->cws && gnt_widget_get_is_urgent(widget)) {
 		if (!act || (act && !g_list_find(act, ws)))
 			act = g_list_prepend(act, ws);
@@ -2407,6 +2399,9 @@
 gboolean gnt_wm_process_click(GntWM *wm, GntMouseEvent event, int x, int y, GntWidget *widget)
 {
 	gboolean ret = TRUE;
+
+	g_return_val_if_fail(GNT_IS_WM(wm), FALSE);
+
 	idle_update = TRUE;
 	g_signal_emit(wm, signals[SIG_MOUSE_CLICK], 0, event, x, y, widget, &ret);
 	return ret;
--- a/gntwm.h	Fri May 10 20:14:59 2019 -0400
+++ b/gntwm.h	Sat May 11 01:00:16 2019 +0000
@@ -37,12 +37,7 @@
 #include <panel.h>
 #include <time.h>
 
-#define GNT_TYPE_WM				(gnt_wm_get_type())
-#define GNT_WM(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_WM, GntWM))
-#define GNT_WM_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass), GNT_TYPE_WM, GntWMClass))
-#define GNT_IS_WM(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), GNT_TYPE_WM))
-#define GNT_IS_WM_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_WM))
-#define GNT_WM_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_WM, GntWMClass))
+#define GNT_TYPE_WM gnt_wm_get_type()
 
 typedef struct _GntNode GntNode;
 
@@ -56,8 +51,6 @@
 	GntWS *ws;
 };
 
-typedef struct _GntWM GntWM;
-
 typedef struct _GntPosition
 {
 	int x;
@@ -75,24 +68,14 @@
 	void (*callback)(void);
 } GntAction;
 
+G_BEGIN_DECLS
+
 /**
- * GntWM:
+ * gnt_wm_get_type:
  *
- * Access to any fields is deprecated. See inline comments for replacements.
- *
+ * Returns: GType for GntWM.
  */
-struct _GntWM
-{
-	GntBindable inherit;
-
-	/*< private >*/
-	void *res1;
-	void *res2;
-	void *res3;
-	void *res4;
-};
-
-typedef struct _GntWMClass GntWMClass;
+G_DECLARE_DERIVABLE_TYPE(GntWM, gnt_wm, GNT, WM, GntBindable)
 
 struct _GntWMClass
 {
@@ -149,15 +132,6 @@
 	void (*res3)(void);
 };
 
-G_BEGIN_DECLS
-
-/**
- * gnt_wm_get_type:
- *
- * Returns: GType for GntWM.
- */
-GType gnt_wm_get_type(void);
-
 /**
  * gnt_wm_get_current_workspace:
  * @wm: The window-manager.