[PATCH 2/3] irssi core: add window console set active support

"Luis R. Rodriguez" <[email protected]> Fri, 15 Aug 2014 13:55:31 -0700
Newsgroups gmane.network.irc.irssi.devel
Message-ID <[email protected]>
From: "Luis R. Rodriguez" <[email protected]>

We can't go to the console window easily right now, we'll
want this in case irssi needs to prompt the user for something
sensitive such as a password.

Signed-off-by: Luis R. Rodriguez <[email protected]>
---
 src/fe-common/core/fe-windows.c      | 16 ++++++++++++++++
 src/fe-common/core/fe-windows.h      |  2 ++
 src/fe-common/core/window-commands.c | 10 ++++++++++
 3 files changed, 28 insertions(+)

diff --git a/src/fe-common/core/fe-windows.c b/src/fe-common/core/fe-windows.c
index bf9d715..be44ab7 100644
--- a/src/fe-common/core/fe-windows.c
+++ b/src/fe-common/core/fe-windows.c
@@ -70,6 +70,8 @@ WINDOW_REC *window_create(WI_ITEM_REC *item, int automatic)
 
 	rec = g_new0(WINDOW_REC, 1);
 	rec->refnum = window_get_new_refnum();
+	if (rec->refnum == 1)
+		rec->console = 1;
 	rec->level = settings_get_level("window_default_level");
 
 	windows = g_slist_prepend(windows, rec);
@@ -353,6 +355,20 @@ WINDOW_REC *window_find_refnum(int refnum)
 	return NULL;
 }
 
+WINDOW_REC *window_find_console(void)
+{
+	GSList *tmp;
+
+	for (tmp = windows; tmp != NULL; tmp = tmp->next) {
+		WINDOW_REC *rec = tmp->data;
+
+		if (rec->console)
+			return rec;
+	}
+
+	return NULL;
+}
+
 WINDOW_REC *window_find_name(const char *name)
 {
 	GSList *tmp;
diff --git a/src/fe-common/core/fe-windows.h b/src/fe-common/core/fe-windows.h
index 613f15f..28ac671 100644
--- a/src/fe-common/core/fe-windows.h
+++ b/src/fe-common/core/fe-windows.h
@@ -35,6 +35,7 @@ struct _WINDOW_REC {
 	unsigned int immortal:1;
 	unsigned int sticky_refnum:1;
 	unsigned int destroying:1;
+	unsigned int console:1;
 
 	/* window-specific command line history */
 	HISTORY_REC *history;
@@ -75,6 +76,7 @@ const char *window_get_active_name(WINDOW_REC *window);
 WINDOW_REC *window_find_level(void *server, int level);
 WINDOW_REC *window_find_closest(void *server, const char *name, int level);
 WINDOW_REC *window_find_refnum(int refnum);
+WINDOW_REC *window_find_console(void);
 WINDOW_REC *window_find_name(const char *name);
 WINDOW_REC *window_find_item(SERVER_REC *server, const char *name);
 
diff --git a/src/fe-common/core/window-commands.c b/src/fe-common/core/window-commands.c
index a975fe5..aa791da 100644
--- a/src/fe-common/core/window-commands.c
+++ b/src/fe-common/core/window-commands.c
@@ -842,6 +842,16 @@ static void cmd_foreach_window(const char *data)
 		active_win = old;
 }
 
+void window_console(void)
+{
+	WINDOW_REC *window;
+
+	window = window_find_console();
+	if (!window)
+		return;
+	window_set_active(window);
+}
+
 void window_commands_init(void)
 {
 	settings_add_bool("lookandfeel", "active_window_ignore_refnum", TRUE);
-- 
2.0.3