summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java3033
1 files changed, 753 insertions, 2280 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java
index b5cd168e8a..effd94aaa8 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java
@@ -7,94 +7,44 @@ package org.eclipse.swt.widgets;
* http://www.eclipse.org/legal/cpl-v10.html
*/
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.CGPoint;
+import org.eclipse.swt.internal.carbon.CGRect;
+import org.eclipse.swt.internal.carbon.ControlFontStyleRec;
+import org.eclipse.swt.internal.carbon.HMHelpContentRec;
+import org.eclipse.swt.internal.carbon.Rect;
+
import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
import org.eclipse.swt.events.*;
-import org.eclipse.swt.accessibility.*;
-import org.eclipse.swt.internal.carbon.*;
-
-/**
- * Control is the abstract superclass of all windowed user interface classes.
- * <p>
- * <dl>
- * <dt><b>Styles:</b>
- * <dd>BORDER</dd>
- * <dt><b>Events:</b>
- * <dd>FocusIn, FocusOut, Help, KeyDown, KeyUp, MouseDoubleClick, MouseDown, MouseEnter,
- * MouseExit, MouseHover, MouseUp, MouseMove, Move, Paint, Resize</dd>
- * </dl>
- * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
- * </p>
- */
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.accessibility.Accessible;
+
public abstract class Control extends Widget implements Drawable {
+ /**
+ * the handle to the OS resource
+ * (Warning: This field is platform dependent)
+ */
+ public int handle;
Composite parent;
- Font font;
- int foreground, background;
- Menu menu;
String toolTipText;
Object layoutData;
- Accessible accessible;
int drawCount;
- boolean visible= true;
+ Menu menu;
+ float [] foreground, background;
+ Font font;
Cursor cursor;
-
+ Accessible accessible;
+
Control () {
/* Do nothing */
}
-/**
- * Constructs a new instance of this class given its parent
- * and a style value describing its behavior and appearance.
- * <p>
- * The style value is either one of the style constants defined in
- * class <code>SWT</code> which is applicable to instances of this
- * class, or must be built by <em>bitwise OR</em>'ing together
- * (that is, using the <code>int</code> "|" operator) two or more
- * of those <code>SWT</code> style constants. The class description
- * lists the style constants that are applicable to the class.
- * Style bits are also inherited from superclasses.
- * </p>
- *
- * @param parent a composite control which will be the parent of the new instance (cannot be null)
- * @param style the style of control to construct
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
- * <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
- * </ul>
- *
- * @see SWT#BORDER
- * @see Widget#checkSubclass
- * @see Widget#getStyle
- */
+
public Control (Composite parent, int style) {
super (parent, style);
this.parent = parent;
- createWidget (0);
-}
-/**
- * Adds the listener to the collection of listeners who will
- * be notified when the control is moved or resized, by sending
- * it one of the messages defined in the <code>ControlListener</code>
- * interface.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see ControlListener
- * @see #removeControlListener
- */
+ createWidget ();
+}
+
public void addControlListener(ControlListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -102,25 +52,7 @@ public void addControlListener(ControlListener listener) {
addListener (SWT.Resize,typedListener);
addListener (SWT.Move,typedListener);
}
-/**
- * Adds the listener to the collection of listeners who will
- * be notified when the control gains or loses focus, by sending
- * it one of the messages defined in the <code>FocusListener</code>
- * interface.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see FocusListener
- * @see #removeFocusListener
- */
+
public void addFocusListener(FocusListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -128,50 +60,14 @@ public void addFocusListener(FocusListener listener) {
addListener(SWT.FocusIn,typedListener);
addListener(SWT.FocusOut,typedListener);
}
-/**
- * Adds the listener to the collection of listeners who will
- * be notified when help events are generated for the control,
- * by sending it one of the messages defined in the
- * <code>HelpListener</code> interface.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see HelpListener
- * @see #removeHelpListener
- */
+
public void addHelpListener (HelpListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
TypedListener typedListener = new TypedListener (listener);
addListener (SWT.Help, typedListener);
}
-/**
- * Adds the listener to the collection of listeners who will
- * be notified when keys are pressed and released on the system keyboard, by sending
- * it one of the messages defined in the <code>KeyListener</code>
- * interface.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see KeyListener
- * @see #removeKeyListener
- */
+
public void addKeyListener(KeyListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -179,25 +75,7 @@ public void addKeyListener(KeyListener listener) {
addListener(SWT.KeyUp,typedListener);
addListener(SWT.KeyDown,typedListener);
}
-/**
- * Adds the listener to the collection of listeners who will
- * be notified when mouse buttons are pressed and released, by sending
- * it one of the messages defined in the <code>MouseListener</code>
- * interface.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see MouseListener
- * @see #removeMouseListener
- */
+
public void addMouseListener(MouseListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -206,25 +84,7 @@ public void addMouseListener(MouseListener listener) {
addListener(SWT.MouseUp,typedListener);
addListener(SWT.MouseDoubleClick,typedListener);
}
-/**
- * Adds the listener to the collection of listeners who will
- * be notified when the mouse passes or hovers over controls, by sending
- * it one of the messages defined in the <code>MouseTrackListener</code>
- * interface.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see MouseTrackListener
- * @see #removeMouseTrackListener
- */
+
public void addMouseTrackListener (MouseTrackListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -233,145 +93,32 @@ public void addMouseTrackListener (MouseTrackListener listener) {
addListener (SWT.MouseExit,typedListener);
addListener (SWT.MouseHover,typedListener);
}
-/**
- * Adds the listener to the collection of listeners who will
- * be notified when the mouse moves, by sending it one of the
- * messages defined in the <code>MouseMoveListener</code>
- * interface.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see MouseMoveListener
- * @see #removeMouseMoveListener
- */
+
public void addMouseMoveListener(MouseMoveListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
TypedListener typedListener = new TypedListener (listener);
addListener(SWT.MouseMove,typedListener);
}
-/**
- * Adds the listener to the collection of listeners who will
- * be notified when the receiver needs to be painted, by sending it
- * one of the messages defined in the <code>PaintListener</code>
- * interface.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see PaintListener
- * @see #removePaintListener
- */
+
public void addPaintListener(PaintListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
TypedListener typedListener = new TypedListener (listener);
addListener(SWT.Paint,typedListener);
}
-/**
- * Adds the listener to the collection of listeners who will
- * be notified when traversal events occur, by sending it
- * one of the messages defined in the <code>TraverseListener</code>
- * interface.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see TraverseListener
- * @see #removeTraverseListener
- */
+
public void addTraverseListener (TraverseListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
TypedListener typedListener = new TypedListener (listener);
addListener (SWT.Traverse,typedListener);
}
-/**
- * Returns the preferred size of the receiver.
- * <p>
- * The <em>preferred size</em> of a control is the size that it would
- * best be displayed at. The width hint and height hint arguments
- * allow the caller to ask a control questions such as "Given a particular
- * width, how high does the control need to be to show all of the contents?"
- * To indicate that the caller does not wish to constrain a particular
- * dimension, the constant <code>SWT.DEFAULT</code> is passed for the hint.
- * </p>
- *
- * @param wHint the width hint (can be <code>SWT.DEFAULT</code>)
- * @param hHint the height hint (can be <code>SWT.DEFAULT</code>)
- * @return the preferred size of the control
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see Layout
- * @see #getBorderWidth
- * @see #getBounds
- * @see #getSize
- * @see #pack
- * @see "computeTrim, getClientArea for controls that implement them"
- */
+
public Point computeSize (int wHint, int hHint) {
return computeSize (wHint, hHint, true);
}
-/**
- * Returns the preferred size of the receiver.
- * <p>
- * The <em>preferred size</em> of a control is the size that it would
- * best be displayed at. The width hint and height hint arguments
- * allow the caller to ask a control questions such as "Given a particular
- * width, how high does the control need to be to show all of the contents?"
- * To indicate that the caller does not wish to constrain a particular
- * dimension, the constant <code>SWT.DEFAULT</code> is passed for the hint.
- * </p><p>
- * If the changed flag is <code>true</code>, it indicates that the receiver's
- * <em>contents</em> have changed, therefore any caches that a layout manager
- * containing the control may have been keeping need to be flushed. When the
- * control is resized, the changed flag will be <code>false</code>, so layout
- * manager caches can be retained.
- * </p>
- *
- * @param wHint the width hint (can be <code>SWT.DEFAULT</code>)
- * @param hHint the height hint (can be <code>SWT.DEFAULT</code>)
- * @param changed <code>true</code> if the control's contents have changed, and <code>false</code> otherwise
- * @return the preferred size of the control.
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see Layout
- * @see #getBorderWidth
- * @see #getBounds
- * @see #getSize
- * @see #pack
- * @see "computeTrim, getClientArea for controls that implement them"
- */
+
public Point computeSize (int wHint, int hHint, boolean changed) {
checkWidget();
int width = DEFAULT_WIDTH;
@@ -413,138 +160,60 @@ Control computeTabRoot () {
return parent.computeTabRoot ();
}
-void createWidget (int index) {
- super.createWidget (index);
- foreground = background = -1;
+void createWidget () {
+ super.createWidget ();
+ setZOrder ();
+}
- /*
- * Feature in Motif. When the XmNfontList resource is set for
- * a widget, Motif creates a copy of the fontList and disposes
- * the copy when the widget is disposed. This means that when
- * the programmer queries the font, not only will the handle be
- * different but the font will be unexpectedly disposed when
- * the widget is disposed. This can cause GP's when the font
- * is set in another widget. The fix is to cache the font the
- * the programmer provides. The initial value of the cache is
- * the default font for the widget.
- */
- font = defaultFont ();
+Font defaultFont () {
+ byte [] family = new byte [256];
+ short [] size = new short [1];
+ byte [] style = new byte [1];
+ OS.GetThemeFont ((short) defaultThemeFont (), (short) OS.smSystemScript, family, size, style);
+ short id = OS.FMGetFontFamilyFromName (family);
+ int [] font = new int [1];
+ OS.FMGetFontFromFontFamilyInstance (id, style [0], font, null);
+ return Font.carbon_new (getDisplay (), font [0], id, style [0], size [0]);
+}
- /*
- * Explicitly set the tab ordering for XmTAB_GROUP widgets to
- * override the default traversal. This is done so that the
- * traversal order can be changed after the widget tree is
- * created. Unless explicitly changed, the overridded traversal
- * order is the same as the default.
- */
- /* AW
- int [] argList1 = new int [] {OS.XmNnavigationType, 0};
- OS.XtGetValues (handle, argList1, argList1.length / 2);
- if (argList1 [1] == OS.XmTAB_GROUP) {
- int [] argList2 = new int [] {OS.XmNnavigationType, OS.XmEXCLUSIVE_TAB_GROUP};
- OS.XtSetValues (handle, argList2, argList2.length / 2);
+int defaultThemeFont () {
+ return OS.kThemeSystemFont;
+}
+
+void deregister () {
+ super.deregister ();
+ WidgetTable.remove (handle);
+}
+
+void destroyWidget () {
+ int theControl = topHandle ();
+ releaseHandle ();
+ if (theControl != 0) {
+ OS.DisposeControl (theControl);
}
- */
}
-int defaultBackground () {
- return getDisplay ().defaultBackground;
+
+Cursor findCursor () {
+ if (cursor != null) return cursor;
+ return parent.findCursor ();
}
-Font defaultFont () {
- return getDisplay ().defaultFont;
-}
-int defaultForeground () {
- return getDisplay ().defaultForeground;
-}
-void enableWidget (boolean enabled) {
- enableHandle (enabled, handle);
-}
-char findMnemonic (String string) {
- int index = 0;
- int length = string.length ();
- do {
- while ((index < length) && (string.charAt (index) != Mnemonic)) index++;
- if (++index >= length) return '\0';
- if (string.charAt (index) != Mnemonic) return string.charAt (index);
- index++;
- } while (index < length);
- return '\0';
-}
-int fontHandle () {
- return handle;
+
+void fixFocus () {
+ Shell shell = getShell ();
+ Control control = this;
+ while ((control = control.parent) != null) {
+ if (control.setFocus () || control == shell) return;
+ }
+ int window = OS.GetControlOwner (handle);
+ OS.ClearKeyboardFocus (window);
}
-/**
- * Forces the receiver to have the <em>keyboard focus</em>, causing
- * all keyboard events to be delivered to it.
- *
- * @return <code>true</code> if the control got focus, and <code>false</code> if it was unable to.
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see #setFocus
- */
+
public boolean forceFocus () {
checkWidget();
- Decorations shell = menuShell ();
- shell.setSavedFocus (this);
- if (!isEnabled () || !isVisible () /* AW || !isActive () */) return false;
- if (isFocusControl ()) return true;
- shell.bringToTop ();
- /*
- * This code is intentionally commented.
- *
- * When setting focus to a control, it is
- * possible that application code can set
- * the focus to another control inside of
- * WM_SETFOCUS. In this case, the original
- * control will no longer have the focus
- * and the call to setFocus() will return
- * false indicating failure.
- *
- * We are still working on a solution at
- * this time.
- */
-// if (OS.GetFocus () != OS.SetFocus (handle)) return false;
-
- /* AW
- OS.SetFocus (handle);
- */
-
- boolean focus= false;
-
- if (this instanceof Text || this instanceof List || this instanceof Combo || this instanceof Canvas)
- focus= true;
- if (!focus && MacUtil.FULL_KBD_NAV && this instanceof Button)
- focus= true;
-
- if (focus) {
- Display display= getDisplay();
- if (display != null)
- display.setMacFocusHandle(((Shell)shell).shellHandle, handle);
- }
+ int window = OS.GetControlOwner (handle);
+ return OS.SetKeyboardFocus (window, handle, (short)OS.kControlFocusNextPart) == OS.noErr;
+}
- return isFocusControl ();
-}
-
-/**
- * Returns the accessible object for the receiver.
- * If this is the first time this object is requested,
- * then the object is created and returned.
- *
- * @return the accessible object
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see Accessible#addAccessibleListener
- * @see Accessible#addAccessibleControlListener
- *
- * @since 2.0
- */
public Accessible getAccessible () {
checkWidget ();
if (accessible == null) {
@@ -552,274 +221,69 @@ public Accessible getAccessible () {
}
return accessible;
}
-
-/**
- * Returns the receiver's background color.
- *
- * @return the background color
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public Color getBackground () {
checkWidget();
- return Color.carbon_new (getDisplay (), getBackgroundPixel (), false);
-}
-int getBackgroundPixel () {
-/* AW
- int [] argList = {OS.XmNbackground, 0};
- OS.XtGetValues (handle, argList, argList.length / 2);
- return argList [1];
-*/
- if (background == -1) return defaultBackground ();
- return background;
-}
-/**
- * Returns the receiver's border width.
- *
- * @return the border width
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ //WRONG
+ if (background == null) return getDisplay ().getSystemColor (SWT.COLOR_WHITE);
+ return Color.carbon_new (getDisplay (), background);
+}
+
public int getBorderWidth () {
checkWidget();
- /* AW
- int topHandle = topHandle ();
- int [] argList = {OS.XmNborderWidth, 0};
- OS.XtGetValues (topHandle, argList, argList.length / 2);
- return argList [1];
- */
return 0;
}
-/**
- * Returns a rectangle describing the receiver's size and location
- * relative to its parent (or its display if its parent is null).
- *
- * @return the receiver's bounding rectangle
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public Rectangle getBounds () {
checkWidget();
- int topHandle = topHandle ();
- /* AW
- int [] argList = {OS.XmNx, 0, OS.XmNy, 0, OS.XmNwidth, 0, OS.XmNheight, 0, OS.XmNborderWidth, 0};
- OS.XtGetValues (topHandle, argList, argList.length / 2);
- int borders = argList [9] * 2;
- return new Rectangle ((short) argList [1], (short) argList [3], argList [5] + borders, argList [7] + borders);
- */
- if (MacUtil.USE_FRAME) {
- MacRect br= new MacRect();
- internalGetControlBounds(topHandle, br);
- return br.toRectangle();
- } else {
- MacRect br= new MacRect();
- short[] bounds= br.getData();
- short[] pbounds= new short[4];
- internalGetControlBounds(topHandle, br);
- OS.GetControlBounds(parent.handle, pbounds);
- return new Rectangle(bounds[1]-pbounds[1], bounds[0]-pbounds[0], bounds[3]-bounds[1], bounds[2]-bounds[0]);
- }
-}
-Point getClientLocation () {
- /* AW
- short [] handle_x = new short [1], handle_y = new short [1];
- OS.XtTranslateCoords (handle, (short) 0, (short) 0, handle_x, handle_y);
- short [] topHandle_x = new short [1], topHandle_y = new short [1];
- OS.XtTranslateCoords (parent.handle, (short) 0, (short) 0, topHandle_x, topHandle_y);
- return new Point (handle_x [0] - topHandle_x [0], handle_y [0] - topHandle_y [0]);
- */
- short[] bounds= new short[4];
- short[] pbounds= new short[4];
- OS.GetControlBounds(handle, bounds);
- OS.GetControlBounds(parent.handle, pbounds);
- return new Point(bounds[1]-pbounds[1], bounds[0]-pbounds[0]);
-}
-/**
- * Returns the display that the receiver was created on.
- *
- * @return the receiver's display
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ Rect rect = getControlBounds (topHandle ());
+ return new Rectangle (rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
+}
+
public Display getDisplay () {
Composite parent = this.parent;
if (parent == null) error (SWT.ERROR_WIDGET_DISPOSED);
return parent.getDisplay ();
}
-/**
- * Returns <code>true</code> if the receiver is enabled, and
- * <code>false</code> otherwise. A disabled control is typically
- * not selectable from the user interface and draws with an
- * inactive or "grayed" look.
- *
- * @return the receiver's enabled state
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public boolean getEnabled () {
checkWidget();
- int h= topHandle();
- if (OS.IsValidControlHandle(h))
- return OS.IsControlEnabled(h);
- System.out.println("Control.getEnabled: fixme for " + getClass().getName());
- return true;
+ return (state & DISABLED) == 0;
}
-/**
- * Returns the font that the receiver will use to paint textual information.
- *
- * @return the receiver's font
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public Font getFont () {
checkWidget();
- return font;
-}
-
-int getFontAscent () {
- int oldPort= OS.GetPort();
- OS.SetPortWindowPort(OS.GetControlOwner(handle));
- if (font != null && font.handle != null)
- font.handle.installInGrafPort();
- short[] fontInfo= new short[4];
- OS.GetFontInfo(fontInfo); // FontInfo
- int height= fontInfo[0];
- OS.SetPort(oldPort);
- return height;
-}
-
-int getFontHeight () {
- int oldPort= OS.GetPort();
- OS.SetPortWindowPort(OS.GetControlOwner(handle));
- if (font != null && font.handle != null)
- font.handle.installInGrafPort();
- short[] fontInfo= new short[4];
- OS.GetFontInfo(fontInfo); // FontInfo
- int height= fontInfo[0] + fontInfo[1];
- OS.SetPort(oldPort);
- return height;
-}
-/**
- * Returns the foreground color that the receiver will use to draw.
- *
- * @return the receiver's foreground color
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ return font != null ? font : defaultFont ();
+}
+
public Color getForeground () {
checkWidget();
- return Color.carbon_new (getDisplay (), getForegroundPixel (), false);
+ //WRONG
+ if (foreground == null) return getDisplay ().getSystemColor (SWT.COLOR_BLACK);
+ return Color.carbon_new (getDisplay (), foreground);
}
-int getForegroundPixel () {
- /* AW
- int [] argList = {OS.XmNforeground, 0};
- OS.XtGetValues (handle, argList, argList.length / 2);
- return argList [1];
- */
- if (foreground == -1) return defaultForeground ();
- return foreground;
-}
-/* AW
-short [] getIMECaretPos () {
- return new short[]{0, 0};
-}
-*/
-/**
- * Returns layout data which is associated with the receiver.
- *
- * @return the receiver's layout data
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public Object getLayoutData () {
checkWidget();
return layoutData;
}
-/**
- * Returns a point describing the receiver's location relative
- * to its parent (or its display if its parent is null).
- *
- * @return the receiver's location
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public Point getLocation () {
checkWidget();
- int topHandle= topHandle ();
- MacRect br= new MacRect();
- if (MacUtil.USE_FRAME) {
- internalGetControlBounds(topHandle, br);
- return br.getLocation();
- } else {
- short[] bounds= br.getData();
- short[] pbounds= new short[4];
- internalGetControlBounds(topHandle, br);
- OS.GetControlBounds(parent.handle, pbounds);
- return new Point(bounds[1]-pbounds[1], bounds[0]-pbounds[0]);
- }
-}
-/**
- * Returns the receiver's pop up menu if it has one, or null
- * if it does not. All controls may optionally have a pop up
- * menu that is displayed when the user requests one for
- * the control. The sequence of key strokes, button presses
- * and/or button releases that are used to request a pop up
- * menu is platform specific.
- *
- * @return the receiver's menu
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ Rect rect = getControlBounds (topHandle ());
+ return new Point (rect.left, rect.top);
+}
+
public Menu getMenu () {
checkWidget();
return menu;
}
-/**
- * Returns the receiver's parent, which must be a <code>Composite</code>
- * or null when the receiver is a shell that was created with null or
- * a display for a parent.
- *
- * @return the receiver's parent
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public Composite getParent () {
checkWidget();
return parent;
}
+
Control [] getPath () {
int count = 0;
Shell shell = getShell ();
@@ -836,710 +300,436 @@ Control [] getPath () {
}
return result;
}
-/**
- * Returns the receiver's shell. For all controls other than
- * shells, this simply returns the control's nearest ancestor
- * shell. Shells return themselves, even if they are children
- * of other shells.
- *
- * @return the receiver's shell
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see #getParent
- */
+
public Shell getShell () {
checkWidget();
return parent.getShell ();
}
-/**
- * Returns a point describing the receiver's size. The
- * x coordinate of the result is the width of the receiver.
- * The y coordinate of the result is the height of the
- * receiver.
- *
- * @return the receiver's size
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public Point getSize () {
checkWidget();
- int topHandle = topHandle ();
- /*
- int [] argList = {OS.XmNwidth, 0, OS.XmNheight, 0, OS.XmNborderWidth, 0};
- OS.XtGetValues (topHandle, argList, argList.length / 2);
- int borders = argList [5] * 2;
- return new Point (argList [1] + borders, argList [3] + borders);
- */
- MacRect bounds= new MacRect();
- internalGetControlBounds(topHandle, bounds);
- return bounds.getSize();
-}
-/**
- * Returns the receiver's tool tip text, or null if it has
- * not been set.
- *
- * @return the receiver's tool tip text
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ Rect rect = getControlSize (topHandle ());
+ return new Point (rect.right - rect.left, rect.bottom - rect.top);
+}
+
public String getToolTipText () {
checkWidget();
return toolTipText;
}
-/**
- * Returns <code>true</code> if the receiver is visible, and
- * <code>false</code> otherwise.
- * <p>
- * If one of the receiver's ancestors is not visible or some
- * other condition makes the receiver not visible, this method
- * may still indicate that it is considered visible even though
- * it may not actually be showing.
- * </p>
- *
- * @return the receiver's visibility state
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public boolean getVisible () {
checkWidget();
- return visible;
+ return (state & HIDDEN) == 0;
}
+
boolean hasFocus () {
- return (this == getDisplay ().getFocusControl ());
+ return this == getDisplay ().getFocusControl ();
+}
+
+int helpProc (int inControl, int inGlobalMouse, int inRequest, int outContentProvided, int ioHelpContent) {
+ Display display = getDisplay ();
+ switch (inRequest) {
+ case OS.kHMSupplyContent: {
+ int [] contentProvided = new int [] {OS.kHMContentNotProvidedDontPropagate};
+ if (toolTipText != null && toolTipText.length () != 0) {
+ char [] buffer = new char [toolTipText.length ()];
+ toolTipText.getChars (0, buffer.length, buffer, 0);
+ int i=0, j=0;
+ while (i < buffer.length) {
+ if ((buffer [j++] = buffer [i++]) == Mnemonic) {
+ if (i == buffer.length) {continue;}
+ if (buffer [i] == Mnemonic) {i++; continue;}
+ j--;
+ }
+ }
+ if (display.helpString != 0) OS.CFRelease (display.helpString);
+ display.helpString = OS.CFStringCreateWithCharacters (OS.kCFAllocatorDefault, buffer, j);
+ HMHelpContentRec helpContent = new HMHelpContentRec ();
+ OS.memcpy (helpContent, ioHelpContent, HMHelpContentRec.sizeof);
+ helpContent.version = OS.kMacHelpVersion;
+
+ /*
+ * Feature in the Macintosh. Despite the fact that the Mac
+ * provides 23 different types of alignment for the help text,
+ * it does not allow the text to be positioned at the current
+ * mouse position. The fix is to center the text in a rectangle
+ * that surrounds the original position of the mouse. As the
+ * mouse is moved, this rectangle is grown to include the new
+ * location of the mouse. The help text is then centered by
+ * the Mac in the new rectangle that was carefully constructed
+ * such that the help text will stay in the same position.
+ */
+ int cursorHeight = 16;
+ helpContent.tagSide = (short) OS.kHMAbsoluteCenterAligned;
+ int x = (short) (inGlobalMouse & 0xFFFF);
+ int y = (short) (inGlobalMouse >> 16);
+ if (display.helpControl != this) {
+ display.lastHelpX = x + cursorHeight / 2;
+ display.lastHelpY = y + cursorHeight + cursorHeight / 2;
+ }
+ int jitter = 4;
+ int deltaX = Math.abs (display.lastHelpX - x) + jitter;
+ int deltaY = Math.abs (display.lastHelpY - y) + jitter;
+ x = display.lastHelpX - deltaX;
+ y = display.lastHelpY - deltaY;
+ int width = deltaX * 2;
+ int height = deltaY * 2;
+ display.helpControl = this;
+ helpContent.absHotRect_left = (short) x;
+ helpContent.absHotRect_top = (short) y;
+ helpContent.absHotRect_right = (short) (x + width);
+ helpContent.absHotRect_bottom = (short) (y + height);
+
+ helpContent.content0_contentType = OS.kHMCFStringContent;
+ helpContent.content0_tagCFString = display.helpString;
+ helpContent.content1_contentType = OS.kHMCFStringContent;
+ helpContent.content1_tagCFString = display.helpString;
+ OS.memcpy (ioHelpContent, helpContent, HMHelpContentRec.sizeof);
+ contentProvided [0] = OS.kHMContentProvided;
+ }
+ OS.memcpy (outContentProvided, contentProvided, 4);
+ break;
+ }
+ case OS.kHMDisposeContent: {
+ if (display.helpString != 0) OS.CFRelease (display.helpString);
+ display.helpString = 0;
+ break;
+ }
+ }
+ return OS.noErr;
}
+
void hookEvents () {
- /* AW
- int windowProc = getDisplay ().windowProc;
- OS.XtAddEventHandler (handle, OS.KeyPressMask, false, windowProc, SWT.KeyDown);
- OS.XtAddEventHandler (handle, OS.KeyReleaseMask, false, windowProc, SWT.KeyUp);
- OS.XtAddEventHandler (handle, OS.ButtonPressMask, false, windowProc, SWT.MouseDown);
- OS.XtAddEventHandler (handle, OS.ButtonReleaseMask, false, windowProc, SWT.MouseUp);
- OS.XtAddEventHandler (handle, OS.PointerMotionMask, false, windowProc, SWT.MouseMove);
- OS.XtAddEventHandler (handle, OS.EnterWindowMask, false, windowProc, SWT.MouseEnter);
- OS.XtAddEventHandler (handle, OS.LeaveWindowMask, false, windowProc, SWT.MouseExit);
- OS.XtAddEventHandler (handle, OS.ExposureMask, false, windowProc, SWT.Paint);
- OS.XtAddEventHandler (handle, OS.FocusChangeMask, false, windowProc, SWT.FocusIn);
- OS.XtAddCallback (handle, OS.XmNhelpCallback, windowProc, SWT.Help);
- */
- //Display display= getDisplay();
- //OS.SetControlData(handle, OS.kControlEntireControl, OS.kControlUserPaneDrawProcTag, display.fUserPaneDrawProc);
-}
-/**
- * Invokes platform specific functionality to allocate a new GC handle.
- * <p>
- * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
- * API for <code>Control</code>. It is marked public only so that it
- * can be shared within the packages provided by SWT. It is not
- * available on all platforms, and should never be called from
- * application code.
- * </p>
- *
- * @param data the platform specific GC data
- * @return the platform specific GC handle
- *
- * @private
- */
+ super.hookEvents ();
+ Display display = getDisplay ();
+ int controlProc = display.controlProc;
+ int [] mask = new int [] {
+ OS.kEventClassControl, OS.kEventControlActivate,
+ OS.kEventClassControl, OS.kEventControlBoundsChanged,
+ OS.kEventClassControl, OS.kEventControlClick,
+ OS.kEventClassControl, OS.kEventControlContextualMenuClick,
+ OS.kEventClassControl, OS.kEventControlDeactivate,
+ OS.kEventClassControl, OS.kEventControlDraw,
+ OS.kEventClassControl, OS.kEventControlHit,
+ OS.kEventClassControl, OS.kEventControlSetCursor,
+ OS.kEventClassControl, OS.kEventControlSetFocusPart,
+ };
+ int controlTarget = OS.GetControlEventTarget (handle);
+ OS.InstallEventHandler (controlTarget, controlProc, mask.length / 2, mask, handle, null);
+ int helpProc = display.helpProc;
+ OS.HMInstallControlContentCallback (handle, helpProc);
+}
+
public int internal_new_GC (GCData data) {
checkWidget();
- /* AW
- if (!OS.XtIsRealized (handle)) {
- Shell shell = getShell ();
- shell.realizeWidget ();
+ int [] buffer = new int [1];
+ int context = 0, paintRgn = 0, visibleRgn = 0;
+ if (data.paintEvent != 0) {
+ int theEvent = data.paintEvent;
+ OS.GetEventParameter (theEvent, OS.kEventParamCGContextRef, OS.typeCGContextRef, null, 4, null, buffer);
+ context = buffer [0];
+ OS.GetEventParameter (theEvent, OS.kEventParamRgnHandle, OS.typeQDRgnHandle, null, 4, null, buffer);
+ visibleRgn = paintRgn = buffer [0];
}
- int xDisplay = OS.XtDisplay (handle);
- if (xDisplay == 0) SWT.error(SWT.ERROR_NO_HANDLES);
- int xWindow = OS.XtWindow (handle);
- if (xWindow == 0) SWT.error(SWT.ERROR_NO_HANDLES);
- int xGC = OS.XCreateGC (xDisplay, xWindow, 0, null);
- if (xGC == 0) SWT.error(SWT.ERROR_NO_HANDLES);
- OS.XSetGraphicsExposures (xDisplay, xGC, false);
- int [] argList = {OS.XmNforeground, 0, OS.XmNbackground, 0, OS.XmNcolormap, 0};
- OS.XtGetValues (handle, argList, argList.length / 2);
- */
- if (data != null) {
- data.device = getDisplay ();
- data.foreground = getForegroundPixel();
- data.background = getBackgroundPixel();
- data.font = font.handle;
- data.controlHandle = handle;
+ if (context == 0) {
+ int window = OS.GetControlOwner (handle);
+ int port = OS.GetWindowPort (window);
+ OS.CreateCGContextForPort (port, buffer);
+ context = buffer [0];
+ if (context != 0) {
+ Rect rect = new Rect ();
+ OS.GetControlBounds (handle, rect);
+ Rect portRect = new Rect ();
+ OS.GetPortBounds (port, portRect);
+ visibleRgn = getVisibleRegion (handle);
+ if (paintRgn != 0) OS.SectRgn (paintRgn, visibleRgn, visibleRgn);
+ OS.ClipCGContextToRegion (context, portRect, visibleRgn);
+ int portHeight = portRect.bottom - portRect.top;
+ OS.CGContextScaleCTM (context, 1, -1);
+ OS.CGContextTranslateCTM (context, rect.left, -portHeight + rect.top);
+ }
}
-
- int wHandle= 0;
- if (MacUtil.USE_FRAME) {
- Shell shell= getShell();
- if (shell != null)
- wHandle= shell.shellHandle;
+ if (context == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+ if (data != null) {
+ Display display = getDisplay ();
+ data.device = display;
+ data.foreground = foreground != null ? foreground : display.getSystemColor (SWT.COLOR_BLACK).handle;
+ data.background = background != null ? background : display.getSystemColor (SWT.COLOR_WHITE).handle;
+ data.font = font != null ? font : defaultFont ();
+ data.visibleRgn = visibleRgn;
+ data.control = handle;
} else {
- wHandle= OS.GetControlOwner(handle);
+ if (visibleRgn != paintRgn) OS.DisposeRgn (visibleRgn);
}
- int xGC= OS.GetWindowPort(wHandle);
- if (xGC == 0) SWT.error(SWT.ERROR_NO_HANDLES);
-
- return xGC;
-}
-/**
- * Invokes platform specific functionality to dispose a GC handle.
- * <p>
- * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
- * API for <code>Control</code>. It is marked public only so that it
- * can be shared within the packages provided by SWT. It is not
- * available on all platforms, and should never be called from
- * application code.
- * </p>
- *
- * @param handle the platform specific GC handle
- * @param data the platform specific GC data
- *
- * @private
- */
-public void internal_dispose_GC (int xGC, GCData data) {
+ return context;
+}
+
+public void internal_dispose_GC (int context, GCData data) {
checkWidget ();
- /* AW
- int xDisplay = 0;
- if (data != null) xDisplay = data.display;
- if (xDisplay == 0 && handle != 0) xDisplay = OS.XtDisplay (handle);
- if (xDisplay == 0) SWT.error(SWT.ERROR_NO_HANDLES);
- OS.XFreeGC (xDisplay, xGC);
- */
-}
-/**
- * Returns <code>true</code> if the receiver is enabled and all
- * of the receiver's ancestors are enabled, and <code>false</code>
- * otherwise. A disabled control is typically not selectable from the
- * user interface and draws with an inactive or "grayed" look.
- *
- * @return the receiver's enabled state
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see #getEnabled
- */
+ if (data != null) {
+ int paintContext = 0, paintRgn = 0;
+ if (data.paintEvent != 0) {
+ int theEvent = data.paintEvent;
+ int [] buffer = new int [1];
+ OS.GetEventParameter (theEvent, OS.kEventParamCGContextRef, OS.typeCGContextRef, null, 4, null, buffer);
+ paintContext = buffer [0];
+ OS.GetEventParameter (theEvent, OS.kEventParamRgnHandle, OS.typeQDRgnHandle, null, 4, null, buffer);
+ paintRgn = buffer [0];
+ }
+ if (data.visibleRgn != 0 && data.visibleRgn != paintRgn) {
+ OS.DisposeRgn (data.visibleRgn);
+ data.visibleRgn = 0;
+ }
+ if (paintContext == context) return;
+ }
+ OS.CGContextFlush (context);
+ OS.CGContextRelease (context);
+}
+
public boolean isEnabled () {
checkWidget();
- return getEnabled () && parent.isEnabled ();
-}
-/**
- * Returns <code>true</code> if the receiver has the user-interface
- * focus, and <code>false</code> otherwise.
- *
- * @return the receiver's focus state
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ return OS.IsControlEnabled (topHandle ());
+}
+
+boolean isFocusAncestor () {
+ Display display = getDisplay ();
+ Control control = display.getFocusControl ();
+ while (control != null && control != this) {
+ control = control.parent;
+ }
+ return control == this;
+}
+
public boolean isFocusControl () {
checkWidget();
return hasFocus ();
}
-/**
- * Returns <code>true</code> if the underlying operating
- * system supports this reparenting, otherwise <code>false</code>
- *
- * @return <code>true</code> if the widget can be reparented, otherwise <code>false</code>
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public boolean isReparentable () {
checkWidget();
return false;
}
-boolean isShowing () {
- /*
- * This is not complete. Need to check if the
- * widget is obscurred by a parent or sibling.
- */
- /* AW
- if (!isVisible ()) return false;
- Control control = this;
- while (control != null) {
- Point size = control.getSize ();
- if (size.x == 0 || size.y == 0) {
- return false;
- }
- control = control.parent;
- }
- */
- return true;
- /*
- * Check to see if current damage is included.
- */
-// if (!OS.IsWindowVisible (handle)) return false;
-// int flags = OS.DCX_CACHE | OS.DCX_CLIPCHILDREN | OS.DCX_CLIPSIBLINGS;
-// int hDC = OS.GetDCEx (handle, 0, flags);
-// int result = OS.GetClipBox (hDC, new RECT ());
-// OS.ReleaseDC (handle, hDC);
-// return result != OS.NULLREGION;
-}
-
boolean isTabGroup () {
- Control [] tabList = parent._getTabList ();
- if (tabList != null) {
- for (int i=0; i<tabList.length; i++) {
- if (tabList [i] == this) return true;
- }
- }
- /* AW
- int bits = OS.GetWindowLong (handle, OS.GWL_STYLE);
- return (bits & OS.WS_TABSTOP) != 0;
- */
- // AW: Motif:
- int code = traversalCode ();
- if ((code & (SWT.TRAVERSE_ARROW_PREVIOUS | SWT.TRAVERSE_ARROW_NEXT)) != 0) return false;
- return (code & (SWT.TRAVERSE_TAB_PREVIOUS | SWT.TRAVERSE_TAB_NEXT)) != 0;
+ return false;
}
boolean isTabItem () {
- Control [] tabList = parent._getTabList ();
- if (tabList != null) {
- for (int i=0; i<tabList.length; i++) {
- if (tabList [i] == this) return false;
- }
- }
- /* AW
- int bits = OS.GetWindowLong (handle, OS.GWL_STYLE);
- if ((bits & OS.WS_TABSTOP) != 0) return false;
- int code = OS.SendMessage (handle, OS.WM_GETDLGCODE, 0, 0);
- if ((code & OS.DLGC_STATIC) != 0) return false;
- if ((code & OS.DLGC_WANTALLKEYS) != 0) return false;
- if ((code & OS.DLGC_WANTARROWS) != 0) return false;
- if ((code & OS.DLGC_WANTTAB) != 0) return false;
- */
- // AW: Motif
- int code = traversalCode ();
- return (code & (SWT.TRAVERSE_ARROW_PREVIOUS | SWT.TRAVERSE_ARROW_NEXT)) != 0;
-}
-/**
- * Returns <code>true</code> if the receiver is visible and all
- * of the receiver's ancestors are visible and <code>false</code>
- * otherwise.
- *
- * @return the receiver's visibility state
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see #getVisible
- */
+ return false;
+}
+
public boolean isVisible () {
checkWidget();
- return getVisible () && parent.isVisible ();
-}
-void manageChildren () {
-/* AW
- OS.XtSetMappedWhenManaged (handle, false);
- OS.XtManageChild (handle);
- int [] argList = {OS.XmNborderWidth, 0};
- OS.XtGetValues (handle, argList, argList.length / 2);
- OS.XtResizeWidget (handle, 1, 1, argList [1]);
- OS.XtSetMappedWhenManaged (handle, true);
-*/
+ return OS.IsControlVisible (topHandle ());
}
+
Decorations menuShell () {
return parent.menuShell ();
}
-boolean mnemonicHit (char key) {
- return false;
-}
-boolean mnemonicMatch (char key) {
- return false;
-}
-/**
- * Moves the receiver above the specified control in the
- * drawing order. If the argument is null, then the receiver
- * is moved to the top of the drawing order. The control at
- * the top of the drawing order will not be covered by other
- * controls even if they occupy intersecting areas.
- *
- * @param the sibling control (or null)
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_INVALID_ARGUMENT - if the control has been disposed</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public void moveAbove (Control control) {
- checkWidget();
- if (control != null && control.isDisposed ()) error(SWT.ERROR_INVALID_ARGUMENT);
- setZOrder (control, true);
-}
-/**
- * Moves the receiver below the specified control in the
- * drawing order. If the argument is null, then the receiver
- * is moved to the bottom of the drawing order. The control at
- * the bottom of the drawing order will be covered by all other
- * controls which occupy intersecting areas.
- *
- * @param the sibling control (or null)
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_INVALID_ARGUMENT - if the control has been disposed</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public void moveBelow (Control control) {
- checkWidget();
- if (control != null && control.isDisposed ()) error(SWT.ERROR_INVALID_ARGUMENT);
- setZOrder (control, false);
-}
-/**
- * Causes the receiver to be resized to its preferred size.
- * For a composite, this involves computing the preferred size
- * from its layout, if there is one.
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see #computeSize
- */
-public void pack () {
- checkWidget();
- pack (true);
-}
-/**
- * Causes the receiver to be resized to its preferred size.
- * For a composite, this involves computing the preferred size
- * from its layout, if there is one.
- * <p>
- * If the changed flag is <code>true</code>, it indicates that the receiver's
- * <em>contents</em> have changed, therefore any caches that a layout manager
- * containing the control may have been keeping need to be flushed. When the
- * control is resized, the changed flag will be <code>false</code>, so layout
- * manager caches can be retained.
- * </p>
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see #computeSize
- */
-public void pack (boolean changed) {
- checkWidget();
- setSize (computeSize (SWT.DEFAULT, SWT.DEFAULT, changed));
-}
-int processDefaultSelection (Object callData) {
- postEvent (SWT.DefaultSelection);
- return 0;
-}
-int processFocusIn () {
- sendEvent (SWT.FocusIn);
- return 0;
-}
-int processFocusOut () {
- sendEvent (SWT.FocusOut);
- return 0;
-}
-int processHelp (Object callData) {
- sendHelpEvent (callData);
- return 0;
-}
-int processKeyDown (Object callData) {
- MacEvent macEvent = (MacEvent) callData;
- if (translateTraversal (macEvent))
- return OS.kNoErr;
- // widget could be disposed at this point
- if (isDisposed ()) return 0;
- return sendKeyEvent (SWT.KeyDown, macEvent);
+
+int kEventControlContextualMenuClick (int nextHandler, int theEvent, int userData) {
+ if (menu != null && !menu.isDisposed ()) {
+ org.eclipse.swt.internal.carbon.Point pt = new org.eclipse.swt.internal.carbon.Point ();
+ OS.GetEventParameter (theEvent, OS.kEventParamMouseLocation, OS.typeQDPoint, null, pt.sizeof, null, pt);
+ Rect rect = new Rect ();
+ int window = OS.GetControlOwner (handle);
+ OS.GetWindowBounds (window, (short) OS.kWindowContentRgn, rect);
+ menu.setLocation (pt.h + rect.left, pt.v + rect.top);
+ menu.setVisible (true);
+ return OS.noErr;
+ }
+ return OS.eventNotHandledErr;
}
-int processKeyUp (Object callData) {
- // widget could be disposed at this point
- if (isDisposed ()) return 0;
- return sendKeyEvent (SWT.KeyUp, (MacEvent) callData);
+
+int kEventControlDraw (int nextHandler, int theEvent, int userData) {
+ int result = super.kEventControlDraw (nextHandler, theEvent, userData);
+ int [] theControl = new int [1];
+ OS.GetEventParameter (theEvent, OS.kEventParamDirectObject, OS.typeControlRef, null, 4, null, theControl);
+ if (theControl [0] != handle) return result;
+ if (!hooks (SWT.Paint) && !filters (SWT.Paint)) return result;
+
+ /* Retrieve the damage region */
+ int [] region = new int [1];
+ OS.GetEventParameter (theEvent, OS.kEventParamRgnHandle, OS.typeQDRgnHandle, null, 4, null, region);
+ Rect bounds = new Rect ();
+ OS.GetRegionBounds (region [0], bounds);
+ Rect rect = new Rect ();
+ OS.GetControlBounds (handle, rect);
+ if (!OS.SectRect (rect, bounds, bounds)) return result;
+ OS.OffsetRect (bounds, (short) -rect.left, (short) -rect.top);
+
+ GCData data = new GCData ();
+ data.paintEvent = theEvent;
+ GC gc = GC.carbon_new (this, data);
+
+ /* Send the paint event */
+ Event event = new Event ();
+ event.gc = gc;
+ event.x = bounds.left;
+ event.y = bounds.top;
+ event.width = bounds.right - bounds.left;
+ event.height = bounds.bottom - bounds.top;
+// gc.setClipping (Region.carbon_new (region [0]));
+ sendEvent (SWT.Paint, event);
+ event.gc = null;
+ gc.dispose ();
+
+ return result;
}
-int processModify (Object callData) {
- sendEvent (SWT.Modify);
- return 0;
+
+int kEventControlSetCursor (int nextHandler, int theEvent, int userData) {
+ Cursor cursor = findCursor ();
+ if (cursor != null) {
+ setCursor (cursor.handle);
+ return OS.noErr;
+ }
+ return OS.eventNotHandledErr;
}
-int processMouseDown (MacMouseEvent mmEvent) {
+
+int kEventControlSetFocusPart (int nextHandler, int theEvent, int userData) {
Display display = getDisplay ();
- Shell shell = getShell ();
- display.hideToolTip ();
- int button= mmEvent.getButton();
- sendMouseEvent (SWT.MouseDown, button, mmEvent);
- if (button == 2 && hooks (SWT.DragDetect)) {
- sendEvent (SWT.DragDetect);
- }
- if (button == 3 && menu != null) {
- /* AW
- OS.XmProcessTraversal (handle, OS.XmTRAVERSE_CURRENT);
- menu.setVisible (true);
- */
- }
- int clickTime = display.getDoubleClickTime ();
- int lastTime = display.lastTime, eventTime = mmEvent.getWhen();
- int lastButton = display.lastButton, eventButton = button;
- if (lastButton == eventButton && lastTime != 0 && Math.abs (lastTime - eventTime) <= clickTime) {
- sendMouseEvent (SWT.MouseDoubleClick, eventButton, mmEvent);
+ if (!display.ignoreFocus) {
+ short [] part = new short [1];
+ OS.GetEventParameter (theEvent, OS.kEventParamControlPart, OS.typeControlPartCode, null, 2, null, part);
+ sendFocusEvent (part [0] != 0);
}
- display.lastTime = eventTime == 0 ? 1 : eventTime;
- display.lastButton = eventButton;
+ return OS.eventNotHandledErr;
+}
+int kEventMouseDown (int nextHandler, int theEvent, int userData) {
+ Shell shell = getShell ();
+ if ((state & GRAB) != 0) {
+ int [] clickCount = new int [1];
+ OS.GetEventParameter (theEvent, OS.kEventParamClickCount, OS.typeUInt32, null, 4, null, clickCount);
+ sendMouseEvent (SWT.MouseDown, theEvent);
+ if (clickCount [0] == 2) sendMouseEvent (SWT.MouseDoubleClick, theEvent);
+ Display display = getDisplay ();
+ display.grabControl = this;
+ }
/*
* It is possible that the shell may be
* disposed at this point. If this happens
* don't send the activate and deactivate
* events.
- */
+ */
if (!shell.isDisposed ()) {
shell.setActiveControl (this);
}
- return 0;
-}
-int processMouseEnter (MacMouseEvent mme) {
- /* AW
- XCrossingEvent xEvent = new XCrossingEvent ();
- OS.memmove (xEvent, callData, XCrossingEvent.sizeof);
- if (xEvent.mode != OS.NotifyNormal) return 0;
- if (xEvent.subwindow != 0) return 0;
- */
- Event event = new Event ();
- Point p= MacUtil.toControl(handle, mme.getWhere());
- event.x = p.x;
- event.y = p.y;
- postEvent (SWT.MouseEnter, event);
- return 0;
+ return OS.eventNotHandledErr;
}
-int processMouseMove (MacMouseEvent mme) {
- Display display = getDisplay ();
- display.addMouseHoverTimeOut (handle);
- sendMouseEvent (SWT.MouseMove, 0, mme);
- return 0;
+
+int kEventMouseDragged (int nextHandler, int theEvent, int userData) {
+ sendMouseEvent (SWT.MouseMove, theEvent);
+ return OS.eventNotHandledErr;
}
-int processMouseExit (MacMouseEvent mme) {
- Display display = getDisplay ();
- display.removeMouseHoverTimeOut ();
- display.hideToolTip ();
- /* AW
- XCrossingEvent xEvent = new XCrossingEvent ();
- OS.memmove (xEvent, callData, XCrossingEvent.sizeof);
- if (xEvent.mode != OS.NotifyNormal) return 0;
- if (xEvent.subwindow != 0) return 0;
- */
- Event event = new Event ();
- Point p= MacUtil.toControl(handle, mme.getWhere());
- event.x = p.x;
- event.y = p.y;
- postEvent (SWT.MouseExit, event);
- return 0;
+
+int kEventMouseMoved (int nextHandler, int theEvent, int userData) {
+ sendMouseEvent (SWT.MouseMove, theEvent);
+ return OS.eventNotHandledErr;
}
-int processMouseHover (MacMouseEvent mme) {
- Display display = getDisplay ();
- Event event = new Event ();
- Point local = toControl (display.getCursorLocation ());
- event.x = local.x; event.y = local.y;
- postEvent (SWT.MouseHover, event);
- display.showToolTip (handle, toolTipText);
- return 0;
+
+int kEventMouseUp (int nextHandler, int theEvent, int userData) {
+ sendMouseEvent (SWT.MouseUp, theEvent);
+ return OS.eventNotHandledErr;
+}
+
+int kEventRawKeyDown (int nextHandler, int theEvent, int userData) {
+ int [] keyCode = new int [1];
+ OS.GetEventParameter (theEvent, OS.kEventParamKeyCode, OS.typeUInt32, null, keyCode.length * 4, null, keyCode);
+ //NOT DONE
+ if (keyCode [0] == 114) {
+ //HELP KEY
+ }
+ if (!sendKeyEvent (SWT.KeyDown, theEvent)) return OS.noErr;
+ return OS.eventNotHandledErr;
}
-int processMouseUp (MacMouseEvent mmEvent) {
+
+int kEventRawKeyModifiersChanged (int nextHandler, int theEvent, int userData) {
+ int [] modifiers = new int [1];
+ OS.GetEventParameter (theEvent, OS.kEventParamKeyModifiers, OS.typeUInt32, null, modifiers.length * 4, null, modifiers);
Display display = getDisplay ();
- display.hideToolTip ();
- sendMouseEvent (SWT.MouseUp, mmEvent.getButton(), mmEvent);
- return 0;
+ int lastModifiers = display.lastModifiers;
+ int type = SWT.KeyUp;
+ if ((modifiers [0] & OS.shiftKey) != 0 && (lastModifiers & OS.shiftKey) == 0) type = SWT.KeyDown;
+ if ((modifiers [0] & OS.controlKey) != 0 && (lastModifiers & OS.controlKey) == 0) type = SWT.KeyDown;
+ if ((modifiers [0] & OS.cmdKey) != 0 && (lastModifiers & OS.cmdKey) == 0) type = SWT.KeyDown;
+ if ((modifiers [0] & OS.optionKey) != 0 && (lastModifiers & OS.optionKey) == 0) type = SWT.KeyDown;
+ boolean result = sendKeyEvent (type, theEvent);
+ display.lastModifiers = modifiers [0];
+ return result ? OS.eventNotHandledErr : OS.noErr;
}
-int processPaint (Object callData) {
- //if (!hooks (SWT.Paint)) return 0;
-
- /*
- if (!fVisible || fDrawCount > 0) {
- System.out.println("Control.processPaint: premature exit");
- return 0;
- }
- */
- /* AW
- event.count = xEvent.count;
- event.time = OS.XtLastTimestampProcessed (xDisplay);
- */
-
- GC gc= new GC (this);
- MacControlEvent me= (MacControlEvent) callData;
- Rectangle r= gc.carbon_focus(me.getDamageRegionHandle());
- if (r == null || !r.isEmpty()) {
-
- if (!MacUtil.HIVIEW) {
- // erase background
- //if ((state & CANVAS) != 0) {
- if ((style & SWT.NO_BACKGROUND) == 0) {
- //gc.setBackground(getDisplay().getSystemColor(SWT.COLOR_YELLOW));
- gc.fillRectangle(r);
- }
- //}
- }
-
- if (hooks (SWT.Paint)) {
- Event event = new Event();
- event.gc = gc;
- event.x = r.x; event.y = r.y;
- event.width = r.width; event.height = r.height;
-
- sendEvent (SWT.Paint, event);
- }
- }
-
- gc.carbon_unfocus ();
-
- if (!gc.isDisposed ())
- gc.dispose ();
- return 0;
+int kEventRawKeyRepeat (int nextHandler, int theEvent, int userData) {
+ if (!sendKeyEvent (SWT.KeyDown, theEvent)) return OS.noErr;
+ return OS.eventNotHandledErr;
}
-int processResize (Object callData) {
- sendEvent (SWT.Resize);
- // widget could be disposed at this point
- return 0;
+
+int kEventRawKeyUp (int nextHandler, int theEvent, int userData) {
+ if (!sendKeyEvent (SWT.KeyUp, theEvent)) return OS.noErr;
+ return OS.eventNotHandledErr;
}
-int processSelection (Object callData) {
- postEvent (SWT.Selection);
- return 0;
+
+public void moveAbove (Control control) {
+ checkWidget();
+ int inOther = 0;
+ if (control != null) {
+ if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+ if (parent != control.parent) return;
+ inOther = control.topHandle ();
+ }
+ setZOrder (control, true);
}
-int processSetFocus (Object callData) {
- /*
- * Ignore focus change events when the window getting or losing
- * focus is a menu. Because XmGetFocusWidget() does not answer
- * the menu shell (it answers the menu parent), it is necessary
- * to use XGetInputFocus() to get the real X focus window.
- */
- /* AW
- int xDisplay = xEvent.display;
- if (xDisplay == 0) return 0;
- int [] unused = new int [1], xWindow = new int [1];
- OS.XGetInputFocus (xDisplay, xWindow, unused);
- if (xWindow [0] != 0) {
- int widget = OS.XtWindowToWidget (xDisplay, xWindow [0]);
- if (widget != 0 && OS.XtClass (widget) == OS.XmMenuShellWidgetClass ()) return 0;
+
+public void moveBelow (Control control) {
+ checkWidget();
+ int inOther = 0;
+ if (control != null) {
+ if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+ if (parent != control.parent) return;
+ inOther = control.topHandle ();
}
- */
- /* Process the focus change for the widget */
+ setZOrder (control, false);
+}
- Shell shell = getShell ();
- Boolean b = (Boolean) callData;
- if (b.booleanValue ()) {
-
- processFocusIn ();
- // widget could be disposed at this point
- /*
- * It is possible that the shell may be
- * disposed at this point. If this happens
- * don't send the activate and deactivate
- * events.
- */
- if (!shell.isDisposed ()) {
- shell.setActiveControl (this);
- }
- } else {
- Display display = getDisplay ();
+public void pack () {
+ checkWidget();
+ pack (true);
+}
+
+public void pack (boolean changed) {
+ checkWidget();
+ setSize (computeSize (SWT.DEFAULT, SWT.DEFAULT, changed));
+}
- processFocusOut ();
- // widget could be disposed at this point
- /*
- * It is possible that the shell may be
- * disposed at this point. If this happens
- * don't send the activate and deactivate
- * events.
- */
- if (!shell.isDisposed ()) {
- Control control = display.getFocusControl ();
- if (control == null || shell != control.getShell () ) {
- shell.setActiveControl (null);
- }
- }
- }
- return 0;
-}
-void propagateChildren (boolean enabled) {
- propagateWidget (enabled);
-}
-void propagateWidget (boolean enabled) {
- propagateHandle (enabled, handle);
-}
-void realizeChildren () {
- if (!isEnabled ()) propagateWidget (false);
-}
-/**
- * Causes the entire bounds of the receiver to be marked
- * as needing to be redrawn. The next time a paint request
- * is processed, the control will be completely painted.
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see #update
- */
public void redraw () {
checkWidget();
- redrawWidget (0, 0, 0, 0, false);
-}
-/**
- * Causes the rectangular area of the receiver specified by
- * the arguments to be marked as needing to be redrawn.
- * The next time a paint request is processed, that area of
- * the receiver will be painted. If the <code>all</code> flag
- * is <code>true</code>, any children of the receiver which
- * intersect with the specified area will also paint their
- * intersecting areas. If the <code>all</code> flag is
- * <code>false</code>, the children will not be painted.
- *
- * @param x the x coordinate of the area to draw
- * @param y the y coordinate of the area to draw
- * @param width the width of the area to draw
- * @param height the height of the area to draw
- * @param all <code>true</code> if children should redraw, and <code>false</code> otherwise
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see #update
- */
+ redrawWidget (handle);
+}
+
public void redraw (int x, int y, int width, int height, boolean all) {
checkWidget ();
- if (width <= 0 || height <= 0) return;
- redrawWidget (x, y, width, height, all);
+ if (!OS.IsControlVisible (handle)) return;
+ Rect rect = new Rect ();
+ OS.GetControlBounds (handle, rect);
+ x += rect.left;
+ y += rect.top;
+ OS.SetRect (rect, (short) x, (short) y, (short)(x + width), (short)(y + height));
+ int window = OS.GetControlOwner (handle);
+ OS.InvalWindowRect (window, rect);
+}
+
+void register () {
+ super.register ();
+ WidgetTable.put (handle, this);
}
-void redrawWidget (int x, int y, int width, int height, boolean all) {
- redrawHandle (x, y, width, height, handle, all);
+
+void releaseHandle () {
+ super.releaseHandle ();
+ handle = 0;
}
+
void releaseWidget () {
super.releaseWidget ();
- Display display = getDisplay ();
- display.releaseToolTipHandle (handle);
- toolTipText = null;
if (menu != null && !menu.isDisposed ()) {
menu.dispose ();
}
@@ -1547,23 +737,7 @@ void releaseWidget () {
parent = null;
layoutData = null;
}
-/**
- * Removes the listener from the collection of listeners who will
- * be notified when the control is moved or resized.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see ControlListener
- * @see #addControlListener
- */
+
public void removeControlListener (ControlListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -1571,23 +745,7 @@ public void removeControlListener (ControlListener listener) {
eventTable.unhook (SWT.Move, listener);
eventTable.unhook (SWT.Resize, listener);
}
-/**
- * Removes the listener from the collection of listeners who will
- * be notified when the control gains or loses focus.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see FocusListener
- * @see #addFocusListener
- */
+
public void removeFocusListener(FocusListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -1595,46 +753,14 @@ public void removeFocusListener(FocusListener listener) {
eventTable.unhook(SWT.FocusIn, listener);
eventTable.unhook(SWT.FocusOut, listener);
}
-/**
- * Removes the listener from the collection of listeners who will
- * be notified when the help events are generated for the control.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see HelpListener
- * @see #addHelpListener
- */
+
public void removeHelpListener (HelpListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
if (eventTable == null) return;
eventTable.unhook (SWT.Help, listener);
}
-/**
- * Removes the listener from the collection of listeners who will
- * be notified when keys are pressed and released on the system keyboard.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see KeyListener
- * @see #addKeyListener
- */
+
public void removeKeyListener(KeyListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -1642,23 +768,7 @@ public void removeKeyListener(KeyListener listener) {
eventTable.unhook(SWT.KeyUp, listener);
eventTable.unhook(SWT.KeyDown, listener);
}
-/**
- * Removes the listener from the collection of listeners who will
- * be notified when mouse buttons are pressed and released.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see MouseListener
- * @see #addMouseListener
- */
+
public void removeMouseListener(MouseListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -1667,46 +777,14 @@ public void removeMouseListener(MouseListener listener) {
eventTable.unhook(SWT.MouseUp, listener);
eventTable.unhook(SWT.MouseDoubleClick, listener);
}
-/**
- * Removes the listener from the collection of listeners who will
- * be notified when the mouse moves.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see MouseMoveListener
- * @see #addMouseMoveListener
- */
+
public void removeMouseMoveListener(MouseMoveListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
if (eventTable == null) return;
eventTable.unhook(SWT.MouseMove, listener);
}
-/**
- * Removes the listener from the collection of listeners who will
- * be notified when the mouse passes or hovers over controls.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see MouseTrackListener
- * @see #addMouseTrackListener
- */
+
public void removeMouseTrackListener(MouseTrackListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -1715,455 +793,233 @@ public void removeMouseTrackListener(MouseTrackListener listener) {
eventTable.unhook (SWT.MouseExit, listener);
eventTable.unhook (SWT.MouseHover, listener);
}
-/**
- * Removes the listener from the collection of listeners who will
- * be notified when the receiver needs to be painted.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see PaintListener
- * @see #addPaintListener
- */
+
public void removePaintListener(PaintListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
if (eventTable == null) return;
eventTable.unhook(SWT.Paint, listener);
-}/**
- * Removes the listener from the collection of listeners who will
- * be notified when traversal events occur.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see TraverseListener
- * @see #addTraverseListener
- */
+}
+
public void removeTraverseListener(TraverseListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
if (eventTable == null) return;
eventTable.unhook (SWT.Traverse, listener);
}
-void sendHelpEvent (Object callData) {
- Control control = this;
- while (control != null) {
- if (control.hooks (SWT.Help)) {
- control.postEvent (SWT.Help);
- return;
+
+void sendFocusEvent (boolean focusIn) {
+ Shell shell = getShell ();
+ if (focusIn) {
+ sendEvent (SWT.FocusIn);
+ } else {
+ sendEvent (SWT.FocusOut);
+ }
+
+ /*
+ * It is possible that the shell may be
+ * disposed at this point. If this happens
+ * don't send the activate and deactivate
+ * events.
+ */
+ if (focusIn) {
+ if (!shell.isDisposed ()) {
+ shell.setActiveControl (this);
+ }
+ } else {
+ if (!shell.isDisposed ()) {
+ Display display = shell.getDisplay ();
+ Control control = display.getFocusControl ();
+ if (control == null || shell != control.getShell () ) {
+ shell.setActiveControl (null);
+ }
}
- control = control.parent;
}
}
-final int sendKeyEvent (int type, MacEvent mEvent) {
+
+boolean sendKeyEvent (int type, int theEvent) {
Event event = new Event ();
- event.time = mEvent.getWhen();
- setKeyState (event, mEvent);
- return sendKeyEvent (type, mEvent, event);
-// Control control = this;
-// if ((state & CANVAS) != 0) {
-// if ((style & SWT.NO_FOCUS) != 0) {
-// Display display = getDisplay ();
-// control = display.getFocusControl ();
-// }
-// }
-// if (control != null) {
-// control.postEvent (type, event);
-// }
+ event.type = type;
+ setKeyState (event, theEvent);
+ return sendKeyEvent (type, event);
}
-int sendKeyEvent (int type, MacEvent mEvent, Event event) {
+
+boolean sendKeyEvent (int type, Event event) {
postEvent (type, event);
- return 0;
+ return true;
+}
+
+boolean sendMouseEvent (int type, int theEvent) {
+ short [] button = new short [1];
+ OS.GetEventParameter (theEvent, OS.kEventParamMouseButton, OS.typeMouseButton, null, 2, null, button);
+ return sendMouseEvent (type, button [0], theEvent);
}
-final void sendMouseEvent (int type, int button, MacMouseEvent mme) {
+
+boolean sendMouseEvent (int type, short button, int theEvent) {
Event event = new Event ();
- event.time = mme.getWhen();
- event.button = button;
- Point ml= MacUtil.toControl(handle, mme.getWhere());
- event.x = ml.x; event.y = ml.y;
- // AW setInputState (event, mEvent);
- event.stateMask= mme.getState();
+ event.type = type;
+ org.eclipse.swt.internal.carbon.Point pt = new org.eclipse.swt.internal.carbon.Point ();
+ OS.GetEventParameter (theEvent, OS.kEventParamMouseLocation, OS.typeQDPoint, null, pt.sizeof, null, pt);
+ Rect rect = new Rect ();
+ int window = OS.GetControlOwner (handle);
+ OS.GetWindowBounds (window, (short) OS.kWindowContentRgn, rect);
+ event.x = pt.h - rect.left;
+ event.y = pt.v - rect.top;
+ OS.GetControlBounds (handle, rect);
+ event.x -= rect.left;
+ event.y -= rect.top;
+ setInputState (event, theEvent);
postEvent (type, event);
+ return true;
}
-/**
- * Sets the receiver's background color to the color specified
- * by the argument, or to the default system color for the control
- * if the argument is null.
- *
- * @param color the new color (or null)
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
+boolean sendMouseEvent (int type, short button, int chord, short x, short y, int modifiers) {
+ Event event = new Event ();
+ event.type = type;
+ event.x = x;
+ event.y = y;
+ setInputState (event, button, chord, modifiers);
+ sendEvent (type, event);
+ return true;
+}
+
public void setBackground (Color color) {
checkWidget();
- int pixel = -1;
if (color != null) {
if (color.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
- pixel = color.handle;
}
- setBackgroundPixel (pixel);
-}
-void setBackgroundPixel (int pixel) {
- /* AW
- int [] argList = {OS.XmNforeground, 0, OS.XmNhighlightColor, 0};
- OS.XtGetValues (handle, argList, argList.length / 2);
- OS.XmChangeColor (handle, pixel);
- OS.XtSetValues (handle, argList, argList.length / 2);
- */
- if (background == pixel) return;
- background = pixel;
- redrawHandle(0, 0, 0, 0, handle, false);
-}
-/**
- * Sets the receiver's size and location to the rectangular
- * area specified by the arguments. The <code>x</code> and
- * <code>y</code> arguments are relative to the receiver's
- * parent (or its display if its parent is null).
- * <p>
- * Note: Attempting to set the width or height of the
- * receiver to a negative number will cause that
- * value to be set to zero instead.
- * </p>
- *
- * @param x the new x coordinate for the receiver
- * @param y the new y coordinate for the receiver
- * @param width the new width for the receiver
- * @param height the new height for the receiver
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ background = color != null ? color.handle : null;
+}
+
public void setBounds (int x, int y, int width, int height) {
checkWidget();
- int topHandle = topHandle ();
- width = Math.max(width, 0);
- height = Math.max(height, 0);
- MacRect br= new MacRect();
- short[] bounds= br.getData();
- short[] pbounds= new short[4];
- internalGetControlBounds(topHandle, br);
- OS.GetControlBounds(parent.handle, pbounds);
- boolean sameOrigin;
- if (MacUtil.USE_FRAME) {
- sameOrigin = bounds[1] == x && bounds[0] == y;
- } else {
- sameOrigin = (bounds[1]-pbounds[1]) == x && (bounds[0]-pbounds[0]) == y;
- }
- boolean sameExtent = (bounds[3]-bounds[1]) == width && (bounds[2]-bounds[0]) == height;
- if (sameOrigin && sameExtent) return;
- internalSetBounds(topHandle, br, pbounds[1]+x, pbounds[0]+y, width, height);
- if (!sameOrigin) sendEvent (SWT.Move);
- if (!sameExtent) sendEvent (SWT.Resize);
-}
-/**
- * Sets the receiver's size and location to the rectangular
- * area specified by the argument. The <code>x</code> and
- * <code>y</code> fields of the rectangle are relative to
- * the receiver's parent (or its display if its parent is null).
- * <p>
- * Note: Attempting to set the width or height of the
- * receiver to a negative number will cause that
- * value to be set to zero instead.
- * </p>
- *
- * @param rect the new bounds for the receiver
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ setBounds (topHandle (), x, y, width, height, true, true, true);
+}
+
public void setBounds (Rectangle rect) {
if (rect == null) error (SWT.ERROR_NULL_ARGUMENT);
setBounds (rect.x, rect.y, rect.width, rect.height);
}
-/**
- * If the argument is <code>true</code>, causes the receiver to have
- * all mouse events delivered to it until the method is called with
- * <code>false</code> as the argument.
- *
- * @param capture <code>true</code> to capture the mouse, and <code>false</code> to release it
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public void setCapture (boolean capture) {
checkWidget();
- System.out.println("Control.setCapture: nyi");
- /* AW
- int display = OS.XtDisplay (handle);
- if (display == 0) return;
- if (capture) {
- int window = OS.XtWindow (handle);
- if (window == 0) return;
- OS.XGrabPointer (
- display,
- window,
- 0,
- OS.ButtonPressMask | OS.ButtonReleaseMask | OS.PointerMotionMask,
- OS.GrabModeAsync,
- OS.GrabModeAsync,
- OS.None,
- OS.None,
- OS.CurrentTime);
- } else {
- OS.XUngrabPointer (display, OS.CurrentTime);
- }
- */
-}
-/**
- * Sets the receiver's cursor to the cursor specified by the
- * argument, or to the default cursor for that kind of control
- * if the argument is null.
- * <p>
- * When the mouse pointer passes over a control its appearance
- * is changed to match the control's cursor.
- * </p>
- *
- * @param cursor the new cursor (or null)
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+}
+
public void setCursor (Cursor cursor) {
checkWidget();
- if (cursor == null) {
- cursor= null;
- } else {
- if (cursor.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
- this.cursor= cursor;
+ if (cursor != null && cursor.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+ this.cursor = cursor;
+ org.eclipse.swt.internal.carbon.Point where = new org.eclipse.swt.internal.carbon.Point ();
+ OS.GetGlobalMouse (where);
+ int [] theWindow = new int [1];
+ if (OS.FindWindow (where, theWindow) != OS.inContent) return;
+ if (theWindow [0] == 0) return;
+ Rect rect = new Rect ();
+ OS.GetWindowBounds (theWindow [0], (short) OS.kWindowContentRgn, rect);
+ CGPoint inPoint = new CGPoint ();
+ inPoint.x = where.h - rect.left;
+ inPoint.y = where.v - rect.top;
+ int [] theRoot = new int [1];
+ OS.GetRootControl (theWindow [0], theRoot);
+ int [] theControl = new int [1];
+ OS.HIViewGetSubviewHit (theRoot [0], inPoint, true, theControl);
+ int cursorControl = theControl [0];
+ while (theControl [0] != 0 && theControl [0] != handle) {
+ OS.GetSuperControl (theControl [0], theControl);
}
+ if (theControl [0] == 0) return;
+ org.eclipse.swt.internal.carbon.Point localPoint = new org.eclipse.swt.internal.carbon.Point ();
+ localPoint.h = (short) inPoint.x;
+ localPoint.v = (short) inPoint.y;
+ int modifiers = OS.GetCurrentEventKeyModifiers ();
+ boolean [] cursorWasSet = new boolean [1];
+ OS.HandleControlSetCursor (cursorControl, localPoint, (short) modifiers, cursorWasSet);
+ if (!cursorWasSet [0]) OS.SetThemeCursor (OS.kThemeArrowCursor);
}
-/**
- * Enables the receiver if the argument is <code>true</code>,
- * and disables it otherwise. A disabled control is typically
- * not selectable from the user interface and draws with an
- * inactive or "grayed" look.
- *
- * @param enabled the new enabled state
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
+void setCursor (int cursor) {
+ switch (cursor) {
+ case OS.kThemePointingHandCursor:
+ case OS.kThemeArrowCursor:
+ case OS.kThemeSpinningCursor:
+ case OS.kThemeCrossCursor:
+ case OS.kThemeWatchCursor:
+ case OS.kThemeIBeamCursor:
+ case OS.kThemeNotAllowedCursor:
+ case OS.kThemeResizeLeftRightCursor:
+ case OS.kThemeResizeLeftCursor:
+ case OS.kThemeResizeRightCursor:
+ OS.SetThemeCursor (cursor);
+ break;
+ default:
+ OS.SetCursor (cursor);
+ }
+}
+
public void setEnabled (boolean enabled) {
checkWidget();
- enableWidget (enabled);
- if (!enabled || (isEnabled () && enabled)) {
- propagateChildren (enabled);
+ if (enabled) {
+ if ((state & DISABLED) == 0) return;
+ state &= ~DISABLED;
+ OS.EnableControl (topHandle ());
+ } else {
+ if ((state & DISABLED) != 0) return;
+ state |= DISABLED;
+ OS.DisableControl (topHandle ());
}
}
-/**
- * Causes the receiver to have the <em>keyboard focus</em>,
- * such that all keyboard events will be delivered to it.
- *
- * @return <code>true</code> if the control got focus, and <code>false</code> if it was unable to.
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see #forceFocus
- */
+
public boolean setFocus () {
checkWidget();
return forceFocus ();
}
-/**
- * Sets the font that the receiver will use to paint textual information
- * to the font specified by the argument, or to the default font for that
- * kind of control if the argument is null.
- *
- * @param font the new font (or null)
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public void setFont (Font font) {
checkWidget();
- if (font == null) font = defaultFont ();
- if (font.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+ if (font != null) {
+ if (font.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+ }
this.font = font;
+ setFontStyle (font);
+}
- int fontHandle = fontHandle ();
- if (OS.SetControlFontStyle(fontHandle, font.handle.fID, font.handle.fSize, font.handle.fFace) != OS.kNoErr)
- ; //System.out.println("Control.setFont("+this+"): error");
-}
-/**
- * Sets the receiver's foreground color to the color specified
- * by the argument, or to the default system color for the control
- * if the argument is null.
- *
- * @param color the new color (or null)
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public void setForeground (Color color) {
- checkWidget();
- /* AW
- if (color == null) {
- setForegroundPixel (defaultForeground ());
+void setFontStyle (Font font) {
+ ControlFontStyleRec fontStyle = new ControlFontStyleRec ();
+ if (font != null) {
+ fontStyle.flags |= OS.kControlUseFontMask | OS.kControlUseSizeMask | OS.kControlUseFaceMask;
+ fontStyle.font = font.id;
+ fontStyle.style = font.style;
+ fontStyle.size = font.size;
} else {
- if (color.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
- setForegroundPixel (color.handle.pixel);
+ fontStyle.flags |= OS.kControlUseThemeFontIDMask;
+ fontStyle.font = (short) defaultThemeFont ();
}
- */
- int pixel = -1;
+ OS.SetControlFontStyle (handle, fontStyle);
+}
+
+public void setForeground (Color color) {
+ checkWidget();
if (color != null) {
if (color.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
- pixel = color.handle;
}
- setForegroundPixel (pixel);
-}
-void setForegroundPixel (int pixel) {
- /* AW
- int [] argList = {OS.XmNforeground, pixel};
- OS.XtSetValues (handle, argList, argList.length / 2);
- int xDisplay = OS.XtDisplay (handle);
- if (xDisplay == 0) return;
- int xWindow = OS.XtWindow (handle);
- if (xWindow == 0) return;
- OS.XClearArea (xDisplay, xWindow, 0, 0, 0, 0, true);
- */
- if (foreground == pixel) return;
- foreground = pixel;
- redrawHandle(0, 0, 0, 0, handle, false);
-}
-void setGrabCursor (int cursor) {
- System.out.println("Control.setGrabCursor: nyi");
-}
-/**
- * Sets the layout data associated with the receiver to the argument.
- *
- * @param layoutData the new layout data for the receiver.
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ foreground = color != null ? color.handle : null;
+}
+
public void setLayoutData (Object layoutData) {
checkWidget();
this.layoutData = layoutData;
}
-/**
- * Sets the receiver's location to the point specified by
- * the arguments which are relative to the receiver's
- * parent (or its display if its parent is null).
- *
- * @param x the new x coordinate for the receiver
- * @param y the new y coordinate for the receiver
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public void setLocation (int x, int y) {
checkWidget();
- /* AW
- int [] argList = {OS.XmNx, 0, OS.XmNy, 0};
- OS.XtGetValues (topHandle, argList, argList.length / 2);
- boolean sameOrigin = (x == (short) argList [1]) && (y == (short) argList [3]);
- if (sameOrigin) return;
- OS.XtMoveWidget (topHandle, x, y);
- if (!sameOrigin) sendEvent (SWT.Move);
- */
- int topHandle = topHandle ();
- MacRect br= new MacRect();
- short[] bounds= br.getData();
- short[] pbounds= new short[4];
- internalGetControlBounds(topHandle, br);
- OS.GetControlBounds(parent.handle, pbounds);
- boolean sameOrigin;
- if (MacUtil.USE_FRAME) {
- sameOrigin = (x == bounds[1]) && (y == bounds[0]);
- } else {
- sameOrigin = (x == (bounds[1]-pbounds[1])) && (y == (bounds[0]-pbounds[0]));
- }
- if (sameOrigin) return;
- internalSetBounds(topHandle, br, pbounds[1]+x, pbounds[0]+y, bounds[3]-bounds[1], bounds[2]-bounds[0]);
- sendEvent (SWT.Move);
-}
-/**
- * Sets the receiver's location to the point specified by
- * the argument which is relative to the receiver's
- * parent (or its display if its parent is null).
- *
- * @param location the new location for the receiver
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ setBounds (topHandle (), x, y, 0, 0, true, false, true);
+}
+
public void setLocation (Point location) {
if (location == null) error (SWT.ERROR_NULL_ARGUMENT);
setLocation (location.x, location.y);
}
-/**
- * Sets the receiver's pop up menu to the argument.
- * All controls may optionally have a pop up
- * menu that is displayed when the user requests one for
- * the control. The sequence of key strokes, button presses
- * and/or button releases that are used to request a pop up
- * menu is platform specific.
- *
- * @param menu the new pop up menu
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_MENU_NOT_POP_UP - the menu is not a pop up menu</li>
- * <li>ERROR_INVALID_PARENT - if the menu is not in the same widget tree</li>
- * <li>ERROR_INVALID_ARGUMENT - if the menu has been disposed</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public void setMenu (Menu menu) {
checkWidget();
if (menu != null) {
@@ -2178,411 +1034,163 @@ public void setMenu (Menu menu) {
this.menu = menu;
}
-/**
- * Changes the parent of the widget to be the one provided if
- * the underlying operating system supports this feature.
- * Answers <code>true</code> if the parent is successfully changed.
- *
- * @param parent the new parent for the control.
- * @return <code>true</code> if the parent is changed and <code>false</code> otherwise.
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li>
- * </ul>
- * @exception SWTError <ul>
- * <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
- * <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
- * </ul>
- */
public boolean setParent (Composite parent) {
checkWidget();
if (parent.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
return false;
}
-/**
- * If the argument is <code>false</code>, causes subsequent drawing
- * operations in the receiver to be ignored. No drawing of any kind
- * can occur in the receiver until the flag is set to true.
- * Graphics operations that occurred while the flag was
- * <code>false</code> are lost. When the flag is set to <code>true</code>,
- * the entire widget is marked as needing to be redrawn.
- * <p>
- * Note: This operation is a hint and may not be supported on some
- * platforms or for some widgets.
- * </p>
- *
- * @param redraw the new redraw state
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see #redraw
- * @see #update
- */
public void setRedraw (boolean redraw) {
checkWidget();
- if (redraw) {
- if (--drawCount == 0) {
- int topHandle= topHandle();
- OS.HIViewSetDrawingEnabled(topHandle, true);
- OS.HIViewSetNeedsDisplay(topHandle, true);
- }
- } else {
- if (drawCount++ == 0)
- OS.HIViewSetDrawingEnabled(topHandle(), false);
- }
+ //NOT DONE
+// if (redraw) {
+// if (--drawCount == 0) {
+// OS.HIViewSetDrawingEnabled (handle, true);
+// OS.HIViewSetNeedsDisplay (handle, true);
+// }
+// } else {
+// if (drawCount++ == 0) {
+// OS.HIViewSetDrawingEnabled (handle, false);
+// }
+// }
}
-/**
- * Sets the receiver's size to the point specified by the arguments.
- * <p>
- * Note: Attempting to set the width or height of the
- * receiver to a negative number will cause that
- * value to be set to zero instead.
- * </p>
- *
- * @param width the new width for the receiver
- * @param height the new height for the receiver
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
+boolean setRadioSelection (boolean value){
+ return false;
+}
+
public void setSize (int width, int height) {
checkWidget();
- /*
- int [] argList = {OS.XmNwidth, 0, OS.XmNheight, 0, OS.XmNborderWidth, 0};
- OS.XtGetValues (topHandle, argList, argList.length / 2);
- int newWidth = Math.max (width - (argList [5] * 2), 1);
- int newHeight = Math.max (height - (argList [5] * 2), 1);
- boolean sameExtent = (newWidth == argList [1]) && (newHeight == argList [3]);
- OS.XtResizeWidget (topHandle, newWidth, newHeight, argList [5]);
- */
- int topHandle = topHandle ();
- width = Math.max(width, 0);
- height = Math.max(height, 0);
- MacRect br= new MacRect();
- short[] bounds= br.getData();
- internalGetControlBounds(topHandle, br);
- boolean sameExtent = (bounds[3]-bounds[1]) == width && (bounds[2]-bounds[0]) == height;
- if (sameExtent) return;
- internalSetBounds(topHandle, br, bounds[1], bounds[0], width, height);
- sendEvent (SWT.Resize);
-}
-/**
- * Sets the receiver's size to the point specified by the argument.
- * <p>
- * Note: Attempting to set the width or height of the
- * receiver to a negative number will cause them to be
- * set to zero instead.
- * </p>
- *
- * @param size the new size for the receiver
- * @param height the new height for the receiver
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the point is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ setBounds (topHandle (), 0, 0, width, height, false, true, true);
+}
+
public void setSize (Point size) {
if (size == null) error (SWT.ERROR_NULL_ARGUMENT);
setSize (size.x, size.y);
}
boolean setTabGroupFocus () {
- return setTabItemFocus ();
+ return false;
}
boolean setTabItemFocus () {
- if (!isShowing ()) return false;
- return setFocus ();
-}
-
-/**
- * Sets the receiver's tool tip text to the argument, which
- * may be null indicating that no tool tip text should be shown.
- *
- * @param string the new tool tip text (or null)
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ return false;
+}
+
public void setToolTipText (String string) {
checkWidget();
toolTipText = string;
}
-/**
- * Marks the receiver as visible if the argument is <code>true</code>,
- * and marks it invisible otherwise.
- * <p>
- * If one of the receiver's ancestors is not visible or some
- * other condition makes the receiver not visible, marking
- * it visible may not actually cause it to be displayed.
- * </p>
- *
- * @param visible the new visibility state
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public void setVisible (boolean visible) {
checkWidget();
- if (this.visible != visible) {
- this.visible= visible;
- int topHandle = topHandle ();
- if (OS.IsControlVisible(topHandle) != visible) {
- OS.HIViewSetVisible(topHandle, visible);
- sendEvent (visible ? SWT.Show : SWT.Hide);
- }
- }
+ if (visible) {
+ if ((state & HIDDEN) == 0) return;
+ state &= ~HIDDEN;
+ } else {
+ if ((state & HIDDEN) != 0) return;
+ state |= HIDDEN;
+ }
+ if (visible) {
+ /*
+ * It is possible (but unlikely), that application
+ * code could have disposed the widget in the show
+ * event. If this happens, just return.
+ */
+ sendEvent (SWT.Show);
+ if (isDisposed ()) return;
+ }
+
+ /*
+ * Feature in the Macintosh. If the receiver has focus, hiding
+ * the receiver causes no control to have focus. Also, the focus
+ * needs to be cleared from any TXNObject so that it stops blinking
+ * the caret. The fix is to assign focus to the first ancestor
+ * control that takes focus. If no control will take focus, clear
+ * the focus control.
+ */
+ boolean fixFocus = false;
+ if (!visible) fixFocus = isFocusAncestor ();
+ OS.HIViewSetVisible (topHandle (), visible);
+ if (!visible) {
+ /*
+ * It is possible (but unlikely), that application
+ * code could have disposed the widget in the show
+ * event. If this happens, just return.
+ */
+ sendEvent (SWT.Hide);
+ if (isDisposed ()) return;
+ }
+ if (fixFocus) fixFocus ();
+}
+
+void setZOrder () {
+ int topHandle = topHandle ();
+ int parentHandle = parent.handle;
+ OS.HIViewAddSubview (parentHandle, topHandle);
+ //OS.EmbedControl (topHandle, parentHandle);
+ /* Place the child at (0, 0) in the parent */
+ Rect rect = new Rect ();
+ OS.GetControlBounds (parentHandle, rect);
+ rect.right = rect.left;
+ rect.bottom = rect.top;
+ OS.SetControlBounds (topHandle, rect);
}
+
void setZOrder (Control control, boolean above) {
-
- if (control != null && control.parent != parent) return;
-
- int thisHandle= topHandle();
- if (parent == null)
- error (SWT.ERROR_INVALID_PARENT);
- int destHandle= parent.handle;
- int otherHandle= 0;
- if (control != null)
- otherHandle= control.topHandle();
-
- // AW: doesn't handle reparenting case yet!
- OS.HIViewSetZOrder(thisHandle, above ? OS.kHIViewZOrderAbove : OS.kHIViewZOrderBelow, otherHandle);
-}
-/**
- * Returns a point which is the result of converting the
- * argument, which is specified in display relative coordinates,
- * to coordinates relative to the receiver.
- * <p>
- * @param point the point to be translated (must not be null)
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the point is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ int inOp = above ? OS.kHIViewZOrderBelow : OS.kHIViewZOrderAbove;
+ int inOther = control == null ? 0 : control.topHandle ();
+ OS.HIViewSetZOrder (topHandle (), inOp, inOther);
+}
+
+void sort (int [] items) {
+ /* Shell Sort from K&R, pg 108 */
+ int length = items.length;
+ for (int gap=length/2; gap>0; gap/=2) {
+ for (int i=gap; i<length; i++) {
+ for (int j=i-gap; j>=0; j-=gap) {
+ if (items [j] <= items [j + gap]) {
+ int swap = items [j];
+ items [j] = items [j + gap];
+ items [j + gap] = swap;
+ }
+ }
+ }
+ }
+}
+
public Point toControl (Point point) {
checkWidget();
if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
- /* AW
- short [] root_x = new short [1], root_y = new short [1];
- OS.XtTranslateCoords (handle, (short) 0, (short) 0, root_x, root_y);
- return new Point (point.x - root_x [0], point.y - root_y [0]);
- */
- return MacUtil.toControl(handle, point);
-}
-/**
- * Returns a point which is the result of converting the
- * argument, which is specified in coordinates relative to
- * the receiver, to display relative coordinates.
- * <p>
- * @param point the point to be translated (must not be null)
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the point is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+ Rect rect = new Rect ();
+ int window = OS.GetControlOwner (handle);
+ OS.GetWindowBounds (window, (short) OS.kWindowContentRgn, rect);
+ int x = point.x - rect.left;
+ int y = point.y - rect.top;
+ OS.GetControlBounds (handle, rect);
+ return new Point (x - rect.left, y - rect.top);
+}
+
public Point toDisplay (Point point) {
checkWidget();
if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
- /* AW
- short [] root_x = new short [1], root_y = new short [1];
- OS.XtTranslateCoords (handle, (short) point.x, (short) point.y, root_x, root_y);
- return new Point (root_x [0], root_y [0]);
- */
- return MacUtil.toDisplay(handle, point);
-}
-/* AW
-boolean translateMnemonic (char key, XKeyEvent xEvent) {
- if (!isVisible () || !isEnabled ()) return false;
- boolean doit = mnemonicMatch (key);
- if (hooks (SWT.Traverse)) {
- Event event = new Event();
- event.doit = doit;
- event.detail = SWT.TRAVERSE_MNEMONIC;
- event.time = xEvent.time;
- setKeyState (event, xEvent);
- sendEvent (SWT.Traverse, event);
- doit = event.doit;
- }
- if (doit) return mnemonicHit (key);
- return false;
+ Rect rect = new Rect ();
+ OS.GetControlBounds (handle, rect);
+ int x = point.x + rect.left;
+ int y = point.y + rect.top;
+ int window = OS.GetControlOwner (handle);
+ OS.GetWindowBounds (window, (short) OS.kWindowContentRgn, rect);
+ return new Point (x + rect.left, y + rect.top);
}
-boolean translateMnemonic (int key, XKeyEvent xEvent) {
- if (xEvent.state != OS.Mod1Mask) {
- if (xEvent.state != 0 || !(this instanceof Button)) {
- return false;
- }
- }
- Decorations shell = menuShell ();
- if (shell.isVisible () && shell.isEnabled ()) {
- char ch = mbcsToWcs ((char) key);
- return ch != 0 && shell.translateMnemonic (ch, xEvent);
- }
- return false;
+
+int topHandle () {
+ return handle;
}
-*/
-boolean translateTraversal (MacEvent mEvent) {
-
- int kind= mEvent.getKind();
- if (kind != OS.kEventRawKeyDown && kind != OS.kEventRawKeyRepeat)
- return false;
-
- int detail = SWT.TRAVERSE_NONE;
- /* AW
- GdkEventKey keyEvent = new GdkEventKey ();
- OS.memmove (keyEvent, gdkEvent, GdkEventKey.sizeof);
- int key = keyEvent.keyval;
- int code = traversalCode (key, gdkEvent);
- int [] state = new int [1];
- OS.gdk_event_get_state (gdkEvent, state);
- */
- int code= traversalCode ();
- int key= mEvent.getKeyCode();
- int state= mEvent.getStateMask();
- boolean all = false;
- switch (key) {
- case 53 /* OS.GDK_Escape:
- case OS.GDK_Cancel */: {
- all = true;
- detail = SWT.TRAVERSE_ESCAPE;
- break;
- }
- case 36 /* OS.GDK_Return */ : {
- all = true;
- detail = SWT.TRAVERSE_RETURN;
- break;
- }
- //case OS.GDK_ISO_Left_Tab:
- case 48 /* OS.GDK_Tab */ : {
- boolean next = (state & SWT.SHIFT) == 0;
- /*
- * NOTE: This code causes Shift+Tab and Ctrl+Tab to
- * always attempt traversal which is not correct.
- * The default should be the same as a plain Tab key.
- * This behavior is currently relied on by StyledText.
- *
- * The correct behavior is to give every key to any
- * control that wants to see every key. The default
- * behavior for a Canvas should be to see every key.
- */
- /* AW
- switch (state [0]) {
- case OS.GDK_SHIFT_MASK:
- case OS.GDK_CONTROL_MASK:
- code |= SWT.TRAVERSE_TAB_PREVIOUS | SWT.TRAVERSE_TAB_NEXT;
- }
- */
- detail = next ? SWT.TRAVERSE_TAB_NEXT : SWT.TRAVERSE_TAB_PREVIOUS;
- break;
- }
- case 126: // OS.GDK_Up:
- case 123: // OS.GDK_Left:
- detail = SWT.TRAVERSE_ARROW_PREVIOUS;
- break;
-
- case 125: // OS.GDK_Down:
- case 124: /* OS.GDK_Right: */
- detail = SWT.TRAVERSE_ARROW_NEXT;
- break;
-
- case 116: // OS.GDK_Page_Up:
- case 121: /* OS.GDK_Page_Down: */ {
- all = true;
- /* AW
- if ((state [0] & OS.GDK_CONTROL_MASK) == 0) return false;
- */
- /*
- * NOTE: This code causes Ctrl+PgUp and Ctrl+PgDn to always
- * attempt traversal which is not correct. This behavior is
- * currently relied on by StyledText.
- *
- * The correct behavior is to give every key to any
- * control that wants to see every key. The default
- * behavior for a Canvas should be to see every key.
- */
- code |= SWT.TRAVERSE_PAGE_NEXT | SWT.TRAVERSE_PAGE_PREVIOUS;
- detail = key == 121 ? SWT.TRAVERSE_PAGE_NEXT : SWT.TRAVERSE_PAGE_PREVIOUS;
- break;
- }
- default:
- return false;
- }
-
- Event event = new Event ();
- event.doit = (code & detail) != 0;
- event.detail = detail;
- /* AW
- event.time = keyEvent.time;
- setInputState (event, gdkEvent);
- */
- Shell shell = getShell ();
- Control control = this;
- do {
- if (control.traverse (event)) return true;
- if (!event.doit && control.hooks (SWT.Traverse)) {
- return false;
- }
- if (control == shell) return false;
- control = control.parent;
- } while (all && control != null);
+
+boolean traverseMnemonic (char key) {
return false;
}
-int traversalCode () {
- /* AW
- int [] argList = new int [] {OS.XmNtraversalOn, 0};
- OS.XtGetValues (handle, argList, argList.length / 2);
- if (argList [1] == 0) return 0;
- */
- int code = SWT.TRAVERSE_RETURN | SWT.TRAVERSE_TAB_NEXT | SWT.TRAVERSE_TAB_PREVIOUS;
- Shell shell = getShell ();
- if (shell.parent != null) code |= SWT.TRAVERSE_ESCAPE;
- /* AW
- if (getNavigationType () == OS.XmNONE) {
- code |= SWT.TRAVERSE_ARROW_NEXT | SWT.TRAVERSE_ARROW_PREVIOUS;
- }
- */
- return code;
-}
-boolean traverseMnemonic (char key) {
- if (!isVisible () || !isEnabled ()) return false;
- return mnemonicMatch (key) && mnemonicHit (key);
-}
-/**
- * Based on the argument, perform one of the expected platform
- * traversal action. The argument should be one of the constants:
- * <code>SWT.TRAVERSE_ESCAPE</code>, <code>SWT.TRAVERSE_RETURN</code>,
- * <code>SWT.TRAVERSE_TAB_NEXT</code>, <code>SWT.TRAVERSE_TAB_PREVIOUS</code>,
- * <code>SWT.TRAVERSE_ARROW_NEXT</code> and <code>SWT.TRAVERSE_ARROW_PREVIOUS</code>.
- *
- * @param traversal the type of traversal
- * @return true if the traversal succeeded
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
+
public boolean traverse (int traversal) {
checkWidget();
if (!isFocusControl () && !setFocus ()) return false;
@@ -2612,71 +1220,19 @@ boolean traverse (Event event) {
}
boolean traverseEscape () {
- Shell shell = getShell ();
- if (shell.parent == null) return false;
- if (!shell.isVisible () || !shell.isEnabled ()) return false;
- shell.close ();
- return true;
+ return false;
}
boolean traverseGroup (boolean next) {
- Control root = computeTabRoot ();
- Control group = computeTabGroup ();
- Control [] list = root.computeTabList ();
- int length = list.length;
- int index = 0;
- while (index < length) {
- if (list [index] == group) break;
- index++;
- }
- /*
- * It is possible (but unlikely), that application
- * code could have disposed the widget in focus in
- * or out events. Ensure that a disposed widget is
- * not accessed.
- */
- if (index == length) return false;
- int start = index, offset = (next) ? 1 : -1;
- while ((index = ((index + offset + length) % length)) != start) {
- Control control = list [index];
- if (!control.isDisposed () && control.setTabGroupFocus ()) {
- if (!isDisposed () && !isFocusControl ()) return true;
- }
- }
- if (group.isDisposed ()) return false;
- return group.setTabGroupFocus ();
+ return false;
}
boolean traverseItem (boolean next) {
- Control [] children = parent._getChildren ();
- int length = children.length;
- int index = 0;
- while (index < length) {
- if (children [index] == this) break;
- index++;
- }
- /*
- * It is possible (but unlikely), that application
- * code could have disposed the widget in focus in
- * or out events. Ensure that a disposed widget is
- * not accessed.
- */
- int start = index, offset = (next) ? 1 : -1;
- while ((index = (index + offset + length) % length) != start) {
- Control child = children [index];
- if (!child.isDisposed () && child.isTabItem ()) {
- if (child.setTabItemFocus ()) return true;
- }
- }
return false;
}
boolean traverseReturn () {
- Button button = menuShell ().getDefaultButton ();
- if (button == null || button.isDisposed ()) return false;
- if (!button.isVisible () || !button.isEnabled ()) return false;
- button.click ();
- return true;
+ return false;
}
boolean traversePage (boolean next) {
@@ -2684,96 +1240,13 @@ boolean traversePage (boolean next) {
}
boolean traverseMnemonic (Event event) {
- // This code is intentionally commented.
- // TraverseMnemonic always originates from the OS and
- // never through the API, and on the GTK platform, accels
- // are hooked by the OS before we get the key event.
- // int shellHandle = _getShell ().topHandle ();
- // return OS.gtk_accel_groups_activate (shellHandle, keyCode, stateMask);
- return true;
+ return false;
}
-/**
- * Forces all outstanding paint requests for the widget tree
- * to be processed before this method returns.
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see #redraw
- */
+
public void update () {
checkWidget();
- /* AW
- int display = OS.XtDisplay (handle);
- if (display == 0) return;
- int window = OS.XtWindow (handle);
- if (window == 0) return;
- XAnyEvent event = new XAnyEvent ();
- OS.XSync (display, false); OS.XSync (display, false);
- while (OS.XCheckWindowEvent (display, window, OS.ExposureMask, event)) {
- OS.XtDispatchEvent (event);
- }
- */
- getDisplay().update();
+ Display display = getDisplay ();
+ display.update ();
}
-//////////////////////////////////////////////////////////////////////
-// Mac stuff
-//////////////////////////////////////////////////////////////////////
- /**
- * Sets the bounds of the given control.
- */
- private void internalSetBounds(int hndl, MacRect oldBounds, int x, int y, int width, int height) {
- if (MacUtil.USE_FRAME) {
- MacRect newBounds= new MacRect(x, y, width, height);
- handleResize(hndl, newBounds);
- } else {
- int wHandle= OS.GetControlOwner(hndl);
- OS.InvalWindowRect(wHandle, oldBounds.getData());
-
- MacRect newBounds= new MacRect(x, y, width, height);
- handleResize(hndl, newBounds);
- OS.InvalWindowRect(wHandle, newBounds.getData());
- }
- }
-
- /**
- * subclasses can override if a resize must trigger some internal layout.
- */
- void handleResize(int hndl, MacRect bounds) {
- if (MacUtil.USE_FRAME)
- OS.HIViewSetFrame(hndl, bounds.getX(), bounds.getY(), bounds.getWidth(), bounds.getHeight());
- else
- OS.SetControlBounds(hndl, bounds.getData());
- }
-
- /**
- * subclasses can override.
- */
- void internalGetControlBounds(int hndl, MacRect bounds) {
- if (MacUtil.USE_FRAME) {
- float[] f= new float[4];
- OS.HIViewGetFrame(hndl, f);
- bounds.set((int)f[0], (int)f[1], (int)f[2], (int)f[3]);
- } else {
- OS.GetControlBounds(hndl, bounds.getData());
- }
- }
-
- /**
- * Hook (overwritten in Text and Combo)
- */
- /*
- final int sendKeyEvent(int type, int nextHandler, int eRefHandle) {
-
- MacEvent mEvent= new MacEvent(eRefHandle);
- if (translateTraversal(mEvent))
- return 0;
-
- processEvent (type, new MacEvent(eRefHandle));
- return OS.kNoErr;
- }
- */
} \ No newline at end of file