really fix focus_last?
Mikael Magnusson mikachu@comhem.se
4 files changed,
8 insertions(+),
3 deletions(-)
M
openbox/action.c
→
openbox/action.c
@@ -1071,7 +1071,8 @@ }
void action_unfocus (union ActionData *data) { - client_unfocus(data->client.any.c); + if (data->client.any.c == focus_client); + focus_fallback(OB_FOCUS_FALLBACK_UNFOCUSING); } void action_iconify(union ActionData *data)
M
openbox/client.c
→
openbox/client.c
@@ -2833,13 +2833,15 @@ XSync(ob_display, FALSE);
return TRUE; } +/* Used when the current client is closed, focus_last will then prevent + * focus from going to the mouse pointer */ void client_unfocus(ObClient *self) { if (focus_client == self) { #ifdef DEBUG_FOCUS ob_debug("client_unfocus for %lx\n", self->window); #endif - focus_fallback(OB_FOCUS_FALLBACK_UNFOCUSING); + focus_fallback(OB_FOCUS_FALLBACK_CLOSED); } }
M
openbox/focus.c
→
openbox/focus.c
@@ -249,7 +249,8 @@ ObClient *target = NULL;
old = focus_client; - if (type == OB_FOCUS_FALLBACK_UNFOCUSING && old) { + if ((type == OB_FOCUS_FALLBACK_UNFOCUSING + || type == OB_FOCUS_FALLBACK_CLOSED) && old) { if (old->transient_for) { gboolean trans = FALSE;
M
openbox/focus.h
→
openbox/focus.h
@@ -48,6 +48,7 @@
typedef enum { OB_FOCUS_FALLBACK_UNFOCUSING, /*!< forcefully remove focus from the current window */ + OB_FOCUS_FALLBACK_CLOSED, /*!< closed the window with focus */ OB_FOCUS_FALLBACK_NOFOCUS /*!< nothing has focus for some reason */ } ObFocusFallbackType;