73 } |
78 } |
74 return 0; |
79 return 0; |
75 } |
80 } |
76 |
81 |
77 /*! |
82 /*! |
78 Filter class' constructor. |
83 This is the main event handler that processes all incoming events in an |
|
84 appropriate manner. |
79 */ |
85 */ |
80 NmEventFilterWK::NmEventFilterWK(QObject* parent) |
86 bool NmMailViewerWK::event(QEvent* event) |
81 : QObject(parent) |
|
82 { |
87 { |
83 } |
|
84 |
|
85 /* |
|
86 Filters events if this object has been installed as an event filter. |
|
87 */ |
|
88 bool NmEventFilterWK::eventFilter(QObject* object, QEvent* event) { |
|
89 Q_UNUSED(object); |
|
90 bool consumed = false; |
88 bool consumed = false; |
91 if (event) { |
89 if (event) { |
92 switch (event->type()) { |
90 switch (event->type()) { |
93 case QEvent::Gesture: |
91 case QEvent::Gesture: |
94 consumed = gestureEvent(static_cast<QGestureEvent*>(event)); |
92 // Handle gesture events. |
95 break; |
93 gestureEvent(static_cast<QGestureEvent*>(event)); |
96 case QEvent::GraphicsSceneMouseDoubleClick: |
94 consumed = event->isAccepted(); |
97 // Handle double click (instant zoom). |
|
98 // At the moment we simply consume the event. |
|
99 event->accept(); |
|
100 consumed = true; |
|
101 break; |
95 break; |
102 case QEvent::GraphicsSceneContextMenu: |
96 case QEvent::GraphicsSceneContextMenu: |
103 case QEvent::GraphicsSceneMouseMove: |
97 // Handle context-menu events. |
104 event->accept(); |
98 // contextMenuEvent() is invoked directly in order to override |
105 consumed = true; |
99 // text selection in QWebPage. |
|
100 contextMenuEvent(static_cast<QGraphicsSceneContextMenuEvent*>(event)); |
|
101 consumed = event->isAccepted(); |
106 break; |
102 break; |
107 default: |
103 default: |
|
104 // Invoke base class' event handler. |
|
105 consumed = QGraphicsWebView::event(event); |
108 break; |
106 break; |
109 } |
107 } |
110 } |
108 } |
111 return consumed; |
109 return consumed; |
112 } |
110 } |
113 |
111 |
114 /*! |
112 /*! |
115 Handles gesture events. This function is invoked by the eventFilter() |
113 Handles context-menu events. |
116 function in case of gesture events. |
|
117 */ |
114 */ |
118 bool NmEventFilterWK::gestureEvent(QGestureEvent* event) { |
115 void NmMailViewerWK::contextMenuEvent(QGraphicsSceneContextMenuEvent* event) |
119 bool consumed = false; |
116 { |
120 if (event) { |
117 if (event) { |
|
118 // Suppress context-menu invocations. |
|
119 event->accept(); |
|
120 } |
|
121 } |
|
122 |
|
123 /*! |
|
124 Handles gesture events. |
|
125 */ |
|
126 void NmMailViewerWK::gestureEvent(QGestureEvent* event) |
|
127 { |
|
128 if (event) { |
|
129 if (QTapGesture* tap = static_cast<QTapGesture*>(event->gesture(Qt::TapGesture))) { |
|
130 switch (tap->state()) { |
|
131 case Qt::GestureCanceled: |
|
132 // Tap cancellation suppresses the following mouse release. |
|
133 mSuppressRelease = true; |
|
134 break; |
|
135 default: |
|
136 // Other states disclose the following mouse release. |
|
137 mSuppressRelease = false; |
|
138 break; |
|
139 } |
|
140 event->accept(); |
|
141 } |
121 if (QPinchGesture* pinch = static_cast<QPinchGesture*>(event->gesture(Qt::PinchGesture))) { |
142 if (QPinchGesture* pinch = static_cast<QPinchGesture*>(event->gesture(Qt::PinchGesture))) { |
122 // Handle pinch (zoom). |
143 // Handle pinch (zoom). |
123 // At the moment we simply consume the event. |
144 // At the moment we simply consume the event. |
124 event->accept(); |
145 event->accept(); |
125 consumed = true; |
|
126 } |
146 } |
127 } |
147 } |
128 return consumed; |
|
129 } |
148 } |
|
149 |
|
150 /*! |
|
151 Handles double-click events. |
|
152 */ |
|
153 void NmMailViewerWK::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) |
|
154 { |
|
155 if (event) { |
|
156 // Handle double clicks (instant zoom). |
|
157 // At the moment we simply consume the event. |
|
158 event->accept(); |
|
159 } |
|
160 } |
|
161 |
|
162 /*! |
|
163 Handles mouse-move events. |
|
164 */ |
|
165 void NmMailViewerWK::mouseMoveEvent(QGraphicsSceneMouseEvent* event) |
|
166 { |
|
167 if (event) { |
|
168 // Suppress drag selection. |
|
169 event->accept(); |
|
170 } |
|
171 } |
|
172 |
|
173 /*! |
|
174 Handles mouse-release events. |
|
175 */ |
|
176 void NmMailViewerWK::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) |
|
177 { |
|
178 if (event) { |
|
179 // Suppress mouse release if the previous tap was cancelled. |
|
180 // Otherwise, invoke the base class' event handler. |
|
181 if (mSuppressRelease) { |
|
182 event->accept(); |
|
183 } else { |
|
184 QGraphicsWebView::mouseReleaseEvent(event); |
|
185 } |
|
186 } |
|
187 } |