Blob Blame Raw
From 3c0f93e37284c1a9fdb6008cc68cbe84d67cd4a3 Mon Sep 17 00:00:00 2001
From: Bart Janssens <bart@bartjanssens.org>
Date: Wed, 28 Feb 2018 23:18:56 +0100
Subject: [PATCH 10/16] COMP: Remove use of std::auto_ptr

---
 k3dsdk/data.h                                 |  6 +++---
 k3dsdk/document.cpp                           | 20 +++++++++----------
 k3dsdk/explicit_snap_source.h                 |  4 ++--
 k3dsdk/explicit_snap_target.h                 |  4 ++--
 k3dsdk/istate_recorder.h                      |  6 +++---
 k3dsdk/ngui/angle_axis.cpp                    |  8 ++++----
 k3dsdk/ngui/angle_axis.h                      |  6 +++---
 k3dsdk/ngui/bitmap_preview.cpp                |  8 ++++----
 k3dsdk/ngui/bitmap_preview.h                  | 10 +++++-----
 k3dsdk/ngui/bounding_box.cpp                  |  8 ++++----
 k3dsdk/ngui/bounding_box.h                    |  6 +++---
 k3dsdk/ngui/check_button.cpp                  | 12 +++++------
 k3dsdk/ngui/check_button.h                    | 16 +++++++--------
 k3dsdk/ngui/check_menu_item.cpp               | 12 +++++------
 k3dsdk/ngui/check_menu_item.h                 | 16 +++++++--------
 k3dsdk/ngui/color_chooser.cpp                 | 18 ++++++++---------
 k3dsdk/ngui/color_chooser.h                   | 16 +++++++--------
 k3dsdk/ngui/combo_box.cpp                     |  8 ++++----
 k3dsdk/ngui/combo_box.h                       | 10 +++++-----
 k3dsdk/ngui/main_document_window.cpp          |  8 ++++----
 k3dsdk/ngui/navigation_input_model.cpp        |  2 +-
 k3dsdk/ngui/node_chooser.cpp                  | 10 +++++-----
 k3dsdk/ngui/node_chooser.h                    | 18 ++++++++---------
 k3dsdk/ngui/path_chooser.cpp                  |  8 ++++----
 k3dsdk/ngui/path_chooser.h                    | 10 +++++-----
 k3dsdk/ngui/point3.cpp                        |  8 ++++----
 k3dsdk/ngui/point3.h                          |  6 +++---
 k3dsdk/ngui/property_button.cpp               |  4 ++--
 k3dsdk/ngui/property_button.h                 |  2 +-
 k3dsdk/ngui/property_label.cpp                |  4 ++--
 k3dsdk/ngui/property_label.h                  |  2 +-
 k3dsdk/ngui/property_widget.cpp               |  4 ++--
 k3dsdk/ngui/property_widget.h                 | 10 +++++-----
 k3dsdk/ngui/toggle_button.cpp                 |  4 ++--
 k3dsdk/state_change_set.cpp                   |  6 +++---
 k3dsdk/state_change_set.h                     |  2 +-
 modules/ngui/user_interface.cpp               |  4 ++--
 modules/ngui_material_manager_panel/panel.cpp |  8 ++++----
 38 files changed, 157 insertions(+), 157 deletions(-)

diff --git a/k3dsdk/data.h b/k3dsdk/data.h
index 44040ca2..1f920ffe 100644
--- a/k3dsdk/data.h
+++ b/k3dsdk/data.h
@@ -1534,7 +1534,7 @@ private:
 	virtual void on_constrain(value_t& Value) = 0;
 
 	/// Storage for the (optional) next constraint to apply in the chain
-	const std::auto_ptr<iconstraint<value_t> > m_next_constraint;
+	const std::unique_ptr<iconstraint<value_t> > m_next_constraint;
 };
 
 namespace constraint
@@ -1650,7 +1650,7 @@ protected:
 
 private:
 	/// Stores the (mandatory) chain of constraint nodes to apply to incoming values
-	const std::auto_ptr<iconstraint<value_t> > m_constraint;
+	const std::unique_ptr<iconstraint<value_t> > m_constraint;
 };
 
 /////////////////////////////////////////////////////////////////////////////
@@ -2058,7 +2058,7 @@ protected:
 
 private:
 	/// Storage for this policy's value
-	std::auto_ptr<non_pointer_t> m_value;
+	std::unique_ptr<non_pointer_t> m_value;
 	/// Set to true if this policy's value is stale and needs to be updated
 	bool m_update;
 	/// Stores a slot that will be executed to initialize this policy's value
diff --git a/k3dsdk/document.cpp b/k3dsdk/document.cpp
index 16cb6463..fb1d9386 100644
--- a/k3dsdk/document.cpp
+++ b/k3dsdk/document.cpp
@@ -98,7 +98,7 @@ public:
 		delete Node;
 	}
 
-	void start_recording(std::auto_ptr<state_change_set> ChangeSet, const char* const Context)
+	void start_recording(std::unique_ptr<state_change_set> ChangeSet, const char* const Context)
 	{
 		if(!ChangeSet.get())
 		{
@@ -109,11 +109,11 @@ public:
 		if(m_current_recording.get())
 		{
 			log() << warning << "Forcing termination of unfinished changeset.  Context: " << m_current_context << std::endl;
-			std::auto_ptr<state_change_set> changeset = stop_recording(Context);
-			commit_change_set(changeset, "Unfinished changeset", Context);
+			std::unique_ptr<state_change_set> changeset = stop_recording(Context);
+			commit_change_set(std::move(changeset), "Unfinished changeset", Context);
 		}
 
-		m_current_recording = ChangeSet;
+		m_current_recording = std::move(ChangeSet);
 		m_current_context = Context;
 	}
 
@@ -122,12 +122,12 @@ public:
 		return m_current_recording.get();
 	}
 
-	std::auto_ptr<state_change_set> stop_recording(const char* const Context)
+	std::unique_ptr<state_change_set> stop_recording(const char* const Context)
 	{
 		if(!m_current_recording.get())
 		{
 			log() << error << "stop_recording() attempt with NULL changeset.  Context: " << Context << std::endl;
-			return m_current_recording;
+			return std::move(m_current_recording);
 		}
 		
 		// Let the world know that recording is finished ...
@@ -137,10 +137,10 @@ public:
 		sigc::signal<void>::slot_list_type slots = m_recording_done_signal.slots();
 		slots.erase(slots.begin(), slots.end());
 
-		return m_current_recording;
+		return std::move(m_current_recording);
 	}
 
