X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=plugins%2Ffocus.c;h=17ab20ef40915d974991698043ec7c07bab191f6;hb=06f27af0a994a6f92d1c3a9306f46a73e6162bb8;hp=ff2e1e2137a238f4a51699c87896d273e93d6c85;hpb=80c7f14520694771c08b9564487ba65e7dadd75e;p=chaz%2Fopenbox diff --git a/plugins/focus.c b/plugins/focus.c index ff2e1e21..17ab20ef 100644 --- a/plugins/focus.c +++ b/plugins/focus.c @@ -9,24 +9,28 @@ void plugin_setup_config() { + ConfigValue val; + config_def_set(config_def_new("focus.followMouse", Config_Bool, "Focus Follows Mouse", "Focus windows when the mouse pointer " "enters them.")); + val.bool = TRUE; + config_set("focus.followMouse", Config_Bool, val); config_def_set(config_def_new("focus.focusNew", Config_Bool, "Focus New Windows", - "Focus windows when they first appear ")); + "Focus windows when they first appear.")); + val.bool = TRUE; + config_set("focus.focusNew", Config_Bool, val); +/* config_def_set(config_def_new("focus.warpOnDeskSwitch", Config_Bool, "Warp Pointer On Desktop Switch", "Warps the pointer to the focused window " "when switching desktops.")); + config_set("focus.warpOnDeskSwitch", Config_Bool, FALSE); +*/ } -/* config options */ -static gboolean follow_mouse = TRUE; -static gboolean warp_on_desk_switch = FALSE; -static gboolean focus_new = TRUE; - /*static int skip_enter = 0;*/ static gboolean focus_under_pointer() @@ -85,7 +89,7 @@ static void focus_fallback(gboolean switching_desks) chew_enter_events(); - if (warp_on_desk_switch) { + if (FALSE /*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, @@ -113,9 +117,16 @@ static void focus_desktop() static void event(ObEvent *e, void *foo) { + ConfigValue follow_mouse, focus_new; + + if (!config_get("focus.followMouse", Config_Bool, &follow_mouse)) + g_assert_not_reached(); + switch (e->type) { case Event_Client_Mapped: - if (focus_new && client_normal(e->data.c.client)) + if (!config_get("focus.focusNew", Config_Bool, &focus_new)) + g_assert_not_reached(); + if (focus_new.bool && client_normal(e->data.c.client)) client_focus(e->data.c.client); break; @@ -123,7 +134,7 @@ static void event(ObEvent *e, void *foo) if (ob_state == State_Exiting) break; if (client_focused(e->data.c.client)) - if (!follow_mouse || !focus_under_pointer()) + if (!follow_mouse.bool || !focus_under_pointer()) focus_fallback(FALSE); break; @@ -131,7 +142,7 @@ static void event(ObEvent *e, void *foo) /* focus the next available target if moving from the current desktop. */ if ((unsigned)e->data.c.num[1] == screen_desktop) - if (!follow_mouse || !focus_under_pointer()) + if (!follow_mouse.bool || !focus_under_pointer()) focus_fallback(FALSE); case Event_Ob_Desktop: @@ -140,7 +151,7 @@ static void event(ObEvent *e, void *foo) case Event_Ob_ShowDesktop: if (!e->data.o.num[0]) { /* hiding the desktop, showing the clients */ - if (!follow_mouse || !focus_under_pointer()) + if (!follow_mouse.bool || !focus_under_pointer()) focus_fallback(TRUE); } else /* hiding clients, showing the desktop */ focus_desktop(); @@ -155,8 +166,9 @@ static void event(ObEvent *e, void *foo) --skip_enter; } else*/ - if (e->data.x.client != NULL && client_normal(e->data.x.client)) - client_focus(e->data.x.client); + if (follow_mouse.bool) + if (e->data.x.client != NULL && client_normal(e->data.x.client)) + client_focus(e->data.x.client); break; default: