Update of /cvsroot/audacity/audacity-src/src
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv2448

Modified Files:
        Menus.cpp TrackPanel.cpp TrackPanel.h 
Log Message:
Fix memleak (menus weren't being deleted)

Index: Menus.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/Menus.cpp,v
retrieving revision 1.450
retrieving revision 1.451
diff -u -d -r1.450 -r1.451
--- Menus.cpp   23 Mar 2009 10:56:39 -0000      1.450
+++ Menus.cpp   23 Mar 2009 18:26:05 -0000      1.451
@@ -1267,6 +1267,13 @@
    ModuleManager::Dispatch(MenusRebuilt);
 }
 
+void AudacityProject::RebuildOtherMenus()
+{
+   if (mTrackPanel) {
+      mTrackPanel->BuildMenus();
+   }
+}
+
 int AudacityProject::GetFocusedFrame()
 {
    wxWindow *w = FindFocus();

Index: TrackPanel.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/TrackPanel.cpp,v
retrieving revision 1.431
retrieving revision 1.432
diff -u -d -r1.431 -r1.432
--- TrackPanel.cpp      23 Mar 2009 00:32:54 -0000      1.431
+++ TrackPanel.cpp      23 Mar 2009 18:26:05 -0000      1.432
@@ -487,6 +487,12 @@
    mAdjustLeftSelectionCursor = new wxCursor(wxCURSOR_POINT_LEFT);
    mAdjustRightSelectionCursor = new wxCursor(wxCURSOR_POINT_RIGHT);
 
+   mWaveTrackMenu = NULL;
+   mNoteTrackMenu = NULL;
+   mLabelTrackMenu = NULL;
+   mLabelTrackInfoMenu = NULL;
+   mTimeTrackMenu = NULL;
+
    BuildMenus();
 
    mTrackArtist = new TrackArtist();
@@ -525,8 +531,49 @@
    mLastIndicator = -1;
 }
 
+TrackPanel::~TrackPanel()
+{
+   mTimer.Stop();
+
+   // This can happen if a label is being edited and the user presses
+   // ALT+F4 or Command+Q
+   if (HasCapture())
+      ReleaseMouse();
+
+   if (mBacking)
+   {
+      mBackingDC.SelectObject( wxNullBitmap );
+      delete mBacking;
+   }
+//   delete mAx;
+   delete mTrackArtist;
+
+   delete mArrowCursor;
+   delete mPencilCursor;
+   delete mSelectCursor;
+   delete mEnvelopeCursor;
+   delete mDisabledCursor;
+   delete mSlideCursor;
+   delete mResizeCursor;
+   delete mSmoothCursor;
+   delete mZoomInCursor;
+   delete mZoomOutCursor;
+   delete mLabelCursorLeft;
+   delete mLabelCursorRight;
+   delete mRearrangeCursor;
+   delete mAdjustLeftSelectionCursor;
+   delete mAdjustRightSelectionCursor;
+
+   delete mSnapManager;
+
+   DeleteMenus();
+}
+
 void TrackPanel::BuildMenus(void)
 {
+   // Get rid of existing menus
+   DeleteMenus();
+
    // Use AppendCheckItem so we can have ticks beside the items.
    // We would use AppendRadioItem but it only currently works on windows and 
GTK.
    mRateMenu = new wxMenu();
@@ -598,53 +645,34 @@
    mLabelTrackInfoMenu->Append(OnPasteSelectedTextID, _("Paste"));
 }
 
-void AudacityProject::RebuildOtherMenus()
-{
-   mTrackPanel->BuildMenus();
-}
-
-TrackPanel::~TrackPanel()
+void TrackPanel::DeleteMenus(void)
 {
-   mTimer.Stop();
-
-   // This can happen if a label is being edited and the user presses
-   // ALT+F4 or Command+Q
-   if (HasCapture())
-      ReleaseMouse();
+   // Note that the submenus (mRateMenu, ...)
+   // are deleted by their parent
+   if (mWaveTrackMenu) {
+      delete mWaveTrackMenu;
+      mWaveTrackMenu = NULL;
+   }
 
-   if (mBacking)
-   {
-      mBackingDC.SelectObject( wxNullBitmap );
-      delete mBacking;
+   if (mNoteTrackMenu) {
+      delete mNoteTrackMenu;
+      mNoteTrackMenu = NULL;
    }
-//   delete mAx;
-   delete mTrackArtist;
 
-   delete mArrowCursor;
-   delete mPencilCursor;
-   delete mSelectCursor;
-   delete mEnvelopeCursor;
-   delete mDisabledCursor;
-   delete mSlideCursor;
-   delete mResizeCursor;
-   delete mSmoothCursor;
-   delete mZoomInCursor;
-   delete mZoomOutCursor;
-   delete mLabelCursorLeft;
-   delete mLabelCursorRight;
-   delete mRearrangeCursor;
-   delete mAdjustLeftSelectionCursor;
-   delete mAdjustRightSelectionCursor;
+   if (mLabelTrackMenu) {
+      delete mLabelTrackMenu;
+      mLabelTrackMenu = NULL;
+   }
 
-   delete mSnapManager;
+   if (mLabelTrackInfoMenu) {
+      delete mLabelTrackInfoMenu;
+      mLabelTrackInfoMenu = NULL;
+   }
 
-   // Note that the submenus (mRateMenu, ...)
-   // are deleted by their parent
-   delete mWaveTrackMenu;
-   delete mNoteTrackMenu;
-   delete mLabelTrackMenu;
-   delete mLabelTrackInfoMenu;
-   delete mTimeTrackMenu;
+   if (mTimeTrackMenu) {
+      delete mTimeTrackMenu;
+      mTimeTrackMenu = NULL;
+   }
 }
 
 void TrackPanel::UpdatePrefs()

Index: TrackPanel.h
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/TrackPanel.h,v
retrieving revision 1.130
retrieving revision 1.131
diff -u -d -r1.130 -r1.131
--- TrackPanel.h        23 Mar 2009 00:32:54 -0000      1.130
+++ TrackPanel.h        23 Mar 2009 18:26:05 -0000      1.131
@@ -138,6 +138,8 @@
    virtual ~ TrackPanel();
 
    void BuildMenus(void);
+   void DeleteMenus(void);
+
    void UpdatePrefs();
 
    void OnSize(wxSizeEvent & event);


------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Audacity-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-cvs

Reply via email to