2010-07-13 9 views
3

J'essaie donc de faire usage d'un GtkSourceView en C++ en utilisant GtkSourceViewmm, dont la documentation et le niveau de support me donnent l'impression qu'il n'a pas été très attentivement examiné depuis longtemps. Mais je suis toujours optimiste :)Que doit être Glib :: init() pour utiliser Glib :: wrap?

Je suis en train d'ajouter un SourceView en utilisant un code similaire à ce qui suit:

Glib::RefPtr<gtksourceview::SourceLanguageManager> source_language_manager = gtksourceview::SourceLanguageManager::create(); 
Glib::RefPtr<gtksourceview::SourceLanguage> source_language = Glib::wrap(gtk_source_language_manager_guess_language(source_language_manager->gobj(), file, NULL)); 
Glib::RefPtr<gtksourceview::SourceBuffer> source_buffer = gtksourceview::SourceBuffer::create(source_language); 
gtksourceview::SourceView* = m_source_view = new gtksourceview::SourceView(source_buffer); 

m_vbox.pack_start(*m_source_view); 

Malheureusement, il recrache l'avertissement

(algoviz: 4992): glibmm-WARNING **: Impossible d'envelopper l'objet de type 'GtkSourceLanguage'. Conseil: cette erreur est généralement provoquée par l'échec de l'appel d'une fonction de bibliothèque init().

et quand je regarde dans un débogueur, en effet la deuxième ligne ci-dessus (celui avec le Glib::wrap()) est de retour NULL. Je n'ai aucune idée pourquoi c'est, mais j'ai essayé de tenir compte de l'avertissement en ajoutant Glib::init() au début du programme, mais cela n'a pas semblé aider du tout non plus. J'ai essayé Google, mais je n'ai pas réussi. Est-ce que quelqu'un sait ce que Glib veut que je fasse pour pouvoir faire cet appel? Ou, mieux encore, est-ce que quelqu'un connaît un exemple de code qui utilise GtkSourceViewmm (et pas seulement GtkSourceView)? Je n'ai pas été en mesure de trouver un exemple de code réel, même pas sur Google Code Search.

Merci!

Répondre

5

Il s'avère, par HAPS sans surprise, que ce que je devais à init était:

gtksourceview::init(); 

Après cela, je suis tombé sur un autre problème avec l'un des paramètres à gtksourceview::SourceLanguageManager, mais cela a été causé par un véritable bug que je subsequently reported et a été rapidement fixé . Donc tout fonctionne bien maintenant!

+1

Cela change à Gsv :: init() pour les versions plus récentes. – ergosys

+0

pour utiliser Gsv :: init(), vous devez inclure gtksourceviewmm.h – Parker

0

J'utilise gtkmm. En général, vous devez initialiser les choses avec quelque chose comme:

_GTKMain = new Gtk::Main(0, 0, false); 

Bien sûr, ne pas oublier:

delete _GTKMain; 

Vérifiez ici pour plus de détails:

http://library.gnome.org/devel/gtkmm/2.19/classGtk_1_1Main.html

(Désolé, mais l'option de lien ne fonctionne pas ...)

+0

Vous avez lié à la même question que vous répondiez = P –

+0

@Adrian: oui, vous avez raison. J'ai corrigé ça, merci :-) – neuro

+0

Hehe, pas de problème :) Mais je le faisais déjà (je ne pense pas que la fenêtre se serait même montrée si j'avais manqué de démarrer la boucle principale!) Le problème était autre chose , que j'ai posté dans ma propre réponse. Merci pour votre réponse, cependant! –