+ connect(header_, SIGNAL(selection_changed()),
+ ruler_, SLOT(clear_selection()));
+ connect(ruler_, SIGNAL(selection_changed()),
+ header_, SLOT(clear_selection()));
+
+ connect(header_, SIGNAL(selection_changed()),
+ this, SIGNAL(selection_changed()));
+ connect(ruler_, SIGNAL(selection_changed()),
+ this, SIGNAL(selection_changed()));
+
+ connect(this, SIGNAL(hover_point_changed()),
+ this, SLOT(on_hover_point_changed()));
+
+ connect(&lazy_event_handler_, SIGNAL(timeout()),
+ this, SLOT(process_sticky_events()));
+ lazy_event_handler_.setSingleShot(true);
+
+ setViewport(viewport_);
+
+ viewport_->installEventFilter(this);
+ ruler_->installEventFilter(this);
+ header_->installEventFilter(this);
+
+ // Trigger the initial event manually. The default device has signals
+ // which were created before this object came into being
+ signals_changed();
+
+ // make sure the transparent widgets are on the top
+ ruler_->raise();
+ header_->raise();
+
+ // Update the zoom state
+ calculate_tick_spacing();
+}
+
+Session& View::session()
+{
+ return session_;
+}
+
+const Session& View::session() const
+{
+ return session_;
+}