diff options
author | Pierre Rossi <pierre.rossi@digia.com> | 2013-05-28 19:02:16 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2013-05-31 10:55:54 +0200 |
commit | e0107a4e51deafed502196e60497ce99220f10d8 (patch) | |
tree | 994f29419dac691cc342600dbe4c9478c8a07825 | |
parent | 26e8cf4c89e1851047e8e67c8cd69d43a94f3a15 (diff) |
Get a blinking cursor in input elements
Handle focus events and do some slighly evil stuff in shell_qt.cpp
to set the cursor_blink_interval
-rw-r--r-- | lib/render_widget_host_view_qt.cpp | 22 | ||||
-rw-r--r-- | lib/render_widget_host_view_qt.h | 4 | ||||
-rw-r--r-- | lib/shell_qt.cpp | 16 |
3 files changed, 36 insertions, 6 deletions
diff --git a/lib/render_widget_host_view_qt.cpp b/lib/render_widget_host_view_qt.cpp index 6d5254daf..266cddf4f 100644 --- a/lib/render_widget_host_view_qt.cpp +++ b/lib/render_widget_host_view_qt.cpp @@ -10,8 +10,9 @@ #include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h" #include <QEvent> -#include <QMouseEvent> +#include <QFocusEvent> #include <QKeyEvent> +#include <QMouseEvent> #include <QWheelEvent> #include <QScreen> @@ -73,6 +74,11 @@ bool RenderWidgetHostViewQt::handleEvent(QEvent* event) { break; case QEvent::Wheel: handleWheelEvent(static_cast<QWheelEvent*>(event)); + break; + case QEvent::FocusIn: + case QEvent::FocusOut: + handleFocusEvent(static_cast<QFocusEvent*>(event)); + break; default: return false; } @@ -300,6 +306,7 @@ void RenderWidgetHostViewQt::ImeCancelComposition() void RenderWidgetHostViewQt::ImeCompositionRangeChanged(const ui::Range&, const std::vector<gfx::Rect>&) { // FIXME: not implemented? + QT_NOT_YET_IMPLEMENTED } void RenderWidgetHostViewQt::DidUpdateBackingStore(const gfx::Rect& scroll_rect, const gfx::Vector2d& scroll_delta, const std::vector<gfx::Rect>& copy_rects) @@ -459,5 +466,18 @@ void RenderWidgetHostViewQt::handleWheelEvent(QWheelEvent *ev) m_host->ForwardWheelEvent(WebEventFactory::toWebWheelEvent(ev)); } +void RenderWidgetHostViewQt::handleFocusEvent(QFocusEvent *ev) +{ + if (ev->gotFocus()) { + m_host->GotFocus(); + m_host->SetActive(true); + ev->accept(); + } else if (ev->lostFocus()) { + m_host->SetActive(false); + m_host->Blur(); + ev->accept(); + } +} + } diff --git a/lib/render_widget_host_view_qt.h b/lib/render_widget_host_view_qt.h index bfb34bbd6..44961d95b 100644 --- a/lib/render_widget_host_view_qt.h +++ b/lib/render_widget_host_view_qt.h @@ -4,8 +4,9 @@ #include "content/browser/renderer_host/render_widget_host_view_base.h" class QEvent; -class QMouseEvent; +class QFocusEvent; class QKeyEvent; +class QMouseEvent; class QWheelEvent; class RasterWindow; @@ -86,6 +87,7 @@ private: void handleMouseEvent(QMouseEvent*); void handleKeyEvent(QKeyEvent*); void handleWheelEvent(QWheelEvent*); + void handleFocusEvent(QFocusEvent*); content::RenderWidgetHostImpl *m_host; RasterWindow *m_view; diff --git a/lib/shell_qt.cpp b/lib/shell_qt.cpp index 4c5557857..d144375f8 100644 --- a/lib/shell_qt.cpp +++ b/lib/shell_qt.cpp @@ -12,6 +12,7 @@ #include "base/utf_string_conversions.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/native_web_keyboard_event.h" +#include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" #include "content/public/common/renderer_preferences.h" #include "content/shell/shell_browser_context.h" @@ -20,12 +21,13 @@ #include "signal_connector.h" #include "web_contents_view_qt.h" -#include <QWindow> -#include <QLineEdit> -#include <QWidget> -#include <QVBoxLayout> +#include <QApplication> #include <QHBoxLayout> +#include <QVBoxLayout> +#include <QLineEdit> #include <QToolButton> +#include <QWidget> +#include <QWindow> namespace content { @@ -139,6 +141,12 @@ void Shell::PlatformSetContents() if (headless_) return; + content::RendererPreferences* rendererPrefs = web_contents_->GetMutableRendererPrefs(); + rendererPrefs->use_custom_colors = true; + // Qt returns a flash time (the whole cycle) in ms, chromium expects just the interval in seconds + rendererPrefs->caret_blink_interval = static_cast<double>(qApp->cursorFlashTime())/2000; + web_contents_->GetRenderViewHost()->SyncRendererPrefs(); + WebContentsViewGtk* content_view = static_cast<WebContentsViewGtk*>(web_contents_->GetView()); QVBoxLayout* layout = qobject_cast<QVBoxLayout*>(m_window->layout()); if (layout) |