ginebra2/ContentViews/BrowserWindow.cpp
author hgs
Fri, 15 Oct 2010 17:30:59 -0400
changeset 16 3c88a81ff781
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16
hgs
parents:
diff changeset
     1
#include "BrowserWindow.h"
hgs
parents:
diff changeset
     2
#include "WindowsView.h"
hgs
parents:
diff changeset
     3
#include "ChromeLayout.h"
hgs
parents:
diff changeset
     4
#include "ChromeWidget.h"
hgs
parents:
diff changeset
     5
#include "ChromeView.h"
hgs
parents:
diff changeset
     6
#include "ChromeDOM.h" //Get rid of this dependency
hgs
parents:
diff changeset
     7
#include "GWebContentView.h"
hgs
parents:
diff changeset
     8
#include <QGraphicsWidget>
hgs
parents:
diff changeset
     9
#include <QGraphicsScene>
hgs
parents:
diff changeset
    10
#include <QGraphicsTextItem>
hgs
parents:
diff changeset
    11
#include <QVBoxLayout>
hgs
parents:
diff changeset
    12
#include "webpagecontroller.h"
hgs
parents:
diff changeset
    13
#include "ViewStack.h"
hgs
parents:
diff changeset
    14
#ifdef Q_WS_MAEMO_5
hgs
parents:
diff changeset
    15
#include <QtGui/QX11Info>
hgs
parents:
diff changeset
    16
#include <X11/Xlib.h>
hgs
parents:
diff changeset
    17
#include <X11/Xatom.h>
hgs
parents:
diff changeset
    18
