2014-04-22 3 views
2

Я хочу узнать, какой виджет находится в заданном направлении в GTK +, т. Е. Делать то, что делает сигнал «move-focus», но без изменения фокуса. Я имею в виду функцию, которая принимает GtkWidget * и GtkDirectionType и возвращает GtkWidget в заданном направлении (если есть).Как найти следующий виджет в заданном направлении в GTK +?

Что я хочу для этого - это в конечном счете перечислить виджеты внутри определенного GtkFrame в моем определении пользовательского интерфейса в порядке слева направо. То есть в основном создайте список виджетов от самого левого до самого правого, внутри моего GtkFrame (или в общем случае внутри любого контейнера).

Я попытался выполнить поиск документации GTK, но не нашел ничего, что не изменит фокус.

ответ

0

Предполагая, что вас интересуют направления «Вперед» и «Вперед», похоже, что вы хотите использовать gtk_container_get_focus_chain() на кадре: он делает в значительной степени то, что он говорит на жестяне: вы получаете список виджетов в порядке фокуса при табуляции.

+1

На самом деле, это не та вкладка, которую я ищу, а виджеты, которые достигаются путем отправки GTK_DIR_UP/DOWN/LEFT/RIGHT в качестве аргумента сигнала «move-focus». («move-signal» также может принимать GTK_DIR_TAB_FORWARD/BACKWARD, который сдвигает фокус в порядке вкладок). – ricard

+1

Кроме того, gtk_container_get_focus_chain() возвращает цепочку цепочки, если она явно задана (с gtk_container_set_focus_chain() я предполагаю, хотя я ее не пробовал). Кажется, он не возвращает цепочку фокуса по умолчанию, автоматически вычисленную GTK +. – ricard

+0

Это последнее предположение неверно: цепочки фокусировки следует рассчитывать, если она не была установлена. – jku

1

Неспособность любого другого подхода заключается в том, чтобы скопировать выбранный набор статических функций из реализации библиотеки GtkContainer и поместить их в файл в моем собственном приложении, изменив их в соответствии с моими потребностями.

Более конкретно, функция gtk_container_focus_sort_left_right() и любые локальные функции, от которых она зависит. Это включает в себя GCompareFunc left_right_compare() и get_allocation_coords().