diff options
-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 | ||||
-rw-r--r-- | webkit/glue/webview.h | 4 | ||||
-rw-r--r-- | webkit/glue/webview_impl.cc | 9 | ||||
-rw-r--r-- | webkit/glue/webview_impl.h | 3 |
8 files changed, 66 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, diff --git a/webkit/glue/webview.h b/webkit/glue/webview.h index d451a1e..2d75798 100644 --- a/webkit/glue/webview.h +++ b/webkit/glue/webview.h @@ -258,6 +258,10 @@ class WebView : public WebKit::WebWidget { // Gets the WebView's active state (i.e., state of control tints). virtual bool IsActive() = 0; +#if defined(OS_LINUX) + virtual void SetThemeFocusRingColor(int r, int g, int b) = 0; +#endif + private: DISALLOW_COPY_AND_ASSIGN(WebView); }; diff --git a/webkit/glue/webview_impl.cc b/webkit/glue/webview_impl.cc index c295303..d5f9c06 100644 --- a/webkit/glue/webview_impl.cc +++ b/webkit/glue/webview_impl.cc @@ -44,6 +44,8 @@ MSVC_PUSH_WARNING_LEVEL(0); #include "PopupMenuClient.h" #if defined(OS_WIN) #include "RenderThemeChromiumWin.h" +#elif defined(OS_LINUX) +#include "RenderThemeChromiumLinux.h" #else #include "RenderTheme.h" #endif @@ -1778,6 +1780,13 @@ bool WebViewImpl::IsActive() { : false; } +#if defined(OS_LINUX) +void WebViewImpl::SetThemeFocusRingColor(int r, int g, int b) { + reinterpret_cast<RenderThemeChromiumLinux*>(theme())-> + setFocusRingColor(Color(r, g, b)); +} +#endif + void WebViewImpl::DidCommitLoad(bool* is_new_navigation) { if (is_new_navigation) *is_new_navigation = observed_new_navigation_; diff --git a/webkit/glue/webview_impl.h b/webkit/glue/webview_impl.h index 9161b1c..f16206e 100644 --- a/webkit/glue/webview_impl.h +++ b/webkit/glue/webview_impl.h @@ -144,6 +144,9 @@ class WebViewImpl : public WebView, public base::RefCounted<WebViewImpl> { virtual void SetActive(bool active); virtual bool IsActive(); +#if defined(OS_LINUX) + virtual void SetThemeFocusRingColor(int r, int g, int b); +#endif // WebViewImpl |