aboutsummaryrefslogtreecommitdiffhomepage
path: root/gtk
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2016-04-26 17:09:25 +0200
committerThomas Martitz <kugel@rockbox.org>2016-04-26 17:09:25 +0200
commit17a38b0f6efc4a0d847ab502773dafa9939999d8 (patch)
tree4b0cc8c8e07e9decdc8862a06a6f6fbdeeedcb12 /gtk
parent8d4062a828ec5800b31cac519df11782d2ea4c06 (diff)
downloadscintilla-mirror-17a38b0f6efc4a0d847ab502773dafa9939999d8.tar.gz
Enable g-ir-scanner to scan ScintillaObject signals
Currently, the ScintillaObject signals can't be used from python code via gobject-introspection. This is because g-ir-scanner does not properly scan the signals. For signals, there is the additional requirement that parameters have are registered GTypes. For the sci-notify signal, this can be accomplished by boxing SCNotification. In addition, g-ir-scanner also runs on Scintilla.h where it picks up additional structs. test/gi/ is updated accordingly. The test python script is enhanced to showcase the signals (some fixes to the makefile are included as well).
Diffstat (limited to 'gtk')
-rw-r--r--gtk/ScintillaGTK.cxx20
-rw-r--r--gtk/deps.mak2
-rw-r--r--gtk/makefile3
-rw-r--r--gtk/scintilla-marshal.c86
-rw-r--r--gtk/scintilla-marshal.h21
-rw-r--r--gtk/scintilla-marshal.list1
6 files changed, 13 insertions, 120 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx
index 9fc8e4cc4..3caab96a4 100644
--- a/gtk/ScintillaGTK.cxx
+++ b/gtk/ScintillaGTK.cxx
@@ -72,8 +72,6 @@
#include "ExternalLexer.h"
#endif
-#include "scintilla-marshal.h"
-
#include "Converter.h"
#if defined(__clang__)
@@ -3162,9 +3160,6 @@ void ScintillaGTK::ClassInit(OBJECT_CLASS* object_class, GtkWidgetClass *widget_
container_class->forall = MainForAll;
}
-#define SIG_MARSHAL scintilla_marshal_NONE__INT_POINTER
-#define MARSHAL_ARGUMENTS G_TYPE_INT, G_TYPE_POINTER
-
static void scintilla_class_init(ScintillaClass *klass) {
try {
OBJECT_CLASS *object_class = (OBJECT_CLASS*) klass;
@@ -3179,9 +3174,9 @@ static void scintilla_class_init(ScintillaClass *klass) {
G_STRUCT_OFFSET(ScintillaClass, command),
NULL, //(GSignalAccumulator)
NULL, //(gpointer)
- SIG_MARSHAL,
+ NULL,
G_TYPE_NONE,
- 2, MARSHAL_ARGUMENTS);
+ 2, G_TYPE_INT, GTK_TYPE_WIDGET);
scintilla_signals[NOTIFY_SIGNAL] = g_signal_new(
SCINTILLA_NOTIFY,
@@ -3190,9 +3185,9 @@ static void scintilla_class_init(ScintillaClass *klass) {
G_STRUCT_OFFSET(ScintillaClass, notify),
NULL,
NULL,
- SIG_MARSHAL,
+ NULL,
G_TYPE_NONE,
- 2, MARSHAL_ARGUMENTS);
+ 2, G_TYPE_INT, SCINTILLA_TYPE_NOTIFICATION);
klass->command = NULL;
klass->notify = NULL;
@@ -3233,3 +3228,10 @@ void scintilla_release_resources(void) {
} catch (...) {
}
}
+
+/* Define a dummy boxed type because g-ir-scanner is unable to
+ * recognize gpointer-derived types. Note that SCNotificaiton
+ * is always allocated on stack so copying is not appropriate. */
+static void *copy_(void *src) { return src; }
+static void free_(void *doc) { }
+G_DEFINE_BOXED_TYPE(SCNotification, scnotification, copy_, free_)
diff --git a/gtk/deps.mak b/gtk/deps.mak
index 5b826358a..f59ef3282 100644
--- a/gtk/deps.mak
+++ b/gtk/deps.mak
@@ -15,7 +15,7 @@ ScintillaGTK.o: ScintillaGTK.cxx \
../src/Selection.h ../src/PositionCache.h ../src/EditModel.h \
../src/MarginView.h ../src/EditView.h ../src/Editor.h \
../src/AutoComplete.h ../src/ScintillaBase.h ../src/ExternalLexer.h \
- scintilla-marshal.h Converter.h
+ Converter.h
AutoComplete.o: ../src/AutoComplete.cxx ../include/Platform.h \
../include/Scintilla.h ../include/Sci_Position.h \
../lexlib/CharacterSet.h ../src/Position.h ../src/AutoComplete.h
diff --git a/gtk/makefile b/gtk/makefile
index 8fd92f6db..a4d46d9a0 100644
--- a/gtk/makefile
+++ b/gtk/makefile
@@ -78,7 +78,6 @@ CFLAGS:=$(CTFLAGS)
CXXTFLAGS:=--std=gnu++0x $(CTFLAGS) $(REFLAGS)
CONFIGFLAGS:=$(shell pkg-config --cflags $(GTKVERSION))
-MARSHALLER=scintilla-marshal.o
.cxx.o:
$(CXX) $(CONFIGFLAGS) $(CXXTFLAGS) $(CXXFLAGS) -c $<
@@ -104,7 +103,7 @@ $(COMPLIB): Accessor.o CharacterSet.o LexerBase.o LexerModule.o LexerSimple.o St
PropSetSimple.o PlatGTK.o \
KeyMap.o LineMarker.o PositionCache.o ScintillaGTK.o CellBuffer.o CharacterCategory.o ViewStyle.o \
RESearch.o RunStyles.o Selection.o Style.o Indicator.o AutoComplete.o UniConversion.o XPM.o \
- $(MARSHALLER) $(LEXOBJS)
+ $(LEXOBJS)
$(AR) rc $@ $^
$(RANLIB) $@
diff --git a/gtk/scintilla-marshal.c b/gtk/scintilla-marshal.c
deleted file mode 100644
index be57b7c2e..000000000
--- a/gtk/scintilla-marshal.c
+++ /dev/null
@@ -1,86 +0,0 @@
-
-#include <glib-object.h>
-
-
-#ifdef G_ENABLE_DEBUG
-#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-#define g_marshal_value_peek_char(v) g_value_get_char (v)
-#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
-#define g_marshal_value_peek_int(v) g_value_get_int (v)
-#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-#define g_marshal_value_peek_long(v) g_value_get_long (v)
-#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
-#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
-#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
-#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
-#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
-#define g_marshal_value_peek_float(v) g_value_get_float (v)
-#define g_marshal_value_peek_double(v) g_value_get_double (v)
-#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
-#define g_marshal_value_peek_param(v) g_value_get_param (v)
-#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
-#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
-#define g_marshal_value_peek_object(v) g_value_get_object (v)
-#else /* !G_ENABLE_DEBUG */
-/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
- * Do not access GValues directly in your code. Instead, use the
- * g_value_get_*() functions
- */
-#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-#define g_marshal_value_peek_char(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_long(v) (v)->data[0].v_long
-#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
-#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
-#define g_marshal_value_peek_enum(v) (v)->data[0].v_int
-#define g_marshal_value_peek_flags(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_float(v) (v)->data[0].v_float
-#define g_marshal_value_peek_double(v) (v)->data[0].v_double
-#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
-#endif /* !G_ENABLE_DEBUG */
-
-
-/* NONE:INT,POINTER (scintilla-marshal.list:1) */
-void
-scintilla_marshal_VOID__INT_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__INT_POINTER) (gpointer data1,
- gint arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__INT_POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__INT_POINTER) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_int (param_values + 1),
- g_marshal_value_peek_pointer (param_values + 2),
- data2);
-}
-
diff --git a/gtk/scintilla-marshal.h b/gtk/scintilla-marshal.h
deleted file mode 100644
index 9116a56c9..000000000
--- a/gtk/scintilla-marshal.h
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#ifndef __scintilla_marshal_MARSHAL_H__
-#define __scintilla_marshal_MARSHAL_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-/* NONE:INT,POINTER (scintilla-marshal.list:1) */
-extern void scintilla_marshal_VOID__INT_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-#define scintilla_marshal_NONE__INT_POINTER scintilla_marshal_VOID__INT_POINTER
-
-G_END_DECLS
-
-#endif /* __scintilla_marshal_MARSHAL_H__ */
-
diff --git a/gtk/scintilla-marshal.list b/gtk/scintilla-marshal.list
deleted file mode 100644
index e5750ecb6..000000000
--- a/gtk/scintilla-marshal.list
+++ /dev/null
@@ -1 +0,0 @@
-NONE:INT,POINTER