+/* -*- 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"
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);
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()