私は楽しみのために Web ブラウザに取り組んでおり、この問題に遭遇しました。
これは機能します:
#include <webkit/webkit.h>
void init() {
GtkWidget *web_view = webkit_web_view_new();
g_signal_connect(
G_OBJECT(GTK_WIDGET(this->web_view)),
"notify::progress",
G_CALLBACK(LoadChangedProxy),
NULL);
webkit_web_view_load_uri(WEBKIT_WEB_VIEW(this->web_view), "http://google.com");
}
void LoadChangedProxy(GtkWidget *view, GParamSpec *pspec, gpointer p) {
puts("LOADING");
}
この場合、コールバックは呼び出されません。
#include <webkit2/webkit2.h>
void init() {
GtkWidget *web_view = webkit_web_view_new();
g_signal_connect(
G_OBJECT(GTK_WIDGET(this->web_view)),
"notify::estimated-load-progress",
G_CALLBACK(LoadChangedProxy),
NULL);
webkit_web_view_load_uri(WEBKIT_WEB_VIEW(this->web_view), "http://google.com");
}
void LoadChangedProxy(GtkWidget *view, GParamSpec *pspec, gpointer p) {
puts("LOADING");
}
私は最初に webkitgtk2 を使用しようとしていましたが、本当に頭を壁にぶつけていました。古い webkitgtk1 ヘッダーと API に切り替えたところ、魔法のように機能し始めました。何がこれを引き起こすのかわかりません。さらに、stderr または stdout にエラーが出力されません (たとえば、オブジェクトにないシグナルに接続しようとしているなど)。
何か提案はありますか?glib の g_signal_connect に関するドキュメントは驚くほど少ないです。私が知っているのは、いくつかの gnome アプリのソース コードを調べたことです。
編集: webkitgtk2 のケースで "notify::progress" シグナル識別子を使用すると、コールバックが機能することがわかりました。ただし、webkit_web_view_get_progress() または webkit_web_view_get_estimated_load_progress() を使用して進行状況の値を読み取って表示することはできません。