2010-07-27 3 views
2

Я работаю над дефектом в своем GTK-коде для отображения контекстных меню. После создания меню с несколькими пунктами меню я использую gtk_menu_popup() для отображения меню. Эта функция принимает указатель на функцию типа GtkMenuPositionFunc, который позволяет мне позиционировать меню. Я действительно ничего не делаю здесь, кроме как сказать GTK сохранить текущую позицию, но нажимать меню, если часть меню находится вне монитора (используя четвертый аргумент функции). Моя проблема в том, что когда GTK нажимает меню, абсолютная позиция пунктов меню не изменяется. Следовательно, их изменение положения прокрутки приводит к появлению полос прокрутки в меню. Я хочу, чтобы относительное положение пунктов меню w.r.t в меню оставалось фиксированным. Есть ли способ сделать это? Документация GTK предупреждает об этой проблеме, но ничего не говорит о том, как ее исправить. Существует ссылка на него для справки:GTK: пункты контекстного меню позиционирования w.r.t контекстное меню

http://library.gnome.org/devel/gtk/unstable/GtkMenu.html#GtkMenuPositionFunc

EDIT: Я хотел бы включить код, но логика слишком рассеянные для этого.

ответ

0

Я не смог найти способ отрегулировать смещение прокрутки элементов меню после ввода меню. Таким образом, обходной путь, который я использовал, состоял в том, чтобы избежать того, чтобы GTK нажимал меню по вертикали. Следовательно, первоначальный запрос состоял в том, чтобы создать меню в позиции (x,y), но в результате получилось L меню, выходящего из экрана, я переместил меню на (x,y-L) в мою позицию. Аналогично, если y<0 меняю, установите его на (x,0). Я все еще говорю GTK, чтобы входить в любое меню, которое выходит за пределы экрана, чтобы заботиться о меню, перемещающемся по левому и правому краям.

0

Вам не нужно предоставлять функцию позиционирования, если вы просто хотите по умолчанию. Поведение по умолчанию заключается в том, чтобы сохранить текущую позицию, но убедитесь, что меню соответствует монитору, поэтому вы можете просто передать NULL в качестве функции позиционирования.

Вы также можете посмотреть на то, как написано функция позиционирования по умолчанию: http://git.gnome.org/browse/gtk+/tree/gtk/gtkmenu.c, gtk_menu_position() в настоящее время на линии 4288.

PS. Если ваша логика слишком разбросана, чтобы опубликовать образец кода, вам следует рассмотреть возможность ее очистки.

+0

Передача 'NULL' на самом деле не вариант, поскольку он используется в некоторых случаях. Я попытался передать «NULL» для этого конкретного случая, и это решило проблему. Означает ли это, что я не могу попросить GTK переместить меню, а также попросить его нажать меню внутри, если оно выходит за пределы экрана? Это кажется невероятным. – 341008

+0

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

Смежные вопросы