[gtkmm] TextMark: Avoid creating a RefPtr to this.



commit 2bd01a4c421e97b359c47e7b46e3a83f0a852183
Author: Murray Cumming <murrayc murrayc com>
Date:   Wed Apr 5 13:33:47 2017 +0200

    TextMark: Avoid creating a RefPtr to this.
    
    By adding a private TextBuffer::get_iter_at_mark(), accessible
    via a friend declaration, that takes the raw GTextMark.
    
    See https://bugzilla.gnome.org/show_bug.cgi?id=755037#c21

 gtk/src/textbuffer.ccg |    7 +++++++
 gtk/src/textbuffer.hg  |    5 +++++
 gtk/src/textmark.ccg   |    4 +---
 3 files changed, 13 insertions(+), 3 deletions(-)
---
diff --git a/gtk/src/textbuffer.ccg b/gtk/src/textbuffer.ccg
index a2bb360..c7d2aa0 100644
--- a/gtk/src/textbuffer.ccg
+++ b/gtk/src/textbuffer.ccg
@@ -208,6 +208,13 @@ TextBuffer::iterator TextBuffer::get_iter_at_mark(const Glib::RefPtr<Mark>& mark
   return iter;
 }
 
+TextBuffer::iterator TextBuffer::get_iter_at_mark(GtkTextMark* mark)
+{
+  iterator iter;
+  gtk_text_buffer_get_iter_at_mark(gobj(), iter.gobj(), mark);
+  return iter;
+}
+
 TextBuffer::const_iterator TextBuffer::get_iter_at_mark(const Glib::RefPtr<Mark>& mark) const
 {
   return const_cast<TextBuffer*>(this)->get_iter_at_mark(mark);
diff --git a/gtk/src/textbuffer.hg b/gtk/src/textbuffer.hg
index 721f251..c2e3b06 100644
--- a/gtk/src/textbuffer.hg
+++ b/gtk/src/textbuffer.hg
@@ -622,6 +622,11 @@ _CONVERSION(`GtkTextIter*',`TextBuffer::iterator&',Glib::wrap_iter($3))
   _WRAP_PROPERTY("cursor-position", int)
   _WRAP_PROPERTY("copy-target-list", Glib::RefPtr<TargetList>)
   _WRAP_PROPERTY("paste-target-list", Glib::RefPtr<TargetList>)
+
+private:
+  friend TextMark;
+
+  iterator get_iter_at_mark(GtkTextMark* mark);
 };
 
 } // namespace Gtk
diff --git a/gtk/src/textmark.ccg b/gtk/src/textmark.ccg
index aa5b74f..bad1220 100644
--- a/gtk/src/textmark.ccg
+++ b/gtk/src/textmark.ccg
@@ -32,9 +32,7 @@ TextMark::TextMark(bool left_gravity)
 
 TextIter TextMark::get_iter()
 {
-  auto mark = Glib::RefPtr<TextMark>(this);
-  mark->reference(); // RefPtr (T_CppObject* pCppObject) does not do a reference
-  return get_buffer()->get_iter_at_mark(mark);
+  return get_buffer()->get_iter_at_mark(gobj());
 }
 
 TextConstIter TextMark::get_iter() const


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]