Сбой XCreateWindow в CentOS 5.6 с ошибкой: BadValue - PullRequest
0 голосов
/ 08 мая 2011

Я использую следующий код для создания поддельного окна для некоторых интеграционных тестов:

class CXWindowsClipboardTests
{
protected:
    virtual void
    SetUp()
    {
        m_display = XOpenDisplay(NULL);
        int screen = DefaultScreen(m_display);
        Window root = XRootWindow(m_display, screen);

        XSetWindowAttributes attr;
        attr.do_not_propagate_mask = 0;
        attr.override_redirect = True;
        attr.cursor = Cursor();

        m_window = XCreateWindow(
            m_display, root, 0, 0, 1, 1, 0, 0,
            InputOnly, CopyFromParent,
            CWDontPropagate | CWEventMask |
            CWOverrideRedirect | CWCursor,
            &attr);
    }

    virtual void
    TearDown()
    {
        XDestroyWindow(m_display, m_window);
        XCloseDisplay(m_display);
    }
};

Выше приведена модифицированная версия исходного кода, занимающая меньше места (см. полный исходный код)код ).

Приведенный выше код периодически прерывается на CentOS 5.6 со следующей ошибкой:

X Error of failed request:  BadValue
  (integer parameter out of range for operation)
  Major opcode of failed request:  1 (X_CreateWindow)
  Value in failed request:  0x844b530
  Serial number of failed request:  7
  Current serial number in output stream:  8

Итак, на самом деле два вопроса:

  • Чтоможет вызвать сбой XCreateWindow в CentOS с перебоями таким образом?
  • И я довольно новичок в разработке X, так что я понятия не имею, что означают различные значения ошибок (например, Значение в неудачном запросе) или какиспользуй их.Может кто-нибудь кратко объяснить это для меня?

1 Ответ

1 голос
/ 08 мая 2011

Вы используете CWEventMask, но не инициализируете attr.event_mask. Это может быть вашей проблемой. (поскольку структура создается в стеке, она будет содержать случайные данные в этом поле.)

...