summaryrefslogtreecommitdiff
path: root/src/manage.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/manage.c')
-rw-r--r--src/manage.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/manage.c b/src/manage.c
index 7d9f552..ebdae08 100644
--- a/src/manage.c
+++ b/src/manage.c
@@ -196,6 +196,10 @@ manage (rp_window *win, screen_info *s)
win->state = STATE_MAPPED;
win->number = get_unique_window_number ();
+ /* Put win in the mapped window list */
+ remove_from_list (win);
+ insert_into_list (win, rp_mapped_window_sentinel);
+
/* sort_window_list_by_number(); */
PRINT_DEBUG ("window '%s' managed.\n", win->name);
@@ -205,13 +209,23 @@ void
unmanage (rp_window *w)
{
return_window_number (w->number);
- remove_from_window_list (w);
+ remove_from_list (w);
+ XFree (w->hints);
+
+ free (w);
#ifdef AUTO_CLOSE
- if (!rp_current_window)
+ if (rp_mapped_window_sentinel->next == rp_mapped_window_sentinel
+ && rp_mapped_window_sentinel->prev == rp_mapped_window_sentinel)
{
- /* If rp_current_window is NULL then we have run out of managed
- windows, So kill ratpoison. */
+ /* If the mapped window list is empty then we have run out of
+ managed windows, So kill ratpoison. */
+
+ /* FIXME: The unmapped window list may also have to be checked
+ in the case that the only mapped window in unmapped and
+ shortly after another window is mapped most likely by the
+ same app. */
+
send_kill();
}
#endif