See the COPYING file for a copy of the GNU General Public License.
*/
+#include "event.h"
#include "debug.h"
+#include "window.h"
#include "openbox.h"
#include "dock.h"
#include "client.h"
#include "group.h"
#include "stacking.h"
#include "extensions.h"
-#include "event.h"
#include <X11/Xlib.h>
#include <X11/keysym.h>
frame_adjust_state(client->frame);
break;
case OB_FRAME_CONTEXT_FRAME:
- /* XXX if doing a 'reconfigure' make sure you kill this timer,
- maybe all timers.. */
- if (config_focus_delay && client == focus_delay_client) {
+ if (client == focus_delay_client) {
ob_main_loop_timeout_remove_data(ob_main_loop,
focus_delay_func,
focus_delay_client);
frame_adjust_state(client->frame);
break;
case OB_FRAME_CONTEXT_FRAME:
- if (!nofocus && client_normal(client) && config_focus_follow) {
+ if (!nofocus && config_focus_follow &&
+ client_normal(client) && client_can_focus(client)) {
if (e->xcrossing.mode == NotifyGrab ||
e->xcrossing.detail == NotifyInferior ||
e->xcrossing.mode == NotifyUngrab)
focus_delay_func,
client, NULL);
focus_delay_client = client;
- } else
+ } else {
client_focus(client);
+ if (config_focus_raise)
+ stacking_raise
+ (CLIENT_AS_WINDOW(focus_delay_client));
+ }
}
}
break;
static gboolean focus_delay_func(gpointer data)
{
- client_focus(focus_delay_client);
+ if (data == focus_delay_client) {
+ client_focus(focus_delay_client);
+ if (config_focus_raise)
+ stacking_raise(CLIENT_AS_WINDOW(focus_delay_client));
+ }
return FALSE; /* no repeat */
}