diff --git a/ChangeLog b/ChangeLog index 8058ded2..fa1f6e3d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -110,6 +110,7 @@ Changes since version 0.80.2: (Marcelo E. Magallon ) - Do not use the disabled clip color for the clip's workspace navigation arrows when the clip is collapsed (it made them look like disabled) +- Fixed the 'focus flicker' problem, seen with GTK2 applications. Changes since version 0.80.1: diff --git a/src/actions.c b/src/actions.c index 2dc0de97..3500a982 100644 --- a/src/actions.c +++ b/src/actions.c @@ -144,15 +144,22 @@ wSetFocusTo(WScreen *scr, WWindow *wwin) old_scr=scr; old_focused=old_scr->focused_window; + /* + * Safeguard: make sure the timestamp is monotonically increasing + * (very unlikely that this will ever be used, still a safeguard) + */ + if (timestamp <= LastFocusChange) + timestamp = LastFocusChange + 1; + LastFocusChange = timestamp; /* * This is a hack, because XSetInputFocus() should have a proper * timestamp instead of CurrentTime but it seems that some times * clients will not receive focus properly that way. - if (ignoreTimestamp) */ - timestamp = CurrentTime; + if (ignoreTimestamp) + timestamp = CurrentTime; if (old_focused) oapp = wApplicationOf(old_focused->main_window); diff --git a/src/event.c b/src/event.c index 3f1b7b4e..484de816 100644 --- a/src/event.c +++ b/src/event.c @@ -403,7 +403,10 @@ handleDeadProcess(void *foo) static void saveTimestamp(XEvent *event) { - LastTimestamp = CurrentTime; + /* + * Never save CurrentTime as LastTimestamp because CurrentTime + * it's not a real timestamp (it's the 0L constant) + */ switch (event->type) { case ButtonRelease: @@ -433,7 +436,7 @@ saveTimestamp(XEvent *event) case SelectionNotify: LastTimestamp = event->xselection.time; #ifdef XDND - wXDNDProcessSelection(event); + wXDNDProcessSelection(event); #endif break; }