diff --git a/mrv2/docs/HISTORY.md b/mrv2/docs/HISTORY.md index 97f8caa6c..65bc89b74 100644 --- a/mrv2/docs/HISTORY.md +++ b/mrv2/docs/HISTORY.md @@ -1,8 +1,3 @@ -v0.4.1 ------- -- Improved the performance of dragging panels as Windows (mainly on Linux). -- Fixed Hotkeys window that had gotten broken in v0.4.0. - v0.4.0 ------ - Added Search on Hotkeys for functions and hotkeys. @@ -39,6 +34,11 @@ v0.4.0 - Fixed hotkeys in menu bar not working when the menubar was hidden. - Added all python libs to Linux distribution. - Fixed a redrawing issue when the Media Information Panel was put as a window. +- Fixed zombie process on exit on Windows. +- Fixed Hotkeys window that had gotten broken in v0.4.0. +- Improved the performance of dragging panels as Windows (mainly on Linux). +- Added remembering of which tabs where open/closed in Media Information Panel. +- Fixed Spanish translations on Color Panel. v0.3.8 diff --git a/mrv2/lib/mrvFl/mrvCallbacks.cpp b/mrv2/lib/mrvFl/mrvCallbacks.cpp index 34fbff7bd..d2ffc987d 100644 --- a/mrv2/lib/mrvFl/mrvCallbacks.cpp +++ b/mrv2/lib/mrvFl/mrvCallbacks.cpp @@ -261,12 +261,15 @@ namespace mrv PanelGroup::hide_all(); // Delete all panels with images (just in case) - delete filesPanel; filesPanel = nullptr; - delete comparePanel; comparePanel = nullptr; - delete playlistPanel; playlistPanel = nullptr; - + delete filesPanel; + filesPanel = nullptr; + delete comparePanel; + comparePanel = nullptr; + delete playlistPanel; + playlistPanel = nullptr; + // Hide any GL Window (needed in Windows) - Fl_Window *pw = Fl::first_window(); + Fl_Window* pw = Fl::first_window(); while (pw) { pw->hide(); diff --git a/mrv2/lib/mrvPanels/mrvFilesPanel.cpp b/mrv2/lib/mrvPanels/mrvFilesPanel.cpp index 3be6f982c..3a394629c 100644 --- a/mrv2/lib/mrvPanels/mrvFilesPanel.cpp +++ b/mrv2/lib/mrvPanels/mrvFilesPanel.cpp @@ -182,8 +182,9 @@ namespace mrv Fl_SVG_Image* svg; _r->thumbnailCreator = p.ui->uiTimeWindow->uiTimeline->thumbnailCreator(); - if ( !_r->thumbnailCreator ) return; - + if (!_r->thumbnailCreator) + return; + g->clear(); g->begin(); diff --git a/mrv2/lib/mrvPanels/mrvImageInfoPanel.cpp b/mrv2/lib/mrvPanels/mrvImageInfoPanel.cpp index 8bc24e203..40f533097 100644 --- a/mrv2/lib/mrvPanels/mrvImageInfoPanel.cpp +++ b/mrv2/lib/mrvPanels/mrvImageInfoPanel.cpp @@ -362,7 +362,7 @@ namespace mrv void ImageInfoPanel::add_controls() { TLRENDER_P(); - + Fl_Group* controls = g->get_group(); controls->show(); @@ -420,7 +420,7 @@ namespace mrv if (!g->docked()) sw = 0; int W = g->w() - sw; - + SettingsObject* settingsObject = p.ui->app->settingsObject(); // CollapsibleGrop recalcs, we don't care its xyh sizes @@ -431,18 +431,21 @@ namespace mrv [](Fl_Widget* w, void* d) { CollapsibleGroup* cg = static_cast(d); - if (cg->is_open()) cg->close(); - else cg->open(); + if (cg->is_open()) + cg->close(); + else + cg->open(); imageInfoPanel->refresh(); }, m_image); - + std::string prefix = "gui/" + label + "/Tab/"; std::string key = prefix + "Main"; std_any value = settingsObject->value(key); int open = std_any_empty(value) ? 1 : std_any_cast(value); - if (!open) m_image->close(); - + if (!open) + m_image->close(); + Y += m_image->h(); m_video = new CollapsibleGroup(g->x(), Y, W, 400, _("Video")); m_video->end(); @@ -451,8 +454,10 @@ namespace mrv [](Fl_Widget* w, void* d) { CollapsibleGroup* cg = static_cast(d); - if (cg->is_open()) cg->close(); - else cg->open(); + if (cg->is_open()) + cg->close(); + else + cg->open(); imageInfoPanel->refresh(); }, m_video); @@ -460,8 +465,8 @@ namespace mrv key = prefix + "Video"; value = settingsObject->value(key); open = std_any_empty(value) ? 0 : std_any_cast(value); - if (!open) m_video->close(); - + if (!open) + m_video->close(); Y += m_video->h(); m_audio = new CollapsibleGroup(g->x(), Y, W, 400, _("Audio")); @@ -472,20 +477,22 @@ namespace mrv [](Fl_Widget* w, void* d) { CollapsibleGroup* cg = static_cast(d); - if (cg->is_open()) cg->close(); - else cg->open(); + if (cg->is_open()) + cg->close(); + else + cg->open(); imageInfoPanel->refresh(); }, m_audio); - + key = prefix + "Audio"; value = settingsObject->value(key); open = std_any_empty(value) ? 0 : std_any_cast(value); - if (!open) m_audio->close(); + if (!open) + m_audio->close(); Y += m_audio->h(); - m_subtitle = - new CollapsibleGroup(g->x(), Y, W, 400, _("Subtitle")); + m_subtitle = new CollapsibleGroup(g->x(), Y, W, 400, _("Subtitle")); m_subtitle->close(); m_subtitle->end(); b = m_subtitle->button(); @@ -493,20 +500,22 @@ namespace mrv [](Fl_Widget* w, void* d) { CollapsibleGroup* cg = static_cast(d); - if (cg->is_open()) cg->close(); - else cg->open(); + if (cg->is_open()) + cg->close(); + else + cg->open(); imageInfoPanel->refresh(); }, m_subtitle); - + key = prefix + "Subtitle"; value = settingsObject->value(key); open = std_any_empty(value) ? 0 : std_any_cast(value); - if (!open) m_subtitle->close(); + if (!open) + m_subtitle->close(); Y += m_subtitle->h(); - m_attributes = - new CollapsibleGroup(g->x(), Y, W, 400, _("Metadata")); + m_attributes = new CollapsibleGroup(g->x(), Y, W, 400, _("Metadata")); m_attributes->close(); m_attributes->end(); b = m_attributes->button(); @@ -514,16 +523,19 @@ namespace mrv [](Fl_Widget* w, void* d) { CollapsibleGroup* cg = static_cast(d); - if (cg->is_open()) cg->close(); - else cg->open(); + if (cg->is_open()) + cg->close(); + else + cg->open(); imageInfoPanel->refresh(); }, m_attributes); - + key = prefix + "Attributes"; value = settingsObject->value(key); open = std_any_empty(value) ? 0 : std_any_cast(value); - if (!open) m_attributes->close(); + if (!open) + m_attributes->close(); } struct AspectName @@ -691,31 +703,30 @@ namespace mrv { TLRENDER_P(); std::cerr << "set tabs" << std::endl; - + SettingsObject* settingsObject = p.ui->app->settingsObject(); std::string prefix = "gui/" + label + "/Tab/"; std::string key = prefix + "Main"; int value = m_image->is_open(); - settingsObject->setValue(key, value ); - + settingsObject->setValue(key, value); + key = prefix + "Video"; value = m_video->is_open(); - settingsObject->setValue(key, value ); - + settingsObject->setValue(key, value); + key = prefix + "Audio"; value = m_audio->is_open(); - settingsObject->setValue(key, value ); - + settingsObject->setValue(key, value); + key = prefix + "Subtitle"; value = m_subtitle->is_open(); - settingsObject->setValue(key, value ); - + settingsObject->setValue(key, value); + key = prefix + "Attributes"; value = m_attributes->is_open(); - settingsObject->setValue(key, value ); + settingsObject->setValue(key, value); } - void ImageInfoPanel::save() { TLRENDER_P(); diff --git a/mrv2/lib/mrvPanels/mrvImageInfoPanel.h b/mrv2/lib/mrvPanels/mrvImageInfoPanel.h index 36fbb8f85..e2d321c46 100644 --- a/mrv2/lib/mrvPanels/mrvImageInfoPanel.h +++ b/mrv2/lib/mrvPanels/mrvImageInfoPanel.h @@ -49,7 +49,7 @@ namespace mrv void setTimelinePlayer(TimelinePlayer* p); void save() override; - + void scroll_to(int w, int h); Pack* get_pack() const { return g->get_pack(); }; diff --git a/mrv2/lib/mrvWidgets/mrvPanelGroup.cpp b/mrv2/lib/mrvWidgets/mrvPanelGroup.cpp index 46238e05d..92b96eed7 100644 --- a/mrv2/lib/mrvWidgets/mrvPanelGroup.cpp +++ b/mrv2/lib/mrvWidgets/mrvPanelGroup.cpp @@ -189,7 +189,8 @@ namespace mrv if (H > maxH) H = maxH; - if (group) group->size( W, group->h() ); + if (group) + group->size(W, group->h()); scroll->size(pack->w(), H - 3); if (pack->h() < H - 20)