summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java790
1 files changed, 395 insertions, 395 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java
index fab7f3a7db..357ea3c399 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java
@@ -1,18 +1,18 @@
-package org.eclipse.swt.widgets;
-
-/*
+package org.eclipse.swt.widgets;
+
+/*
* Copyright (c) 2000, 2002 IBM Corp. All rights reserved.
* This file is made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- */
-
-import org.eclipse.swt.internal.*;
-import org.eclipse.swt.internal.gtk.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-
+ * http://www.eclipse.org/legal/cpl-v10.html
+ */
+
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+
/**
* Instances of this class are user interface objects that contain
* menu items.
@@ -28,13 +28,13 @@ import org.eclipse.swt.graphics.*;
* IMPORTANT: This class is <em>not</em> intended to be subclassed.
* </p>
*/
-public class Menu extends Widget {
- int x, y;
- boolean hasLocation;
- MenuItem cascade, selectedItem;
- Decorations parent;
- int imItem, imSeparator, imHandle;
-
+public class Menu extends Widget {
+ int x, y;
+ boolean hasLocation;
+ MenuItem cascade, selectedItem;
+ Decorations parent;
+ int imItem, imSeparator, imHandle;
+
/**
* Constructs a new instance of this class given its parent,
* and sets the style for the instance so that the instance
@@ -54,10 +54,10 @@ public class Menu extends Widget {
* @see Widget#checkSubclass
* @see Widget#getStyle
*/
-public Menu (Control parent) {
- this (parent.getShell (), SWT.POP_UP);
-}
-
+public Menu (Control parent) {
+ this (parent.getShell (), SWT.POP_UP);
+}
+
/**
* Constructs a new instance of this class given its parent
* (which must be a <code>Decorations</code>) and a style value
@@ -89,12 +89,12 @@ public Menu (Control parent) {
* @see Widget#checkSubclass
* @see Widget#getStyle
*/
-public Menu (Decorations parent, int style) {
- super (parent, checkStyle (style));
- this.parent = parent;
- createWidget (0);
-}
-
+public Menu (Decorations parent, int style) {
+ super (parent, checkStyle (style));
+ this.parent = parent;
+ createWidget (0);
+}
+
/**
* Constructs a new instance of this class given its parent
* (which must be a <code>Menu</code>) and sets the style
@@ -115,10 +115,10 @@ public Menu (Decorations parent, int style) {
* @see Widget#checkSubclass
* @see Widget#getStyle
*/
-public Menu (Menu parentMenu) {
- this (parentMenu.parent, SWT.DROP_DOWN);
-}
-
+public Menu (Menu parentMenu) {
+ this (parentMenu.parent, SWT.DROP_DOWN);
+}
+
/**
* Constructs a new instance of this class given its parent
* (which must be a <code>MenuItem</code>) and sets the style
@@ -139,22 +139,22 @@ public Menu (Menu parentMenu) {
* @see Widget#checkSubclass
* @see Widget#getStyle
*/
-public Menu (MenuItem parentItem) {
- this (parentItem.parent);
-}
-
-static int checkStyle (int style) {
- return checkBits (style, SWT.POP_UP, SWT.BAR, SWT.DROP_DOWN, 0, 0, 0);
-}
-
-void addAccelerators (int accelGroup) {
- MenuItem [] items = getItems ();
+public Menu (MenuItem parentItem) {
+ this (parentItem.parent);
+}
+
+static int checkStyle (int style) {
+ return checkBits (style, SWT.POP_UP, SWT.BAR, SWT.DROP_DOWN, 0, 0, 0);
+}
+
+void addAccelerators (int accelGroup) {
+ MenuItem [] items = getItems ();
for (int i = 0; i < items.length; i++) {
MenuItem item = items[i];
item.addAccelerators (accelGroup);
- }
-}
-
+ }
+}
+
/**
* Adds the listener to the collection of listeners who will
* be notified when menus are hidden or shown, by sending it
@@ -174,14 +174,14 @@ void addAccelerators (int accelGroup) {
* @see MenuListener
* @see #removeMenuListener
*/
-public void addMenuListener (MenuListener listener) {
- checkWidget();
- if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
- TypedListener typedListener = new TypedListener (listener);
- addListener (SWT.Hide,typedListener);
- addListener (SWT.Show,typedListener);
-}
-
+public void addMenuListener (MenuListener listener) {
+ checkWidget();
+ if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+ TypedListener typedListener = new TypedListener (listener);
+ addListener (SWT.Hide,typedListener);
+ addListener (SWT.Show,typedListener);
+}
+
/**
* Adds the listener to the collection of listeners who will
* be notified when help events are generated for the control,
@@ -201,62 +201,62 @@ public void addMenuListener (MenuListener listener) {
* @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);
-}
-
-void createHandle (int index) {
- state |= HANDLE;
- if ((style & SWT.BAR) != 0) {
- handle = OS.gtk_menu_bar_new ();
- if (handle == 0) error (SWT.ERROR_NO_HANDLES);
- int parentHandle = parent.fixedHandle;
- OS.gtk_container_add (parentHandle, handle);
- } else {
- handle = OS.gtk_menu_new ();
- if (handle == 0) error (SWT.ERROR_NO_HANDLES);
- }
-}
-
-void createIMMenu (int imHandle) {
- if (this.imHandle == imHandle) return;
- this.imHandle = imHandle;
- if (imHandle == 0) {
- if (imItem != 0) {
- OS.gtk_widget_destroy (imItem);
- imItem = 0;
- }
- if (imSeparator != 0) {
- OS.gtk_widget_destroy (imSeparator);
- imSeparator = 0;
- }
- return;
- }
- if (imSeparator == 0) {
- imSeparator = OS.gtk_separator_menu_item_new ();
- OS.gtk_widget_show (imSeparator);
- OS.gtk_menu_shell_insert (handle, imSeparator, -1);
- }
- if (imItem == 0) {
- byte[] buffer = Converter.wcsToMbcs (null, SWT.getMessage("SWT_InputMethods"), true);
- imItem = OS.gtk_image_menu_item_new_with_label (buffer);
- OS.gtk_widget_show (imItem);
- OS.gtk_menu_shell_insert (handle, imItem, -1);
- }
- int imSubmenu = OS.gtk_menu_new ();
- OS.gtk_im_multicontext_append_menuitems (imHandle, imSubmenu);
- OS.gtk_menu_item_set_submenu (imItem, imSubmenu);
-}
-
-void createWidget (int index) {
- checkOrientation (parent);
- super.createWidget (index);
- parent.add (this);
-}
-
+public void addHelpListener (HelpListener listener) {
+ checkWidget();
+ if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+ TypedListener typedListener = new TypedListener (listener);
+ addListener (SWT.Help, typedListener);
+}
+
+void createHandle (int index) {
+ state |= HANDLE;
+ if ((style & SWT.BAR) != 0) {
+ handle = OS.gtk_menu_bar_new ();
+ if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+ int parentHandle = parent.fixedHandle;
+ OS.gtk_container_add (parentHandle, handle);
+ } else {
+ handle = OS.gtk_menu_new ();
+ if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+ }
+}
+
+void createIMMenu (int imHandle) {
+ if (this.imHandle == imHandle) return;
+ this.imHandle = imHandle;
+ if (imHandle == 0) {
+ if (imItem != 0) {
+ OS.gtk_widget_destroy (imItem);
+ imItem = 0;
+ }
+ if (imSeparator != 0) {
+ OS.gtk_widget_destroy (imSeparator);
+ imSeparator = 0;
+ }
+ return;
+ }
+ if (imSeparator == 0) {
+ imSeparator = OS.gtk_separator_menu_item_new ();
+ OS.gtk_widget_show (imSeparator);
+ OS.gtk_menu_shell_insert (handle, imSeparator, -1);
+ }
+ if (imItem == 0) {
+ byte[] buffer = Converter.wcsToMbcs (null, SWT.getMessage("SWT_InputMethods"), true);
+ imItem = OS.gtk_image_menu_item_new_with_label (buffer);
+ OS.gtk_widget_show (imItem);
+ OS.gtk_menu_shell_insert (handle, imItem, -1);
+ }
+ int imSubmenu = OS.gtk_menu_new ();
+ OS.gtk_im_multicontext_append_menuitems (imHandle, imSubmenu);
+ OS.gtk_menu_item_set_submenu (imItem, imSubmenu);
+}
+
+void createWidget (int index) {
+ checkOrientation (parent);
+ super.createWidget (index);
+ parent.add (this);
+}
+
/**
* Returns the default menu item or null if none has
* been previously set.
@@ -269,17 +269,17 @@ void createWidget (int index) {
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
-public MenuItem getDefaultItem () {
- checkWidget();
- return null;
-}
-
-public Display getDisplay () {
- Decorations parent = this.parent;
- if (parent == null) error (SWT.ERROR_WIDGET_DISPOSED);
- return parent.getDisplay ();
-}
-
+public MenuItem getDefaultItem () {
+ checkWidget();
+ return null;
+}
+
+public Display getDisplay () {
+ Decorations 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
@@ -293,11 +293,11 @@ public Display getDisplay () {
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
-public boolean getEnabled () {
- checkWidget();
- return OS.GTK_WIDGET_SENSITIVE (handle);
-}
-
+public boolean getEnabled () {
+ checkWidget();
+ return OS.GTK_WIDGET_SENSITIVE (handle);
+}
+
/**
* Returns the item at the given, zero-relative index in the
* receiver. Throws an exception if the index is out of range.
@@ -313,20 +313,20 @@ public boolean getEnabled () {
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
-public MenuItem getItem (int index) {
- checkWidget();
- int list = OS.gtk_container_get_children (handle);
- if (list == 0) error (SWT.ERROR_CANNOT_GET_ITEM);
- int count = OS.g_list_length (list);
- if (imSeparator != 0) count--;
- if (imItem != 0) count--;
- if (!(0 <= index && index < count)) error (SWT.ERROR_INVALID_RANGE);
- int data = OS.g_list_nth_data (list, index);
- OS.g_list_free (list);
- if (data == 0) error (SWT.ERROR_CANNOT_GET_ITEM);
- return (MenuItem) WidgetTable.get (data);
-}
-
+public MenuItem getItem (int index) {
+ checkWidget();
+ int list = OS.gtk_container_get_children (handle);
+ if (list == 0) error (SWT.ERROR_CANNOT_GET_ITEM);
+ int count = OS.g_list_length (list);
+ if (imSeparator != 0) count--;
+ if (imItem != 0) count--;
+ if (!(0 <= index && index < count)) error (SWT.ERROR_INVALID_RANGE);
+ int data = OS.g_list_nth_data (list, index);
+ OS.g_list_free (list);
+ if (data == 0) error (SWT.ERROR_CANNOT_GET_ITEM);
+ return (MenuItem) WidgetTable.get (data);
+}
+
/**
* Returns the number of items contained in the receiver.
*
@@ -337,17 +337,17 @@ public MenuItem getItem (int index) {
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
-public int getItemCount () {
- checkWidget();
- int list = OS.gtk_container_get_children (handle);
- if (list == 0) return 0;
- int count = OS.g_list_length (list);
- OS.g_list_free (list);
- if (imSeparator != 0) count--;
- if (imItem != 0) count--;
- return count;
-}
-
+public int getItemCount () {
+ checkWidget();
+ int list = OS.gtk_container_get_children (handle);
+ if (list == 0) return 0;
+ int count = OS.g_list_length (list);
+ OS.g_list_free (list);
+ if (imSeparator != 0) count--;
+ if (imItem != 0) count--;
+ return count;
+}
+
/**
* Returns an array of <code>MenuItem</code>s which are the items
* in the receiver.
@@ -364,35 +364,35 @@ public int getItemCount () {
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
-public MenuItem [] getItems () {
- checkWidget();
- int list = OS.gtk_container_get_children (handle);
- if (list == 0) return new MenuItem [0];
- int count = OS.g_list_length (list);
- if (imSeparator != 0) count--;
- if (imItem != 0) count--;
- MenuItem [] items = new MenuItem [count];
- for (int i=0; i<count; i++) {
- int data = OS.g_list_nth_data (list, i);
- items [i] = (MenuItem) WidgetTable.get (data);
- }
- OS.g_list_free (list);
- return items;
-}
-
-String getNameText () {
- String result = "";
- MenuItem [] items = getItems ();
- int length = items.length;
- if (length > 0) {
- for (int i=0; i<length-1; i++) {
- result = result + items [i].getNameText() + ", ";
- }
- result = result + items [length-1].getNameText ();
- }
- return result;
-}
-
+public MenuItem [] getItems () {
+ checkWidget();
+ int list = OS.gtk_container_get_children (handle);
+ if (list == 0) return new MenuItem [0];
+ int count = OS.g_list_length (list);
+ if (imSeparator != 0) count--;
+ if (imItem != 0) count--;
+ MenuItem [] items = new MenuItem [count];
+ for (int i=0; i<count; i++) {
+ int data = OS.g_list_nth_data (list, i);
+ items [i] = (MenuItem) WidgetTable.get (data);
+ }
+ OS.g_list_free (list);
+ return items;
+}
+
+String getNameText () {
+ String result = "";
+ MenuItem [] items = getItems ();
+ int length = items.length;
+ if (length > 0) {
+ for (int i=0; i<length-1; i++) {
+ result = result + items [i].getNameText() + ", ";
+ }
+ result = result + items [length-1].getNameText ();
+ }
+ return result;
+}
+
/**
* Returns the receiver's parent, which must be a <code>Decorations</code>.
*
@@ -403,11 +403,11 @@ String getNameText () {
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
-public Decorations getParent () {
- checkWidget();
- return parent;
-}
-
+public Decorations getParent () {
+ checkWidget();
+ return parent;
+}
+
/**
* Returns the receiver's parent item, which must be a
* <code>MenuItem</code> or null when the receiver is a
@@ -420,11 +420,11 @@ public Decorations getParent () {
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
-public MenuItem getParentItem () {
- checkWidget();
- return cascade;
-}
-
+public MenuItem getParentItem () {
+ checkWidget();
+ return cascade;
+}
+
/**
* Returns the receiver's parent item, which must be a
* <code>Menu</code> or null when the receiver is a
@@ -437,12 +437,12 @@ public MenuItem getParentItem () {
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
-public Menu getParentMenu () {
- checkWidget();
- if (cascade == null) return null;
- return cascade.getParent ();
-}
-
+public Menu getParentMenu () {
+ checkWidget();
+ if (cascade == null) return null;
+ return cascade.getParent ();
+}
+
/**
* Returns the receiver's shell. For all controls other than
* shells, this simply returns the control's nearest ancestor
@@ -458,11 +458,11 @@ public Menu getParentMenu () {
*
* @see #getParent
*/
-public Shell getShell () {
- checkWidget();
- return parent.getShell ();
-}
-
+public Shell getShell () {
+ checkWidget();
+ return parent.getShell ();
+}
+
/**
* Returns <code>true</code> if the receiver is visible, and
* <code>false</code> otherwise.
@@ -480,43 +480,43 @@ public Shell getShell () {
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
-public boolean getVisible () {
- checkWidget();
- return OS.GTK_WIDGET_MAPPED (handle);
-}
-
-int GtkMenuPositionFunc (int menu, int x, int y, int push_in, int user_data) {
- if (x != 0) OS.memmove (x, new int [] {this.x}, 4);
- if (y != 0) OS.memmove (y, new int [] {this.y}, 4);
- return 0;
-}
-
-int gtk_hide (int widget) {
- sendEvent (SWT.Hide);
- return 0;
-}
-
-int gtk_show (int widget) {
- if ((style & SWT.POP_UP) != 0) return 0;
- sendEvent (SWT.Show);
- return 0;
-}
-
-int gtk_show_help (int widget, int helpType) {
- if (sendHelpEvent (helpType)) OS.gtk_menu_shell_deactivate (handle);
- return 0;
-}
-
-void hookEvents () {
- super.hookEvents ();
- Display display = getDisplay ();
- int windowProc2 = display.windowProc2;
- int windowProc3 = display.windowProc3;
- OS.g_signal_connect (handle, OS.show, windowProc2, SHOW);
- OS.g_signal_connect (handle, OS.hide, windowProc2, HIDE);
- OS.g_signal_connect (handle, OS.show_help, windowProc3, SHOW_HELP);
-}
-
+public boolean getVisible () {
+ checkWidget();
+ return OS.GTK_WIDGET_MAPPED (handle);
+}
+
+int GtkMenuPositionFunc (int menu, int x, int y, int push_in, int user_data) {
+ if (x != 0) OS.memmove (x, new int [] {this.x}, 4);
+ if (y != 0) OS.memmove (y, new int [] {this.y}, 4);
+ return 0;
+}
+
+int gtk_hide (int widget) {
+ sendEvent (SWT.Hide);
+ return 0;
+}
+
+int gtk_show (int widget) {
+ if ((style & SWT.POP_UP) != 0) return 0;
+ sendEvent (SWT.Show);
+ return 0;
+}
+
+int gtk_show_help (int widget, int helpType) {
+ if (sendHelpEvent (helpType)) OS.gtk_menu_shell_deactivate (handle);
+ return 0;
+}
+
+void hookEvents () {
+ super.hookEvents ();
+ Display display = getDisplay ();
+ int windowProc2 = display.windowProc2;
+ int windowProc3 = display.windowProc3;
+ OS.g_signal_connect (handle, OS.show, windowProc2, SHOW);
+ OS.g_signal_connect (handle, OS.hide, windowProc2, HIDE);
+ OS.g_signal_connect (handle, OS.show_help, windowProc3, SHOW_HELP);
+}
+
/**
* Searches the receiver's list starting at the first item
* (index 0) until an item is found that is equal to the
@@ -534,78 +534,78 @@ void hookEvents () {
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
-public int indexOf (MenuItem item) {
- checkWidget();
- if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
- MenuItem [] items = getItems ();
- for (int i=0; i<items.length; i++) {
- if (items [i] == item) return i;
- }
- return -1;
-}
-
-/**
- * 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
+public int indexOf (MenuItem item) {
+ checkWidget();
+ if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+ MenuItem [] items = getItems ();
+ for (int i=0; i<items.length; i++) {
+ if (items [i] == item) return i;
+ }
+ return -1;
+}
+
+/**
+ * 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
*/
-public boolean isEnabled () {
- checkWidget();
- Menu parentMenu = getParentMenu ();
- if (parentMenu == null) return getEnabled ();
- return getEnabled () && parentMenu.isEnabled ();
-}
-
-/**
- * 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
+public boolean isEnabled () {
+ checkWidget();
+ Menu parentMenu = getParentMenu ();
+ if (parentMenu == null) return getEnabled ();
+ return getEnabled () && parentMenu.isEnabled ();
+}
+
+/**
+ * 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
*/
-public boolean isVisible () {
- checkWidget();
- return getVisible ();
-}
-
-void releaseChild () {
- super.releaseChild ();
- if (cascade != null) cascade.setMenu (null);
- if ((style & SWT.BAR) != 0 && this == parent.menuBar) {
- parent.setMenuBar (null);
- }
-}
-
-void releaseWidget () {
- MenuItem [] items = getItems ();
- for (int i=0; i<items.length; i++) {
- MenuItem item = items [i];
- if (!item.isDisposed ()) item.releaseResources ();
- }
- if (parent != null) parent.remove (this);
- super.releaseWidget ();
- parent = null;
- cascade = null;
- imItem = imSeparator = imHandle = 0;
-}
-
+public boolean isVisible () {
+ checkWidget();
+ return getVisible ();
+}
+
+void releaseChild () {
+ super.releaseChild ();
+ if (cascade != null) cascade.setMenu (null);
+ if ((style & SWT.BAR) != 0 && this == parent.menuBar) {
+ parent.setMenuBar (null);
+ }
+}
+
+void releaseWidget () {
+ MenuItem [] items = getItems ();
+ for (int i=0; i<items.length; i++) {
+ MenuItem item = items [i];
+ if (!item.isDisposed ()) item.releaseResources ();
+ }
+ if (parent != null) parent.remove (this);
+ super.releaseWidget ();
+ parent = null;
+ cascade = null;
+ imItem = imSeparator = imHandle = 0;
+}
+
/**
* Removes the listener from the collection of listeners who will
* be notified when the menu events are generated for the control.
@@ -623,22 +623,22 @@ void releaseWidget () {
* @see MenuListener
* @see #addMenuListener
*/
-public void removeMenuListener (MenuListener listener) {
- checkWidget();
- if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
- if (eventTable == null) return;
- eventTable.unhook (SWT.Hide, listener);
- eventTable.unhook (SWT.Show, listener);
-}
-
-void removeAccelerators (int accelGroup) {
- MenuItem [] items = getItems ();
- for (int i = 0; i < items.length; i++) {
- MenuItem item = items[i];
- item.removeAccelerators (accelGroup);
- }
-}
-
+public void removeMenuListener (MenuListener listener) {
+ checkWidget();
+ if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+ if (eventTable == null) return;
+ eventTable.unhook (SWT.Hide, listener);
+ eventTable.unhook (SWT.Show, listener);
+}
+
+void removeAccelerators (int accelGroup) {
+ MenuItem [] items = getItems ();
+ for (int i = 0; i < items.length; i++) {
+ MenuItem item = items[i];
+ item.removeAccelerators (accelGroup);
+ }
+}
+
/**
* Removes the listener from the collection of listeners who will
* be notified when the help events are generated for the control.
@@ -656,27 +656,27 @@ void removeAccelerators (int accelGroup) {
* @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);
-}
-
-boolean sendHelpEvent (int helpType) {
- if (selectedItem != null && !selectedItem.isDisposed()) {
- if (selectedItem.hooks (SWT.Help)) {
- selectedItem.postEvent (SWT.Help);
- return true;
- }
- }
- if (hooks (SWT.Help)) {
- postEvent (SWT.Help);
- return true;
- }
- return parent.sendHelpEvent (helpType);
-}
-
+public void removeHelpListener (HelpListener listener) {
+ checkWidget();
+ if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+ if (eventTable == null) return;
+ eventTable.unhook (SWT.Help, listener);
+}
+
+boolean sendHelpEvent (int helpType) {
+ if (selectedItem != null && !selectedItem.isDisposed()) {
+ if (selectedItem.hooks (SWT.Help)) {
+ selectedItem.postEvent (SWT.Help);
+ return true;
+ }
+ }
+ if (hooks (SWT.Help)) {
+ postEvent (SWT.Help);
+ return true;
+ }
+ return parent.sendHelpEvent (helpType);
+}
+
/**
* Sets the default menu item to the argument or removes
* the default emphasis when the argument is <code>null</code>.
@@ -691,10 +691,10 @@ boolean sendHelpEvent (int helpType) {
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
-public void setDefaultItem (MenuItem item) {
- checkWidget();
-}
-
+public void setDefaultItem (MenuItem item) {
+ checkWidget();
+}
+
/**
* Enables the receiver if the argument is <code>true</code>,
* and disables it otherwise. A disabled control is typically
@@ -708,15 +708,15 @@ public void setDefaultItem (MenuItem item) {
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
-public void setEnabled (boolean enabled) {
- checkWidget();
- if (enabled) {
- OS.GTK_WIDGET_SET_FLAGS (handle, OS.GTK_SENSITIVE);
- } else {
- OS.GTK_WIDGET_UNSET_FLAGS (handle, OS.GTK_SENSITIVE);
- }
-}
-
+public void setEnabled (boolean enabled) {
+ checkWidget();
+ if (enabled) {
+ OS.GTK_WIDGET_SET_FLAGS (handle, OS.GTK_SENSITIVE);
+ } else {
+ OS.GTK_WIDGET_UNSET_FLAGS (handle, OS.GTK_SENSITIVE);
+ }
+}
+
/**
* Sets the receiver's location to the point specified by
* the arguments which are relative to the display.
@@ -733,20 +733,20 @@ public void setEnabled (boolean enabled) {
* <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();
- if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) return;
- this.x = x;
- this.y = y;
- hasLocation = true;
-}
-
-public void setLocation (Point location) {
- checkWidget();
- if (location == null) error (SWT.ERROR_NULL_ARGUMENT);
- setLocation (location.x, location.y);
-}
-
+public void setLocation (int x, int y) {
+ checkWidget();
+ if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) return;
+ this.x = x;
+ this.y = y;
+ hasLocation = true;
+}
+
+public void setLocation (Point location) {
+ checkWidget();
+ if (location == null) error (SWT.ERROR_NULL_ARGUMENT);
+ setLocation (location.x, location.y);
+}
+
/**
* Marks the receiver as visible if the argument is <code>true</code>,
* and marks it invisible otherwise.
@@ -763,26 +763,26 @@ public void setLocation (Point location) {
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
-public void setVisible (boolean visible) {
- checkWidget();
- if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) return;
- if (visible == OS.GTK_WIDGET_MAPPED (handle)) return;
- if (visible) {
- sendEvent (SWT.Show);
- if (getItemCount () != 0) {
- int address = 0;
- Callback GtkMenuPositionFunc = null;
- if (hasLocation) {
- GtkMenuPositionFunc = new Callback (this, "GtkMenuPositionFunc", 5);
- address = GtkMenuPositionFunc.getAddress ();
- }
- OS.gtk_menu_popup (handle, 0, 0, address, 0, 0, OS.gtk_get_current_event_time());
- if (GtkMenuPositionFunc != null) GtkMenuPositionFunc.dispose ();
- } else {
- sendEvent (SWT.Hide);
- }
- } else {
- OS.gtk_menu_popdown (handle);
- }
-}
-}
+public void setVisible (boolean visible) {
+ checkWidget();
+ if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) return;
+ if (visible == OS.GTK_WIDGET_MAPPED (handle)) return;
+ if (visible) {
+ sendEvent (SWT.Show);
+ if (getItemCount () != 0) {
+ int address = 0;
+ Callback GtkMenuPositionFunc = null;
+ if (hasLocation) {
+ GtkMenuPositionFunc = new Callback (this, "GtkMenuPositionFunc", 5);
+ address = GtkMenuPositionFunc.getAddress ();
+ }
+ OS.gtk_menu_popup (handle, 0, 0, address, 0, 0, OS.gtk_get_current_event_time());
+ if (GtkMenuPositionFunc != null) GtkMenuPositionFunc.dispose ();
+ } else {
+ sendEvent (SWT.Hide);
+ }
+ } else {
+ OS.gtk_menu_popdown (handle);
+ }
+}
+}