tempExtents[3].Free(null);
delete tempExtents;
}
+
+ delete controller;
}
//#if !defined(ECERE_VANILLA)
if(rootWindow.is3D)
{
- x += rootWindow.parent.clientStart.x;
- y += rootWindow.parent.clientStart.y;
+ int dx = rootWindow.parent.parent.clientStart.x;
+ int dy = rootWindow.parent.parent.clientStart.y;
+ if(!rootWindow.parent.nativeDecorations)
+ {
+ dx += rootWindow.parent.clientStart.x;
+ dy += rootWindow.parent.clientStart.y;
+ }
+ x += dx;
+ y += dy;
+
/*
- mox.left += rootWindow.parent.clientStart.x;
- mox.top += rootWindow.parent.clientStart.y;
- mox.right += rootWindow.parent.clientStart.x;
- mox.bottom += rootWindow.parent.clientStart.y;
+ mox.left += dx;
+ mox.top += dy;
+ mox.right += dx;
+ mox.bottom += dy;
*/
}
}
y -= rootWindow.absPosition.y;
if(rootWindow.is3D)
{
- x += rootWindow.parent.clientStart.x;
- y += rootWindow.parent.clientStart.y;
+ int dx = rootWindow.parent.parent.clientStart.x;
+ int dy = rootWindow.parent.parent.clientStart.y;
+ if(!rootWindow.parent.nativeDecorations)
+ {
+ dx += rootWindow.parent.clientStart.x;
+ dy += rootWindow.parent.clientStart.y;
+ }
+ x += dx;
+ y += dy;
+
/*
- mox.left += rootWindow.parent.clientStart.x;
- mox.top += rootWindow.parent.clientStart.y;
- mox.right += rootWindow.parent.clientStart.x;
- mox.bottom += rootWindow.parent.clientStart.y;
+ mox.left += dx;
+ mox.top += dy;
+ mox.right += dx;
+ mox.bottom += dy;
*/
}
}
if(guiApp.windowCaptured || trueWindow)
{
Window prevWindow = guiApp.prevWindow;
- if(guiApp.prevWindow && trueWindow != guiApp.prevWindow)
+ List<Window> overWindows = guiApp.overWindows;
+ Iterator<Window> it { overWindows };
+
+ while(it.Next())
+ {
+ Window w = it.data;
+ if(trueWindow != w && !trueWindow.IsDescendantOf(w))
+ {
+ it.pointer = null;
+ result = w.OnMouseLeave(*mods);
+ if(!result) break;
+ overWindows.TakeOut(w);
+ }
+ }
+
+ if(result && guiApp.prevWindow && trueWindow != guiApp.prevWindow)
{
guiApp.prevWindow.mouseInside = false;
guiApp.prevWindow = null;
- // Eventually fix this not to include captured?
- if(!trueWindow.IsDescendantOf(prevWindow) && !prevWindow.OnMouseLeave(*mods))
- result = false;
+ if(result)
+ {
+ if(trueWindow.IsDescendantOf(prevWindow))
+ {
+ if(!overWindows.Find(prevWindow))
+ overWindows.Add(prevWindow);
+ }
+ // Eventually fix this not to include captured?
+ else if(!prevWindow.OnMouseLeave(*mods))
+ result = false;
+ }
}
if(result && trueWindow && !trueWindow.destroyed/* && trueWindow == window*/)
{
}
}
if(trueWindow && trueWindow._refCount > 1 && !trueWindow.destroyed)
+ {
+ for(w : guiApp.overWindows; w == trueWindow)
+ {
+ OnMouseLeave(0);
+ guiApp.overWindows.TakeOut(w);
+ break;
+ }
guiApp.prevWindow = trueWindow;
+ }
else
guiApp.prevWindow = null;
}
LogErrorCode(graphicsLoadingFailed, _class.name);
// Do this here to avoid problems on Windows
- if(stateBackup == maximized)
+ if(rootWindow == this && parent && stateBackup == maximized)
property::state = maximized;
return result;
}
guiApp.prevWindow = null;
OnMouseLeave(0);
}
+ else
+ {
+ for(w : guiApp.overWindows; w == this)
+ {
+ OnMouseLeave(0);
+ guiApp.overWindows.TakeOut(w);
+ break;
+ }
+ }
if(guiApp.caretOwner == this)
{
guiApp.interfaceDriver.SetCaret(0,0,0);
if(child.cycle && !child.style.nonClient && child.style.isActiveClient && child.visible)
{
DataRow row = listBox.AddRow();
- row.tag = (int64)child;
+ row.tag = (int64)(intptr)child;
child.FigureCaption(caption);
row.SetData(null, caption);
}
/*if(rootWindow == this)
guiApp.interfaceDriver.ActivateRootWindow(this);
else*/
- if(creationActivation == activate)
+ if(creationActivation == activate && guiApp.desktop.active)
ActivateEx(true, false, true, true, null, null);
- else if(creationActivation == flash)
- Flash();
+ else if(creationActivation == activate || creationActivation == flash)
+ {
+ MakeActive();
+ if(this == rootWindow)
+ Flash();
+ }
}
if(!destroyed)
if(guiApp.desktop.active)
Activate();
else if(!active)
- Flash();
+ {
+ MakeActive();
+ if(this == rootWindow)
+ Flash();
+ }
}
void Deactivate(void)
bool MenuWindowWindows(MenuItem selection, Modifiers mods)
{
WindowList dialog { master = this };
- Window document = (Window)dialog.Modal();
+ Window document = (Window)(intptr)dialog.Modal();
if(document)
{
if(activeChild.state == maximized)
firewatchers font;
- if(value.rootWindow && value.rootWindow.display && rootWindow)
+ if(value.rootWindow && value.rootWindow.display && rootWindow && created)
{
bool reloadGraphics = (oldParent.rootWindow == oldParent && value.rootWindow) || (!value.rootWindow && rootWindow == this) ||
(value.rootWindow.display && value.rootWindow.display.displaySystem != rootWindow.display.displaySystem);
if(reloadGraphics)
UnloadGraphics(false);
- if(created)
- SetupDisplay();
+ SetupDisplay();
if(reloadGraphics)
LoadGraphics(false, false);
if(true || !parent.activeChild)
ActivateEx(true, false, true, true, null, null);
*/
- if(creationActivation == activate)
+ if(creationActivation == activate && guiApp.desktop.active)
ActivateEx(true, false, true, true, null, null);
- else if(creationActivation == flash && !object)
- Flash();
+ else if((creationActivation == activate || creationActivation == flash) && !object)
+ {
+ MakeActive();
+ if(this == rootWindow)
+ Flash();
+ }
//SetVisibility(!parent.style.hidden && (style.hidden ? false : true));
Update(null);