Add getter for GntWidget->window.

Fri, 26 Apr 2019 16:56:55 -0400

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Fri, 26 Apr 2019 16:56:55 -0400
changeset 1257
a0be04705005
parent 1256
41af6d2449d1
child 1258
f18411b05463
child 1259
f4dca145c933
child 1261
e3f77b319c4f

Add getter for GntWidget->window.

gntbox.c file | annotate | diff | comparison | revisions
gntbutton.c file | annotate | diff | comparison | revisions
gntcheckbox.c file | annotate | diff | comparison | revisions
gntcombobox.c file | annotate | diff | comparison | revisions
gntentry.c file | annotate | diff | comparison | revisions
gntlabel.c file | annotate | diff | comparison | revisions
gntline.c file | annotate | diff | comparison | revisions
gntmenu.c file | annotate | diff | comparison | revisions
gntprogressbar.c file | annotate | diff | comparison | revisions
gntslider.c file | annotate | diff | comparison | revisions
gnttextview.c file | annotate | diff | comparison | revisions
gnttree.c file | annotate | diff | comparison | revisions
gntwidget.c file | annotate | diff | comparison | revisions
gntwidget.h file | annotate | diff | comparison | revisions
gntwm.c file | annotate | diff | comparison | revisions
wms/irssi.c file | annotate | diff | comparison | revisions
wms/s.c file | annotate | diff | comparison | revisions
--- a/gntbox.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gntbox.c	Fri Apr 26 16:56:55 2019 -0400
@@ -105,6 +105,7 @@
 {
 	GntBox *box = GNT_BOX(widget);
 	GntBoxPrivate *priv = gnt_box_get_instance_private(box);
+	WINDOW *window = gnt_widget_get_window(widget);
 
 	if (priv->focus == NULL && gnt_widget_get_parent(widget) == NULL) {
 		g_list_foreach(priv->list, (GFunc)add_to_focus, box);
@@ -118,13 +119,18 @@
 
 		get_title_thingies(box, title, &pos, &right);
 
-		if (gnt_widget_has_focus(widget))
-			wbkgdset(widget->window, '\0' | gnt_color_pair(GNT_COLOR_TITLE));
-		else
-			wbkgdset(widget->window, '\0' | gnt_color_pair(GNT_COLOR_TITLE_D));
-		mvwaddch(widget->window, 0, pos-1, ACS_RTEE | gnt_color_pair(GNT_COLOR_NORMAL));
-		mvwaddstr(widget->window, 0, pos, C_(title));
-		mvwaddch(widget->window, 0, right, ACS_LTEE | gnt_color_pair(GNT_COLOR_NORMAL));
+		if (gnt_widget_has_focus(widget)) {
+			wbkgdset(window,
+			         '\0' | gnt_color_pair(GNT_COLOR_TITLE));
+		} else {
+			wbkgdset(window,
+			         '\0' | gnt_color_pair(GNT_COLOR_TITLE_D));
+		}
+		mvwaddch(window, 0, pos - 1,
+		         ACS_RTEE | gnt_color_pair(GNT_COLOR_NORMAL));
+		mvwaddstr(window, 0, pos, C_(title));
+		mvwaddch(window, 0, right,
+		         ACS_LTEE | gnt_color_pair(GNT_COLOR_NORMAL));
 		g_free(title);
 	}
 
@@ -438,7 +444,8 @@
 
 	gnt_widget_get_position(widget, &widgetx, &widgety);
 	win = newwin(height, width, widgety + y, widgetx + x);
-	copywin(widget->window, win, y, x, 0, 0, height - 1, width - 1, FALSE);
+	copywin(gnt_widget_get_window(widget), win, y, x, 0, 0, height - 1,
+	        width - 1, FALSE);
 	wrefresh(win);
 	delwin(win);
 }
@@ -750,12 +757,13 @@
 	prev = priv->title;
 	priv->title = g_strdup(title);
 	w = GNT_WIDGET(box);
-	if (w->window && gnt_widget_get_has_border(w)) {
+	if (gnt_widget_get_window(w) && gnt_widget_get_has_border(w)) {
 		/* Erase the old title */
 		int pos, right;
 		get_title_thingies(box, prev, &pos, &right);
-		mvwhline(w->window, 0, pos - 1, ACS_HLINE | gnt_color_pair(GNT_COLOR_NORMAL),
-				right - pos + 2);
+		mvwhline(gnt_widget_get_window(w), 0, pos - 1,
+		         ACS_HLINE | gnt_color_pair(GNT_COLOR_NORMAL),
+		         right - pos + 2);
 	}
 	g_free(prev);
 }
@@ -805,6 +813,7 @@
 {
 	GntBoxPrivate *priv = NULL;
 	GntWidget *widget = NULL;
+	WINDOW *widget_window;
 	GList *iter;
 	gint widgetx, widgety, widgetwidth, widgetheight;
 	int pos;
@@ -813,6 +822,7 @@
 	priv = gnt_box_get_instance_private(box);
 
 	widget = GNT_WIDGET(box);
+	widget_window = gnt_widget_get_window(widget);
 	gnt_widget_get_position(widget, &widgetx, &widgety);
 	gnt_widget_get_internal_size(widget, &widgetwidth, &widgetheight);
 	pos = gnt_widget_get_has_border(widget) ? 1 : 0;
@@ -823,6 +833,7 @@
 
 	for (iter = priv->list; iter; iter = iter->next) {
 		GntWidget *w = GNT_WIDGET(iter->data);
+		WINDOW *wwin;
 		int height, width;
 		gint x, y;
 
@@ -865,11 +876,13 @@
 			}
 		}
 
