1d0825bca7fe65beaee391d30da42e937db621564Steve Block/*
2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
3d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2009 Girish Ramakrishnan <girish@forwardbias.in>
4d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006 George Staikos <staikos@kde.org>
5d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006 Dirk Mueller <mueller@kde.org>
6d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006 Zack Rusin <zack@kde.org>
7d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006 Simon Hausmann <hausmann@kde.org>
8d0825bca7fe65beaee391d30da42e937db621564Steve Block *
9d0825bca7fe65beaee391d30da42e937db621564Steve Block * All rights reserved.
10d0825bca7fe65beaee391d30da42e937db621564Steve Block *
11d0825bca7fe65beaee391d30da42e937db621564Steve Block * Redistribution and use in source and binary forms, with or without
12d0825bca7fe65beaee391d30da42e937db621564Steve Block * modification, are permitted provided that the following conditions
13d0825bca7fe65beaee391d30da42e937db621564Steve Block * are met:
14d0825bca7fe65beaee391d30da42e937db621564Steve Block * 1. Redistributions of source code must retain the above copyright
15d0825bca7fe65beaee391d30da42e937db621564Steve Block *    notice, this list of conditions and the following disclaimer.
16d0825bca7fe65beaee391d30da42e937db621564Steve Block * 2. Redistributions in binary form must reproduce the above copyright
17d0825bca7fe65beaee391d30da42e937db621564Steve Block *    notice, this list of conditions and the following disclaimer in the
18d0825bca7fe65beaee391d30da42e937db621564Steve Block *    documentation and/or other materials provided with the distribution.
19d0825bca7fe65beaee391d30da42e937db621564Steve Block *
20d0825bca7fe65beaee391d30da42e937db621564Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
21d0825bca7fe65beaee391d30da42e937db621564Steve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22d0825bca7fe65beaee391d30da42e937db621564Steve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23d0825bca7fe65beaee391d30da42e937db621564Steve Block * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
24d0825bca7fe65beaee391d30da42e937db621564Steve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25d0825bca7fe65beaee391d30da42e937db621564Steve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26d0825bca7fe65beaee391d30da42e937db621564Steve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27d0825bca7fe65beaee391d30da42e937db621564Steve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
28d0825bca7fe65beaee391d30da42e937db621564Steve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29d0825bca7fe65beaee391d30da42e937db621564Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30d0825bca7fe65beaee391d30da42e937db621564Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31d0825bca7fe65beaee391d30da42e937db621564Steve Block */
32d0825bca7fe65beaee391d30da42e937db621564Steve Block
33d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "mainwindow.h"
34d0825bca7fe65beaee391d30da42e937db621564Steve Block
35d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "locationedit.h"
36d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "utils.h"
37d0825bca7fe65beaee391d30da42e937db621564Steve Block
3868513a70bcd92384395513322f1b801e7bf9c729Steve BlockMainWindow::MainWindow()
39d0825bca7fe65beaee391d30da42e937db621564Steve Block    : m_page(new WebPage(this))
4068513a70bcd92384395513322f1b801e7bf9c729Steve Block    , m_toolBar(0)
41a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    , urlEdit(0)
42d0825bca7fe65beaee391d30da42e937db621564Steve Block{
43d0825bca7fe65beaee391d30da42e937db621564Steve Block    setAttribute(Qt::WA_DeleteOnClose);
44e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    if (qgetenv("QTTESTBROWSER_USE_ARGB_VISUALS").toInt() == 1)
45d0825bca7fe65beaee391d30da42e937db621564Steve Block        setAttribute(Qt::WA_TranslucentBackground);
46d0825bca7fe65beaee391d30da42e937db621564Steve Block
47d0825bca7fe65beaee391d30da42e937db621564Steve Block    buildUI();
48d0825bca7fe65beaee391d30da42e937db621564Steve Block}
49d0825bca7fe65beaee391d30da42e937db621564Steve Block
50d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid MainWindow::buildUI()
51d0825bca7fe65beaee391d30da42e937db621564Steve Block{
52a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if defined(Q_OS_SYMBIAN)
53a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    delete urlEdit;
54a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#endif
5568513a70bcd92384395513322f1b801e7bf9c729Steve Block    delete m_toolBar;
5668513a70bcd92384395513322f1b801e7bf9c729Steve Block
5768513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_toolBar = addToolBar("Navigation");
58f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#if defined(Q_OS_SYMBIAN)
5968513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_toolBar->setIconSize(QSize(16, 16));
608a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#endif
61ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    QAction* reloadAction = page()->action(QWebPage::Reload);
62ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    connect(reloadAction, SIGNAL(triggered()), this, SLOT(changeLocation()));
63ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
6468513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_toolBar->addAction(page()->action(QWebPage::Back));
6568513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_toolBar->addAction(page()->action(QWebPage::Forward));
6668513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_toolBar->addAction(reloadAction);
6768513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_toolBar->addAction(page()->action(QWebPage::Stop));
68d0825bca7fe65beaee391d30da42e937db621564Steve Block
6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef QT_NO_INPUTDIALOG
7068513a70bcd92384395513322f1b801e7bf9c729Steve Block    urlEdit = new LocationEdit(m_toolBar);
71d0825bca7fe65beaee391d30da42e937db621564Steve Block    urlEdit->setSizePolicy(QSizePolicy::Expanding, urlEdit->sizePolicy().verticalPolicy());
72d0825bca7fe65beaee391d30da42e937db621564Steve Block    connect(urlEdit, SIGNAL(returnPressed()), SLOT(changeLocation()));
7368513a70bcd92384395513322f1b801e7bf9c729Steve Block    QCompleter* completer = new QCompleter(m_toolBar);
74d0825bca7fe65beaee391d30da42e937db621564Steve Block    urlEdit->setCompleter(completer);
75d0825bca7fe65beaee391d30da42e937db621564Steve Block    completer->setModel(&urlModel);
76f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#if defined(Q_OS_SYMBIAN)
778a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    addToolBarBreak();
788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    addToolBar("Location")->addWidget(urlEdit);
798a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#else
8068513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_toolBar->addWidget(urlEdit);
818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#endif
82d0825bca7fe65beaee391d30da42e937db621564Steve Block
83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    connect(page()->mainFrame(), SIGNAL(urlChanged(QUrl)), this, SLOT(setAddressUrl(QUrl)));
84d0825bca7fe65beaee391d30da42e937db621564Steve Block    connect(page(), SIGNAL(loadProgress(int)), urlEdit, SLOT(setProgress(int)));
8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
872bde8e466a4451c7319e3a072d118917957d6554Steve Block    connect(page()->mainFrame(), SIGNAL(loadStarted()), this, SLOT(onLoadStarted()));
882bde8e466a4451c7319e3a072d118917957d6554Steve Block    connect(page()->mainFrame(), SIGNAL(iconChanged()), this, SLOT(onIconChanged()));
892bde8e466a4451c7319e3a072d118917957d6554Steve Block    connect(page()->mainFrame(), SIGNAL(titleChanged(QString)), this, SLOT(onTitleChanged(QString)));
90d0825bca7fe65beaee391d30da42e937db621564Steve Block    connect(page(), SIGNAL(windowCloseRequested()), this, SLOT(close()));
91d0825bca7fe65beaee391d30da42e937db621564Steve Block
9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef QT_NO_SHORTCUT
93d0825bca7fe65beaee391d30da42e937db621564Steve Block    // short-cuts
94d0825bca7fe65beaee391d30da42e937db621564Steve Block    page()->action(QWebPage::Back)->setShortcut(QKeySequence::Back);
95d0825bca7fe65beaee391d30da42e937db621564Steve Block    page()->action(QWebPage::Stop)->setShortcut(Qt::Key_Escape);
96d0825bca7fe65beaee391d30da42e937db621564Steve Block    page()->action(QWebPage::Forward)->setShortcut(QKeySequence::Forward);
97d0825bca7fe65beaee391d30da42e937db621564Steve Block    page()->action(QWebPage::Reload)->setShortcut(QKeySequence::Refresh);
9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef QT_NO_UNDOSTACK
99d0825bca7fe65beaee391d30da42e937db621564Steve Block    page()->action(QWebPage::Undo)->setShortcut(QKeySequence::Undo);
100d0825bca7fe65beaee391d30da42e937db621564Steve Block    page()->action(QWebPage::Redo)->setShortcut(QKeySequence::Redo);
10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
102d0825bca7fe65beaee391d30da42e937db621564Steve Block    page()->action(QWebPage::Cut)->setShortcut(QKeySequence::Cut);
103d0825bca7fe65beaee391d30da42e937db621564Steve Block    page()->action(QWebPage::Copy)->setShortcut(QKeySequence::Copy);
104d0825bca7fe65beaee391d30da42e937db621564Steve Block    page()->action(QWebPage::Paste)->setShortcut(QKeySequence::Paste);
105cad810f21b803229eb11403f9209855525a25d57Steve Block    page()->action(QWebPage::SelectAll)->setShortcut(QKeySequence::SelectAll);
106d0825bca7fe65beaee391d30da42e937db621564Steve Block
107d0825bca7fe65beaee391d30da42e937db621564Steve Block    page()->action(QWebPage::ToggleBold)->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_B));
108d0825bca7fe65beaee391d30da42e937db621564Steve Block    page()->action(QWebPage::ToggleItalic)->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_I));
109d0825bca7fe65beaee391d30da42e937db621564Steve Block    page()->action(QWebPage::ToggleUnderline)->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_U));
11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
111d0825bca7fe65beaee391d30da42e937db621564Steve Block}
112d0825bca7fe65beaee391d30da42e937db621564Steve Block
11368513a70bcd92384395513322f1b801e7bf9c729Steve Blockvoid MainWindow::setPage(WebPage* page)
11468513a70bcd92384395513322f1b801e7bf9c729Steve Block{
1154576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (page && m_page)
1164576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        page->setUserAgent(m_page->userAgentForUrl(QUrl()));
1174576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
11868513a70bcd92384395513322f1b801e7bf9c729Steve Block    delete m_page;
11968513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_page = page;
12068513a70bcd92384395513322f1b801e7bf9c729Steve Block
12168513a70bcd92384395513322f1b801e7bf9c729Steve Block    buildUI();
12268513a70bcd92384395513322f1b801e7bf9c729Steve Block}
12368513a70bcd92384395513322f1b801e7bf9c729Steve Block
12468513a70bcd92384395513322f1b801e7bf9c729Steve BlockWebPage* MainWindow::page() const
125d0825bca7fe65beaee391d30da42e937db621564Steve Block{
126d0825bca7fe65beaee391d30da42e937db621564Steve Block    return m_page;
127d0825bca7fe65beaee391d30da42e937db621564Steve Block}
128d0825bca7fe65beaee391d30da42e937db621564Steve Block
129dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid MainWindow::setAddressUrl(const QUrl& url)
130dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
1316b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    setAddressUrl(url.toString(QUrl::RemoveUserInfo));
132dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
133dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
134d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid MainWindow::setAddressUrl(const QString& url)
135d0825bca7fe65beaee391d30da42e937db621564Steve Block{
13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef QT_NO_INPUTDIALOG
1376b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    if (!url.contains("about:"))
1386b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner        urlEdit->setText(url);
13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
140d0825bca7fe65beaee391d30da42e937db621564Steve Block}
141d0825bca7fe65beaee391d30da42e937db621564Steve Block
142d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid MainWindow::addCompleterEntry(const QUrl& url)
143d0825bca7fe65beaee391d30da42e937db621564Steve Block{
144d0825bca7fe65beaee391d30da42e937db621564Steve Block    QUrl::FormattingOptions opts;
145d0825bca7fe65beaee391d30da42e937db621564Steve Block    opts |= QUrl::RemoveScheme;
146d0825bca7fe65beaee391d30da42e937db621564Steve Block    opts |= QUrl::RemoveUserInfo;
147d0825bca7fe65beaee391d30da42e937db621564Steve Block    opts |= QUrl::StripTrailingSlash;
148d0825bca7fe65beaee391d30da42e937db621564Steve Block    QString s = url.toString(opts);
149d0825bca7fe65beaee391d30da42e937db621564Steve Block    s = s.mid(2);
150d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (s.isEmpty())
151d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
152d0825bca7fe65beaee391d30da42e937db621564Steve Block
153d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (!urlList.contains(s))
154d0825bca7fe65beaee391d30da42e937db621564Steve Block        urlList += s;
155d0825bca7fe65beaee391d30da42e937db621564Steve Block    urlModel.setStringList(urlList);
156d0825bca7fe65beaee391d30da42e937db621564Steve Block}
157d0825bca7fe65beaee391d30da42e937db621564Steve Block
158d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid MainWindow::load(const QString& url)
159d0825bca7fe65beaee391d30da42e937db621564Steve Block{
160d0825bca7fe65beaee391d30da42e937db621564Steve Block    QUrl qurl = urlFromUserInput(url);
161d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (qurl.scheme().isEmpty())
162d0825bca7fe65beaee391d30da42e937db621564Steve Block        qurl = QUrl("http://" + url + "/");
163d0825bca7fe65beaee391d30da42e937db621564Steve Block    load(qurl);
164d0825bca7fe65beaee391d30da42e937db621564Steve Block}
165d0825bca7fe65beaee391d30da42e937db621564Steve Block
166d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid MainWindow::load(const QUrl& url)
167d0825bca7fe65beaee391d30da42e937db621564Steve Block{
168d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (!url.isValid())
169d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
170d0825bca7fe65beaee391d30da42e937db621564Steve Block
171d0825bca7fe65beaee391d30da42e937db621564Steve Block    setAddressUrl(url.toString());
172d0825bca7fe65beaee391d30da42e937db621564Steve Block    page()->mainFrame()->load(url);
173d0825bca7fe65beaee391d30da42e937db621564Steve Block}
174d0825bca7fe65beaee391d30da42e937db621564Steve Block
1752fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockQString MainWindow::addressUrl() const
1762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
1772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#ifndef QT_NO_INPUTDIALOG
1782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    return urlEdit->text();
1792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
1802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    return QString();
1812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
1822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
183d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid MainWindow::changeLocation()
184d0825bca7fe65beaee391d30da42e937db621564Steve Block{
18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef QT_NO_INPUTDIALOG
186d0825bca7fe65beaee391d30da42e937db621564Steve Block    QString string = urlEdit->text();
187ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    QUrl mainFrameURL = page()->mainFrame()->url();
188ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
189ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    if (mainFrameURL.isValid() && string == mainFrameURL.toString()) {
190ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        page()->triggerAction(QWebPage::Reload);
191ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        return;
192ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    }
193ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
194d0825bca7fe65beaee391d30da42e937db621564Steve Block    load(string);
19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
196d0825bca7fe65beaee391d30da42e937db621564Steve Block}
197d0825bca7fe65beaee391d30da42e937db621564Steve Block
198d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid MainWindow::openFile()
199d0825bca7fe65beaee391d30da42e937db621564Steve Block{
20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef QT_NO_FILEDIALOG
201d0825bca7fe65beaee391d30da42e937db621564Steve Block    static const QString filter("HTML Files (*.htm *.html);;Text Files (*.txt);;Image Files (*.gif *.jpg *.png);;All Files (*)");
202d0825bca7fe65beaee391d30da42e937db621564Steve Block
203d0825bca7fe65beaee391d30da42e937db621564Steve Block    QFileDialog fileDialog(this, tr("Open"), QString(), filter);
204d0825bca7fe65beaee391d30da42e937db621564Steve Block    fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
205d0825bca7fe65beaee391d30da42e937db621564Steve Block    fileDialog.setFileMode(QFileDialog::ExistingFile);
206d0825bca7fe65beaee391d30da42e937db621564Steve Block    fileDialog.setOptions(QFileDialog::ReadOnly);
207d0825bca7fe65beaee391d30da42e937db621564Steve Block
208d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (fileDialog.exec()) {
209d0825bca7fe65beaee391d30da42e937db621564Steve Block        QString selectedFile = fileDialog.selectedFiles()[0];
210d0825bca7fe65beaee391d30da42e937db621564Steve Block        if (!selectedFile.isEmpty())
211d0825bca7fe65beaee391d30da42e937db621564Steve Block            load(QUrl::fromLocalFile(selectedFile));
212d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
214d0825bca7fe65beaee391d30da42e937db621564Steve Block}
215d0825bca7fe65beaee391d30da42e937db621564Steve Block
216e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid MainWindow::openLocation()
217e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef QT_NO_INPUTDIALOG
219e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    urlEdit->selectAll();
220e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    urlEdit->setFocus();
22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
222e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
2232bde8e466a4451c7319e3a072d118917957d6554Steve Block
2242bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid MainWindow::onIconChanged()
2252bde8e466a4451c7319e3a072d118917957d6554Steve Block{
2262bde8e466a4451c7319e3a072d118917957d6554Steve Block#ifndef QT_NO_INPUTDIALOG
2272bde8e466a4451c7319e3a072d118917957d6554Steve Block    urlEdit->setPageIcon(page()->mainFrame()->icon());
2282bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
2292bde8e466a4451c7319e3a072d118917957d6554Steve Block}
2302bde8e466a4451c7319e3a072d118917957d6554Steve Block
2312bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid MainWindow::onLoadStarted()
2322bde8e466a4451c7319e3a072d118917957d6554Steve Block{
2332bde8e466a4451c7319e3a072d118917957d6554Steve Block#ifndef QT_NO_INPUTDIALOG
2342bde8e466a4451c7319e3a072d118917957d6554Steve Block    urlEdit->setPageIcon(QIcon());
2352bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
2362bde8e466a4451c7319e3a072d118917957d6554Steve Block}
2372bde8e466a4451c7319e3a072d118917957d6554Steve Block
2382bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid MainWindow::onTitleChanged(const QString& title)
2392bde8e466a4451c7319e3a072d118917957d6554Steve Block{
2402bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (title.isEmpty())
2412bde8e466a4451c7319e3a072d118917957d6554Steve Block        setWindowTitle(QCoreApplication::applicationName());
2422bde8e466a4451c7319e3a072d118917957d6554Steve Block    else
2432bde8e466a4451c7319e3a072d118917957d6554Steve Block        setWindowTitle(QString::fromLatin1("%1 - %2").arg(title).arg(QCoreApplication::applicationName()));
2442bde8e466a4451c7319e3a072d118917957d6554Steve Block}
245