From b03dccb466f78d9ded7be208c39ce7e55235e10d Mon Sep 17 00:00:00 2001 From: angryziber Date: Tue, 7 Nov 2006 19:41:17 +0000 Subject: [PATCH] Fixed openers menu attachment problem in case of GTK git-svn-id: https://ipscan.svn.sourceforge.net/svnroot/ipscan/ipscan@49 375186e5-ef17-0410-b0b6-91563547dcda --- src/net/azib/ipscan/gui/MainMenu.java | 28 +++++++++++-------- .../ipscan/gui/actions/CommandsActions.java | 6 ++-- .../ipscan/gui/actions/FavoritesActions.java | 6 ++-- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/net/azib/ipscan/gui/MainMenu.java b/src/net/azib/ipscan/gui/MainMenu.java index 70835f11..0a9397f3 100755 --- a/src/net/azib/ipscan/gui/MainMenu.java +++ b/src/net/azib/ipscan/gui/MainMenu.java @@ -14,12 +14,14 @@ import net.azib.ipscan.gui.actions.ToolsActions; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Decorations; +import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.picocontainer.MutablePicoContainer; import org.picocontainer.PicoContainer; +import org.picocontainer.defaults.ConstructorInjectionComponentAdapter; import org.picocontainer.defaults.DefaultPicoContainer; /** @@ -45,8 +47,9 @@ public class MainMenu { container.registerComponentImplementation(CommandsActions.EditOpeners.class); container.registerComponentImplementation(CommandsActions.SelectOpener.class); - container.registerComponentImplementation(CommandsActions.ShowOpenersMenu.class); - container.registerComponentImplementation(OpenersMenu.class); + container.registerComponentImplementation(CommandsActions.ShowOpenersMenu.class); + // this one is not cached because we need 2 instances of it - in the Commands menu and in the context menu + container.registerComponent(new ConstructorInjectionComponentAdapter(OpenersMenu.class, OpenersMenu.class)); shell.setMenuBar(mainMenu); createMainMenuItems(mainMenu); @@ -112,24 +115,16 @@ public class MainMenu { } private void createOpenersMenu(Menu subMenu) { - // TODO: this OpenersMenu singleton produces - // Gtk-WARNING **: gtk_menu_attach_to_widget(): menu already attached to GtkImageMenuItem OpenersMenu openersMenu = (OpenersMenu) container.getComponentInstance(OpenersMenu.class); MenuItem openersMenuItem = new MenuItem(subMenu, SWT.CASCADE); openersMenuItem.setText(Labels.getLabel("menu.commands.open")); openersMenuItem.setMenu(openersMenu); - - Listener showOpenersMenuListener = (Listener) container.getComponentInstance(CommandsActions.ShowOpenersMenu.class); - openersMenu.addListener(SWT.Show, showOpenersMenuListener); - // run the listener to populate the menu initially and initialize accelerators - showOpenersMenuListener.handleEvent(null); } private void createFavoritesMenu(Menu parentMenu) { MenuItem favoritesMenuItem = new MenuItem(parentMenu, SWT.CASCADE); favoritesMenuItem.setText(Labels.getLabel("menu.favorites")); Menu favoritesMenu = (Menu) container.getComponentInstance(FavoritesMenu.class); - favoritesMenu.addListener(SWT.Show, (Listener) container.getComponentInstance(FavoritesActions.ShowMenu.class)); favoritesMenuItem.setMenu(favoritesMenu); } @@ -182,11 +177,18 @@ public class MainMenu { * OpenersMenu wrapper for type-safety */ public static class OpenersMenu extends Menu { - public OpenersMenu(Decorations parent, CommandsActions.EditOpeners editOpenersListener) { + public OpenersMenu(Decorations parent, CommandsActions.EditOpeners editOpenersListener, CommandsActions.ShowOpenersMenu showOpenersMenuListener) { super(parent, SWT.DROP_DOWN); initMenuItem(this, "menu.commands.open.edit", null, editOpenersListener); initMenuItem(this, null, null, null); + + addListener(SWT.Show, showOpenersMenuListener); + + // run the listener to populate the menu initially and initialize accelerators + Event e = new Event(); + e.widget = this; + showOpenersMenuListener.handleEvent(e); } protected void checkSubclass() { } // allow extending of Menu class } @@ -195,12 +197,14 @@ public class MainMenu { * FavoritesMenu wrapper for type-safety */ public static class FavoritesMenu extends Menu { - public FavoritesMenu(Decorations parent, FavoritesActions.Add addListener, FavoritesActions.Edit editListener) { + public FavoritesMenu(Decorations parent, FavoritesActions.Add addListener, FavoritesActions.Edit editListener, FavoritesActions.ShowMenu showFavoritesMenuListener) { super(parent, SWT.DROP_DOWN); initMenuItem(this, "menu.favorites.add", new Integer(SWT.CONTROL | 'D'), addListener); initMenuItem(this, "menu.favorites.edit", null, editListener); initMenuItem(this, null, null, null); + + addListener(SWT.Show, showFavoritesMenuListener); } protected void checkSubclass() { } // allow extending of Menu class } diff --git a/src/net/azib/ipscan/gui/actions/CommandsActions.java b/src/net/azib/ipscan/gui/actions/CommandsActions.java index 7efbb37d..7d905070 100755 --- a/src/net/azib/ipscan/gui/actions/CommandsActions.java +++ b/src/net/azib/ipscan/gui/actions/CommandsActions.java @@ -14,7 +14,6 @@ import net.azib.ipscan.gui.EditOpenersDialog; import net.azib.ipscan.gui.ResultTable; import net.azib.ipscan.gui.StatusBar; import net.azib.ipscan.gui.UserErrorException; -import net.azib.ipscan.gui.MainMenu.OpenersMenu; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.Clipboard; @@ -108,15 +107,14 @@ public class CommandsActions { public static class ShowOpenersMenu implements Listener { - private Menu openersMenu; private Listener openersSelectListener; - public ShowOpenersMenu(OpenersMenu openersMenu, SelectOpener selectOpener) { - this.openersMenu = openersMenu; + public ShowOpenersMenu(SelectOpener selectOpener) { this.openersSelectListener = selectOpener; } public void handleEvent(Event event) { + Menu openersMenu = (Menu)event.widget; MenuItem[] menuItems = openersMenu.getItems(); for (int i = 2; i < menuItems.length; i++) { menuItems[i].dispose(); diff --git a/src/net/azib/ipscan/gui/actions/FavoritesActions.java b/src/net/azib/ipscan/gui/actions/FavoritesActions.java index 943f26d1..e8a9bc1e 100755 --- a/src/net/azib/ipscan/gui/actions/FavoritesActions.java +++ b/src/net/azib/ipscan/gui/actions/FavoritesActions.java @@ -11,7 +11,6 @@ import net.azib.ipscan.config.NamedListConfig; import net.azib.ipscan.gui.EditFavoritesDialog; import net.azib.ipscan.gui.InputDialog; import net.azib.ipscan.gui.UserErrorException; -import net.azib.ipscan.gui.MainMenu.FavoritesMenu; import net.azib.ipscan.gui.feeders.FeederGUIRegistry; import org.eclipse.swt.SWT; @@ -79,16 +78,15 @@ public class FavoritesActions { } public static class ShowMenu implements Listener { - private Menu favoritesMenu; private Listener favoritesSelectListener; - public ShowMenu(FavoritesMenu favoritesMenu, Select favoritesSelectListener) { - this.favoritesMenu = favoritesMenu; + public ShowMenu(Select favoritesSelectListener) { // the listener for favorites selections from the menu this.favoritesSelectListener = favoritesSelectListener; } public void handleEvent(Event event) { + Menu favoritesMenu = (Menu) event.widget; // populate favorites in the menu NamedListConfig favoritesConfig = Config.getFavoritesConfig();