+
+ delay(0.5);
+ }
+
+ free_snapshot(&last);
+ debugf("PAGING wait_for_stability done.\n");
+}
+
+static void raise_and_get_details(void) {
+ int r;
+ int evbase,errbase,majver,minver;
+ unsigned bd,depth;
+ Window dummy;
+
+ debugf("PAGING raise_and_get_details\n");
+
+ r= XTestQueryExtension(disp, &evbase,&errbase,&majver,&minver);
+ eassert(r==True);
+
+ r= XRaiseWindow(disp, id); eassert(r);
+
+ r= XGetWindowAttributes(disp, id, &attr); eassert(r);
+ r= XGetGeometry(disp,id, &attr.root,
+ &wxpos,&wypos, &wwidth,&wheight,
+ &bd,&depth);
+ eassert(r);
+
+ r= XTranslateCoordinates(disp, id,attr.root, 160,160, &wxpos,&wypos,
+ &dummy);
+ eassert(r);
+}
+
+static void set_focus(void) {
+ int screen= XScreenNumberOfScreen(attr.screen);
+
+ debugf("PAGING set_focus\n");
+
+ XTestFakeMotionEvent(disp,screen, wxpos,wypos, 0);
+
+ XTestFakeButtonEvent(disp,1,1, 50);
+ XTestFakeButtonEvent(disp,1,0, 50);
+
+ sync_after_input();
+ debugf("PAGING raise_and_set_focus done.\n");
+}
+
+#define SAMPLEMASK 0xfful
+
+typedef struct {
+ int lshift, rshift;
+} ShMask;
+
+static void compute_shift_mask(ShMask *sm, unsigned long ximage_mask) {
+ sm->lshift= 0;
+ sm->rshift= 0;
+
+ for (;;) {
+ if (ximage_mask <= (SAMPLEMASK>>1)) {
+ sm->lshift++; ximage_mask <<= 1;
+ } else if (ximage_mask > SAMPLEMASK) {
+ sm->rshift++; ximage_mask >>= 1;
+ } else {
+ break;
+ }
+ assert(!(sm->lshift && sm->rshift));