diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/actions.c | 38 | ||||
-rw-r--r-- | src/actions.h | 1 | ||||
-rw-r--r-- | src/main.c | 4 | ||||
-rw-r--r-- | src/window.c | 18 |
4 files changed, 59 insertions, 2 deletions
diff --git a/src/actions.c b/src/actions.c index c1c8b4f..0de31ed 100644 --- a/src/actions.c +++ b/src/actions.c @@ -96,6 +96,15 @@ add_set_var (char *name, cmdret * (*fn)(struct cmdarg **), int nargs, ...) } static void +set_var_free (struct set_var *var) +{ + if (var == NULL) + return; + free(var->args); + free(var); +} + +static void init_set_vars(void) { add_set_var ("resizeunit", set_resizeunit, 1, "", arg_NUMBER); @@ -157,6 +166,16 @@ add_command (char *name, cmdret * (*fn)(int, struct cmdarg **), int nargs, int i list_add (&cmd->node, &user_commands); } +static void +user_command_free(struct user_command *cmd) +{ + if (cmd == NULL ) + return; + + free(cmd->args); + free(cmd); +} + void init_user_commands(void) { @@ -840,6 +859,25 @@ free_aliases (void) free (alias_list); } +void +free_user_commands (void) +{ + struct user_command *cur; + struct set_var *var; + struct list_head *tmp, *iter; + + list_for_each_safe_entry (cur, iter, tmp, &user_commands, node) + { + list_del (&cur->node); + user_command_free (cur); + } + list_for_each_safe_entry (var, iter, tmp, &set_vars, node) + { + list_del (&var->node); + set_var_free (var); + } +} + /* return a KeySym from a string that contains either a hex value or an X keysym description */ static int string_to_keysym (char *str) diff --git a/src/actions.h b/src/actions.h index 84a1b0f..b212087 100644 --- a/src/actions.h +++ b/src/actions.h @@ -222,6 +222,7 @@ void initialize_default_keybindings (void); cmdret *cmdret_new (int success, char *fmt, ...); void cmdret_free (cmdret *ret); void keymap_free (rp_keymap *map); +void free_user_commands (void); void free_aliases (void); void free_keymaps (void); char *wingravity_to_string (int g); @@ -770,10 +770,10 @@ clean_up (void) free_keymaps (); free_aliases (); + free_user_commands (); free_bar (); - free_groups (); - free_window_stuff (); + free_groups (); for (i=0; i<num_screens; i++) { diff --git a/src/window.c b/src/window.c index 1ae5201..fe7bc1e 100644 --- a/src/window.c +++ b/src/window.c @@ -771,6 +771,24 @@ init_window_stuff (void) void free_window_stuff (void) { + rp_window *cur; + struct list_head *tmp, *iter; + + list_for_each_safe_entry (cur, iter, tmp, &rp_unmapped_window, node) + { + list_del (&cur->node); + groups_del_window (cur); + free_window (cur); + } + + list_for_each_safe_entry (cur, iter, tmp, &rp_mapped_window, node) + { + list_del (&cur->node); + groups_unmap_window (cur); + groups_del_window (cur); + free_window (cur); + } + numset_free (rp_window_numset); } |