summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmmanuel Gil Peyrot <linkmauve@linkmauve.fr>2018-11-22 04:17:27 +0000
committerTavmjong Bah <tavmjong@free.fr>2018-12-03 09:35:13 +0000
commit6af653ae04272a27390821842d3e8e23c6af3efe (patch)
tree33956cb2251979c6d3b06882d858a6c36f8c5dfc
parentAdd other sofwar binds to new keys, add missing one (diff)
downloadinkscape-6af653ae04272a27390821842d3e8e23c6af3efe.tar.gz
inkscape-6af653ae04272a27390821842d3e8e23c6af3efe.zip
Replace InkGC with std::shared_ptr for MessageStack
There are many places which still use this stack unmanaged (using desktop->getMessageStack()) but those are all leaf calls which make use of the stack and never store it anywhere, so this is fine.
-rw-r--r--src/desktop.cpp6
-rw-r--r--src/message-context.cpp9
-rw-r--r--src/message-context.h5
-rw-r--r--src/message-stack.h9
-rw-r--r--src/selection-describer.cpp6
-rw-r--r--src/selection-describer.h3
-rw-r--r--src/ui/clipboard.cpp2
-rw-r--r--src/ui/dialog/pixelartdialog.cpp2
-rw-r--r--src/ui/dialog/xml-tree.cpp4
-rw-r--r--src/ui/dialog/xml-tree.h4
-rw-r--r--src/ui/tools/text-tool.cpp2
-rw-r--r--src/ui/view/view.cpp3
-rw-r--r--src/ui/view/view.h5
13 files changed, 30 insertions, 30 deletions
diff --git a/src/desktop.cpp b/src/desktop.cpp
index c1d061702..1936226d4 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -24,8 +24,8 @@
#include <glibmm/i18n.h>
#include <2geom/transforms.h>
-
#include <2geom/rect.h>
+#include <memory>
#include "desktop.h"
@@ -147,7 +147,7 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas, Inkscape::UI::View::EditWid
Inkscape::ResourceManager::getManager();
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- _guides_message_context = new Inkscape::MessageContext(const_cast<Inkscape::MessageStack*>(messageStack()));
+ _guides_message_context = new Inkscape::MessageContext(messageStack());
current = prefs->getStyle("/desktop/style");
@@ -433,7 +433,7 @@ SPCanvasGroup* SPDesktop::getTempGroup() const {
}
Inkscape::MessageStack* SPDesktop::getMessageStack() const {
- return messageStack();
+ return messageStack().get();
}
SPNamedView* SPDesktop::getNamedView() const {
diff --git a/src/message-context.cpp b/src/message-context.cpp
index 1a878d55f..4ff92a99c 100644
--- a/src/message-context.cpp
+++ b/src/message-context.cpp
@@ -16,15 +16,12 @@
namespace Inkscape {
-MessageContext::MessageContext(MessageStack *stack)
-: _stack(stack), _message_id(0), _flash_message_id(0)
-{
- GC::anchor(_stack);
-}
+MessageContext::MessageContext(std::shared_ptr<MessageStack> stack)
+: _stack(std::move(stack)), _message_id(0), _flash_message_id(0)
+{}
MessageContext::~MessageContext() {
clear();
- GC::release(_stack);
_stack = nullptr;
}
diff --git a/src/message-context.h b/src/message-context.h
index 3873d3b64..cfe155aa3 100644
--- a/src/message-context.h
+++ b/src/message-context.h
@@ -16,6 +16,7 @@
#define SEEN_INKSCAPE_MESSAGE_CONTEXT_H
#include <cstdarg>
+#include <memory>
#include <glib.h>
#include "message.h"
@@ -42,7 +43,7 @@ public:
*
* @param stack the Inkscape::MessageStack to use for our messages
*/
- MessageContext(MessageStack *stack);
+ MessageContext(std::shared_ptr<MessageStack> stack);
~MessageContext();
/** @brief pushes a message on the stack, replacing our old message
@@ -100,7 +101,7 @@ public:
void clear();
private:
- MessageStack *_stack; ///< the message stack to use
+ std::shared_ptr<MessageStack> _stack; ///< the message stack to use
MessageId _message_id; ///< our current message id, or 0
MessageId _flash_message_id; ///< current flashed message id, or 0
};
diff --git a/src/message-stack.h b/src/message-stack.h
index 7f145cf37..d105095da 100644
--- a/src/message-stack.h
+++ b/src/message-stack.h
@@ -23,9 +23,6 @@
#include <glibmm/ustring.h>
#include <sigc++/sigc++.h>
-#include "inkgc/gc-managed.h"
-#include "gc-finalized.h"
-#include "gc-anchored.h"
#include "message.h"
namespace Inkscape {
@@ -48,13 +45,11 @@ namespace Inkscape {
* assuming that the message you pushed is still on top is an
* invalid and unsafe assumption.
*/
-class MessageStack : public GC::Managed<>,
- public GC::Finalized,
- public GC::Anchored
+class MessageStack final
{
public:
MessageStack();
- ~MessageStack() override;
+ ~MessageStack();
/** @brief returns the type of message currently at the top of the stack */
MessageType currentMessageType() {
diff --git a/src/selection-describer.cpp b/src/selection-describer.cpp
index 9767a55bb..841e8e095 100644
--- a/src/selection-describer.cpp
+++ b/src/selection-describer.cpp
@@ -13,7 +13,9 @@
* Released under GNU GPL v2+, read the file 'COPYING' for more information.
*/
+#include <memory>
#include <set>
+#include <utility>
#include <glibmm/i18n.h>
@@ -86,8 +88,8 @@ static int count_filtered (const std::vector<SPItem*> &items)
namespace Inkscape {
-SelectionDescriber::SelectionDescriber(Inkscape::Selection *selection, MessageStack *stack, char *when_selected, char *when_nothing)
- : _context(stack),
+SelectionDescriber::SelectionDescriber(Inkscape::Selection *selection, std::shared_ptr<MessageStack> stack, char *when_selected, char *when_nothing)
+ : _context(std::move(stack)),
_when_selected (when_selected),
_when_nothing (when_nothing)
{
diff --git a/src/selection-describer.h b/src/selection-describer.h
index b57d14de7..259f5b233 100644
--- a/src/selection-describer.h
+++ b/src/selection-describer.h
@@ -14,6 +14,7 @@
#define SEEN_INKSCAPE_SELECTION_DESCRIPTION_HANDLER_H
#include <cstddef>
+#include <memory>
#include <sigc++/sigc++.h>
#include "message-context.h"
@@ -24,7 +25,7 @@ class Selection;
class SelectionDescriber : public sigc::trackable {
public:
- SelectionDescriber(Inkscape::Selection *selection, MessageStack *stack, char *when_selected, char *when_nothing);
+ SelectionDescriber(Inkscape::Selection *selection, std::shared_ptr<MessageStack> stack, char *when_selected, char *when_nothing);
~SelectionDescriber();
private:
diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp
index 2e9bbe123..7f9e4b872 100644
--- a/src/ui/clipboard.cpp
+++ b/src/ui/clipboard.cpp
@@ -358,7 +358,7 @@ bool ClipboardManagerImpl::paste(SPDesktop *desktop, bool in_place)
if ( desktop == nullptr ) {
return false;
}
- if ( Inkscape::have_viable_layer(desktop, desktop->messageStack()) == false ) {
+ if ( Inkscape::have_viable_layer(desktop, desktop->getMessageStack()) == false ) {
return false;
}
diff --git a/src/ui/dialog/pixelartdialog.cpp b/src/ui/dialog/pixelartdialog.cpp
index 7a79a44e1..e040d3be9 100644
--- a/src/ui/dialog/pixelartdialog.cpp
+++ b/src/ui/dialog/pixelartdialog.cpp
@@ -363,7 +363,7 @@ Tracer::Kopf2011::Options PixelArtDialogImpl::options()
void PixelArtDialogImpl::vectorize()
{
- Inkscape::MessageStack *msgStack = desktop->messageStack();
+ Inkscape::MessageStack *msgStack = desktop->getMessageStack();
if ( !desktop->selection ) {
char *msg = _("Select an <b>image</b> to trace");
diff --git a/src/ui/dialog/xml-tree.cpp b/src/ui/dialog/xml-tree.cpp
index d0cbf99cb..b430c17be 100644
--- a/src/ui/dialog/xml-tree.cpp
+++ b/src/ui/dialog/xml-tree.cpp
@@ -20,6 +20,7 @@
#include "xml-tree.h"
#include <glibmm/i18n.h>
+#include <memory>
#include "desktop.h"
@@ -94,7 +95,7 @@ XmlTree::XmlTree() :
contents->pack_start(*notebook_content, true, true, 0);
- _message_stack = new Inkscape::MessageStack();
+ _message_stack = std::make_shared<Inkscape::MessageStack>();
_message_context = new Inkscape::MessageContext(_message_stack);
_message_changed_connection = _message_stack->connectChanged(
sigc::bind(sigc::ptr_fun(_set_status_message), GTK_WIDGET(status.gobj())));
@@ -236,7 +237,6 @@ XmlTree::~XmlTree ()
_message_changed_connection.disconnect();
delete _message_context;
_message_context = nullptr;
- Inkscape::GC::release(_message_stack);
_message_stack = nullptr;
_message_changed_connection.~connection();
}
diff --git a/src/ui/dialog/xml-tree.h b/src/ui/dialog/xml-tree.h
index 09f90b0c4..973534ebd 100644
--- a/src/ui/dialog/xml-tree.h
+++ b/src/ui/dialog/xml-tree.h
@@ -13,6 +13,8 @@
#ifndef SEEN_DIALOGS_XML_TREE_H
#define SEEN_DIALOGS_XML_TREE_H
+#include <memory>
+
#include "ui/widget/panel.h"
#include <gtkmm/entry.h>
#include <gtkmm/textview.h>
@@ -191,7 +193,7 @@ private:
/**
* Status bar
*/
- Inkscape::MessageStack *_message_stack;
+ std::shared_ptr<Inkscape::MessageStack> _message_stack;
Inkscape::MessageContext *_message_context;
/**
diff --git a/src/ui/tools/text-tool.cpp b/src/ui/tools/text-tool.cpp
index 491154fb4..3ec0e6916 100644
--- a/src/ui/tools/text-tool.cpp
+++ b/src/ui/tools/text-tool.cpp
@@ -513,7 +513,7 @@ bool TextTool::root_handler(GdkEvent* event) {
case GDK_BUTTON_PRESS:
if (event->button.button == 1 && !this->space_panning) {
- if (Inkscape::have_viable_layer(desktop, desktop->messageStack()) == false) {
+ if (Inkscape::have_viable_layer(desktop, desktop->getMessageStack()) == false) {
return TRUE;
}
diff --git a/src/ui/view/view.cpp b/src/ui/view/view.cpp
index e8c3e32db..e15ea7780 100644
--- a/src/ui/view/view.cpp
+++ b/src/ui/view/view.cpp
@@ -12,6 +12,7 @@
*/
#include <2geom/point.h>
+#include <memory>
#include "document.h"
#include "view.h"
#include "message-stack.h"
@@ -57,7 +58,7 @@ _onDocumentResized (double x, double y, View* v)
View::View()
: _doc(nullptr)
{
- _message_stack = GC::release(new Inkscape::MessageStack());
+ _message_stack = std::make_shared<Inkscape::MessageStack>();
_tips_message_context = new Inkscape::MessageContext(_message_stack);
_resized_connection = _resized_signal.connect (sigc::bind (sigc::ptr_fun (&_onResized), this));
diff --git a/src/ui/view/view.h b/src/ui/view/view.h
index fa28ec72e..1134e727a 100644
--- a/src/ui/view/view.h
+++ b/src/ui/view/view.h
@@ -14,6 +14,7 @@
#include <gdk/gdk.h>
#include <cstddef>
+#include <memory>
#include <sigc++/connection.h>
#include "message.h"
#include "inkgc/gc-managed.h"
@@ -85,7 +86,7 @@ public:
SPDocument *doc() const
{ return _doc; }
/// Returns a pointer to the view's message stack.
- Inkscape::MessageStack *messageStack() const
+ std::shared_ptr<Inkscape::MessageStack> messageStack() const
{ return _message_stack; }
/// Returns a pointer to the view's tipsMessageContext.
Inkscape::MessageContext *tipsMessageContext() const
@@ -108,7 +109,7 @@ public:
protected:
SPDocument *_doc;
- Inkscape::MessageStack *_message_stack;
+ std::shared_ptr<Inkscape::MessageStack> _message_stack;
Inkscape::MessageContext *_tips_message_context;
virtual void _close();