From 7ce22b9e399dbf4ff0cad43c1e532976eeeb7fdd Mon Sep 17 00:00:00 2001 From: Andreas Butti Date: Thu, 8 Nov 2018 20:48:20 +0100 Subject: [PATCH] Fixed Sidebar bug --- src/gui/sidebar/Sidebar.cpp | 2 +- .../sidebar/previews/base/SidebarPreviewBase.cpp | 8 +++----- src/gui/sidebar/previews/base/SidebarPreviewBase.h | 2 +- src/gui/sidebar/previews/base/SidebarToolbar.cpp | 13 +++++++++++++ .../sidebar/previews/layer/SidebarPreviewLayers.cpp | 3 ++- .../sidebar/previews/layer/SidebarPreviewLayers.h | 2 +- .../sidebar/previews/page/SidebarPreviewPages.cpp | 3 ++- src/gui/sidebar/previews/page/SidebarPreviewPages.h | 2 +- src/model/PageRef.cpp | 9 ++++++++- 9 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/gui/sidebar/Sidebar.cpp b/src/gui/sidebar/Sidebar.cpp index 0e42df17..17ed9db6 100644 --- a/src/gui/sidebar/Sidebar.cpp +++ b/src/gui/sidebar/Sidebar.cpp @@ -36,7 +36,7 @@ void Sidebar::initPages(GtkWidget* sidebar, GladeGui* gui) XOJ_CHECK_TYPE(Sidebar); addPage(new SidebarIndexPage(this->control)); - addPage(new SidebarPreviewPages(this->control, this->gui)); + addPage(new SidebarPreviewPages(this->control, this->gui, &this->toolbar)); #ifdef UNSTABLE_LAYERS_SIDEBAR addPage(new SidebarPreviewLayers(this->control)); #endif //UNSTABLE_LAYERS_SIDEBAR diff --git a/src/gui/sidebar/previews/base/SidebarPreviewBase.cpp b/src/gui/sidebar/previews/base/SidebarPreviewBase.cpp index d6bff8a2..0995ac8d 100644 --- a/src/gui/sidebar/previews/base/SidebarPreviewBase.cpp +++ b/src/gui/sidebar/previews/base/SidebarPreviewBase.cpp @@ -6,14 +6,15 @@ #include "SidebarPreviewBaseEntry.h" #include "SidebarToolbar.h" -SidebarPreviewBase::SidebarPreviewBase(Control* control, GladeGui* gui) : AbstractSidebarPage(control) +SidebarPreviewBase::SidebarPreviewBase(Control* control, GladeGui* gui, SidebarToolbar* toolbar) + : AbstractSidebarPage(control), + toolbar(toolbar) { XOJ_INIT_TYPE(SidebarPreviewBase); this->backgroundInitialized = false; this->layoutmanager = new SidebarLayout(); - this->toolbar = new SidebarToolbar(control, gui); this->zoom = 0.15; @@ -62,9 +63,6 @@ SidebarPreviewBase::~SidebarPreviewBase() delete this->layoutmanager; this->layoutmanager = NULL; - delete this->toolbar; - this->toolbar = NULL; - g_object_unref(this->table); for (SidebarPreviewBaseEntry* p : this->previews) diff --git a/src/gui/sidebar/previews/base/SidebarPreviewBase.h b/src/gui/sidebar/previews/base/SidebarPreviewBase.h index bb0e9d44..a91be0e9 100644 --- a/src/gui/sidebar/previews/base/SidebarPreviewBase.h +++ b/src/gui/sidebar/previews/base/SidebarPreviewBase.h @@ -29,7 +29,7 @@ typedef std::vector SidebarPreviewBaseEntryVector; class SidebarPreviewBase : public AbstractSidebarPage { public: - SidebarPreviewBase(Control* control, GladeGui* gui); + SidebarPreviewBase(Control* control, GladeGui* gui, SidebarToolbar* toolbar); virtual ~SidebarPreviewBase(); public: diff --git a/src/gui/sidebar/previews/base/SidebarToolbar.cpp b/src/gui/sidebar/previews/base/SidebarToolbar.cpp index 4e1cc927..7701126e 100644 --- a/src/gui/sidebar/previews/base/SidebarToolbar.cpp +++ b/src/gui/sidebar/previews/base/SidebarToolbar.cpp @@ -4,6 +4,7 @@ #include "undo/CopyUndoAction.h" #include "undo/SwapUndoAction.h" + SidebarToolbar::SidebarToolbar(Control* control, GladeGui* gui) { XOJ_INIT_TYPE(SidebarToolbar); @@ -89,10 +90,16 @@ void SidebarToolbar::btCopyClicked(GtkToolButton* toolbutton, SidebarToolbar* to { XOJ_CHECK_TYPE_OBJ(toolbar, SidebarToolbar); + printf("copy page this=%lx\n", toolbar); + Document* doc = toolbar->control->getDocument(); doc->lock(); int page = doc->indexOf(toolbar->currentPage); + if (page < 0) + { + return; + } PageRef newPage = toolbar->currentPage.clone(); doc->insertPage(newPage, page + 1); @@ -126,5 +133,11 @@ void SidebarToolbar::setButtonEnabled(bool enableUp, bool enableDown, bool enabl gtk_widget_set_sensitive(GTK_WIDGET(this->btDelete), enableDelete); this->currentPage = currentPage; + + Document* doc = control->getDocument(); + doc->lock(); + int page = doc->indexOf(currentPage); + doc->unlock(); + printf("Current selected page is %i, this=%lx\n", page, this); } diff --git a/src/gui/sidebar/previews/layer/SidebarPreviewLayers.cpp b/src/gui/sidebar/previews/layer/SidebarPreviewLayers.cpp index cffce8a2..4447bc79 100644 --- a/src/gui/sidebar/previews/layer/SidebarPreviewLayers.cpp +++ b/src/gui/sidebar/previews/layer/SidebarPreviewLayers.cpp @@ -7,7 +7,8 @@ #include -SidebarPreviewLayers::SidebarPreviewLayers(Control* control, GladeGui* gui) : SidebarPreviewBase(control, gui) +SidebarPreviewLayers::SidebarPreviewLayers(Control* control, GladeGui* gui, SidebarToolbar* toolbar) + : SidebarPreviewBase(control, gui, toolbar) { XOJ_INIT_TYPE(SidebarPreviewLayers); displayedPage = 0; diff --git a/src/gui/sidebar/previews/layer/SidebarPreviewLayers.h b/src/gui/sidebar/previews/layer/SidebarPreviewLayers.h index 9acc8893..5032301e 100644 --- a/src/gui/sidebar/previews/layer/SidebarPreviewLayers.h +++ b/src/gui/sidebar/previews/layer/SidebarPreviewLayers.h @@ -18,7 +18,7 @@ class SidebarPreviewLayers : public SidebarPreviewBase { public: - SidebarPreviewLayers(Control* control, GladeGui* gui); + SidebarPreviewLayers(Control* control, GladeGui* gui, SidebarToolbar* toolbar); virtual ~SidebarPreviewLayers(); public: diff --git a/src/gui/sidebar/previews/page/SidebarPreviewPages.cpp b/src/gui/sidebar/previews/page/SidebarPreviewPages.cpp index 4108b061..17abe903 100644 --- a/src/gui/sidebar/previews/page/SidebarPreviewPages.cpp +++ b/src/gui/sidebar/previews/page/SidebarPreviewPages.cpp @@ -7,7 +7,8 @@ #include -SidebarPreviewPages::SidebarPreviewPages(Control* control, GladeGui* gui) : SidebarPreviewBase(control, gui) +SidebarPreviewPages::SidebarPreviewPages(Control* control, GladeGui* gui, SidebarToolbar* toolbar) + : SidebarPreviewBase(control, gui, toolbar) { XOJ_INIT_TYPE(SidebarPreviewPages); } diff --git a/src/gui/sidebar/previews/page/SidebarPreviewPages.h b/src/gui/sidebar/previews/page/SidebarPreviewPages.h index 56a75aa3..6bb8edd7 100644 --- a/src/gui/sidebar/previews/page/SidebarPreviewPages.h +++ b/src/gui/sidebar/previews/page/SidebarPreviewPages.h @@ -18,7 +18,7 @@ class SidebarPreviewPages : public SidebarPreviewBase { public: - SidebarPreviewPages(Control* control, GladeGui* gui); + SidebarPreviewPages(Control* control, GladeGui* gui, SidebarToolbar* toolbar); virtual ~SidebarPreviewPages(); public: diff --git a/src/model/PageRef.cpp b/src/model/PageRef.cpp index 12269146..2127535d 100644 --- a/src/model/PageRef.cpp +++ b/src/model/PageRef.cpp @@ -90,7 +90,14 @@ const XojPage* PageRef::operator->() const PageRef PageRef::clone() { - return PageRef(this->page->clone()); + if (this->page == NULL) + { + return PageRef(NULL); + } + else + { + return PageRef(this->page->clone()); + } } bool PageRef::isValid()