Due to the infinite wisdom of the xorg developers, they broke virtual screen panning under X to add better , more exciting features. With panning, one can have a bigger screen, and your physical screen is a peephole into it that you can move about.
The xorg developers state that panning should really be the domain of the window manager, but few - if any - window managers actually implement this. So, panning - which used to work nicely, is now broken. Thanks guys, small screen users of X really appreciate what you've done. (to be fair, a lot of the changes that they made were necessary now that people are plugging all sorts of displays into X. But still....
Enough grumbling and finger pointing. In the eeePC's case, one really would like to have screen panning, as the display panel is only 800x400 pixels. It's hard to fit everyday dialogs in, as most (sane) designers boldly assume the minimum height of the screen is at least 480 pixels.The utility presented here is a quick'n'dirty hack to enable users to get panning back. Run the util, and suddenly your desktop will grow outside your screen area and you can pan around, just like old times.
The previous version (i810pan) used a few routines to locate the i810 GPU of the eeePC and manipulate/move the viewport of the larger virtual screen directly, depending on where you moved the mouse.
This is fine, but it turns out that Xorg then doesn't know precisely where the hardware cursor is, meaning that the pointer and what actually gets clicked upon winds up progressively further out the further away you move the viewport from the top left of the screen. Bummer.So, you turn off hardware cursors in your xorg config file to be able to pan your tiny screen around. But then (sigh) video acceleration doesn't work.
So, after an afternoon of head-scratching, I have removed the direct routines and added panning routines using SetViewPort, which communicates to X where you would like the viewport to be. As such, X knows what's going on and can keep the pointer working correctly.
It uses the get/setvidport routines in the XF86VidMode extension, and thus will probably run on anything that can run xvidtune. It is hardcoded for a panel size of 800x400, though one can change that easily in the source. Perhaps I'll change it so that you can specify your current screen size on the command line. Until then, enjoy!