VisibilityTracker needs to inherit from sigc::tracker so that it can be used without...
authorPaul Davis <paul@linuxaudiosystems.com>
Sun, 5 May 2013 02:01:32 +0000 (22:01 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Sun, 5 May 2013 02:01:32 +0000 (22:01 -0400)
libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h
libs/gtkmm2ext/visibility_tracker.cc

index f4ed62bb21bbc0965db56c44048d32ca39d66067..1256448efd89e7090bbdd56831ca68485b0547b5 100644 (file)
@@ -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*);
 };
index d5a020d370f5c7b153720f990e4aaf794c64b1db..7ba282f3f9f251e5ee008f50158cf23e55ee6b24 100644 (file)
 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));
 }