LINUX.ORG.RU

ClientMessage кладет XSendEvent

 ,


0

1

Делаю по примеру: http://ubuntuforums.org/archive/index.php/t-570702.html

int _testSend()
{
    XClientMessageEvent xevent;
    xevent.type         = ClientMessage;
    //xevent.message_type = warehouse.timeratom;
    //xevent.format       = SML_FORMAT_TIMER;
    //xevent.data.l[0]    = 128;

    XSendEvent(warehouse.display,
               warehouse.win.ptr[1].window, 0, 0, (XEvent *)&xevent);
}

Падает с BadValue. Если ставить xevent.type = KeyPress, то работает. ЧЯДНТ?

sudo cast beastie


Ответ на: комментарий от NeXTSTEP

То, что у меня закомменчено? Пробовал. Вылетает так же.

inn
() автор топика
Ответ на: комментарий от beastie

Попробовал как у них:

int _testSend(int winindex)
{
    XEvent              ev;
    ev.type                 = ClientMessage;
    ev.xclient.window       = warehouse.win.ptr[winindex].window;
    ev.xclient.message_type = warehouse.timeratom;
    //xevent.format       = SML_FORMAT_TIMER;
    //xevent.data.l[0]    = 128;
    XSendEvent(warehouse.display,
               warehouse.win.ptr[winindex].window, 0, 0, &ev);
}

Валится: https://dl.dropboxusercontent.com/u/31471800/p2p/Снимок экрана от 2013-10-27 ...

Меняю на KeyPress - нормально отрабатывает... Причем пример с убунтофорума, ссылку на который давал в оп-посте компилится и работает.

inn
() автор топика
Ответ на: комментарий от beastie

Предвосхищая вопросы: атом создан, окно создано, проверял.

inn
() автор топика
Ответ на: комментарий от inn

XEvent ev;

Попробуй забить его нулями. BadValue же пишет, наверное какое-то поле забыл проинициализировать?

anonymous
()
Ответ на: комментарий от anonymous
int _testSend(int winindex)
{
    XEvent              ev;
    memset(&ev, 0, sizeof(ev));
    ev.type                 = ClientMessage;
    //ev.xclient.window       = warehouse.win.ptr[winindex].window;
    //ev.xclient.message_type = warehouse.timeratom;
    //xevent.format       = SML_FORMAT_TIMER;
    //xevent.data.l[0]    = 128;
    XSendEvent(warehouse.display,
               warehouse.win.ptr[winindex].window, 0, NoEventMask, &ev);
}

Падает. И да, все эти вещи падают, разумеется не на самой функции XSendEvent, а на Pending здесь:

while (warehouse.destroyflag != SML_DEAD)
    {
        if (XPending(warehouse.display))
        {
            XNextEvent(warehouse.display, &event);

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