Sophie

Sophie

distrib > Mageia > 6 > x86_64 > media > core-updates > by-pkgid > 09bb53e5648f357bb3d35769c00e1902 > files > 352

qtwebengine5-doc-5.9.4-1.mga6.noarch.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>tabwidget.cpp Example File | Qt WebEngine 5.9</title>
  <link rel="stylesheet" type="text/css" href="style/offline-simple.css" />
  <script type="text/javascript">
    document.getElementsByTagName("link").item(0).setAttribute("href", "style/offline.css");
    // loading style sheet breaks anchors that were jumped to before
    // so force jumping to anchor again
    setTimeout(function() {
        var anchor = location.hash;
        // need to jump to different anchor first (e.g. none)
        location.hash = "#";
        setTimeout(function() {
            location.hash = anchor;
        }, 0);
    }, 0);
  </script>
</head>
<body>
<div class="header" id="qtdocheader">
  <div class="main">
    <div class="main-rounded">
      <div class="navigationbar">
        <table><tr>
<td >Qt 5.9</td><td ><a href="qtwebengine-index.html">Qt WebEngine</a></td><td ><a href="qtwebengine-webenginewidgets-demobrowser-example.html">WebEngine Demo Browser Example</a></td><td >tabwidget.cpp Example File</td></tr></table><table class="buildversion"><tr>
<td id="buildversion" width="100%" align="right">Qt 5.9.4 Reference Documentation</td>
        </tr></table>
      </div>
    </div>
