Only fix mandatory track elements after everything else has been done

Fix for bug 711.
This commit is contained in:
Moritz Bunkus 2012-01-27 20:22:53 +01:00
parent 0050735031
commit ace2654f77
5 changed files with 38 additions and 7 deletions

View File

@ -1,5 +1,9 @@
2012-01-27 Moritz Bunkus <moritz@bunkus.org>
* mmg: bug fix: The header editor was sometimes creating two
instances of an element if an element was added to the second or
one of the later tracks. Fix for bug 711.
* mkvpropedit, mmg: bug fix: Trying to modify a file located in a
path mounted with GVFS SFTP will no longer crash the
programs. Instead an error message is output if an error

View File

@ -346,6 +346,8 @@ header_editor_frame_c::handle_tracks(kax_analyzer_data_c *data) {
if (!m_e_tracks)
return;
he_track_type_page_c *last_track_page = NULL;
KaxTracks *kax_tracks = static_cast<KaxTracks *>(m_e_tracks.get_object());
int track_type = -1;
size_t i;
@ -366,7 +368,8 @@ header_editor_frame_c::handle_tracks(kax_analyzer_data_c *data) {
wxString title;
track_type = uint64(*k_track_type);
he_track_type_page_c *page = new he_track_type_page_c(this, track_type, track_number, m_e_tracks);
he_track_type_page_c *page = new he_track_type_page_c(this, track_type, track_number, m_e_tracks, *k_track_entry);
last_track_page = page;
page->init();
he_value_page_c *child_page;
@ -500,6 +503,9 @@ header_editor_frame_c::handle_tracks(kax_analyzer_data_c *data) {
// m_tc_tree->ExpandAllChildren(page->m_page_id);
}
if (NULL != last_track_page)
last_track_page->set_is_last_track(true);
}
void

View File

@ -21,7 +21,6 @@
#include "common/ebml.h"
#include "common/segmentinfo.h"
#include "common/segment_tracks.h"
#include "common/wx.h"
#include "mmg/header_editor/frame.h"
#include "mmg/header_editor/top_level_page.h"
@ -49,8 +48,5 @@ he_top_level_page_c::do_modifications() {
if (is_id(m_l1_element, KaxInfo))
fix_mandatory_segmentinfo_elements(m_l1_element.get_object());
else if (is_id(m_l1_element, KaxTracks))
fix_mandatory_segment_tracks_elements(m_l1_element.get_object());
m_l1_element->UpdateSize(true);
}

View File

@ -21,16 +21,20 @@
#include <matroska/KaxTrackEntryData.h>
#include "common/common_pch.h"
#include "common/segment_tracks.h"
#include "common/wx.h"
#include "mmg/header_editor/track_type_page.h"
he_track_type_page_c::he_track_type_page_c(header_editor_frame_c *parent,
int track_type,
unsigned int track_number,
ebml_element_cptr l1_element)
ebml_element_cptr l1_element,
KaxTrackEntry &track_entry)
: he_top_level_page_c(parent, "" , l1_element)
, m_track_type(track_type)
, m_track_number(track_number)
, m_track_entry(track_entry)
, m_is_last_track(false)
{
}
@ -59,3 +63,19 @@ he_track_type_page_c::translate_ui() {
he_top_level_page_c::translate_ui();
}
void
he_track_type_page_c::do_modifications() {
he_page_base_c::do_modifications();
if (!m_is_last_track)
return;
fix_mandatory_segment_tracks_elements(m_l1_element.get_object());
m_l1_element->UpdateSize(true);
}
void
he_track_type_page_c::set_is_last_track(bool is_last_track) {
m_is_last_track = is_last_track;
}

View File

@ -24,12 +24,17 @@ class he_track_type_page_c: public he_top_level_page_c {
public:
int m_track_type;
unsigned int m_track_number;
KaxTrackEntry &m_track_entry;
bool m_is_last_track;
public:
he_track_type_page_c(header_editor_frame_c *parent, int track_type, unsigned int track_number, ebml_element_cptr l1_element);
he_track_type_page_c(header_editor_frame_c *parent, int track_type, unsigned int track_number, ebml_element_cptr l1_element, KaxTrackEntry &track_entry);
virtual ~he_track_type_page_c();
virtual void translate_ui();
virtual void set_is_last_track(bool is_last_track);
virtual void do_modifications();
};
#endif // __HE_TRACK_TYPE_PAGE_H