diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-03 00:06:09 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-03 00:06:09 +0000 |
commit | d3ba7727bab47266a43ba17790be43eaf4c7961f (patch) | |
tree | b796080c822c41b935fde0b37806f64d961abb2d /chrome | |
parent | 15730c45ebf0eb657ba30e19f643bfe1cf299ce7 (diff) | |
download | chromium_src-d3ba7727bab47266a43ba17790be43eaf4c7961f.zip chromium_src-d3ba7727bab47266a43ba17790be43eaf4c7961f.tar.gz chromium_src-d3ba7727bab47266a43ba17790be43eaf4c7961f.tar.bz2 |
Set the focus ring color to match the Gtk theme focus color.
BUG=8540
Review URL: http://codereview.chromium.org/173642
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25278 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/tab_contents/tab_contents.cc | 12 | ||||
-rw-r--r-- | chrome/common/gtk_util.cc | 9 | ||||
-rw-r--r-- | chrome/common/render_messages.h | 18 | ||||
-rw-r--r-- | chrome/common/renderer_preferences.h | 5 | ||||
-rw-r--r-- | chrome/renderer/render_view.cc | 8 |
5 files changed, 50 insertions, 2 deletions
diff --git a/chrome/browser/tab_contents/tab_contents.cc b/chrome/browser/tab_contents/tab_contents.cc index b5b5111..00d313a 100644 --- a/chrome/browser/tab_contents/tab_contents.cc +++ b/chrome/browser/tab_contents/tab_contents.cc @@ -72,6 +72,7 @@ #if defined(OS_LINUX) #include "chrome/browser/gtk/create_application_shortcuts_dialog_gtk.h" +#include "chrome/browser/gtk/gtk_theme_provider.h" #endif // defined(OS_LINUX) // Cross-Site Navigations @@ -290,6 +291,10 @@ TabContents::TabContents(Profile* profile, NotificationService::AllSources()); registrar_.Add(this, NotificationType::RENDER_WIDGET_HOST_DESTROYED, NotificationService::AllSources()); +#if defined(OS_LINUX) + registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED, + NotificationService::AllSources()); +#endif // Keep a global copy of the previous search string (if any). static string16 global_last_search = string16(); @@ -2464,6 +2469,13 @@ void TabContents::Observe(NotificationType type, break; } +#if defined(OS_LINUX) + case NotificationType::BROWSER_THEME_CHANGED: { + render_view_host()->SyncRendererPrefs(); + break; + } +#endif + default: NOTREACHED(); } diff --git a/chrome/common/gtk_util.cc b/chrome/common/gtk_util.cc index 5446a3d..e026877 100644 --- a/chrome/common/gtk_util.cc +++ b/chrome/common/gtk_util.cc @@ -400,6 +400,15 @@ void InitRendererPrefsFromGtkSettings(RendererPreferences* prefs) { } } + static GtkWidget* fixed = gtk_fixed_new(); + GtkStyle* style = gtk_rc_get_style(fixed); + // base[SELECTED] seems more appropriate but in practice it is often too light + // to be easily visible. + GdkColor color = style->bg[GTK_STATE_SELECTED]; + prefs->focus_ring_color_r = color.red / 257; + prefs->focus_ring_color_g = color.green / 257; + prefs->focus_ring_color_b = color.blue / 257; + if (hint_style) g_free(hint_style); if (rgba_style) diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h index 16a2037..adfffed 100644 --- a/chrome/common/render_messages.h +++ b/chrome/common/render_messages.h @@ -1574,6 +1574,9 @@ struct ParamTraits<RendererPreferences> { WriteParam(m, p.should_antialias_text); WriteParam(m, static_cast<int>(p.hinting)); WriteParam(m, static_cast<int>(p.subpixel_rendering)); + WriteParam(m, p.focus_ring_color_r); + WriteParam(m, p.focus_ring_color_g); + WriteParam(m, p.focus_ring_color_b); WriteParam(m, p.browser_handles_top_level_requests); } static bool Read(const Message* m, void** iter, param_type* p) { @@ -1594,6 +1597,21 @@ struct ParamTraits<RendererPreferences> { static_cast<RendererPreferencesSubpixelRenderingEnum>( subpixel_rendering); + int focus_ring_color_r; + if (!ReadParam(m, iter, &focus_ring_color_r)) + return false; + p->focus_ring_color_r = focus_ring_color_r; + + int focus_ring_color_g; + if (!ReadParam(m, iter, &focus_ring_color_g)) + return false; + p->focus_ring_color_g = focus_ring_color_g; + + int focus_ring_color_b; + if (!ReadParam(m, iter, &focus_ring_color_b)) + return false; + p->focus_ring_color_b = focus_ring_color_b; + if (!ReadParam(m, iter, &p->browser_handles_top_level_requests)) return false; diff --git a/chrome/common/renderer_preferences.h b/chrome/common/renderer_preferences.h index 8f94c0d..8d6acd2 100644 --- a/chrome/common/renderer_preferences.h +++ b/chrome/common/renderer_preferences.h @@ -46,6 +46,11 @@ struct RendererPreferences { // Currently only used by Linux. RendererPreferencesSubpixelRenderingEnum subpixel_rendering; + // The color of the focus ring. Currently only used on Linux. + int focus_ring_color_r; + int focus_ring_color_g; + int focus_ring_color_b; + // Browser wants a look at all top level requests bool browser_handles_top_level_requests; diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index e0015e8..54b08ee 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -278,14 +278,14 @@ void RenderView::Init(gfx::NativeViewId parent_hwnd, decrement_shared_popup_at_destruction_ = false; } - OnSetRendererPrefs(renderer_prefs); - devtools_agent_.reset(new DevToolsAgent(routing_id, this)); webwidget_ = WebView::Create(); webkit_preferences_.Apply(webview()); webview()->InitializeMainFrame(this); + OnSetRendererPrefs(renderer_prefs); + #if defined(OS_LINUX) // We have to enable ourselves as the editor delegate on linux so we can copy // text selections to the X clipboard. @@ -2784,6 +2784,10 @@ void RenderView::OnEnableIntrinsicWidthChangedMode() { void RenderView::OnSetRendererPrefs(const RendererPreferences& renderer_prefs) { renderer_preferences_ = renderer_prefs; UpdateFontRenderingFromRendererPrefs(); + webview()->SetThemeFocusRingColor(renderer_prefs.focus_ring_color_r, + renderer_prefs.focus_ring_color_g, + renderer_prefs.focus_ring_color_b); + } void RenderView::OnMediaPlayerActionAt(int x, |