-	void commit_change_set(std::auto_ptr<state_change_set> ChangeSet, const std::string& Label, const char* const Context)
+	void commit_change_set(std::unique_ptr<state_change_set> ChangeSet, const std::string& Label, const char* const Context)
 	{
 		if(!ChangeSet.get())
 		{
@@ -229,7 +229,7 @@ public:
 
 private:
 	/// Stores the current change set
-	std::auto_ptr<state_change_set> m_current_recording;
+	std::unique_ptr<state_change_set> m_current_recording;
 	/// Stores the context for the current change set
 	const char* m_current_context;
 	/// Stores the root node(s) (if any)
@@ -546,7 +546,7 @@ documents_t& documents()
 
 idocument* create_document()
 {
-	std::auto_ptr<detail::document_implementation> document(new detail::document_implementation());
+	std::unique_ptr<detail::document_implementation> document(new detail::document_implementation());
 	detail::documents().push_back(document.get());
 	return document.release()->m_document;
 }
diff --git a/k3dsdk/explicit_snap_source.h b/k3dsdk/explicit_snap_source.h
index 2b6fe866..19f680a4 100644
--- a/k3dsdk/explicit_snap_source.h
+++ b/k3dsdk/explicit_snap_source.h
@@ -48,8 +48,8 @@ public:
 
 	std::string m_label;
 	k3d::point3 m_position;
-	std::auto_ptr<k3d::vector3> m_look;
-	std::auto_ptr<k3d::vector3> m_up;
+	std::unique_ptr<k3d::vector3> m_look;
+	std::unique_ptr<k3d::vector3> m_up;
 	groups_t m_groups;
 };
 
diff --git a/k3dsdk/explicit_snap_target.h b/k3dsdk/explicit_snap_target.h
index 2ec5fbde..46cd896e 100644
--- a/k3dsdk/explicit_snap_target.h
+++ b/k3dsdk/explicit_snap_target.h
@@ -49,8 +49,8 @@ public:
 
 	std::string m_label;
 	k3d::point3 m_position;
-	std::auto_ptr<k3d::vector3> m_look;
-	std::auto_ptr<k3d::vector3> m_up;
+	std::unique_ptr<k3d::vector3> m_look;
+	std::unique_ptr<k3d::vector3> m_up;
 	groups_t m_groups;
 };
 
diff --git a/k3dsdk/istate_recorder.h b/k3dsdk/istate_recorder.h
index 76c7db04..9350e4c8 100644
--- a/k3dsdk/istate_recorder.h
+++ b/k3dsdk/istate_recorder.h
@@ -42,13 +42,13 @@ class istate_recorder :
 {
 public:
 	/// Called by clients to register a change set for recording subsequent state changes (the recorder assumes responsibility for the lifetime of the changeset)
-	virtual void start_recording(std::auto_ptr<state_change_set> ChangeSet, const char* const DebugLabel) = 0;
+	virtual void start_recording(std::unique_ptr<state_change_set> ChangeSet, const char* const DebugLabel) = 0;
 	/// Returns the current change set being recorded (if any - could return NULL)
 	virtual state_change_set* current_change_set() = 0;
 	/// Called by clients to stop recording a set of state changes (the recorder relinquishes responsibility for the lifetime of the returned changeset)
-	virtual std::auto_ptr<state_change_set> stop_recording(const char* const DebugLabel) = 0;
+	virtual std::unique_ptr<state_change_set> stop_recording(const char* const DebugLabel) = 0;
 	/// Called by clients once a set of changes is complete, to make them a part of the undo/redo tree (the recorder assumes responsibility for the lifetime of the change set)
-	virtual void commit_change_set(std::auto_ptr<state_change_set> ChangeSet, const std::string& Label, const char* const DebugLabel) = 0;
+	virtual void commit_change_set(std::unique_ptr<state_change_set> ChangeSet, const std::string& Label, const char* const DebugLabel) = 0;
 
 	/// Defines a collection of "nodes" in the hierarchy of recorded state changes
 	struct node;
diff --git a/k3dsdk/ngui/angle_axis.cpp b/k3dsdk/ngui/angle_axis.cpp
index 1a63b5ea..18e600bd 100644
--- a/k3dsdk/ngui/angle_axis.cpp
+++ b/k3dsdk/ngui/angle_axis.cpp
@@ -142,9 +142,9 @@ private:
 /////////////////////////////////////////////////////////////////////////////
 // control
 
-control::control(std::auto_ptr<idata_proxy> Data) :
+control::control(std::unique_ptr<idata_proxy> Data) :
 	base(3, 3, false),
-	m_data(Data),
+	m_data(std::move(Data)),
 	m_reset_button(new Gtk::Button(_("Reset")))
 {
 	spin_button::control* const x = new spin_button::control(new spin_button_model(*m_data, 0), m_data->state_recorder);
@@ -181,9 +181,9 @@ void control::on_reset()
 /////////////////////////////////////////////////////////////////////////////
 // proxy
 
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Property, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Property, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
 {
-	return std::auto_ptr<idata_proxy>(new detail::data_proxy(Property, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new detail::data_proxy(Property, StateRecorder, ChangeMessage));
 }
 
 } // namespace angle_axis
diff --git a/k3dsdk/ngui/angle_axis.h b/k3dsdk/ngui/angle_axis.h
index 272b4c33..386090b8 100644
--- a/k3dsdk/ngui/angle_axis.h
+++ b/k3dsdk/ngui/angle_axis.h
@@ -90,14 +90,14 @@ class control :
 	typedef Gtk::Table base;
 
 public:
-	control(std::auto_ptr<idata_proxy> Data);
+	control(std::unique_ptr<idata_proxy> Data);
 
 private:
 	/// Called to reset the object orientation to the origin
 	void on_reset();
 
 	/// Stores a reference to the underlying data object
-	std::auto_ptr<idata_proxy> m_data;
+	std::unique_ptr<idata_proxy> m_data;
 	/// Stores the reset button
 	Gtk::Button* const m_reset_button;
 };
@@ -106,7 +106,7 @@ private:
 // proxy
 
 /// Convenience factory function for creating k3d::spin_button::idata_proxy objects, specialized for k3d::iproperty
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
 
 } // namespace angle_axis
 
diff --git a/k3dsdk/ngui/bitmap_preview.cpp b/k3dsdk/ngui/bitmap_preview.cpp
index fc17fd8c..6ad5b0b2 100644
--- a/k3dsdk/ngui/bitmap_preview.cpp
+++ b/k3dsdk/ngui/bitmap_preview.cpp
@@ -72,21 +72,21 @@ private:
 	k3d::iproperty& m_readable_data;
 };
 
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data)
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data)
 {
-	return std::auto_ptr<idata_proxy>(new property_proxy(Data));
+	return std::unique_ptr<idata_proxy>(new property_proxy(Data));
 }
 
 /////////////////////////////////////////////////////////////////////////////
 // control
 
