Как использовать g_signal_handlers_block_by_func () - PullRequest
2 голосов
/ 18 апреля 2019

Я слушаю «измененный» сигнал GtkComboBox.Я опорожняю и пополняю GtkComboBoxText, который является простым вариантом GtkComboBox.Я пытаюсь использовать макрос g_signal_handlers_block_by_func(instance, func, data), чтобы "измененный" сигнал не передавался моей функции обратного вызова при очистке и заполнении этого поля.

При передаче функции в качествеfunc: error: ISO C запрещает передавать аргумент 6 'g_signal_handlers_block_matched' между указателем на функцию и 'void *' [-Werror = pedantic]

Это происходит потому, что func приводится к gpointer (typedef к (void*))в g_signal_handlers_block_matched. Как я понял, функция приведения указателя на указатель данных недопустима.

Пример:

static void my_callback(GtkComboBox *box, GtkComboBox *other_box)
{
  // Some code here
}


g_signal_connect(combo_box, "changed", G_CALLBACK(my_callback), other_box);

// To temporary block changed signals for reaching other_box:
g_signal_handlers_block_by_func(combo_box, G_CALLBACK(my_callback), other_box);

Также пробовал без G_CALLBACK, но это не имеет значения. Проблемаэто то же самое.

Как использовать g_signal_handlers_block_by_func?

1 Ответ

1 голос
/ 20 апреля 2019

GObject и GLib требуют компилятора, который "делает все правильно" при приведении указателей на функции к void* и наоборот.

Из кода сборки и GLib wiki :

GLib в значительной степени зависит от способности преобразовывать указатель функции в void* и обратно без потерь. Любая платформа или компилятор, который не поддерживает это, не может использоваться для компиляции GLib или кода, который использует GLib. Это исключает использование флага -pedantic GCC с GLib.

...