diff --git a/backends/xrandr/xrandr.h b/backends/xrandr/xrandr.h --- a/backends/xrandr/xrandr.h +++ b/backends/xrandr/xrandr.h @@ -52,7 +52,7 @@ bool isValid() const override; QByteArray edid(int outputId) const override; - static quint8 *outputEdid(xcb_randr_output_t outputId, size_t &len); + static QByteArray outputEdid(xcb_randr_output_t outputId); static xcb_randr_get_screen_resources_reply_t* screenResources(); static xcb_screen_t* screen(); static xcb_window_t rootWindow(); diff --git a/backends/xrandr/xrandr.cpp b/backends/xrandr/xrandr.cpp --- a/backends/xrandr/xrandr.cpp +++ b/backends/xrandr/xrandr.cpp @@ -251,8 +251,9 @@ return result; } -quint8 *XRandR::outputEdid(xcb_randr_output_t outputId, size_t &len) +QByteArray XRandR::outputEdid(xcb_randr_output_t outputId) { + size_t len = 0; quint8 *result; auto edid_atom = XCB::InternAtom(false, 4, "EDID")->atom; @@ -266,16 +267,14 @@ result = XRandR::getXProperty(outputId, edid_atom, len); } - if (result) { + QByteArray edid; + if (result != nullptr) { if (len % 128 == 0) { - return result; - } else { - len = 0; - delete[] result; + edid = QByteArray((char *) result, len); } + delete[] result; } - - return nullptr; + return edid; } xcb_randr_get_screen_resources_reply_t* XRandR::screenResources() diff --git a/backends/xrandr/xrandroutput.cpp b/backends/xrandr/xrandroutput.cpp --- a/backends/xrandr/xrandroutput.cpp +++ b/backends/xrandr/xrandroutput.cpp @@ -105,16 +105,8 @@ QByteArray XRandROutput::edid() const { if (m_edid.isNull()) { - size_t len; - quint8 *data = XRandR::outputEdid(m_id, len); - if (data) { - m_edid = QByteArray((char *) data, len); - delete[] data; - } else { - m_edid = QByteArray(); - } + m_edid = XRandR::outputEdid(m_id); } - return m_edid; }