-control::control(std::auto_ptr<idata_proxy> Data) :
+control::control(std::unique_ptr<idata_proxy> Data) :
 	base(Gtk::BUTTONBOX_START, 2),
 	m_image_buffer(64, 64),
 	m_alpha_buffer(64, 64),
 	m_image(new Gtk::Image()),
 	m_alpha(new Gtk::Image()),
-	m_data(Data)
+	m_data(std::move(Data))
 {
 	pack_start(*manage(m_image), Gtk::PACK_SHRINK);
 	pack_start(*manage(m_alpha), Gtk::PACK_SHRINK);
diff --git a/k3dsdk/ngui/bitmap_preview.h b/k3dsdk/ngui/bitmap_preview.h
index e2a6577f..d0ba2c23 100644
--- a/k3dsdk/ngui/bitmap_preview.h
+++ b/k3dsdk/ngui/bitmap_preview.h
@@ -73,7 +73,7 @@ class control :
 	typedef Gtk::HButtonBox base;
 
 public:
-	control(std::auto_ptr<idata_proxy> Data);
+	control(std::unique_ptr<idata_proxy> Data);
 
 private:
 	/// Called whenever the underlying data changes
@@ -87,7 +87,7 @@ private:
 	/// Displays the alpha channel
 	Gtk::Image* const m_alpha;
 	/// Storeas a reference to the underlying data object
-	std::auto_ptr<idata_proxy> m_data;
+	std::unique_ptr<idata_proxy> m_data;
 };
 
 /// Provides an implementation of bitmap_preview::idata_proxy that supports any data source that supports the value(), set_value(), and changed_signal() concepts
@@ -120,13 +120,13 @@ private:
 
 /// Convenience factory function for creating bitmap_preview::idata_proxy objects
 template<typename data_t>
-std::auto_ptr<idata_proxy> proxy(data_t& Data)
+std::unique_ptr<idata_proxy> proxy(data_t& Data)
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<data_t>(Data));
+	return std::unique_ptr<idata_proxy>(new data_proxy<data_t>(Data));
 }
 
 /// Specialization of proxy() for use with properties
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data);
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data);
 
 } // namespace bitmap_preview
 
diff --git a/k3dsdk/ngui/bounding_box.cpp b/k3dsdk/ngui/bounding_box.cpp
index 43a30b52..b46b6460 100644
--- a/k3dsdk/ngui/bounding_box.cpp
+++ b/k3dsdk/ngui/bounding_box.cpp
@@ -138,9 +138,9 @@ private:
 /////////////////////////////////////////////////////////////////////////////
 // control
 
-control::control(std::auto_ptr<idata_proxy> Data) :
+control::control(std::unique_ptr<idata_proxy> Data) :
 	base(3, 3, false),
-	m_data(Data)
+	m_data(std::move(Data))
 {
 	spin_button::control* const nx = new spin_button::control(new spin_button_model(*m_data, &k3d::bounding_box3::nx), m_data->state_recorder);
 	spin_button::control* const px = new spin_button::control(new spin_button_model(*m_data, &k3d::bounding_box3::px), m_data->state_recorder);
@@ -165,9 +165,9 @@ control::control(std::auto_ptr<idata_proxy> Data) :
 /////////////////////////////////////////////////////////////////////////////
 // proxy
 
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Property, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Property, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
 {
-	return std::auto_ptr<idata_proxy>(new detail::data_proxy(Property, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new detail::data_proxy(Property, StateRecorder, ChangeMessage));
 }
 
 } // namespace bounding_box
diff --git a/k3dsdk/ngui/bounding_box.h b/k3dsdk/ngui/bounding_box.h
index 44881954..8520dda2 100644
--- a/k3dsdk/ngui/bounding_box.h
+++ b/k3dsdk/ngui/bounding_box.h
@@ -91,18 +91,18 @@ class control :
 	typedef Gtk::Table base;
 
 public:
-	control(std::auto_ptr<idata_proxy> Data);
+	control(std::unique_ptr<idata_proxy> Data);
 
 private:
 	/// Stores a reference to the underlying data object
-	std::auto_ptr<idata_proxy> m_data;
+	std::unique_ptr<idata_proxy> m_data;
 };
 
 /////////////////////////////////////////////////////////////////////////////
 // proxy
 
 /// Convenience factory function for creating k3d::spin_button::idata_proxy objects, specialized for k3d::iproperty
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
 
 } // namespace bounding_box
 
diff --git a/k3dsdk/ngui/check_button.cpp b/k3dsdk/ngui/check_button.cpp
index f3ca63f5..389200e6 100644
--- a/k3dsdk/ngui/check_button.cpp
+++ b/k3dsdk/ngui/check_button.cpp
@@ -82,16 +82,16 @@ private:
 	k3d::iwritable_property* const m_writable_data;
 };
 
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<k3d::iproperty>(Data, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new data_proxy<k3d::iproperty>(Data, StateRecorder, ChangeMessage));
 }
 
 /////////////////////////////////////////////////////////////////////////////
 // control
 
-control::control(std::auto_ptr<idata_proxy> Data) :
-	m_data(Data)
+control::control(std::unique_ptr<idata_proxy> Data) :
+	m_data(std::move(Data))
 {
 	set_name("k3d-check-button");
 	attach();
@@ -99,9 +99,9 @@ control::control(std::auto_ptr<idata_proxy> Data) :
 	set_sensitive(m_data.get() && m_data->writable());
 }
 
-control::control(std::auto_ptr<idata_proxy> Data, const Glib::ustring& label, bool mnemonic) :
+control::control(std::unique_ptr<idata_proxy> Data, const Glib::ustring& label, bool mnemonic) :
 	base(label, mnemonic),
-	m_data(Data)
+	m_data(std::move(Data))
 {
 	set_name("k3d-check-button");
 	attach();
diff --git a/k3dsdk/ngui/check_button.h b/k3dsdk/ngui/check_button.h
index 6a811ab8..cffd3a07 100644
--- a/k3dsdk/ngui/check_button.h
+++ b/k3dsdk/ngui/check_button.h
@@ -90,8 +90,8 @@ class control :
 	typedef Gtk::CheckButton base;
 
 public:
-	control(std::auto_ptr<idata_proxy> Data);
-	control(std::auto_ptr<idata_proxy> Data, const Glib::ustring& label, bool mnemonic = false);
+	control(std::unique_ptr<idata_proxy> Data);
+	control(std::unique_ptr<idata_proxy> Data, const Glib::ustring& label, bool mnemonic = false);
 
 	void on_toggled();
 
@@ -101,7 +101,7 @@ private:
 	/// Called to update the state of the widget when the underlying data source changes
 	void update(k3d::ihint*);
 	/// Storeas a reference to the underlying data object
-	const std::auto_ptr<idata_proxy> m_data;
+	const std::unique_ptr<idata_proxy> m_data;
 };
 
 /// Provides an implementation of k3d::check_button::idata_proxy that supports any data source that supports the value(), set_value(), and changed_signal() concepts
