summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-03 00:06:09 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-03 00:06:09 +0000
commitd3ba7727bab47266a43ba17790be43eaf4c7961f (patch)
treeb796080c822c41b935fde0b37806f64d961abb2d /chrome
parent15730c45ebf0eb657ba30e19f643bfe1cf299ce7 (diff)
downloadchromium_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.cc12
-rw-r--r--chrome/common/gtk_util.cc9
-rw-r--r--chrome/common/render_messages.h18
-rw-r--r--chrome/common/renderer_preferences.h5
-rw-r--r--chrome/renderer/render_view.cc8
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,