gtk_widget_grab_focus GtkDrawingArea сбрасывает настройку родительского GtkScrolledWindow
Я рисую в GtkDrawingArea. Это дочерний элемент фрейма (чтобы получить тень, если я уменьшу масштаб), и этот фрейм является дочерним элементом GtkScrolledWindow. Все работало нормально.
Теперь мне пришлось установить несколько горячих клавиш, которые должны быть активны в определенных случаях. Чтобы получать клавиши с клавиатуры, я должен поставить фокус на эту GtkDrawingArea. Что я и делаю, вызывая gtk_widget_grab_focus.
К сожалению, это устанавливает настройки GtkScrolledWindow на 1. Это означает, что если я нахожусь в правом нижнем углу GtkDrawingArea, когда я захватываю фокус для него, внезапно я оказываюсь (почти) в верхнем левом углу.
В качестве обходного пути я сохраняю настройку и устанавливаю это значение после захвата:
GtkAdjustment *hadjust_p, *vadjust_p; /* of course this comes before creating
the GtkScrolledWindow */
gdouble tmp_hadjust, tmp_vadjust;
tmp_hadjust = gtk_adjustment_get_value(hadjust_p);
tmp_vadjust = gtk_adjustment_get_value(vadjust_p);
gtk_widget_grab_focus(widget);
gtk_adjustment_set_value(hadjust_p, tmp_hadjust);
gtk_adjustment_set_value(vadjust_p, tmp_vadjust);
Разве нет лучшего способа сделать это? Мне это не кажется большим.
Я использую C и gtk3 на Debian buster. Спасибо, что посмотрели. Фло