--- a/src/qtgui/reslist.cpp
+++ b/src/qtgui/reslist.cpp
@@ -562,12 +562,13 @@
if (vpos == verticalScrollBar()->value())
resultPageBack();
#else
- QWebFrame *frame = page()->mainFrame();
- int vpos = frame->scrollBarValue(Qt::Vertical);
- if (vpos != frame->scrollBarMinimum(Qt::Vertical))
+ if (scrollIsAtTop()) {
+ resultPageBack();
+ } else {
+ QWebFrame *frame = page()->mainFrame();
frame->scroll(0, -int(0.9*geometry().height()));
- else
- resultPageBack();
+ }
+ setupArrows();
#endif
}
@@ -581,21 +582,70 @@
if (vpos == verticalScrollBar()->value())
resultPageNext();
#else
+ if (scrollIsAtBottom()) {
+ resultPageNext();
+ } else {
+ QWebFrame *frame = page()->mainFrame();
+ frame->scroll(0, int(0.9*geometry().height()));
+ }
+ setupArrows();
+#endif
+}
+
+void ResList::setupArrows()
+{
+ emit prevPageAvailable(m_pager->hasPrev() || !scrollIsAtTop());
+ emit nextPageAvailable(m_pager->hasNext() || !scrollIsAtBottom());
+}
+
+bool ResList::scrollIsAtBottom()
+{
+#ifdef RESLIST_TEXTBROWSER
+ return false;
+#else
QWebFrame *frame = page()->mainFrame();
- int vpos = frame->scrollBarValue(Qt::Vertical);
- if (vpos != frame->scrollBarMaximum(Qt::Vertical))
- frame->scroll(0, int(0.9*geometry().height()));
- else
- resultPageNext();
-#endif
+ bool ret;
+ if (!frame || frame->scrollBarGeometry(Qt::Vertical).isEmpty()) {
+ ret = true;
+ } else {
+ int max = frame->scrollBarMaximum(Qt::Vertical);
+ int cur = frame->scrollBarValue(Qt::Vertical);
+ ret = (max != 0) && (cur == max);
+ LOGDEB2(("Scrollatbottom: cur %d max %d\n", cur, max));
+ }
+ LOGDEB2(("scrollIsAtBottom: returning %d\n", ret));
+ return ret;
+#endif
+}
+
+bool ResList::scrollIsAtTop()
+{
+#ifdef RESLIST_TEXTBROWSER
+ return false;
+#else
+ QWebFrame *frame = page()->mainFrame();
+ bool ret;
+ if (!frame || frame->scrollBarGeometry(Qt::Vertical).isEmpty()) {
+ ret = true;
+ } else {
+ int cur = frame->scrollBarValue(Qt::Vertical);
+ int min = frame->scrollBarMinimum(Qt::Vertical);
+ LOGDEB(("Scrollattop: cur %d min %d\n", cur, min));
+ ret = (cur == min);
+ }
+#endif
+ LOGDEB2(("scrollIsAtTop: returning %d\n", ret));
+ return ret;
}
// Show previous page of results. We just set the current number back
// 2 pages and show next page.
void ResList::resultPageBack()
{
- m_pager->resultPageBack();
- displayPage();
+ if (m_pager->hasPrev()) {
+ m_pager->resultPageBack();
+ displayPage();
+ }
}
// Go to the first page
@@ -607,6 +657,21 @@
displayPage();
}
+// Fill up result list window with next screen of hits
+void ResList::resultPageNext()
+{
+ if (m_pager->hasNext()) {
+ m_pager->resultPageNext();
+ displayPage();
+ }
+}
+
+void ResList::resultPageFor(int docnum)
+{
+ m_pager->resultPageFor(docnum);
+ displayPage();
+}
+
void ResList::append(const QString &text)
{
LOGDEB2(("QtGuiReslistPager::appendQString : %s\n",
@@ -618,19 +683,6 @@
#endif
}
-// Fill up result list window with next screen of hits
-void ResList::resultPageNext()
-{
- m_pager->resultPageNext();
- displayPage();
-}
-
-void ResList::resultPageFor(int docnum)
-{
- m_pager->resultPageFor(docnum);
- displayPage();
-}
-
void ResList::displayPage()
{
resetView();
@@ -641,10 +693,10 @@
setHtml(m_text);
#endif
- LOGDEB0(("ResList::resultPageNext: hasNext %d hasPrev %d\n",
- m_pager->hasPrev(), m_pager->hasNext()));
- emit prevPageAvailable(m_pager->hasPrev());
- emit nextPageAvailable(m_pager->hasNext());
+ LOGDEB0(("ResList::displayPg: hasNext %d atBot %d hasPrev %d at Top %d \n",
+ m_pager->hasPrev(), scrollIsAtBottom(),
+ m_pager->hasNext(), scrollIsAtTop()));
+ setupArrows();
// Possibly color paragraph of current preview if any
previewExposed(m_curPvDoc);