summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/cocoa
diff options
context:
space:
mode:
authorSilenio Quarti <silenio>2008-06-20 16:29:24 +0000
committerSilenio Quarti <silenio>2008-06-20 16:29:24 +0000
commit28e1a4fa3eaea46bfca36ae1446d141125e40ce9 (patch)
tree965e92043f266b7b28d3d1dd2f7a756b7ecb2367 /bundles/org.eclipse.swt/Eclipse SWT/cocoa
parentddc8393d2aa91eaf0734be78de695b74ae5eae2a (diff)
downloadeclipse.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')
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java10
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Decorations.java21
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java103
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Menu.java4
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;
}