summaryrefslogtreecommitdiff
path: root/src/fe-common/core/window-commands.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fe-common/core/window-commands.c')
-rw-r--r--src/fe-common/core/window-commands.c53
1 files changed, 47 insertions, 6 deletions
diff --git a/src/fe-common/core/window-commands.c b/src/fe-common/core/window-commands.c
index e388f23b..e54478d7 100644
--- a/src/fe-common/core/window-commands.c
+++ b/src/fe-common/core/window-commands.c
@@ -94,16 +94,22 @@ static void cmd_window_info(WINDOW_REC *win)
TXT_WINDOW_INFO_NAME, win->name);
}
+ /* Window width / height */
+ printformat_window(win, MSGLEVEL_CLIENTCRAP, TXT_WINDOW_INFO_SIZE,
+ win->width, win->height);
+
+ /* Window immortality */
+ if (win->immortal) {
+ printformat_window(win, MSGLEVEL_CLIENTCRAP,
+ TXT_WINDOW_INFO_IMMORTAL);
+ }
+
/* Window history name */
if (win->history_name != NULL) {
printformat_window(win, MSGLEVEL_CLIENTCRAP,
TXT_WINDOW_INFO_HISTORY, win->history_name);
}
- /* Window width / height */
- printformat_window(win, MSGLEVEL_CLIENTCRAP, TXT_WINDOW_INFO_SIZE,
- win->width, win->height);
-
/* Window level */
levelstr = win->level == 0 ?
g_strdup("NONE") : bits2level(win->level);
@@ -209,8 +215,14 @@ static void cmd_window_close(const char *data)
while (destroys != NULL) {
WINDOW_REC *rec = destroys->data;
- if (windows->next != NULL)
- window_destroy(rec);
+ if (windows->next != NULL) {
+ if (!rec->immortal)
+ window_destroy(rec);
+ else {
+ printformat_window(rec, MSGLEVEL_CLIENTERROR,
+ TXT_WINDOW_IMMORTAL_ERROR);
+ }
+ }
destroys = g_slist_remove(destroys, rec);
}
@@ -329,6 +341,33 @@ static void cmd_window_level(const char *data)
g_free(level);
}
+/* SYNTAX: WINDOW IMMORTAL on|off|toggle */
+static void cmd_window_immortal(const char *data)
+{
+ int set;
+
+ if (g_strcasecmp(data, "ON") == 0)
+ set = TRUE;
+ else if (g_strcasecmp(data, "OFF") == 0)
+ set = FALSE;
+ else if (g_strcasecmp(data, "TOGGLE") == 0)
+ set = !active_win->immortal;
+ else {
+ printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_NOT_TOGGLE);
+ return;
+ }
+
+ if (set) {
+ window_set_immortal(active_win, TRUE);
+ printformat_window(active_win, MSGLEVEL_CLIENTNOTICE,
+ TXT_WINDOW_SET_IMMORTAL);
+ } else {
+ window_set_immortal(active_win, FALSE);
+ printformat_window(active_win, MSGLEVEL_CLIENTNOTICE,
+ TXT_WINDOW_UNSET_IMMORTAL);
+ }
+}
+
/* SYNTAX: WINDOW SERVER [-sticky | -unsticky] <tag> */
static void cmd_window_server(const char *data)
{
@@ -697,6 +736,7 @@ void window_commands_init(void)
command_bind("window next", NULL, (SIGNAL_FUNC) cmd_window_next);
command_bind("window last", NULL, (SIGNAL_FUNC) cmd_window_last);
command_bind("window level", NULL, (SIGNAL_FUNC) cmd_window_level);
+ command_bind("window immortal", NULL, (SIGNAL_FUNC) cmd_window_immortal);
command_bind("window item", NULL, (SIGNAL_FUNC) cmd_window_item);
command_bind("window item prev", NULL, (SIGNAL_FUNC) cmd_window_item_prev);
command_bind("window item next", NULL, (SIGNAL_FUNC) cmd_window_item_next);
@@ -735,6 +775,7 @@ void window_commands_deinit(void)
command_unbind("window next", (SIGNAL_FUNC) cmd_window_next);
command_unbind("window last", (SIGNAL_FUNC) cmd_window_last);
command_unbind("window level", (SIGNAL_FUNC) cmd_window_level);
+ command_unbind("window immortal", (SIGNAL_FUNC) cmd_window_immortal);
command_unbind("window item", (SIGNAL_FUNC) cmd_window_item);
command_unbind("window item prev", (SIGNAL_FUNC) cmd_window_item_prev);
command_unbind("window item next", (SIGNAL_FUNC) cmd_window_item_next);