GLib signal connect работает с webkitgtk, но не с webkitgtk2
Я работаю над веб-браузером для удовольствия и столкнулся с этой проблемой.
Это работает:
#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 (например, при попытке подключиться к сигналу, которого нет у объекта).
Есть предложения? На g_signal_connect от glib на удивление мало документации. Все, что я знаю, пришло от просмотра исходного кода приложения gnome.
Изменить: я обнаружил, что с помощью идентификатора сигнала "notify::progress" в случае webkitgtk2, обратный вызов работает. Однако тогда я не могу использовать ни webkit_web_view_get_progress(), ни webkit_web_view_get_estimated_load_progress(), чтобы прочитать значение прогресса и отобразить его.
1 ответ
Симптомы достаточно странные, и я могу придумать только одно объяснение: вы все еще работаете с webkit-gtk. С таким тривиальным кодом вы не сталкивались с проблемами линковки, но, конечно, новых сигналов тоже не было.