Merge branch 'windows' of git.ardour.org:ardour/ardour into windows
[ardour.git] / libs / gtkmm2ext / gtkmm2ext / tearoff.h
index 8c3ac009a8045aa770aac650c71d6431cbe9a0bf..7f4358c15454fa334b6dc0980a30c05ddbd15ab8 100644 (file)
@@ -15,7 +15,6 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
 #ifndef __gtkmm2ext_tearoff_h__
@@ -26,6 +25,8 @@
 #include <gtkmm/box.h>
 #include <gtkmm/eventbox.h>
 
+class XMLNode;
+
 namespace Gtkmm2ext {
 
 class TearOff : public Gtk::HBox
@@ -34,11 +35,24 @@ class TearOff : public Gtk::HBox
        TearOff (Gtk::Widget& contents, bool allow_resize = false);
        virtual ~TearOff ();
 
+       void set_visible (bool yn, bool force = false);
+       void set_can_be_torn_off (bool);
+       bool can_be_torn_off () const { return _can_be_torn_off; }
+       bool visible () const { return _visible; }
+
        sigc::signal<void> Detach;
        sigc::signal<void> Attach;
+       sigc::signal<void> Visible;
+       sigc::signal<void> Hidden;
 
        Gtk::Window& tearoff_window() { return own_window; }
        bool torn_off() const;
+        void tear_it_off ();
+        void put_it_back ();
+        void hide_visible ();
+
+        void set_state (const XMLNode&);
+        void add_state (XMLNode&) const;
 
   private:
        Gtk::Widget&   contents;
@@ -51,6 +65,13 @@ class TearOff : public Gtk::HBox
        double         drag_x;
        double         drag_y;
        bool           dragging;
+       bool          _visible;
+       bool          _torn;
+       bool          _can_be_torn_off;
+        int            own_window_width;
+        int            own_window_height;
+        int            own_window_xpos;
+        int            own_window_ypos;
 
        gint tearoff_click (GdkEventButton*);
        gint close_click (GdkEventButton*);
@@ -59,6 +80,9 @@ class TearOff : public Gtk::HBox
        gint window_button_press (GdkEventButton*);
        gint window_button_release (GdkEventButton*);
        gint window_delete_event (GdkEventAny*);
+
+        void own_window_realized ();
+        bool own_window_configured (GdkEventConfigure*);
 };
 
 } /* namespace */