Итак, у меня была та же проблема, но мне удалось заставить ее работать в моем случае. Я думаю, есть хорошие шансы, что мое решение сработает и для вас.
Поскольку метод grab_focus
не работал, я начал реализовывать обходное решение, используя listbox_get_row_at_y
. В высшей степени неудовлетворительно, но, надеюсь, это сработает. И .. это не сработало, потому что get_row_at_y
всегда возвращал null
для всех значений y, которые я ему скармливал. И я знал, что список не пуст. Это заставило меня понять, что я пытался сфокусировать строку, которую только что добавлял в список ... Строка еще не была реализована, ее нельзя было сфокусировать, потому что она еще не была готова для этого.
Итак, я изменил свой код, чтобы заполнить список, подождать тайм-аут 100 мс и только затем позвонить grab_focus
. И это сработало!
На самом деле я использую библиотеку, которая обертывает для меня вызов тайм-аута, но я думаю, вы могли бы использовать g_timeout_add в 'raw' gtk для этой цели.
Обратите внимание, что это означает, что вызов grab_focus
в списке, который уже был заполнен заранее, и элементы, реализованные на экране, должны работать напрямую. Если это ваша ситуация, то это вам не поможет.