stop ignoring enters on window hide, and explain why

This commit is contained in:
Dana Jansens 2007-06-12 04:54:16 +00:00
parent 4b3b71c54e
commit 9e44bed8b8

View file

@ -2469,7 +2469,6 @@ gboolean client_show(ObClient *self)
gboolean client_hide(ObClient *self) gboolean client_hide(ObClient *self)
{ {
gboolean hide = FALSE; gboolean hide = FALSE;
gulong ignore_start;
if (!client_should_show(self)) { if (!client_should_show(self)) {
if (self == focus_client) { if (self == focus_client) {
@ -2483,15 +2482,22 @@ gboolean client_hide(ObClient *self)
event_cancel_all_key_grabs(); event_cancel_all_key_grabs();
} }
if (!config_focus_under_mouse) /* We don't need to ignore enter events here.
ignore_start = event_start_ignore_all_enters(); The window can hide/iconify in 3 different ways:
1 - through an x message. in this case we ignore all enter events
caused by responding to the x message (unless underMouse)
2 - by a keyboard action. in this case we ignore all enter events
caused by the action
3 - by a mouse action. in this case they are doing stuff with the
mouse and focus _should_ move.
Also in action_end, we simulate an enter event that can't be ignored
so trying to ignore them is futile in case 3 anyways
*/
frame_hide(self->frame); frame_hide(self->frame);
hide = TRUE; hide = TRUE;
if (!config_focus_under_mouse)
event_end_ignore_all_enters(ignore_start);
/* According to the ICCCM (sec 4.1.3.1) when a window is not visible, /* According to the ICCCM (sec 4.1.3.1) when a window is not visible,
it needs to be in IconicState. This includes when it is on another it needs to be in IconicState. This includes when it is on another
desktop! desktop!