@@ -145,18 +145,18 @@ private:
 
 /// Convenience factory function for creating check_button::idata_proxy objects
 template<typename data_t>
-std::auto_ptr<idata_proxy> proxy(data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring())
+std::unique_ptr<idata_proxy> proxy(data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring())
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<data_t>(Data, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new data_proxy<data_t>(Data, StateRecorder, ChangeMessage));
 }
 
 /// Convenience factory function for creating check_button::idata_proxy objects specialized for use with k3d::iproperty
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
 
 /// Convenience factory function for creating empty check_button::idata_proxy objects
-inline std::auto_ptr<idata_proxy> proxy()
+inline std::unique_ptr<idata_proxy> proxy()
 {
-	return std::auto_ptr<idata_proxy>(0);
+	return std::unique_ptr<idata_proxy>(nullptr);
 }
 
 } // namespace check_button
diff --git a/k3dsdk/ngui/check_menu_item.cpp b/k3dsdk/ngui/check_menu_item.cpp
index 2e95114b..8f2c0f5a 100644
--- a/k3dsdk/ngui/check_menu_item.cpp
+++ b/k3dsdk/ngui/check_menu_item.cpp
@@ -78,24 +78,24 @@ private:
 	k3d::iwritable_property* const m_writable_data;
 };
 
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<k3d::iproperty>(Data, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new data_proxy<k3d::iproperty>(Data, StateRecorder, ChangeMessage));
 }
 
 /////////////////////////////////////////////////////////////////////////////
 // control
 
-control::control(std::auto_ptr<idata_proxy> Data) :
-	m_data(Data)
+control::control(std::unique_ptr<idata_proxy> Data) :
+	m_data(std::move(Data))
 {
 	set_name("k3d-check-menu-item");
 	attach();
 }
 
-control::control(std::auto_ptr<idata_proxy> Data, const Glib::ustring& label, bool mnemonic) :
+control::control(std::unique_ptr<idata_proxy> Data, const Glib::ustring& label, bool mnemonic) :
 	base(label, mnemonic),
-	m_data(Data)
+	m_data(std::move(Data))
 {
 	set_name("k3d-check-menu-item");
 	attach();
diff --git a/k3dsdk/ngui/check_menu_item.h b/k3dsdk/ngui/check_menu_item.h
index a16fc9aa..4ce2ecb5 100644
--- a/k3dsdk/ngui/check_menu_item.h
+++ b/k3dsdk/ngui/check_menu_item.h
@@ -88,8 +88,8 @@ class control :
 	typedef Gtk::CheckMenuItem base;
 
 public:
-	control(std::auto_ptr<idata_proxy> Data);
-	control(std::auto_ptr<idata_proxy> Data, const Glib::ustring& label, bool mnemonic = false);
+	control(std::unique_ptr<idata_proxy> Data);
+	control(std::unique_ptr<idata_proxy> Data, const Glib::ustring& label, bool mnemonic = false);
 
 	void on_toggled();
 
@@ -100,7 +100,7 @@ private:
 	void update(k3d::ihint*);
 
 	/// Stores a reference to the underlying data object
-	const std::auto_ptr<idata_proxy> m_data;
+	const std::unique_ptr<idata_proxy> m_data;
 };
 
 /// Provides an implementation of k3d::check_menu_item::idata_proxy that supports any data source that supports the value(), set_value(), and changed_signal() concepts
@@ -139,18 +139,18 @@ private:
 
 /// Convenience factory function for creating check_menu_item::idata_proxy objects
 template<typename data_t>
-std::auto_ptr<idata_proxy> proxy(data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring())
+std::unique_ptr<idata_proxy> proxy(data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring())
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<data_t>(Data, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new data_proxy<data_t>(Data, StateRecorder, ChangeMessage));
 }
 
 /// Convenience factory function for creating check_menu_item::idata_proxy objects specialized for use with k3d::iproperty objects
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
 
 /// Convenience factory function for creating empty check_menu_item::idata_proxy objects
-inline std::auto_ptr<idata_proxy> proxy()
+inline std::unique_ptr<idata_proxy> proxy()
 {
-	return std::auto_ptr<idata_proxy>();
+	return std::unique_ptr<idata_proxy>();
 }
 
 } // namespace check_menu_item
diff --git a/k3dsdk/ngui/color_chooser.cpp b/k3dsdk/ngui/color_chooser.cpp
index ca6439c7..09701b7c 100644
--- a/k3dsdk/ngui/color_chooser.cpp
+++ b/k3dsdk/ngui/color_chooser.cpp
@@ -58,8 +58,8 @@ class color_selection_dialog:
 	typedef application_window base;
 
 public:
-	color_selection_dialog(std::auto_ptr<idata_proxy> Data) :
-		m_data(Data)
+	color_selection_dialog(std::unique_ptr<idata_proxy> Data) :
+		m_data(std::move(Data))
 	{
 		Gtk::VBox* const vbox = new Gtk::VBox(false);
 		add(*manage(vbox));
@@ -117,7 +117,7 @@ private:
 
 	Gtk::ColorSelection m_color_selection;
 	sigc::connection m_color_changed_connection;
-	std::auto_ptr<idata_proxy> m_data;
+	std::unique_ptr<idata_proxy> m_data;
 };
 
 } // namespace detail
@@ -168,9 +168,9 @@ public:
 		return m_readable_data.property_changed_signal();
 	}
 
-	std::auto_ptr<idata_proxy> clone()
+	std::unique_ptr<idata_proxy> clone()
 	{
-		return std::auto_ptr<idata_proxy>(new data_proxy<data_t>(m_readable_data, state_recorder, change_message));
+		return std::unique_ptr<idata_proxy>(new data_proxy<data_t>(m_readable_data, state_recorder, change_message));
 	}
 
 private:
@@ -181,17 +181,17 @@ private:
 	k3d::iwritable_property* const m_writable_data;
 };
 
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<k3d::iproperty>(Data, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new data_proxy<k3d::iproperty>(Data, StateRecorder, ChangeMessage));
 }
 
 /////////////////////////////////////////////////////////////////////////////
 // control
 
-control::control(std::auto_ptr<idata_proxy> Data) :
+control::control(std::unique_ptr<idata_proxy> Data) :
 	m_area(new Gtk::DrawingArea()),
