Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2796)

Unified Diff: chrome/browser/views/tab_contents/native_tab_contents_container_gtk.cc

Issue 194041: Making the focus remembering across tab switch work. (Closed)
Patch Set: Fix for conflicts Created 11 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/views/tab_contents/native_tab_contents_container_gtk.cc
diff --git a/chrome/browser/views/tab_contents/native_tab_contents_container_gtk.cc b/chrome/browser/views/tab_contents/native_tab_contents_container_gtk.cc
index 29a6ef2256a61fa2e506c2787ce5f1422d2dc500..6eb37c348302f5a3abfe6713fc141a1cd36a9317 100644
--- a/chrome/browser/views/tab_contents/native_tab_contents_container_gtk.cc
+++ b/chrome/browser/views/tab_contents/native_tab_contents_container_gtk.cc
@@ -17,7 +17,8 @@
NativeTabContentsContainerGtk::NativeTabContentsContainerGtk(
TabContentsContainer* container)
- : container_(container) {
+ : container_(container),
+ focus_callback_id_(0) {
}
NativeTabContentsContainerGtk::~NativeTabContentsContainerGtk() {
@@ -27,48 +28,11 @@ NativeTabContentsContainerGtk::~NativeTabContentsContainerGtk() {
// NativeTabContentsContainerGtk, NativeTabContentsContainer overrides:
void NativeTabContentsContainerGtk::AttachContents(TabContents* contents) {
- // We need to register the tab contents window with the BrowserContainer so
- // that the BrowserContainer is the focused view when the focus is on the
- // TabContents window (for the TabContents case).
- set_focus_view(this);
-
Attach(contents->GetNativeView());
-
- // TODO(port): figure out focus interception
-#if defined(OS_WIN)
- HWND contents_hwnd = contents->GetContentNativeView();
- if (contents_hwnd)
- views::FocusManager::InstallFocusSubclass(contents_hwnd, this);
-#else
- NOTIMPLEMENTED();
-#endif
}
void NativeTabContentsContainerGtk::DetachContents(TabContents* contents) {
- // TODO(port): figure out focus interception
-#if defined(OS_WIN)
- // TODO(brettw) should this move to NativeViewHost::Detach which is called
- // below? It needs cleanup regardless.
- HWND container_hwnd = contents->GetNativeView();
-
- // Hide the contents before adjusting its parent to avoid a full desktop
- // flicker.
- ShowWindow(container_hwnd, SW_HIDE);
-
- // Reset the parent to NULL to ensure hidden tabs don't receive messages.
- ::SetParent(container_hwnd, NULL);
-
- // Unregister the tab contents window from the FocusManager.
- views::FocusManager::UninstallFocusSubclass(container_hwnd);
- HWND hwnd = contents->GetContentNativeView();
- if (hwnd) {
- // We may not have an HWND anymore, if the renderer crashed and we are
- // displaying the sad tab for example.
- views::FocusManager::UninstallFocusSubclass(hwnd);
- }
-#else
gtk_widget_hide(contents->GetNativeView());
-#endif
// Now detach the TabContents.
Detach();
@@ -81,31 +45,10 @@ void NativeTabContentsContainerGtk::SetFastResize(bool fast_resize) {
void NativeTabContentsContainerGtk::RenderViewHostChanged(
RenderViewHost* old_host,
RenderViewHost* new_host) {
- // TODO(port): figure out focus interception
-#if defined(OS_WIN)
- if (old_host && old_host->view()) {
- views::FocusManager::UninstallFocusSubclass(
- old_host->view()->GetNativeView());
- }
-
- if (new_host && new_host->view()) {
- views::FocusManager::InstallFocusSubclass(
- new_host->view()->GetNativeView(), this);
- }
-
// If we are focused, we need to pass the focus to the new RenderViewHost.
- views::FocusManager* focus_manager = views::FocusManager::GetFocusManager(
- GetRootView()->GetWidget()->GetNativeView());
+ views::FocusManager* focus_manager = GetFocusManager();
if (focus_manager->GetFocusedView() == this)
Focus();
-#else
- // If we are focused, we need to pass the focus to the new RenderViewHost.
- // TODO: uncomment this once FocusManager has been ported.
- // views::FocusManager* focus_manager = views::FocusManager::GetFocusManager(
- // GetRootView()->GetWidget()->GetNativeView());
- // if (focus_manager->GetFocusedView() == this)
- // Focus();
-#endif
}
views::View* NativeTabContentsContainerGtk::GetView() {
@@ -114,14 +57,15 @@ views::View* NativeTabContentsContainerGtk::GetView() {
void NativeTabContentsContainerGtk::TabContentsFocused(
TabContents* tab_contents) {
-#if defined(OS_WIN)
+ // Called when the tab contents native view gets focused (typically through a
+ // user click). We make ourself the focused view, so the focus is restored
+ // properly when the browser window is deactivated/reactivated.
views::FocusManager* focus_manager = GetFocusManager();
if (!focus_manager) {
NOTREACHED();
return;
}
focus_manager->SetFocusedView(this);
-#endif
}
////////////////////////////////////////////////////////////////////////////////

Powered by Google App Engine
This is Rietveld 408576698