Hi Carlos, I managed to trigger the same bug, this time when un-shading a window. I couldn't duplicate again, must've just got lucky that time.
cheers Paul 2009/12/27 Carlos R. Mafra <[email protected]> > On Di 8.Dez'09 at 9:42:49 +0800, Paul Harris wrote: > > > > my setup: wheel mouse on background changes the desktop > > > > procedure: > > - minimise a window > > - move mouse over the icon, then twirl the mouse wheel down > > > > if you do it right, the window will restore, but the workspace will > change > > (from A to B), and the window is restored on the new desktop. > > if you press F11 (or middle-mouse, or whatever) to bring up the Window > List, > > you'll see that the restored window is listed as still living on > Workspace A > > when its clearly visible on Workspace B. > > > > if you switch back to the original workspace (A), the restored window > > "follows" you there. > > if you return to the workspace B, the restore window is not there (which > is > > how it should have been from the start). > > > > so, you can make a window restore onto the incorrect workspace. > > The patch below fixes the issue for me and I've just pushed it to 'next'. > Paul, can you test it too? > > I am not sure if there are already some flags in Window Maker saying > "don't do that while I am doing this", so I had to create a global > variable to take care of this issue. > > ---8<------ > From a2133e8e2fa868e6284f78ec2ecb06294b2ee95d Mon Sep 17 00:00:00 2001 > From: Carlos R. Mafra <[email protected]> > Date: Sat, 26 Dec 2009 21:09:10 +0100 > Subject: [PATCH] Do not change workspace during deiconify animation > > Paul Harris reported that using the mouse wheel over a miniwindow > would deiconify it to a different workspace than the original one > where it was iconified. > > This happens because after the window begins to be deiconified the > "residual" mouse wheel scrolling hits the workspace background, and > Window Maker changes workspace with wWorkspaceRelativeChange(). > > But if it all happens fast enough (so the deiconification animation > did not finish yet) the workspace will have changed before the > window reaches its final deiconified destination, leading to > the situation that Paul described in the link below. > > So to avoid this, let's set a 'ignore_wks_change' variable > from wDeiconifyWindow() and make wWorkspaceRelativeChange() respect it. > > Original report: http://lists.windowmaker.info/dev/msg00821.html > --- > src/actions.c | 7 +++++++ > src/workspace.c | 8 ++++++++ > 2 files changed, 15 insertions(+), 0 deletions(-) > > diff --git a/src/actions.c b/src/actions.c > index c308ed0..891c4f2 100644 > --- a/src/actions.c > +++ b/src/actions.c > @@ -49,6 +49,8 @@ > #include "xinerama.h" > > /****** Global Variables ******/ > + > +int ignore_wks_change = 0; > extern Time LastTimestamp; > extern Time LastFocusChange; > > @@ -1109,6 +1111,9 @@ void wIconifyWindow(WWindow * wwin) > > void wDeiconifyWindow(WWindow * wwin) > { > + /* Let's avoid changing workspace while deiconifying */ > + ignore_wks_change = 1; > + > /* we're hiding for show_desktop */ > int netwm_hidden = wwin->flags.net_show_desktop && > wwin->frame->workspace != wwin->screen_ptr->current_workspace; > @@ -1230,6 +1235,8 @@ void wDeiconifyWindow(WWindow * wwin) > /* In case we were shaded and iconified, also unshade */ > if (!netwm_hidden) > wUnshadeWindow(wwin); > + > + ignore_wks_change = 0; > } > > static void hideWindow(WIcon * icon, int icon_x, int icon_y, WWindow * > wwin, int animate) > diff --git a/src/workspace.c b/src/workspace.c > index 1178070..7374633 100644 > --- a/src/workspace.c > +++ b/src/workspace.c > @@ -54,6 +54,7 @@ > #define MAX_SHORTCUT_LENGTH 32 > #define WORKSPACE_NAME_DISPLAY_PADDING 32 > > +extern int ignore_wks_change; > extern WPreferences wPreferences; > extern XContext wWinContext; > extern XContext wVEdgeContext; > @@ -441,6 +442,13 @@ void wWorkspaceRelativeChange(WScreen * scr, int > amount) > { > int w; > > + /* While the deiconify animation is going on the window is > + * still "flying" to its final position and we don't want to > + * change workspace before the animation finishes, otherwise > + * the window will land in the new workspace */ > + if (ignore_wks_change) > + return; > + > w = scr->current_workspace + amount; > > if (amount < 0) { > -- > 1.6.6 > > > -- > To unsubscribe, send mail to [email protected] > . >