-	m_data(Data)
+	m_data(std::move(Data))
 {
 	m_area->signal_expose_event().connect(sigc::hide(sigc::mem_fun(*this, &control::on_redraw)));
 	add(*manage(m_area));
diff --git a/k3dsdk/ngui/color_chooser.h b/k3dsdk/ngui/color_chooser.h
index 08bd15b3..b5084706 100644
--- a/k3dsdk/ngui/color_chooser.h
+++ b/k3dsdk/ngui/color_chooser.h
@@ -68,7 +68,7 @@ public:
 	const Glib::ustring change_message;
 
 	/// Virtual copy constructor idiom
-	virtual std::auto_ptr<idata_proxy> clone() = 0;
+	virtual std::unique_ptr<idata_proxy> clone() = 0;
 
 protected:
 	idata_proxy(k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage) :
@@ -92,7 +92,7 @@ class control :
 	typedef Gtk::Button base;
 
 public:
-	control(std::auto_ptr<idata_proxy> Data);
+	control(std::unique_ptr<idata_proxy> Data);
 	~control();
 
 private:
@@ -106,7 +106,7 @@ private:
 	/// Displays the currently color
 	Gtk::DrawingArea* const m_area;
 	/// Stores a reference to the underlying data object
-	std::auto_ptr<idata_proxy> m_data;
+	std::unique_ptr<idata_proxy> m_data;
 	/// Stores a signal that will be emitted when the control is destroyed
 	sigc::signal<void> m_deleted_signal;
 };
@@ -138,9 +138,9 @@ public:
 		return m_data.changed_signal();
 	}
 
-	std::auto_ptr<idata_proxy> clone()
+	std::unique_ptr<idata_proxy> clone()
 	{
-		return std::auto_ptr<idata_proxy>(new data_proxy<data_t>(m_data, state_recorder, change_message));
+		return std::unique_ptr<idata_proxy>(new data_proxy<data_t>(m_data, state_recorder, change_message));
 	}
 
 private:
@@ -152,13 +152,13 @@ private:
 
 /// Convenience factory function for creating color_chooser::idata_proxy objects
 template<typename data_t>
-std::auto_ptr<idata_proxy> proxy(data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = "")
+std::unique_ptr<idata_proxy> proxy(data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = "")
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<data_t>(Data, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new data_proxy<data_t>(Data, StateRecorder, ChangeMessage));
 }
 
 /// Convenience factory function for creating color_chooser::idata_proxy objects, specialized for k3d::iproperty
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = "");
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = "");
 
 } // namespace color_chooser
 
diff --git a/k3dsdk/ngui/combo_box.cpp b/k3dsdk/ngui/combo_box.cpp
index d45737d3..a24ca6b5 100644
--- a/k3dsdk/ngui/combo_box.cpp
+++ b/k3dsdk/ngui/combo_box.cpp
@@ -79,16 +79,16 @@ private:
 	k3d::iwritable_property* const m_writable_data;
 };
 
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<k3d::iproperty>(Data, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new data_proxy<k3d::iproperty>(Data, StateRecorder, ChangeMessage));
 }
 
 /////////////////////////////////////////////////////////////////////////////
 // control
 
-control::control(std::auto_ptr<idata_proxy> Data) :
-	m_data(Data)
+control::control(std::unique_ptr<idata_proxy> Data) :
+	m_data(std::move(Data))
 {
 	if(m_data.get())
 		m_data->changed_signal().connect(sigc::mem_fun(*this, &control::data_changed));
diff --git a/k3dsdk/ngui/combo_box.h b/k3dsdk/ngui/combo_box.h
index 39e66d92..79c838b1 100644
--- a/k3dsdk/ngui/combo_box.h
+++ b/k3dsdk/ngui/combo_box.h
@@ -90,7 +90,7 @@ class control :
 	typedef Gtk::ComboBoxEntry base;
 
 public:
-	control(std::auto_ptr<idata_proxy> Data);
+	control(std::unique_ptr<idata_proxy> Data);
 
 	/// Defines a predefined (but not exclusive) list of values that should be available to the user
 	typedef std::vector<std::string> values_t;
@@ -114,7 +114,7 @@ private:
 	void set_new_value();
 
 	/// Stores a proxy for the underlying data source
-	std::auto_ptr<idata_proxy> m_data;
+	std::unique_ptr<idata_proxy> m_data;
 
 	/// Defines a data model for the underlying combo box widget
 	class columns :
@@ -173,13 +173,13 @@ private:
 
 /// Convenience factory function for creating combo_box::idata_proxy objects
 template<typename data_t>
-std::auto_ptr<idata_proxy> proxy(data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring())
+std::unique_ptr<idata_proxy> proxy(data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring())
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<data_t>(Data, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new data_proxy<data_t>(Data, StateRecorder, ChangeMessage));
 }
 
 /// Convenience factory function for creating combo_box::idata_proxy objects for use with k3d::iproperty
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
 
 } // namespace combo_box
 
diff --git a/k3dsdk/ngui/main_document_window.cpp b/k3dsdk/ngui/main_document_window.cpp
index 2264fc84..dc6756cb 100644
--- a/k3dsdk/ngui/main_document_window.cpp
+++ b/k3dsdk/ngui/main_document_window.cpp
@@ -2852,13 +2852,13 @@ private:
 	static unsigned long m_count;
 
 	/// Stores the Edit > Undo menu item
-	std::auto_ptr<Gtk::ImageMenuItem> m_undo_menu_item;
+	std::unique_ptr<Gtk::ImageMenuItem> m_undo_menu_item;
 	/// Stores the Edit > Undo All menu item
-	std::auto_ptr<Gtk::ImageMenuItem> m_undo_all_menu_item;
+	std::unique_ptr<Gtk::ImageMenuItem> m_undo_all_menu_item;
 	/// Stores the Edit > Redo menu item
-	std::auto_ptr<Gtk::ImageMenuItem> m_redo_menu_item;
+	std::unique_ptr<Gtk::ImageMenuItem> m_redo_menu_item;
 	/// Stores the Edit > Redo All menu item
-	std::auto_ptr<Gtk::ImageMenuItem> m_redo_all_menu_item;
+	std::unique_ptr<Gtk::ImageMenuItem> m_redo_all_menu_item;
 	/// Set to true iff current panel was maximized
 	k3d_data(bool, immutable_name, change_signal, no_undo, local_storage, no_constraint, no_property, no_serialization) m_maximize_panel;
 	/// Set to true iff unpinned panels are hidden
diff --git a/k3dsdk/ngui/navigation_input_model.cpp b/k3dsdk/ngui/navigation_input_model.cpp
index 3e4b7184..3655722a 100644
--- a/k3dsdk/ngui/navigation_input_model.cpp
+++ b/k3dsdk/ngui/navigation_input_model.cpp
@@ -638,7 +638,7 @@ struct navigation_input_model::implementation
 	double m_dolly_sensitivity;
 
 	/// Context menu
