Заменить обратный вызов для GtkItem, созданного из GtkItemFactoryEntry - PullRequest
0 голосов
/ 25 марта 2010

Я пишу плагин, который модифицирует существующий интерфейс. Одна вещь, которую я хочу сделать, это изменить то, что делает существующий пункт меню.

Это все с использованием библиотеки Gtk.

Пункт меню (a GtkItem) создается из GtkItemFactoryEntry (который находится вне моего контроля), и его текущее поведение определяется обратным вызовом в GtkItemFactoryEntry.

Я могу получить указатель на пункт меню, используя gtk_item_factory_get_widget() и прикрепить дальнейшие действия к пункту меню, используя gtk_signal_connect(), но я не могу отключить исходный обратный вызов, используя gtk_signal_disconnect() или gtk_signal_disconnect_by_func().

Можно ли каким-либо образом удалить или заменить исходный обратный вызов?

Ответы [ 2 ]

1 голос
/ 26 марта 2010

Итак, хак, который я придумал, заключался в том, что обработчики сигналов идентифицируются счетчиком с одним номером, и я получаю идентификатор обработчика для обратного вызова, который я хочу прикрепить с помощью gtk_signal_connect(), чтобы просто запустить gtk_signal_disconnect() на каждый идентификатор обработчика от нуля до единицы меньше, чем мой новый идентификатор обработчика.

Это некрасиво, но работает. А поскольку на предмете не наложено никаких других сигналов, он ничего не сломает.

0 голосов
/ 26 марта 2010

g_signal_handlers_disconnect_matched() предлагает больше опций для сопоставления обратного вызова, который вы хотите отключить.

...