Calling dmDisplay(dmCmdPriorUrgent, dmQFull) is a good idea to control screen update manually.
However, if we do the acutal screen upate in refreshWindow(), how can we achieve preloading?
Added:
With calling dmDisplay() directly and poreloading, the speed of page-flip on FBReader is approaching DR800.

(I didn't touch refreshWindow(). All the preloading task is done in ScrollingAction::run().)
Added 2:
Since "display = gdk_x11_display_get_xdisplay(gdk_display_get_defau lt());" is always the same, I think it's better to make display a global variable and set it once in main(). Then it's not needed any more in doPaint().