From ace28857b70d8a8fe97cdf29f937614eb13de781 Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Tue, 17 May 2016 22:11:17 +0200 Subject: 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). --- test/gi/Scintilla-0.1.gir.good | 219 +++++++++++++++++++++++++++++++++++++++-- test/gi/filter-scintilla-h.py | 19 ++++ test/gi/gi-test.py | 9 ++ test/gi/makefile | 20 ++-- 4 files changed, 254 insertions(+), 13 deletions(-) create mode 100644 test/gi/filter-scintilla-h.py (limited to 'test/gi') diff --git a/test/gi/Scintilla-0.1.gir.good b/test/gi/Scintilla-0.1.gir.good index b3919a725..771edae6e 100644 --- a/test/gi/Scintilla-0.1.gir.good +++ b/test/gi/Scintilla-0.1.gir.good @@ -14,6 +14,24 @@ and/or use gtk-doc annotations. --> shared-library="libscintilla.so" c:identifier-prefixes="Scintilla" c:symbol-prefixes="scintilla"> + + + + + + + + + + + + + + + + + + @@ -36,9 +54,15 @@ and/or use gtk-doc annotations. --> - + + + + + + + @@ -46,9 +70,15 @@ and/or use gtk-doc annotations. --> - + + + + + + + @@ -85,7 +115,7 @@ and/or use gtk-doc annotations. --> - + @@ -98,7 +128,7 @@ and/or use gtk-doc annotations. --> - + @@ -115,9 +145,15 @@ and/or use gtk-doc annotations. --> - + + + + + + + @@ -127,12 +163,183 @@ and/or use gtk-doc annotations. --> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/gi/filter-scintilla-h.py b/test/gi/filter-scintilla-h.py new file mode 100644 index 000000000..0743f9ef2 --- /dev/null +++ b/test/gi/filter-scintilla-h.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python +# Filters Scintilla.h to not contain generated stuff or deprecated defines + +import sys +import fileinput + +def main(): + inhibit = 0 + for line in fileinput.input(): + if line.startswith("/* ++Autogenerated") or line.startswith("#ifdef INCLUDE_DEPRECATED_FEATURES"): + inhibit += 1 + if inhibit == 0: + sys.stdout.write(line) + if line.startswith("/* --Autogenerated") or line.startswith("#endif"): + if (inhibit > 0): + inhibit -= 1 + +if __name__ == "__main__": + main() diff --git a/test/gi/gi-test.py b/test/gi/gi-test.py index 6c775ea0c..b047ecec9 100644 --- a/test/gi/gi-test.py +++ b/test/gi/gi-test.py @@ -8,9 +8,18 @@ gi.require_version('Scintilla', '0.1') from gi.repository import Scintilla from gi.repository import Gtk +def on_notify(sci, id, scn): + if (scn.nmhdr.code == 2001): # SCN_CHARADDED + print ("sci-notify: id: %d, char added: %d" % (id, scn.ch)) + elif (scn.nmhdr.code == 2008): # SCN_MODIFIED + print ("sci-notify: id: %d, pos: %d, mod type: %d" % (id, scn.position, scn.modificationType)) + else: + print ("sci-notify: id: %d, scn.nmhdr.code: %d" % (id, scn.nmhdr.code)) + win = Gtk.Window() win.connect("delete-event", Gtk.main_quit) sci = Scintilla.Object() +sci.connect("sci-notify", on_notify) win.add(sci) win.show_all() win.resize(400,300) diff --git a/test/gi/makefile b/test/gi/makefile index cf7522303..8b01de341 100644 --- a/test/gi/makefile +++ b/test/gi/makefile @@ -12,20 +12,26 @@ GTK_LIBS = $(shell pkg-config --libs gtk+-$(GTKVERSION)) GTK_CFLAGS = $(shell pkg-config --cflags gtk+-$(GTKVERSION)) PWD = $(shell pwd) -FORCE: +.PHONY: test clean FORCE ../../bin/scintilla.a: FORCE $(MAKE) -C ../../gtk all +Scintilla-filtered.h: ../../include/Scintilla.h + python filter-scintilla-h.py $< > $@ + libscintilla.so: ../../bin/scintilla.a $(CXX) -shared -o $@ -Wl,--whole-archive $^ -Wl,--no-whole-archive $(GTK_LIBS) -Scintilla-0.1.gir: libscintilla.so +Scintilla-0.1.gir: libscintilla.so Scintilla-filtered.h LDFLAGS=-Wl,-rpath=$(shell pwd) \ - $(GI_SCANNER) --warn-all -i Gtk-$(GTKVERSION) -DG_IR_SCANNING -DGTK \ - --cflags-begin $(GTK_CFLAGS) -include gtk/gtk.h --cflags-end \ + $(GI_SCANNER) --no-libtool --warn-all -i Gtk-$(GTKVERSION) -DG_IR_SCANNING -DGTK \ + --cflags-begin $(GTK_CFLAGS) -include gtk/gtk.h \ + -include Scintilla-filtered.h -I../../include --cflags-end \ + --accept-unprefixed \ --c-include Scintilla.h --c-include ScintillaWidget.h \ - -n Scintilla --nsversion 0.1 --library scintilla -L$(PWD) ../../include/ScintillaWidget.h \ + -n Scintilla --nsversion 0.1 --library scintilla -L$(PWD) \ + ../../include/Sci_Position.h ../../include/ScintillaWidget.h Scintilla-filtered.h \ -o $@ Scintilla-0.1.typelib: Scintilla-0.1.gir @@ -35,9 +41,9 @@ clean: rm -f libscintilla.so Scintilla-0.1.gir Scintilla-0.1.typelib $(MAKE) -C ../../gtk clean -test: Scintilla-0.1.gir +test: Scintilla-0.1.gir Scintilla-0.1.typelib @echo Verifying Scintilla-0.1.gir file - @diff $^.good $^ || (echo "GIR FILE MISMATCH!"; exit 1) + @diff $<.good $< || (echo "GIR FILE MISMATCH!"; exit 1) @echo Launching gi-test.py python program GI_TYPELIB_PATH=$(PWD) LD_LIBRARY_PATH=$(PWD) \ python $(PWD)/gi-test.py -- cgit v1.2.3