X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Ffocus.c;h=2d6804bc2576654edfcb5a976119e3eb0ca265b9;hb=6a61f0c433eeecfb289ab6c9db635e25958a6340;hp=9de0c80833e41f010b4bf7227af7ccca564a1b03;hpb=78af5d15e9dd94959786811e9eddfa1e5024067c;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index 9de0c808..2d6804bc 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -56,9 +56,11 @@ static ObIconPopup *focus_cycle_popup; static void focus_cycle_destructor(ObClient *client, gpointer data) { - /* end cycling if the target disappears */ + /* end cycling if the target disappears. CurrentTime is fine, time won't + be used + */ if (focus_cycle_target == client) - focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE); + focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, CurrentTime); } static Window createWindow(Window parent, gulong mask, @@ -87,25 +89,20 @@ void focus_startup(gboolean reconfig) focus_indicator.right.obwin.type = Window_Internal; focus_indicator.bottom.obwin.type = Window_Internal; - attr.save_under = True; attr.override_redirect = True; attr.background_pixel = BlackPixel(ob_display, ob_screen); focus_indicator.top.win = createWindow(RootWindow(ob_display, ob_screen), - CWOverrideRedirect | CWBackPixel | CWSaveUnder, - &attr); + CWOverrideRedirect | CWBackPixel, &attr); focus_indicator.left.win = createWindow(RootWindow(ob_display, ob_screen), - CWOverrideRedirect | CWBackPixel | CWSaveUnder, - &attr); + CWOverrideRedirect | CWBackPixel, &attr); focus_indicator.right.win = createWindow(RootWindow(ob_display, ob_screen), - CWOverrideRedirect | CWBackPixel | CWSaveUnder, - &attr); + CWOverrideRedirect | CWBackPixel, &attr); focus_indicator.bottom.win = createWindow(RootWindow(ob_display, ob_screen), - CWOverrideRedirect | CWBackPixel | CWSaveUnder, - &attr); + CWOverrideRedirect | CWBackPixel, &attr); stacking_add(INTERNAL_AS_WINDOW(&focus_indicator.top)); stacking_add(INTERNAL_AS_WINDOW(&focus_indicator.left)); @@ -190,9 +187,11 @@ void focus_set_client(ObClient *client) XSync(ob_display, FALSE); } - /* in the middle of cycling..? kill it. */ + /* in the middle of cycling..? kill it. CurrentTime is fine, time won't + be used. + */ if (focus_cycle_target) - focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE); + focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, CurrentTime); old = focus_client; focus_client = client; @@ -206,6 +205,10 @@ void focus_set_client(ObClient *client) active = client ? client->window : None; PROP_SET32(RootWindow(ob_display, ob_screen), net_active_window, window, active); + + /* remove hiliting from the window when it gets focused */ + if (client != NULL) + client_hilite(client, FALSE); } } @@ -396,8 +399,9 @@ void focus_cycle_draw_indicator() gint wt, wl, wr, wb; wt = wl = wr = wb = MAX(3, - ob_rr_theme->handle_height + - ob_rr_theme->bwidth * 2); + MAX(1, MAX(ob_rr_theme->paddingx, + ob_rr_theme->paddingy)) * 2 + + ob_rr_theme->fbwidth * 2); x = focus_cycle_target->frame->area.x; y = focus_cycle_target->frame->area.y; @@ -525,7 +529,7 @@ static gboolean valid_focus_target(ObClient *ft) ft->type == OB_CLIENT_TYPE_MENU || ft->type == OB_CLIENT_TYPE_UTILITY))) && ((ft->can_focus || ft->focus_notify) && - !ft->skip_taskbar && + !ft->skip_pager && (ft->desktop == screen_desktop || ft->desktop == DESKTOP_ALL)) && ft == client_focus_target(ft)) return TRUE; @@ -547,7 +551,7 @@ static gboolean valid_focus_target(ObClient *ft) } void focus_cycle(gboolean forward, gboolean linear, gboolean interactive, - gboolean dialog, gboolean done, gboolean cancel) + gboolean dialog, gboolean done, gboolean cancel, Time time) { static ObClient *first = NULL; static ObClient *t = NULL; @@ -608,7 +612,7 @@ void focus_cycle(gboolean forward, gboolean linear, gboolean interactive, done_cycle: if (done && focus_cycle_target) - client_activate(focus_cycle_target, FALSE, TRUE); + client_activate(focus_cycle_target, FALSE, TRUE, time); t = NULL; first = NULL; @@ -625,7 +629,8 @@ done_cycle: } void focus_directional_cycle(ObDirection dir, gboolean interactive, - gboolean dialog, gboolean done, gboolean cancel) + gboolean dialog, gboolean done, gboolean cancel, + Time time) { static ObClient *first = NULL; ObClient *ft = NULL; @@ -670,7 +675,7 @@ void focus_directional_cycle(ObDirection dir, gboolean interactive, done_cycle: if (done && focus_cycle_target) - client_activate(focus_cycle_target, FALSE, TRUE); + client_activate(focus_cycle_target, FALSE, TRUE, time); first = NULL; focus_cycle_target = NULL;