Fix floating window stacking. Make menus floating.
SVN revision: 13450
This commit is contained in:
parent
877f410439
commit
b86418c7eb
13
src/eobj.c
13
src/eobj.c
|
@ -54,7 +54,7 @@ EobjSetDesk(EObj * eo, int desk)
|
|||
eo->desk = desk;
|
||||
break;
|
||||
case EOBJ_TYPE_EWIN:
|
||||
if (eo->sticky || eo->desk < 0)
|
||||
if (eo->sticky || eo->floating || eo->desk < 0)
|
||||
eo->desk = DesksGetCurrent();
|
||||
else
|
||||
eo->desk = desk % Conf.desks.num;
|
||||
|
@ -91,12 +91,6 @@ EobjSetLayer(EObj * eo, int layer)
|
|||
* TBD: Override redirect
|
||||
*/
|
||||
|
||||
if (eo->floating)
|
||||
{
|
||||
eo->ilayer = 500;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (eo->type)
|
||||
{
|
||||
case EOBJ_TYPE_EWIN:
|
||||
|
@ -120,6 +114,11 @@ EobjSetLayer(EObj * eo, int layer)
|
|||
eo->ilayer = 10 * eo->layer;
|
||||
break;
|
||||
}
|
||||
|
||||
if (eo->floating)
|
||||
eo->ilayer |= 512;
|
||||
else
|
||||
eo->ilayer &= ~512;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
39
src/menus.c
39
src/menus.c
|
@ -226,6 +226,8 @@ MenuEwinInit(EWin * ewin, void *ptr)
|
|||
ewin->Refresh = MenuEwinRefresh;
|
||||
ewin->Close = MenuEwinClose;
|
||||
EoSetOpacity(ewin, OpacityExt(Conf.menus.opacity));
|
||||
EoSetSticky(ewin, 1);
|
||||
EoSetFloating(ewin, 1);
|
||||
}
|
||||
|
||||
static void MenuShowMasker(Menu * m);
|
||||
|
@ -313,39 +315,10 @@ MenuShow(Menu * m, char noshow)
|
|||
}
|
||||
}
|
||||
|
||||
if ((Mode.x >= 0) && (Mode.y >= 0))
|
||||
{
|
||||
if (Conf.menus.onscreen)
|
||||
EMoveWindow(m->win, wx, wy);
|
||||
else
|
||||
EMoveWindow(m->win, Mode.x - x - (w / 2), Mode.y - y - (h / 2));
|
||||
}
|
||||
else if ((Mode.x >= 0) && (Mode.y < 0))
|
||||
{
|
||||
if (((-Mode.y) + (int)mh) > (int)VRoot.h)
|
||||
Mode.y = -((-Mode.y) - Mode.context_h - mh);
|
||||
if (Conf.menus.onscreen)
|
||||
EMoveWindow(m->win, wx, -Mode.y);
|
||||
else
|
||||
EMoveWindow(m->win, Mode.x - x - (w / 2), -Mode.y);
|
||||
}
|
||||
else if ((Mode.x < 0) && (Mode.y >= 0))
|
||||
{
|
||||
if (((-Mode.x) + (int)mw) > (int)VRoot.w)
|
||||
Mode.x = -((-Mode.x) - Mode.context_w - mw);
|
||||
if (Conf.menus.onscreen)
|
||||
EMoveWindow(m->win, -Mode.x, wy);
|
||||
else
|
||||
EMoveWindow(m->win, -Mode.x, Mode.y - y - (h / 2));
|
||||
}
|
||||
if (Conf.menus.onscreen)
|
||||
EMoveWindow(m->win, wx, wy);
|
||||
else
|
||||
{
|
||||
if (((-Mode.x) + (int)mw) > (int)VRoot.w)
|
||||
Mode.x = -((-Mode.x) - Mode.context_w - mw);
|
||||
if (((-Mode.y) + (int)mh) > (int)VRoot.h)
|
||||
Mode.y = -((-Mode.y) - Mode.context_h - mh);
|
||||
EMoveWindow(m->win, -Mode.x, -Mode.y);
|
||||
}
|
||||
EMoveWindow(m->win, Mode.x - x - (w / 2), Mode.y - y - (h / 2));
|
||||
|
||||
ewin = AddInternalToFamily(m->win, m->style->border_name, EWIN_TYPE_MENU, m,
|
||||
MenuEwinInit);
|
||||
|
@ -359,6 +332,7 @@ MenuShow(Menu * m, char noshow)
|
|||
EwinInstantShade(ewin, 0);
|
||||
ICCCM_Cmap(NULL);
|
||||
MoveEwin(ewin, EoGetX(ewin), EoGetY(ewin));
|
||||
FloatEwinAt(ewin, EoGetX(ewin), EoGetY(ewin));
|
||||
if (!noshow)
|
||||
{
|
||||
ShowEwin(ewin);
|
||||
|
@ -988,6 +962,7 @@ MenuShowMasker(Menu * m)
|
|||
eo = EobjRegister(Mode_menus.cover_win, EOBJ_TYPE_OTHER);
|
||||
EobjSetDesk(eo, EoGetDesk(ewin));
|
||||
EobjSetLayer(eo, 20);
|
||||
EobjSetFloating(eo, 1);
|
||||
EobjListStackLower(eo);
|
||||
ESelectInput(Mode_menus.cover_win,
|
||||
ButtonPressMask | ButtonReleaseMask | EnterWindowMask |
|
||||
|
|
|
@ -70,12 +70,6 @@ ActionMoveStart(EWin * ewin, int grab, char constrained, int nogroup)
|
|||
for (i = 0; i < num; i++)
|
||||
{
|
||||
FloatEwinAt(gwins[i], EoGetX(gwins[i]), EoGetY(gwins[i]));
|
||||
#if 0 /* Will never get here */
|
||||
if (Mode.mode == MODE_MOVE)
|
||||
DrawEwinShape(gwins[i], Conf.movres.mode_move, EoGetX(gwins[i]),
|
||||
EoGetY(gwins[i]), gwins[i]->client.w,
|
||||
gwins[i]->client.h, 0);
|
||||
#endif
|
||||
/* This shouldn't be necessary ... will figure it out some other time */
|
||||
gwins[i]->shape_x = EoGetX(gwins[i]);
|
||||
gwins[i]->shape_y = EoGetY(gwins[i]);
|
||||
|
|
|
@ -382,7 +382,7 @@ EobjListStackGetForDesk(int *num, int desk)
|
|||
for (i = j = 0; i < ewl->nwins; i++)
|
||||
{
|
||||
eo = ewl->list[i];
|
||||
if (eo->desk != desk)
|
||||
if (eo->desk != desk && !eo->sticky && !eo->floating)
|
||||
continue;
|
||||
|
||||
lst[j++] = eo;
|
||||
|
|
Loading…
Reference in New Issue