Как исправить ошибку «утверждение« GDK_IS_SCREEN (экран) »не удалось» в GTK + 2 - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь написать короткую программу на C, которая заставляет все программы перезагружать тему GTK + 2, как это делает LXAppearance, когда вы нажимаете на apply.

Глядя на исходный код LXAppearance, я нашел функцию, которая делает именно это. Эта же функция (без if-else, которая применяется только к LXSession) также находится в gtk-theme-switch .

Это код, написанный отдельной программой:

#include <gtk/gtk.h>

int main()
{
    GdkEventClient event;
    event.type = GDK_CLIENT_EVENT;
    event.send_event = TRUE;
    event.window = NULL;
    event.message_type = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
    event.data_format = 8;
    gdk_event_send_clientmessage_toall((GdkEvent*)&event);
}

При запуске программы I возникает следующая ошибка:

(process:3428): Gdk-CRITICAL **: 21:38:49.599: IA__gdk_screen_get_root_window: assertion 'GDK_IS_SCREEN (screen)' failed
Segmentation fault (core dumped)

Что я делаю не так?

1 Ответ

0 голосов
/ 26 апреля 2019

Вы не инициализировали GTK.По крайней мере, чтобы получить доступ к вашему текущему дисплею X с помощью GTK, вам нужно вызвать функцию gtk_init , прежде чем делать какие-либо другие действия, связанные с X.

...