diff options
-rw-r--r-- | chrome/common/gtk_util.cc | 17 | ||||
-rw-r--r-- | chrome/common/render_messages.h | 4 | ||||
-rw-r--r-- | chrome/common/renderer_preferences.h | 7 | ||||
-rw-r--r-- | chrome/renderer/render_view.cc | 1 | ||||
-rw-r--r-- | webkit/glue/webview.h | 1 | ||||
-rw-r--r-- | webkit/glue/webview_impl.cc | 5 | ||||
-rw-r--r-- | webkit/glue/webview_impl.h | 1 |
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 |