diff --git a/hiro/gtk/desktop.cpp b/hiro/gtk/desktop.cpp index 8ff555f8..d89f00b5 100644 --- a/hiro/gtk/desktop.cpp +++ b/hiro/gtk/desktop.cpp @@ -26,16 +26,21 @@ auto pDesktop::workspace() -> Geometry { XlibAtom returnAtom; XlibAtom netWorkarea = XInternAtom(display, "_NET_WORKAREA", XlibTrue); - int result = XGetWindowProperty( - display, RootWindow(display, screen), netWorkarea, 0, 4, XlibFalse, - XInternAtom(display, "CARDINAL", XlibTrue), &returnAtom, &format, &items, &after, &data - ); - - XlibAtom cardinal = XInternAtom(display, "CARDINAL", XlibTrue); - if(result == Success && returnAtom == cardinal && format == 32 && items == 4) { - unsigned long* workarea = (unsigned long*)data; - XCloseDisplay(display); - return {(int)workarea[0], (int)workarea[1], (int)workarea[2], (int)workarea[3]}; + + // Under certain window managers the _NET_WORKAREA atom is not set initially + if (netWorkarea != XlibNone) { + + int result = XGetWindowProperty( + display, RootWindow(display, screen), netWorkarea, 0, 4, XlibFalse, + XInternAtom(display, "CARDINAL", XlibTrue), &returnAtom, &format, &items, &after, &data + ); + + XlibAtom cardinal = XInternAtom(display, "CARDINAL", XlibTrue); + if(result == Success && returnAtom == cardinal && format == 32 && items == 4) { + unsigned long* workarea = (unsigned long*)data; + XCloseDisplay(display); + return {(int)workarea[0], (int)workarea[1], (int)workarea[2], (int)workarea[3]}; + } } XCloseDisplay(display);