Commit Graph

5 Commits

Author SHA1 Message Date
Elf M. Sternberg e0e59f8d9d Keeping up-to-date, and preparing for some basic CLI stuff with
a simple CXXOpts handler that had an API I thought was somewhat
readable.
2022-03-31 15:38:18 -07:00
Elf M. Sternberg 03f0fc82b3 Added the rotation parameter to the display. C++ makes lookup tables
really effing annoying.
2022-02-25 07:47:38 -08:00
Elf M. Sternberg 2cd9b268a8 Innteresting. It seems that the `output` collection is much more
reliable as a source of truth about which monitors and screens are
actually in use.  Each one comes with its own collection of `crtc`,
but you can just skip the ones that return `null`, giving you a
reliable list of the "active and visible" screens that the user is
currently looking at.  Excellent!  This means that I'm one step closer
to having a viable solution!

I also discovered the [xcb_util](https://xcb.freedesktop.org/XcbUtil/)
library of helpful utilities has a function called
`xcb_aux_get_screen` for getting the root screen because everyone was
weirded out by that list traversal algorithm.

The source code to [xedgewarp](https://github.com/Airblader/xedgewarp)
was invaluable in revealing these secrets to me.

So far this little toy compiles down to only 35KB, and that includes
using `std::cout` and `std::vector`!  I wonder how big the Rust
version will be.  Yeah, yeah, I know, it cheats by having lots of
itself hidden in the kernel.

Next up: Actually knowing what the rotation status is.
2022-02-24 15:59:43 -08:00
Elf M. Sternberg bafa8bfd23 In this commit, we learned about X11 iterators, which iterate through
monstrous things allocated in memory that you just have to "know" are
of a certain structure.  In this case, we used `xcb_screen_next` to
say that we want the first (and all) screens attached to our current
X11 session.  And we used
`xcb_setup_roots_iterator(xcb_get_setup(connection))` to initialize
our iterator to our connection object in local memory.

Other things we've learned along the way: the file description that
represents our connection can be a TCP/IP socket or a Unix Domain
socket (a filesystem socket, named or not), and the only way to know
which is to find if there's a hostname before the colon ':' in the
display name of the server.  Not sure how that's going to work.

Also, found a really good reference: [Basic Graphics Tutorial with
XCB](https://www.x.org/releases/X11R7.6/doc/libxcb/tutorial/index.html).
It doesn't cover our specific use-case, but it's worth looking into.
2022-02-17 18:25:49 -08:00
Elf M. Sternberg 59a0c6acbf Initial commit: XRandR connects to the server via XCB.
I really need to start two cheatsheets for this: one for CMake,
and one for XCB.
2022-02-17 07:01:34 -08:00