+ // NB: it may *rarely* happen that the code above didn't find one
+ // of the cells, e.g. if wxHtmlWindow doesn't contain any
+ // visible cells.
+ if ( selcell && m_tmpSelFromCell )
+ {
+ if ( !m_selection )
+ {
+ // start selecting only if mouse movement was big enough
+ // (otherwise it was meant as mouse click, not selection):
+ const int PRECISION = 2;
+ wxPoint diff = m_tmpSelFromPos - wxPoint(x,y);
+ if (abs(diff.x) > PRECISION || abs(diff.y) > PRECISION)
+ {
+ m_selection = new wxHtmlSelection();
+ }
+ }
+ if ( m_selection )
+ {
+ if ( m_tmpSelFromCell->IsBefore(selcell) )
+ {
+ m_selection->Set(m_tmpSelFromPos, m_tmpSelFromCell,
+ wxPoint(x,y), selcell);
+ }
+ else
+ {
+ m_selection->Set(wxPoint(x,y), selcell,
+ m_tmpSelFromPos, m_tmpSelFromCell);
+ }
+ Refresh(); // FIXME - optimize!
+#ifdef __UNIX__
+ CopySelection(Primary);
+#endif
+ }
+ }
+ }
+
+ // handle cursor and status bar text changes:
+ if ( cell != m_tmpLastCell )
+ {
+ wxHtmlLinkInfo *lnk = cell ? cell->GetLink(x, y) : NULL;
+
+ if (lnk != m_tmpLastLink)
+ {
+ if (lnk == NULL)
+ {
+ SetCursor(*s_cur_arrow);
+ if (m_RelatedStatusBar != -1)
+ m_RelatedFrame->SetStatusText(wxEmptyString, m_RelatedStatusBar);
+ }
+ else
+ {
+ SetCursor(*s_cur_hand);
+ if (m_RelatedStatusBar != -1)
+ m_RelatedFrame->SetStatusText(lnk->GetHref(), m_RelatedStatusBar);
+ }
+ m_tmpLastLink = lnk;
+ }
+
+ m_tmpLastCell = cell;