Hello,
I test GtkSourceCompletion (include in GtkSourceView 2.10) and I rewrite in
vala this example:
http://git.gnome.org/browse/gtksourceview/tree/tests/test-completion.c?id=GTKSOURCEVIEW_2_10_0
I have a bug for add custom proposals (GtkSourceCompletionWords works fine
except a bug in the binding) as if they were freed, but I don't find problem
with valac.
The bug make a segfault:
*** glibc detected *** ./main: double free or corruption (fasttop):
0x00000000023d5110 ***
Or warning:
Gtk-WARNING **: Failed to set text from markup due to error parsing markup:
Error on line 1 char 13: Invalid UTF-8 encoded text in name - not valid
'\xe0F\xd3\u0001'
Have you an idea?
--
Nicolas Joseph
class TestProvider : Gtk.SourceCompletionProvider, Object
{
Gdk.Pixbuf icon;
public string name;
public int priority;
List<Gtk.SourceCompletionItem> proposals;
construct
{
Gdk.Pixbuf icon = this.get_icon ();
this.proposals = new List<Gtk.SourceCompletionItem> ();
this.proposals.prepend (new Gtk.SourceCompletionItem ("Proposal 3", "Proposal 3", null, null));
this.proposals.prepend (new Gtk.SourceCompletionItem ("Proposal 2", "Proposal 2", null, null));
this.proposals.prepend (new Gtk.SourceCompletionItem ("Proposal 1", "Proposal 1", null, null));
}
public unowned string get_name ()
{
return this.name;
}
public int get_priority ()
{
return this.priority;
}
public bool match (Gtk.SourceCompletionContext context)
{
return true;
}
public void populate (Gtk.SourceCompletionContext context)
{
context.add_proposals (this, this.proposals, true);
}
public unowned Gdk.Pixbuf get_icon ()
{
if (this.icon == null)
{
Gtk.IconTheme theme = Gtk.IconTheme.get_default ();
this.icon = theme.load_icon (Gtk.STOCK_DIALOG_INFO, 16, 0);
}
return this.icon;
}
public bool activate_proposal (Gtk.SourceCompletionProposal proposal,
Gtk.TextIter iter)
{
return true;
}
public Gtk.SourceCompletionActivation get_activation ()
{
return Gtk.SourceCompletionActivation.INTERACTIVE |
Gtk.SourceCompletionActivation.USER_REQUESTED;
}
public unowned Gtk.Widget get_info_widget (Gtk.SourceCompletionProposal proposal)
{
return null;
}
public int get_interactive_delay ()
{
return -1;
}
public bool get_start_iter (Gtk.SourceCompletionContext context,
Gtk.SourceCompletionProposal proposal,
Gtk.TextIter iter)
{
return false;
}
public void update_info (Gtk.SourceCompletionProposal proposal,
Gtk.SourceCompletionInfo info)
{
}
}
Gtk.SourceView view;
Gtk.SourceCompletion comp;
void destroy_cb (Gtk.Object object)
{
Gtk.main_quit ();
}
void remember_toggled_cb (Gtk.ToggleButton button)
{
comp.remember_info_visibility = button.get_active ();
}
void select_on_show_toggled_cb (Gtk.ToggleButton button)
{
comp.select_on_show = button.get_active ();
}
void show_headers_toggled_cb (Gtk.ToggleButton button)
{
comp.show_headers = button.get_active ();
}
void toggle_active_property (Object source,
Object dest,
string name)
{
bool val;
source.get (name, out val);
dest.set ("active", val);
}
void show_icons_toggled_cb (Gtk.ToggleButton button)
{
comp.show_icons = button.get_active ();
}
Gtk.Window create_window ()
{
Gtk.Window window;
Gtk.VBox vbox;
Gtk.HBox hbox;
Gtk.CheckButton remember;
Gtk.CheckButton select_on_show;
Gtk.CheckButton show_headers;
Gtk.CheckButton show_icons;
Gtk.SourceCompletion completion;
window = new Gtk.Window ();
window.resize (600, 400);
vbox = new Gtk.VBox (false, 1);
hbox = new Gtk.HBox (false, 1);
view = new Gtk.SourceView ();
Gtk.ScrolledWindow scroll = new Gtk.ScrolledWindow (null, null);
scroll.add (view);
remember = new Gtk.CheckButton.with_label ("Remember info visibility");
select_on_show = new Gtk.CheckButton.with_label ("Select first on show");
show_headers = new Gtk.CheckButton.with_label ("Show headers");
show_icons = new Gtk.CheckButton.with_label ("Show icons");
completion = view.get_completion ();
toggle_active_property (completion, remember, "remember-info-visibility");
toggle_active_property (completion, select_on_show, "select-on-show");
toggle_active_property (completion, show_headers, "show-headers");
toggle_active_property (completion, show_icons, "show-icons");
hbox.pack_start (remember, false, false, 0);
hbox.pack_start (select_on_show, false, false, 0);
hbox.pack_start (show_headers, false, false, 0);
hbox.pack_start (show_icons, false, false, 0);
vbox.pack_start (scroll, true, true, 0);
vbox.pack_end (hbox, false, false, 0);
window.add (vbox);
window.destroy.connect (destroy_cb);
remember.toggled.connect (remember_toggled_cb);
select_on_show.toggled.connect (select_on_show_toggled_cb);
show_headers.toggled.connect (show_headers_toggled_cb);
show_icons.toggled.connect (show_icons_toggled_cb);
return window;
}
void create_completion ()
{
//Gtk.SourceCompletionWords prov_words;
comp = view.get_completion ();
/*prov_words = new Gtk.SourceCompletionWords (null, null);
prov_words.register (view.get_buffer ());
comp.add_provider (prov_words);
prov_words.priority = 10;*/
TestProvider tp = new TestProvider ();
tp.priority = 1;
tp.name = "Test Provider 1";
comp.add_provider (tp);
tp = new TestProvider ();
tp.priority = 5;
tp.name = "Test Provider 5";
comp.add_provider (tp);
}
void main (string[] args)
{
Gtk.Window window;
Gtk.init (ref args);
window = create_window ();
create_completion ();
window.show_all ();
Gtk.main ();
}
_______________________________________________
vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list