diff options
author | Silenio Quarti | 2008-06-09 20:39:25 +0000 |
---|---|---|
committer | Silenio Quarti | 2008-06-09 20:39:25 +0000 |
commit | 6687475724d9098125bacb1518a341736c8eafd3 (patch) | |
tree | 9b695be33a23c88162e1c7e8a025a21de60c334a | |
parent | 32519857d7ad2eb01dc0315f618d4bd0cd96d2c6 (diff) | |
download | eclipse.platform.swt-6687475724d9098125bacb1518a341736c8eafd3.tar.gz eclipse.platform.swt-6687475724d9098125bacb1518a341736c8eafd3.tar.xz eclipse.platform.swt-6687475724d9098125bacb1518a341736c8eafd3.zip |
do not use setTag() to store widget
11 files changed, 166 insertions, 155 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/Safari.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/Safari.java index 3860846889..c60328374f 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/Safari.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/Safari.java @@ -19,7 +19,6 @@ import org.eclipse.swt.widgets.*; class Safari extends WebBrowser { WebView webView; SWTWebViewDelegate delegate; - int jniRef; boolean changingLocation; String lastHoveredLinkURL; String html; @@ -34,7 +33,7 @@ class Safari extends WebBrowser { // boolean doit; static boolean Initialized; - static Callback Callback2, Callback3, Callback4, Callback5, Callback6, Callback7; + static Callback Callback3, Callback4, Callback5, Callback6, Callback7; static final int MIN_SIZE = 16; static final int MAX_PROGRESS = 100; @@ -44,7 +43,9 @@ class Safari extends WebBrowser { static final String PROTOCOL_FILE = "file:"; //$NON-NLS-1$ static final String PROTOCOL_HTTP = "http:"; //$NON-NLS-1$ static final String ABOUT_BLANK = "about:blank"; //$NON-NLS-1$ + static final String ADD_WIDGET_KEY = "org.eclipse.swt.internal.addWidget"; //$NON-NLS-1$ static final String SAFARI_EVENTS_FIX_KEY = "org.eclipse.swt.internal.safariEventsFix"; //$NON-NLS-1$ + static final String SWT_OBJECT = "SWT_OBJECT"; //$NON-NLS-1$ /* event strings */ static final String DOMEVENT_KEYUP = "keyup"; //$NON-NLS-1$ @@ -75,9 +76,6 @@ public void create (Composite parent, int style) { String className = "SWTWebViewDelegate"; if (OS.objc_lookUpClass(className) == 0) { Class safaryClass = this.getClass(); - Callback2 = new Callback(safaryClass, "browserProc", 2); - int proc2 = Callback2.getAddress(); - if (proc2 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS); Callback3 = new Callback(safaryClass, "browserProc", 3); int proc3 = Callback3.getAddress(); if (proc3 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS); @@ -95,9 +93,7 @@ public void create (Composite parent, int style) { if (proc7 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS); int cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0); - OS.class_addIvar(cls, "tag", OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); - OS.class_addMethod(cls, OS.sel_tag, proc2, "@:"); - OS.class_addMethod(cls, OS.sel_setTag_1, proc3, "@:i"); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_webView_1didChangeLocationWithinPageForFrame_1, proc4, "@:@@"); OS.class_addMethod(cls, OS.sel_webView_1didFailProvisionalLoadWithError_1forFrame_1, proc5, "@:@@@"); OS.class_addMethod(cls, OS.sel_webView_1didFinishLoadForFrame_1, proc4, "@:@@"); @@ -144,10 +140,9 @@ public void create (Composite parent, int style) { if (webView == null) SWT.error(SWT.ERROR_NO_HANDLES); webView.initWithFrame(browser.view.frame(), null, null); webView.setAutoresizingMask(OS.NSViewWidthSizable | OS.NSViewHeightSizable); - jniRef = OS.NewGlobalRef(this); - if (jniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES); final SWTWebViewDelegate delegate = (SWTWebViewDelegate)new SWTWebViewDelegate().alloc().init(); - delegate.setTag(jniRef); + Display display = browser.getDisplay(); + display.setData(ADD_WIDGET_KEY, new Object[] {delegate, browser}); this.delegate = delegate; this.webView = webView; browser.view.addSubview_(webView); @@ -166,6 +161,8 @@ public void create (Composite parent, int style) { ignoreDispose = true; browser.notifyListeners (e.type, e); e.type = SWT.NONE; + + e.display.setData(ADD_WIDGET_KEY, new Object[] {delegate, null}); Safari.this.webView.setFrameLoadDelegate(null); Safari.this.webView.setResourceLoadDelegate(null); @@ -178,8 +175,6 @@ public void create (Composite parent, int style) { Safari.this.webView = null; Safari.this.delegate.release(); Safari.this.delegate = null; - OS.DeleteGlobalRef(jniRef); - jniRef = 0; html = null; lastHoveredLinkURL = null; break; @@ -209,126 +204,108 @@ public boolean back() { return webView.goBack(); } -static int browserProc(int delegate, int sel) { - if (sel == OS.sel_tag) { - int[] tag = new int[1]; - OS.object_getInstanceVariable(delegate, "tag", tag); - return tag[0]; - } - return 0; -} - static int browserProc(int id, int sel, int arg0) { - if (sel == OS.sel_setTag_1) { - OS.object_setInstanceVariable(id, "tag", arg0); - return 0; - } - int jniRef = OS.objc_msgSend(id, OS.sel_tag); - if (jniRef == 0 || jniRef == -1) return 0; - Safari widget = (Safari)OS.JNIGetObject(jniRef); + Widget widget = Display.getCurrent().findWidget(id); if (widget == null) return 0; + Safari safari = (Safari)((Browser)widget).webBrowser; if (sel == OS.sel_handleNotification_1) { - widget.handleNotification(arg0); + safari.handleNotification(arg0); } else if (sel == OS.sel_webViewShow_1) { - widget.webViewShow(arg0); + safari.webViewShow(arg0); } else if (sel == OS.sel_webViewClose_1) { - widget.webViewClose(arg0); + safari.webViewClose(arg0); } else if (sel == OS.sel_webViewFocus_1) { - widget.webViewFocus(arg0); + safari.webViewFocus(arg0); } else if (sel == OS.sel_webViewUnfocus_1) { - widget.webViewUnfocus(arg0); + safari.webViewUnfocus(arg0); } else if (sel == OS.sel_handleEvent_1) { - widget.handleEvent(arg0); + safari.handleEvent(arg0); } return 0; } static int browserProc(int id, int sel, int arg0, int arg1) { - int jniRef = OS.objc_msgSend(id, OS.sel_tag); - if (jniRef == 0 || jniRef == -1) return 0; - Safari widget = (Safari)OS.JNIGetObject(jniRef); + Widget widget = Display.getCurrent().findWidget(id); if (widget == null) return 0; + Safari safari = (Safari)((Browser)widget).webBrowser; if (sel == OS.sel_webView_1didChangeLocationWithinPageForFrame_1) { - widget.webView_didChangeLocationWithinPageForFrame(arg0, arg1); + safari.webView_didChangeLocationWithinPageForFrame(arg0, arg1); } else if (sel == OS.sel_webView_1didFinishLoadForFrame_1) { - widget.webView_didFinishLoadForFrame(arg0, arg1); + safari.webView_didFinishLoadForFrame(arg0, arg1); } else if (sel == OS.sel_webView_1didStartProvisionalLoadForFrame_1) { - widget.webView_didStartProvisionalLoadForFrame(arg0, arg1); + safari.webView_didStartProvisionalLoadForFrame(arg0, arg1); } else if (sel == OS.sel_webView_1didCommitLoadForFrame_1) { - widget.webView_didCommitLoadForFrame(arg0, arg1); + safari.webView_didCommitLoadForFrame(arg0, arg1); } else if (sel == OS.sel_webView_1setFrame_1) { - widget.webView_setFrame(arg0, arg1); + safari.webView_setFrame(arg0, arg1); } else if (sel == OS.sel_webView_1createWebViewWithRequest_1) { - return widget.webView_createWebViewWithRequest(arg0, arg1); + return safari.webView_createWebViewWithRequest(arg0, arg1); } else if (sel == OS.sel_webView_1setStatusBarVisible_1) { - widget.webView_setStatusBarVisible(arg0, arg1); + safari.webView_setStatusBarVisible(arg0, arg1); } else if (sel == OS.sel_webView_1setResizable_1) { - widget.webView_setResizable(arg0, arg1); + safari.webView_setResizable(arg0, arg1); } else if (sel == OS.sel_webView_1setStatusText_1) { - widget.webView_setStatusText(arg0, arg1); + safari.webView_setStatusText(arg0, arg1); } else if (sel == OS.sel_webView_1setToolbarsVisible_1) { - widget.webView_setToolbarsVisible(arg0, arg1); + safari.webView_setToolbarsVisible(arg0, arg1); } else if (sel == OS.sel_webView_1runJavaScriptAlertPanelWithMessage_1) { - widget.webView_runJavaScriptAlertPanelWithMessage(arg0, arg1); + safari.webView_runJavaScriptAlertPanelWithMessage(arg0, arg1); } else if (sel == OS.sel_webView_1runJavaScriptConfirmPanelWithMessage_1) { - return widget.webView_runJavaScriptConfirmPanelWithMessage(arg0, arg1); + return safari.webView_runJavaScriptConfirmPanelWithMessage(arg0, arg1); } else if (sel == OS.sel_webView_1runOpenPanelForFileButtonWithResultListener_1) { - widget.webView_runOpenPanelForFileButtonWithResultListener(arg0, arg1); + safari.webView_runOpenPanelForFileButtonWithResultListener(arg0, arg1); } else if (sel == OS.sel_download_1decideDestinationWithSuggestedFilename_1) { - widget.download_decideDestinationWithSuggestedFilename(arg0, arg1); + safari.download_decideDestinationWithSuggestedFilename(arg0, arg1); } else if (sel == OS.sel_webView_1printFrameView_1) { - widget.webView_printFrameView(arg0, arg1); + safari.webView_printFrameView(arg0, arg1); } return 0; } static int browserProc(int id, int sel, int arg0, int arg1, int arg2) { - int jniRef = OS.objc_msgSend(id, OS.sel_tag); - if (jniRef == 0 || jniRef == -1) return 0; - Safari widget = (Safari)OS.JNIGetObject(jniRef); + Widget widget = Display.getCurrent().findWidget(id); if (widget == null) return 0; + Safari safari = (Safari)((Browser)widget).webBrowser; if (sel == OS.sel_webView_1didFailProvisionalLoadWithError_1forFrame_1) { - widget.webView_didFailProvisionalLoadWithError_forFrame(arg0, arg1, arg2); + safari.webView_didFailProvisionalLoadWithError_forFrame(arg0, arg1, arg2); } else if (sel == OS.sel_webView_1didReceiveTitle_1forFrame_1) { - widget.webView_didReceiveTitle_forFrame(arg0, arg1, arg2); + safari.webView_didReceiveTitle_forFrame(arg0, arg1, arg2); } else if (sel == OS.sel_webView_1resource_1didFinishLoadingFromDataSource_1) { - widget.webView_resource_didFinishLoadingFromDataSource(arg0, arg1, arg2); + safari.webView_resource_didFinishLoadingFromDataSource(arg0, arg1, arg2); } else if (sel == OS.sel_webView_1identifierForInitialRequest_1fromDataSource_1) { - return widget.webView_identifierForInitialRequest_fromDataSource(arg0, arg1, arg2); + return safari.webView_identifierForInitialRequest_fromDataSource(arg0, arg1, arg2); } else if (sel == OS.sel_webView_1contextMenuItemsForElement_1defaultMenuItems_1) { - return widget.webView_contextMenuItemsForElement_defaultMenuItems(arg0, arg1, arg2); + return safari.webView_contextMenuItemsForElement_defaultMenuItems(arg0, arg1, arg2); } else if (sel == OS.sel_webView_1mouseDidMoveOverElement_1modifierFlags_1) { - widget.webView_mouseDidMoveOverElement_modifierFlags(arg0, arg1, arg2); + safari.webView_mouseDidMoveOverElement_modifierFlags(arg0, arg1, arg2); } else if (sel == OS.sel_webView_1unableToImplementPolicyWithError_1frame_1) { - widget.webView_unableToImplementPolicyWithError_frame(arg0, arg1, arg2); + safari.webView_unableToImplementPolicyWithError_frame(arg0, arg1, arg2); } return 0; } static int browserProc(int id, int sel, int arg0, int arg1, int arg2, int arg3) { - int jniRef = OS.objc_msgSend(id, OS.sel_tag); - if (jniRef == 0 || jniRef == -1) return 0; - Safari widget = (Safari)OS.JNIGetObject(jniRef); + Widget widget = Display.getCurrent().findWidget(id); if (widget == null) return 0; + Safari safari = (Safari)((Browser)widget).webBrowser; if (sel == OS.sel_webView_1resource_1didFailLoadingWithError_1fromDataSource_1) { - widget.webView_resource_didFailLoadingWithError_fromDataSource(arg0, arg1, arg2, arg3); + safari.webView_resource_didFailLoadingWithError_fromDataSource(arg0, arg1, arg2, arg3); } return 0; } static int browserProc(int id, int sel, int arg0, int arg1, int arg2, int arg3, int arg4) { - int jniRef = OS.objc_msgSend(id, OS.sel_tag); - if (jniRef == 0 || jniRef == -1) return 0; - Safari widget = (Safari)OS.JNIGetObject(jniRef); + Widget widget = Display.getCurrent().findWidget(id); if (widget == null) return 0; + Safari safari = (Safari)((Browser)widget).webBrowser; if (sel == OS.sel_webView_1resource_1willSendRequest_1redirectResponse_1fromDataSource_1) { - return widget.webView_resource_willSendRequest_redirectResponse_fromDataSource(arg0, arg1, arg2, arg3, arg4); + return safari.webView_resource_willSendRequest_redirectResponse_fromDataSource(arg0, arg1, arg2, arg3, arg4); } else if (sel == OS.sel_webView_1decidePolicyForMIMEType_1request_1frame_1decisionListener_1) { - widget.webView_decidePolicyForMIMEType_request_frame_decisionListener(arg0, arg1, arg2, arg3, arg4); + safari.webView_decidePolicyForMIMEType_request_frame_decisionListener(arg0, arg1, arg2, arg3, arg4); } else if (sel == OS.sel_webView_1decidePolicyForNavigationAction_1request_1frame_1decisionListener_1) { - widget.webView_decidePolicyForNavigationAction_request_frame_decisionListener(arg0, arg1, arg2, arg3, arg4); + safari.webView_decidePolicyForNavigationAction_request_frame_decisionListener(arg0, arg1, arg2, arg3, arg4); } else if (sel == OS.sel_webView_1decidePolicyForNewWindowAction_1request_1newFrameName_1decisionListener_1) { - widget.webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener(arg0, arg1, arg2, arg3, arg4); + safari.webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener(arg0, arg1, arg2, arg3, arg4); } return 0; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPanelDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPanelDelegate.java index c7c1e8ce00..1431679048 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPanelDelegate.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPanelDelegate.java @@ -20,12 +20,4 @@ public SWTPanelDelegate(int id) { super(id); } -public int tag() { - return OS.objc_msgSend(id, OS.sel_tag); -} - -public void setTag(int tag) { - OS.objc_msgSend(id, OS.sel_setTag_1, tag); -} - } diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSearchField.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSearchField.java new file mode 100644 index 0000000000..c9782f216d --- /dev/null +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSearchField.java @@ -0,0 +1,15 @@ +/******************************************************************************* + * Copyright (c) 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.internal.cocoa; + +public class SWTSearchField extends NSSearchField { + +} diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSecureTextField.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSecureTextField.java new file mode 100644 index 0000000000..9288d12973 --- /dev/null +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSecureTextField.java @@ -0,0 +1,15 @@ +/******************************************************************************* + * Copyright (c) 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.internal.cocoa; + +public class SWTSecureTextField extends NSSecureTextField { + +} diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWebViewDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWebViewDelegate.java index 5832fda15a..4ca3c829b1 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWebViewDelegate.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWebViewDelegate.java @@ -12,7 +12,4 @@ package org.eclipse.swt.internal.cocoa; public class SWTWebViewDelegate extends NSObject { -public void setTag(int tag) { - OS.objc_msgSend(id, OS.sel_setTag_1, tag); -} } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ColorDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ColorDialog.java index 766e19c646..a9ab051945 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ColorDialog.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ColorDialog.java @@ -126,7 +126,7 @@ public RGB open() { SWTPanelDelegate delegate = (SWTPanelDelegate)new SWTPanelDelegate().alloc().init(); int jniRef = OS.NewGlobalRef(this); if (jniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES); - delegate.setTag(jniRef); + OS.object_setInstanceVariable(delegate.id, Display.SWT_OBJECT, jniRef); panel.setDelegate(delegate); rgb = null; panel.orderFront(null); 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 2ecca65112..046f92e148 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 @@ -221,6 +221,8 @@ public class Display extends Device { }; static String APP_NAME = "SWT"; + static final String ADD_WIDGET_KEY = "org.eclipse.swt.internal.addWidget"; //$NON-NLS-1$ + static final String SWT_OBJECT = "SWT_OBJECT"; //$NON-NLS-1$ /* Multiple Displays. */ static Display Default; @@ -400,7 +402,7 @@ public void addListener (int eventType, Listener listener) { void addWidget (NSObject view, Widget widget) { if (view == null) return; - OS.objc_msgSend (view.id, OS.sel_setTag_1, widget.jniRef); + OS.object_setInstanceVariable (view.id, SWT_OBJECT, widget.jniRef); } /** @@ -1520,11 +1522,10 @@ public Thread getThread () { Widget getWidget (int id) { if (id == 0) return null; - if (OS.objc_msgSend(id, OS.sel_respondsToSelector_1, OS.sel_tag) == 0) return null; - int jniRef = OS.objc_msgSend(id, OS.sel_tag); - if (jniRef == 0 || jniRef == -1) return null; - Widget widget = (Widget)OS.JNIGetObject(jniRef); - return widget; + int [] jniRef = new int [1]; + OS.object_getInstanceVariable(id, SWT_OBJECT, jniRef); + if (jniRef[0] == 0) return null; + return (Widget)OS.JNIGetObject(jniRef[0]); } Widget getWidget (NSView view) { @@ -1609,7 +1610,7 @@ void initClasses () { String className = "SWTWindowDelegate"; int cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0); - OS.class_addIvar(cls, "tag", OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_windowDidResize_1, proc3, "@:@"); OS.class_addMethod(cls, OS.sel_windowDidMove_1, proc3, "@:@"); OS.class_addMethod(cls, OS.sel_windowShouldClose_1, proc3, "@:@"); @@ -1617,38 +1618,28 @@ void initClasses () { OS.class_addMethod(cls, OS.sel_windowWillClose_1, proc3, "@:@"); OS.class_addMethod(cls, OS.sel_windowDidResignKey_1, proc3, "@:@"); OS.class_addMethod(cls, OS.sel_windowDidBecomeKey_1, proc3, "@:@"); - OS.class_addMethod(cls, OS.sel_tag, proc2, "@:"); - OS.class_addMethod(cls, OS.sel_setTag_1, proc3, "@:i"); OS.class_addMethod(cls, OS.sel_timerProc_1, proc3, "@:@"); OS.objc_registerClassPair(cls); className = "SWTPanelDelegate"; cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0); - OS.class_addIvar(cls, "tag", OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_windowWillClose_1, dialogProc3, "@:@"); OS.class_addMethod(cls, OS.sel_changeColor_1, dialogProc3, "@:@"); OS.class_addMethod(cls, OS.sel_changeFont_1, dialogProc3, "@:@"); - OS.class_addMethod(cls, OS.sel_tag, proc2, "@:"); - OS.class_addMethod(cls, OS.sel_setTag_1, proc3, "@:i"); OS.objc_registerClassPair(cls); className = "SWTMenu"; cls = OS.objc_allocateClassPair(OS.class_NSMenu, className, 0); - OS.class_addIvar(cls, "tag", OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); - OS.class_addMethod(cls, OS.sel_tag, proc2, "@:"); - OS.class_addMethod(cls, OS.sel_setTag_1, proc3, "@:i"); -// OS.class_addMethod(cls, OS.sel_menuWillOpen_1, proc3, "@:@"); - OS.class_addMethod(cls, OS.sel_menuWillClose_1, proc3, "@:@"); -// OS.class_addMethod(cls, OS.sel_numberOfItemsInMenu_1, proc3, "@:@"); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); + OS.class_addMethod(cls, OS.sel_menuWillClose_1, proc3, "@:@"); OS.class_addMethod(cls, OS.sel_menu_1willHighlightItem_1, proc4, "@:@@"); OS.class_addMethod(cls, OS.sel_menuNeedsUpdate_1, proc3, "@:@"); OS.objc_registerClassPair(cls); className = "SWTView"; cls = OS.objc_allocateClassPair(OS.class_NSView, className, 0); - OS.class_addIvar(cls, "tag", OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); - OS.class_addMethod(cls, OS.sel_tag, proc2, "@:"); - OS.class_addMethod(cls, OS.sel_setTag_1, proc3, "@:i"); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_isFlipped, proc2, "@:"); OS.class_addMethod(cls, OS.sel_drawRect_1, drawRectProc, "@:i"); OS.class_addMethod(cls, OS.sel_acceptsFirstResponder, proc2, "@:"); @@ -1659,9 +1650,7 @@ void initClasses () { className = "SWTScrollView"; cls = OS.objc_allocateClassPair(OS.class_NSScrollView, className, 0); - OS.class_addIvar(cls, "tag", OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); - OS.class_addMethod(cls, OS.sel_tag, proc2, "@:"); - OS.class_addMethod(cls, OS.sel_setTag_1, proc3, "@:i"); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_sendVerticalSelection, proc2, "@:"); OS.class_addMethod(cls, OS.sel_sendHorizontalSelection, proc2, "@:"); addEventMethods(cls, proc2, proc3); @@ -1669,6 +1658,7 @@ void initClasses () { className = "SWTButton"; cls = OS.objc_allocateClassPair(OS.class_NSButton, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_drawRect_1, drawRectProc, "@:i"); OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:"); OS.class_addMethod(cls, OS.sel_sendArrowSelection, proc2, "@:"); @@ -1677,6 +1667,7 @@ void initClasses () { className = "SWTTableView"; cls = OS.objc_allocateClassPair(OS.class_NSTableView, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_sendDoubleSelection, proc2, "@:"); OS.class_addMethod(cls, OS.sel_numberOfRowsInTableView_1, proc3, "@:@"); OS.class_addMethod(cls, OS.sel_tableView_1objectValueForTableColumn_1row_1, proc5, "@:@:@:@"); @@ -1689,6 +1680,7 @@ void initClasses () { className = "SWTOutlineView"; cls = OS.objc_allocateClassPair(OS.class_NSOutlineView, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_sendDoubleSelection, proc2, "@:"); OS.class_addMethod(cls, OS.sel_outlineViewSelectionDidChange_1, proc3, "@:@"); OS.class_addMethod(cls, OS.sel_outlineView_1shouldCollapseItem_1, proc4, "@:@@"); @@ -1704,49 +1696,44 @@ void initClasses () { className = "SWTTreeItem"; cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0); - OS.class_addIvar(cls, "tag", OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); - OS.class_addMethod(cls, OS.sel_tag, proc2, "@:"); - OS.class_addMethod(cls, OS.sel_setTag_1, proc3, "@:i"); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.objc_registerClassPair(cls); className = "SWTTabView"; cls = OS.objc_allocateClassPair(OS.class_NSTabView, className, 0); - OS.class_addIvar(cls, "tag", OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_tabView_1willSelectTabViewItem_1, proc4, "@:@@"); - OS.class_addMethod(cls, OS.sel_tag, proc2, "@:"); - OS.class_addMethod(cls, OS.sel_setTag_1, proc3, "@:i"); addEventMethods(cls, proc2, proc3); OS.objc_registerClassPair(cls); className = "SWTBox"; cls = OS.objc_allocateClassPair(OS.class_NSBox, className, 0); - OS.class_addIvar(cls, "tag", OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); - OS.class_addMethod(cls, OS.sel_tag, proc2, "@:"); - OS.class_addMethod(cls, OS.sel_setTag_1, proc3, "@:i"); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); addEventMethods(cls, proc2, proc3); OS.objc_registerClassPair(cls); className = "SWTProgressIndicator"; cls = OS.objc_allocateClassPair(OS.class_NSProgressIndicator, className, 0); - OS.class_addIvar(cls, "tag", OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); - OS.class_addMethod(cls, OS.sel_tag, proc2, "@:"); - OS.class_addMethod(cls, OS.sel_setTag_1, proc3, "@:i"); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); addEventMethods(cls, proc2, proc3); OS.objc_registerClassPair(cls); className = "SWTSlider"; cls = OS.objc_allocateClassPair(OS.class_NSSlider, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); addEventMethods(cls, proc2, proc3); OS.objc_registerClassPair(cls); className = "SWTPopUpButton"; cls = OS.objc_allocateClassPair(OS.class_NSPopUpButton, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:"); addEventMethods(cls, proc2, proc3); OS.objc_registerClassPair(cls); className = "SWTComboBox"; cls = OS.objc_allocateClassPair(OS.class_NSComboBox, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_comboBoxSelectionDidChange_1, proc3, "@:@"); OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:"); addEventMethods(cls, proc2, proc3); @@ -1754,53 +1741,68 @@ void initClasses () { className = "SWTDatePicker"; cls = OS.objc_allocateClassPair(OS.class_NSDatePicker, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:"); addEventMethods(cls, proc2, proc3); OS.objc_registerClassPair(cls); className = "SWTImageView"; cls = OS.objc_allocateClassPair(OS.class_NSImageView, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_drawRect_1, OS.drawRect_CALLBACK(proc3), "@:i"); addEventMethods(cls, proc2, proc3); OS.objc_registerClassPair(cls); className = "SWTStepper"; cls = OS.objc_allocateClassPair(OS.class_NSStepper, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:"); addEventMethods(cls, proc2, proc3); OS.objc_registerClassPair(cls); className = "SWTScroller"; cls = OS.objc_allocateClassPair(OS.class_NSScroller, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:"); addEventMethods(cls, proc2, proc3); OS.objc_registerClassPair(cls); className = "SWTMenuItem"; cls = OS.objc_allocateClassPair(OS.class_NSMenuItem, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:"); OS.objc_registerClassPair(cls); className = "SWTTextView"; cls = OS.objc_allocateClassPair(OS.class_NSTextView, className, 0); -// OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:"); - OS.class_addIvar(cls, "tag", OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); - OS.class_addMethod(cls, OS.sel_tag, proc2, "@:"); - OS.class_addMethod(cls, OS.sel_setTag_1, proc3, "@:i"); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); addEventMethods(cls, proc2, proc3); OS.objc_registerClassPair(cls); className = "SWTTextField"; cls = OS.objc_allocateClassPair(OS.class_NSTextField, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_drawRect_1, drawRectProc, "@:i"); addEventMethods(cls, proc2, proc3); OS.objc_registerClassPair(cls); - + + className = "SWTSearchField"; + cls = OS.objc_allocateClassPair(OS.class_NSSearchField, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); + OS.class_addMethod(cls, OS.sel_drawRect_1, drawRectProc, "@:i"); + addEventMethods(cls, proc2, proc3); + OS.objc_registerClassPair(cls); + + className = "SWTSecureTextField"; + cls = OS.objc_allocateClassPair(OS.class_NSSecureTextField, className, 0); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); + OS.class_addMethod(cls, OS.sel_drawRect_1, drawRectProc, "@:i"); + addEventMethods(cls, proc2, proc3); + OS.objc_registerClassPair(cls); + className = "SWTWindow"; cls = OS.objc_allocateClassPair(OS.class_NSWindow, className, 0); - OS.class_addIvar(cls, "tag", OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); - OS.class_addMethod(cls, OS.sel_tag, proc2, "@:"); - OS.class_addMethod(cls, OS.sel_setTag_1, proc3, "@:i"); + OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i"); OS.class_addMethod(cls, OS.sel_sendEvent_1, proc3, "@:@"); OS.class_addMethod(cls, OS.sel_flagsChanged_1, proc3, "@:@"); OS.class_addMethod(cls, OS.sel_helpRequested_1, proc3, "@:@"); @@ -2509,10 +2511,11 @@ public void removeListener (int eventType, Listener listener) { Widget removeWidget (NSObject view) { if (view == null) return null; - int jniRef = OS.objc_msgSend(view.id, OS.sel_tag); - if (jniRef == 0 || jniRef == -1) return null; - Widget widget = (Widget)OS.JNIGetObject(jniRef); - OS.objc_msgSend(view.id, OS.sel_setTag_1, -1); + int [] jniRef = new int [1]; + OS.object_getInstanceVariable(view.id, SWT_OBJECT, jniRef); + if (jniRef[0] == 0) return null; + Widget widget = (Widget)OS.JNIGetObject(jniRef[0]); + OS.object_setInstanceVariable(view.id, SWT_OBJECT, 0); return widget; } @@ -2709,6 +2712,17 @@ public void setData (String key, Object value) { checkDevice (); if (key == null) error (SWT.ERROR_NULL_ARGUMENT); + if (key.equals (ADD_WIDGET_KEY)) { + Object [] data = (Object [])value; + NSObject object = (NSObject)data [0]; + Widget widget = (Widget)data [1]; + if (widget == null) { + removeWidget (object); + } else { + addWidget (object, widget); + } + } + /* Remove the key/value pair */ if (value == null) { if (keys == null) return; @@ -3101,18 +3115,19 @@ int applicationDelegateProc(int id, int sel, int arg0) { } int dialogProc(int id, int sel, int arg0) { - int jniRef = OS.objc_msgSend(id, OS.sel_tag); - if (jniRef == 0 || jniRef == -1) return 0; + int [] jniRef = new int [1]; + OS.object_getInstanceVariable(id, SWT_OBJECT, jniRef); + if (jniRef[0] == 0) return 0; if (sel == OS.sel_changeColor_1) { - ColorDialog dialog = (ColorDialog)OS.JNIGetObject(jniRef); + ColorDialog dialog = (ColorDialog)OS.JNIGetObject(jniRef[0]); if (dialog == null) return 0; dialog.changeColor(arg0); } else if (sel == OS.sel_changeFont_1) { - FontDialog dialog = (FontDialog)OS.JNIGetObject(jniRef); + FontDialog dialog = (FontDialog)OS.JNIGetObject(jniRef[0]); if (dialog == null) return 0; dialog.changeFont(arg0); } else if (sel == OS.sel_windowWillClose_1) { - Object object = OS.JNIGetObject(jniRef); + Object object = OS.JNIGetObject(jniRef[0]); if (object instanceof FontDialog) { ((FontDialog)object).windowWillClose(arg0); } else if (object instanceof ColorDialog) { @@ -3123,11 +3138,6 @@ int dialogProc(int id, int sel, int arg0) { } int windowDelegateProc(int delegate, int sel) { - if (sel == OS.sel_tag) { - int[] tag = new int[1]; - OS.object_getInstanceVariable(delegate, "tag", tag); - return tag[0]; - } Widget widget = getWidget(delegate); if (widget == null) return 0; if (sel == OS.sel_isFlipped) { @@ -3173,10 +3183,6 @@ int windowDelegateProc(int id, int sel, int arg0) { if (sel == OS.sel_timerProc_1) { return timerProc (arg0); } - if (sel == OS.sel_setTag_1) { - OS.object_setInstanceVariable(id, "tag", arg0); - return 0; - } Widget widget = getWidget(id); if (widget == null) return 0; if (sel == OS.sel_windowWillClose_1) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FontDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FontDialog.java index 44b9593fbe..2c6eba7452 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FontDialog.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FontDialog.java @@ -214,7 +214,7 @@ public FontData open () { SWTPanelDelegate delegate = (SWTPanelDelegate)new SWTPanelDelegate().alloc().init(); int jniRef = OS.NewGlobalRef(this); if (jniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES); - delegate.setTag(jniRef); + OS.object_setInstanceVariable(delegate.id, Display.SWT_OBJECT, jniRef); panel.setDelegate(delegate); fontData = null; panel.orderFront(null); @@ -224,7 +224,7 @@ public FontData open () { OS.DeleteGlobalRef(jniRef); NSFont font = NSFontManager.sharedFontManager().selectedFont(); if (font != null) { - //TODO - this does work + //TODO - this does not work fontData = Font.cocoa_new(display, font).getFontData()[0]; } return fontData; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ScrollBar.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ScrollBar.java index 3960c7883a..e244c11452 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ScrollBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ScrollBar.java @@ -390,6 +390,7 @@ void register () { void releaseHandle () { super.releaseHandle (); + if (view != null) view.release(); view = null; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java index f5fe1a3af9..0a09b74e03 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java @@ -33,7 +33,7 @@ import org.eclipse.swt.graphics.*; * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a> */ public abstract class Scrollable extends Control { - SWTScrollView scrollView; + NSScrollView scrollView; ScrollBar horizontalBar, verticalBar; Scrollable () { @@ -125,11 +125,19 @@ ScrollBar createScrollBar (int style) { bar.display = display; NSScroller scroller; int actionSelector; + NSRect rect = new NSRect(); if ((style & SWT.H_SCROLL) != 0) { - scroller = scrollView.horizontalScroller(); + rect.width = 1; + } else { + rect.height = 1; + } + scroller = (SWTScroller)new SWTScroller().alloc(); + scroller.initWithFrame(rect); + if ((style & SWT.H_SCROLL) != 0) { + scrollView.setHorizontalScroller(scroller); actionSelector = OS.sel_sendHorizontalSelection; } else { - scroller = scrollView.verticalScroller(); + scrollView.setVerticalScroller(scroller); actionSelector = OS.sel_sendVerticalSelection; } bar.view = scroller; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java index 4b62ffb0fe..2072572f7b 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java @@ -338,9 +338,9 @@ void createHandle () { if ((style & SWT.SINGLE) != 0) { NSTextField widget; if ((style & SWT.PASSWORD) != 0) { - widget = (NSTextField)new NSSecureTextField().alloc(); + widget = (NSTextField)new SWTSecureTextField().alloc(); } else if ((style & SWT.SEARCH) != 0) { - widget = (NSTextField)new NSSearchField().alloc(); + widget = (NSTextField)new SWTSearchField().alloc(); } else { widget = (NSTextField)new SWTTextField().alloc(); } |