LINUX.ORG.RU

[gtk] захват курсора


0

0

Как захватить курсор gtk'шным окном подобно «захвату» курсора приложениям на glut? Т.е. изображение курсора мыши должно исчезнуть, а перемещение мыши должно всегда отдавать новые координаты (x,y), независимо от размера окна и экрана.

Делаю захват так:

		gdk_pointer_grab(window->drawingArea->window, TRUE, 0,
						window->drawingArea->window, NULL,
						GDK_CURRENT_TIME);
при выходе мыши за пределы окна курсор остается на границе окна и координаты его не изменяются.

☆☆☆☆☆

Еще вопрос «в догонку»: для фильтрации файлов в диалоге «open file» я использую GtkFileFilter. В документации не нашел, как его удалять. В примерах, что нашел, фильтр создают, добавляют его к GtkFileChooser'у, но не удаляют.

Память течь не будет, если так делать?

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от someloruser

Это только меняет форму курсора, но не поведение при выходе за границы окна.

Eddy_Em ☆☆☆☆☆ ()

Подсказали на юниксфоруме: после обработки события перемещения мыши надо возвращать курсор назад при помощи gdk_display_warp_pointer.

Остается лишь вопрос по GtkFileFilter.

Eddy_Em ☆☆☆☆☆ ()

Вот переделал исходник примера из ГТК2 (scribble-simple.c).

Курсор скрыт. Курсор выходит за пределы окна. Курсор возращает координаты за пределами окна.

Мои правки начинаются со строк «SOME-LOR-USER». http://pastebin.mozilla-russia.org/108609

x, y : -33.000000, -76.000000
x, y : -33.000000, -61.000000
x, y : -33.000000, -44.000000
x, y : -33.000000, -27.000000
x, y : -33.000000, -12.000000
x, y : -33.000000, 1.000000
x, y : -32.000000, 12.000000
x, y : -32.000000, 21.000000
x, y : -32.000000, 24.000000
x, y : -32.000000, 25.000000
x, y : -30.000000, 27.000000
someloruser ()
Ответ на: комментарий от someloruser

А как его компилировать?

gcc 1.c $(pkg-config --cflags --libs gtk+-2.0)
матюгается на gtk_widget_get_state.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от someloruser

Понял, у меня gtk 2.16, там такой функции еще не было. Заменил на GTK_WIDGET_STATE.

Не работает эта штука: теперь координаты ограничены не размером окна, а размером экрана.

Так что, без возвращения курсора в предыдущую позицию не получится все равно :)

Eddy_Em ☆☆☆☆☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.