diff options
author | Silenio Quarti <silenio> | 2008-06-20 16:29:24 +0000 |
---|---|---|
committer | Silenio Quarti <silenio> | 2008-06-20 16:29:24 +0000 |
commit | 28e1a4fa3eaea46bfca36ae1446d141125e40ce9 (patch) | |
tree | 965e92043f266b7b28d3d1dd2f7a756b7ecb2367 /bundles/org.eclipse.swt/Eclipse SWT/cocoa | |
parent | ddc8393d2aa91eaf0734be78de695b74ae5eae2a (diff) | |
download | eclipse.platform.swt-28e1a4fa3eaea46bfca36ae1446d141125e40ce9.tar.gz eclipse.platform.swt-28e1a4fa3eaea46bfca36ae1446d141125e40ce9.tar.xz eclipse.platform.swt-28e1a4fa3eaea46bfca36ae1446d141125e40ce9.zip |
setParent() and stack trace in findControl()
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/cocoa')
4 files changed, 67 insertions, 71 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java index 513ab4341b..504733a6ec 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java @@ -1793,7 +1793,6 @@ void releaseHandle () { } void releaseParent () { -// setVisible (topHandle (), false); parent.removeControl (this); } @@ -2708,10 +2707,11 @@ public boolean setParent (Composite parent) { Menu [] menus = oldShell.findMenus (this); fixChildren (newShell, oldShell, newDecorations, oldDecorations, menus); } -// int topHandle = topHandle (); -// OS.HIViewAddSubview (parent.handle, topHandle); -// OS.HIViewSetVisible (topHandle, (state & HIDDEN) == 0); -// OS.HIViewSetZOrder (topHandle, OS.kHIViewZOrderBelow, 0); + NSView topView = topView (); + topView.retain(); + topView.removeFromSuperview(); + parent.contentView().addSubview_positioned_relativeTo_(topView, OS.NSWindowBelow, null); + topView.release(); this.parent = parent; return true; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Decorations.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Decorations.java index dbcaccd9b3..07785e5b5c 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Decorations.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Decorations.java @@ -386,17 +386,16 @@ void releaseChildren (boolean destroy) { } Display display = this.display; super.releaseChildren (destroy); - //TODO -// Menu [] menus = display.getMenus (this); -// if (menus != null) { -// for (int i=0; i<menus.length; i++) { -// Menu menu = menus [i]; -// if (menu != null && !menu.isDisposed ()) { -// menu.dispose (); -// } -// } -// menus = null; -// } + Menu [] menus = display.getMenus (this); + if (menus != null) { + for (int i=0; i<menus.length; i++) { + Menu menu = menus [i]; + if (menu != null && !menu.isDisposed ()) { + menu.dispose (); + } + } + menus = null; + } } void releaseWidget () { super.releaseWidget (); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java index 274f433e5d..0238960520 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java @@ -113,6 +113,7 @@ public class Display extends Device { Control currentControl, grabControl, trackingControl; Menu menuBar; + Menu[] menus; NSApplication application; NSWindow screenWindow; @@ -369,22 +370,20 @@ public void addListener (int eventType, Listener listener) { eventTable.hook (eventType, listener); } -//void addMenu (Menu menu) { -// if (menus == null) menus = new Menu [12]; -// for (int i=0; i<menus.length; i++) { -// if (menus [i] == null) { -// menu.id = (short)(ID_START + i); -// menus [i] = menu; -// return; -// } -// } -// Menu [] newMenus = new Menu [menus.length + 12]; -// menu.id = (short)(ID_START + menus.length); -// newMenus [menus.length] = menu; -// System.arraycopy (menus, 0, newMenus, 0, menus.length); -// menus = newMenus; -//} -// +void addMenu (Menu menu) { + if (menus == null) menus = new Menu [12]; + for (int i=0; i<menus.length; i++) { + if (menus [i] == null) { + menus [i] = menu; + return; + } + } + Menu [] newMenus = new Menu [menus.length + 12]; + newMenus [menus.length] = menu; + System.arraycopy (menus, 0, newMenus, 0, menus.length); + menus = newMenus; +} + //void addPopup (Menu menu) { // if (popups == null) popups = new Menu [4]; // int length = popups.length; @@ -1224,34 +1223,23 @@ int getLastEventTime () { return (int) System.currentTimeMillis (); } -//Menu [] getMenus (Decorations shell) { -// if (menus == null) return new Menu [0]; -// int count = 0; -// for (int i = 0; i < menus.length; i++) { -// Menu menu = menus[i]; -// if (menu != null && menu.parent == shell) count++; -// } -// int index = 0; -// Menu[] result = new Menu[count]; -// for (int i = 0; i < menus.length; i++) { -// Menu menu = menus[i]; -// if (menu != null && menu.parent == shell) { -// result[index++] = menu; -// } -// } -// return result; -//} -// -//Menu getMenu (int id) { -// if (menus == null) return null; -// int index = id - ID_START; -// if (0 <= index && index < menus.length) return menus [index]; -// return null; -//} -// -//Menu getMenuBar () { -// return menuBar; -//} +Menu [] getMenus (Decorations shell) { + if (menus == null) return new Menu [0]; + int count = 0; + for (int i = 0; i < menus.length; i++) { + Menu menu = menus[i]; + if (menu != null && menu.parent == shell) count++; + } + int index = 0; + Menu[] result = new Menu[count]; + for (int i = 0; i < menus.length; i++) { + Menu menu = menus[i]; + if (menu != null && menu.parent == shell) { + result[index++] = menu; + } + } + return result; +} int getMessageCount () { return synchronizer.getMessageCount (); @@ -2509,14 +2497,14 @@ void releaseDisplay () { if (warningImage != null) warningImage.dispose (); errorImage = infoImage = warningImage = null; - //TODO - stop caret + if (caretTimer != null) timerExec(-1, caretTimer); + caretTimer = null; currentCaret = null; /* Release Timers */ if (nsTimers != null) { for (int i=0; i<nsTimers.length; i++) { - //TODO - check -1 as sentinal - if (nsTimers [i] != null /*&& timerIds [i] != -1*/) { + if (nsTimers [i] != null) { nsTimers [i].invalidate(); nsTimers [i].release(); } @@ -2532,6 +2520,9 @@ void releaseDisplay () { if (screenWindow != null) screenWindow.release(); screenWindow = null; + + menuBar = null; + menus = null; if (applicationCallback3 != null) applicationCallback3.dispose (); if (applicationCallback6 != null) applicationCallback6.dispose (); @@ -2618,11 +2609,16 @@ Widget removeWidget (NSObject view) { return widget; } -//void removeMenu (Menu menu) { -// if (menus == null) return; -// menus [menu.id - ID_START] = null; -//} -// +void removeMenu (Menu menu) { + if (menus == null) return; + for (int i = 0; i < menus.length; i++) { + if (menus [i] == menu) { + menus[i] = null; + break; + } + } +} + //void removePopup (Menu menu) { // if (popups == null) return; // for (int i=0; i<popups.length; i++) { @@ -3175,7 +3171,8 @@ Control findControl (NSEvent nsEvent, boolean checkGrab, boolean checkTrim) { NSArray windows = application.windows(); for (int i = 0; i < windows.count() && view == null; i++) { window = new NSWindow(windows.objectAtIndex(i)); - view = window.contentView().hitTest (window.convertScreenToBase(point)); + NSView contentView = window.contentView(); + if (contentView != null) view = contentView.hitTest (window.convertScreenToBase(point)); } } Control control = null; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Menu.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Menu.java index 084e6e5c6f..8ad960027c 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Menu.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Menu.java @@ -277,7 +277,7 @@ public void addMenuListener (MenuListener listener) { } void createHandle () { -// display.addMenu (this); + display.addMenu (this); SWTMenu widget = (SWTMenu)new SWTMenu().alloc(); widget.initWithTitle(NSString.stringWith("")); widget.setAutoenablesItems(false); @@ -724,7 +724,7 @@ void releaseParent () { void releaseWidget () { super.releaseWidget (); -// display.removeMenu (this); + display.removeMenu (this); parent = null; cascade = defaultItem = lastTarget = null; } |