Здравствуйте. Подскажите, почему не блокируется сигнал.
как видно здесь сигнал создается
void fm_load_file(Page *page)
{
gchar *text;
gsize length;
GFile *file = g_file_new_for_path(page->file_name);
g_file_load_contents(file, NULL, &text, &length, NULL, NULL);
page->monitor = g_file_monitor_file(file, G_FILE_MONITOR_SEND_MOVED, NULL, NULL);
page->handler_number = g_signal_connect(page->monitor, "changed", G_CALLBACK(file_monitor_watcher), page->file_name);
gtk_text_buffer_set_text(page->buffer, text, -1);
gtk_text_buffer_set_modified(page->buffer , FALSE);
g_free(text);
}
Эта функция должна записать текст в файл и заблокированый сигнал не должен сработать, но он срабатывает. Немогу понять почему. Если убрать функцию разблокировки, то он срабатвать не будет.
void fm_save_file(Page *page)
{
g_signal_handler_block(page->monitor, page->handler_number);
GtkTextIter start, end;
gchar *text;
gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(page->buffer), &start, &end);
text = gtk_text_iter_get_text(&start, &end);
g_file_set_contents(page->file_name, text, -1, NULL);
gtk_text_buffer_set_modified(page->buffer , FALSE);
g_free(text);
g_signal_handler_unblock(page->monitor, page->handler_number);
}
На всякий случай при срабатывании сигнала
gboolean file_monitor_watcher(GFileMonitor *monitor, gpointer user_data)
{
g_print("file changed\n");
}
Как мне добится временного отключения сигнала? Буду весьма признателен за любую помощь.