summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/common/gtk_util.cc17
-rw-r--r--chrome/common/render_messages.h4
-rw-r--r--chrome/common/renderer_preferences.h7
-rw-r--r--chrome/renderer/render_view.cc1
-rw-r--r--webkit/glue/webview.h1
-rw-r--r--webkit/glue/webview_impl.cc5
-rw-r--r--webkit/glue/webview_impl.h1
7 files changed, 35 insertions, 1 deletions
diff --git a/chrome/common/gtk_util.cc b/chrome/common/gtk_util.cc
index e026877..92a6676 100644
--- a/chrome/common/gtk_util.cc
+++ b/chrome/common/gtk_util.cc
@@ -354,11 +354,19 @@ GtkWidget* IndentWidget(GtkWidget* content) {
void InitRendererPrefsFromGtkSettings(RendererPreferences* prefs) {
DCHECK(prefs);
+ // From http://library.gnome.org/devel/gtk/unstable/GtkSettings.html, this is
+ // the default value for gtk-cursor-blink-time.
+ static const gint kGtkDefaultCursorBlinkTime = 1200;
+
+ gint cursor_blink_time = kGtkDefaultCursorBlinkTime;
+ gboolean cursor_blink = TRUE;
gint antialias = 0;
gint hinting = 0;
gchar* hint_style = NULL;
gchar* rgba_style = NULL;
g_object_get(gtk_settings_get_default(),
+ "gtk-cursor-blink-time", &cursor_blink_time,
+ "gtk-cursor-blink", &cursor_blink,
"gtk-xft-antialias", &antialias,
"gtk-xft-hinting", &hinting,
"gtk-xft-hintstyle", &hint_style,
@@ -371,6 +379,15 @@ void InitRendererPrefsFromGtkSettings(RendererPreferences* prefs) {
prefs->subpixel_rendering =
RENDERER_PREFERENCES_SUBPIXEL_RENDERING_SYSTEM_DEFAULT;
+ if (cursor_blink) {
+ // Dividing by 2*1000ms follows the WebKit GTK port and makes the blink
+ // frequency appear similar to the omnibox. Without this the blink is too
+ // slow.
+ prefs->caret_blink_interval = cursor_blink_time / 2000.;
+ } else {
+ prefs->caret_blink_interval = 0;
+ }
+
// g_object_get() doesn't tell us whether the properties were present or not,
// but if they aren't (because gnome-settings-daemon isn't running), we'll get
// NULL values for the strings.
diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h
index e06838b..826d045 100644
--- a/chrome/common/render_messages.h
+++ b/chrome/common/render_messages.h
@@ -1579,6 +1579,7 @@ struct ParamTraits<RendererPreferences> {
WriteParam(m, p.focus_ring_color_g);
WriteParam(m, p.focus_ring_color_b);
WriteParam(m, p.browser_handles_top_level_requests);
+ WriteParam(m, p.caret_blink_interval);
}
static bool Read(const Message* m, void** iter, param_type* p) {
if (!ReadParam(m, iter, &p->can_accept_load_drops))
@@ -1616,6 +1617,9 @@ struct ParamTraits<RendererPreferences> {
if (!ReadParam(m, iter, &p->browser_handles_top_level_requests))
return false;
+ if (!ReadParam(m, iter, &p->caret_blink_interval))
+ return false;
+
return true;
}
static void Log(const param_type& p, std::wstring* l) {
diff --git a/chrome/common/renderer_preferences.h b/chrome/common/renderer_preferences.h
index fcdc273..ca14e3f 100644
--- a/chrome/common/renderer_preferences.h
+++ b/chrome/common/renderer_preferences.h
@@ -51,9 +51,14 @@ struct RendererPreferences {
int focus_ring_color_g;
int focus_ring_color_b;
- // Browser wants a look at all top level requests
+ // Browser wants a look at all top level requests.
bool browser_handles_top_level_requests;
+ // Cursor blink rate in seconds.
+ // Currently only changed from default on Linux. Uses |gtk-cursor-blink|
+ // from GtkSettings.
+ double caret_blink_interval;
+
RendererPreferences()
: can_accept_load_drops(true),
should_antialias_text(true),
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index e99f961..7fdd4b6 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -2886,6 +2886,7 @@ void RenderView::OnSetRendererPrefs(const RendererPreferences& renderer_prefs) {
webview()->SetThemeFocusRingColor(renderer_prefs.focus_ring_color_r,
renderer_prefs.focus_ring_color_g,
renderer_prefs.focus_ring_color_b);
+ webview()->SetCaretBlinkInterval(renderer_prefs.caret_blink_interval);
#endif
}
diff --git a/webkit/glue/webview.h b/webkit/glue/webview.h
index db4e6fb..bdba127 100644
--- a/webkit/glue/webview.h
+++ b/webkit/glue/webview.h
@@ -260,6 +260,7 @@ class WebView : public WebKit::WebWidget {
#if defined(OS_LINUX)
virtual void SetThemeFocusRingColor(int r, int g, int b) = 0;
+ virtual void SetCaretBlinkInterval(double interval) = 0;
#endif
private:
diff --git a/webkit/glue/webview_impl.cc b/webkit/glue/webview_impl.cc
index effb17d..c79b831 100644
--- a/webkit/glue/webview_impl.cc
+++ b/webkit/glue/webview_impl.cc
@@ -1809,6 +1809,11 @@ void WebViewImpl::SetThemeFocusRingColor(int r, int g, int b) {
reinterpret_cast<RenderThemeChromiumLinux*>(theme())->
setFocusRingColor(Color(r, g, b));
}
+
+void WebViewImpl::SetCaretBlinkInterval(double interval) {
+ reinterpret_cast<RenderThemeChromiumLinux*>(theme())->
+ setCaretBlinkInterval(interval);
+}
#endif
void WebViewImpl::DidCommitLoad(bool* is_new_navigation) {
diff --git a/webkit/glue/webview_impl.h b/webkit/glue/webview_impl.h
index 7bc66e9..a1710f1 100644
--- a/webkit/glue/webview_impl.h
+++ b/webkit/glue/webview_impl.h
@@ -155,6 +155,7 @@ class WebViewImpl : public WebView, public base::RefCounted<WebViewImpl> {
virtual bool IsActive();
#if defined(OS_LINUX)
virtual void SetThemeFocusRingColor(int r, int g, int b);
+ virtual void SetCaretBlinkInterval(double interval);
#endif
// WebViewImpl