X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=plugins%2Ffocus.c;h=cf30b3717b73416e8c5fbaa99c767cb66795009d;hb=b3507a096858a4958daf92eefbe8bde7efb31b91;hp=a00a0e9357f31b74f2ea0e75420a6eb5d71a13f5;hpb=4f427471b862f2f547981878b1d088ac52929936;p=chaz%2Fopenbox diff --git a/plugins/focus.c b/plugins/focus.c index a00a0e93..cf30b371 100644 --- a/plugins/focus.c +++ b/plugins/focus.c @@ -8,10 +8,10 @@ /* config options */ static gboolean follow_mouse = TRUE; -static gboolean warp_on_desk_switch = TRUE; -static gboolean focus_new = FALSE; +static gboolean warp_on_desk_switch = FALSE; +static gboolean focus_new = TRUE; -static int skip_enter = 0; +/*static int skip_enter = 0;*/ static gboolean focus_under_pointer() { @@ -29,8 +29,7 @@ static gboolean focus_under_pointer() break; } if (it != NULL) { - client_focus(it->data); - return TRUE; + return client_normal(it->data) && client_focus(it->data); } } return FALSE; @@ -42,7 +41,7 @@ static void focus_fallback(gboolean switching_desks) for (it = focus_order[screen_desktop]; it != NULL; it = it->next) if (client_normal(it->data) && client_focus(it->data)) { - if (switching_desks && warp_on_desk_switch) { + if (switching_desks) { XEvent e; Client *c = it->data; @@ -61,18 +60,20 @@ static void focus_fallback(gboolean switching_desks) ++skip_enter; }*/ - /* I have to do this warp twice! Otherwise windows dont get - Enter/Leave events when i warp on a desktop switch! */ - XWarpPointer(ob_display, None, c->window, 0, 0, 0, 0, - c->area.width / 2, c->area.height / 2); - XWarpPointer(ob_display, None, c->window, 0, 0, 0, 0, - c->area.width / 2, c->area.height / 2); + if (warp_on_desk_switch) { + /* I have to do this warp twice! Otherwise windows dont get + Enter/Leave events when i warp on a desktop switch! */ + XWarpPointer(ob_display, None, c->window, 0, 0, 0, 0, + c->area.width / 2, c->area.height / 2); + XWarpPointer(ob_display, None, c->window, 0, 0, 0, 0, + c->area.width / 2, c->area.height / 2); + } } break; } } -static void events(ObEvent *e, void *foo) +static void event(ObEvent *e, void *foo) { switch (e->type) { case Event_Client_Mapped: @@ -83,7 +84,7 @@ static void events(ObEvent *e, void *foo) case Event_Client_Unmapped: if (ob_state == State_Exiting) break; - if (e->data.c.client->focused) + if (client_focused(e->data.c.client)) if (!follow_mouse || !focus_under_pointer()) focus_fallback(FALSE); break; @@ -100,17 +101,16 @@ static void events(ObEvent *e, void *foo) break; case Event_X_EnterNotify: - if (skip_enter) { +/* if (skip_enter) { if (e->data.x.client != NULL) g_message("skipped enter %lx", e->data.x.client->window); else g_message("skipped enter 'root'"); --skip_enter; } - else if (e->data.x.client != NULL && client_normal(e->data.x.client)) { - g_message("enter %lx", e->data.x.client->window); + else*/ + if (e->data.x.client != NULL && client_normal(e->data.x.client)) client_focus(e->data.x.client); - } break; default: @@ -124,10 +124,10 @@ void plugin_startup() Event_Ob_Desktop | Event_Client_Unmapped | Event_X_EnterNotify, - (EventHandler)events, NULL); + (EventHandler)event, NULL); } void plugin_shutdown() { - dispatch_register(0, (EventHandler)events, NULL); + dispatch_register(0, (EventHandler)event, NULL); }