Fix potential crash during manual window placement.
Test case: Run while true; do xterm -e false; done and move pointer. Noted by Daniel Manjarres. SVN revision: 59977
This commit is contained in:
parent
b9538622d8
commit
f6346e6019
|
@ -65,6 +65,7 @@ static void EwinHandleEventsToplevel(Win win, XEvent * ev, void *prm);
|
|||
static void EwinHandleEventsContainer(Win win, XEvent * ev, void *prm);
|
||||
static void EwinHandleEventsClient(Win win, XEvent * ev, void *prm);
|
||||
|
||||
static void EwinUnmap1(EWin * ewin);
|
||||
static void EwinUnmap2(EWin * ewin);
|
||||
|
||||
Window
|
||||
|
@ -385,6 +386,8 @@ EwinDestroy(EWin * ewin)
|
|||
if (!ewin)
|
||||
return;
|
||||
|
||||
EwinUnmap1(ewin);
|
||||
|
||||
if (ewin->state.state == EWIN_STATE_MAPPED)
|
||||
EwinUnmap2(ewin);
|
||||
|
||||
|
|
|
@ -213,6 +213,7 @@ _MoveResizeMoveEnd(EWin * ewin)
|
|||
Mode.mode = MODE_NONE;
|
||||
Mode.move.swap = 0;
|
||||
Mode.place.doing_manual = 0;
|
||||
Mode_mr.ewin = NULL;
|
||||
|
||||
if (Mode_mr.grab_server)
|
||||
{
|
||||
|
@ -490,6 +491,7 @@ _MoveResizeResizeEnd(EWin * ewin)
|
|||
ESync(ESYNC_MOVRES);
|
||||
|
||||
done:
|
||||
Mode_mr.ewin = NULL;
|
||||
if (Mode_mr.grab_server)
|
||||
{
|
||||
EUngrabServer();
|
||||
|
@ -929,6 +931,8 @@ MoveResizeEnd(EWin * ewin)
|
|||
static void
|
||||
_MoveResizeEventHandler(Win win __UNUSED__, XEvent * ev, void *prm __UNUSED__)
|
||||
{
|
||||
EWin *ewin;
|
||||
|
||||
#if 0
|
||||
Eprintf("%s: type=%2d win=%#lx\n", __func__, ev->type, ev->xany.window);
|
||||
#endif
|
||||
|
@ -944,9 +948,11 @@ _MoveResizeEventHandler(Win win __UNUSED__, XEvent * ev, void *prm __UNUSED__)
|
|||
break;
|
||||
#endif
|
||||
case ButtonRelease:
|
||||
MoveResizeEnd(NULL);
|
||||
if (Mode_mr.ewin)
|
||||
BorderCheckState(Mode_mr.ewin, ev);
|
||||
ewin = Mode_mr.ewin;
|
||||
if (!ewin)
|
||||
break;
|
||||
MoveResizeEnd(ewin);
|
||||
BorderCheckState(ewin, ev);
|
||||
break;
|
||||
case MotionNotify:
|
||||
_MoveResizeHandleMotion();
|
||||
|
|
Loading…
Reference in New Issue