This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository e16.

View the commit online.

commit f384e2adc08829af7564de98a2ead705d759d5de
Author: Kim Woelders <[email protected]>
AuthorDate: Mon Mar 20 13:49:43 2023 +0100

    desks: Prevent nested desk switches
    
    Using the mouse wheel (maybe also the keyboard?) it was possible to
    start an animated desk switch while one was already in progress.
    This could cause some incorrect state and window placement.
    
    Also add a few debug messages.
---
 src/desktops.c | 32 +++++++++++++++++++++++---------
 1 file changed, 23 insertions(+), 9 deletions(-)

diff --git a/src/desktops.c b/src/desktops.c
index 726f9dcc..082beadf 100644
--- a/src/desktops.c
+++ b/src/desktops.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various contributors
- * Copyright (C) 2004-2022 Kim Woelders
+ * Copyright (C) 2004-2023 Kim Woelders
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
@@ -78,6 +78,7 @@ typedef struct {
    char               *names[ENLIGHTENMENT_CONF_NUM_DESKTOPS];
    int                 drag_x0, drag_y0;
    unsigned int        prev_num;
+   Animator           *anim_switch;
    Animator           *anim_slide;
 } Desktops;
 
@@ -1231,6 +1232,8 @@ _doDeskGotoEndDeferred(void *data __UNUSED__)
     * initial area but not on the target area. */
    EwinsMovePinnedToDesk(desks.current);
 
+   desks.anim_switch = NULL;
+
    return 0;
 }
 
@@ -1278,6 +1281,9 @@ _DeskGotoRun(EObj * eo, int run, void *state)
    x = (run * xy[0]) >> 10;
    y = (run * xy[1]) >> 10;
 
+   if (EDebug(EDBUG_TYPE_DESKS))
+      Eprintf("%s: dx,y=%d,%d\n", __func__, x, y);
+
    EobjMove(eo, x, y);
 
    if (run == 0)
@@ -1295,6 +1301,9 @@ _DeskGotoRun(EObj * eo, int run, void *state)
 void
 DeskGoto(Desk * dsk)
 {
+   if (desks.anim_switch)
+      return;
+
    if (!dsk || dsk == desks.previous)
       return;
 
@@ -1332,16 +1341,20 @@ DeskGoto(Desk * dsk)
 		  _DeskMove(dsk, x, y);
 		  int                 xy[3] = { x, y, 0 };
 		  _DeskEnter(dsk);
-		  AnimatorAdd(EoObj(dsk), ANIM_SLIDE, _DeskGotoRun,
-			      1000000 / Conf.desks.slidespeed,
-			      0, sizeof(xy), xy);
+		  desks.anim_switch = AnimatorAdd(EoObj(dsk), ANIM_SLIDE,
+						  _DeskGotoRun,
+						  1000000 /
+						  Conf.desks.slidespeed, 0,
+						  sizeof(xy), xy);
 	       }
 	     else
 	       {
 		  int                 xy[3] = { EoGetX(dsk), EoGetY(dsk), 1 };
-		  AnimatorAdd(EoObj(dsk), ANIM_SLIDE, _DeskGotoRun,
-			      1000000 / Conf.desks.slidespeed,
-			      0, sizeof(xy), xy);
+		  desks.anim_switch = AnimatorAdd(EoObj(dsk), ANIM_SLIDE,
+						  _DeskGotoRun,
+						  1000000 /
+						  Conf.desks.slidespeed, 0,
+						  sizeof(xy), xy);
 	       }
 	     return;
 	  }
@@ -1858,6 +1871,9 @@ _DeskCurrentGotoAreaRun(EObj * eo __UNUSED__, int run, void *state)
    dx = (run * sad->slide_dx) >> 10;
    dy = (run * sad->slide_dy) >> 10;
 
+   if (EDebug(EDBUG_TYPE_DESKS))
+      Eprintf("%s: dx,y=%d,%d\n", __func__, dx, dy);
+
    for (i = 0; i < sad->n_ewins_slide; i++)
      {
 	ewin = sad->ewins_slide[i];
@@ -2396,8 +2412,6 @@ _DesksInit(void)
    if (Conf.desks.edge_flip_resistance <= 0)
       Conf.desks.edge_flip_mode = EDGE_FLIP_OFF;
 
-   desks.previous = NULL;
-
    _DesksSetNames(NULL, Conf.desks.names);
 
    for (i = 0; i < Conf.desks.num; i++)

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to