I'm after a 'window manager' that can help me load a single X application on top of an X session that can sense the size of the screen and render the window maximised.
If you try something like
startx /opt/openoffice4/program/soffice
from a linux console without a desktop manager set, you get an openoffice (whatever app) window that is a bit smaller than the screen and offset. Googling around suggests that you have to rely on each application to set its window size.
startx /usr/bin/chromium --kiosk
will get you something close to what I'm after for all applications.
You can do this with i3 (or any tiling WM, I believe), since they automatically maximize any window if it's the only one on the workspace. Disable the panel/i3bar, and you would have what you seek. Start it with 'exec i3' in .xinitrc and running 'xinit' on login.
I have a work VM with a stripped out i3 that can't create new terminals other than a startup terminal with tmux (which calls shutdown now on EOF); and it can still do basic interaction with other new windows. This reduces problems with VirtualBox X integration and makes the VM simple and like a terminal with some X capabilities. I3 is really flexible for this kind of use case.
I'm not exactly sure what you're looking for, but you can use 'xdotool windowresize 0xabcd 1920 1080' to resize an arbitrary window, 'xdotool windowmove 0xabcd 0 0' to move a window, and you can use 'xwininfo -root -tree' to get a list of all windows and the window ID which you would pass to xdotool.
If you want to write it yourself in C using Xlib, you can use the 'XMoveResizeWindow' function. You could use 'XGetWindowAttributes' to get the size of the root window.
I'm just not sure if you need a window manager to handle the dialog windows. If you do, I would just use Blackbox.
The problem here is that there is no obvious process <-> window relation. Some windows have a PID property in their X11 Atoms list, but that's optional. After all, X11 clients can run remotely. And then there's the problem of clients started only by childs of the process that you want to run here.
As the other commenters have pointed out, the simplest and most robust thing might be to just resize all new windows to max and map them. Now you just have to make sure that only one window will be opened...
Thanks for both the recommendations but I was sort of hoping for half a dozen lines of C I could compile and run as a really thin layer. Research continues...
I used to use GOOMWWM [1], which is quite tiny and the code relatively easy to follow. Maybe you can remove the bits you don't need? Or use it for ideas to expand TinyWM to do what you need.