#endif
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
namespace GVA {
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
  bool BrowserWindow::m_preventDisconnectPageTitleChanged = false; // workaraound for multiple windows crash
hgs
parents:
diff changeset
    23
  bool BrowserWindow::m_preventConnectPageTitleChanged = false;    // workaround for multiple windows crash
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
  BrowserWindow::BrowserWindow(ChromeWidget * chrome, WindowsView * windows, QWidget * parent, Qt::WindowFlags flags)
hgs
parents:
diff changeset
    26
    : QMainWindow(parent, flags),
hgs
parents:
diff changeset
    27
      m_page(0),
hgs
parents:
diff changeset
    28
      m_specialPage(0),
hgs
parents:
diff changeset
    29
      m_decorated(false),
hgs
parents:
diff changeset
    30
      m_chrome(chrome),
hgs
parents:
diff changeset
    31
      m_scene(new QGraphicsScene()),
hgs
parents:
diff changeset
    32
      m_snapshot(0),
hgs
parents:
diff changeset
    33
      m_windows(windows),
hgs
parents:
diff changeset
    34
      m_state(menuEnabled),   
hgs
parents:
diff changeset
    35
      m_slidedUp(false),   
hgs
parents:
diff changeset
    36
      m_viewName("WebView"),
hgs
parents:
diff changeset
    37
      m_changingMode(false)
hgs
parents:
diff changeset
    38
  {
hgs
parents:
diff changeset
    39
    m_view = new ChromeView(m_scene, m_chrome, this);
hgs
parents:
diff changeset
    40
    setCentralWidget(m_view);
hgs
parents:
diff changeset
    41
    show();
hgs
parents:
diff changeset
    42
    ViewController *controller = viewController();
hgs
parents:
diff changeset
    43
    if(controller) {
hgs
parents:
diff changeset
    44
        connect(controller, SIGNAL(currentViewChanged(ControllableViewBase *)), this, SLOT(onViewChanged(ControllableViewBase *)));
hgs
parents:
diff changeset
    45
    }
hgs
parents:
diff changeset
    46
    slideViewIfRequired(100); // display UrlSearchBar for every new window
hgs
parents:
diff changeset
    47
  }
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
  void BrowserWindow::setPage(WRT::WrtBrowserContainer * page)
hgs
parents:
diff changeset
    50
  { 
hgs
parents:
diff changeset
    51
    m_page = page;
hgs
parents:
diff changeset
    52
    connectPageTitleChanged();
hgs
parents:
diff changeset
    53
  }
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
	// hide or show UrlSearchBar if required
hgs
parents:
diff changeset
    56
	// This is a workaround for the problem that created by the fact that
hgs
parents:
diff changeset
    57
	// multiple instances of BrowserWindow use same instance of m_chrome and m_chrome->layout()
hgs
parents:
diff changeset
    58
	// 
hgs
parents:
diff changeset
    59
  void BrowserWindow::slideViewIfRequired(int value)
hgs
parents:
diff changeset
    60
  {
hgs
parents:
diff changeset
    61
      if(value > 0) { // slide up to display UrlSearchBar
hgs
parents:
diff changeset
    62
           m_chrome->layout()->slideView(value);
hgs
parents:
diff changeset
    63
           m_slidedUp = true;
hgs
parents:
diff changeset
    64
           return;
hgs
parents:
diff changeset
    65
      }
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
      if((m_slidedUp == true) && (value < 0)) { // slide down UrlSearchBar
hgs
parents:
diff changeset
    68
           m_chrome->layout()->slideView(value);
hgs
parents:
diff changeset
    69
           m_slidedUp = false;
hgs
parents:
diff changeset
    70
           return;
hgs
parents:
diff changeset
    71
      }
hgs
parents:
diff changeset
    72
  }
hgs
parents:
diff changeset
    73
  
hgs
parents:
diff changeset
    74
  void BrowserWindow::toggleDecoration() 
hgs
parents:
diff changeset
    75
  { 
hgs
parents:
diff changeset
    76
    m_decorated = !m_decorated;
hgs
parents:
diff changeset
    77
    if(m_decorated) {
hgs
parents:
diff changeset
    78
      showDecoration();
hgs
parents:
diff changeset
    79
    } 
hgs
parents:
diff changeset
    80
    else {
hgs
parents:
diff changeset
    81
      hideDecoration();
hgs
parents:
diff changeset
    82
    }
hgs
parents:
diff changeset
    83
  }
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
  void BrowserWindow::showDecoration()
hgs
parents:
diff changeset
    86
  {
hgs
parents:
diff changeset
    87
    m_state |= active;
hgs
parents:
diff changeset
    88
    if(m_page)       
hgs
parents:
diff changeset
    89
      WebPageController::getSingleton()->setCurrentPage(m_page);
hgs
parents:
diff changeset
    90
    m_windows->deactivate(this);
hgs
parents:
diff changeset
    91
    if(m_snapshot)
hgs
parents:
diff changeset
    92
      m_snapshot->hide();
hgs
parents:
diff changeset
    93
    if(m_chrome){
hgs
parents:
diff changeset
    94
      m_chrome->layout()->setPos(0,0);
hgs
parents:
diff changeset
    95
      m_scene->addItem(m_chrome->layout());
hgs
parents:
diff changeset
    96
      m_chrome->layout()->show();
hgs
parents:
diff changeset
    97
      // Ensure that the layout size is in-synch with the window size.
hgs
parents:
diff changeset
    98
      m_chrome->layout()->resize(size());
hgs
parents:
diff changeset
    99
    }
hgs
parents:
diff changeset
   100
  }
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
  void BrowserWindow::hideDecoration()
hgs
parents:
diff changeset
   103
  {
hgs
parents:
diff changeset
   104
    m_state &= ~active;
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
    m_windows->activate(this);
hgs
parents:
diff changeset
   107
    if(m_chrome)
hgs
parents:
diff changeset
   108
      m_scene->removeItem(m_chrome->layout());
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
    if(m_page){
hgs
parents:
diff changeset
   111
      m_page->triggerAction(QWebPage::Stop);
hgs
parents:
diff changeset
   112
      //QImage image = WebPageController::getSingleton()->pageThumbnail(m_page);
hgs
parents:
diff changeset
   113
      //	if(image.isNull()){
hgs
parents:
diff changeset
   114
      //QImage image =  m_page->pageThumbnail(1,1);
hgs
parents:
diff changeset
   115
      //
hgs
parents:
diff changeset
   116
      
hgs
parents:
diff changeset
   117
      QImage image;
hgs
parents:
diff changeset
   118
      //This is really a bit hackish: the page controller should be able
hgs
parents:
diff changeset
   119
      //to figure this out;
hgs
parents:
diff changeset
   120
      //if(m_windows->contentView()->currentPageIsSuperPage()){
hgs
parents:
diff changeset
   121
	//m_specialPage = static_cast<WRT::WrtBrowserContainer*>(m_windows->contentView()->wrtPage());
hgs
parents:
diff changeset
   122
        //m_windows->contentView()->updateWebPage(m_page);
hgs
parents:
diff changeset
   123
	//image = m_windows->contentView()->pageThumbnail(1,1);
hgs
parents:
diff changeset
   124
      //}
hgs
parents:
diff changeset
   125
      //else
hgs
parents:
diff changeset
   126
        QSize s(800,464);
hgs
parents:
diff changeset
   127
        image = m_page->thumbnail(s);
hgs
parents:
diff changeset
   128
      if(m_snapshot){
hgs
parents:
diff changeset
   129
	m_scene->removeItem(m_snapshot);
hgs
parents:
diff changeset
   130
	delete m_snapshot;
hgs
parents:
diff changeset
   131
      }
hgs
parents:
diff changeset
   132
      m_snapshot = new QGraphicsPixmapItem(QPixmap::fromImage(image));
hgs
parents:
diff changeset
   133
      m_scene->addItem(m_snapshot);
hgs
parents:
diff changeset
   134
      m_snapshot->show();
hgs
parents:
diff changeset
   135
    } else {
hgs
parents:
diff changeset
   136
      qDebug() << "BrowserWindow::hideDecoration: page not set";
hgs
parents:
diff changeset
   137
    }
hgs
parents:
diff changeset
   138
  }
hgs
parents:
diff changeset
   139
  
hgs
parents:
diff changeset
   140
  void BrowserWindow::closeWindow()
hgs
parents:
diff changeset
   141
  {
hgs
parents:
diff changeset
   142
    //Tell the page controler to close this page.
hgs
parents:
diff changeset
   143
    //The controller emits pageClosed. WindowsView
hgs
parents:
diff changeset
   144
    //handles this and deletes this browser window
hgs
parents:
diff changeset
   145
    // Don't delete if only 1 window open..causes crash on exit
hgs
parents:
diff changeset
   146
    if (WebPageController::getSingleton()->pageCount() > 1)
hgs
parents:
diff changeset
   147
      WebPageController::getSingleton()->closePage(m_page);
hgs
parents:
diff changeset
   148
  }
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
  //Handle window events
hgs
parents:
diff changeset
   151
  bool BrowserWindow::event(QEvent * event) 
hgs
parents:
diff changeset
   152
  {
hgs
parents:
diff changeset
   153
    //qDebug() << "=====================BrowserWindow:event: " << event->type();
hgs
parents:
diff changeset
   154
    switch (event->type()) {
hgs
parents:
diff changeset
   155
    case QEvent::WindowBlocked:
hgs
parents:
diff changeset
   156
      m_state |= blocked;
hgs
parents:
diff changeset
   157
      break;
hgs
parents:
diff changeset
   158
    case QEvent::WindowUnblocked:
hgs
parents:
diff changeset
   159
      m_state &= ~blocked;
hgs
parents:
diff changeset
   160
      break;
hgs
parents:
diff changeset
   161
    case QEvent::WindowActivate: //Newly shown window or window maximized
hgs
parents:
diff changeset
   162
      handleWindowActivate();
hgs
parents:
diff changeset
   163
      m_chrome->windowStateChange(windowState());
hgs
parents:
diff changeset
   164
      break;
hgs
parents:
diff changeset
   165
    case QEvent::WindowDeactivate:
hgs
parents:
diff changeset
   166
      handleWindowDeactivate();
hgs
parents:
diff changeset
   167
      m_chrome->windowStateChange(windowState());
hgs
parents:
diff changeset
   168
      break;
hgs
parents:
diff changeset
   169
    case QEvent::Close:
hgs
parents:
diff changeset
   170
      m_state |= blocked; 
hgs
parents:
diff changeset
   171
      closeWindow();
hgs
parents:
diff changeset
   172
      break;    
hgs
parents:
diff changeset
   173
    default:
hgs
parents:
diff changeset
   174
      break;
hgs
parents:
diff changeset
   175
    }
hgs
parents:
diff changeset
   176
    return QMainWindow::event(event);
hgs
parents:
diff changeset
   177
  }
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
 void BrowserWindow::changeEvent(QEvent * event) {
hgs
parents:
diff changeset
   180
    switch (event->type()) {
hgs
parents:
diff changeset
   181
      case QEvent::WindowStateChange:
hgs
parents:
diff changeset
   182
        m_chrome->windowStateChange(windowState());
hgs
parents:
diff changeset
   183
        break;
hgs
parents:
diff changeset
   184
      default:
hgs
parents:
diff changeset
   185
        break;
hgs
parents:
diff changeset
   186
    }
hgs
parents:
diff changeset
   187
    QMainWindow::changeEvent(event);
hgs
parents:
diff changeset
   188
  }
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
  void BrowserWindow::handleWindowActivate() {
hgs
parents:
diff changeset
   191
      if(m_changingMode) {
hgs
parents:
diff changeset
   192
          // Ignore if in the process of changing from fullscreen to normal.  We get a deactivate followed by
hgs
parents:
diff changeset
   193
          // an activate call when this is done.  Clear the flag for the next time activate or deactivate is
hgs
parents:
diff changeset
   194
          // called for some other reason.
hgs
parents:
diff changeset
   195
          m_changingMode = false;
hgs
parents:
diff changeset
   196
          return;
hgs
parents:
diff changeset
   197
      }
hgs
parents:
diff changeset
   198
#ifdef Q_WS_MAEMO_5
hgs
parents:
diff changeset
   199
      grabZoomKeys(true);
hgs
parents:
diff changeset
   200
#endif
hgs
parents:
diff changeset
   201
      showDecoration();
hgs
parents:
diff changeset
   202
      if(m_chrome) {
hgs
parents:
diff changeset
   203
          connect(m_chrome, SIGNAL(requestToggleNormalFullScreen()), this, SLOT(toggleNormalFullScreen()));
hgs
parents:
diff changeset
   204
      }
hgs
parents:
diff changeset
   205
  }
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
  void BrowserWindow::handleWindowDeactivate() {
hgs
parents:
diff changeset
   208
      if(m_changingMode) {
hgs
parents:
diff changeset
   209
          // Ignore if in the process of changing from fullscreen to normal.
hgs
parents:
diff changeset
   210
          return;
hgs
parents:
diff changeset
   211
      }
hgs
parents:
diff changeset
   212
#ifdef Q_WS_MAEMO_5
hgs
parents:
diff changeset
   213
      grabZoomKeys(false);
hgs
parents:
diff changeset
   214
#endif
hgs
parents:
diff changeset
   215
      if(!((m_state & blocked) == blocked))
hgs
parents:
diff changeset
   216
        hideDecoration();
hgs
parents:
diff changeset
   217
      slideViewIfRequired(-100); // hide UrlSearchBar if required
hgs
parents:
diff changeset
   218
      if(m_chrome) {
hgs
parents:
diff changeset
   219
          disconnect(m_chrome, SIGNAL(requestToggleNormalFullScreen()), this, SLOT(toggleNormalFullScreen()));
hgs
parents:
diff changeset
   220
      }
hgs
parents:
diff changeset
   221
  }
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
  void BrowserWindow::setMenuEnabled(bool enabled)
hgs
parents:
diff changeset
   224
  {
hgs
parents:
diff changeset
   225
    if(enabled)
hgs
parents:
diff changeset
   226
      m_state |= menuEnabled;
hgs
parents:
diff changeset
   227
    else
hgs
parents:
diff changeset
   228
      m_state &= ~menuEnabled;
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
    fixupWindowTitle();
hgs
parents:
diff changeset
   231
  }
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
  void BrowserWindow::setTitle(const QString &title)
hgs
parents:
diff changeset
   234
  {
hgs
parents:
diff changeset
   235
    if(title.isEmpty()) {
hgs
parents:
diff changeset
   236
        setWindowTitle(QApplication::applicationName());
hgs
parents:
diff changeset
   237
    }
hgs
parents:
diff changeset
   238
    else {
hgs
parents:
diff changeset
   239
        setWindowTitle(title);
hgs
parents:
diff changeset
   240
    }
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
    fixupWindowTitle();
hgs
parents:
diff changeset
   243
  }
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
  /// Hack to hide the menu bar arrow when the menu is disabled.
hgs
parents:
diff changeset
   246
  void BrowserWindow::fixupWindowTitle() {
hgs
parents:
diff changeset
   247
      QString title = windowTitle();
hgs
parents:
diff changeset
   248
      title = title.trimmed();
hgs
parents:
diff changeset
   249
      if(!m_windows->isMenuEnabled()) {
hgs
parents:
diff changeset
   250
          // The menu is disabled, add some spaces to the title to push the down arrow out of view.
hgs
parents:
diff changeset
   251
          title += QString(60, ' ');
hgs
parents:
diff changeset
   252
      }
hgs
parents:
diff changeset
   253
      setWindowTitle(title);
hgs
parents:
diff changeset
   254
  }
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
  void BrowserWindow::onPageTitleChanged(const QString &title)
hgs
parents:
diff changeset
   257
  {
hgs
parents:
diff changeset
   258
      setTitle(title);
hgs
parents:
diff changeset
   259
  }
hgs
parents:
diff changeset
   260
hgs
parents:
diff changeset
   261
  void BrowserWindow::onViewChanged(ControllableViewBase *newView) {
hgs
parents:
diff changeset
   262
      Q_ASSERT(newView);
hgs
parents:
diff changeset
   263
hgs
parents:
diff changeset
   264
      if(m_windows->contentView()->currentPageIsSuperPage()) {
hgs
parents:
diff changeset
   265
          if(!m_preventDisconnectPageTitleChanged)
hgs
parents:
diff changeset
   266
            disconnectPageTitleChanged();
hgs
parents:
diff changeset
   267
          m_preventDisconnectPageTitleChanged = true;
hgs
parents:
diff changeset
   268
          m_preventConnectPageTitleChanged = false;
hgs
parents:
diff changeset
   269
      }
hgs
parents:
diff changeset
   270
      else {
hgs
parents:
diff changeset
   271
          if(!m_preventConnectPageTitleChanged)
hgs
parents:
diff changeset
   272
            connectPageTitleChanged();
hgs
parents:
diff changeset
   273
          m_preventDisconnectPageTitleChanged = false;
hgs
parents:
diff changeset
   274
          m_preventConnectPageTitleChanged = true;
hgs
parents:
diff changeset
   275
      }
hgs
parents:
diff changeset
   276
      if(m_state & active) {
hgs
parents:
diff changeset
   277
          setTitle(newView->title());
hgs
parents:
diff changeset
   278
      }
hgs
parents:
diff changeset
   279
  }
hgs
parents:
diff changeset
   280
hgs
parents:
diff changeset
   281
  ViewController *BrowserWindow::viewController() {
hgs
parents:
diff changeset
   282
    ViewStack *viewStack = ViewStack::getSingleton();
hgs
parents:
diff changeset
   283
    if(viewStack) {
hgs
parents:
diff changeset
   284
        return viewStack->getViewController();
hgs
parents:
diff changeset
   285
    }
hgs
parents:
diff changeset
   286
hgs
parents:
diff changeset
   287
    return 0;
hgs
parents:
diff changeset
   288
  }
hgs
parents:
diff changeset
   289
hgs
parents:
diff changeset
   290
  void BrowserWindow::connectPageTitleChanged() {
hgs
parents:
diff changeset
   291
      connect(m_page->mainFrame(), SIGNAL(titleChanged(const QString &)),
hgs
parents:
diff changeset
   292
              this, SLOT(onPageTitleChanged(const QString &)));
hgs
parents:
diff changeset
   293
  }
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
  void BrowserWindow::disconnectPageTitleChanged() {
hgs
parents:
diff changeset
   296
      disconnect(m_page->mainFrame(), SIGNAL(titleChanged(const QString &)),
hgs
parents:
diff changeset
   297
              this, SLOT(onPageTitleChanged(const QString &)));
hgs
parents:
diff changeset
   298
  }
hgs
parents:
diff changeset
   299
  
hgs
parents:
diff changeset
   300
  
hgs
parents:
diff changeset
   301
   void BrowserWindow::toggleNormalFullScreen() {
hgs
parents:
diff changeset
   302
      m_changingMode = true;
hgs
parents:
diff changeset
   303
hgs
parents:
diff changeset
   304
      // Block paint updates while switching modes.  This avoids ugly flicker in toolbar.
hgs
parents:
diff changeset
   305
      setUpdatesEnabled(false);
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
      if(isFullScreen())
hgs
parents:
diff changeset
   308
          showNormal();
hgs
parents:
diff changeset
   309
      else {
hgs
parents:
diff changeset
   310
          // Show full screen unless it's showing a super page: bookmarks, histroy etc. should always
hgs
parents:
diff changeset
   311
          // be in normal mode.
hgs
parents:
diff changeset
   312
          if(!m_windows->contentView()->currentPageIsSuperPage()) {
hgs
parents:
diff changeset
   313
              showFullScreen();
hgs
parents:
diff changeset
   314
          }
hgs
parents:
diff changeset
   315
      }
hgs
parents:
diff changeset
   316
      // Un-block updates.
hgs
parents:
diff changeset
   317
      setUpdatesEnabled(true);
hgs
parents:
diff changeset
   318
  }
hgs
parents:
diff changeset
   319
  
hgs
parents:
diff changeset
   320
  #ifdef Q_WS_MAEMO_5
hgs
parents:
diff changeset
   321
  // Tell the system we want to handle volume key events (or not).
hgs
parents:
diff changeset
   322
  void BrowserWindow::grabZoomKeys(bool grab)
hgs
parents:
diff changeset
   323
  {
hgs
parents:
diff changeset
   324
      if (!winId()) {
hgs
parents:
diff changeset
   325
          qWarning("Can't grab keys unless we have a window id");
hgs
parents:
diff changeset
   326
          return;
hgs
parents:
diff changeset
   327
      }
hgs
parents:
diff changeset
   328
hgs
parents:
diff changeset
   329
      unsigned long val = (grab) ? 1 : 0;
hgs
parents:
diff changeset
   330
      Atom atom = XInternAtom(QX11Info::display(), "_HILDON_ZOOM_KEY_ATOM", False);
hgs
parents:
diff changeset
   331
      if (!atom) {
hgs
parents:
diff changeset
   332
          qWarning("Unable to obtain _HILDON_ZOOM_KEY_ATOM. This example will only work "
hgs
parents:
diff changeset
   333
                   "on a Maemo 5 device!");
hgs
parents:
diff changeset
   334
          return;
hgs
parents:
diff changeset
   335
      }
hgs
parents:
diff changeset
   336
hgs
parents:
diff changeset
   337
      XChangeProperty (QX11Info::display(),
hgs
parents:
diff changeset
   338
              winId(),
hgs
parents:
diff changeset
   339
              atom,
hgs
parents:
diff changeset
   340
              XA_INTEGER,
hgs
parents:
diff changeset
   341
              32,
hgs
parents:
diff changeset
   342
              PropModeReplace,
hgs
parents:
diff changeset
   343
              reinterpret_cast<unsigned char *>(&val),
hgs
parents:
diff changeset
   344
              1);
hgs
parents:
diff changeset
   345
  }
hgs
parents:
diff changeset
   346
hgs
parents:
diff changeset
   347
  void BrowserWindow::keyPressEvent(QKeyEvent* event)
hgs
parents:
diff changeset
   348
  {
hgs
parents:
diff changeset
   349
      switch (event->key()) {
hgs
parents:
diff changeset
   350
      case Qt::Key_F7:
hgs
parents:
diff changeset
   351
          {
hgs
parents:
diff changeset
   352
              // Handle "volume down" key by triggering zoom-in.
hgs
parents:
diff changeset
   353
              ControllableViewBase *view = m_chrome->getView("WebView");
hgs
parents:
diff changeset
   354
              if(view) {
hgs
parents:
diff changeset
   355
                  view->triggerAction("ZoomIn");
hgs
parents:
diff changeset
   356
              }
hgs
parents:
diff changeset
   357
              event->accept();
hgs
parents:
diff changeset
   358
          }
hgs
parents:
diff changeset
   359
          break;
hgs
parents:
diff changeset
   360
hgs
parents:
diff changeset
   361
      case Qt::Key_F8:
hgs
parents:
diff changeset
   362
          {
hgs
parents:
diff changeset
   363
              // Handle "volume up" key by triggering zoom-out.
hgs
parents:
diff changeset
   364
              ControllableViewBase *view = m_chrome->getView("WebView");
hgs
parents:
diff changeset
   365
              if(view) {
hgs
parents:
diff changeset
   366
                  view->triggerAction("ZoomOut");
hgs
parents:
diff changeset
   367
              }
hgs
parents:
diff changeset
   368
              event->accept();
hgs
parents:
diff changeset
   369
          }
hgs
parents:
diff changeset
   370
          break;
hgs
parents:
diff changeset
   371
      }
hgs
parents:
diff changeset
   372
      QWidget::keyPressEvent(event);
hgs
parents:
diff changeset
   373
  }
hgs
parents:
diff changeset
   374
#endif
hgs
parents:
diff changeset
   375
};