Changeset 23545 in webkit
- Timestamp:
- Jun 14, 2007 7:31:55 PM (17 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r23539 r23545 1 2007-06-14 George Staikos <staikos@kde.org> 2 3 Reviewed by Lars. 4 5 Implement missing tab support and a slight refactor. 6 7 * platform/qt/PlatformKeyboardEventQt.cpp: 8 (WebCore::keyIdentifierForQtKeyCode): 9 (WebCore::windowsKeyCodeForKeyEvent): 10 (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): 11 1 12 2007-06-14 Dave Hyatt <hyatt@apple.com> 2 13 -
trunk/WebCore/platform/qt/PlatformKeyboardEventQt.cpp
r21445 r23545 126 126 case Qt::Key_Delete: 127 127 return "U+007F"; 128 case Qt::Key_Tab: 129 return "U+0009"; 130 case Qt::Key_Backtab: 131 return "U+0009"; 128 132 default: 129 133 return String::format("U+%04X", toupper(keyCode)); … … 169 173 case Qt::Key_Backspace: 170 174 return VK_BACK; // (08) BACKSPACE key 175 case Qt::Key_Backtab: 171 176 case Qt::Key_Tab: 172 177 return VK_TAB; // (09) TAB key … … 428 433 PlatformKeyboardEvent::PlatformKeyboardEvent(QKeyEvent* event, bool isKeyUp) 429 434 { 435 const int state = event->modifiers(); 430 436 m_text = event->text(); 431 437 m_unmodifiedText = event->text(); // FIXME: not correct … … 433 439 m_isKeyUp = isKeyUp; 434 440 m_autoRepeat = event->isAutoRepeat(); 441 m_ctrlKey = (state & Qt::ControlModifier) != 0; 442 m_altKey = (state & Qt::AltModifier) != 0; 443 m_metaKey = (state & Qt::MetaModifier) != 0; 435 444 m_WindowsKeyCode = windowsKeyCodeForKeyEvent(event->key()); 436 m_isKeypad = (event->modifiers() & Qt::KeypadModifier) != 0; 437 m_shiftKey = (event->modifiers() & Qt::ShiftModifier) != 0; 438 m_ctrlKey = (event->modifiers() & Qt::ControlModifier) != 0; 439 m_altKey = (event->modifiers() & Qt::AltModifier) != 0; 440 m_metaKey = (event->modifiers() & Qt::MetaModifier) != 0; 445 m_isKeypad = (state & Qt::KeypadModifier) != 0; 446 m_shiftKey = (state & Qt::ShiftModifier) != 0 || event->key() == Qt::Key_Backtab; // Simulate Shift+Tab with Key_Backtab 441 447 } 442 448 -
trunk/WebKitQt/Api/qwebframe.cpp
r22027 r23545 26 26 #include "qwebframe_p.h" 27 27 28 #include "FocusController.h" 28 29 #include "FrameLoaderClientQt.h" 29 30 #include "Frame.h" … … 37 38 #include "PlatformWheelEvent.h" 38 39 #include "ResourceRequest.h" 40 #include "SelectionController.h" 39 41 40 42 #include "markup.h" … … 52 54 #include "wtf/HashMap.h" 53 55 56 #include <qdebug.h> 57 #include <qevent.h> 54 58 #include <qpainter.h> 55 #include <qevent.h>56 59 #include <qscrollbar.h> 57 #include <qdebug.h>58 60 59 61 using namespace WebCore; … … 67 69 q->setFrameShape(QFrame::NoFrame); 68 70 q->setMouseTracking(true); 69 q->setFocusPolicy(Qt:: StrongFocus);71 q->setFocusPolicy(Qt::ClickFocus); 70 72 q->verticalScrollBar()->setSingleStep(20); 71 73 q->horizontalScrollBar()->setSingleStep(20); … … 97 99 vbar->setRange(0, docSize.height() - viewportSize.height()); 98 100 vbar->setPageStep(viewportSize.height()); 99 }100 101 void QWebFramePrivate::_q_handleKeyEvent(QKeyEvent *ev, bool isKeyUp)102 {103 PlatformKeyboardEvent kevent(ev, isKeyUp);104 105 if (!eventHandler)106 return;107 108 bool handled = eventHandler->keyEvent(kevent);109 110 ev->setAccepted(handled);111 101 } 112 102 … … 284 274 return; 285 275 286 d->eventHandler->handleMousePressEvent(PlatformMouseEvent(ev, 1)); 276 if (ev->button() == Qt::RightButton) 277 d->eventHandler->sendContextMenuEvent(PlatformMouseEvent(ev, 1)); 278 else d->eventHandler->handleMousePressEvent(PlatformMouseEvent(ev, 1)); 279 setFocus(); 287 280 } 288 281 … … 293 286 294 287 d->eventHandler->handleMouseReleaseEvent(PlatformMouseEvent(ev, 0)); 288 setFocus(); 295 289 } 296 290 … … 305 299 if (!accepted) 306 300 QAbstractScrollArea::wheelEvent(e); 301 setFocus(); 307 302 } 308 303 309 304 void QWebFrame::keyPressEvent(QKeyEvent *ev) 310 305 { 311 d->_q_handleKeyEvent(ev, false); 306 PlatformKeyboardEvent kevent(ev, false); 307 308 if (!d->eventHandler) 309 return; 310 311 bool handled = d->eventHandler->keyEvent(kevent); 312 if (handled) { 313 } else { 314 handled = true; 315 QScrollBar *h, *v; 316 h = horizontalScrollBar(); 317 v = verticalScrollBar(); 318 switch (ev->key()) { 319 case Qt::Key_Up: 320 v->setValue(v->value() - 10); 321 viewport()->update(); 322 break; 323 case Qt::Key_Down: 324 v->setValue(v->value() + 10); 325 viewport()->update(); 326 break; 327 case Qt::Key_Left: 328 h->setValue(h->value() - 10); 329 viewport()->update(); 330 break; 331 case Qt::Key_Right: 332 h->setValue(h->value() + 10); 333 viewport()->update(); 334 break; 335 case Qt::Key_PageUp: 336 v->setValue(v->value() - viewport()->height()); 337 viewport()->update(); 338 break; 339 case Qt::Key_PageDown: 340 v->setValue(v->value() + viewport()->height()); 341 viewport()->update(); 342 break; 343 default: 344 handled = false; 345 break; 346 } 347 } 348 349 ev->setAccepted(handled); 312 350 } 313 351 314 352 void QWebFrame::keyReleaseEvent(QKeyEvent *ev) 315 353 { 316 d->_q_handleKeyEvent(ev, true); 354 if (ev->isAutoRepeat()) { 355 ev->setAccepted(true); 356 return; 357 } 358 359 PlatformKeyboardEvent kevent(ev, true); 360 361 if (!d->eventHandler) 362 return; 363 364 bool handled = d->eventHandler->keyEvent(kevent); 365 ev->setAccepted(handled); 366 } 367 368 void QWebFrame::focusInEvent(QFocusEvent *e) 369 { 370 if (e->reason() != Qt::PopupFocusReason) { 371 d->frame->page()->focusController()->setFocusedFrame(d->frame); 372 d->frame->setIsActive(true); 373 } 374 QAbstractScrollArea::focusInEvent(e); 375 } 376 377 void QWebFrame::focusOutEvent(QFocusEvent *e) 378 { 379 QAbstractScrollArea::focusOutEvent(e); 380 if (e->reason() != Qt::PopupFocusReason) { 381 d->frame->selectionController()->clear(); 382 d->frame->setIsActive(false); 383 } 384 } 385 386 bool QWebFrame::focusNextPrevChild(bool next) 387 { 388 Q_UNUSED(next) 389 return false; 317 390 } 318 391 … … 323 396 viewport()->scroll(dx, dy); 324 397 } 398 -
trunk/WebKitQt/Api/qwebframe.h
r21180 r23545 73 73 virtual void keyReleaseEvent(QKeyEvent*); 74 74 virtual void scrollContentsBy(int dx, int dy); 75 virtual void focusInEvent(QFocusEvent *e); 76 virtual void focusOutEvent(QFocusEvent *e); 77 virtual bool focusNextPrevChild(bool next); 75 78 76 79 private: -
trunk/WebKitQt/Api/qwebframe_p.h
r19823 r23545 73 73 74 74 void _q_adjustScrollbars(); 75 void _q_handleKeyEvent(QKeyEvent *ev, bool isKeyUp);76 75 77 76 QWebFrame *q; -
trunk/WebKitQt/ChangeLog
r23528 r23545 1 2007-06-14 George Staikos <staikos@kde.org> 2 3 Reviewed by Lars. 4 5 Implement most of the editing commands, better focus handling, fix some 6 keyboard and mouse handling, and add keyboard navigation. May be 7 refactored later as the key switches are ugly. 8 9 * Api/qwebframe.cpp: 10 (QWebFramePrivate::init): 11 (QWebFrame::mousePressEvent): 12 (QWebFrame::mouseReleaseEvent): 13 (QWebFrame::wheelEvent): 14 (QWebFrame::keyPressEvent): 15 (QWebFrame::keyReleaseEvent): 16 (QWebFrame::focusInEvent): 17 (QWebFrame::focusOutEvent): 18 (QWebFrame::focusNextPrevChild): 19 * Api/qwebframe.h: 20 * Api/qwebframe_p.h: 21 * WebCoreSupport/EditorClientQt.cpp: 22 (WebCore::EditorClientQt::handleKeypress): 23 1 24 2007-06-14 George Staikos <staikos@kde.org> 2 25 -
trunk/WebKitQt/WebCoreSupport/EditorClientQt.cpp
r21827 r23545 34 34 #include "qwebpage_p.h" 35 35 36 #include "Document.h" 36 37 #include "EditCommandQt.h" 37 38 #include "Editor.h" … … 217 218 { 218 219 Frame* frame = m_page->d->page->focusController()->focusedOrMainFrame(); 219 if (!frame )220 if (!frame || !frame->document()->focusedNode()) 220 221 return; 221 222 222 223 const PlatformKeyboardEvent* kevent = event->keyEvent(); 223 if (kevent && !kevent->isKeyUp()) { 224 Node* start = frame->selectionController()->start().node(); 225 if (start && start->isContentEditable()) { 226 switch(kevent->WindowsKeyCode()) { 224 if (kevent->isKeyUp()) 225 return; 226 227 Node* start = frame->selectionController()->start().node(); 228 if (!start) 229 return; 230 231 // FIXME: refactor all of this to use Actions or something like them 232 if (start->isContentEditable()) { 233 switch(kevent->WindowsKeyCode()) { 234 case VK_RETURN: 235 frame->editor()->execCommand("InsertLineBreak"); 236 break; 227 237 case VK_BACK: 228 238 frame->editor()->deleteWithDirection(SelectionController::BACKWARD, 229 239 CharacterGranularity, false, true); 230 240 break; 231 241 case VK_DELETE: 232 242 frame->editor()->deleteWithDirection(SelectionController::FORWARD, 233 243 CharacterGranularity, false, true); 234 244 break; 235 245 case VK_LEFT: … … 253 263 else frame->editor()->execCommand("MoveDown"); 254 264 break; 255 case VK_RETURN: 256 frame->editor()->insertLineBreak(); 257 break; 265 case VK_PRIOR: // PageUp 266 frame->editor()->execCommand("MoveUpByPageAndModifyCaret"); 267 break; 268 case VK_NEXT: // PageDown 269 frame->editor()->execCommand("MoveDownByPageAndModifyCaret"); 270 break; 271 case VK_TAB: 272 return; 258 273 default: 259 if (!kevent->ctrlKey() && !kevent->altKey() )274 if (!kevent->ctrlKey() && !kevent->altKey() && !kevent->text().isEmpty()) { 260 275 frame->editor()->insertText(kevent->text(), event); 261 } 262 event->setDefaultHandled(); 276 } else if (kevent->ctrlKey()) { 277 switch (kevent->WindowsKeyCode()) { 278 case VK_A: 279 frame->editor()->execCommand("SelectAll"); 280 break; 281 case VK_B: 282 frame->editor()->execCommand("ToggleBold"); 283 break; 284 case VK_C: 285 frame->editor()->execCommand("Copy"); 286 break; 287 case VK_I: 288 frame->editor()->execCommand("ToggleItalic"); 289 break; 290 case VK_V: 291 frame->editor()->execCommand("Paste"); 292 break; 293 case VK_X: 294 frame->editor()->execCommand("Cut"); 295 break; 296 case VK_Y: 297 frame->editor()->execCommand("Redo"); 298 break; 299 case VK_Z: 300 frame->editor()->execCommand("Undo"); 301 break; 302 default: 303 return; 304 } 305 } else return; 306 } 307 } else { 308 switch (kevent->WindowsKeyCode()) { 309 case VK_UP: 310 frame->editor()->execCommand("MoveUp"); 311 break; 312 case VK_DOWN: 313 frame->editor()->execCommand("MoveDown"); 314 break; 315 case VK_PRIOR: // PageUp 316 frame->editor()->execCommand("MoveUpByPageAndModifyCaret"); 317 break; 318 case VK_NEXT: // PageDown 319 frame->editor()->execCommand("MoveDownByPageAndModifyCaret"); 320 break; 321 case VK_HOME: 322 if (kevent->ctrlKey()) 323 frame->editor()->execCommand("MoveToBeginningOfDocument"); 324 break; 325 case VK_END: 326 if (kevent->ctrlKey()) 327 frame->editor()->execCommand("MoveToEndOfDocument"); 328 break; 329 default: 330 if (kevent->ctrlKey()) { 331 switch(kevent->WindowsKeyCode()) { 332 case VK_A: 333 frame->editor()->execCommand("SelectAll"); 334 break; 335 case VK_C: case VK_X: 336 frame->editor()->execCommand("Copy"); 337 break; 338 default: 339 return; 340 } 341 } else return; 263 342 } 264 343 } 344 event->setDefaultHandled(); 265 345 } 266 346
Note: See TracChangeset
for help on using the changeset viewer.