Revision: 6692
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=6692&view=rev
Author: gerdwagner
Date: 2012-10-21 19:07:16 +0000 (Sun, 21 Oct 2012)
Log Message:
-----------
Detached Window --> Fixed memory leak
Modified Paths:
--------------
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/WindowManager.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/WidgetEvent.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPane.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/TabHandle.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/TabHandleEvent.java
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/WindowManager.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/WindowManager.java 2012-10-20 02:48:19 UTC (rev 6691)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/WindowManager.java 2012-10-21 19:07:16 UTC (rev 6692)
@@ -1057,20 +1057,12 @@
{
final IWidget widget = evt.getWidget();
- // JASON: Make menu smarter. When second window for the same
- // session is added create a hierarchical menu for all windows
- // for the session.
+ if (null != evt.getTabHandleEvent() && evt.getTabHandleEvent().isWasAddedToToMainApplicationWindow())
+ {
+ addWidgetToWindowMenu(widget);
+ }
- // Add an item to the Windows menu for this window and
- // store the menu item back in the internal frame.
- final JMenu menu = getMainFrame().getWindowsMenu();
-
- final Action action = new SelectWidgetAction(widget);
-
- final JMenuItem menuItem = menu.add(action);
- widget.putClientProperty(MENU, menuItem);
-
- // Enable/Disable actions that require open session frames.
+ // Enable/Disable actions that require open session frames.
IWidget[] frames = WidgetUtils.getOpenNonToolWindows(getMainFrame().getDesktopContainer().getAllWidgets());
_app.getActionCollection().internalFrameOpenedOrClosed(frames.length);
@@ -1111,15 +1103,7 @@
// Remove menu item from Windows menu that relates to this
// internal frame.
- final JMenuItem menuItem = (JMenuItem)widget.getClientProperty(MENU);
- if (menuItem != null)
- {
- final JMenu menu = getMainFrame().getWindowsMenu();
- if (menu != null)
- {
- menu.remove(menuItem);
- }
- }
+ removeWidgetFromWindowMenu(widget);
// Enable/Disable actions that require open session frames.
IWidget[] frames = WidgetUtils.getOpenNonToolWindows(getMainFrame().getDesktopContainer().getAllWidgets());
@@ -1150,7 +1134,30 @@
}
}
- /**
+ private void addWidgetToWindowMenu(IWidget widget)
+ {
+ final JMenu menu = getMainFrame().getWindowsMenu();
+
+ final Action action = new SelectWidgetAction(widget);
+
+ final JMenuItem menuItem = menu.add(action);
+ widget.putClientProperty(MENU, menuItem);
+ }
+
+ public void removeWidgetFromWindowMenu(IWidget widget)
+ {
+ final JMenuItem menuItem = (JMenuItem)widget.getClientProperty(MENU);
+ if (menuItem != null)
+ {
+ final JMenu menu = getMainFrame().getWindowsMenu();
+ if (menu != null)
+ {
+ menu.remove(menuItem);
+ }
+ }
+ }
+
+ /**
* Used to update the UI depending on various session events.
*/
private final class SessionListener extends SessionAdapter
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/WidgetEvent.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/WidgetEvent.java 2012-10-20 02:48:19 UTC (rev 6691)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/WidgetEvent.java 2012-10-21 19:07:16 UTC (rev 6692)
@@ -42,4 +42,9 @@
{
return _widget;
}
+
+ public TabHandleEvent getTabHandleEvent()
+ {
+ return _the;
+ }
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPane.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPane.java 2012-10-20 02:48:19 UTC (rev 6691)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPane.java 2012-10-21 19:07:16 UTC (rev 6692)
@@ -36,6 +36,7 @@
}
private IApplication _app;
+ private boolean _belongsToMainApplicationWindow;
private JPanel _pnlButtons = new JPanel();
@@ -61,6 +62,7 @@
public DockTabDesktopPane(IApplication app, boolean belongsToMainApplicationWindow)
{
_app = app;
+ _belongsToMainApplicationWindow = belongsToMainApplicationWindow;
_tabbedPane = new DesktopTabbedPane(_app);
@@ -98,7 +100,7 @@
closeDock();
- if (belongsToMainApplicationWindow) // prevents memory leaks concerning detached windows
+ if (_belongsToMainApplicationWindow) // prevents memory leaks concerning detached windows
{
_app.addApplicationListener(new ApplicationListener()
{
@@ -194,7 +196,7 @@
_tabHandles.add(tabHandle);
- tabHandle.fireAdded();
+ tabHandle.fireAdded(_belongsToMainApplicationWindow);
_tabbedPane.setSelectedIndex(tabIx);
_scrollableTabHandler.tabAdded();
}
@@ -238,6 +240,11 @@
_tabHandles.remove(tabHandle);
tabHandle.removeTabHandleListener(_dockTabDesktopManager);
+ if(_belongsToMainApplicationWindow)
+ {
+ _app.getWindowManager().removeWidgetFromWindowMenu(tabHandle.getWidget());
+ }
+
return tabHandle;
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/TabHandle.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/TabHandle.java 2012-10-20 02:48:19 UTC (rev 6691)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/TabHandle.java 2012-10-21 19:07:16 UTC (rev 6692)
@@ -61,13 +61,13 @@
}
}
- public void fireAdded()
+ public void fireAdded(boolean wasAddedToToMainApplicationWindow)
{
TabHandleListener[] clone = _tabHandleListeners.toArray(new TabHandleListener[_tabHandleListeners.size()]);
for (TabHandleListener listener : clone)
{
- listener.tabAdded(new TabHandleEvent(this, null));
+ listener.tabAdded(new TabHandleEvent(this, null, wasAddedToToMainApplicationWindow));
}
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/TabHandleEvent.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/TabHandleEvent.java 2012-10-20 02:48:19 UTC (rev 6691)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/TabHandleEvent.java 2012-10-21 19:07:16 UTC (rev 6692)
@@ -6,15 +6,27 @@
{
private TabHandle _tabHandle;
private ActionEvent _e;
+ private boolean _wasAddedToToMainApplicationWindow;
public TabHandleEvent(TabHandle tabHandle, ActionEvent e)
{
+ this(tabHandle, e, false);
+ }
+
+ public TabHandleEvent(TabHandle tabHandle, ActionEvent e, boolean wasAddedToToMainApplicationWindow)
+ {
_tabHandle = tabHandle;
_e = e;
+ _wasAddedToToMainApplicationWindow = wasAddedToToMainApplicationWindow;
}
public TabHandle getTabHandle()
{
return _tabHandle;
}
+
+ public boolean isWasAddedToToMainApplicationWindow()
+ {
+ return _wasAddedToToMainApplicationWindow;
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|