Fix action processing at end of window move.
Don't send events to non-existing buttonproxy window. SVN revision: 8387
This commit is contained in:
parent
d0dee83646
commit
8c61ba10de
3
src/E.h
3
src/E.h
|
@ -1318,6 +1318,7 @@ typedef struct
|
|||
char nogroup;
|
||||
char keybinds_changed;
|
||||
char firsttime;
|
||||
Window button_proxy_win;
|
||||
}
|
||||
EMode;
|
||||
|
||||
|
@ -1904,6 +1905,7 @@ void RemoveActionClass(ActionClass * ActionToRemove);
|
|||
void AddToAction(Action * act, int id, void *params);
|
||||
void AddAction(ActionClass * a, Action * act);
|
||||
int EventAclass(XEvent * ev, ActionClass * a);
|
||||
void doActionEnd(void);
|
||||
int spawnMenu(void *params);
|
||||
int hideMenu(void *params);
|
||||
int doNothing(void *params);
|
||||
|
@ -2833,7 +2835,6 @@ extern Desktops desks;
|
|||
extern Window init_win1;
|
||||
extern Window init_win2;
|
||||
extern Window init_win_ext;
|
||||
extern Window bpress_win;
|
||||
extern int deskorder[ENLIGHTENMENT_CONF_NUM_DESKTOPS];
|
||||
|
||||
#define FILEPATH_LEN_MAX 4096
|
||||
|
|
|
@ -1239,6 +1239,55 @@ doMoveEnd(void *params)
|
|||
EDBUG_RETURN(0);
|
||||
}
|
||||
|
||||
void
|
||||
doActionEnd(void)
|
||||
{
|
||||
EWin *ewin;
|
||||
int i, num;
|
||||
EWin **gwins;
|
||||
|
||||
switch (mode.mode)
|
||||
{
|
||||
case MODE_RESIZE:
|
||||
case MODE_RESIZE_H:
|
||||
case MODE_RESIZE_V:
|
||||
doResizeEnd(NULL);
|
||||
mode.action_inhibit = 1;
|
||||
break;
|
||||
case MODE_MOVE:
|
||||
ewin = mode.ewin;
|
||||
if (ewin)
|
||||
{
|
||||
gwins =
|
||||
ListWinGroupMembersForEwin(ewin, ACTION_MOVE, mode.nogroup,
|
||||
&num);
|
||||
if ((conf.movemode == 0) && (mode.mode == MODE_MOVE))
|
||||
for (i = 0; i < num; i++)
|
||||
DetermineEwinFloat(gwins[i], 0, 0);
|
||||
Efree(gwins);
|
||||
}
|
||||
doMoveEnd(NULL);
|
||||
if (mode.have_place_grab)
|
||||
{
|
||||
mode.have_place_grab = 0;
|
||||
XUngrabPointer(disp, CurrentTime);
|
||||
}
|
||||
mode.ewin = NULL;
|
||||
mode.action_inhibit = 1;
|
||||
break;
|
||||
case MODE_DESKDRAG:
|
||||
mode.mode = MODE_NONE;
|
||||
break;
|
||||
case MODE_BUTTONDRAG:
|
||||
if (!mode.button_move_pending)
|
||||
mode.action_inhibit = 1;
|
||||
doDragButtonEnd(NULL);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
doRaise(void *params)
|
||||
{
|
||||
|
|
|
@ -95,6 +95,14 @@ TooltipsHandleEvent(void)
|
|||
DoIn("TOOLTIP_TIMEOUT", conf.tooltips.tiptime, ToolTipTimeout, 0, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
ButtonProxySendEvent(XEvent * ev)
|
||||
{
|
||||
if (mode.button_proxy_win)
|
||||
XSendEvent(disp, mode.button_proxy_win, False, SubstructureNotifyMask,
|
||||
ev);
|
||||
}
|
||||
|
||||
void
|
||||
HandleClientMessage(XEvent * ev)
|
||||
{
|
||||
|
@ -1343,7 +1351,7 @@ HandleMouseDown(XEvent * ev)
|
|||
if (ac)
|
||||
{
|
||||
if (!EventAclass(ev, ac))
|
||||
XSendEvent(disp, bpress_win, False, SubstructureNotifyMask, ev);
|
||||
ButtonProxySendEvent(ev);
|
||||
}
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
@ -1415,9 +1423,7 @@ HandleMouseUp(XEvent * ev)
|
|||
{
|
||||
Window win = ev->xbutton.window;
|
||||
EWin *ewin;
|
||||
int i, num;
|
||||
Slideout *pslideout;
|
||||
EWin **gwins;
|
||||
|
||||
EDBUG(5, "HandleMouseUp");
|
||||
|
||||
|
@ -1461,57 +1467,20 @@ HandleMouseUp(XEvent * ev)
|
|||
}
|
||||
#endif
|
||||
|
||||
switch (mode.mode)
|
||||
doActionEnd();
|
||||
if (mode.place)
|
||||
{
|
||||
case MODE_RESIZE:
|
||||
case MODE_RESIZE_H:
|
||||
case MODE_RESIZE_V:
|
||||
doResizeEnd(NULL);
|
||||
mode.action_inhibit = 1;
|
||||
break;
|
||||
case MODE_MOVE:
|
||||
ewin = mode.ewin;
|
||||
if (ewin)
|
||||
{
|
||||
gwins =
|
||||
ListWinGroupMembersForEwin(ewin, ACTION_MOVE, mode.nogroup,
|
||||
&num);
|
||||
if ((conf.movemode == 0) && (mode.mode == MODE_MOVE))
|
||||
for (i = 0; i < num; i++)
|
||||
DetermineEwinFloat(gwins[i], 0, 0);
|
||||
Efree(gwins);
|
||||
}
|
||||
doMoveEnd(NULL);
|
||||
if (mode.have_place_grab)
|
||||
{
|
||||
mode.have_place_grab = 0;
|
||||
XUngrabPointer(disp, CurrentTime);
|
||||
}
|
||||
mode.ewin = NULL;
|
||||
mode.action_inhibit = 1;
|
||||
if (mode.place)
|
||||
{
|
||||
mode.place = 0;
|
||||
goto exit;
|
||||
}
|
||||
break;
|
||||
case MODE_DESKDRAG:
|
||||
mode.mode = MODE_NONE;
|
||||
break;
|
||||
case MODE_BUTTONDRAG:
|
||||
if (!mode.button_move_pending)
|
||||
mode.action_inhibit = 1;
|
||||
doDragButtonEnd(NULL);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
mode.place = 0;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (sentpress)
|
||||
{
|
||||
/* We never get here? */
|
||||
sentpress = 0;
|
||||
XSendEvent(disp, bpress_win, False, SubstructureNotifyMask, ev);
|
||||
ButtonProxySendEvent(ev);
|
||||
}
|
||||
|
||||
mode.context_win = last_bpress;
|
||||
|
||||
ewin = SlideoutsGetContextEwin();
|
||||
|
@ -1525,10 +1494,13 @@ HandleMouseUp(XEvent * ev)
|
|||
mode.justclicked = 1;
|
||||
}
|
||||
|
||||
if (MenusEventMouseUp(ev))
|
||||
if (!clickmenu && BordersEventMouseUp(ev))
|
||||
goto exit;
|
||||
|
||||
if (!clickmenu && BordersEventMouseUp(ev))
|
||||
if (mode.action_inhibit)
|
||||
goto exit;
|
||||
|
||||
if (MenusEventMouseUp(ev))
|
||||
goto exit;
|
||||
|
||||
if (ButtonsEventMouseUp(ev))
|
||||
|
|
|
@ -55,7 +55,6 @@ Desktops desks;
|
|||
Window init_win1 = 0;
|
||||
Window init_win2 = 0;
|
||||
Window init_win_ext = 0;
|
||||
Window bpress_win = 0;
|
||||
int deskorder[ENLIGHTENMENT_CONF_NUM_DESKTOPS];
|
||||
char themepath[FILEPATH_LEN_MAX];
|
||||
char themename[FILEPATH_LEN_MAX];
|
||||
|
|
|
@ -770,11 +770,11 @@ GNOME_SetHints(Window win_wm_check)
|
|||
CARD32 val;
|
||||
|
||||
atom_set = XInternAtom(disp, "_WIN_DESKTOP_BUTTON_PROXY", False);
|
||||
bpress_win = ECreateWindow(root.win, -80, -80, 24, 24, 0);
|
||||
val = bpress_win;
|
||||
mode.button_proxy_win = ECreateWindow(root.win, -80, -80, 24, 24, 0);
|
||||
val = mode.button_proxy_win;
|
||||
XChangeProperty(disp, root.win, atom_set, XA_CARDINAL, 32,
|
||||
PropModeReplace, (unsigned char *)&val, 1);
|
||||
XChangeProperty(disp, bpress_win, atom_set, XA_CARDINAL, 32,
|
||||
XChangeProperty(disp, mode.button_proxy_win, atom_set, XA_CARDINAL, 32,
|
||||
PropModeReplace, (unsigned char *)&val, 1);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue