void MainWindow::displayViewActions() { ui->actionBack->setEnabled(ui->webView->canGoBack()); ui->backButton->setEnabled(ui->webView->canGoBack()); ui->actionForward->setEnabled(ui->webView->canGoForward()); ui->forwardButton->setEnabled(ui->webView->canGoForward()); ui->menuView->clear(); ui->menuView->addAction(ui->actionBack); ui->menuView->addAction(ui->actionForward); ui->menuView->addSeparator(); m_backMenu->clear(); m_forwardMenu->clear(); QWebHistory *history = ui->webView->page()->history(); for (const QWebHistoryItem &item: history->backItems(10)) m_backMenu->addAction(addHistoryAction(history, item)); if (history->count() > 0) addHistoryAction(history, history->currentItem())->setEnabled(false); for (const QWebHistoryItem &item: history->forwardItems(10)) m_forwardMenu->addAction(addHistoryAction(history, item)); displayTabs(); }
QString DumpRenderTree::dumpBackForwardList(QWebPage* page) { QWebHistory* history = page->history(); QString result; result.append(QLatin1String("\n============== Back Forward List ==============\n")); // FORMAT: // " (file test):fast/loader/resources/click-fragment-link.html **nav target**" // "curr-> (file test):fast/loader/resources/click-fragment-link.html#testfragment **nav target**" int maxItems = history->maximumItemCount(); foreach (const QWebHistoryItem item, history->backItems(maxItems)) { if (!item.isValid()) continue; result.append(dumpHistoryItem(item, 8, false)); } QWebHistoryItem item = history->currentItem(); if (item.isValid()) result.append(dumpHistoryItem(item, 8, true)); foreach (const QWebHistoryItem item, history->forwardItems(maxItems)) { if (!item.isValid()) continue; result.append(dumpHistoryItem(item, 8, false)); } result.append(QLatin1String("===============================================\n")); return result; }
void MainWindow::openPrevious(Qt::MouseButtons mouseButtons, Qt::KeyboardModifiers keyboardModifiers) { QWebHistory *history = currentTab()->view()->history(); QWebHistoryItem *item = 0; if (currentTab()->page()->isOnRekonqPage()) { item = new QWebHistoryItem(history->currentItem()); } else { if (history->canGoBack()) { item = new QWebHistoryItem(history->backItem()); } } if(!item) return; if (mouseButtons == Qt::MidButton || keyboardModifiers == Qt::ControlModifier) { Application::instance()->loadUrl(item->url(), Rekonq::NewTab); } else { history->goToItem(*item); } updateActions(); }
void WebKitBrowserExtension::saveState(QDataStream &stream) { // TODO: Save information such as form data from the current page. QWebHistory* history = (view() ? view()->history() : 0); const int historyIndex = (history ? history->currentItemIndex() : -1); const KUrl historyUrl = (history ? KUrl(history->currentItem().url()) : m_part->url()); stream << historyUrl << static_cast<qint32>(xOffset()) << static_cast<qint32>(yOffset()) << historyIndex << m_historyData; }
void KWebKitPart::slotRestoreFrameState(QWebFrame *frame) { QWebPage* page = (frame ? frame->page() : 0); QWebHistory* history = (page ? page->history() : 0); // No history item... if (!history || history->count() < 1) return; QWebHistoryItem currentHistoryItem (history->currentItem()); // Update the scroll position if needed. See comment in slotSaveFrameState above. if (frame->baseUrl().resolved(frame->url()) == currentHistoryItem.url()) { const QPoint currentPos (frame->scrollPosition()); const QPoint desiredPos (currentHistoryItem.userData().toPoint()); if (currentPos.isNull() && !desiredPos.isNull()) { frame->setScrollPosition(desiredPos); } } }
void WebKitBrowserExtension::restoreState(QDataStream &stream) { KUrl u; QByteArray historyData; qint32 xOfs = -1, yOfs = -1, historyItemIndex = -1; stream >> u >> xOfs >> yOfs >> historyItemIndex >> historyData; QWebHistory* history = (view() ? view()->page()->history() : 0); if (history) { bool success = false; if (history->count() == 0) { // Handle restoration: crash recovery, tab close undo, session restore if (!historyData.isEmpty()) { historyData = qUncompress(historyData); // uncompress the history data... QBuffer buffer (&historyData); if (buffer.open(QIODevice::ReadOnly)) { QDataStream stream (&buffer); view()->page()->setProperty("HistoryNavigationLocked", true); stream >> *history; QWebHistoryItem currentItem (history->currentItem()); if (currentItem.isValid()) { if (currentItem.userData().isNull() && (xOfs != -1 || yOfs != -1)) { const QPoint scrollPos (xOfs, yOfs); currentItem.setUserData(scrollPos); } // NOTE 1: The following Konqueror specific workaround is necessary // because Konqueror only preserves information for the last visited // page. However, we save the entire history content in saveState and // and hence need to elimiate all but the current item here. // NOTE 2: This condition only applies when Konqueror is restored from // abnormal termination ; a crash and/or a session restoration. if (QCoreApplication::applicationName() == QLatin1String("konqueror")) { history->clear(); } //kDebug() << "Restoring URL:" << currentItem.url(); m_part->setProperty("NoEmitOpenUrlNotification", true); history->goToItem(currentItem); } } } success = (history->count() > 0); } else { // Handle navigation: back and forward button navigation.
void MyTextBrowser::moveContent(int pos) { if(pos >= '\t' || pos < 0) { activateWindow(); char text[16]; text[0] = pos & 0x0ff; text[1] = '\0'; int modifiers = pos & 0x07fffff00; int key = pos & 0x0ff; if ((pos & 0x0ff) == '\t') key = Qt::Key_Tab; else if((pos & 0x0ff) == 0x0d) key = Qt::Key_Return; QKeyEvent pressEvent( QEvent::KeyPress, (Qt::Key) key, (Qt::KeyboardModifiers) modifiers, text); QKeyEvent releaseEvent(QEvent::KeyRelease, (Qt::Key) key, (Qt::KeyboardModifiers) modifiers, text); if((pos & 0x0ff) == '\t') QWidget::setFocus(Qt::TabFocusReason); keyPressEvent(&pressEvent); keyReleaseEvent(&releaseEvent); return; } #ifdef NO_WEBKIT char buf[MAX_PRINTF_LENGTH]; QString myurl; if(opt.arg_debug) printf("moveContent(%d)\n", pos); if (pos == 0 && homeIsSet) { myurl = home; setSource(QUrl(home)); } else if(pos == 1) { forward(); myurl = source().path(); } else if(pos == 2) { backward(); myurl = source().path(); } else if(pos == 3) { reload(); myurl = source().path(); } #else char buf[MAX_PRINTF_LENGTH]; QString myurl; QWebHistory *hist; if(opt.arg_debug) printf("moveContent(%d)\n", pos); if (pos == 0 && homeIsSet) { myurl = home; load(home); } else if(pos == 1) { hist = history(); if(hist != NULL && hist->canGoForward()) myurl = hist->forwardItem().url().toString(); forward(); } else if(pos == 2) { hist = history(); if(hist != NULL && hist->canGoBack()) myurl = hist->backItem().url().toString(); back(); } else if(pos == 3) { hist = history(); if(hist != NULL) myurl = hist->currentItem().url().toString(); reload(); } #endif if(myurl.isEmpty()) return; if(opt.arg_debug) printf("moveContent(%s)\n", (const char *) myurl.toUtf8()); if(myurl.length()+40 > MAX_PRINTF_LENGTH) return; sprintf(buf,"text(%d,\"%s\")\n", id,decode(myurl)); tcp_send(s,buf,strlen(buf)); }