OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/panels/panel_browser_window_gtk.h" | 5 #include "chrome/browser/ui/panels/panel_browser_window_gtk.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "chrome/browser/ui/browser_list.h" | 8 #include "chrome/browser/ui/browser_list.h" |
9 #include "chrome/browser/ui/gtk/browser_titlebar.h" | 9 #include "chrome/browser/ui/gtk/browser_titlebar.h" |
10 #include "chrome/browser/ui/panels/panel.h" | 10 #include "chrome/browser/ui/panels/panel.h" |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 G_CALLBACK(OnTitlebarButtonReleaseEventThunk), this); | 90 G_CALLBACK(OnTitlebarButtonReleaseEventThunk), this); |
91 | 91 |
92 g_signal_connect(window_, "enter-notify-event", | 92 g_signal_connect(window_, "enter-notify-event", |
93 G_CALLBACK(OnEnterNotifyThunk), this); | 93 G_CALLBACK(OnEnterNotifyThunk), this); |
94 g_signal_connect(window_, "leave-notify-event", | 94 g_signal_connect(window_, "leave-notify-event", |
95 G_CALLBACK(OnLeaveNotifyThunk), this); | 95 G_CALLBACK(OnLeaveNotifyThunk), this); |
96 | 96 |
97 ui::WorkAreaWatcherX::AddObserver(this); | 97 ui::WorkAreaWatcherX::AddObserver(this); |
98 registrar_.Add( | 98 registrar_.Add( |
99 this, | 99 this, |
100 chrome::NOTIFICATION_PANEL_CHANGED_EXPANSION_STATE, | |
101 content::Source<Panel>(panel_.get())); | |
102 registrar_.Add( | |
103 this, | |
104 chrome::NOTIFICATION_PANEL_CHANGED_LAYOUT_MODE, | 100 chrome::NOTIFICATION_PANEL_CHANGED_LAYOUT_MODE, |
105 content::Source<Panel>(panel_.get())); | 101 content::Source<Panel>(panel_.get())); |
106 registrar_.Add( | 102 registrar_.Add( |
107 this, | 103 this, |
108 chrome::NOTIFICATION_WINDOW_CLOSED, | 104 chrome::NOTIFICATION_WINDOW_CLOSED, |
109 content::Source<GtkWindow>(window())); | 105 content::Source<GtkWindow>(window())); |
110 } | 106 } |
111 | 107 |
112 bool PanelBrowserWindowGtk::GetWindowEdge(int x, int y, GdkWindowEdge* edge) { | 108 bool PanelBrowserWindowGtk::GetWindowEdge(int x, int y, GdkWindowEdge* edge) { |
113 // Since panels are not resizable or movable by the user, we should not | 109 // Since panels are not resizable or movable by the user, we should not |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 panel_->manager()->OnDisplayChanged(); | 264 panel_->manager()->OnDisplayChanged(); |
269 } | 265 } |
270 | 266 |
271 void PanelBrowserWindowGtk::Observe( | 267 void PanelBrowserWindowGtk::Observe( |
272 int type, | 268 int type, |
273 const content::NotificationSource& source, | 269 const content::NotificationSource& source, |
274 const content::NotificationDetails& details) { | 270 const content::NotificationDetails& details) { |
275 switch (type) { | 271 switch (type) { |
276 case chrome::NOTIFICATION_PANEL_CHANGED_LAYOUT_MODE: | 272 case chrome::NOTIFICATION_PANEL_CHANGED_LAYOUT_MODE: |
277 titlebar()->UpdateCustomFrame(true); | 273 titlebar()->UpdateCustomFrame(true); |
278 // No break. Accept focus code should execute for both cases. | |
279 case chrome::NOTIFICATION_PANEL_CHANGED_EXPANSION_STATE: | |
280 gtk_window_set_accept_focus(window(), !panel_->IsMinimized()); | |
281 break; | 274 break; |
282 case chrome::NOTIFICATION_WINDOW_CLOSED: | 275 case chrome::NOTIFICATION_WINDOW_CLOSED: |
283 // Cleanup. | 276 // Cleanup. |
284 if (bounds_animator_.get()) | 277 if (bounds_animator_.get()) |
285 bounds_animator_.reset(); | 278 bounds_animator_.reset(); |
286 | 279 |
287 CleanupDragDrop(); | 280 CleanupDragDrop(); |
288 if (drag_widget_) { | 281 if (drag_widget_) { |
289 // Terminate the grab if we have it. We could do this using any widget, | 282 // Terminate the grab if we have it. We could do this using any widget, |
290 // |drag_widget_| is just convenient. | 283 // |drag_widget_| is just convenient. |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 browser_window->Activate(); | 373 browser_window->Activate(); |
381 } else { | 374 } else { |
382 Deactivate(); | 375 Deactivate(); |
383 } | 376 } |
384 } | 377 } |
385 | 378 |
386 bool PanelBrowserWindowGtk::IsPanelActive() const { | 379 bool PanelBrowserWindowGtk::IsPanelActive() const { |
387 return IsActive(); | 380 return IsActive(); |
388 } | 381 } |
389 | 382 |
| 383 void PanelBrowserWindowGtk::PreventActivationByOS(bool prevent_activation) { |
| 384 gtk_window_set_accept_focus(window(), !prevent_activation); |
| 385 return; |
| 386 } |
| 387 |
390 gfx::NativeWindow PanelBrowserWindowGtk::GetNativePanelHandle() { | 388 gfx::NativeWindow PanelBrowserWindowGtk::GetNativePanelHandle() { |
391 return GetNativeHandle(); | 389 return GetNativeHandle(); |
392 } | 390 } |
393 | 391 |
394 void PanelBrowserWindowGtk::UpdatePanelTitleBar() { | 392 void PanelBrowserWindowGtk::UpdatePanelTitleBar() { |
395 UpdateTitleBar(); | 393 UpdateTitleBar(); |
396 } | 394 } |
397 | 395 |
398 void PanelBrowserWindowGtk::UpdatePanelLoadingAnimations(bool should_animate) { | 396 void PanelBrowserWindowGtk::UpdatePanelLoadingAnimations(bool should_animate) { |
399 UpdateLoadingAnimations(should_animate); | 397 UpdateLoadingAnimations(should_animate); |
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
877 MessageLoopForUI::current()->RunAllPending(); | 875 MessageLoopForUI::current()->RunAllPending(); |
878 } | 876 } |
879 | 877 |
880 bool NativePanelTestingGtk::IsWindowSizeKnown() const { | 878 bool NativePanelTestingGtk::IsWindowSizeKnown() const { |
881 return panel_browser_window_gtk_->window_size_known_; | 879 return panel_browser_window_gtk_->window_size_known_; |
882 } | 880 } |
883 | 881 |
884 bool NativePanelTestingGtk::IsAnimatingBounds() const { | 882 bool NativePanelTestingGtk::IsAnimatingBounds() const { |
885 return panel_browser_window_gtk_->IsAnimatingBounds(); | 883 return panel_browser_window_gtk_->IsAnimatingBounds(); |
886 } | 884 } |
OLD | NEW |