summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Rossi <pierre.rossi@digia.com>2013-05-28 19:02:16 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2013-05-31 10:55:54 +0200
commite0107a4e51deafed502196e60497ce99220f10d8 (patch)
tree994f29419dac691cc342600dbe4c9478c8a07825
parent26e8cf4c89e1851047e8e67c8cd69d43a94f3a15 (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.cpp22
-rw-r--r--lib/render_widget_host_view_qt.h4
-rw-r--r--lib/shell_qt.cpp16
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)