OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/touch/frame/touch_browser_frame_view.h" | 5 #include "chrome/browser/ui/touch/frame/touch_browser_frame_view.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "chrome/browser/profiles/profile.h" | 9 #include "chrome/browser/profiles/profile.h" |
10 #include "chrome/browser/renderer_host/site_instance.h" | 10 #include "chrome/browser/renderer_host/site_instance.h" |
(...skipping 25 matching lines...) Expand all Loading... |
36 NotificationType::NAV_ENTRY_COMMITTED, | 36 NotificationType::NAV_ENTRY_COMMITTED, |
37 NotificationService::AllSources()); | 37 NotificationService::AllSources()); |
38 registrar_.Add(this, | 38 registrar_.Add(this, |
39 NotificationType::FOCUS_CHANGED_IN_PAGE, | 39 NotificationType::FOCUS_CHANGED_IN_PAGE, |
40 NotificationService::AllSources()); | 40 NotificationService::AllSources()); |
41 } | 41 } |
42 | 42 |
43 TouchBrowserFrameView::~TouchBrowserFrameView() { | 43 TouchBrowserFrameView::~TouchBrowserFrameView() { |
44 } | 44 } |
45 | 45 |
| 46 void TouchBrowserFrameView::Layout() { |
| 47 OpaqueBrowserFrameView::Layout(); |
| 48 |
| 49 if (!keyboard_) |
| 50 return; |
| 51 |
| 52 keyboard_->SetBounds(GetBoundsForReservedArea()); |
| 53 keyboard_->SetVisible(keyboard_showing_); |
| 54 keyboard_->Layout(); |
| 55 } |
| 56 |
46 /////////////////////////////////////////////////////////////////////////////// | 57 /////////////////////////////////////////////////////////////////////////////// |
47 // TouchBrowserFrameView, protected: | 58 // TouchBrowserFrameView, protected: |
48 int TouchBrowserFrameView::GetReservedHeight() const { | 59 int TouchBrowserFrameView::GetReservedHeight() const { |
49 if (keyboard_showing_) | 60 if (keyboard_showing_) |
50 return kKeyboardHeight; | 61 return kKeyboardHeight; |
51 | 62 |
52 return 0; | 63 return 0; |
53 } | 64 } |
54 | 65 |
55 /////////////////////////////////////////////////////////////////////////////// | 66 /////////////////////////////////////////////////////////////////////////////// |
(...skipping 21 matching lines...) Expand all Loading... |
77 if (should_show_keyboard) | 88 if (should_show_keyboard) |
78 InitVirtualKeyboard(); | 89 InitVirtualKeyboard(); |
79 | 90 |
80 if (should_show_keyboard == keyboard_showing_) | 91 if (should_show_keyboard == keyboard_showing_) |
81 return; | 92 return; |
82 | 93 |
83 DCHECK(keyboard_); | 94 DCHECK(keyboard_); |
84 | 95 |
85 keyboard_showing_ = should_show_keyboard; | 96 keyboard_showing_ = should_show_keyboard; |
86 | 97 |
87 keyboard_->SetBounds(GetBoundsForReservedArea()); | |
88 keyboard_->SetVisible(should_show_keyboard); | |
89 | |
90 // Because the NonClientFrameView is a sibling of the ClientView, we rely on | 98 // Because the NonClientFrameView is a sibling of the ClientView, we rely on |
91 // the parent to resize the ClientView instead of resizing it directly. | 99 // the parent to resize the ClientView instead of resizing it directly. |
92 GetParent()->Layout(); | 100 GetParent()->Layout(); |
93 } | 101 } |
94 | 102 |
95 void TouchBrowserFrameView::Observe(NotificationType type, | 103 void TouchBrowserFrameView::Observe(NotificationType type, |
96 const NotificationSource& source, | 104 const NotificationSource& source, |
97 const NotificationDetails& details) { | 105 const NotificationDetails& details) { |
98 Browser* browser = browser_view()->browser(); | 106 Browser* browser = browser_view()->browser(); |
99 if (type == NotificationType::FOCUS_CHANGED_IN_PAGE) { | 107 if (type == NotificationType::FOCUS_CHANGED_IN_PAGE) { |
100 // Only modify the keyboard state if the notification is coming from | 108 // Only modify the keyboard state if the notification is coming from |
101 // a source within the same Browser. | 109 // a source within the same Browser. |
102 Source<RenderViewHost> specific_source(source); | 110 Source<RenderViewHost> specific_source(source); |
103 for (int i = 0; i < browser->tab_count(); ++i) { | 111 for (int i = 0; i < browser->tab_count(); ++i) { |
104 if (browser->GetTabContentsAt(i)->render_view_host() == | 112 if (browser->GetTabContentsAt(i)->render_view_host() == |
105 specific_source.ptr()) { | 113 specific_source.ptr()) { |
106 UpdateKeyboardAndLayout(*Details<const bool>(details).ptr()); | 114 UpdateKeyboardAndLayout(*Details<const bool>(details).ptr()); |
107 break; | 115 break; |
108 } | 116 } |
109 } | 117 } |
110 } else if (type == NotificationType::NAV_ENTRY_COMMITTED) { | 118 } else if (type == NotificationType::NAV_ENTRY_COMMITTED) { |
111 Browser* source_browser = Browser::GetBrowserForController( | 119 Browser* source_browser = Browser::GetBrowserForController( |
112 Source<NavigationController>(source).ptr(), NULL); | 120 Source<NavigationController>(source).ptr(), NULL); |
113 // If the Browser for the keyboard has navigated, hide the keyboard. | 121 // If the Browser for the keyboard has navigated, hide the keyboard. |
114 if (source_browser == browser) { | 122 if (source_browser == browser) { |
115 UpdateKeyboardAndLayout(false); | 123 UpdateKeyboardAndLayout(false); |
116 } | 124 } |
117 } | 125 } |
118 } | 126 } |
OLD | NEW |