From 6fd30fc5c1aed5ed5107b11fd4d2187d8e1caeaf Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 28 Apr 2007 22:56:59 +0000 Subject: [PATCH] fix bugs related to checking the version of WXME data and chaining undos that are generated within an editor sequence svn: r6074 --- src/mred/wxme/wx_cgrec.cxx | 5 +++-- src/mred/wxme/wx_cgrec.h | 4 ++-- src/mred/wxme/wx_mbuf.cxx | 1 + src/mred/wxme/wx_media.cxx | 10 +++++----- src/mred/wxme/wx_mpriv.cxx | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/mred/wxme/wx_cgrec.cxx b/src/mred/wxme/wx_cgrec.cxx index 317b042c4f..f5eceebe8f 100644 --- a/src/mred/wxme/wx_cgrec.cxx +++ b/src/mred/wxme/wx_cgrec.cxx @@ -139,16 +139,17 @@ char *wxSchemeModifyRecord::GetName() #endif -wxUnmodifyRecord::wxUnmodifyRecord(void) +wxUnmodifyRecord::wxUnmodifyRecord(Bool _cont) { ok = 1; + cont = _cont; } Bool wxUnmodifyRecord::Undo(wxMediaBuffer *media) { if (ok) media->SetModified(FALSE); - return FALSE; + return cont; } void wxUnmodifyRecord::DropSetUnmodified(void) diff --git a/src/mred/wxme/wx_cgrec.h b/src/mred/wxme/wx_cgrec.h index 7afcdea73c..dd2483aafc 100644 --- a/src/mred/wxme/wx_cgrec.h +++ b/src/mred/wxme/wx_cgrec.h @@ -37,9 +37,9 @@ class wxSchemeModifyRecord : public wxChangeRecord class wxUnmodifyRecord : public wxChangeRecord { - int ok; + Bool ok, cont; public: - wxUnmodifyRecord(void); + wxUnmodifyRecord(Bool cont); Bool Undo(wxMediaBuffer *media); void DropSetUnmodified(void); #if CGREC_DEBUG diff --git a/src/mred/wxme/wx_mbuf.cxx b/src/mred/wxme/wx_mbuf.cxx index dd859b4ae6..61fcbe9577 100644 --- a/src/mred/wxme/wx_mbuf.cxx +++ b/src/mred/wxme/wx_mbuf.cxx @@ -737,6 +737,7 @@ Bool wxReadMediaVersion(wxMediaStreamIn *mf, wxMediaStreamInBase *b, Bool parseF b->Read(vbuf, MRED_START_STR_LEN); if (strcmp(vbuf, MRED_START_STR)) { /* Maybe we have a #reader... prefix? */ + memset(vbuf XFORM_OK_PLUS MRED_START_STR_LEN, 0, MRED_READER_STR_LEN - MRED_START_STR_LEN + 1); b->Read(vbuf XFORM_OK_PLUS MRED_START_STR_LEN, MRED_READER_STR_LEN - MRED_START_STR_LEN); if (!strcmp(vbuf, MRED_READER_STR)) { /* Yes, so try reading start again. */ diff --git a/src/mred/wxme/wx_media.cxx b/src/mred/wxme/wx_media.cxx index 50477fc2be..03542a357d 100644 --- a/src/mred/wxme/wx_media.cxx +++ b/src/mred/wxme/wx_media.cxx @@ -430,7 +430,7 @@ void wxMediaEdit::OnEvent(wxMouseEvent *event) return; if (!event->Moving()) - EndStreaks(wxSTREAK_EXCEPT_KEY_SEQUENCE | wxSTREAK_EXCEPT_CURSOR); + EndStreaks(wxSTREAK_EXCEPT_KEY_SEQUENCE | wxSTREAK_EXCEPT_CURSOR | wxSTREAK_EXCEPT_DELAYED); if (event->ButtonDown() || caretSnip) { /* First, find clicked-on snip: */ @@ -1802,7 +1802,7 @@ void wxMediaEdit::_Insert(wxSnip *isnip, long strlen, wxchar *str, wxList *snips if (!modified) { wxUnmodifyRecord *ur; - ur = new WXGC_PTRS wxUnmodifyRecord; + ur = new WXGC_PTRS wxUnmodifyRecord(delayedStreak); AddUndo(ur); } if (!noundomode) { @@ -1932,7 +1932,7 @@ void wxMediaEdit::Insert(wxchar a_char, long start, long end) streak = typingStreak; ifs = insertForceStreak; - EndStreaks(); + EndStreaks(wxSTREAK_EXCEPT_DELAYED); insertForceStreak = streak; Insert(buffer, start, end); @@ -2024,7 +2024,7 @@ void wxMediaEdit::_Delete(long start, long end, Bool withUndo, Bool scrollOk) if (withUndo) { if (!modified) { wxUnmodifyRecord *ur; - ur = new WXGC_PTRS wxUnmodifyRecord; + ur = new WXGC_PTRS wxUnmodifyRecord(delayedStreak); AddUndo(ur); } rec = new WXGC_PTRS wxDeleteRecord(start, end, deletionStreak || delayedStreak @@ -2220,7 +2220,7 @@ void wxMediaEdit::Delete() dstreak = deletionStreak; dfs = deleteForceStreak; - EndStreaks(); + EndStreaks(wxSTREAK_EXCEPT_DELAYED); deleteForceStreak = dstreak; Delete(startpos, (endpos == startpos) ? -1 : endpos); diff --git a/src/mred/wxme/wx_mpriv.cxx b/src/mred/wxme/wx_mpriv.cxx index 4b2b987a6f..67bbbe83da 100644 --- a/src/mred/wxme/wx_mpriv.cxx +++ b/src/mred/wxme/wx_mpriv.cxx @@ -352,7 +352,7 @@ void wxMediaEdit::_ChangeStyle(long start, long end, if (!modified) { wxUnmodifyRecord *ur; - ur = new WXGC_PTRS wxUnmodifyRecord; + ur = new WXGC_PTRS wxUnmodifyRecord(delayedStreak); AddUndo(ur); } if (rec)