diff --git a/include/components/x11/randr.hpp b/include/components/x11/randr.hpp index 63eb5080..9d7b2efa 100644 --- a/include/components/x11/randr.hpp +++ b/include/components/x11/randr.hpp @@ -38,26 +38,26 @@ namespace randr_util { auto outputs = conn.get_screen_resources(root).outputs(); for (auto it = outputs.begin(); it != outputs.end(); it++) { - auto info = conn.get_output_info(*it); - - if (info->connection != XCB_RANDR_CONNECTION_CONNECTED) - continue; - - auto crtc = conn.get_crtc_info(info->crtc); - string name{info.name().begin(), info.name().end()}; - - monitors.emplace_back(make_monitor(name, crtc->width, crtc->height, crtc->x, crtc->y)); + try { + auto info = conn.get_output_info(*it); + if (info->connection != XCB_RANDR_CONNECTION_CONNECTED) + continue; + auto crtc = conn.get_crtc_info(info->crtc); + string name{info.name().begin(), info.name().end()}; + monitors.emplace_back(make_monitor(name, crtc->width, crtc->height, crtc->x, crtc->y)); + } catch (const xpp::randr::error::bad_crtc&) { + } catch (const xpp::randr::error::bad_output&) { + } } // use the same sort algo as lemonbar, to match the defaults - sort(monitors.begin(), monitors.end(), - [](monitor_t& m1, monitor_t& m2) -> bool { - if (m1->x < m2->x || m1->y + m1->h <= m2->y) - return 1; - if (m1->x > m2->x || m1->y + m1->h > m2->y) - return -1; - return 0; - }); + sort(monitors.begin(), monitors.end(), [](monitor_t& m1, monitor_t& m2) -> bool { + if (m1->x < m2->x || m1->y + m1->h <= m2->y) + return 1; + if (m1->x > m2->x || m1->y + m1->h > m2->y) + return -1; + return 0; + }); return monitors; }