-	std::auto_ptr<Gtk::Menu> m_context_menu;
+	std::unique_ptr<Gtk::Menu> m_context_menu;
 
 	k3d::timer m_timer;
 };
diff --git a/k3dsdk/ngui/node_chooser.cpp b/k3dsdk/ngui/node_chooser.cpp
index 46628074..a42c523c 100644
--- a/k3dsdk/ngui/node_chooser.cpp
+++ b/k3dsdk/ngui/node_chooser.cpp
@@ -92,10 +92,10 @@ private:
 /////////////////////////////////////////////////////////////////////////////
 // control
 
-control::control(std::auto_ptr<idata_proxy> Data, std::auto_ptr<iselection_filter> Filter) :
+control::control(std::unique_ptr<idata_proxy> Data, std::unique_ptr<iselection_filter> Filter) :
 	base(false, 0),
-	m_data(Data),
-	m_filter(Filter),
+	m_data(std::move(Data)),
+	m_filter(std::move(Filter)),
 	m_label(new Gtk::Label()),
 	m_menu_button(new Gtk::Button()),
 	m_edit_button(new Gtk::Button())
@@ -262,9 +262,9 @@ void control::on_edit()
 	panel::mediator(m_data->document().document()).set_focus(*m_data->node());
 }
 
-std::auto_ptr<iselection_filter> filter(k3d::iproperty& Data)
+std::unique_ptr<iselection_filter> filter(k3d::iproperty& Data)
 {
-	return std::auto_ptr<iselection_filter>(new detail::property_filter(Data));
+	return std::unique_ptr<iselection_filter>(new detail::property_filter(Data));
 }
 
 } // namespace node_chooser
diff --git a/k3dsdk/ngui/node_chooser.h b/k3dsdk/ngui/node_chooser.h
index 2d1c1ea7..65b7759f 100644
--- a/k3dsdk/ngui/node_chooser.h
+++ b/k3dsdk/ngui/node_chooser.h
@@ -120,7 +120,7 @@ class control :
 	typedef Gtk::HBox base;
 
 public:
-	control(std::auto_ptr<idata_proxy> Data, std::auto_ptr<iselection_filter> Filter);
+	control(std::unique_ptr<idata_proxy> Data, std::unique_ptr<iselection_filter> Filter);
 
 private:
 	/// Called when new nodes are added to the document
@@ -144,15 +144,15 @@ private:
 	void reset_menu();
 
 	/// Stores a reference to the underlying data node
-	std::auto_ptr<idata_proxy> m_data;
+	std::unique_ptr<idata_proxy> m_data;
 	/// Stores a filter node for controlling the set of available choices
-	std::auto_ptr<iselection_filter> m_filter;
+	std::unique_ptr<iselection_filter> m_filter;
 
 	Gtk::Label* const m_label;
 	Gtk::Button* const m_menu_button;
 	Gtk::Button* const m_edit_button;
 
-	std::auto_ptr<Gtk::Menu> m_menu;
+	std::unique_ptr<Gtk::Menu> m_menu;
 	std::map<std::string, Gtk::MenuItem*> m_menu_item_create;
 	std::map<std::string, Gtk::MenuItem*> m_menu_item_select;
 };
@@ -246,9 +246,9 @@ private:
 
 /// Convenience factory function for creating node_chooser::idata_proxy objects
 template<typename data_t>
-std::auto_ptr<idata_proxy> proxy(document_state& DocumentState, data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = "")
+std::unique_ptr<idata_proxy> proxy(document_state& DocumentState, data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = "")
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<data_t>(DocumentState, Data, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new data_proxy<data_t>(DocumentState, Data, StateRecorder, ChangeMessage));
 }
 
 /// Provides an implementation of k3d::node_chooser::iselection_filter that filters based on a specific interface type
@@ -283,13 +283,13 @@ private:
 
 /// Convenience factory function for creating k3d::node_chooser::iselection_filter nodes
 template<typename interface_t>
-std::auto_ptr<iselection_filter> filter(const bool AllowNone)
+std::unique_ptr<iselection_filter> filter(const bool AllowNone)
 {
-	return std::auto_ptr<iselection_filter>(new selection_filter<interface_t>(AllowNone));
+	return std::unique_ptr<iselection_filter>(new selection_filter<interface_t>(AllowNone));
 }
 
 /// Convenience factory function for creating k3d::node_chooser::iselection_filter nodes for use with k3d::iproperty nodes
-std::auto_ptr<iselection_filter> filter(k3d::iproperty& Data);
+std::unique_ptr<iselection_filter> filter(k3d::iproperty& Data);
 
 } // namespace node_chooser
 
diff --git a/k3dsdk/ngui/path_chooser.cpp b/k3dsdk/ngui/path_chooser.cpp
index 4112907d..791c03f5 100644
--- a/k3dsdk/ngui/path_chooser.cpp
+++ b/k3dsdk/ngui/path_chooser.cpp
@@ -137,21 +137,21 @@ private:
 	k3d::iwatched_path_property* const m_watched_data;
 };
 
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<k3d::iproperty>(Data, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new data_proxy<k3d::iproperty>(Data, StateRecorder, ChangeMessage));
 }
 
 /////////////////////////////////////////////////////////////////////////////
 // control
 
-control::control(std::auto_ptr<idata_proxy> Data) :
+control::control(std::unique_ptr<idata_proxy> Data) :
 	base(false, 0),
 	m_entry(new hotkey_entry),
 	m_button(new Gtk::Button("...")),
 	m_combo(new Gtk::ComboBox()),
 	m_toggle_button(0),
-	m_data(Data),
+	m_data(std::move(Data)),
 	m_disable_set_value(false)
 {
 	m_entry->signal_focus_out_event().connect(sigc::mem_fun(*this, &control::on_focus_out_event));
diff --git a/k3dsdk/ngui/path_chooser.h b/k3dsdk/ngui/path_chooser.h
index 197c1e30..9baade94 100644
--- a/k3dsdk/ngui/path_chooser.h
+++ b/k3dsdk/ngui/path_chooser.h
@@ -106,7 +106,7 @@ class control :
 	typedef Gtk::HBox base;
 
 public:
-	control(std::auto_ptr<idata_proxy> Data);
+	control(std::unique_ptr<idata_proxy> Data);
 
 private:
 	/// Called when the control loses the keyboard focus
@@ -135,7 +135,7 @@ private:
 	/// Stores a toggle button to set if the file should be watched, if the path property is watchable
 	Gtk::ToggleButton* m_toggle_button;
 	/// Stores a reference to the underlying data object
-	std::auto_ptr<idata_proxy> m_data;
+	std::unique_ptr<idata_proxy> m_data;
 	/// Prevent set_value() and on_watch_toggle from being called recursively (a hack)
 	bool m_disable_set_value;
 
@@ -192,13 +192,13 @@ private:
 
 /// Convenience factory function for creating idata_proxy objects
 template<typename data_t>
-std::auto_ptr<idata_proxy> proxy(data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring())
+std::unique_ptr<idata_proxy> proxy(data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring())
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<data_t>(Data, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new data_proxy<data_t>(Data, StateRecorder, ChangeMessage));
 }
 
 /// Convenience factory function for creating idata_proxy objects
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
 
 } // namespace path_chooser
 
