X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fevent.c;h=c74e15ae08a8e3bd7ae96da0c4519df99054b012;hb=80a6f06c0a3d6de2c7d94066c5a9764b97a600af;hp=1efccdbed85bcdeb2ecef6c81a52197d0be57b94;hpb=7b7f158088fa548791922b7cf133e507d3873656;p=chaz%2Fopenbox diff --git a/openbox/event.c b/openbox/event.c index 1efccdbe..c74e15ae 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -1,7 +1,7 @@ /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- event.c for the Openbox window manager - Copyright (c) 2004 Mikael Magnusson + Copyright (c) 2006 Mikael Magnusson Copyright (c) 2003 Ben Jansens This program is free software; you can redistribute it and/or modify @@ -86,7 +86,12 @@ static gboolean menu_hide_delay_func(gpointer data); (e)->xfocus.detail == NotifyAncestor || \ (e)->xfocus.detail > NotifyNonlinearVirtual) -Time event_lasttime = 0; +/* The most recent time at which an event with a timestamp occured. */ +static Time event_lasttime = 0; +/* The time for the current event being processed + (it's the event_lasttime for events without times, if this is a bug then + use CurrentTime instead, but it seems ok) */ +Time event_curtime = CurrentTime; /*! The value of the mask for the NumLock modifier */ guint NumLockMask; @@ -251,8 +256,14 @@ static void event_set_lasttime(XEvent *e) break; } - if (t > event_lasttime) + if (t > event_lasttime) { event_lasttime = t; + event_curtime = event_lasttime; + } else if (t == 0) { + event_curtime = event_lasttime; + } else { + event_curtime = t; + } } #define STRIP_MODS(s) \ @@ -919,7 +930,7 @@ static void event_handle_client(ObClient *client, XEvent *e) it can happen now when the window is on another desktop, but we still don't want it! */ - client_activate(client, FALSE); + client_activate(client, FALSE, TRUE); break; case ClientMessage: /* validate cuz we query stuff off the client here */ @@ -973,8 +984,15 @@ static void event_handle_client(ObClient *client, XEvent *e) ob_debug("net_close_window for 0x%lx\n", client->window); client_close(client); } else if (msgtype == prop_atoms.net_active_window) { - ob_debug("net_active_window for 0x%lx\n", client->window); - client_activate(client, FALSE); + ob_debug("net_active_window for 0x%lx source=%s\n", + client->window, + (e->xclient.data.l[0] == 0 ? "unknown" : + (e->xclient.data.l[0] == 1 ? "application" : + (e->xclient.data.l[0] == 2 ? "user" : "INVALID")))); + /* XXX make use of data.l[1] and [2] ! */ + client_activate(client, FALSE, + (e->xclient.data.l[0] == 0 || + e->xclient.data.l[0] == 2)); } else if (msgtype == prop_atoms.net_wm_moveresize) { ob_debug("net_wm_moveresize for 0x%lx\n", client->window); if ((Atom)e->xclient.data.l[2] == @@ -1287,7 +1305,8 @@ static gboolean focus_delay_func(gpointer data) static void focus_delay_client_dest(ObClient *client, gpointer data) { - ob_main_loop_timeout_remove_data(ob_main_loop, focus_delay_func, client, TRUE); + ob_main_loop_timeout_remove_data(ob_main_loop, focus_delay_func, + client, TRUE); } static void event_client_dest(ObClient *client, gpointer data)