Fix floating window stacking. Make menus floating.

SVN revision: 13450
This commit is contained in:
Kim Woelders 2005-02-20 23:08:45 +00:00
parent 877f410439
commit b86418c7eb
4 changed files with 14 additions and 46 deletions

View File

@ -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

View File

@ -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 |

View File

@ -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]);

View File

@ -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;