Very cool, might I suggest you rename your `pop` function to `shift` (or if you like ugly names `popleft`)? Popping windows isn't really a thing, it made me double take on the code.
In my mental model `shift` would move the entire window, it would be one push + one pop.
That's the case for a LIFO queue, but not a FIFO queue. Both commonly use the push/pop nomenclature.
The terminology I've seen people use for FIFO instead is enqueue() and dequeue(). Or push_front(), pop_back(). Etc.
Maybe use popleft?