rpms/audacity/F-11 audacity-1.3.9-labelpopup.patch, NONE, 1.1 audacity-1.3.9-labeltrack-crash.patch, NONE, 1.1 audacity.spec, 1.78, 1.79
Michael Schwendt
mschwendt at fedoraproject.org
Wed Sep 23 20:35:40 UTC 2009
Author: mschwendt
Update of /cvs/pkgs/rpms/audacity/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv1969
Modified Files:
audacity.spec
Added Files:
audacity-1.3.9-labelpopup.patch
audacity-1.3.9-labeltrack-crash.patch
Log Message:
sync LabelTrack/TrackPanel fixes from Rawhide
audacity-1.3.9-labelpopup.patch:
TrackPanel.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- NEW FILE audacity-1.3.9-labelpopup.patch ---
diff -Nur audacity-src-1.3.9-orig/src/TrackPanel.cpp audacity-src-1.3.9/src/TrackPanel.cpp
--- audacity-src-1.3.9-orig/src/TrackPanel.cpp 2009-08-31 12:45:39.000000000 +0200
+++ audacity-src-1.3.9/src/TrackPanel.cpp 2009-09-14 08:52:22.764231346 +0200
@@ -4464,7 +4464,7 @@
}
- if (event.RightDown()) {
+ if (event.RightUp()) {
// popup menu for editing
RefreshTrack(lTrack);
audacity-1.3.9-labeltrack-crash.patch:
LabelTrack.cpp | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
LabelTrack.h | 2 -
Menus.cpp | 17 +-------
Project.cpp | 18 +--------
Project.h | 4 --
5 files changed, 112 insertions(+), 39 deletions(-)
--- NEW FILE audacity-1.3.9-labeltrack-crash.patch ---
diff -Nur audacity-src-1.3.9-orig/src/LabelTrack.cpp audacity-src-1.3.9/src/LabelTrack.cpp
--- audacity-src-1.3.9-orig/src/LabelTrack.cpp 2009-08-31 12:45:38.000000000 +0200
+++ audacity-src-1.3.9/src/LabelTrack.cpp 2009-09-12 14:59:27.000000000 +0200
@@ -57,6 +57,97 @@
#include "Project.h"
#include "commands/CommandManager.h"
+#if defined(__WXGTK__)
+// As of wxGTK 2.8.9, there is a problem in the wxClipboard class that
+// allows recursive event processing. This problem has been corrected
+// by wxWidgets 2.9+. However, this han't made it into a release yet,
+// so we have to work around it.
+//
+// This is done by pulling/merging in some code from wx29 and creating
+// the following class to capture events while accessing the clipboard
+// to prevent the asynchronous clipboard access from causing recursive
+// event processing.
+
+#include <wx/app.h>
+#include <wx/dynarray.h>
+
+#include <gtk/gtk.h>
+
+extern GtkWidget *wxGetRootWindow();
+
+static void main_do_event(GdkEvent *event, wxArrayPtrVoid *queue)
+{
+ switch (event->type)
+ {
+ case GDK_NOTHING:
+ // Ignore it
+ break;
+
+ case GDK_SELECTION_REQUEST:
+ case GDK_SELECTION_NOTIFY:
+ case GDK_SELECTION_CLEAR:
+#if GTK_CHECK_VERSION(2,6,0)
+ case GDK_OWNER_CHANGE:
+#endif
+ // process it now
+ gtk_main_do_event(event);
+ break;
+
+ default:
+ // process it later (but make a copy; the caller will free the event pointer)
+ queue->Add(gdk_event_copy(event));
+ break;
+ }
+
+ // don't allow idle callbacks while we're active
+ wxTheApp->SuspendIdleCallback();
+
+ return;
+}
+
+class CaptureEvents
+{
+ public:
+ CaptureEvents()
+ {
+#if wxUSE_LOG
+ // disable log flushing from here because a call to wxYield() shouldn't
+ // normally result in message boxes popping up &c
+ wxLog::Suspend();
+#endif
+
+ // temporarily replace the global GDK event handler with our function
+ gdk_event_handler_set((GdkEventFunc)main_do_event, &queue, NULL);
+
+ // temporarily suspend idle callbacks
+ wxTheApp->SuspendIdleCallback();
+ }
+
+ virtual ~CaptureEvents()
+ {
+ gdk_event_handler_set((GdkEventFunc)gtk_main_do_event, NULL, NULL);
+
+ // put all unprocessed GDK events back in the queue
+ GdkDisplay* disp = gtk_widget_get_display(wxGetRootWindow());
+ size_t cnt = queue.GetCount();
+ for (size_t i = 0; i < cnt; i++) {
+ GdkEvent* event = (GdkEvent*)queue[i];
+ // NOTE: gdk_display_put_event makes a copy of the event passed to it
+ gdk_display_put_event(disp, event);
+ gdk_event_free(event);
+ }
+
+#if wxUSE_LOG
+ // let the logs be flashed again
+ wxLog::Resume();
+#endif
+ }
+
+ private:
+ wxArrayPtrVoid queue;
+};
+#endif
+
wxFont LabelTrack::msFont;
// static member variables.
@@ -74,13 +165,11 @@
int LabelTrack::mFontHeight=-1;
-
LabelTrack *TrackFactory::NewLabelTrack()
{
return new LabelTrack(mDirManager);
}
-
LabelTrack::LabelTrack(DirManager * projDirManager):
Track(projDirManager),
mbHitCenter(false),
@@ -969,6 +1058,9 @@
// copy data onto clipboard
if (wxTheClipboard->Open()) {
+#if defined(__WXGTK__)
+ CaptureEvents capture;
+#endif
wxTheClipboard->SetData(new wxTextDataObject(data));
wxTheClipboard->Close();
}
@@ -1001,6 +1093,9 @@
// copy the data on clipboard
if (wxTheClipboard->Open()) {
+#if defined(__WXGTK__)
+ CaptureEvents capture;
+#endif
wxTheClipboard->SetData(new wxTextDataObject(data));
wxTheClipboard->Close();
}
@@ -1021,10 +1116,13 @@
wxString right=wxT("");
// if text data is available
- if (wxTheClipboard->IsSupported(wxDF_TEXT)) {
+ if (IsTextClipSupported()) {
if (wxTheClipboard->Open()) {
+#if defined(__WXGTK__)
+ CaptureEvents capture;
+#endif
wxTextDataObject data;
- wxTheClipboard->GetData( data );
+ wxTheClipboard->GetData(data);
wxTheClipboard->Close();
text = data.GetText();
}
@@ -1077,6 +1175,10 @@
/// @return true if the text data is available in the clipboard, false otherwise
bool LabelTrack::IsTextClipSupported()
{
+#if defined(__WXGTK__)
+ CaptureEvents capture;
+#endif
+
return wxTheClipboard->IsSupported(wxDF_TEXT);
}
diff -Nur audacity-src-1.3.9-orig/src/LabelTrack.h audacity-src-1.3.9/src/LabelTrack.h
--- audacity-src-1.3.9-orig/src/LabelTrack.h 2009-08-31 12:45:38.000000000 +0200
+++ audacity-src-1.3.9/src/LabelTrack.h 2009-09-12 14:59:27.000000000 +0200
@@ -129,7 +129,7 @@
bool CutSelectedText();
bool CopySelectedText();
bool PasteSelectedText(double sel0, double sel1);
- bool IsTextClipSupported();
+ static bool IsTextClipSupported();
// methods to set flags
void SetDragXPos(const int d) { mDragXPos = d; };
diff -Nur audacity-src-1.3.9-orig/src/Menus.cpp audacity-src-1.3.9/src/Menus.cpp
--- audacity-src-1.3.9-orig/src/Menus.cpp 2009-08-31 12:45:38.000000000 +0200
+++ audacity-src-1.3.9/src/Menus.cpp 2009-09-12 15:18:22.150741538 +0200
@@ -1359,20 +1359,6 @@
if (lt->IsTextSelected()) {
flags |= CutCopyAvailableFlag;
}
-
- // See AudacityProject::OnUpdateUI() for an explanation
- if (mInIdle) {
- if (lt->IsTextClipSupported()) {
- flags |= TextClipFlag;
- mTextClipFlag = TextClipFlag;
- }
- else {
- mTextClipFlag = 0;
- }
- }
- else {
- flags |= mTextClipFlag;
- }
}
else if (t->GetKind() == Track::Wave) {
flags |= WaveTracksExistFlag;
@@ -1422,6 +1408,9 @@
if (GetZoom() > gMinZoom && (flags & TracksExistFlag))
flags |= ZoomOutAvailableFlag;
+ if ((flags & LabelTracksExistFlag) && LabelTrack::IsTextClipSupported())
+ flags |= TextClipFlag;
+
flags |= GetFocusedFrame();
if (IsPlayRegionLocked())
diff -Nur audacity-src-1.3.9-orig/src/Project.cpp audacity-src-1.3.9/src/Project.cpp
--- audacity-src-1.3.9-orig/src/Project.cpp 2009-08-31 12:45:38.000000000 +0200
+++ audacity-src-1.3.9/src/Project.cpp 2009-09-12 15:18:29.746745064 +0200
@@ -653,13 +653,12 @@
const wxSize & size)
: wxFrame(parent, id, wxT("Audacity"), pos, size),
mLastPlayMode(normalPlay),
+ mFreqWindow(NULL),
mRate((double) gPrefs->Read(wxT("/SamplingRate/DefaultProjectSampleRate"), AudioIO::GetOptimalSupportedSampleRate())),
mDefaultFormat((sampleFormat) gPrefs->
Read(wxT("/SamplingRate/DefaultProjectSampleFormat"), floatSample)),
mSnapTo(0),
mDirty(false),
- mInIdle(false),
- mTextClipFlag(0),
mTrackPanel(NULL),
mTrackFactory(NULL),
mAutoScrolling(false),
@@ -689,8 +688,7 @@
mWantSaveCompressed(false),
mLastEffect(NULL),
mLastEffectType(0),
- mLastEffectDesc(_("Repeat Last Effect")),
- mFreqWindow(NULL)
+ mLastEffectDesc(_("Repeat Last Effect"))
{
int widths[] = {-1, 130};
mStatusBar = CreateStatusBar(2);
@@ -1644,19 +1642,7 @@
void AudacityProject::OnUpdateUI(wxUpdateUIEvent & event)
{
- // As of wxGTK 2.8.9, there is a problem in the wxClipboard class that
- // allows recursive event processing. This problem has been corrected
- // by wxWidgets changeset #45180. However, this han't made it into a
- // release yet, so we have to work around it.
- //
- // This is done by only checking the wxClipboard contents during an idle
- // event, thus preventing possible recursion during other event processing.
- //
- mInIdle = true;
-
UpdateMenus();
-
- mInIdle = false;
}
void AudacityProject::OnActivate(wxActivateEvent & event)
diff -Nur audacity-src-1.3.9-orig/src/Project.h audacity-src-1.3.9/src/Project.h
--- audacity-src-1.3.9-orig/src/Project.h 2009-08-31 12:45:38.000000000 +0200
+++ audacity-src-1.3.9/src/Project.h 2009-09-12 15:18:26.812745135 +0200
@@ -431,10 +431,6 @@
wxUint32 mLastFlags;
- // see AudacityProject::OnUpdateUI() for explanation of next two
- bool mInIdle;
- wxUint32 mTextClipFlag;
-
// Window elements
wxTimer *mTimer;
Index: audacity.spec
===================================================================
RCS file: /cvs/pkgs/rpms/audacity/F-11/audacity.spec,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -p -r1.78 -r1.79
--- audacity.spec 5 Sep 2009 13:25:06 -0000 1.78
+++ audacity.spec 23 Sep 2009 20:35:40 -0000 1.79
@@ -5,7 +5,7 @@
Name: audacity
Version: 1.3.9
-Release: 0.1.beta%{?dist}
+Release: 0.3.beta%{?dist}
Summary: Multitrack audio editor
Group: Applications/Multimedia
License: GPLv2
@@ -18,6 +18,8 @@ Source2: audacity.desktop
Patch1: audacity-1.3.7-libmp3lame-default.patch
Patch2: audacity-1.3.9-libdir.patch
Patch3: audacity-1.3.8-gsocket-conflict.patch
+Patch4: audacity-1.3.9-labeltrack-crash.patch
+Patch5: audacity-1.3.9-labelpopup.patch
Patch6: audacity-1.3.7-vamp-1.3.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -68,6 +70,8 @@ done
grep -q -s __RPM_LIB * -R && exit 1
%patch3 -p1 -b .gsocket-conflict
+%patch4 -p1 -b .labeltrack-crash
+%patch5 -p1 -b .labelpopup
%if 0%{?fedora} < 11
%patch6 -p1 -b .vamp-1.3
%endif
@@ -146,6 +150,13 @@ update-desktop-database &> /dev/null ||
%changelog
+* Mon Sep 14 2009 Michael Schwendt <mschwendt at fedoraproject.org> - 1.3.9-0.3.beta
+- add patch to fix LabelTrack popup
+
+* Sat Sep 12 2009 Michael Schwendt <mschwendt at fedoraproject.org> - 1.3.9-0.2.beta
+- add wxGTK work-around patches to fix LabelTrack crash
+ (shall fix #520917 and similar race-conditions)
+
* Thu Sep 3 2009 Michael Schwendt <mschwendt at fedoraproject.org> - 1.3.9-0.1.beta
- upgrade to 1.3.9-beta
- upstream's changes in the device prefs code make the audiodevdefaults
More information about the fedora-extras-commits
mailing list