In GTK (or pygtk or gtkmm...)
How can I detect that an application window has been manually resized by the user, as is typically done by dragging the window's edge?
I need to find a way to differentiate manual resizes from resizes that originate from gtk, such as changes in window content.
Have you tried connecting to the GDK_CONFIGURE event?
Check out this example under the "Moving window" section. The example shows a callback doing something when the window is moved, but the configure event is a catch-all for moving, resizing and stack order events.
I managed to pull this off by watching for size_allocate
and size_request
signals on the GtkWindow
. If size_request
ever got smaller, I called resize(1,1)
. If size_allocate
was ever bigger than expected, I turned the system off.
One thing I made sure to handle was size_request
returning big, then small, and having size_allocate
be big and then small. I don't know if this is possible, but I fixed it by making sure to only decrease the expected values for size_allocate
when I got a smaller size_allocate
, not when I got a smaller size_request
.
Make sure that your size_request
handler comes after the base class' handler so that you get the right values. I did this by overriding the method and then calling the base class method first.
I've tried this in both 1 and 2 dimensions and it seems to work either way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With