Index: grr/src/contentwindow.cpp
===================================================================
--- grr.orig/src/contentwindow.cpp	2010-03-15 14:43:47.000000000 +0100
+++ grr/src/contentwindow.cpp	2010-03-15 15:02:34.000000000 +0100
@@ -23,6 +23,9 @@
 			setFlag(QGraphicsItem::ItemClipsToShape, true);
 			setAttribute(Qt::WA_OpaquePaintEvent, true);
 			setFiltersChildEvents(true);
+
+			grabGesture(Qt::PanGesture);
+			grabGesture(Qt::SwipeGesture);
 		}
 
 		void setWidget(QGraphicsWidget *widget) {
@@ -104,9 +107,59 @@
 					resizeWebViewToFrame();
 				}
 				break;
+
+			case Qt::Key_J:
+			case Qt::Key_N:
+				/* TODO: Go to the next item */
+				break;
+
+			case Qt::Key_K:
+			case Qt::Key_P:
+				/* TODO: Go to the previous item */
+				break;
+
+			case Qt::Key_Space:
+				if(e->modifiers() & Qt::ShiftModifier) {
+					/* TODO: Go to the prev page */
+				}
+				else {
+					/* TODO: Go to the next page */
+				}
+				break;
+
+			case Qt::Key_S:
+				if(e->modifiers() & Qt::ShiftModifier) {
+					/* TODO: Toggle shared */
+				}
+				else {
+					/* TODO: Toggle starred */
+				}
+				break;
+
+			case Qt::Key_V:
+				/* TODO: see original */
+				break;
+
+			case Qt::Key_M:
+				/* TODO: mark read/unread */
+				break;
 			}
 		}
 
+		bool sceneEvent(QEvent *e) {
+			if(e->type() == QEvent::Gesture) {
+				QGestureEvent *g = static_cast<QGestureEvent *>(e);
+				if(g->gesture(Qt::SwipeGesture)) {
+					qDebug() << "Swiped!";
+				}
+				else if(g->gesture(Qt::PanGesture)) {
+					qDebug() << "Panned";
+				}
+			}
+
+			return QGraphicsWidget::sceneEvent(e);
+		}
+
 		QSize viewportSize() const {
 			return size().toSize();
 		}
