mutable int _height; ///< height
Gtkmm2ext::VisibilityTracker* vistracker;
StateMask _state_mask;
+ sigc::connection delete_connection;
+ sigc::connection configure_connection;
void save_pos_and_size ();
void set_pos_and_size ();
void set_pos ();
virtual bool delete_event_handler (GdkEventAny *ev);
+ virtual bool configure_handler (GdkEventConfigure*);
virtual void setup ();
void toggle ();
WindowProxy::drop_window ()
{
if (_window) {
+ delete_connection.disconnect ();
+ configure_connection.disconnect ();
_window->hide ();
delete _window;
_window = 0;
assert (_window);
vistracker = new Gtkmm2ext::VisibilityTracker (*_window);
- _window->signal_delete_event().connect (sigc::mem_fun (*this, &WindowProxy::delete_event_handler));
+
+ delete_connection = _window->signal_delete_event().connect (sigc::mem_fun (*this, &WindowProxy::delete_event_handler));
+ configure_connection = _window->signal_configure_event().connect (sigc::mem_fun (*this, &WindowProxy::configure_handler), false);
set_pos_and_size ();
}
+bool
+WindowProxy::configure_handler (GdkEventConfigure* ev)
+{
+ /* stupidly, the geometry data in the event isn't the same as we get
+ from the window geometry APIs.so we have to actively interrogate
+ them to get the new information.
+
+ the difference is generally down to window manager framing.
+ */
+ save_pos_and_size ();
+ return false;
+}
+
+
bool
WindowProxy::visible() const
{