Refactor pixmap grabbing, add robustness
Do not go in an infinite loop when the root window cannot be captured
(bug 370303). Avoid crashing xcb_image_destroy by checking for NULL.
Split the getWindowPixmap into three logical methods depending on the
consumer: obtaining a pixmap from KWin, obtaining a pixmap from a single
window and obtaining a pixmap from a full screen. This enables some
optimizations, like obtaining a smaller area of the screen without
cropping. Additionally, it will make fixing HiDPI support easier.
Added robustness: if KWin somehow fails, now it will fallback to a
fullscreen capture instead of an null pixmap.
REVIEW: 129176
BUG: 370303
FIXED-IN: 16.12