зеркало из https://github.com/mono/ikvm-fork.git
implements grab() and ungrab()
This commit is contained in:
Родитель
43fd0daf07
Коммит
0513036fe9
|
@ -703,9 +703,13 @@ namespace ikvm.awt
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void grab(java.awt.Window w)
|
public override void grab(java.awt.Window window)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
NetWindowPeer peer = (NetWindowPeer)window.getPeer();
|
||||||
|
if (peer != null)
|
||||||
|
{
|
||||||
|
peer.Grab();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool isDesktopSupported()
|
public override bool isDesktopSupported()
|
||||||
|
@ -723,9 +727,13 @@ namespace ikvm.awt
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void ungrab(java.awt.Window w)
|
public override void ungrab(java.awt.Window window)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
NetWindowPeer peer = (NetWindowPeer)window.getPeer();
|
||||||
|
if (peer != null)
|
||||||
|
{
|
||||||
|
peer.Ungrab(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static new object targetToPeer(object target)
|
internal static new object targetToPeer(object target)
|
||||||
|
@ -1336,7 +1344,7 @@ namespace ikvm.awt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnMouseDown(object sender, MouseEventArgs ev)
|
protected virtual void OnMouseDown(object sender, MouseEventArgs ev)
|
||||||
{
|
{
|
||||||
isMouseClick = false;
|
isMouseClick = false;
|
||||||
isDoubleClick = false;
|
isDoubleClick = false;
|
||||||
|
@ -2646,6 +2654,8 @@ namespace ikvm.awt
|
||||||
private NetWindowPeer modalBlocker;
|
private NetWindowPeer modalBlocker;
|
||||||
private bool modalSavedEnabled;
|
private bool modalSavedEnabled;
|
||||||
|
|
||||||
|
private static NetWindowPeer grabbedWindow;
|
||||||
|
|
||||||
public NetWindowPeer(java.awt.Window window)
|
public NetWindowPeer(java.awt.Window window)
|
||||||
: base(window)
|
: base(window)
|
||||||
{
|
{
|
||||||
|
@ -2729,7 +2739,11 @@ namespace ikvm.awt
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
type = java.awt.@event.WindowEvent.WINDOW_LOST_FOCUS;
|
if (grabbedWindow != null && !grabbedWindow.IsOneOfOwnersOf(this))
|
||||||
|
{
|
||||||
|
grabbedWindow.Ungrab(true);
|
||||||
|
}
|
||||||
|
type = java.awt.@event.WindowEvent.WINDOW_LOST_FOCUS;
|
||||||
}
|
}
|
||||||
|
|
||||||
SendWindowEvent(type, opposite);
|
SendWindowEvent(type, opposite);
|
||||||
|
@ -2853,6 +2867,60 @@ namespace ikvm.awt
|
||||||
NetToolkit.CreateNative(form);
|
NetToolkit.CreateNative(form);
|
||||||
this.control = form;
|
this.control = form;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnMouseDown(object sender, MouseEventArgs ev)
|
||||||
|
{
|
||||||
|
if (grabbedWindow != null && !grabbedWindow.IsOneOfOwnersOf(this))
|
||||||
|
{
|
||||||
|
grabbedWindow.Ungrab(true);
|
||||||
|
}
|
||||||
|
base.OnMouseDown(sender, ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Grab()
|
||||||
|
{
|
||||||
|
//copy from file awt_Windows.cpp
|
||||||
|
if (grabbedWindow != null)
|
||||||
|
{
|
||||||
|
grabbedWindow.Ungrab(true);
|
||||||
|
}
|
||||||
|
grabbedWindow = this;
|
||||||
|
if (Form.ActiveForm == null)
|
||||||
|
{
|
||||||
|
Ungrab(true);
|
||||||
|
}
|
||||||
|
else if (control != Form.ActiveForm)
|
||||||
|
{
|
||||||
|
toFront();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Ungrab(bool doPost)
|
||||||
|
{
|
||||||
|
//copy from file awt_Windows.cpp
|
||||||
|
if (grabbedWindow == this)
|
||||||
|
{
|
||||||
|
if (doPost)
|
||||||
|
{
|
||||||
|
SendEvent(new sun.awt.UngrabEvent(this.target));
|
||||||
|
}
|
||||||
|
grabbedWindow = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsOneOfOwnersOf(NetWindowPeer window)
|
||||||
|
{
|
||||||
|
while (window != null)
|
||||||
|
{
|
||||||
|
if (window == this)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
java.awt.Container parent = window.target.getParent();
|
||||||
|
window = parent == null ? null : (NetWindowPeer)parent.getPeer();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class NetFramePeer : NetWindowPeer, FramePeer
|
class NetFramePeer : NetWindowPeer, FramePeer
|
||||||
|
|
Загрузка…
Ссылка в новой задаче