Как Вы скрываете указатель мыши под Linux/X11?

Проблема заключается в том, что защищенный метод доступен только из одного класса или класса. Что вы можете сделать, так это расширить свой класс Child от родителя, например:

class Child extends Parent
{
    public function __constructor ()
    {
        parent::__constructor();
    }

    public function __destroy()
    {
        $this->callme(); // Should work!
    }
}

Или просто изменить метод на публичный.

И, btw, это код какого-то реального кода, который вы будете использовать? Этот конструктор, получающий родительский объект, кажется настолько неправильным. Что вы пытаетесь выполнить?

28
задан rck 19 March 2009 в 00:37
поделиться

3 ответа

Можно создать и установить невидимую тему курсора. Этот прием используется maemo, потому что довольно бессмысленно иметь курсор на устройстве с сенсорным экраном.

К сожалению, способность изменить глобальную тему курсора во времени выполнения не универсальна через приложения X11 и инструментарии. Можно изменить ресурс сервера Xcursor.theme, и никто не заметит (обычно, он только запрашивается при запуске); можно сообщить xsettings, который только, кажется, влияет на Gtk + программы; KDE использует своего рода коммуникацию через свойства на корневом окне; и т.д.

, По крайней мере, изменение курсора для Вашего собственного приложения так же легко как XDefineCursor, и если Вы делаете это на корневом окне, приблизительно , приложения могли бы следовать вперед.

14
ответ дан ephemient 14 October 2019 в 09:20
поделиться

Я закончил тем, что использовал XDefineCursor как упомянутый ephemient. Приложение управления изменило корневой курсор окна по умолчанию и другие приложения (которые находятся под моим контролем), наследовал его.

специфические особенности Кода похожи:

// Hide the cursor

if (NULL==(display=XOpenDisplay(NULL))) 
{
   printf("Unable to open NULL display\n");
   exit(1);
}
window = DefaultRootWindow(display);

Cursor invisibleCursor;
Pixmap bitmapNoData;
XColor black;
static char noData[] = { 0,0,0,0,0,0,0,0 };
black.red = black.green = black.blue = 0;

bitmapNoData = XCreateBitmapFromData(display, window, noData, 8, 8);
invisibleCursor = XCreatePixmapCursor(display, bitmapNoData, bitmapNoData, 
                                     &black, &black, 0, 0);
XDefineCursor(display,window, invisibleCursor);
XFreeCursor(display, invisibleCursor);
XFreePixmap(display, bitmapNoData);

для сокрытия курсора и затем после того, как я сделан

// Restore the X left facing cursor
Cursor cursor;
cursor=XCreateFontCursor(display,XC_left_ptr);
XDefineCursor(display, window, cursor);
XFreeCursor(display, cursor);

Для восстановления X предназначенный для левой руки курсор (Так как это - корневое окно и я не хочу, чтобы он остался невидимым. Я не уверен, но я мог бы также быть в состоянии использовать

XUndefineCursor(display, window);
14
ответ дан rck 14 October 2019 в 09:20
поделиться

Вот описание как unclutter утилита делает это.

Непомеха является программой, которая работает постоянно в фоновом режиме сессии X11. Это проверяет указатель X11 (курсор) положение каждые несколько секунд, и когда это находит, что не переместилось (и никакие кнопки не нажимаются на мыши, и курсор не находится в корневом окне), это создает маленькое подокно как ребенка окна, в котором находится курсор. Новое окно устанавливает курсор размера 1x1, но маска всего 0, т.е. невидимый курсор. Это позволяет Вам видеть весь текст в xterm или xedit, например. Толпа человеческих факторов согласилась бы, что она должна сделать вещи менее недовольными.

После того, как созданный, программа ожидает указателя для отъезда окна и затем уничтожает его, восстанавливая исходную ситуацию. События кнопки передаются прозрачно до родительского окна. Они будут обычно заставлять курсор вновь появляться, потому что активный захват будет сделан программой, в то время как кнопка снижается, таким образом, указатель, по-видимому, оставит окно, даже при том, что его x y положение не изменяется.

34
ответ дан ppl 27 November 2019 в 22:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: