4 public class HoverProvider : Object, GtkSource.HoverProvider
6 public JsRender.JsRender file {
7 get { return this.editor.file; }
11 public HoverProvider(Editor editor)
16 public async bool populate_async ( GtkSource.HoverContext context, GtkSource.HoverDisplay display, Cancellable? cancellable) throws Error
20 global::Gtk.TextIter begin, end , pos;
22 if (!context.get_bounds(out begin, out end)) {
25 var line = end.get_line();
26 var offset = end.get_line_offset();
27 if (this.editor.prop != null) {
28 // tried line -1 (does not work)
29 GLib.debug("node pad = '%s' %d", this.editor.node.node_pad, this.editor.node.node_pad.length);
31 line += this.editor.prop.start_line ;
32 // this is based on Gtk using tabs (hence 1/2 chars);
33 offset += this.editor.node.node_pad.length;
34 // javascript listeners are indented 2 more spaces.
35 if (this.editor.prop.ptype == JsRender.NodePropType.LISTENER) {
39 var res = yield this.file.getLanguageServer().hover(this.file, line, offset);
41 if ( res != null && res.contents.size > 0) {
42 var str = res.contents.get(0).value;
43 display.append(new global::Gtk.Label(str));
46 // return false seems to crash things.
49 public bool populate (GtkSource.HoverContext context, GtkSource.HoverDisplay display) throws Error
51 global::Gtk.TextIter begin, end;
53 if (!context.get_bounds(out begin, out end)) {
56 GLib.debug("populate hover Word: %s" ,begin.get_text(end));return false;