Add new (App/Window/View)Activatable interfaces for plugins

Currently only the modelines and filebrowser plugins are updated to these new
interfaces
This commit is contained in:
JosephMcc
2017-01-09 11:57:48 -08:00
parent d45e07b7a1
commit b9e5097250
26 changed files with 5361 additions and 4484 deletions

View File

@@ -6,9 +6,12 @@
#include <stdlib.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include <libpeas/peas-extension-set.h>
#include <glib/gi18n.h>
#include "xed-view.h"
#include "xed-view-activatable.h"
#include "xed-plugins-engine.h"
#include "xed-debug.h"
#include "xed-prefs-manager.h"
#include "xed-prefs-manager-app.h"
@@ -34,10 +37,13 @@ struct _XedViewPrivate
guint search_entry_changed_id;
gboolean disable_popdown;
GtkTextBuffer *current_buffer;
PeasExtensionSet *extensions;
guint view_realized : 1;
};
static void xed_view_dispose (GObject *object);
static void xed_view_finalize (GObject *object);
static void xed_view_realize (GtkWidget *widget);
static gint xed_view_focus_out (GtkWidget *widget, GdkEventFocus *event);
static gboolean xed_view_drag_motion (GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint timestamp);
static void xed_view_drag_data_received (GtkWidget *widget, GdkDragContext *context, gint x, gint y,
@@ -107,6 +113,7 @@ xed_view_class_init (XedViewClass *klass)
widget_class->drag_data_received = xed_view_drag_data_received;
widget_class->drag_drop = xed_view_drag_drop;
widget_class->button_press_event = xed_view_button_press_event;
widget_class->realize = xed_view_realize;
klass->start_interactive_goto_line = start_interactive_goto_line;
text_view_class->delete_from_cursor = xed_view_delete_from_cursor;
@@ -152,6 +159,24 @@ current_buffer_removed (XedView *view)
}
}
static void
extension_added (PeasExtensionSet *extensions,
PeasPluginInfo *info,
PeasExtension *exten,
XedView *view)
{
peas_extension_call (exten, "activate");
}
static void
extension_removed (PeasExtensionSet *extensions,
PeasPluginInfo *info,
PeasExtension *exten,
XedView *view)
{
peas_extension_call (exten, "deactivate");
}
static void
on_notify_buffer_cb (XedView *view,
GParamSpec *arg1,
@@ -223,6 +248,14 @@ xed_view_init (XedView *view)
gtk_target_list_add_uri_targets (tl, TARGET_URI_LIST);
}
view->priv->extensions = peas_extension_set_new (PEAS_ENGINE (xed_plugins_engine_get_default ()),
XED_TYPE_VIEW_ACTIVATABLE, "view", view, NULL);
g_signal_connect (view->priv->extensions, "extension-added",
G_CALLBACK (extension_added), view);
g_signal_connect (view->priv->extensions, "extension-removed",
G_CALLBACK (extension_removed), view);
/* Act on buffer change */
g_signal_connect(view, "notify::buffer", G_CALLBACK (on_notify_buffer_cb), NULL);
}
@@ -234,6 +267,12 @@ xed_view_dispose (GObject *object)
view = XED_VIEW(object);
if (view->priv->extensions != NULL)
{
g_object_unref (view->priv->extensions);
view->priv->extensions = NULL;
}
if (view->priv->search_window != NULL)
{
gtk_widget_destroy (view->priv->search_window);
@@ -261,7 +300,8 @@ xed_view_finalize (GObject *object)
XedView *view;
view = XED_VIEW(object);
current_buffer_removed (view);
(* G_OBJECT_CLASS (xed_view_parent_class)->finalize) (object);
G_OBJECT_CLASS (xed_view_parent_class)->finalize (object);
}
static gint
@@ -1141,6 +1181,20 @@ xed_view_button_press_event (GtkWidget *widget,
return GTK_WIDGET_CLASS (xed_view_parent_class)->button_press_event (widget, event);
}
static void
xed_view_realize (GtkWidget *widget)
{
XedView *view = XED_VIEW (widget);
if (!view->priv->view_realized)
{
peas_extension_set_call (view->priv->extensions, "activate");
view->priv->view_realized = TRUE;
}
GTK_WIDGET_CLASS (xed_view_parent_class)->realize (widget);
}
static void
search_highlight_updated_cb (XedDocument *doc,
GtkTextIter *start,