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. С таким тривиальным кодом вы не сталкивались с проблемами линковки, но, конечно, новых сигналов тоже не было.

Другие вопросы по тегам