diff --git a/src/command/command.c b/src/command/command.c index bd0d741c..c62c7784 100644 --- a/src/command/command.c +++ b/src/command/command.c @@ -684,6 +684,14 @@ static struct cmd_t command_defs[] = "Enable or disable word wrapping in the main window.", NULL } } }, + { "/winstidy", + cmd_winstidy, parse_args, 1, 1, &cons_winstidy_setting, + { "/winstidy on|off", "Auto tidy windows.", + { "/winstidy on|off", + "----------------", + "Enable or disable auto window tidy.", + NULL } } }, + { "/time", cmd_time, parse_args, 1, 2, &cons_time_setting, { "/time setting|statusbar [setting]", "Time display.", @@ -1921,7 +1929,7 @@ _cmd_complete_parameters(const char * const input) // autocomplete boolean settings gchar *boolean_choices[] = { "/beep", "/intype", "/states", "/outtype", "/flash", "/splash", "/chlog", "/grlog", "/mouse", "/history", - "/vercheck", "/privileges", "/presence", "/wrap", "/carbons" }; + "/vercheck", "/privileges", "/presence", "/wrap", "/winstidy", "/carbons" }; for (i = 0; i < ARRAY_SIZE(boolean_choices); i++) { result = autocomplete_param_with_func(input, boolean_choices[i], prefs_autocomplete_boolean_choice); diff --git a/src/command/commands.c b/src/command/commands.c index b942acd4..35e424b9 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -689,7 +689,11 @@ cmd_wins(gchar **args, struct cmd_help_t help) if (args[0] == NULL) { cons_show_wins(); } else if (strcmp(args[0], "tidy") == 0) { - ui_tidy_wins(); + if (ui_tidy_wins()) { + cons_show("Windows tidied."); + } else { + cons_show("No tidy needed."); + } } else if (strcmp(args[0], "prune") == 0) { ui_prune_wins(); } else if (strcmp(args[0], "swap") == 0) { @@ -718,6 +722,18 @@ cmd_wins(gchar **args, struct cmd_help_t help) return TRUE; } +gboolean +cmd_winstidy(gchar **args, struct cmd_help_t help) +{ + gboolean result = _cmd_set_boolean_preference(args[0], help, "Wins Auto Tidy", PREF_WINS_AUTO_TIDY); + + if (result && g_strcmp0(args[0], "on") == 0) { + ui_tidy_wins(); + } + + return result; +} + gboolean cmd_win(gchar **args, struct cmd_help_t help) { @@ -804,7 +820,7 @@ cmd_help(gchar **args, struct cmd_help_t help) "/carbons", "/chlog", "/flash", "/gone", "/grlog", "/history", "/intype", "/log", "/mouse", "/notify", "/outtype", "/prefs", "/priority", "/reconnect", "/roster", "/splash", "/states", "/statuses", "/theme", - "/titlebar", "/vercheck", "/privileges", "/occupants", "/presence", "/wrap" }; + "/titlebar", "/vercheck", "/privileges", "/occupants", "/presence", "/wrap", "/winstidy" }; _cmd_show_filtered_help("Settings commands", filter, ARRAY_SIZE(filter)); } else if (strcmp(args[0], "navigation") == 0) { @@ -3242,6 +3258,11 @@ cmd_close(gchar **args, struct cmd_help_t help) ui_close_win(index); cons_show("Closed window %d", index); + // Tidy up the window list. + if (prefs_get_boolean(PREF_WINS_AUTO_TIDY)) { + ui_tidy_wins(); + } + return TRUE; } diff --git a/src/command/commands.h b/src/command/commands.h index 7b7e7c93..fb5372a6 100644 --- a/src/command/commands.h +++ b/src/command/commands.h @@ -125,6 +125,7 @@ gboolean cmd_vercheck(gchar **args, struct cmd_help_t help); gboolean cmd_who(gchar **args, struct cmd_help_t help); gboolean cmd_win(gchar **args, struct cmd_help_t help); gboolean cmd_wins(gchar **args, struct cmd_help_t help); +gboolean cmd_winstidy(gchar **args, struct cmd_help_t help); gboolean cmd_xa(gchar **args, struct cmd_help_t help); gboolean cmd_alias(gchar **args, struct cmd_help_t help); gboolean cmd_xmlconsole(gchar **args, struct cmd_help_t help); diff --git a/src/config/preferences.c b/src/config/preferences.c index 36a04a8f..e892d796 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -507,6 +507,7 @@ _get_group(preference_t pref) case PREF_MUC_PRIVILEGES: case PREF_PRESENCE: case PREF_WRAP: + case PREF_WINS_AUTO_TIDY: case PREF_TIME: case PREF_TIME_STATUSBAR: case PREF_ROSTER: @@ -654,6 +655,8 @@ _get_key(preference_t pref) return "presence"; case PREF_WRAP: return "wrap"; + case PREF_WINS_AUTO_TIDY: + return "wins.autotidy"; case PREF_TIME: return "time"; case PREF_TIME_STATUSBAR: @@ -700,6 +703,7 @@ _get_default_boolean(preference_t pref) case PREF_MUC_PRIVILEGES: case PREF_PRESENCE: case PREF_WRAP: + case PREF_WINS_AUTO_TIDY: case PREF_INPBLOCK_DYNAMIC: case PREF_RESOURCE_TITLE: case PREF_RESOURCE_MESSAGE: diff --git a/src/config/preferences.h b/src/config/preferences.h index 4455eca1..d1faca63 100644 --- a/src/config/preferences.h +++ b/src/config/preferences.h @@ -74,6 +74,7 @@ typedef enum { PREF_MUC_PRIVILEGES, PREF_PRESENCE, PREF_WRAP, + PREF_WINS_AUTO_TIDY, PREF_TIME, PREF_TIME_STATUSBAR, PREF_STATUSES, diff --git a/src/config/theme.c b/src/config/theme.c index aeee4463..640b7298 100644 --- a/src/config/theme.c +++ b/src/config/theme.c @@ -431,6 +431,7 @@ _load_preferences(void) _set_boolean_preference("flash", PREF_FLASH); _set_boolean_preference("splash", PREF_SPLASH); _set_boolean_preference("wrap", PREF_WRAP); + _set_boolean_preference("wins.autotidy", PREF_WINS_AUTO_TIDY); _set_string_preference("time", PREF_TIME); _set_string_preference("time.statusbar", PREF_TIME_STATUSBAR); diff --git a/src/ui/console.c b/src/ui/console.c index a41ccad6..1fa8b7b1 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -871,6 +871,15 @@ cons_wrap_setting(void) cons_show("Word wrap (/wrap) : OFF"); } +void +cons_winstidy_setting(void) +{ + if (prefs_get_boolean(PREF_WINS_AUTO_TIDY)) + cons_show("Window Auto Tidy (/winstidy) : ON"); + else + cons_show("Window Auto Tidy (/winstidy) : OFF"); +} + void cons_presence_setting(void) { @@ -1035,6 +1044,7 @@ cons_show_ui_prefs(void) cons_flash_setting(); cons_splash_setting(); cons_wrap_setting(); + cons_winstidy_setting(); cons_time_setting(); cons_resource_setting(); cons_vercheck_setting(); diff --git a/src/ui/core.c b/src/ui/core.c index e7059ef0..8431371d 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -1105,16 +1105,10 @@ ui_close_win(int index) status_bar_active(1); } -void +gboolean ui_tidy_wins(void) { - gboolean tidied = wins_tidy(); - - if (tidied) { - cons_show("Windows tidied."); - } else { - cons_show("No tidy needed."); - } + return wins_tidy(); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 0ee21be4..29ee6bef 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -216,7 +216,7 @@ void ui_show_all_room_rosters(void); void ui_hide_all_room_rosters(void); gboolean ui_chat_win_exists(const char * const barejid); -void ui_tidy_wins(void); +gboolean ui_tidy_wins(void); void ui_prune_wins(void); gboolean ui_swap_wins(int source_win, int target_win); @@ -305,6 +305,7 @@ void cons_occupants_setting(void); void cons_roster_setting(void); void cons_presence_setting(void); void cons_wrap_setting(void); +void cons_winstidy_setting(void); void cons_time_setting(void); void cons_mouse_setting(void); void cons_statuses_setting(void); diff --git a/theme_template b/theme_template index c088e181..4020c000 100644 --- a/theme_template +++ b/theme_template @@ -72,3 +72,4 @@ roster.size= occupants= occupants.size= occupants.jid= +wins.autotidy= diff --git a/themes/boothj5 b/themes/boothj5 index 9ed3fe69..0a710889 100644 --- a/themes/boothj5 +++ b/themes/boothj5 @@ -73,3 +73,4 @@ roster.size=25 occupants=true occupants.size=15 occupants.jid=true +wins.autotidy=true diff --git a/themes/simple b/themes/simple index 2885db12..3ddd2893 100644 --- a/themes/simple +++ b/themes/simple @@ -21,3 +21,4 @@ privileges=false presence=false intype=false otr.warn=false +wins.autotidy=false diff --git a/unittests/ui/stub_ui.c b/unittests/ui/stub_ui.c index bdee3453..0052bfc8 100644 --- a/unittests/ui/stub_ui.c +++ b/unittests/ui/stub_ui.c @@ -315,7 +315,9 @@ void ui_redraw_all_room_rosters(void) {} void ui_show_all_room_rosters(void) {} void ui_hide_all_room_rosters(void) {} -void ui_tidy_wins(void) {} +gboolean ui_tidy_wins(void) { + return TRUE; +} void ui_prune_wins(void) {} gboolean ui_swap_wins(int source_win, int target_win) { @@ -458,6 +460,7 @@ void cons_occupants_setting(void) {} void cons_roster_setting(void) {} void cons_presence_setting(void) {} void cons_wrap_setting(void) {} +void cons_winstidy_setting(void) {} void cons_time_setting(void) {} void cons_mouse_setting(void) {} void cons_statuses_setting(void) {}