-		copywin(w->window, widget->window, 0, 0,
-				y, x, y + height - 1, x + width - 1, FALSE);
+		wwin = gnt_widget_get_window(w);
+		copywin(wwin, widget_window, 0, 0, y, x, y + height - 1,
+		        x + width - 1, FALSE);
 		gnt_widget_set_position(w, x + widgetx, y + widgety);
 		if (w == priv->active) {
-			wmove(widget->window, y + getcury(w->window), x + getcurx(w->window));
+			wmove(widget_window, y + getcury(wwin),
+			      x + getcurx(wwin));
 		}
 	}
 }
@@ -1013,8 +1026,9 @@
 		gnt_widget_set_focus(priv->active, TRUE);
 	}
 
-	if (GNT_WIDGET(box)->window)
+	if (gnt_widget_get_window(GNT_WIDGET(box))) {
 		gnt_widget_draw(GNT_WIDGET(box));
+	}
 }
 
 void gnt_box_give_focus_to_child(GntBox *box, GntWidget *widget)
@@ -1038,7 +1052,8 @@
 		gnt_widget_set_focus(priv->active, TRUE);
 	}
 
-	if (GNT_WIDGET(box)->window)
+	if (gnt_widget_get_window(GNT_WIDGET(box))) {
 		gnt_widget_draw(GNT_WIDGET(box));
+	}
 }
 
