GTK: позиционирование пунктов контекстного меню в контекстном меню - PullRequest
2 голосов
/ 27 июля 2010

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

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

РЕДАКТИРОВАТЬ: Я хотел бы включить некоторый код, но логика слишком разбросаны для этого.

Ответы [ 2 ]

0 голосов
/ 03 августа 2010

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

0 голосов
/ 27 июля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...