From 69a3310037e013c074b1d8643323017ac1c815f9 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 4 May 2013 22:01:32 -0400 Subject: [PATCH] VisibilityTracker needs to inherit from sigc::tracker so that it can be used without combination with other sigc::trackable parents; fix partially_visible() logic --- libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h | 6 ++++-- libs/gtkmm2ext/visibility_tracker.cc | 16 ++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h b/libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h index f4ed62bb21..1256448efd 100644 --- a/libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h +++ b/libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h @@ -28,7 +28,7 @@ namespace GTK { namespace Gtkmm2ext { -class VisibilityTracker { +class VisibilityTracker : public virtual sigc::trackable { public: VisibilityTracker (Gtk::Window&); virtual ~VisibilityTracker() {} @@ -39,8 +39,10 @@ class VisibilityTracker { bool not_visible() const; bool partially_visible() const; + Gtk::Window& window () const { return _window; } + private: - Gtk::Window& window; + Gtk::Window& _window; GdkVisibilityState _visibility; bool handle_visibility_notify_event (GdkEventVisibility*); }; diff --git a/libs/gtkmm2ext/visibility_tracker.cc b/libs/gtkmm2ext/visibility_tracker.cc index d5a020d370..7ba282f3f9 100644 --- a/libs/gtkmm2ext/visibility_tracker.cc +++ b/libs/gtkmm2ext/visibility_tracker.cc @@ -24,11 +24,11 @@ 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 @@ -42,26 +42,26 @@ void VisibilityTracker::cycle_visibility () { if (fully_visible ()) { - window.hide (); + _window.hide (); } else { - window.present (); + _window.present (); } } bool VisibilityTracker::fully_visible () const { - return window.is_mapped() && (_visibility == GDK_VISIBILITY_UNOBSCURED); + return _window.is_mapped() && (_visibility == GDK_VISIBILITY_UNOBSCURED); } bool VisibilityTracker::not_visible () const { - return !window.is_mapped() || (_visibility == GDK_VISIBILITY_FULLY_OBSCURED); + return !_window.is_mapped() || (_visibility == GDK_VISIBILITY_FULLY_OBSCURED); } bool VisibilityTracker::partially_visible () const { - return window.is_mapped() && (_visibility == GDK_VISIBILITY_PARTIAL); + return _window.is_mapped() && ((_visibility == GDK_VISIBILITY_PARTIAL) || (_visibility == GDK_VISIBILITY_UNOBSCURED)); } -- 2.30.2