2017-02-10 22 views
0

Я пытаюсь создать мое первое приложение на основе webkit с помощью Vala и GTK. Я очень новичок в этом на языках и в процессе их компиляции, поэтому любая помощь будет отличной.Получение сообщения об ошибке webkit/webview app - Vala/GTK

Это ошибка я получаю:

/home/elementary/GTKProjects/Fookbase/src/fookbase_main.vala:2.7-2.12: ошибка: имя пространства имен `WebKit» не может быть найдено с помощью WebKit;

/home/elementary/GTKProjects/Fookbase/src/fookbase_main.vala:13.13-13.19: ошибка: имя типа `WebView 'не может быть найдено в виде частного WebView web_view;

Это мой код:

using Gtk; 
using WebKit; 

public class Fookbase : Window { 

private const string TITLE = "Fookbase"; 
private const string HOME_URL = "http://fookbase.com"; 
private const string DEFAULT_PROTOCOL = "http"; 

private Regex protocol_regex; 

private Entry url_bar; 
private WebView web_view; 
private Label status_bar; 
private ToolButton back_button; 
private ToolButton forward_button; 
private ToolButton reload_button; 

public Fookbase() { 
    this.title = Fookbase.TITLE; 
    set_default_size (500, 800); 

    try { 
     this.protocol_regex = new Regex (".*://.*"); 
    } catch (RegexError e) { 
     critical ("%s", e.message); 
    } 

    create_widgets(); 
    connect_signals(); 
    this.url_bar.grab_focus(); 
} 

private void create_widgets() { 
    var toolbar = new Toolbar(); 
    this.back_button = new ToolButton.from_stock (Stock.GO_BACK); 
    this.forward_button = new ToolButton.from_stock (Stock.GO_FORWARD); 
    this.reload_button = new ToolButton.from_stock (Stock.REFRESH); 
    toolbar.add (this.back_button); 
    toolbar.add (this.forward_button); 
    toolbar.add (this.reload_button); 
    this.web_view = new WebView(); 
    var scrolled_window = new ScrolledWindow (null, null); 
    scrolled_window.set_policy (PolicyType.AUTOMATIC, PolicyType.AUTOMATIC); 
    scrolled_window.add (this.web_view); 
    this.status_bar.xalign = 0; 
    var vbox = new VBox (false, 0); 
    vbox.pack_start (toolbar, false, true, 0); 
    vbox.pack_start (this.url_bar, false, true, 0); 
    vbox.add (scrolled_window); 
    vbox.pack_start (this.status_bar, false, true, 0); 
    add (vbox); 
} 

private void connect_signals() { 
    this.destroy.connect (Gtk.main_quit); 
    this.url_bar.activate.connect (on_activate); 
    this.web_view.title_changed.connect ((source, frame, title) => { 
     this.title = "%s - %s".printf (title, Fookbase.TITLE); 
    }); 
    this.web_view.load_committed.connect ((source, frame) => { 
     this.url_bar.text = frame.get_uri(); 
     update_buttons(); 
    }); 
    this.back_button.clicked.connect (this.web_view.go_back); 
    this.forward_button.clicked.connect (this.web_view.go_forward); 
    this.reload_button.clicked.connect (this.web_view.reload); 
} 

private void update_buttons() { 
    this.back_button.sensitive = this.web_view.can_go_back(); 
    this.forward_button.sensitive = this.web_view.can_go_forward(); 
} 

private void on_activate() { 
    var url = this.url_bar.text; 
    if (!this.protocol_regex.match (url)) { 
     url = "%s://%s".printf (Fookbase.DEFAULT_PROTOCOL, url); 
    } 
    this.web_view.open (url); 
} 

public void start() { 
    show_all(); 
    this.web_view.open (Fookbase.HOME_URL); 
} 

public static int main (string[] args) { 
    Gtk.init (ref args); 

    var browser = new Fookbase(); 
    browser.start(); 

    Gtk.main(); 

    return 0; 
    } 
} 
+0

Возможный дубликат [Webkit/webkit.h: Нет такого файла или каталога] (http://stackoverflow.com/questions/26400755/webkit-webkit-h-no -such-file-or-directory) –

+0

Ну, это не дубликат, а довольно близко. Проверьте в командной строке 'valac' command @ serge1peshcoff. –

+0

, так что у меня был webkitgtk-1.0 в моей линии valac. Я изменил его на 3.0, как в примере в ссылке, но теперь я получаю эту ошибку: ошибка: Пакет 'webkitgtk-3.0 'не найден в указанных каталогах API Vala или в каталогах GIR-вест-интроспекции GIR Ошибка компиляции: 1 ошибка, 0 предупреждение (и) –

ответ

4

Для того, чтобы использовать библиотеку в Vala, вам необходимо сообщить компилятору об этом. Просто сказать «использование WebKit» в коде недостаточно. Вы делаете это, передавая флаг --pkg (с желаемым значением) до valac.

Имя пакета для почти всех привязок соответствует имени pkg-config, поэтому компилятор Vala может автоматически определять правильные флаги для передачи компилятору C и компоновщику. Чтобы узнать, какие пакеты доступны из Vala, вы можете посмотреть в каталогах /usr/share/vala/vapi и /usr/share/vala-x.yz/vapi (последний относится к версии valac, которую вы используете). У Valadoc.org также есть имена для большого количества пакетов. Я не уверен, какова ваша ссылка, когда вы написали свой код, но обычно они расскажут вам, на каком пакете вы смотрите.

Для WebKit, если вы пишете новое программное обеспечение, вы, вероятно, захотите использовать либо webkit2gtk-4.0, либо webkit2gtk-web-extension-4.0, которые являются пакетами, которые ссылаются на gtk + -3.0.

Так, что-то вроде

valac --pkg webkit2gtk-4.0 ... your-file.vala 

 Смежные вопросы

  • Нет связанных вопросов^_^