<div class="content">
<div class="line">
<div class="content mainContent">
<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">tabwidget.cpp Example File</h1>
<span class="subtitle">webenginewidgets/demobrowser/tabwidget.cpp</span>
<!-- $$$webenginewidgets/demobrowser/tabwidget.cpp-description -->
<div class="descr"> <a name="details"></a>
<pre class="cpp">

  <span class="comment">/****************************************************************************
  **
  ** Copyright (C) 2016 The Qt Company Ltd.
  ** Contact: https://www.qt.io/licensing/
  **
  ** This file is part of the examples of the Qt Toolkit.
  **
  ** $QT_BEGIN_LICENSE:BSD$
  ** Commercial License Usage
  ** Licensees holding valid commercial Qt licenses may use this file in
  ** accordance with the commercial license agreement provided with the
  ** Software or, alternatively, in accordance with the terms contained in
  ** a written agreement between you and The Qt Company. For licensing terms
  ** and conditions see https://www.qt.io/terms-conditions. For further
  ** information use the contact form at https://www.qt.io/contact-us.
  **
  ** BSD License Usage
  ** Alternatively, you may use this file under the terms of the BSD license
  ** as follows:
  **
  ** &quot;Redistribution and use in source and binary forms, with or without
  ** modification, are permitted provided that the following conditions are
  ** met:
  **   * Redistributions of source code must retain the above copyright
  **     notice, this list of conditions and the following disclaimer.
  **   * Redistributions in binary form must reproduce the above copyright
  **     notice, this list of conditions and the following disclaimer in
  **     the documentation and/or other materials provided with the
  **     distribution.
  **   * Neither the name of The Qt Company Ltd nor the names of its
  **     contributors may be used to endorse or promote products derived
  **     from this software without specific prior written permission.
  **
  **
  ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  ** &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&quot;
  **
  ** $QT_END_LICENSE$
  **
  ****************************************************************************/</span>

  <span class="preprocessor">#include &quot;tabwidget.h&quot;</span>

  <span class="preprocessor">#include &quot;browserapplication.h&quot;</span>
  <span class="preprocessor">#include &quot;browsermainwindow.h&quot;</span>
  <span class="preprocessor">#include &quot;downloadmanager.h&quot;</span>
  <span class="preprocessor">#include &quot;fullscreennotification.h&quot;</span>
  <span class="preprocessor">#include &quot;history.h&quot;</span>
  <span class="preprocessor">#include &quot;savepagedialog.h&quot;</span>
  <span class="preprocessor">#include &quot;urllineedit.h&quot;</span>
  <span class="preprocessor">#include &quot;webview.h&quot;</span>

  <span class="preprocessor">#include &lt;QWebEngineDownloadItem&gt;</span>
  <span class="preprocessor">#include &lt;QWebEngineProfile&gt;</span>
  <span class="preprocessor">#include &lt;QWebEngineFullScreenRequest&gt;</span>
  <span class="preprocessor">#include &lt;QtCore/QMimeData&gt;</span>
  <span class="preprocessor">#include &lt;QtGui/QClipboard&gt;</span>
  <span class="preprocessor">#include &lt;QtWidgets/QCompleter&gt;</span>
  <span class="preprocessor">#include &lt;QtWidgets/QListView&gt;</span>
  <span class="preprocessor">#include &lt;QtWidgets/QMenu&gt;</span>
  <span class="preprocessor">#include &lt;QtWidgets/QMessageBox&gt;</span>
  <span class="preprocessor">#include &lt;QtGui/QDrag&gt;</span>
  <span class="preprocessor">#include &lt;QtGui/QMouseEvent&gt;</span>
  <span class="preprocessor">#include &lt;QtWidgets/QStackedWidget&gt;</span>
  <span class="preprocessor">#include &lt;QtWidgets/QStyle&gt;</span>
  <span class="preprocessor">#include &lt;QtWidgets/QToolButton&gt;</span>

  <span class="preprocessor">#include &lt;QtCore/QDebug&gt;</span>

  TabBar<span class="operator">::</span>TabBar(<span class="type">QWidget</span> <span class="operator">*</span>parent)
      : <span class="type">QTabBar</span>(parent)
  {
      setContextMenuPolicy(<span class="type">Qt</span><span class="operator">::</span>CustomContextMenu);
      setAcceptDrops(<span class="keyword">true</span>);
      connect(<span class="keyword">this</span><span class="operator">,</span> SIGNAL(customContextMenuRequested(<span class="type">QPoint</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(contextMenuRequested(<span class="type">QPoint</span>)));

      <span class="type">QString</span> ctrl <span class="operator">=</span> QLatin1String(<span class="string">&quot;Ctrl+%1&quot;</span>);
      <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">1</span>; i <span class="operator">&lt;</span> <span class="number">10</span>; <span class="operator">+</span><span class="operator">+</span>i) {
          <span class="type">QShortcut</span> <span class="operator">*</span>shortCut <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QShortcut</span>(ctrl<span class="operator">.</span>arg(i)<span class="operator">,</span> <span class="keyword">this</span>);
          m_tabShortcuts<span class="operator">.</span>append(shortCut);
          connect(shortCut<span class="operator">,</span> SIGNAL(activated())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(selectTabAction()));
      }
      setTabsClosable(<span class="keyword">true</span>);
      connect(<span class="keyword">this</span><span class="operator">,</span> SIGNAL(tabCloseRequested(<span class="type">int</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SIGNAL(closeTab(<span class="type">int</span>)));
      setSelectionBehaviorOnRemove(<span class="type">QTabBar</span><span class="operator">::</span>SelectPreviousTab);
      setMovable(<span class="keyword">true</span>);
  }

  <span class="type">void</span> TabBar<span class="operator">::</span>selectTabAction()
  {
      <span class="keyword">if</span> (<span class="type">QShortcut</span> <span class="operator">*</span>shortCut <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span><span class="type">QShortcut</span><span class="operator">*</span><span class="operator">&gt;</span>(sender())) {
          <span class="type">int</span> index <span class="operator">=</span> m_tabShortcuts<span class="operator">.</span>indexOf(shortCut);
          setCurrentIndex(index);
      }
  }

  <span class="type">void</span> TabBar<span class="operator">::</span>contextMenuRequested(<span class="keyword">const</span> <span class="type">QPoint</span> <span class="operator">&amp;</span>position)
  {
      <span class="type">QMenu</span> menu;
      menu<span class="operator">.</span>addAction(tr(<span class="string">&quot;New &amp;Tab&quot;</span>)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(newTab())<span class="operator">,</span> <span class="type">QKeySequence</span><span class="operator">::</span>AddTab);
      <span class="type">int</span> index <span class="operator">=</span> tabAt(position);
      <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">!</span><span class="operator">=</span> index) {
          <span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> menu<span class="operator">.</span>addAction(tr(<span class="string">&quot;Clone Tab&quot;</span>)<span class="operator">,</span>
                  <span class="keyword">this</span><span class="operator">,</span> SLOT(cloneTab()));
          action<span class="operator">-</span><span class="operator">&gt;</span>setData(index);

          menu<span class="operator">.</span>addSeparator();

          action <span class="operator">=</span> menu<span class="operator">.</span>addAction(tr(<span class="string">&quot;&amp;Close Tab&quot;</span>)<span class="operator">,</span>
                  <span class="keyword">this</span><span class="operator">,</span> SLOT(closeTab())<span class="operator">,</span> <span class="type">QKeySequence</span><span class="operator">::</span>Close);
          action<span class="operator">-</span><span class="operator">&gt;</span>setData(index);

          action <span class="operator">=</span> menu<span class="operator">.</span>addAction(tr(<span class="string">&quot;Close &amp;Other Tabs&quot;</span>)<span class="operator">,</span>
                  <span class="keyword">this</span><span class="operator">,</span> SLOT(closeOtherTabs()));
          action<span class="operator">-</span><span class="operator">&gt;</span>setData(index);

          menu<span class="operator">.</span>addSeparator();

          action <span class="operator">=</span> menu<span class="operator">.</span>addAction(tr(<span class="string">&quot;Reload Tab&quot;</span>)<span class="operator">,</span>
                  <span class="keyword">this</span><span class="operator">,</span> SLOT(reloadTab())<span class="operator">,</span> <span class="type">QKeySequence</span><span class="operator">::</span>Refresh);
          action<span class="operator">-</span><span class="operator">&gt;</span>setData(index);

          <span class="comment">// Audio mute / unmute.</span>
          action <span class="operator">=</span> menu<span class="operator">.</span>addAction(tr(<span class="string">&quot;Mute tab&quot;</span>)<span class="operator">,</span>
                  <span class="keyword">this</span><span class="operator">,</span> SLOT(muteTab()));
          action<span class="operator">-</span><span class="operator">&gt;</span>setData(index);

          action <span class="operator">=</span> menu<span class="operator">.</span>addAction(tr(<span class="string">&quot;Unmute tab&quot;</span>)<span class="operator">,</span>
                  <span class="keyword">this</span><span class="operator">,</span> SLOT(unmuteTab()));
          action<span class="operator">-</span><span class="operator">&gt;</span>setData(index);
      } <span class="keyword">else</span> {
          menu<span class="operator">.</span>addSeparator();
      }
      menu<span class="operator">.</span>addAction(tr(<span class="string">&quot;Reload All Tabs&quot;</span>)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(reloadAllTabs()));
      menu<span class="operator">.</span>exec(<span class="type">QCursor</span><span class="operator">::</span>pos());
  }

  <span class="type">void</span> TabBar<span class="operator">::</span>cloneTab()
  {
      <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">&gt;</span>(sender())) {
          <span class="type">int</span> index <span class="operator">=</span> action<span class="operator">-</span><span class="operator">&gt;</span>data()<span class="operator">.</span>toInt();
          <span class="keyword">emit</span> cloneTab(index);
      }
  }

  <span class="type">void</span> TabBar<span class="operator">::</span>closeTab()
  {
      <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">&gt;</span>(sender())) {
          <span class="type">int</span> index <span class="operator">=</span> action<span class="operator">-</span><span class="operator">&gt;</span>data()<span class="operator">.</span>toInt();
          <span class="keyword">emit</span> closeTab(index);
      }
  }

  <span class="type">void</span> TabBar<span class="operator">::</span>closeOtherTabs()
  {
      <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">&gt;</span>(sender())) {
          <span class="type">int</span> index <span class="operator">=</span> action<span class="operator">-</span><span class="operator">&gt;</span>data()<span class="operator">.</span>toInt();
          <span class="keyword">emit</span> closeOtherTabs(index);
      }
  }

  <span class="type">void</span> TabBar<span class="operator">::</span>mousePressEvent(<span class="type">QMouseEvent</span> <span class="operator">*</span>event)
  {
      <span class="keyword">if</span> (event<span class="operator">-</span><span class="operator">&gt;</span>button() <span class="operator">=</span><span class="operator">=</span> <span class="type">Qt</span><span class="operator">::</span>LeftButton)
          m_dragStartPos <span class="operator">=</span> event<span class="operator">-</span><span class="operator">&gt;</span>pos();

      <span class="type">QTabBar</span><span class="operator">::</span>mousePressEvent(event);

      <span class="comment">// Middle click on tab should close it.</span>
      <span class="keyword">if</span> (event<span class="operator">-</span><span class="operator">&gt;</span>button() <span class="operator">=</span><span class="operator">=</span> <span class="type">Qt</span><span class="operator">::</span>MiddleButton) {
          <span class="keyword">const</span> <span class="type">QPoint</span> pos <span class="operator">=</span> event<span class="operator">-</span><span class="operator">&gt;</span>pos();
          <span class="type">int</span> index <span class="operator">=</span> tabAt(pos);
          <span class="keyword">if</span> (index <span class="operator">!</span><span class="operator">=</span> <span class="operator">-</span><span class="number">1</span>) {
              <span class="keyword">emit</span> closeTab(index);
          }
      }
  }

  <span class="type">void</span> TabBar<span class="operator">::</span>mouseMoveEvent(<span class="type">QMouseEvent</span> <span class="operator">*</span>event)
  {
      <span class="keyword">if</span> (event<span class="operator">-</span><span class="operator">&gt;</span>buttons() <span class="operator">=</span><span class="operator">=</span> <span class="type">Qt</span><span class="operator">::</span>LeftButton) {
          <span class="type">int</span> diffX <span class="operator">=</span> event<span class="operator">-</span><span class="operator">&gt;</span>pos()<span class="operator">.</span>x() <span class="operator">-</span> m_dragStartPos<span class="operator">.</span>x();
          <span class="type">int</span> diffY <span class="operator">=</span> event<span class="operator">-</span><span class="operator">&gt;</span>pos()<span class="operator">.</span>y() <span class="operator">-</span> m_dragStartPos<span class="operator">.</span>y();
          <span class="keyword">if</span> ((event<span class="operator">-</span><span class="operator">&gt;</span>pos() <span class="operator">-</span> m_dragStartPos)<span class="operator">.</span>manhattanLength() <span class="operator">&gt;</span> <span class="type">QApplication</span><span class="operator">::</span>startDragDistance()
              <span class="operator">&amp;</span><span class="operator">&amp;</span> diffX <span class="operator">&lt;</span> <span class="number">3</span> <span class="operator">&amp;</span><span class="operator">&amp;</span> diffX <span class="operator">&gt;</span> <span class="operator">-</span><span class="number">3</span>
              <span class="operator">&amp;</span><span class="operator">&amp;</span> diffY <span class="operator">&lt;</span> <span class="operator">-</span><span class="number">10</span>) {
              <span class="type">QDrag</span> <span class="operator">*</span>drag <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QDrag</span>(<span class="keyword">this</span>);
              <span class="type">QMimeData</span> <span class="operator">*</span>mimeData <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QMimeData</span>;
              <span class="type">QList</span><span class="operator">&lt;</span><span class="type">QUrl</span><span class="operator">&gt;</span> urls;
              <span class="type">int</span> index <span class="operator">=</span> tabAt(event<span class="operator">-</span><span class="operator">&gt;</span>pos());
              <span class="type">QUrl</span> url <span class="operator">=</span> tabData(index)<span class="operator">.</span>toUrl();
              urls<span class="operator">.</span>append(url);
              mimeData<span class="operator">-</span><span class="operator">&gt;</span>setUrls(urls);
              mimeData<span class="operator">-</span><span class="operator">&gt;</span>setText(tabText(index));
              mimeData<span class="operator">-</span><span class="operator">&gt;</span>setData(QLatin1String(<span class="string">&quot;action&quot;</span>)<span class="operator">,</span> <span class="string">&quot;tab-reordering&quot;</span>);
              drag<span class="operator">-</span><span class="operator">&gt;</span>setMimeData(mimeData);
              drag<span class="operator">-</span><span class="operator">&gt;</span>exec();
          }
      }
      <span class="type">QTabBar</span><span class="operator">::</span>mouseMoveEvent(event);
  }

  <span class="comment">// When index is -1 index chooses the current tab</span>
  <span class="type">void</span> TabWidget<span class="operator">::</span>reloadTab(<span class="type">int</span> index)
  {
      <span class="keyword">if</span> (index <span class="operator">&lt;</span> <span class="number">0</span>)
          index <span class="operator">=</span> currentIndex();
      <span class="keyword">if</span> (index <span class="operator">&lt;</span> <span class="number">0</span> <span class="operator">|</span><span class="operator">|</span> index <span class="operator">&gt;</span><span class="operator">=</span> count())
          <span class="keyword">return</span>;

      <span class="type">QWidget</span> <span class="operator">*</span>widget <span class="operator">=</span> <span class="keyword">this</span><span class="operator">-</span><span class="operator">&gt;</span>widget(index);
      <span class="keyword">if</span> (WebView <span class="operator">*</span>tab <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebView<span class="operator">*</span><span class="operator">&gt;</span>(widget))
          tab<span class="operator">-</span><span class="operator">&gt;</span>reload();
  }

  <span class="type">void</span> TabBar<span class="operator">::</span>reloadTab()
  {
      <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">&gt;</span>(sender())) {
          <span class="type">int</span> index <span class="operator">=</span> action<span class="operator">-</span><span class="operator">&gt;</span>data()<span class="operator">.</span>toInt();
          <span class="keyword">emit</span> reloadTab(index);
      }
  }

  <span class="type">void</span> TabBar<span class="operator">::</span>muteTab()
  {
      <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">&gt;</span>(sender())) {
          <span class="type">int</span> index <span class="operator">=</span> action<span class="operator">-</span><span class="operator">&gt;</span>data()<span class="operator">.</span>toInt();
          <span class="keyword">emit</span> muteTab(index<span class="operator">,</span> <span class="keyword">true</span>);
      }
  }

  <span class="type">void</span> TabBar<span class="operator">::</span>unmuteTab()
  {
      <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">&gt;</span>(sender())) {
          <span class="type">int</span> index <span class="operator">=</span> action<span class="operator">-</span><span class="operator">&gt;</span>data()<span class="operator">.</span>toInt();
          <span class="keyword">emit</span> muteTab(index<span class="operator">,</span> <span class="keyword">false</span>);
      }
  }

  TabWidget<span class="operator">::</span>TabWidget(<span class="type">QWidget</span> <span class="operator">*</span>parent)
      : <span class="type">QTabWidget</span>(parent)
      <span class="operator">,</span> m_recentlyClosedTabsAction(<span class="number">0</span>)
      <span class="operator">,</span> m_newTabAction(<span class="number">0</span>)
      <span class="operator">,</span> m_closeTabAction(<span class="number">0</span>)
      <span class="operator">,</span> m_nextTabAction(<span class="number">0</span>)
      <span class="operator">,</span> m_previousTabAction(<span class="number">0</span>)
      <span class="operator">,</span> m_recentlyClosedTabsMenu(<span class="number">0</span>)
      <span class="operator">,</span> m_lineEditCompleter(<span class="number">0</span>)
      <span class="operator">,</span> m_lineEdits(<span class="number">0</span>)
      <span class="operator">,</span> m_tabBar(<span class="keyword">new</span> TabBar(<span class="keyword">this</span>))
      <span class="operator">,</span> m_profile(<span class="type"><a href="qwebengineprofile.html">QWebEngineProfile</a></span><span class="operator">::</span>defaultProfile())
      <span class="operator">,</span> m_fullScreenView(<span class="number">0</span>)
      <span class="operator">,</span> m_fullScreenNotification(<span class="number">0</span>)
  {
      setElideMode(<span class="type">Qt</span><span class="operator">::</span>ElideRight);

      connect(m_tabBar<span class="operator">,</span> SIGNAL(newTab())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(newTab()));
      connect(m_tabBar<span class="operator">,</span> SIGNAL(closeTab(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(requestCloseTab(<span class="type">int</span>)));
      connect(m_tabBar<span class="operator">,</span> SIGNAL(cloneTab(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(cloneTab(<span class="type">int</span>)));
      connect(m_tabBar<span class="operator">,</span> SIGNAL(closeOtherTabs(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(closeOtherTabs(<span class="type">int</span>)));
      connect(m_tabBar<span class="operator">,</span> SIGNAL(reloadTab(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(reloadTab(<span class="type">int</span>)));
      connect(m_tabBar<span class="operator">,</span> SIGNAL(reloadAllTabs())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(reloadAllTabs()));
      connect(m_tabBar<span class="operator">,</span> SIGNAL(tabMoved(<span class="type">int</span><span class="operator">,</span><span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(moveTab(<span class="type">int</span><span class="operator">,</span><span class="type">int</span>)));
      connect(m_tabBar<span class="operator">,</span> SIGNAL(tabBarDoubleClicked(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(handleTabBarDoubleClicked(<span class="type">int</span>)));
      connect(m_tabBar<span class="operator">,</span> SIGNAL(muteTab(<span class="type">int</span><span class="operator">,</span>bool))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(setAudioMutedForTab(<span class="type">int</span><span class="operator">,</span>bool)));
      setTabBar(m_tabBar);
      setDocumentMode(<span class="keyword">true</span>);

      <span class="comment">// Actions</span>
      m_newTabAction <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(<span class="type">QIcon</span>(QLatin1String(<span class="string">&quot;:addtab.png&quot;</span>))<span class="operator">,</span> tr(<span class="string">&quot;New &amp;Tab&quot;</span>)<span class="operator">,</span> <span class="keyword">this</span>);
      m_newTabAction<span class="operator">-</span><span class="operator">&gt;</span>setShortcuts(<span class="type">QKeySequence</span><span class="operator">::</span>AddTab);
      m_newTabAction<span class="operator">-</span><span class="operator">&gt;</span>setIconVisibleInMenu(<span class="keyword">false</span>);
      connect(m_newTabAction<span class="operator">,</span> SIGNAL(triggered())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(newTab()));

      m_closeTabAction <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(<span class="type">QIcon</span>(QLatin1String(<span class="string">&quot;:closetab.png&quot;</span>))<span class="operator">,</span> tr(<span class="string">&quot;&amp;Close Tab&quot;</span>)<span class="operator">,</span> <span class="keyword">this</span>);
      m_closeTabAction<span class="operator">-</span><span class="operator">&gt;</span>setShortcuts(<span class="type">QKeySequence</span><span class="operator">::</span>Close);
      m_closeTabAction<span class="operator">-</span><span class="operator">&gt;</span>setIconVisibleInMenu(<span class="keyword">false</span>);
      connect(m_closeTabAction<span class="operator">,</span> SIGNAL(triggered())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(requestCloseTab()));

      m_nextTabAction <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(tr(<span class="string">&quot;Show Next Tab&quot;</span>)<span class="operator">,</span> <span class="keyword">this</span>);
      <span class="type">QList</span><span class="operator">&lt;</span><span class="type">QKeySequence</span><span class="operator">&gt;</span> shortcuts;
      shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_BraceRight));
      shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_PageDown));
      shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_BracketRight));
      shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_Less));
      m_nextTabAction<span class="operator">-</span><span class="operator">&gt;</span>setShortcuts(shortcuts);
      connect(m_nextTabAction<span class="operator">,</span> SIGNAL(triggered())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(nextTab()));

      m_previousTabAction <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(tr(<span class="string">&quot;Show Previous Tab&quot;</span>)<span class="operator">,</span> <span class="keyword">this</span>);
      shortcuts<span class="operator">.</span>clear();
      shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_BraceLeft));
      shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_PageUp));
      shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_BracketLeft));
      shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_Greater));
      m_previousTabAction<span class="operator">-</span><span class="operator">&gt;</span>setShortcuts(shortcuts);
      connect(m_previousTabAction<span class="operator">,</span> SIGNAL(triggered())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(previousTab()));

      m_recentlyClosedTabsMenu <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QMenu</span>(<span class="keyword">this</span>);
      connect(m_recentlyClosedTabsMenu<span class="operator">,</span> SIGNAL(aboutToShow())<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(aboutToShowRecentTabsMenu()));
      connect(m_recentlyClosedTabsMenu<span class="operator">,</span> SIGNAL(triggered(<span class="type">QAction</span><span class="operator">*</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(aboutToShowRecentTriggeredAction(<span class="type">QAction</span><span class="operator">*</span>)));
      m_recentlyClosedTabsAction <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(tr(<span class="string">&quot;Recently Closed Tabs&quot;</span>)<span class="operator">,</span> <span class="keyword">this</span>);
      m_recentlyClosedTabsAction<span class="operator">-</span><span class="operator">&gt;</span>setMenu(m_recentlyClosedTabsMenu);
      m_recentlyClosedTabsAction<span class="operator">-</span><span class="operator">&gt;</span>setEnabled(<span class="keyword">false</span>);

      connect(<span class="keyword">this</span><span class="operator">,</span> SIGNAL(currentChanged(<span class="type">int</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(currentChanged(<span class="type">int</span>)));

      m_lineEdits <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QStackedWidget</span>(<span class="keyword">this</span>);
  }

  TabWidget<span class="operator">::</span><span class="operator">~</span>TabWidget()
  {
      <span class="keyword">if</span> (m_fullScreenView)
          <span class="keyword">delete</span> m_fullScreenView;
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>clear()
  {
      <span class="comment">// clear the recently closed tabs</span>
      m_recentlyClosedTabs<span class="operator">.</span>clear();
      <span class="comment">// clear the line edit history</span>
      <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator">&lt;</span> m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>count(); <span class="operator">+</span><span class="operator">+</span>i) {
          <span class="type">QLineEdit</span> <span class="operator">*</span>qLineEdit <span class="operator">=</span> lineEdit(i);
          qLineEdit<span class="operator">-</span><span class="operator">&gt;</span>setText(qLineEdit<span class="operator">-</span><span class="operator">&gt;</span>text());
      }
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>moveTab(<span class="type">int</span> fromIndex<span class="operator">,</span> <span class="type">int</span> toIndex)
  {
      <span class="type">QWidget</span> <span class="operator">*</span>lineEdit <span class="operator">=</span> m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>widget(fromIndex);
      m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>removeWidget(lineEdit);
      m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>insertWidget(toIndex<span class="operator">,</span> lineEdit);
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>setAudioMutedForTab(<span class="type">int</span> index<span class="operator">,</span> bool mute)
  {
      <span class="keyword">if</span> (index <span class="operator">&lt;</span> <span class="number">0</span>)
          index <span class="operator">=</span> currentIndex();
      <span class="keyword">if</span> (index <span class="operator">&lt;</span> <span class="number">0</span> <span class="operator">|</span><span class="operator">|</span> index <span class="operator">&gt;</span><span class="operator">=</span> count())
          <span class="keyword">return</span>;

      <span class="type">QWidget</span> <span class="operator">*</span>widget <span class="operator">=</span> <span class="keyword">this</span><span class="operator">-</span><span class="operator">&gt;</span>widget(index);
      <span class="keyword">if</span> (WebView <span class="operator">*</span>tab <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebView<span class="operator">*</span><span class="operator">&gt;</span>(widget))
          tab<span class="operator">-</span><span class="operator">&gt;</span>page()<span class="operator">-</span><span class="operator">&gt;</span>setAudioMuted(mute);
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>addWebAction(<span class="type">QAction</span> <span class="operator">*</span>action<span class="operator">,</span> <span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">::</span>WebAction webAction)
  {
      <span class="keyword">if</span> (<span class="operator">!</span>action)
          <span class="keyword">return</span>;
      m_actions<span class="operator">.</span>append(<span class="keyword">new</span> WebActionMapper(action<span class="operator">,</span> webAction<span class="operator">,</span> <span class="keyword">this</span>));
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>currentChanged(<span class="type">int</span> index)
  {
      WebView <span class="operator">*</span>webView <span class="operator">=</span> <span class="keyword">this</span><span class="operator">-</span><span class="operator">&gt;</span>webView(index);
      <span class="keyword">if</span> (<span class="operator">!</span>webView)
          <span class="keyword">return</span>;

      Q_ASSERT(m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>count() <span class="operator">=</span><span class="operator">=</span> count());

      WebView <span class="operator">*</span>oldWebView <span class="operator">=</span> <span class="keyword">this</span><span class="operator">-</span><span class="operator">&gt;</span>webView(m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>currentIndex());
      <span class="keyword">if</span> (oldWebView) {
  <span class="preprocessor">#if defined(QWEBENGINEVIEW_STATUSBARMESSAGE)</span>
          disconnect(oldWebView<span class="operator">,</span> SIGNAL(statusBarMessage(<span class="type">QString</span>))<span class="operator">,</span>
                  <span class="keyword">this</span><span class="operator">,</span> SIGNAL(showStatusBarMessage(<span class="type">QString</span>)));
  <span class="preprocessor">#endif</span>
          disconnect(oldWebView<span class="operator">-</span><span class="operator">&gt;</span>page()<span class="operator">,</span> SIGNAL(linkHovered(<span class="keyword">const</span> <span class="type">QString</span><span class="operator">&amp;</span>))<span class="operator">,</span>
                  <span class="keyword">this</span><span class="operator">,</span> SIGNAL(linkHovered(<span class="keyword">const</span> <span class="type">QString</span><span class="operator">&amp;</span>)));
          disconnect(oldWebView<span class="operator">,</span> SIGNAL(loadProgress(<span class="type">int</span>))<span class="operator">,</span>
                  <span class="keyword">this</span><span class="operator">,</span> SIGNAL(loadProgress(<span class="type">int</span>)));
          disconnect(oldWebView<span class="operator">-</span><span class="operator">&gt;</span>page()<span class="operator">-</span><span class="operator">&gt;</span>profile()<span class="operator">,</span> SIGNAL(downloadRequested(<span class="type"><a href="qwebenginedownloaditem.html">QWebEngineDownloadItem</a></span><span class="operator">*</span>))<span class="operator">,</span>
                  <span class="keyword">this</span><span class="operator">,</span> SLOT(downloadRequested(<span class="type"><a href="qwebenginedownloaditem.html">QWebEngineDownloadItem</a></span><span class="operator">*</span>)));
          disconnect(oldWebView<span class="operator">-</span><span class="operator">&gt;</span>page()<span class="operator">,</span> SIGNAL(fullScreenRequested(<span class="type"><a href="qwebenginefullscreenrequest.html">QWebEngineFullScreenRequest</a></span>))<span class="operator">,</span>
                  <span class="keyword">this</span><span class="operator">,</span> SLOT(fullScreenRequested(<span class="type"><a href="qwebenginefullscreenrequest.html">QWebEngineFullScreenRequest</a></span>)));
      }

  <span class="preprocessor">#if defined(QWEBENGINEVIEW_STATUSBARMESSAGE)</span>
      connect(webView<span class="operator">,</span> SIGNAL(statusBarMessage(<span class="type">QString</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SIGNAL(showStatusBarMessage(<span class="type">QString</span>)));
  <span class="preprocessor">#endif</span>
      connect(webView<span class="operator">-</span><span class="operator">&gt;</span>page()<span class="operator">,</span> SIGNAL(linkHovered(<span class="keyword">const</span> <span class="type">QString</span><span class="operator">&amp;</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SIGNAL(linkHovered(<span class="keyword">const</span> <span class="type">QString</span><span class="operator">&amp;</span>)));
      connect(webView<span class="operator">,</span> SIGNAL(loadProgress(<span class="type">int</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SIGNAL(loadProgress(<span class="type">int</span>)));
      connect(webView<span class="operator">-</span><span class="operator">&gt;</span>page()<span class="operator">-</span><span class="operator">&gt;</span>profile()<span class="operator">,</span> SIGNAL(downloadRequested(<span class="type"><a href="qwebenginedownloaditem.html">QWebEngineDownloadItem</a></span><span class="operator">*</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(downloadRequested(<span class="type"><a href="qwebenginedownloaditem.html">QWebEngineDownloadItem</a></span><span class="operator">*</span>)));
      connect(webView<span class="operator">-</span><span class="operator">&gt;</span>page()<span class="operator">,</span> SIGNAL(fullScreenRequested(<span class="type"><a href="qwebenginefullscreenrequest.html">QWebEngineFullScreenRequest</a></span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(fullScreenRequested(<span class="type"><a href="qwebenginefullscreenrequest.html">QWebEngineFullScreenRequest</a></span>)));

      <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator">&lt;</span> m_actions<span class="operator">.</span>count(); <span class="operator">+</span><span class="operator">+</span>i) {
          WebActionMapper <span class="operator">*</span>mapper <span class="operator">=</span> m_actions<span class="operator">[</span>i<span class="operator">]</span>;
          mapper<span class="operator">-</span><span class="operator">&gt;</span>updateCurrent(webView<span class="operator">-</span><span class="operator">&gt;</span>page());
      }
      <span class="keyword">emit</span> setCurrentTitle(webView<span class="operator">-</span><span class="operator">&gt;</span>title());
      m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>setCurrentIndex(index);
      <span class="keyword">emit</span> loadProgress(webView<span class="operator">-</span><span class="operator">&gt;</span>progress());
      <span class="keyword">emit</span> showStatusBarMessage(webView<span class="operator">-</span><span class="operator">&gt;</span>lastStatusBarText());
      <span class="keyword">if</span> (webView<span class="operator">-</span><span class="operator">&gt;</span>url()<span class="operator">.</span>isEmpty())
          m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>currentWidget()<span class="operator">-</span><span class="operator">&gt;</span>setFocus();
      <span class="keyword">else</span>
          webView<span class="operator">-</span><span class="operator">&gt;</span>setFocus();
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>fullScreenRequested(<span class="type"><a href="qwebenginefullscreenrequest.html">QWebEngineFullScreenRequest</a></span> request)
  {
      WebPage <span class="operator">*</span>webPage <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebPage<span class="operator">*</span><span class="operator">&gt;</span>(sender());
      <span class="keyword">if</span> (request<span class="operator">.</span>toggleOn()) {
          <span class="keyword">if</span> (<span class="operator">!</span>m_fullScreenView) {
              m_fullScreenView <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qwebengineview.html">QWebEngineView</a></span>();
              m_fullScreenNotification <span class="operator">=</span> <span class="keyword">new</span> FullScreenNotification(m_fullScreenView);

              <span class="type">QAction</span> <span class="operator">*</span>exitFullScreenAction <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(m_fullScreenView);
              exitFullScreenAction<span class="operator">-</span><span class="operator">&gt;</span>setShortcut(<span class="type">Qt</span><span class="operator">::</span>Key_Escape);
              connect(exitFullScreenAction<span class="operator">,</span> <span class="operator">&amp;</span><span class="type">QAction</span><span class="operator">::</span>triggered<span class="operator">,</span> <span class="operator">[</span>webPage<span class="operator">]</span> {
                  webPage<span class="operator">-</span><span class="operator">&gt;</span>triggerAction(<span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">::</span>ExitFullScreen);
              });
              m_fullScreenView<span class="operator">-</span><span class="operator">&gt;</span>addAction(exitFullScreenAction);
          }
          m_oldWindowGeometry <span class="operator">=</span> window()<span class="operator">-</span><span class="operator">&gt;</span>geometry();
          m_fullScreenView<span class="operator">-</span><span class="operator">&gt;</span>setGeometry(m_oldWindowGeometry);
          webPage<span class="operator">-</span><span class="operator">&gt;</span>setView(m_fullScreenView);
          request<span class="operator">.</span>accept();
          m_fullScreenView<span class="operator">-</span><span class="operator">&gt;</span>showFullScreen();
          m_fullScreenNotification<span class="operator">-</span><span class="operator">&gt;</span>show();
          window()<span class="operator">-</span><span class="operator">&gt;</span>hide();
      } <span class="keyword">else</span> {
          <span class="keyword">if</span> (<span class="operator">!</span>m_fullScreenView)
              <span class="keyword">return</span>;
          WebView <span class="operator">*</span>oldWebView <span class="operator">=</span> <span class="keyword">this</span><span class="operator">-</span><span class="operator">&gt;</span>webView(m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>currentIndex());
          webPage<span class="operator">-</span><span class="operator">&gt;</span>setView(oldWebView);
          request<span class="operator">.</span>accept();
          <span class="keyword">delete</span> m_fullScreenView;
          m_fullScreenView <span class="operator">=</span> <span class="number">0</span>;
          window()<span class="operator">-</span><span class="operator">&gt;</span>show();
          window()<span class="operator">-</span><span class="operator">&gt;</span>setGeometry(m_oldWindowGeometry);
      }
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>handleTabBarDoubleClicked(<span class="type">int</span> index)
  {
      <span class="keyword">if</span> (index <span class="operator">!</span><span class="operator">=</span> <span class="operator">-</span><span class="number">1</span>) <span class="keyword">return</span>;
      newTab();
  }

  <span class="type">QAction</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>newTabAction() <span class="keyword">const</span>
  {
      <span class="keyword">return</span> m_newTabAction;
  }

  <span class="type">QAction</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>closeTabAction() <span class="keyword">const</span>
  {
      <span class="keyword">return</span> m_closeTabAction;
  }

  <span class="type">QAction</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>recentlyClosedTabsAction() <span class="keyword">const</span>
  {
      <span class="keyword">return</span> m_recentlyClosedTabsAction;
  }

  <span class="type">QAction</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>nextTabAction() <span class="keyword">const</span>
  {
      <span class="keyword">return</span> m_nextTabAction;
  }

  <span class="type">QAction</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>previousTabAction() <span class="keyword">const</span>
  {
      <span class="keyword">return</span> m_previousTabAction;
  }

  <span class="type">QWidget</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>lineEditStack() <span class="keyword">const</span>
  {
      <span class="keyword">return</span> m_lineEdits;
  }

  <span class="type">QLineEdit</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>currentLineEdit() <span class="keyword">const</span>
  {
      <span class="keyword">return</span> lineEdit(m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>currentIndex());
  }

  WebView <span class="operator">*</span>TabWidget<span class="operator">::</span>currentWebView() <span class="keyword">const</span>
  {
      <span class="keyword">return</span> webView(currentIndex());
  }

  <span class="type">QLineEdit</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>lineEdit(<span class="type">int</span> index) <span class="keyword">const</span>
  {
      UrlLineEdit <span class="operator">*</span>urlLineEdit <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>UrlLineEdit<span class="operator">*</span><span class="operator">&gt;</span>(m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>widget(index));
      <span class="keyword">if</span> (urlLineEdit)
          <span class="keyword">return</span> urlLineEdit<span class="operator">-</span><span class="operator">&gt;</span>lineEdit();
      <span class="keyword">return</span> <span class="number">0</span>;
  }

  WebView <span class="operator">*</span>TabWidget<span class="operator">::</span>webView(<span class="type">int</span> index) <span class="keyword">const</span>
  {
      <span class="type">QWidget</span> <span class="operator">*</span>widget <span class="operator">=</span> <span class="keyword">this</span><span class="operator">-</span><span class="operator">&gt;</span>widget(index);
      <span class="keyword">if</span> (WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebView<span class="operator">*</span><span class="operator">&gt;</span>(widget)) {
          <span class="keyword">return</span> webView;
      } <span class="keyword">else</span> {
          <span class="comment">// optimization to delay creating the first webview</span>
          <span class="keyword">if</span> (count() <span class="operator">=</span><span class="operator">=</span> <span class="number">1</span>) {
              TabWidget <span class="operator">*</span>that <span class="operator">=</span> <span class="keyword">const_cast</span><span class="operator">&lt;</span>TabWidget<span class="operator">*</span><span class="operator">&gt;</span>(<span class="keyword">this</span>);
              that<span class="operator">-</span><span class="operator">&gt;</span>setUpdatesEnabled(<span class="keyword">false</span>);
              that<span class="operator">-</span><span class="operator">&gt;</span>newTab();
              that<span class="operator">-</span><span class="operator">&gt;</span>closeTab(<span class="number">0</span>);
              that<span class="operator">-</span><span class="operator">&gt;</span>setUpdatesEnabled(<span class="keyword">true</span>);
              <span class="keyword">return</span> currentWebView();
          }
      }
      <span class="keyword">return</span> <span class="number">0</span>;
  }

  <span class="type">int</span> TabWidget<span class="operator">::</span>webViewIndex(WebView <span class="operator">*</span>webView) <span class="keyword">const</span>
  {
      <span class="type">int</span> index <span class="operator">=</span> indexOf(webView);
      <span class="keyword">return</span> index;
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>setupPage(<span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">*</span> page)
  {
      connect(page<span class="operator">,</span> SIGNAL(windowCloseRequested())<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(windowCloseRequested()));
      connect(page<span class="operator">,</span> SIGNAL(geometryChangeRequested(<span class="type">QRect</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SIGNAL(geometryChangeRequested(<span class="type">QRect</span>)));
  <span class="preprocessor">#if defined(QWEBENGINEPAGE_PRINTREQUESTED)</span>
      connect(page<span class="operator">,</span> SIGNAL(printRequested(<span class="type">QWebEngineFrame</span><span class="operator">*</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SIGNAL(printRequested(<span class="type">QWebEngineFrame</span><span class="operator">*</span>)));
  <span class="preprocessor">#endif</span>
  <span class="preprocessor">#if defined(QWEBENGINEPAGE_MENUBARVISIBILITYCHANGEREQUESTED)</span>
      connect(page<span class="operator">,</span> SIGNAL(menuBarVisibilityChangeRequested(bool))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SIGNAL(menuBarVisibilityChangeRequested(bool)));
  <span class="preprocessor">#endif</span>
  <span class="preprocessor">#if defined(QWEBENGINEPAGE_STATUSBARVISIBILITYCHANGEREQUESTED)</span>
      connect(page<span class="operator">,</span> SIGNAL(statusBarVisibilityChangeRequested(bool))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SIGNAL(statusBarVisibilityChangeRequested(bool)));
  <span class="preprocessor">#endif</span>
  <span class="preprocessor">#if defined(QWEBENGINEPAGE_TOOLBARVISIBILITYCHANGEREQUESTED)</span>
      connect(page<span class="operator">,</span> SIGNAL(toolBarVisibilityChangeRequested(bool))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SIGNAL(toolBarVisibilityChangeRequested(bool)));
  <span class="preprocessor">#endif</span>

      <span class="comment">// webview actions</span>
      <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator">&lt;</span> m_actions<span class="operator">.</span>count(); <span class="operator">+</span><span class="operator">+</span>i) {
          WebActionMapper <span class="operator">*</span>mapper <span class="operator">=</span> m_actions<span class="operator">[</span>i<span class="operator">]</span>;
          mapper<span class="operator">-</span><span class="operator">&gt;</span>addChild(page<span class="operator">-</span><span class="operator">&gt;</span>action(mapper<span class="operator">-</span><span class="operator">&gt;</span>webAction()));
      }
  }

  WebView <span class="operator">*</span>TabWidget<span class="operator">::</span>newTab(bool makeCurrent)
  {
      <span class="comment">// line edit</span>
      UrlLineEdit <span class="operator">*</span>urlLineEdit <span class="operator">=</span> <span class="keyword">new</span> UrlLineEdit;
      <span class="type">QLineEdit</span> <span class="operator">*</span>lineEdit <span class="operator">=</span> urlLineEdit<span class="operator">-</span><span class="operator">&gt;</span>lineEdit();
      <span class="keyword">if</span> (<span class="operator">!</span>m_lineEditCompleter <span class="operator">&amp;</span><span class="operator">&amp;</span> count() <span class="operator">&gt;</span> <span class="number">0</span>) {
          HistoryCompletionModel <span class="operator">*</span>completionModel <span class="operator">=</span> <span class="keyword">new</span> HistoryCompletionModel(<span class="keyword">this</span>);
          completionModel<span class="operator">-</span><span class="operator">&gt;</span>setSourceModel(BrowserApplication<span class="operator">::</span>historyManager()<span class="operator">-</span><span class="operator">&gt;</span>historyFilterModel());
          m_lineEditCompleter <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QCompleter</span>(completionModel<span class="operator">,</span> <span class="keyword">this</span>);
          <span class="comment">// Should this be in Qt by default?</span>
          <span class="type">QAbstractItemView</span> <span class="operator">*</span>popup <span class="operator">=</span> m_lineEditCompleter<span class="operator">-</span><span class="operator">&gt;</span>popup();
          <span class="type">QListView</span> <span class="operator">*</span>listView <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span><span class="type">QListView</span><span class="operator">*</span><span class="operator">&gt;</span>(popup);
          <span class="keyword">if</span> (listView)
              listView<span class="operator">-</span><span class="operator">&gt;</span>setUniformItemSizes(<span class="keyword">true</span>);
      }
      lineEdit<span class="operator">-</span><span class="operator">&gt;</span>setCompleter(m_lineEditCompleter);
      connect(lineEdit<span class="operator">,</span> SIGNAL(returnPressed())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(lineEditReturnPressed()));
      m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>addWidget(urlLineEdit);
      m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>setSizePolicy(lineEdit<span class="operator">-</span><span class="operator">&gt;</span>sizePolicy());

      <span class="comment">// optimization to delay creating the more expensive WebView, history, etc</span>
      <span class="keyword">if</span> (count() <span class="operator">=</span><span class="operator">=</span> <span class="number">0</span>) {
          <span class="type">QWidget</span> <span class="operator">*</span>emptyWidget <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QWidget</span>;
          <span class="type">QPalette</span> p <span class="operator">=</span> emptyWidget<span class="operator">-</span><span class="operator">&gt;</span>palette();
          p<span class="operator">.</span>setColor(<span class="type">QPalette</span><span class="operator">::</span>Window<span class="operator">,</span> palette()<span class="operator">.</span>color(<span class="type">QPalette</span><span class="operator">::</span>Base));
          emptyWidget<span class="operator">-</span><span class="operator">&gt;</span>setPalette(p);
          emptyWidget<span class="operator">-</span><span class="operator">&gt;</span>setAutoFillBackground(<span class="keyword">true</span>);
          disconnect(<span class="keyword">this</span><span class="operator">,</span> SIGNAL(currentChanged(<span class="type">int</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(currentChanged(<span class="type">int</span>)));
          addTab(emptyWidget<span class="operator">,</span> tr(<span class="string">&quot;(Untitled)&quot;</span>));
          connect(<span class="keyword">this</span><span class="operator">,</span> SIGNAL(currentChanged(<span class="type">int</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(currentChanged(<span class="type">int</span>)));
          <span class="keyword">return</span> <span class="number">0</span>;
      }

      <span class="comment">// webview</span>
      WebView <span class="operator">*</span>webView <span class="operator">=</span> <span class="keyword">new</span> WebView;
      webView<span class="operator">-</span><span class="operator">&gt;</span>setPage(<span class="keyword">new</span> WebPage(m_profile<span class="operator">,</span> webView));
      urlLineEdit<span class="operator">-</span><span class="operator">&gt;</span>setWebView(webView);
      connect(webView<span class="operator">,</span> SIGNAL(loadStarted())<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(webViewLoadStarted()));
      connect(webView<span class="operator">,</span> SIGNAL(iconChanged(<span class="type">QIcon</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(webViewIconChanged(<span class="type">QIcon</span>)));
      connect(webView<span class="operator">,</span> SIGNAL(titleChanged(<span class="type">QString</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(webViewTitleChanged(<span class="type">QString</span>)));
      connect(webView<span class="operator">-</span><span class="operator">&gt;</span>page()<span class="operator">,</span> SIGNAL(audioMutedChanged(bool))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(webPageMutedOrAudibleChanged()));
      connect(webView<span class="operator">-</span><span class="operator">&gt;</span>page()<span class="operator">,</span> SIGNAL(recentlyAudibleChanged(bool))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(webPageMutedOrAudibleChanged()));
      connect(webView<span class="operator">,</span> SIGNAL(urlChanged(<span class="type">QUrl</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(webViewUrlChanged(<span class="type">QUrl</span>)));

      addTab(webView<span class="operator">,</span> tr(<span class="string">&quot;(Untitled)&quot;</span>));
      <span class="keyword">if</span> (makeCurrent)
          setCurrentWidget(webView);

      setupPage(webView<span class="operator">-</span><span class="operator">&gt;</span>page());

      <span class="keyword">if</span> (count() <span class="operator">=</span><span class="operator">=</span> <span class="number">1</span>)
          currentChanged(currentIndex());
      <span class="keyword">emit</span> tabsChanged();
      <span class="keyword">return</span> webView;
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>reloadAllTabs()
  {
      <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator">&lt;</span> count(); <span class="operator">+</span><span class="operator">+</span>i) {
          <span class="type">QWidget</span> <span class="operator">*</span>tabWidget <span class="operator">=</span> widget(i);
          <span class="keyword">if</span> (WebView <span class="operator">*</span>tab <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebView<span class="operator">*</span><span class="operator">&gt;</span>(tabWidget)) {
              tab<span class="operator">-</span><span class="operator">&gt;</span>reload();
          }
      }
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>lineEditReturnPressed()
  {
      <span class="keyword">if</span> (<span class="type">QLineEdit</span> <span class="operator">*</span>lineEdit <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span><span class="type">QLineEdit</span><span class="operator">*</span><span class="operator">&gt;</span>(sender())) {
          <span class="keyword">emit</span> loadPage(lineEdit<span class="operator">-</span><span class="operator">&gt;</span>text());
          <span class="keyword">if</span> (m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>currentWidget() <span class="operator">=</span><span class="operator">=</span> lineEdit)
              currentWebView()<span class="operator">-</span><span class="operator">&gt;</span>setFocus();
      }
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>windowCloseRequested()
  {
      WebPage <span class="operator">*</span>webPage <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebPage<span class="operator">*</span><span class="operator">&gt;</span>(sender());
      WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebView<span class="operator">*</span><span class="operator">&gt;</span>(webPage<span class="operator">-</span><span class="operator">&gt;</span>view());
      <span class="type">int</span> index <span class="operator">=</span> webViewIndex(webView);
      <span class="keyword">if</span> (index <span class="operator">&gt;</span><span class="operator">=</span> <span class="number">0</span>)
          closeTab(index);
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>closeOtherTabs(<span class="type">int</span> index)
  {
      <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">=</span><span class="operator">=</span> index)
          <span class="keyword">return</span>;
      <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> count() <span class="operator">-</span> <span class="number">1</span>; i <span class="operator">&gt;</span> index; <span class="operator">-</span><span class="operator">-</span>i)
          closeTab(i);
      <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> index <span class="operator">-</span> <span class="number">1</span>; i <span class="operator">&gt;</span><span class="operator">=</span> <span class="number">0</span>; <span class="operator">-</span><span class="operator">-</span>i)
          closeTab(i);
  }

  <span class="comment">// When index is -1 index chooses the current tab</span>
  <span class="type">void</span> TabWidget<span class="operator">::</span>cloneTab(<span class="type">int</span> index)
  {
      <span class="keyword">if</span> (index <span class="operator">&lt;</span> <span class="number">0</span>)
          index <span class="operator">=</span> currentIndex();
      <span class="keyword">if</span> (index <span class="operator">&lt;</span> <span class="number">0</span> <span class="operator">|</span><span class="operator">|</span> index <span class="operator">&gt;</span><span class="operator">=</span> count())
          <span class="keyword">return</span>;
      WebView <span class="operator">*</span>tab <span class="operator">=</span> newTab(<span class="keyword">false</span>);
      tab<span class="operator">-</span><span class="operator">&gt;</span>setUrl(webView(index)<span class="operator">-</span><span class="operator">&gt;</span>url());
  }

  <span class="comment">// When index is -1 index chooses the current tab</span>
  <span class="type">void</span> TabWidget<span class="operator">::</span>requestCloseTab(<span class="type">int</span> index)
  {
      <span class="keyword">if</span> (index <span class="operator">&lt;</span> <span class="number">0</span>)
          index <span class="operator">=</span> currentIndex();
      <span class="keyword">if</span> (index <span class="operator">&lt;</span> <span class="number">0</span> <span class="operator">|</span><span class="operator">|</span> index <span class="operator">&gt;</span><span class="operator">=</span> count())
          <span class="keyword">return</span>;
      WebView <span class="operator">*</span>tab <span class="operator">=</span> webView(index);
      <span class="keyword">if</span> (<span class="operator">!</span>tab)
          <span class="keyword">return</span>;
      tab<span class="operator">-</span><span class="operator">&gt;</span>page()<span class="operator">-</span><span class="operator">&gt;</span>triggerAction(<span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">::</span>RequestClose);
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>closeTab(<span class="type">int</span> index)
  {
      <span class="keyword">if</span> (index <span class="operator">&lt;</span> <span class="number">0</span> <span class="operator">|</span><span class="operator">|</span> index <span class="operator">&gt;</span><span class="operator">=</span> count())
          <span class="keyword">return</span>;

      bool hasFocus <span class="operator">=</span> <span class="keyword">false</span>;
      <span class="keyword">if</span> (WebView <span class="operator">*</span>tab <span class="operator">=</span> webView(index)) {
          hasFocus <span class="operator">=</span> tab<span class="operator">-</span><span class="operator">&gt;</span>hasFocus();

          <span class="keyword">if</span> (m_profile <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qwebengineprofile.html">QWebEngineProfile</a></span><span class="operator">::</span>defaultProfile()) {
              m_recentlyClosedTabsAction<span class="operator">-</span><span class="operator">&gt;</span>setEnabled(<span class="keyword">true</span>);
              m_recentlyClosedTabs<span class="operator">.</span>prepend(tab<span class="operator">-</span><span class="operator">&gt;</span>url());
              <span class="keyword">if</span> (m_recentlyClosedTabs<span class="operator">.</span>size() <span class="operator">&gt;</span><span class="operator">=</span> TabWidget<span class="operator">::</span>m_recentlyClosedTabsSize)
                  m_recentlyClosedTabs<span class="operator">.</span>removeLast();
          }
      }
      <span class="type">QWidget</span> <span class="operator">*</span>lineEdit <span class="operator">=</span> m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>widget(index);
      m_lineEdits<span class="operator">-</span><span class="operator">&gt;</span>removeWidget(lineEdit);
      lineEdit<span class="operator">-</span><span class="operator">&gt;</span>deleteLater();
      <span class="type">QWidget</span> <span class="operator">*</span>webView <span class="operator">=</span> widget(index);
      removeTab(index);
      webView<span class="operator">-</span><span class="operator">&gt;</span>deleteLater();
      <span class="keyword">emit</span> tabsChanged();
      <span class="keyword">if</span> (hasFocus <span class="operator">&amp;</span><span class="operator">&amp;</span> count() <span class="operator">&gt;</span> <span class="number">0</span>)
          currentWebView()<span class="operator">-</span><span class="operator">&gt;</span>setFocus();
      <span class="keyword">if</span> (count() <span class="operator">=</span><span class="operator">=</span> <span class="number">0</span>)
          <span class="keyword">emit</span> lastTabClosed();
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>setProfile(<span class="type"><a href="qwebengineprofile.html">QWebEngineProfile</a></span> <span class="operator">*</span>profile)
  {
      m_profile <span class="operator">=</span> profile;
      <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator">&lt;</span> count(); <span class="operator">+</span><span class="operator">+</span>i) {
          <span class="type">QWidget</span> <span class="operator">*</span>tabWidget <span class="operator">=</span> widget(i);
          <span class="keyword">if</span> (WebView <span class="operator">*</span>tab <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebView<span class="operator">*</span><span class="operator">&gt;</span>(tabWidget)) {
              WebPage<span class="operator">*</span> webPage <span class="operator">=</span> <span class="keyword">new</span> WebPage(m_profile<span class="operator">,</span> tab);
              setupPage(webPage);
              webPage<span class="operator">-</span><span class="operator">&gt;</span>load(tab<span class="operator">-</span><span class="operator">&gt;</span>page()<span class="operator">-</span><span class="operator">&gt;</span>url());
              tab<span class="operator">-</span><span class="operator">&gt;</span>setPage(webPage);
          }
      }
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>webViewLoadStarted()
  {
      WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebView<span class="operator">*</span><span class="operator">&gt;</span>(sender());
      <span class="type">int</span> index <span class="operator">=</span> webViewIndex(webView);
      <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">!</span><span class="operator">=</span> index) {
          <span class="type">QIcon</span> icon(QLatin1String(<span class="string">&quot;:loading.gif&quot;</span>));
          setTabIcon(index<span class="operator">,</span> icon);
      }
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>webViewIconChanged(<span class="keyword">const</span> <span class="type">QIcon</span> <span class="operator">&amp;</span>icon)
  {
      WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebView<span class="operator">*</span><span class="operator">&gt;</span>(sender());
      <span class="type">int</span> index <span class="operator">=</span> webViewIndex(webView);
      <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">!</span><span class="operator">=</span> index)
          setTabIcon(index<span class="operator">,</span> icon);
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>webViewTitleChanged(<span class="keyword">const</span> <span class="type">QString</span> <span class="operator">&amp;</span>title)
  {
      WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebView<span class="operator">*</span><span class="operator">&gt;</span>(sender());
      <span class="type">int</span> index <span class="operator">=</span> webViewIndex(webView);
      <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">!</span><span class="operator">=</span> index) {
          setTabText(index<span class="operator">,</span> title);
      }
      <span class="keyword">if</span> (currentIndex() <span class="operator">=</span><span class="operator">=</span> index)
          <span class="keyword">emit</span> setCurrentTitle(title);
      BrowserApplication<span class="operator">::</span>historyManager()<span class="operator">-</span><span class="operator">&gt;</span>updateHistoryItem(webView<span class="operator">-</span><span class="operator">&gt;</span>url()<span class="operator">,</span> title);
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>webPageMutedOrAudibleChanged() {
      <span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">*</span> webPage <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span><span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">*</span><span class="operator">&gt;</span>(sender());
      WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebView<span class="operator">*</span><span class="operator">&gt;</span>(webPage<span class="operator">-</span><span class="operator">&gt;</span>view());

      <span class="type">int</span> index <span class="operator">=</span> webViewIndex(webView);
      <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">!</span><span class="operator">=</span> index) {
          <span class="type">QString</span> title <span class="operator">=</span> webView<span class="operator">-</span><span class="operator">&gt;</span>title();

          bool muted <span class="operator">=</span> webPage<span class="operator">-</span><span class="operator">&gt;</span>isAudioMuted();
          bool audible <span class="operator">=</span> webPage<span class="operator">-</span><span class="operator">&gt;</span>recentlyAudible();
          <span class="keyword">if</span> (muted) title <span class="operator">+</span><span class="operator">=</span> tr(<span class="string">&quot; (muted)&quot;</span>);
          <span class="keyword">else</span> <span class="keyword">if</span> (audible) title <span class="operator">+</span><span class="operator">=</span> tr(<span class="string">&quot; (audible)&quot;</span>);

          setTabText(index<span class="operator">,</span> title);
      }
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>webViewUrlChanged(<span class="keyword">const</span> <span class="type">QUrl</span> <span class="operator">&amp;</span>url)
  {
      WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebView<span class="operator">*</span><span class="operator">&gt;</span>(sender());
      <span class="type">int</span> index <span class="operator">=</span> webViewIndex(webView);
      <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">!</span><span class="operator">=</span> index) {
          m_tabBar<span class="operator">-</span><span class="operator">&gt;</span>setTabData(index<span class="operator">,</span> url);
          HistoryManager <span class="operator">*</span>manager <span class="operator">=</span> BrowserApplication<span class="operator">::</span>historyManager();
          <span class="keyword">if</span> (url<span class="operator">.</span>isValid())
              manager<span class="operator">-</span><span class="operator">&gt;</span>addHistoryEntry(url<span class="operator">.</span>toString());
      }
      <span class="keyword">emit</span> tabsChanged();
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>aboutToShowRecentTabsMenu()
  {
      m_recentlyClosedTabsMenu<span class="operator">-</span><span class="operator">&gt;</span>clear();
      <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator">&lt;</span> m_recentlyClosedTabs<span class="operator">.</span>count(); <span class="operator">+</span><span class="operator">+</span>i) {
          <span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(m_recentlyClosedTabsMenu);
          action<span class="operator">-</span><span class="operator">&gt;</span>setData(m_recentlyClosedTabs<span class="operator">.</span>at(i));
          <span class="type">QIcon</span> icon <span class="operator">=</span> BrowserApplication<span class="operator">::</span>instance()<span class="operator">-</span><span class="operator">&gt;</span>icon(m_recentlyClosedTabs<span class="operator">.</span>at(i));
          action<span class="operator">-</span><span class="operator">&gt;</span>setIcon(icon);
          action<span class="operator">-</span><span class="operator">&gt;</span>setText(m_recentlyClosedTabs<span class="operator">.</span>at(i)<span class="operator">.</span>toString());
          m_recentlyClosedTabsMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(action);
      }
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>aboutToShowRecentTriggeredAction(<span class="type">QAction</span> <span class="operator">*</span>action)
  {
      <span class="type">QUrl</span> url <span class="operator">=</span> action<span class="operator">-</span><span class="operator">&gt;</span>data()<span class="operator">.</span>toUrl();
      loadUrlInCurrentTab(url);
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>mouseDoubleClickEvent(<span class="type">QMouseEvent</span> <span class="operator">*</span>event)
  {
      <span class="keyword">if</span> (<span class="operator">!</span>childAt(event<span class="operator">-</span><span class="operator">&gt;</span>pos())
              <span class="comment">// Remove the line below when QTabWidget does not have a one pixel frame</span>
              <span class="operator">&amp;</span><span class="operator">&amp;</span> event<span class="operator">-</span><span class="operator">&gt;</span>pos()<span class="operator">.</span>y() <span class="operator">&lt;</span> (tabBar()<span class="operator">-</span><span class="operator">&gt;</span>y() <span class="operator">+</span> tabBar()<span class="operator">-</span><span class="operator">&gt;</span>height())) {
          newTab();
          <span class="keyword">return</span>;
      }
      <span class="type">QTabWidget</span><span class="operator">::</span>mouseDoubleClickEvent(event);
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>contextMenuEvent(<span class="type">QContextMenuEvent</span> <span class="operator">*</span>event)
  {
      <span class="keyword">if</span> (<span class="operator">!</span>childAt(event<span class="operator">-</span><span class="operator">&gt;</span>pos())) {
          m_tabBar<span class="operator">-</span><span class="operator">&gt;</span>contextMenuRequested(event<span class="operator">-</span><span class="operator">&gt;</span>pos());
          <span class="keyword">return</span>;
      }
      <span class="type">QTabWidget</span><span class="operator">::</span>contextMenuEvent(event);
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>mouseReleaseEvent(<span class="type">QMouseEvent</span> <span class="operator">*</span>event)
  {
      <span class="keyword">if</span> (event<span class="operator">-</span><span class="operator">&gt;</span>button() <span class="operator">=</span><span class="operator">=</span> <span class="type">Qt</span><span class="operator">::</span>MidButton <span class="operator">&amp;</span><span class="operator">&amp;</span> <span class="operator">!</span>childAt(event<span class="operator">-</span><span class="operator">&gt;</span>pos())
              <span class="comment">// Remove the line below when QTabWidget does not have a one pixel frame</span>
              <span class="operator">&amp;</span><span class="operator">&amp;</span> event<span class="operator">-</span><span class="operator">&gt;</span>pos()<span class="operator">.</span>y() <span class="operator">&lt;</span> (tabBar()<span class="operator">-</span><span class="operator">&gt;</span>y() <span class="operator">+</span> tabBar()<span class="operator">-</span><span class="operator">&gt;</span>height())) {
          <span class="type">QUrl</span> url(<span class="type">QApplication</span><span class="operator">::</span>clipboard()<span class="operator">-</span><span class="operator">&gt;</span>text(<span class="type">QClipboard</span><span class="operator">::</span>Selection));
          <span class="keyword">if</span> (<span class="operator">!</span>url<span class="operator">.</span>isEmpty() <span class="operator">&amp;</span><span class="operator">&amp;</span> url<span class="operator">.</span>isValid() <span class="operator">&amp;</span><span class="operator">&amp;</span> <span class="operator">!</span>url<span class="operator">.</span>scheme()<span class="operator">.</span>isEmpty()) {
              WebView <span class="operator">*</span>webView <span class="operator">=</span> newTab();
              webView<span class="operator">-</span><span class="operator">&gt;</span>setUrl(url);
          }
      }
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>loadUrlInCurrentTab(<span class="keyword">const</span> <span class="type">QUrl</span> <span class="operator">&amp;</span>url)
  {
      WebView <span class="operator">*</span>webView <span class="operator">=</span> currentWebView();
      <span class="keyword">if</span> (webView) {
          webView<span class="operator">-</span><span class="operator">&gt;</span>loadUrl(url);
          webView<span class="operator">-</span><span class="operator">&gt;</span>setFocus();
      }
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>nextTab()
  {
      <span class="type">int</span> next <span class="operator">=</span> currentIndex() <span class="operator">+</span> <span class="number">1</span>;
      <span class="keyword">if</span> (next <span class="operator">=</span><span class="operator">=</span> count())
          next <span class="operator">=</span> <span class="number">0</span>;
      setCurrentIndex(next);
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>previousTab()
  {
      <span class="type">int</span> next <span class="operator">=</span> currentIndex() <span class="operator">-</span> <span class="number">1</span>;
      <span class="keyword">if</span> (next <span class="operator">&lt;</span> <span class="number">0</span>)
          next <span class="operator">=</span> count() <span class="operator">-</span> <span class="number">1</span>;
      setCurrentIndex(next);
  }

  <span class="keyword">static</span> <span class="keyword">const</span> <span class="type">qint32</span> TabWidgetMagic <span class="operator">=</span> <span class="number">0xaa</span>;

  <span class="type">QByteArray</span> TabWidget<span class="operator">::</span>saveState() <span class="keyword">const</span>
  {
      <span class="type">int</span> version <span class="operator">=</span> <span class="number">1</span>;
      <span class="type">QByteArray</span> data;
      <span class="type">QDataStream</span> stream(<span class="operator">&amp;</span>data<span class="operator">,</span> <span class="type">QIODevice</span><span class="operator">::</span>WriteOnly);

      stream <span class="operator">&lt;</span><span class="operator">&lt;</span> <span class="type">qint32</span>(TabWidgetMagic);
      stream <span class="operator">&lt;</span><span class="operator">&lt;</span> <span class="type">qint32</span>(version);

      <span class="type">QStringList</span> tabs;
      <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator">&lt;</span> count(); <span class="operator">+</span><span class="operator">+</span>i) {
          <span class="keyword">if</span> (WebView <span class="operator">*</span>tab <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>WebView<span class="operator">*</span><span class="operator">&gt;</span>(widget(i))) {
              tabs<span class="operator">.</span>append(tab<span class="operator">-</span><span class="operator">&gt;</span>url()<span class="operator">.</span>toString());
          } <span class="keyword">else</span> {
              tabs<span class="operator">.</span>append(<span class="type">QString</span>());
          }
      }
      stream <span class="operator">&lt;</span><span class="operator">&lt;</span> tabs;
      stream <span class="operator">&lt;</span><span class="operator">&lt;</span> currentIndex();
      <span class="keyword">return</span> data;
  }

  bool TabWidget<span class="operator">::</span>restoreState(<span class="keyword">const</span> <span class="type">QByteArray</span> <span class="operator">&amp;</span>state)
  {
      <span class="type">int</span> version <span class="operator">=</span> <span class="number">1</span>;
      <span class="type">QByteArray</span> sd <span class="operator">=</span> state;
      <span class="type">QDataStream</span> stream(<span class="operator">&amp;</span>sd<span class="operator">,</span> <span class="type">QIODevice</span><span class="operator">::</span>ReadOnly);
      <span class="keyword">if</span> (stream<span class="operator">.</span>atEnd())
          <span class="keyword">return</span> <span class="keyword">false</span>;

      <span class="type">qint32</span> marker;
      <span class="type">qint32</span> v;
      stream <span class="operator">&gt;</span><span class="operator">&gt;</span> marker;
      stream <span class="operator">&gt;</span><span class="operator">&gt;</span> v;
      <span class="keyword">if</span> (marker <span class="operator">!</span><span class="operator">=</span> TabWidgetMagic <span class="operator">|</span><span class="operator">|</span> v <span class="operator">!</span><span class="operator">=</span> version)
          <span class="keyword">return</span> <span class="keyword">false</span>;

      <span class="type">QStringList</span> openTabs;
      stream <span class="operator">&gt;</span><span class="operator">&gt;</span> openTabs;

      <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator">&lt;</span> openTabs<span class="operator">.</span>count(); <span class="operator">+</span><span class="operator">+</span>i) {
          <span class="keyword">if</span> (i <span class="operator">!</span><span class="operator">=</span> <span class="number">0</span>)
              newTab();
          loadPage(openTabs<span class="operator">.</span>at(i));
      }

      <span class="type">int</span> currentTab;
      stream <span class="operator">&gt;</span><span class="operator">&gt;</span> currentTab;
      setCurrentIndex(currentTab);

      <span class="keyword">return</span> <span class="keyword">true</span>;
  }

  <span class="type">void</span> TabWidget<span class="operator">::</span>downloadRequested(<span class="type"><a href="qwebenginedownloaditem.html">QWebEngineDownloadItem</a></span> <span class="operator">*</span>download)
  {
      <span class="keyword">if</span> (download<span class="operator">-</span><span class="operator">&gt;</span>savePageFormat() <span class="operator">!</span><span class="operator">=</span> <span class="type"><a href="qwebenginedownloaditem.html">QWebEngineDownloadItem</a></span><span class="operator">::</span>UnknownSaveFormat) {
          SavePageDialog dlg(<span class="keyword">this</span><span class="operator">,</span> download<span class="operator">-</span><span class="operator">&gt;</span>savePageFormat()<span class="operator">,</span> download<span class="operator">-</span><span class="operator">&gt;</span>path());
          <span class="keyword">if</span> (dlg<span class="operator">.</span>exec() <span class="operator">!</span><span class="operator">=</span> SavePageDialog<span class="operator">::</span>Accepted)
              <span class="keyword">return</span>;
          download<span class="operator">-</span><span class="operator">&gt;</span>setSavePageFormat(dlg<span class="operator">.</span>pageFormat());
          download<span class="operator">-</span><span class="operator">&gt;</span>setPath(dlg<span class="operator">.</span>filePath());
      }

      BrowserApplication<span class="operator">::</span>downloadManager()<span class="operator">-</span><span class="operator">&gt;</span>download(download);
      download<span class="operator">-</span><span class="operator">&gt;</span>accept();
  }

  WebActionMapper<span class="operator">::</span>WebActionMapper(<span class="type">QAction</span> <span class="operator">*</span>root<span class="operator">,</span> <span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">::</span>WebAction webAction<span class="operator">,</span> <span class="type">QObject</span> <span class="operator">*</span>parent)
      : <span class="type">QObject</span>(parent)
      <span class="operator">,</span> m_currentParent(<span class="number">0</span>)
      <span class="operator">,</span> m_root(root)
      <span class="operator">,</span> m_webAction(webAction)
  {
      <span class="keyword">if</span> (<span class="operator">!</span>m_root)
          <span class="keyword">return</span>;
      connect(m_root<span class="operator">,</span> SIGNAL(triggered())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(rootTriggered()));
      connect(root<span class="operator">,</span> SIGNAL(destroyed(<span class="type">QObject</span><span class="operator">*</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(rootDestroyed()));
      root<span class="operator">-</span><span class="operator">&gt;</span>setEnabled(<span class="keyword">false</span>);
  }

  <span class="type">void</span> WebActionMapper<span class="operator">::</span>rootDestroyed()
  {
      m_root <span class="operator">=</span> <span class="number">0</span>;
  }

  <span class="type">void</span> WebActionMapper<span class="operator">::</span>currentDestroyed()
  {
      updateCurrent(<span class="number">0</span>);
  }

  <span class="type">void</span> WebActionMapper<span class="operator">::</span>addChild(<span class="type">QAction</span> <span class="operator">*</span>action)
  {
      <span class="keyword">if</span> (<span class="operator">!</span>action)
          <span class="keyword">return</span>;
      connect(action<span class="operator">,</span> SIGNAL(changed())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(childChanged()));
  }

  <span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">::</span>WebAction WebActionMapper<span class="operator">::</span>webAction() <span class="keyword">const</span>
  {
      <span class="keyword">return</span> m_webAction;
  }

  <span class="type">void</span> WebActionMapper<span class="operator">::</span>rootTriggered()
  {
      <span class="keyword">if</span> (m_currentParent) {
          <span class="type">QAction</span> <span class="operator">*</span>gotoAction <span class="operator">=</span> m_currentParent<span class="operator">-</span><span class="operator">&gt;</span>action(m_webAction);
          gotoAction<span class="operator">-</span><span class="operator">&gt;</span>trigger();
      }
  }

  <span class="type">void</span> WebActionMapper<span class="operator">::</span>childChanged()
  {
      <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>source <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">&gt;</span>(sender())) {
          <span class="keyword">if</span> (m_root
              <span class="operator">&amp;</span><span class="operator">&amp;</span> m_currentParent
              <span class="operator">&amp;</span><span class="operator">&amp;</span> source<span class="operator">-</span><span class="operator">&gt;</span>parent() <span class="operator">=</span><span class="operator">=</span> m_currentParent) {
              m_root<span class="operator">-</span><span class="operator">&gt;</span>setChecked(source<span class="operator">-</span><span class="operator">&gt;</span>isChecked());
              m_root<span class="operator">-</span><span class="operator">&gt;</span>setEnabled(source<span class="operator">-</span><span class="operator">&gt;</span>isEnabled());
          }
      }
  }

  <span class="type">void</span> WebActionMapper<span class="operator">::</span>updateCurrent(<span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span> <span class="operator">*</span>currentParent)
  {
      <span class="keyword">if</span> (m_currentParent)
          disconnect(m_currentParent<span class="operator">,</span> SIGNAL(destroyed(<span class="type">QObject</span><span class="operator">*</span>))<span class="operator">,</span>
                     <span class="keyword">this</span><span class="operator">,</span> SLOT(currentDestroyed()));

      m_currentParent <span class="operator">=</span> currentParent;
      <span class="keyword">if</span> (<span class="operator">!</span>m_root)
          <span class="keyword">return</span>;
      <span class="keyword">if</span> (<span class="operator">!</span>m_currentParent) {
          m_root<span class="operator">-</span><span class="operator">&gt;</span>setEnabled(<span class="keyword">false</span>);
          m_root<span class="operator">-</span><span class="operator">&gt;</span>setChecked(<span class="keyword">false</span>);
          <span class="keyword">return</span>;
      }
      <span class="type">QAction</span> <span class="operator">*</span>source <span class="operator">=</span> m_currentParent<span class="operator">-</span><span class="operator">&gt;</span>action(m_webAction);
      m_root<span class="operator">-</span><span class="operator">&gt;</span>setChecked(source<span class="operator">-</span><span class="operator">&gt;</span>isChecked());
      m_root<span class="operator">-</span><span class="operator">&gt;</span>setEnabled(source<span class="operator">-</span><span class="operator">&gt;</span>isEnabled());
      connect(m_currentParent<span class="operator">,</span> SIGNAL(destroyed(<span class="type">QObject</span><span class="operator">*</span>))<span class="operator">,</span>
              <span class="keyword">this</span><span class="operator">,</span> SLOT(currentDestroyed()));
  }

</pre>
</div>
<!-- @@@webenginewidgets/demobrowser/tabwidget.cpp -->
        </div>
       </div>
   </div>
   </div>
</div>
<div class="footer">
   <p>
   <acronym title="Copyright">&copy;</acronym> 2017 The Qt Company Ltd.
   Documentation contributions included herein are the copyrights of
   their respective owners.<br>    The documentation provided herein is licensed under the terms of the    <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation    License version 1.3</a> as published by the Free Software Foundation.<br>    Qt and respective logos are trademarks of The Qt Company Ltd.     in Finland and/or other countries worldwide. All other trademarks are property
   of their respective owners. </p>
</div>
</body>
</html>