[gnome-builder/wip/chergert/bug1: 74/101] debugger: wire out stubs for breakpoints in editor



commit 5d9987d310a93de28b645fcc0d261f1968a79b1e
Author: Christian Hergert <chergert redhat com>
Date:   Wed Aug 30 02:55:51 2017 -0700

    debugger: wire out stubs for breakpoints in editor
    
    This doesn't do anything yet, but lets us get the plumbing in place to
    be able to track breakpoints in the editor.
    
    We still need to wire this up to the debug manager and stash the future
    breakpoints until the debugger starts. Then sync them.

 libide/debugger/ide-debugger-breakpoints.c       |   24 +++++-
 libide/debugger/ide-debugger-editor-view-addin.c |   97 ++++++++++++++++++++++
 libide/debugger/ide-debugger-editor-view-addin.h |   29 +++++++
 libide/debugger/ide-debugger-plugin.c            |    5 +
 libide/meson.build                               |    2 +
 5 files changed, 155 insertions(+), 2 deletions(-)
---
diff --git a/libide/debugger/ide-debugger-breakpoints.c b/libide/debugger/ide-debugger-breakpoints.c
index d65567c..9ee95cb 100644
--- a/libide/debugger/ide-debugger-breakpoints.c
+++ b/libide/debugger/ide-debugger-breakpoints.c
@@ -43,9 +43,15 @@ enum {
   N_PROPS
 };
 
+enum {
+  CHANGED,
+  N_SIGNALS
+};
+
 G_DEFINE_TYPE (IdeDebuggerBreakpoints, ide_debugger_breakpoints, G_TYPE_OBJECT)
 
 static GParamSpec *properties [N_PROPS];
+static guint signals [N_SIGNALS];
 
 static gint
 line_info_compare (gconstpointer a,
@@ -123,6 +129,14 @@ ide_debugger_breakpoints_class_init (IdeDebuggerBreakpointsClass *klass)
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
 
   g_object_class_install_properties (object_class, N_PROPS, properties);
+
+  signals [CHANGED] =
+    g_signal_new ("changed",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_LAST,
+                  0, NULL, NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
 }
 
 static void
@@ -169,8 +183,11 @@ ide_debugger_breakpoints_set_line (IdeDebuggerBreakpoints *self,
 
           if (ele->line == line)
             {
-              g_array_remove_index_fast (self->lines, i);
-              break;
+              if (mode != 0)
+                ele->mode = mode;
+              else
+                g_array_remove_index (self->lines, i);
+              goto emit_signal;
             }
         }
     }
@@ -186,4 +203,7 @@ ide_debugger_breakpoints_set_line (IdeDebuggerBreakpoints *self,
 
   g_array_append_val (self->lines, info);
   g_array_sort (self->lines, line_info_compare);
+
+emit_signal:
+  g_signal_emit (self, signals [CHANGED], 0);
 }
