Соблюдение разлома сегментации с gtk Off Escreen Window и WebKit2C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Соблюдение разлома сегментации с gtk Off Escreen Window и WebKit2

Сообщение Anonymous »

Я хотел бы получить снимок веб -просвещения в приложении в Linux, и не должно появиться дополнительного окна. Поэтому я решил использовать окно webkit2 и gtk за пределами экрана для достижения моих целей. Приведенный ниже код работал один раз, но без каких -либо изменений и изменений в окружающей среде он больше не работает и возвращается к ошибке сегментации. Я хотел бы спросить мнения о том, что я сделал неправильно с окном вне экрана, так как приведенный ниже код отлично работает с обычным GTKWindow (то есть замену окна за пределами экрана обычным окном). Спасибо за помощь. < /P>

Код: Выделить всё

#include 
#include 

void on_snapshot_finished(GObject *source_object, GAsyncResult *res, gpointer user_data)
{
WebKitWebView *web_view = WEBKIT_WEB_VIEW(source_object);
cairo_surface_t *surface = webkit_web_view_get_snapshot_finish(web_view, res, NULL);
if (surface)
{
g_print("found surface.\n");
cairo_surface_write_to_png(surface, "output.png");
}
else
{
g_print("no surface.\n");
}

gtk_main_quit();
}

static void load_changed(WebKitWebView *web_view, WebKitLoadEvent load_event, gpointer user_data)
{
if (load_event == WEBKIT_LOAD_FINISHED)
{
webkit_web_view_get_snapshot(web_view, WEBKIT_SNAPSHOT_REGION_FULL_DOCUMENT, WEBKIT_SNAPSHOT_OPTIONS_TRANSPARENT_BACKGROUND, NULL, on_snapshot_finished, NULL);
}
}

int main(int argc, char *argv[])
{
gtk_init(&argc, &argv);

GtkWidget *window = gtk_offscreen_window_new();
gtk_window_set_default_size(GTK_WINDOW(window), 1280, 720);

g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

WebKitWebView *web_view = WEBKIT_WEB_VIEW(webkit_web_view_new());
g_signal_connect(web_view, "load-changed", G_CALLBACK(load_changed), NULL);

gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(web_view));

webkit_web_view_load_uri(web_view, "https://www.google.com"/);

gtk_widget_show_all(window);

gtk_main();

return 0;
}
Я попытался заменить строку gtk_widget_show_all (window); выше gtk_container_add (gtk_container (window), gtk_widget (web_view)); , который делает код, работающим на захвате. Однако в реальном проекте есть некоторое следующее взаимодействие, например, изменение размера окна. Это взаимодействие больше не работает, если я размещаю строку gtk_widget_show_all (window); выше gtk_container_add (gtk_container (window), gtk_widget (web_view)); . Я не уверен, является ли это правильным решением и просто совпадением.

Подробнее здесь: https://stackoverflow.com/questions/795 ... nd-webkit2
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»