diff --git a/k3dsdk/ngui/point3.cpp b/k3dsdk/ngui/point3.cpp
index 388d6bcf..bde10988 100644
--- a/k3dsdk/ngui/point3.cpp
+++ b/k3dsdk/ngui/point3.cpp
@@ -165,9 +165,9 @@ private:
 /////////////////////////////////////////////////////////////////////////////
 // control
 
-control::control(std::auto_ptr<idata_proxy> Data) :
+control::control(std::unique_ptr<idata_proxy> Data) :
 	base(3, 3, false),
-	m_data(Data),
+	m_data(std::move(Data)),
 	m_reset_button(0)
 {
 	spin_button::control* const x = new spin_button::control(new spin_button_model(*m_data, 0), m_data->state_recorder);
@@ -208,9 +208,9 @@ void control::on_reset()
 /////////////////////////////////////////////////////////////////////////////
 // proxy
 
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Property, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Property, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
 {
-	return std::auto_ptr<idata_proxy>(new detail::data_proxy(Property, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new detail::data_proxy(Property, StateRecorder, ChangeMessage));
 }
 
 } // namespace point
diff --git a/k3dsdk/ngui/point3.h b/k3dsdk/ngui/point3.h
index 505db4a8..7c03339c 100644
--- a/k3dsdk/ngui/point3.h
+++ b/k3dsdk/ngui/point3.h
@@ -92,14 +92,14 @@ class control :
 	typedef Gtk::Table base;
 
 public:
-	control(std::auto_ptr<idata_proxy> Data);
+	control(std::unique_ptr<idata_proxy> Data);
 
 private:
 	/// Called to reset the object point to the origin
 	void on_reset();
 
 	/// Stores a reference to the underlying data object
-	std::auto_ptr<idata_proxy> m_data;
+	std::unique_ptr<idata_proxy> m_data;
 	/// Stores the reset button
 	Gtk::Button* m_reset_button;
 };
@@ -108,7 +108,7 @@ private:
 // proxy
 
 /// Convenience factory function for creating k3d::spin_button::idata_proxy objects, specialized for k3d::iproperty
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = Glib::ustring());
 
 } // namespace point
 
diff --git a/k3dsdk/ngui/property_button.cpp b/k3dsdk/ngui/property_button.cpp
index 8b8d4874..574ae014 100644
--- a/k3dsdk/ngui/property_button.cpp
+++ b/k3dsdk/ngui/property_button.cpp
@@ -55,8 +55,8 @@ namespace property_button
 /////////////////////////////////////////////////////////////////////////////
 // control
 
