LINUX.ORG.RU

GTK - временное отключение сигнала


0

0

Зачастую уже после создания виджетов и привязки к ним обработчиков сигналов возникает необходимость изменить свойства некоторых их них (к примеру, поставить или сбросить флажки). При этом, например, gtk_toggle_button_set_active() генерирует сигнал toggled, в результате чего выполняется код, который должен выполняться только тогда, когда пользователь меняет свойства данных виджетов.

Можно ли как-нибудь временно отключить генерацию сигналов для виджета? Чтобы было что-нибудь вроде этого:
gtk_widget_disable_signals(toggle_button);
gtk_toggle_button_set_active(toggle_button, 1);
gtk_widget_enable_signals(toggle_button);

anonymous
Ответ на: комментарий от anonymous

Ровно один в один такая же потребность возникла вчера.
суть такая, есть виджет с сигналом "toggled", на этот сигнал повесил колбек on_runner. когда этот виджет активируется (т.е. статус = TRUE, мне нужно сделать некоторую проверку и в определенном случае снять этот флажок, т.е. active выставить в FALSE. Т.е. я должне сделать вот так...

g_signal_handlers_block_by_func (action, on_runner, NULL);

gtk_toggle_action_set_active (action, FALSE);

g_signal_handlers_unblock_by_func (action, on_runner, NULL);

но при этом все равно срабатывает колбек, когда я выставляю в FALSE.
Вобщем я так и не понял почему это происходит. Так что тыкать в этот ман не совсем есть смысл.

Deleted
()
Ответ на: комментарий от Deleted

Вот еще забыл сказать... сама по себе функция

g_signal_handlers_block_by_func (action, on_runner, NULL);

работает, потому как если я не делаю разблокировки (unblock) сигнала, то колбек перестает срабатывать.

сложилось ощущение, будто после gtk_toggle_action_set_active (action, FALSE); сигнал положился куда-то в очередь, а после того как колбек разблокировался, этот сигнал отработался.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.