X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Ffocus.c;h=36ccbea30281fe820bab29e3b26282511249fcbd;hb=9960ef2ff99a8d39b35518e178a624b19f758525;hp=2582736bb59ac24ae485622dbc4ef05422410d64;hpb=4ccc4c5ed7d5cffc4bf733191f7bc30fbbf069c8;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index 2582736b..36ccbea3 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -1,3 +1,21 @@ +/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- + + focus.c for the Openbox window manager + Copyright (c) 2003 Ben Jansens + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + See the COPYING file for a copy of the GNU General Public License. +*/ + #include "debug.h" #include "event.h" #include "openbox.h" @@ -73,7 +91,7 @@ void focus_set_client(ObClient *client) screen_install_colormap(focus_client, FALSE); screen_install_colormap(client, TRUE); - if (!client) { + if (client == NULL) { /* when nothing will be focused, send focus to the backup target */ XSetInputFocus(ob_display, screen_support_win, RevertToPointerRoot, event_lasttime); @@ -87,22 +105,16 @@ void focus_set_client(ObClient *client) old = focus_client; focus_client = client; - if (old) { - /* focus state can affect the stacking layer */ - client_calc_layer(old); - } - if (client) { - /* focus state can affect the stacking layer */ - client_calc_layer(client); - - /* move to the top of the list */ + /* move to the top of the list */ + if (client != NULL) push_to_top(client); - } - /* set the NET_ACTIVE_WINDOW hint */ - active = client ? client->window : None; - PROP_SET32(RootWindow(ob_display, ob_screen), - net_active_window, window, active); + /* set the NET_ACTIVE_WINDOW hint, but preserve it on shutdown */ + if (ob_state() != OB_STATE_EXITING) { + active = client ? client->window : None; + PROP_SET32(RootWindow(ob_display, ob_screen), + net_active_window, window, active); + } } static gboolean focus_under_pointer()