--- a/gntbutton.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gntbutton.c	Fri Apr 26 16:56:55 2019 -0400
@@ -49,6 +49,7 @@
 {
 	GntButton *button = GNT_BUTTON(widget);
 	GntButtonPrivate *priv = gnt_button_get_instance_private(button);
+	WINDOW *window = gnt_widget_get_window(widget);
 	GntColorType type;
 	gboolean focus;
 
@@ -57,14 +58,14 @@
 	else
 		type = GNT_COLOR_NORMAL;
 
-	wbkgdset(widget->window, '\0' | gnt_color_pair(type));
-	mvwaddstr(widget->window, (small_button) ? 0 : 1, 2, C_(priv->text));
+	wbkgdset(window, '\0' | gnt_color_pair(type));
+	mvwaddstr(window, (small_button) ? 0 : 1, 2, C_(priv->text));
 	if (small_button) {
 		gint width;
 		type = GNT_COLOR_HIGHLIGHT;
 		gnt_widget_get_internal_size(widget, &width, NULL);
-		mvwchgat(widget->window, 0, 0, width,
-		         focus ? A_BOLD : A_REVERSE, type, NULL);
+		mvwchgat(window, 0, 0, width, focus ? A_BOLD : A_REVERSE, type,
+		         NULL);
 	}
 
 	GNTDEBUG;
--- a/gntcheckbox.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gntcheckbox.c	Fri Apr 26 16:56:55 2019 -0400
@@ -45,6 +45,7 @@
 {
 	GntCheckBox *cb = GNT_CHECK_BOX(widget);
 	GntCheckBoxPrivate *priv = gnt_check_box_get_instance_private(cb);
+	WINDOW *window = gnt_widget_get_window(widget);
 	GntColorType type;
 	gboolean focus = gnt_widget_has_focus(widget);
 
@@ -53,18 +54,17 @@
 	else
 		type = GNT_COLOR_NORMAL;
 
-	wbkgdset(widget->window, '\0' | gnt_color_pair(type));
+	wbkgdset(window, '\0' | gnt_color_pair(type));
 
-	mvwaddch(widget->window, 0, 0, '[');
-	mvwaddch(widget->window, 0, 1,
+	mvwaddch(window, 0, 0, '[');
+	mvwaddch(window, 0, 1,
 	         (priv->checked ? 'X' : ' ') |
 	                 (focus ? A_UNDERLINE : A_NORMAL));
-	mvwaddch(widget->window, 0, 2, ']');
+	mvwaddch(window, 0, 2, ']');
 
-	wbkgdset(widget->window, '\0' | gnt_color_pair(GNT_COLOR_NORMAL));
-	mvwaddstr(widget->window, 0, 4,
-	          C_(gnt_button_get_text(GNT_BUTTON(cb))));
-	(void)wmove(widget->window, 0, 1);
+	wbkgdset(window, '\0' | gnt_color_pair(GNT_COLOR_NORMAL));
+	mvwaddstr(window, 0, 4, C_(gnt_button_get_text(GNT_BUTTON(cb))));
+	(void)wmove(window, 0, 1);
 
 	GNTDEBUG;
 }
--- a/gntcombobox.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gntcombobox.c	Fri Apr 26 16:56:55 2019 -0400
@@ -59,8 +59,9 @@
 		/* XXX: make sure the key actually does exist */
 		gpointer old = box->selected;
 		box->selected = key;
-		if (GNT_WIDGET(box)->window)
+		if (gnt_widget_get_window(GNT_WIDGET(box))) {
 			gnt_widget_draw(GNT_WIDGET(box));
+		}
 		if (box->dropdown)
 			gnt_tree_set_selected(GNT_TREE(box->dropdown), key);
 		g_signal_emit(box, signals[SIG_SELECTION_CHANGED], 0, old, key);
@@ -84,6 +85,7 @@
 gnt_combo_box_draw(GntWidget *widget)
 {
 	GntComboBox *box = GNT_COMBO_BOX(widget);
+	WINDOW *window = gnt_widget_get_window(widget);
 	char *text = NULL, *s;
 	GntColorType type;
 	gint width;
@@ -100,19 +102,19 @@
 	else
 		type = GNT_COLOR_NORMAL;
 
-	wbkgdset(widget->window, '\0' | gnt_color_pair(type));
+	wbkgdset(window, '\0' | gnt_color_pair(type));
 
 	gnt_widget_get_internal_size(widget, &width, NULL);
 	s = (char *)gnt_util_onscreen_width_to_pointer(text, width - 4, &len);
 	*s = '\0';
 
-	mvwaddstr(widget->window, 1, 1, C_(text));
-	whline(widget->window, ' ' | gnt_color_pair(type), width - 4 - len);
-	mvwaddch(widget->window, 1, width - 3,
+	mvwaddstr(window, 1, 1, C_(text));
+	whline(window, ' ' | gnt_color_pair(type), width - 4 - len);
+	mvwaddch(window, 1, width - 3,
 	         ACS_VLINE | gnt_color_pair(GNT_COLOR_NORMAL));
-	mvwaddch(widget->window, 1, width - 2,
+	mvwaddch(window, 1, width - 2,
 	         ACS_DARROW | gnt_color_pair(GNT_COLOR_NORMAL));
-	(void)wmove(widget->window, 1, 1);
+	(void)wmove(window, 1, 1);
 
 	g_free(text);
 	GNTDEBUG;
@@ -147,6 +149,7 @@
 {
 	GntWidget *widget = GNT_WIDGET(box);
 	GntWidget *parent = gnt_widget_get_parent(box->dropdown);
+	WINDOW *window;
 	gint widgetx, widgety, widgetwidth, widgetheight;
 	gint height;
 	gint y;
@@ -160,10 +163,10 @@
 	if (y + height + 2 >= getmaxy(stdscr))
 		y = widgety - height - 1;
 	gnt_widget_set_position(parent, widgetx, y);
-	if (parent->window)
-	{
-		mvwin(parent->window, y, widgetx);
-		wresize(parent->window, height + 2, widgetwidth);
+	window = gnt_widget_get_window(parent);
+	if (window) {
+		mvwin(window, y, widgetx);
+		wresize(window, height + 2, widgetwidth);
 	}
 	gnt_widget_set_internal_size(parent, widgetwidth, height + 2);
 
--- a/gntentry.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gntentry.c	Fri Apr 26 16:56:55 2019 -0400
@@ -312,35 +312,35 @@
 {
 	GntEntry *entry = GNT_ENTRY(widget);
 	GntEntryPrivate *priv = gnt_entry_get_instance_private(entry);
+	WINDOW *window = gnt_widget_get_window(widget);
 	gint width;
 	int stop;
 	gboolean focus;
 	int curpos;
 
 	if ((focus = gnt_widget_has_focus(widget)))
-		wbkgdset(widget->window, '\0' | gnt_color_pair(GNT_COLOR_TEXT_NORMAL));
+		wbkgdset(window, '\0' | gnt_color_pair(GNT_COLOR_TEXT_NORMAL));
 	else
-		wbkgdset(widget->window, '\0' | gnt_color_pair(GNT_COLOR_HIGHLIGHT_D));
+		wbkgdset(window, '\0' | gnt_color_pair(GNT_COLOR_HIGHLIGHT_D));
 
 	if (priv->masked) {
-		mvwhline(widget->window, 0, 0,
-		         gnt_ascii_only() ? '*' : ACS_BULLET,
+		mvwhline(window, 0, 0, gnt_ascii_only() ? '*' : ACS_BULLET,
 		         g_utf8_pointer_to_offset(priv->scroll, priv->end));
 	} else
-		mvwprintw(widget->window, 0, 0, "%s", C_(priv->scroll));
+		mvwprintw(window, 0, 0, "%s", C_(priv->scroll));
 
 	stop = gnt_util_onscreen_width(priv->scroll, priv->end);
 	gnt_widget_get_internal_size(GNT_WIDGET(entry), &width, NULL);
 	if (stop < width) {
-		mvwhline(widget->window, 0, stop, GNT_ENTRY_CHAR, width - stop);
+		mvwhline(window, 0, stop, GNT_ENTRY_CHAR, width - stop);
 	}
 
 	curpos = gnt_util_onscreen_width(priv->scroll, priv->cursor);
-	if (focus)
-		mvwchgat(widget->window, 0, curpos, 1, A_REVERSE, GNT_COLOR_TEXT_NORMAL, NULL);
-	(void)wmove(widget->window, 0, curpos);
-
-	GNTDEBUG;
+	if (focus) {
+		mvwchgat(window, 0, curpos, 1, A_REVERSE, GNT_COLOR_TEXT_NORMAL,
+		         NULL);
+	}
+	(void)wmove(window, 0, curpos);
 }
 
 static void
--- a/gntlabel.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gntlabel.c	Fri Apr 26 16:56:55 2019 -0400
@@ -60,13 +60,12 @@
 static void
 gnt_label_draw(GntWidget *widget)
 {
+	WINDOW *window = gnt_widget_get_window(widget);
 	GntLabel *label = GNT_LABEL(widget);
 	chtype flag = gnt_text_format_flag_to_chtype(label->flags);
 
-	wbkgdset(widget->window, '\0' | flag);
-	mvwaddstr(widget->window, 0, 0, C_(label->text));
-
-	GNTDEBUG;
+	wbkgdset(window, '\0' | flag);
+	mvwaddstr(window, 0, 0, C_(label->text));
 }
 
 static void
@@ -179,11 +178,13 @@
 
 void gnt_label_set_text(GntLabel *label, const char *text)
 {
+	WINDOW *window;
+
 	g_object_set(label, "text", text, NULL);
 
-	if (GNT_WIDGET(label)->window)
-	{
-		werase(GNT_WIDGET(label)->window);
+	window = gnt_widget_get_window(GNT_WIDGET(label));
+	if (window) {
+		werase(window);
 		gnt_widget_draw(GNT_WIDGET(label));
 	}
 }
--- a/gntline.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gntline.c	Fri Apr 26 16:56:55 2019 -0400
@@ -49,15 +49,16 @@
 gnt_line_draw(GntWidget *widget)
 {
 	GntLine *line = GNT_LINE(widget);
+	WINDOW *window = gnt_widget_get_window(widget);
 	gint width, height;
 
 	gnt_widget_get_internal_size(widget, &width, &height);
 	if (line->vertical) {
-		mvwvline(widget->window, 1, 0,
+		mvwvline(window, 1, 0,
 		         ACS_VLINE | gnt_color_pair(GNT_COLOR_NORMAL),
 		         height - 2);
 	} else {
-		mvwhline(widget->window, 0, 1,
+		mvwhline(window, 0, 1,
 		         ACS_HLINE | gnt_color_pair(GNT_COLOR_NORMAL),
 		         width - 2);
 	}
--- a/gntmenu.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gntmenu.c	Fri Apr 26 16:56:55 2019 -0400
@@ -100,12 +100,13 @@
 	guint i;
 
 	if (menu->type == GNT_MENU_TOPLEVEL) {
+		WINDOW *window = gnt_widget_get_window(widget);
 		gint x, y;
 
 		gnt_widget_get_position(widget, &x, &y);
 
-		wbkgdset(widget->window, '\0' | gnt_color_pair(GNT_COLOR_HIGHLIGHT));
-		werase(widget->window);
+		wbkgdset(window, '\0' | gnt_color_pair(GNT_COLOR_HIGHLIGHT));
+		werase(window);
 
 		for (i = 0, iter = menu->list; iter; iter = iter->next, i++) {
 			GntMenuItem *item = GNT_MENU_ITEM(iter->data);
@@ -120,11 +121,10 @@
 			}
 			if (i == menu->selected)
 				type |= A_REVERSE;
-			gnt_menuitem_set_position(
-			        item, getcurx(widget->window) + x,
-			        getcury(widget->window) + y + 1);
-			wbkgdset(widget->window, type);
-			wprintw(widget->window, " %s   ",
+			gnt_menuitem_set_position(item, getcurx(window) + x,
+			                          getcury(window) + y + 1);
+			wbkgdset(window, type);
+			wprintw(window, " %s   ",
 			        C_(gnt_menuitem_get_text(item)));
 		}
 	} else {
--- a/gntprogressbar.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gntprogressbar.c	Fri Apr 26 16:56:55 2019 -0400
@@ -47,6 +47,7 @@
 {
 	GntProgressBarPrivate *priv = gnt_progress_bar_get_instance_private (
 			GNT_PROGRESS_BAR (widget));
+	WINDOW *window = gnt_widget_get_window(widget);
 	gchar progress[8];
 	gint width, height;
 	gint start, end, i, pos;
@@ -69,24 +70,28 @@
 
 			/* background */
 			for (i = 0; i < height; i++) {
-				mvwhline(widget->window, i, 0, ' ' | color,
-				         width);
+				mvwhline(window, i, 0, ' ' | color, width);
 			}
 
 			/* foreground */
 			for (i = 0; i < height; i++) {
-				mvwhline (widget->window, i, start, ACS_CKBOARD | color | A_REVERSE, end);
+				mvwhline(window, i, start,
+				         ACS_CKBOARD | color | A_REVERSE, end);
 			}
 
 			/* text */
 			if (priv->show_value) {
 				pos = width / 2 - strlen(progress) / 2;
 				for (i = 0; i < progress[i]; i++, pos++) {
-					wattrset (widget->window, color | ((pos < start || pos > end) ? A_NORMAL : A_REVERSE));
-					mvwprintw(widget->window, height / 2,
-					          pos, "%c", progress[i]);
+					wattrset(window,
+					         color | ((pos < start ||
+					                   pos > end)
+					                          ? A_NORMAL
+					                          : A_REVERSE));
+					mvwprintw(window, height / 2, pos, "%c",
+					          progress[i]);
 				}
-				wattrset (widget->window, color);
+				wattrset(window, color);
 			}
 
 			break;
@@ -101,25 +106,28 @@
 
 			/* background */
 			for (i = 0; i < width; i++) {
-				mvwvline(widget->window, 0, i, ' ' | color,
-				         height);
+				mvwvline(window, 0, i, ' ' | color, height);
 			}
 
 			/* foreground */
 			for (i = 0; i < width; i++) {
-				mvwvline (widget->window, start, i, ACS_CKBOARD | color | A_REVERSE, end);
+				mvwvline(window, start, i,
+				         ACS_CKBOARD | color | A_REVERSE, end);
 			}
 
 			/* text */
 			if (priv->show_value) {
 				pos = height / 2 - strlen(progress) / 2;
 				for (i = 0; i < progress[i]; i++, pos++) {
-					wattrset (widget->window, color | ((pos < start || pos > end) ? A_NORMAL : A_REVERSE));
-					mvwprintw(widget->window, pos,
-					          width / 2, "%c\n",
-					          progress[i]);
+					wattrset(window,
+					         color | ((pos < start ||
+					                   pos > end)
+					                          ? A_NORMAL
+					                          : A_REVERSE));
+					mvwprintw(window, pos, width / 2,
+					          "%c\n", progress[i]);
 				}
-				wattrset (widget->window, color);
+				wattrset(window, color);
 			}
 
 			break;
--- a/gntslider.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gntslider.c	Fri Apr 26 16:56:55 2019 -0400
@@ -82,6 +82,7 @@
 {
 	GntSlider *slider = GNT_SLIDER(widget);
 	GntSliderPrivate *priv = gnt_slider_get_instance_private(slider);
+	WINDOW *window = gnt_widget_get_window(widget);
 	int attr = 0;
 	int position, size = 0;
 
@@ -101,18 +102,22 @@
 	else
 		position = 0;
 	if (priv->vertical) {
-		mvwvline(widget->window, size-position, 0, ACS_VLINE | gnt_color_pair(GNT_COLOR_NORMAL) | A_BOLD,
-				position);
-		mvwvline(widget->window, 0, 0, ACS_VLINE | gnt_color_pair(GNT_COLOR_NORMAL),
-				size-position);
+		mvwvline(window, size - position, 0,
+		         ACS_VLINE | gnt_color_pair(GNT_COLOR_NORMAL) | A_BOLD,
+		         position);
+		mvwvline(window, 0, 0,
+		         ACS_VLINE | gnt_color_pair(GNT_COLOR_NORMAL),
+		         size - position);
 	} else {
-		mvwhline(widget->window, 0, 0, ACS_HLINE | gnt_color_pair(GNT_COLOR_NORMAL) | A_BOLD,
-				position);
-		mvwhline(widget->window, 0, position, ACS_HLINE | gnt_color_pair(GNT_COLOR_NORMAL),
-				size - position);
+		mvwhline(window, 0, 0,
+		         ACS_HLINE | gnt_color_pair(GNT_COLOR_NORMAL) | A_BOLD,
+		         position);
+		mvwhline(window, 0, position,
+		         ACS_HLINE | gnt_color_pair(GNT_COLOR_NORMAL),
+		         size - position);
 	}
 
-	mvwaddch(widget->window, priv->vertical ? (size - position - 1) : 0,
+	mvwaddch(window, priv->vertical ? (size - position - 1) : 0,
 	         priv->vertical ? 0 : position,
 	         ACS_CKBOARD | gnt_color_pair(attr));
 }
--- a/gnttextview.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gnttextview.c	Fri Apr 26 16:56:55 2019 -0400
@@ -85,6 +85,7 @@
 gnt_text_view_draw(GntWidget *widget)
 {
 	GntTextView *view = GNT_TEXT_VIEW(widget);
+	WINDOW *window = gnt_widget_get_window(widget);
 	gint width, height;
 	int n;
 	int i = 0;
@@ -95,8 +96,8 @@
 
 	gnt_widget_get_internal_size(widget, &width, &height);
 
-	wbkgd(widget->window, gnt_color_pair(GNT_COLOR_NORMAL));
-	werase(widget->window);
+	wbkgd(window, gnt_color_pair(GNT_COLOR_NORMAL));
+	werase(window);
 
 	n = g_list_length(view->list);
 	if ((view->flags & GNT_TEXT_VIEW_TOP_ALIGN) && n < height) {
@@ -116,7 +117,7 @@
 		GList *iter;
 		GntTextLine *line = lines->data;
 
-		(void)wmove(widget->window, height - 1 - i - comp, 0);
+		(void)wmove(window, height - 1 - i - comp, 0);
 
 		for (iter = line->segments; iter; iter = iter->next)
 		{
@@ -127,8 +128,9 @@
 			*end = '\0';
 			if (select_start && select_start < view->string->str + seg->start && select_end > view->string->str + seg->end) {
 				fl |= A_REVERSE;
-				wattrset(widget->window, fl);
-				wprintw(widget->window, "%s", C_(view->string->str + seg->start));
+				wattrset(window, fl);
+				wprintw(window, "%s",
+				        C_(view->string->str + seg->start));
 			} else if (select_start && select_end &&
 				((select_start >= view->string->str + seg->start && select_start <= view->string->str + seg->end) ||
 				(select_end <= view->string->str + seg->end && select_start <= view->string->str + seg->start))) {
@@ -141,19 +143,20 @@
 					else
 						fl = seg->flags;
 					str = g_strndup(cur, last - cur);
-					wattrset(widget->window, fl);
-					waddstr(widget->window, C_(str));
+					wattrset(window, fl);
+					waddstr(window, C_(str));
 					g_free(str);
 					cur = g_utf8_next_char(cur);
 				}
 			} else {
-				wattrset(widget->window, fl);
-				wprintw(widget->window, "%s", C_(view->string->str + seg->start));
+				wattrset(window, fl);
+				wprintw(window, "%s",
+				        C_(view->string->str + seg->start));
 			}
 			*end = back;
 		}
-		wattroff(widget->window, A_UNDERLINE | A_BLINK | A_REVERSE);
-		whline(widget->window, ' ', width - line->length - has_scroll);
+		wattroff(window, A_UNDERLINE | A_BLINK | A_REVERSE);
+		whline(window, ' ', width - line->length - has_scroll);
 	}
 
 	scrcol = width - 1;
@@ -181,19 +184,21 @@
 		else if (showing + position < rows && view->list && !view->list->prev)
 			position = rows - showing;
 
-		mvwvline(widget->window, position + 1, scrcol,
-				ACS_CKBOARD | gnt_color_pair(GNT_COLOR_HIGHLIGHT_D), showing);
+		mvwvline(window, position + 1, scrcol,
+		         ACS_CKBOARD | gnt_color_pair(GNT_COLOR_HIGHLIGHT_D),
+		         showing);
 	}
 
 	if (has_scroll) {
-		mvwaddch(widget->window, 0, scrcol,
-				(lines ? ACS_UARROW : ' ') | gnt_color_pair(GNT_COLOR_HIGHLIGHT_D));
-		mvwaddch(widget->window, height - 1, scrcol,
+		mvwaddch(window, 0, scrcol,
+		         (lines ? ACS_UARROW : ' ') |
+		                 gnt_color_pair(GNT_COLOR_HIGHLIGHT_D));
+		mvwaddch(window, height - 1, scrcol,
 		         ((view->list && view->list->prev) ? ACS_DARROW : ' ') |
 		                 gnt_color_pair(GNT_COLOR_HIGHLIGHT_D));
 	}
 
-	wmove(widget->window, 0, 0);
+	wmove(window, 0, 0);
 }
 
 static void
@@ -437,8 +442,9 @@
 	}
 	view->list = list;
 	gnt_widget_set_drawing(GNT_WIDGET(view), FALSE);
-	if (GNT_WIDGET(view)->window)
+	if (gnt_widget_get_window(GNT_WIDGET(view))) {
 		gnt_widget_draw(GNT_WIDGET(view));
+	}
 	g_string_free(string, TRUE);
 }
 
@@ -694,8 +700,9 @@
 	g_list_free_full(view->tags, (GDestroyNotify)free_tag);
 	view->tags = NULL;
 
-	if (GNT_WIDGET(view)->window)
+	if (gnt_widget_get_window(GNT_WIDGET(view))) {
 		gnt_widget_draw(GNT_WIDGET(view));
+	}
 }
 
 int gnt_text_view_get_lines_below(GntTextView *view)
--- a/gnttree.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gnttree.c	Fri Apr 26 16:56:55 2019 -0400
@@ -456,7 +456,7 @@
 			NEXT_X;
 		}
 		if (!COLUMN_INVISIBLE(priv, i + 1) && notfirst) {
-			mvwaddch(widget->window, y, x, type);
+			mvwaddch(gnt_widget_get_window(widget), y, x, type);
 		}
 	}
 }
@@ -467,6 +467,7 @@
 	GntTreePrivate *priv = gnt_tree_get_instance_private(tree);
 	int start, i;
 	GntWidget *widget = GNT_WIDGET(tree);
+	WINDOW *window = gnt_widget_get_window(widget);
 	GntTreeRow *row;
 	gint width, height;
 	int pos, up, down = 0;
@@ -487,17 +488,17 @@
 		tree_selection_changed(tree, NULL, priv->current);
 	}
 
-	wbkgd(widget->window, gnt_color_pair(GNT_COLOR_NORMAL));
+	wbkgd(window, gnt_color_pair(GNT_COLOR_NORMAL));
 
 	start = 0;
 	if (priv->show_title) {
 		int i;
 		int x = pos;
 
-		mvwhline(widget->window, pos + 1, pos,
+		mvwhline(window, pos + 1, pos,
 		         ACS_HLINE | gnt_color_pair(GNT_COLOR_NORMAL),
 		         width - pos - 1);
-		mvwhline(widget->window, pos, pos,
+		mvwhline(window, pos, pos,
 		         ' ' | gnt_color_pair(GNT_COLOR_NORMAL),
 		         width - pos - 1);
 
@@ -505,7 +506,7 @@
 			if (COLUMN_INVISIBLE(priv, i)) {
 				continue;
 			}
-			mvwaddnstr(widget->window, pos, x + (x != pos),
+			mvwaddnstr(window, pos, x + (x != pos),
 			           priv->columns[i].title,
 			           priv->columns[i].width);
 			NEXT_X;
@@ -606,9 +607,9 @@
 				attr |= gnt_color_pair(GNT_COLOR_NORMAL);
 		}
 
-		wbkgdset(widget->window, '\0' | attr);
-		mvwaddstr(widget->window, i, pos, C_(str));
-		whline(widget->window, ' ', scrcol - wr);
+		wbkgdset(window, '\0' | attr);
+		mvwaddstr(window, i, pos, C_(str));
+		whline(window, ' ', scrcol - wr);
 		priv->bottom = row;
 		g_free(str);
 		tree_mark_columns(tree, pos, i,
@@ -616,9 +617,9 @@
 		                          attr);
 	}
 
-	wbkgdset(widget->window, '\0' | gnt_color_pair(GNT_COLOR_NORMAL));
+	wbkgdset(window, '\0' | gnt_color_pair(GNT_COLOR_NORMAL));
 	while (i < height - pos) {
-		mvwhline(widget->window, i, pos, ' ', width - pos * 2 - 1);
+		mvwhline(window, i, pos, ' ', width - pos * 2 - 1);
 		tree_mark_columns(tree, pos, i,
 		                  (priv->show_separator ? ACS_VLINE : ' '));
 		i++;
@@ -652,17 +653,18 @@
 
 		position += pos + start + 1;
 
-		mvwvline(widget->window, pos + start + 1, scrcol,
-				' ' | gnt_color_pair(GNT_COLOR_NORMAL), rows);
-		mvwvline(widget->window, position, scrcol,
-				ACS_CKBOARD | gnt_color_pair(GNT_COLOR_HIGHLIGHT_D), showing);
+		mvwvline(window, pos + start + 1, scrcol,
+		         ' ' | gnt_color_pair(GNT_COLOR_NORMAL), rows);
+		mvwvline(window, position, scrcol,
+		         ACS_CKBOARD | gnt_color_pair(GNT_COLOR_HIGHLIGHT_D),
+		         showing);
 	}
 
-	mvwaddch(widget->window, start + pos, scrcol,
+	mvwaddch(window, start + pos, scrcol,
 	         ((priv->top != priv->root) ? ACS_UARROW : ' ') |
 	                 gnt_color_pair(GNT_COLOR_HIGHLIGHT_D));
 
-	mvwaddch(widget->window, height - pos - 1, scrcol,
+	mvwaddch(window, height - pos - 1, scrcol,
 	         (row ? ACS_DARROW : ' ') |
 	                 gnt_color_pair(GNT_COLOR_HIGHLIGHT_D));
 
@@ -670,11 +672,11 @@
 	if (SEARCHING(priv)) {
 		const char *str = gnt_util_onscreen_width_to_pointer(
 		        priv->search->str, scrcol - 1, NULL);
-		wbkgdset(widget->window, '\0' | gnt_color_pair(GNT_COLOR_HIGHLIGHT_D));
-		mvwaddnstr(widget->window, height - pos - 1, pos,
-		           priv->search->str, str - priv->search->str);
+		wbkgdset(window, '\0' | gnt_color_pair(GNT_COLOR_HIGHLIGHT_D));
+		mvwaddnstr(window, height - pos - 1, pos, priv->search->str,
+		           str - priv->search->str);
 	}
-	wmove(widget->window, current, pos);
+	wmove(window, current, pos);
 
 	gnt_widget_queue_update(widget);
 }
@@ -2039,8 +2041,9 @@
 	row = g_hash_table_lookup(priv->hash, key);
 	if (row) {
 		row->collapsed = !expanded;
-		if (GNT_WIDGET(tree)->window)
+		if (gnt_widget_get_window(GNT_WIDGET(tree))) {
 			gnt_widget_draw(GNT_WIDGET(tree));
+		}
 		g_signal_emit(tree, signals[SIG_COLLAPSED], 0, key, row->collapsed);
 	}
 }
--- a/gntwidget.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gntwidget.c	Fri Apr 26 16:56:55 2019 -0400
@@ -411,6 +411,13 @@
 	gnt_widget_set_mapped(widget, FALSE);
 }
 
+WINDOW *
+gnt_widget_get_window(GntWidget *widget)
+{
+	g_return_val_if_fail(GNT_IS_WIDGET(widget), NULL);
+	return widget->window;
+}
+
 void
 gnt_widget_set_parent(GntWidget *widget, GntWidget *parent)
 {
--- a/gntwidget.h	Fri Apr 26 05:56:54 2019 -0400
+++ b/gntwidget.h	Fri Apr 26 16:56:55 2019 -0400
@@ -187,6 +187,18 @@
 void gnt_widget_hide(GntWidget *widget);
 
 /**
+ * gnt_widget_get_window:
+ * @widget:  The widget.
+ *
+ * Get the window of a widget.
+ *
+ * Returns: (transfer none) (nullable): The widget's window.
+ *
+ * Since: 3.0.0
+ */
+WINDOW *gnt_widget_get_window(GntWidget *widget);
+
+/**
  * gnt_widget_set_parent:
  * @widget:  The widget.
  * @parent:  The parent widget.
--- a/gntwm.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/gntwm.c	Fri Apr 26 16:56:55 2019 -0400
@@ -126,7 +126,7 @@
 	WINDOW *src, *dst;
 	if (!node)
 		return;
-	src = widget->window;
+	src = gnt_widget_get_window(widget);
 	dst = node->window;
 	copywin(src, dst, node->scroll, 0, 0, 0, getmaxy(dst) - 1, getmaxx(dst) - 1, 0);
 
@@ -134,11 +134,12 @@
 	if (GNT_IS_WINDOW(widget) || GNT_IS_BOX(widget)) {
 		GntWidget *active = gnt_box_get_active(GNT_BOX(widget));
 		if (active) {
+			WINDOW *active_window = gnt_widget_get_window(active);
 			gint curx, cury, widgetx, widgety;
 			gnt_widget_get_position(active, &curx, &cury);
 			gnt_widget_get_position(widget, &widgetx, &widgety);
-			curx += getcurx(active->window) - widgetx;
-			cury += getcury(active->window) - widgety;
+			curx += getcurx(active_window) - widgetx;
+			cury += getcury(active_window) - widgety;
 			if (wmove(node->window, cury, curx) != OK) {
 				(void)wmove(node->window, 0, 0);
 			}
@@ -1049,7 +1050,7 @@
 	if (!gnt_widget_get_has_border(win))
 		return;
 
-	d = win->window;
+	d = gnt_widget_get_window(win);
 	gnt_widget_get_size(win, &w, &h);
 
 	if (gnt_widget_has_shadow(win)) {
@@ -1184,7 +1185,7 @@
 static void
 remove_tag(GntWidget *widget, G_GNUC_UNUSED gpointer data)
 {
-	mvwhline(widget->window, 0, 1,
+	mvwhline(gnt_widget_get_window(widget), 0, 1,
 	         ACS_HLINE | gnt_color_pair(GNT_COLOR_NORMAL), 3);
 	gnt_widget_draw(widget);
 }
@@ -1209,8 +1210,9 @@
 	}
 
 	wm->tagged = g_list_prepend(wm->tagged, widget);
-	wbkgdset(widget->window, ' ' | gnt_color_pair(GNT_COLOR_HIGHLIGHT));
-	mvwprintw(widget->window, 0, 1, "[T]");
+	wbkgdset(gnt_widget_get_window(widget),
+	         ' ' | gnt_color_pair(GNT_COLOR_HIGHLIGHT));
+	mvwprintw(gnt_widget_get_window(widget), 0, 1, "[T]");
 	gnt_widget_draw(widget);
 	return TRUE;
 }
@@ -1770,8 +1772,9 @@
 	GntNode *node;
 	gboolean transient = FALSE;
 
-	if (widget->window == NULL)
+	if (gnt_widget_get_window(widget) == NULL) {
 		return;
+	}
 
 	node = g_new0(GntNode, 1);
 	node->me = widget;
@@ -1851,7 +1854,7 @@
 		if (title && (p = g_hash_table_lookup(wm->positions, title)) != NULL) {
 			sanitize_position(widget, &p->x, &p->y, TRUE);
 			gnt_widget_set_position(widget, p->x, p->y);
-			mvwin(widget->window, p->y, p->x);
+			mvwin(gnt_widget_get_window(widget), p->y, p->x);
 		}
 	}
 
--- a/wms/irssi.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/wms/irssi.c	Fri Apr 26 16:56:55 2019 -0400
@@ -145,7 +145,7 @@
 	gnt_widget_set_take_focus(win, TRUE);
 
 	gnt_widget_set_position(win, x, y);
-	mvwin(win->window, y, x);
+	mvwin(gnt_widget_get_window(win), y, x);
 	gnt_widget_set_size(win, (w < 0) ? -1 : w + 2, h + 2);
 }
 
@@ -168,7 +168,7 @@
 				x = (getmaxx(stdscr) - w) / 2;
 				y = (getmaxy(stdscr) - h) / 2;
 				gnt_widget_set_position(win, x, y);
-				mvwin(win->window, y, x);
+				mvwin(gnt_widget_get_window(win), y, x);
 			} else {
 				gnt_window_set_maximize(GNT_WINDOW(win), GNT_WINDOW_MAXIMIZE_Y);
 				remove_border_set_position_size(wm, win, 0, 0, -1, getmaxy(stdscr) - 1);
--- a/wms/s.c	Fri Apr 26 05:56:54 2019 -0400
+++ b/wms/s.c	Fri Apr 26 16:56:55 2019 -0400
@@ -51,24 +51,28 @@
 static void
 envelope_main_window(GntWidget *win)
 {
+	WINDOW *window;
 	int w, h;
+	window = gnt_widget_get_window(win);
 	gnt_widget_get_size(win, &w, &h);
-	wresize(win->window, h, w + 1);
-	mvwvline(win->window, 0, w, ACS_VLINE | COLOR_PAIR(GNT_COLOR_NORMAL), h);
-	touchwin(win->window);
+	wresize(window, h, w + 1);
+	mvwvline(window, 0, w, ACS_VLINE | COLOR_PAIR(GNT_COLOR_NORMAL), h);
+	touchwin(window);
 }
 
 static void
 envelope_normal_window(GntWidget *win)
 {
+	WINDOW *window;
 	int w, h;
 
 	if (!gnt_widget_get_has_border(win) || gnt_widget_get_transient(win))
 		return;
 
+	window = gnt_widget_get_window(win);
 	gnt_widget_get_size(win, &w, &h);
-	wbkgdset(win->window, ' ' | COLOR_PAIR(GNT_COLOR_NORMAL));
-	mvwprintw(win->window, 0, w - 4, "[X]");
+	wbkgdset(window, ' ' | COLOR_PAIR(GNT_COLOR_NORMAL));
+	mvwprintw(window, 0, w - 4, "[X]");
 }
 
 static void
@@ -120,7 +124,7 @@
 			gnt_widget_set_take_focus(win, TRUE);
 
 			gnt_widget_set_position(win, x, y);
-			mvwin(win->window, y, x);
+			mvwin(gnt_widget_get_window(win), y, x);
 
 			gnt_widget_set_size(win, -1, h + 2);  /* XXX: Why is the +2 needed here? -- sadrul */
 		} else if (!gnt_widget_get_transient(win)) {
@@ -131,7 +135,7 @@
 				y = (maxy - h) / 2;
 
 				gnt_widget_set_position(win, x, y);
-				mvwin(win->window, y, x);
+				mvwin(gnt_widget_get_window(win), y, x);
 			}
 		}
 	}

mercurial