diff --git a/libide/debugger/ide-debugger-editor-view-addin.c 
b/libide/debugger/ide-debugger-editor-view-addin.c
new file mode 100644
index 0000000..38762b0
--- /dev/null
+++ b/libide/debugger/ide-debugger-editor-view-addin.c
@@ -0,0 +1,97 @@
+/* ide-debugger-editor-view-addin.c
+ *
+ * Copyright (C) 2017 Christian Hergert <chergert redhat com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define G_LOG_DOMAIN "ide-debugger-editor-view-addin"
+
+#include "debugger/ide-debugger-editor-view-addin.h"
+#include "debugger/ide-debugger-gutter-renderer.h"
+
+struct _IdeDebuggerEditorViewAddin
+{
+  GObject parent_instance;
+
+  IdeEditorView *view;
+  IdeDebuggerGutterRenderer *renderer;
+};
+
+static void
+ide_debugger_editor_view_addin_load (IdeEditorViewAddin *addin,
+                                     IdeEditorView      *view)
+{
+  IdeDebuggerEditorViewAddin *self = (IdeDebuggerEditorViewAddin *)addin;
+  g_autoptr(IdeDebuggerBreakpoints) breakpoints = NULL;
+  IdeSourceView *source_view;
+  GtkSourceGutter *gutter;
+
+  g_assert (IDE_IS_DEBUGGER_EDITOR_VIEW_ADDIN (self));
+  g_assert (IDE_IS_EDITOR_VIEW (view));
+
+  self->view = view;
+
+  /* TODO: Wire up breakpoints to debugger instance for this file */
+  breakpoints = g_object_new (IDE_TYPE_DEBUGGER_BREAKPOINTS, NULL);
+
+  /* Install the breakpoints gutter */
+  source_view = ide_editor_view_get_view (view);
+  gutter = gtk_source_view_get_gutter (GTK_SOURCE_VIEW (source_view), GTK_TEXT_WINDOW_LEFT);
+  self->renderer = g_object_new (IDE_TYPE_DEBUGGER_GUTTER_RENDERER,
+                                 "size", 16,
+                                 NULL);
+  ide_debugger_gutter_renderer_set_breakpoints (self->renderer, breakpoints);
+  gtk_source_gutter_insert (gutter, GTK_SOURCE_GUTTER_RENDERER (self->renderer), -100);
+}
+
+static void
+ide_debugger_editor_view_addin_unload (IdeEditorViewAddin *addin,
+                                       IdeEditorView      *view)
+{
+  IdeDebuggerEditorViewAddin *self = (IdeDebuggerEditorViewAddin *)addin;
+  IdeSourceView *source_view;
+  GtkSourceGutter *gutter;
+
+  g_assert (IDE_IS_DEBUGGER_EDITOR_VIEW_ADDIN (self));
+  g_assert (IDE_IS_EDITOR_VIEW (view));
+
+  source_view = ide_editor_view_get_view (view);
+  gutter = gtk_source_view_get_gutter (GTK_SOURCE_VIEW (source_view), GTK_TEXT_WINDOW_LEFT);
+  gtk_source_gutter_remove (gutter, GTK_SOURCE_GUTTER_RENDERER (self->renderer));
+
+  self->renderer = NULL;
+  self->view = NULL;
+}
+
+static void
+editor_view_addin_iface_init (IdeEditorViewAddinInterface *iface)
+{
+  iface->load = ide_debugger_editor_view_addin_load;
+  iface->unload = ide_debugger_editor_view_addin_unload;
+}
+
+G_DEFINE_TYPE_WITH_CODE (IdeDebuggerEditorViewAddin, ide_debugger_editor_view_addin, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (IDE_TYPE_EDITOR_VIEW_ADDIN,
+                                                editor_view_addin_iface_init))
+
+static void
+ide_debugger_editor_view_addin_class_init (IdeDebuggerEditorViewAddinClass *klass)
+{
+}
+
+static void
+ide_debugger_editor_view_addin_init (IdeDebuggerEditorViewAddin *self)
+{
+}
diff --git a/libide/debugger/ide-debugger-editor-view-addin.h 
b/libide/debugger/ide-debugger-editor-view-addin.h
new file mode 100644
index 0000000..2e221ca
--- /dev/null
+++ b/libide/debugger/ide-debugger-editor-view-addin.h
@@ -0,0 +1,29 @@
+/* ide-debugger-editor-view-addin.h
+ *
+ * Copyright (C) 2017 Christian Hergert <chergert redhat com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "editor/ide-editor-view-addin.h"
+
+G_BEGIN_DECLS
+
+#define IDE_TYPE_DEBUGGER_EDITOR_VIEW_ADDIN (ide_debugger_editor_view_addin_get_type())
+
+G_DECLARE_FINAL_TYPE (IdeDebuggerEditorViewAddin, ide_debugger_editor_view_addin, IDE, 
DEBUGGER_EDITOR_VIEW_ADDIN, GObject)
+
+G_END_DECLS
diff --git a/libide/debugger/ide-debugger-plugin.c b/libide/debugger/ide-debugger-plugin.c
index 07c7430..6ecb5a6 100644
--- a/libide/debugger/ide-debugger-plugin.c
+++ b/libide/debugger/ide-debugger-plugin.c
@@ -19,7 +19,9 @@
 #include <libpeas/peas.h>
 
 #include "debugger/ide-debugger-editor-addin.h"
+#include "debugger/ide-debugger-editor-view-addin.h"
 #include "editor/ide-editor-addin.h"
+#include "editor/ide-editor-view-addin.h"
 
 void
 ide_debugger_register_types (PeasObjectModule *module)
@@ -27,4 +29,7 @@ ide_debugger_register_types (PeasObjectModule *module)
   peas_object_module_register_extension_type (module,
                                               IDE_TYPE_EDITOR_ADDIN,
                                               IDE_TYPE_DEBUGGER_EDITOR_ADDIN);
+  peas_object_module_register_extension_type (module,
+                                              IDE_TYPE_EDITOR_VIEW_ADDIN,
+                                              IDE_TYPE_DEBUGGER_EDITOR_VIEW_ADDIN);
 }
diff --git a/libide/meson.build b/libide/meson.build
index 7b98234..a6f73a6 100644
--- a/libide/meson.build
+++ b/libide/meson.build
@@ -521,6 +521,8 @@ libide_sources = libide_generated_headers + libide_public_sources + [
   'debugger/ide-debugger-disassembly-view.h',
   'debugger/ide-debugger-editor-addin.c',
   'debugger/ide-debugger-editor-addin.h',
+  'debugger/ide-debugger-editor-view-addin.c',
+  'debugger/ide-debugger-editor-view-addin.h',
   'debugger/ide-debugger-fallbacks.c',
   'debugger/ide-debugger-breakpoints.c',
   'debugger/ide-debugger-breakpoints.h',


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