widget/qt/mozqwidget.cpp

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
     2 /* vim: set ts=4 et sw=4 tw=80: */
     3 /* This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this
     5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 #include <QtCore/QCoreApplication>
     8 #include <QtGui/QResizeEvent>
    10 #include "mozqwidget.h"
    11 #include "nsWindow.h"
    13 using namespace mozilla::widget;
    15 MozQWidget::MozQWidget(nsWindow* aReceiver, QWindow* aParent)
    16   : QWindow(aParent)
    17   , mReceiver(aReceiver)
    18   , mUpdatePending(false)
    19 {
    20     mWindowType = mReceiver->WindowType();
    21 }
    23 MozQWidget::~MozQWidget()
    24 {
    25 }
    27 void MozQWidget::render(QPainter* painter)
    28 {
    29     Q_UNUSED(painter);
    30 }
    32 void MozQWidget::renderLater()
    33 {
    34     if (!isExposed() || eWindowType_child != mWindowType || !isVisible()) {
    35         return;
    36     }
    38     if (!mUpdatePending) {
    39         mUpdatePending = true;
    40         QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest));
    41     }
    42 }
    44 void MozQWidget::renderNow()
    45 {
    46     if (!isExposed() || eWindowType_child != mWindowType || !isVisible()) {
    47         return;
    48     }
    50     mReceiver->OnPaint();
    51 }
    53 bool MozQWidget::event(QEvent* event)
    54 {
    55     switch (event->type()) {
    56     case QEvent::UpdateRequest:
    57         mUpdatePending = false;
    58         renderNow();
    59         return true;
    60     default:
    61         return QWindow::event(event);
    62     }
    63 }
    65 void MozQWidget::exposeEvent(QExposeEvent* event)
    66 {
    67     Q_UNUSED(event);
    68     if (!isExposed() || eWindowType_child != mWindowType || !isVisible()) {
    69         return;
    70     }
    71     LOG(("MozQWidget::%s [%p] flags:%x\n", __FUNCTION__, (void *)this, flags()));
    72     renderNow();
    74 }
    76 void MozQWidget::resizeEvent(QResizeEvent* event)
    77 {
    78     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
    79     mReceiver->resizeEvent(event);
    80     QWindow::resizeEvent(event);
    81 }
    83 void MozQWidget::focusInEvent(QFocusEvent* event)
    84 {
    85     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
    86     mReceiver->focusInEvent(event);
    87     QWindow::focusInEvent(event);
    88 }
    90 void MozQWidget::focusOutEvent(QFocusEvent* event)
    91 {
    92     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
    93     mReceiver->focusOutEvent(event);
    94     QWindow::focusOutEvent(event);
    95 }
    97 void MozQWidget::hideEvent(QHideEvent* event)
    98 {
    99     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
   100     mReceiver->hideEvent(event);
   101     QWindow::hideEvent(event);
   102 }
   104 void MozQWidget::keyPressEvent(QKeyEvent* event)
   105 {
   106     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
   107     mReceiver->keyPressEvent(event);
   108     QWindow::keyPressEvent(event);
   109 }
   111 void MozQWidget::keyReleaseEvent(QKeyEvent* event)
   112 {
   113     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
   114     mReceiver->keyReleaseEvent(event);
   115     QWindow::keyReleaseEvent(event);
   116 }
   118 void MozQWidget::mouseDoubleClickEvent(QMouseEvent* event)
   119 {
   120     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
   121     mReceiver->mouseDoubleClickEvent(event);
   122     QWindow::mouseDoubleClickEvent(event);
   123 }
   125 void MozQWidget::mouseMoveEvent(QMouseEvent* event)
   126 {
   127     mReceiver->mouseMoveEvent(event);
   128     QWindow::mouseMoveEvent(event);
   129 }
   131 void MozQWidget::mousePressEvent(QMouseEvent* event)
   132 {
   133     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
   134     mReceiver->mousePressEvent(event);
   135     QWindow::mousePressEvent(event);
   136 }
   138 void MozQWidget::mouseReleaseEvent(QMouseEvent* event)
   139 {
   140     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
   141     mReceiver->mouseReleaseEvent(event);
   142     QWindow::mouseReleaseEvent(event);
   143 }
   145 void MozQWidget::moveEvent(QMoveEvent* event)
   146 {
   147     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
   148     mReceiver->moveEvent(event);
   149     QWindow::moveEvent(event);
   150 }
   152 void MozQWidget::showEvent(QShowEvent* event)
   153 {
   154     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
   155     mReceiver->showEvent(event);
   156     QWindow::showEvent(event);
   157 }
   159 void MozQWidget::wheelEvent(QWheelEvent* event)
   160 {
   161     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
   162     mReceiver->wheelEvent(event);
   163     QWindow::wheelEvent(event);
   164 }
   166 void MozQWidget::tabletEvent(QTabletEvent* event)
   167 {
   168     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
   169     QWindow::tabletEvent(event);
   170 }
   172 void MozQWidget::touchEvent(QTouchEvent* event)
   173 {
   174     LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this));
   175     QWindow::touchEvent(event);
   176 }
   178 void MozQWidget::SetCursor(nsCursor aCursor)
   179 {
   180     Qt::CursorShape cursor = Qt::ArrowCursor;
   181     switch(aCursor) {
   182     case eCursor_standard:
   183         cursor = Qt::ArrowCursor;
   184         break;
   185     case eCursor_wait:
   186         cursor = Qt::WaitCursor;
   187         break;
   188     case eCursor_select:
   189         cursor = Qt::IBeamCursor;
   190         break;
   191     case eCursor_hyperlink:
   192         cursor = Qt::PointingHandCursor;
   193         break;
   194     case eCursor_ew_resize:
   195         cursor = Qt::SplitHCursor;
   196         break;
   197     case eCursor_ns_resize:
   198         cursor = Qt::SplitVCursor;
   199         break;
   200     case eCursor_nw_resize:
   201     case eCursor_se_resize:
   202         cursor = Qt::SizeBDiagCursor;
   203         break;
   204     case eCursor_ne_resize:
   205     case eCursor_sw_resize:
   206         cursor = Qt::SizeFDiagCursor;
   207         break;
   208     case eCursor_crosshair:
   209     case eCursor_move:
   210         cursor = Qt::SizeAllCursor;
   211         break;
   212     case eCursor_help:
   213         cursor = Qt::WhatsThisCursor;
   214         break;
   215     case eCursor_copy:
   216     case eCursor_alias:
   217         break;
   218     case eCursor_context_menu:
   219     case eCursor_cell:
   220     case eCursor_grab:
   221     case eCursor_grabbing:
   222     case eCursor_spinning:
   223     case eCursor_zoom_in:
   224     case eCursor_zoom_out:
   226     default:
   227         break;
   228     }
   230     setCursor(cursor);
   231 }

mercurial