using namespace Gtkmm2ext;
VisibilityTracker::VisibilityTracker (Gtk::Window& win)
- : window (win)
+ : _window (win)
, _visibility (GdkVisibilityState (0))
{
- window.add_events (Gdk::VISIBILITY_NOTIFY_MASK);
- window.signal_visibility_notify_event().connect (sigc::mem_fun (*this, &VisibilityTracker::handle_visibility_notify_event));
+ _window.add_events (Gdk::VISIBILITY_NOTIFY_MASK);
+ _window.signal_visibility_notify_event().connect (sigc::mem_fun (*this, &VisibilityTracker::handle_visibility_notify_event));
}
bool
void
VisibilityTracker::cycle_visibility ()
{
- if (window.is_mapped() && (_visibility == GDK_VISIBILITY_UNOBSCURED)) {
- window.hide ();
+ if (fully_visible ()) {
+ _window.hide ();
} else {
- window.present ();
+ _window.present ();
}
}
+bool
+VisibilityTracker::fully_visible () const
+{
+ return _window.is_mapped() && (_visibility == GDK_VISIBILITY_UNOBSCURED);
+}
+
+bool
+VisibilityTracker::not_visible () const
+{
+ return !_window.is_mapped() || (_visibility == GDK_VISIBILITY_FULLY_OBSCURED);
+}
+
+bool
+VisibilityTracker::partially_visible () const
+{
+ return _window.is_mapped() && ((_visibility == GDK_VISIBILITY_PARTIAL) || (_visibility == GDK_VISIBILITY_UNOBSCURED));
+}