all repos — openbox @ 9a826d8c3d61150ddd72c621aab870d4bfe4594f

openbox fork - make it a bit more like ryudo

fix focus when starting up, especially when replacing another instance of openbox

adds a function event_reset_time() that forces event_time() to look for a new (future) timestamp
Dana Jansens danakj@orodu.net
commit

9a826d8c3d61150ddd72c621aab870d4bfe4594f

parent

ab7673c8167d94bdb93bd9905d6265dd3bf727b3

3 files changed, 27 insertions(+), 12 deletions(-)

jump to
M openbox/event.copenbox/event.c

@@ -98,13 +98,13 @@ static gboolean focus_delay_func(gpointer data);

static gboolean unfocus_delay_func(gpointer data); static void focus_delay_client_dest(ObClient *client, gpointer data); -Time event_last_user_time; +Time event_last_user_time = CurrentTime; /*! The time of the current X event (if it had a timestamp) */ -static Time event_curtime; +static Time event_curtime = CurrentTime; /*! The source time that started the current X event (user-provided, so not to be trusted) */ -static Time event_sourcetime; +static Time event_sourcetime = CurrentTime; /*! The serial of the current X event */ static gulong event_curserial;

@@ -146,10 +146,6 @@ IceAddConnectionWatch(ice_watch, NULL);

#endif client_add_destroy_notify(focus_delay_client_dest, NULL); - - event_curtime = CurrentTime; - event_sourcetime = CurrentTime; - event_last_user_time = CurrentTime; } void event_shutdown(gboolean reconfig)

@@ -2210,7 +2206,7 @@

gboolean find_timestamp(XEvent *e, gpointer data) { const Time t = event_get_timestamp(e); - if (t != CurrentTime) { + if (t > event_curtime) { event_curtime = t; return TRUE; }

@@ -2218,10 +2214,8 @@ else

return FALSE; } -Time event_time(void) +static Time next_time(void) { - if (event_curtime) return event_curtime; - /* Some events don't come with timestamps :( ...but we can get one anyways >:) */

@@ -2240,7 +2234,19 @@ /* Save the time so we don't have to do this again for this event */

return event_curtime; } +Time event_time(void) +{ + if (event_curtime) return event_curtime; + + return next_time(); +} + Time event_source_time(void) { return event_sourcetime; } + +void event_reset_time(void) +{ + next_time(); +}
M openbox/event.hopenbox/event.h

@@ -68,6 +68,11 @@ /*! Time at which the current event occured. If this is not known, this

is a time at or after it, but at or before any other events we will process */ Time event_time(void); + +/*! Force event_time() to skip the current timestamp and look for the next + one. */ +void event_reset_time(void); + /*! A time at which an event happened that caused this current event to be generated. This is a user-provided time and not to be trusted. Returns CurrentTime if there was no source time provided.
M openbox/openbox.copenbox/openbox.c

@@ -213,6 +213,11 @@ cursors[OB_CURSOR_NORTHWEST] = load_cursor("top_left_corner",

XC_top_left_corner); if (screen_annex()) { /* it will be ours! */ + + /* get a timestamp from after taking over as the WM. if we use the + old timestamp to set focus it can fail when replacing another WM. */ + event_reset_time(); + do { ObPrompt *xmlprompt = NULL;

@@ -317,7 +322,6 @@ ObWindow *w;

/* get all the existing windows */ window_manage_all(); - focus_nothing(); /* focus what was focused if a wm was already running */ if (OBT_PROP_GET32(obt_root(ob_screen),