-control::control(std::auto_ptr<property_widget::idata_proxy> Data) :
-	base(Data),
+control::control(std::unique_ptr<property_widget::idata_proxy> Data) :
+	base(std::move(Data)),
 	m_image(new Gtk::Image())
 {
 	set_name("k3d-property-button");
diff --git a/k3dsdk/ngui/property_button.h b/k3dsdk/ngui/property_button.h
index dc8433f0..d4b64cc4 100644
--- a/k3dsdk/ngui/property_button.h
+++ b/k3dsdk/ngui/property_button.h
@@ -51,7 +51,7 @@ class control :
 	typedef property_widget::control base;
 
 public:
-	control(std::auto_ptr<property_widget::idata_proxy> Data);
+	control(std::unique_ptr<property_widget::idata_proxy> Data);
 
 private:
 	/// Called whenever the state of the underlying data has changed
diff --git a/k3dsdk/ngui/property_label.cpp b/k3dsdk/ngui/property_label.cpp
index 812e7fd2..9ddd7d62 100644
--- a/k3dsdk/ngui/property_label.cpp
+++ b/k3dsdk/ngui/property_label.cpp
@@ -55,8 +55,8 @@ namespace property_label
 /////////////////////////////////////////////////////////////////////////////
 // control
 
-control::control(std::auto_ptr<property_widget::idata_proxy> Data) :
-	base(Data)
+control::control(std::unique_ptr<property_widget::idata_proxy> Data) :
+	base(std::move(Data))
 {
 	set_name("k3d-property-label");
 
diff --git a/k3dsdk/ngui/property_label.h b/k3dsdk/ngui/property_label.h
index dab93ed2..5f219412 100644
--- a/k3dsdk/ngui/property_label.h
+++ b/k3dsdk/ngui/property_label.h
@@ -50,7 +50,7 @@ class control :
 	typedef property_widget::control base;
 
 public:
-	control(std::auto_ptr<property_widget::idata_proxy> Data);
+	control(std::unique_ptr<property_widget::idata_proxy> Data);
 
 private:
 	/// Called whenever the state of the underlying data has changed
diff --git a/k3dsdk/ngui/property_widget.cpp b/k3dsdk/ngui/property_widget.cpp
index c588bc53..3800cf34 100644
--- a/k3dsdk/ngui/property_widget.cpp
+++ b/k3dsdk/ngui/property_widget.cpp
@@ -58,8 +58,8 @@ namespace property_widget
 /////////////////////////////////////////////////////////////////////////////
 // control
 
-control::control(std::auto_ptr<idata_proxy> Data) :
-	m_data(Data),
+control::control(std::unique_ptr<idata_proxy> Data) :
+	m_data(std::move(Data)),
 	m_show_connected(0),
 	m_disconnect(0)
 {
diff --git a/k3dsdk/ngui/property_widget.h b/k3dsdk/ngui/property_widget.h
index 80310c68..cd342419 100644
--- a/k3dsdk/ngui/property_widget.h
+++ b/k3dsdk/ngui/property_widget.h
@@ -83,7 +83,7 @@ private:
 class control
 {
 public:
-	control(std::auto_ptr<idata_proxy> Data);
+	control(std::unique_ptr<idata_proxy> Data);
 	virtual ~control();
 
 	bool button_press_event(GdkEventButton* Event);
@@ -102,9 +102,9 @@ protected:
 	void disconnect(k3d::inode* Object);
 
 	/// Stores a reference to the underlying data object
-	std::auto_ptr<idata_proxy> m_data;
+	std::unique_ptr<idata_proxy> m_data;
 	/// Context menu displayed when the user clicks on the widget
-	std::auto_ptr<Gtk::Menu> m_menu;
+	std::unique_ptr<Gtk::Menu> m_menu;
 	/// Caches the "show connected" widget for tutorial playback
 	Gtk::MenuItem* m_show_connected;
 	/// Maps properties to widgets for tutorial playback
@@ -179,9 +179,9 @@ private:
 
 /// Convenience factory function for creating property_widget::idata_proxy objects
 template<typename data_t>
-std::auto_ptr<idata_proxy> proxy(document_state& DocumentState, data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = "")
+std::unique_ptr<idata_proxy> proxy(document_state& DocumentState, data_t& Data, k3d::istate_recorder* const StateRecorder = 0, const Glib::ustring& ChangeMessage = "")
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<data_t>(DocumentState, Data, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new data_proxy<data_t>(DocumentState, Data, StateRecorder, ChangeMessage));
 }
 
 } // namespace property_widget
diff --git a/k3dsdk/ngui/toggle_button.cpp b/k3dsdk/ngui/toggle_button.cpp
index 81ba9ac4..9532a88c 100644
--- a/k3dsdk/ngui/toggle_button.cpp
+++ b/k3dsdk/ngui/toggle_button.cpp
@@ -78,9 +78,9 @@ private:
 	k3d::iwritable_property* const m_writable_data;
 };
 
-std::auto_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
+std::unique_ptr<idata_proxy> proxy(k3d::iproperty& Data, k3d::istate_recorder* const StateRecorder, const Glib::ustring& ChangeMessage)
 {
-	return std::auto_ptr<idata_proxy>(new data_proxy<k3d::iproperty>(Data, StateRecorder, ChangeMessage));
+	return std::unique_ptr<idata_proxy>(new data_proxy<k3d::iproperty>(Data, StateRecorder, ChangeMessage));
 }
 */
 
diff --git a/k3dsdk/state_change_set.cpp b/k3dsdk/state_change_set.cpp
index 37d54674..db889b5c 100644
--- a/k3dsdk/state_change_set.cpp
+++ b/k3dsdk/state_change_set.cpp
@@ -120,9 +120,9 @@ size_t state_change_set::redo_count() const
 /////////////////////////////////////////////////////////////////////////////
 // create_state_change_set
 
-std::auto_ptr<state_change_set> create_state_change_set(const char* const Context)
+std::unique_ptr<state_change_set> create_state_change_set(const char* const Context)
 {
-	return std::auto_ptr<state_change_set>(new state_change_set());
+	return std::unique_ptr<state_change_set>(new state_change_set());
 }
 
 /////////////////////////////////////////////////////////////////////////////
@@ -139,7 +139,7 @@ void start_state_change_set(idocument& Document, const char* const Context)
 void cancel_state_change_set(idocument& Document, const char* const Context)
 {
 	// Tell the document to stop recording ...
-	const std::auto_ptr<state_change_set> changeset(Document.state_recorder().stop_recording(Context));
+	const std::unique_ptr<state_change_set> changeset(Document.state_recorder().stop_recording(Context));
 
 	// Undo any changes up to this point, and let the leftover data get destroyed ...
 	return_if_fail(changeset.get());
diff --git a/k3dsdk/state_change_set.h b/k3dsdk/state_change_set.h
index 4d9bfe0e..640b0448 100644
--- a/k3dsdk/state_change_set.h
+++ b/k3dsdk/state_change_set.h
@@ -75,7 +75,7 @@ private:
 #define K3D_CHANGE_SET_CONTEXT __FILE__ " (" K3D_CHANGE_SET_CONTEXT_STRINGIZE(__LINE__) ")"
 
 /// Factory function for creating standard state change set objects
-std::auto_ptr<state_change_set> create_state_change_set(const char* const Context);
+std::unique_ptr<state_change_set> create_state_change_set(const char* const Context);
 /// Convenience function that starts recording a state change set for undo/redo purposes
 void start_state_change_set(idocument& Document, const char* const Context);
 /// Convenience function that cancels recording the current state change set
diff --git a/modules/ngui/user_interface.cpp b/modules/ngui/user_interface.cpp
index 2a5fb21d..8a74c9c8 100644
--- a/modules/ngui/user_interface.cpp
+++ b/modules/ngui/user_interface.cpp
@@ -560,9 +560,9 @@ private:
 	/// Set to true iff we should display the tutorial menu at startup
 	k3d::bool_t m_show_learning_menu;
 	/// Stores the main loop
-	std::auto_ptr<Gtk::Main> m_main;
+	std::unique_ptr<Gtk::Main> m_main;
 	/// Stores the (optional) splash screen
-	std::auto_ptr<splash_box> m_splash_box;
+	std::unique_ptr<splash_box> m_splash_box;
 
 	/// Stores (optional) auto-start plugins
 	typedef std::vector<k3d::iunknown*> auto_start_plugins_t;
diff --git a/modules/ngui_material_manager_panel/panel.cpp b/modules/ngui_material_manager_panel/panel.cpp
index 97d430d0..325d2e76 100644
--- a/modules/ngui_material_manager_panel/panel.cpp
+++ b/modules/ngui_material_manager_panel/panel.cpp
@@ -334,10 +334,10 @@ public:
   document_state& 				m_document_state;
 	  
   //Model That Stores Data
-  std::auto_ptr<Model> 			m_model;
+  std::unique_ptr<Model> 			m_model;
 
   //The Right Content Pane For The Panel
-  std::auto_ptr<ContentPanel> m_rpane_content;
+  std::unique_ptr<ContentPanel> m_rpane_content;
 
   //Flag To Hold Startup Routine Heads Up
   bool								m_init;
@@ -614,7 +614,7 @@ void Implementation::buildContentPanel(Gtk::TreeModel::Row row, bool m_col_ismg)
     {
       //Delete Object. Create New GroupContentPanel Through Smart Pointer
       m_rpane_content 
-        = std::auto_ptr<ContentPanel>
+        = std::unique_ptr<ContentPanel>
         (new GroupContentPanel(&m_main_hpaned, 
                                row->get_value(m_columns.m_col_mgptr), 
                                &m_document_state));
@@ -627,7 +627,7 @@ void Implementation::buildContentPanel(Gtk::TreeModel::Row row, bool m_col_ismg)
     {
       //Delete Object. Create New MaterialContentPanel Through Smart Pointer
       m_rpane_content 
-        = std::auto_ptr<ContentPanel>
+        = std::unique_ptr<ContentPanel>
         (new MaterialContentPanel(&m_main_hpaned, 
                                   row->get_value(m_columns.m_col_moptr), 
                                   &m_document_state));
-- 
2.20.1