summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openbox/focus.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/openbox/focus.c b/openbox/focus.c
index 541cf010..1006c725 100644
--- a/openbox/focus.c
+++ b/openbox/focus.c
@@ -42,13 +42,23 @@ ObClient *focus_cycle_target;
static ObIconPopup *focus_cycle_popup;
+static void focus_cycle_destructor(ObClient *c)
+{
+ /* end cycling if the target disappears */
+ if (focus_cycle_target == c)
+ focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE);
+}
+
void focus_startup(gboolean reconfig)
{
focus_cycle_popup = icon_popup_new(TRUE);
- if (!reconfig)
+ if (!reconfig) {
+ client_add_destructor((GDestroyNotify) focus_cycle_destructor);
+
/* start with nothing focused */
focus_set_client(NULL);
+ }
}
void focus_shutdown(gboolean reconfig)
@@ -58,6 +68,8 @@ void focus_shutdown(gboolean reconfig)
icon_popup_free(focus_cycle_popup);
if (!reconfig) {
+ client_remove_destructor((GDestroyNotify) focus_cycle_destructor);
+
for (i = 0; i < screen_num_desktops; ++i)
g_list_free(focus_order[i]);
g_free(focus_order);