[gnome-builder] BackForwardItem: Use GtkTextMark to track locations
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] BackForwardItem: Use GtkTextMark to track locations
- Date: Mon, 17 Apr 2017 03:20:52 +0000 (UTC)
commit b18999814f997559af18e770a82aae3e8538a479
Author: Umang Jain <mailumangjain gmail com>
Date: Sat Apr 15 10:38:12 2017 +0530
BackForwardItem: Use GtkTextMark to track locations
https://bugzilla.gnome.org/show_bug.cgi?id=749041
libide/history/ide-back-forward-item.c | 48 +++++++++++++++++++++++++-
libide/history/ide-back-forward-item.h | 6 +++-
libide/history/ide-back-forward-list-load.c | 2 +-
libide/sourceview/ide-source-view.c | 6 +++-
4 files changed, 57 insertions(+), 5 deletions(-)
---
diff --git a/libide/history/ide-back-forward-item.c b/libide/history/ide-back-forward-item.c
index 8caff28..8690150 100644
--- a/libide/history/ide-back-forward-item.c
+++ b/libide/history/ide-back-forward-item.c
@@ -23,6 +23,7 @@
#include "diagnostics/ide-source-location.h"
#include "files/ide-file.h"
#include "history/ide-back-forward-item.h"
+#include "ide-macros.h"
#define NUM_LINES_CHAIN_MAX 5
@@ -30,6 +31,7 @@ struct _IdeBackForwardItem
{
IdeObject parent_instance;
IdeUri *uri;
+ GtkTextMark *mark;
};
G_DEFINE_TYPE (IdeBackForwardItem, ide_back_forward_item, IDE_TYPE_OBJECT)
@@ -37,18 +39,21 @@ G_DEFINE_TYPE (IdeBackForwardItem, ide_back_forward_item, IDE_TYPE_OBJECT)
enum {
PROP_0,
PROP_URI,
+ PROP_MARK,
LAST_PROP
};
static GParamSpec *properties [LAST_PROP];
IdeBackForwardItem *
-ide_back_forward_item_new (IdeContext *context,
- IdeUri *uri)
+ide_back_forward_item_new (IdeContext *context,
+ IdeUri *uri,
+ GtkTextMark *mark)
{
return g_object_new (IDE_TYPE_BACK_FORWARD_ITEM,
"context", context,
"uri", uri,
+ "mark", mark,
NULL);
}
@@ -76,11 +81,32 @@ ide_back_forward_item_set_uri (IdeBackForwardItem *self,
}
static void
+ide_back_forward_item_set_mark (IdeBackForwardItem *self,
+ GtkTextMark *mark)
+{
+ g_return_if_fail (IDE_IS_BACK_FORWARD_ITEM (self));
+
+ /* Mark can be NULL as in the case of loading on startup */
+ if (ide_set_weak_pointer (&self->mark, mark))
+ g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_MARK]);
+}
+
+GtkTextMark *
+ide_back_forward_item_get_mark (IdeBackForwardItem *self)
+{
+ g_return_val_if_fail (IDE_IS_BACK_FORWARD_ITEM (self), NULL);
+
+ return self->mark;
+}
+
+
+static void
ide_back_forward_item_finalize (GObject *object)
{
IdeBackForwardItem *self = (IdeBackForwardItem *)object;
g_clear_pointer (&self->uri, ide_uri_unref);
+ ide_clear_weak_pointer (&self->mark);
G_OBJECT_CLASS (ide_back_forward_item_parent_class)->finalize (object);
}
@@ -99,6 +125,10 @@ ide_back_forward_item_get_property (GObject *object,
g_value_set_boxed (value, ide_back_forward_item_get_uri (self));
break;
+ case PROP_MARK:
+ g_value_set_object (value, ide_back_forward_item_get_mark (self));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -118,6 +148,10 @@ ide_back_forward_item_set_property (GObject *object,
ide_back_forward_item_set_uri (self, g_value_get_boxed (value));
break;
+ case PROP_MARK:
+ ide_back_forward_item_set_mark (self, g_value_get_object (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -152,6 +186,16 @@ ide_back_forward_item_class_init (IdeBackForwardItemClass *klass)
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
+ properties [PROP_MARK] =
+ g_param_spec_object ("mark",
+ "Mark",
+ "The GtkTextMark for the location",
+ GTK_TYPE_TEXT_MARK,
+ (G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS |
+ G_PARAM_EXPLICIT_NOTIFY));
+
g_object_class_install_properties (object_class, LAST_PROP, properties);
}
diff --git a/libide/history/ide-back-forward-item.h b/libide/history/ide-back-forward-item.h
index 20b514d..9c67f9a 100644
--- a/libide/history/ide-back-forward-item.h
+++ b/libide/history/ide-back-forward-item.h
@@ -19,6 +19,8 @@
#ifndef IDE_BACK_FORWARD_ITEM_H
#define IDE_BACK_FORWARD_ITEM_H
+#include <gtk/gtk.h>
+
#include "ide-object.h"
#include "util/ide-uri.h"
@@ -30,7 +32,9 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (IdeBackForwardItem, ide_back_forward_item, IDE, BACK_FORWARD_ITEM, IdeObject)
IdeBackForwardItem *ide_back_forward_item_new (IdeContext *context,
- IdeUri *uri);
+ IdeUri *uri,
+ GtkTextMark *mark);
+GtkTextMark *ide_back_forward_item_get_mark (IdeBackForwardItem *self);
IdeUri *ide_back_forward_item_get_uri (IdeBackForwardItem *self);
gboolean ide_back_forward_item_chain (IdeBackForwardItem *self,
IdeBackForwardItem *other);
diff --git a/libide/history/ide-back-forward-list-load.c b/libide/history/ide-back-forward-list-load.c
index c931c1f..7effcc1 100644
--- a/libide/history/ide-back-forward-list-load.c
+++ b/libide/history/ide-back-forward-list-load.c
@@ -108,7 +108,7 @@ ide_back_forward_list_load_cb (GObject *object,
return;
}
- item = ide_back_forward_item_new (context, uri);
+ item = ide_back_forward_item_new (context, uri, NULL);
ide_back_forward_list_push (self, item);
}
diff --git a/libide/sourceview/ide-source-view.c b/libide/sourceview/ide-source-view.c
index e6b45f6..b5d7c5b 100644
--- a/libide/sourceview/ide-source-view.c
+++ b/libide/sourceview/ide-source-view.c
@@ -3322,6 +3322,8 @@ ide_source_view_real_jump (IdeSourceView *self,
IdeContext *context;
IdeFile *file;
IdeUri *uri;
+ GtkTextMark *mark;
+ GtkTextBuffer *buffer;
gchar *fragment;
guint line;
guint line_offset;
@@ -3353,7 +3355,9 @@ ide_source_view_real_jump (IdeSourceView *self,
uri = ide_uri_new_from_file (ide_file_get_file (file));
fragment = g_strdup_printf ("L%u_%u", line + 1, line_offset + 1);
ide_uri_set_fragment (uri, fragment);
- item = ide_back_forward_item_new (context, uri);
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self));
+ mark = gtk_text_buffer_create_mark (buffer, NULL, location, FALSE);
+ item = ide_back_forward_item_new (context, uri, mark);
ide_back_forward_list_push (priv->back_forward_list, item);
g_object_unref (item);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]