diff --git a/docs/help/in/layout.in b/docs/help/in/layout.in index 4b0a2efe..89c434bb 100644 --- a/docs/help/in/layout.in +++ b/docs/help/in/layout.in @@ -7,6 +7,7 @@ SAVE: Saves your layout to the configuration. RESET: Removes the saved layout from the configuration. + RESTORE: Restores the saved layout from the configuration. %9Description:%9 @@ -23,6 +24,7 @@ /LAYOUT SAVE /LAYOUT RESET + /LAYOUT RESTORE %9See also:%9 SAVE, WINDOW diff --git a/docs/signals.txt b/docs/signals.txt index 7776dad7..c57f3204 100644 --- a/docs/signals.txt +++ b/docs/signals.txt @@ -306,6 +306,11 @@ windows.c: "window history changed", WINDOW_REC, char *oldname "window level changed", WINDOW_REC +windows-layout.c + "layout reset" + "layout restore" + "layout save" + FE IRC ------ diff --git a/src/fe-common/core/window-commands.c b/src/fe-common/core/window-commands.c index 57c81ac2..3f72525a 100644 --- a/src/fe-common/core/window-commands.c +++ b/src/fe-common/core/window-commands.c @@ -902,6 +902,8 @@ void window_commands_init(void) command_bind("layout save", NULL, (SIGNAL_FUNC) windows_layout_save); /* SYNTAX: LAYOUT RESET */ command_bind("layout reset", NULL, (SIGNAL_FUNC) windows_layout_reset); + /* SYNTAX: LAYOUT RESTORE */ + command_bind("layout restore", NULL, (SIGNAL_FUNC) windows_layout_restore); command_bind("foreach window", NULL, (SIGNAL_FUNC) cmd_foreach_window); command_set_options("window number", "sticky"); @@ -942,5 +944,6 @@ void window_commands_deinit(void) command_unbind("layout", (SIGNAL_FUNC) cmd_layout); command_unbind("layout save", (SIGNAL_FUNC) windows_layout_save); command_unbind("layout reset", (SIGNAL_FUNC) windows_layout_reset); + command_unbind("layout restore", (SIGNAL_FUNC) windows_layout_restore); command_unbind("foreach window", (SIGNAL_FUNC) cmd_foreach_window); } diff --git a/src/fe-text/mainwindows-layout.c b/src/fe-text/mainwindows-layout.c index fae02539..721d9bd8 100644 --- a/src/fe-text/mainwindows-layout.c +++ b/src/fe-text/mainwindows-layout.c @@ -183,11 +183,15 @@ static void sig_layout_restore(void) CONFIG_NODE *node = tmp->data; if (node->key == NULL) continue; - /* create a new window + mainwindow */ - signal_emit("gui window create override", 1, + /* let's reuse the existing windows when possible */ + window = window_find_refnum(atoi(node->key)); + if (window == NULL) { + /* create a new window + mainwindow */ + signal_emit("gui window create override", 1, GINT_TO_POINTER(0)); - window = window_create(NULL, TRUE); + window = window_create(NULL, TRUE); + } window_set_refnum(window, atoi(node->key)); if (lower_size > 0)