OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/panels/panel.h" | 9 #include "chrome/browser/ui/panels/panel.h" |
10 #include "chrome/browser/ui/panels/panel_manager.h" | 10 #include "chrome/browser/ui/panels/panel_manager.h" |
11 #include "chrome/browser/ui/panels/panel_settings_menu_model.h" | 11 #include "chrome/browser/ui/panels/panel_settings_menu_model.h" |
12 #include "chrome/common/chrome_notification_types.h" | 12 #include "chrome/common/chrome_notification_types.h" |
13 #include "content/public/browser/notification_service.h" | 13 #include "content/public/browser/notification_service.h" |
14 #include "ui/base/animation/slide_animation.h" | 14 #include "ui/base/animation/slide_animation.h" |
15 #include "ui/base/dragdrop/gtk_dnd_util.h" | 15 #include "ui/base/dragdrop/gtk_dnd_util.h" |
| 16 #include "ui/base/x/work_area_watcher_x.h" |
16 | 17 |
17 namespace { | 18 namespace { |
18 | 19 |
19 // This value is experimental and subjective. | 20 // This value is experimental and subjective. |
20 const int kSetBoundsAnimationMs = 180; | 21 const int kSetBoundsAnimationMs = 180; |
21 | 22 |
22 // RGB values for titlebar in draw attention state. A shade of orange. | 23 // RGB values for titlebar in draw attention state. A shade of orange. |
23 const int kDrawAttentionR = 0xfa; | 24 const int kDrawAttentionR = 0xfa; |
24 const int kDrawAttentionG = 0x98; | 25 const int kDrawAttentionG = 0x98; |
25 const int kDrawAttentionB = 0x3a; | 26 const int kDrawAttentionB = 0x3a; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 | 64 |
64 PanelBrowserWindowGtk::~PanelBrowserWindowGtk() { | 65 PanelBrowserWindowGtk::~PanelBrowserWindowGtk() { |
65 if (drag_widget_) { | 66 if (drag_widget_) { |
66 // Terminate the grab if we have it. We could do this using any widget, | 67 // Terminate the grab if we have it. We could do this using any widget, |
67 // |drag_widget_| is just convenient. | 68 // |drag_widget_| is just convenient. |
68 gtk_grab_add(drag_widget_); | 69 gtk_grab_add(drag_widget_); |
69 gtk_grab_remove(drag_widget_); | 70 gtk_grab_remove(drag_widget_); |
70 DestroyDragWidget(); | 71 DestroyDragWidget(); |
71 } | 72 } |
72 panel_->OnNativePanelClosed(); | 73 panel_->OnNativePanelClosed(); |
| 74 ui::WorkAreaWatcherX::RemoveObserver(this); |
73 } | 75 } |
74 | 76 |
75 void PanelBrowserWindowGtk::Init() { | 77 void PanelBrowserWindowGtk::Init() { |
76 BrowserWindowGtk::Init(); | 78 BrowserWindowGtk::Init(); |
77 | 79 |
78 // Keep the window docked to the bottom of the screen on resizes. | 80 // Keep the window docked to the bottom of the screen on resizes. |
79 gtk_window_set_gravity(window(), GDK_GRAVITY_SOUTH_EAST); | 81 gtk_window_set_gravity(window(), GDK_GRAVITY_SOUTH_EAST); |
80 | 82 |
81 // Keep the window always on top. | 83 // Keep the window always on top. |
82 gtk_window_set_keep_above(window(), TRUE); | 84 gtk_window_set_keep_above(window(), TRUE); |
83 | 85 |
84 // Show the window on all the virtual desktops. | 86 // Show the window on all the virtual desktops. |
85 gtk_window_stick(window()); | 87 gtk_window_stick(window()); |
86 | 88 |
87 // Do not show an icon in the task bar. Window operations such as close, | 89 // Do not show an icon in the task bar. Window operations such as close, |
88 // minimize etc. can only be done from the panel UI. | 90 // minimize etc. can only be done from the panel UI. |
89 gtk_window_set_skip_taskbar_hint(window(), TRUE); | 91 gtk_window_set_skip_taskbar_hint(window(), TRUE); |
90 | 92 |
91 g_signal_connect(titlebar_widget(), "button-press-event", | 93 g_signal_connect(titlebar_widget(), "button-press-event", |
92 G_CALLBACK(OnTitlebarButtonPressEventThunk), this); | 94 G_CALLBACK(OnTitlebarButtonPressEventThunk), this); |
93 g_signal_connect(titlebar_widget(), "button-release-event", | 95 g_signal_connect(titlebar_widget(), "button-release-event", |
94 G_CALLBACK(OnTitlebarButtonReleaseEventThunk), this); | 96 G_CALLBACK(OnTitlebarButtonReleaseEventThunk), this); |
| 97 |
| 98 ui::WorkAreaWatcherX::AddObserver(this); |
95 } | 99 } |
96 | 100 |
97 bool PanelBrowserWindowGtk::GetWindowEdge(int x, int y, GdkWindowEdge* edge) { | 101 bool PanelBrowserWindowGtk::GetWindowEdge(int x, int y, GdkWindowEdge* edge) { |
98 // Since panels are not resizable or movable by the user, we should not | 102 // Since panels are not resizable or movable by the user, we should not |
99 // detect the window edge for behavioral purposes. The edge, if any, | 103 // detect the window edge for behavioral purposes. The edge, if any, |
100 // is present only for visual aspects. | 104 // is present only for visual aspects. |
101 return FALSE; | 105 return FALSE; |
102 } | 106 } |
103 | 107 |
104 bool PanelBrowserWindowGtk::HandleTitleBarLeftMousePress( | 108 bool PanelBrowserWindowGtk::HandleTitleBarLeftMousePress( |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 NULL); | 222 NULL); |
219 *title = title_with_markup; | 223 *title = title_with_markup; |
220 g_free(title_escaped); | 224 g_free(title_escaped); |
221 g_free(title_with_markup); | 225 g_free(title_with_markup); |
222 return BrowserWindowGtk::PANGO_MARKUP; | 226 return BrowserWindowGtk::PANGO_MARKUP; |
223 } else { | 227 } else { |
224 return BrowserWindowGtk::GetWindowTitle(title); | 228 return BrowserWindowGtk::GetWindowTitle(title); |
225 } | 229 } |
226 } | 230 } |
227 | 231 |
| 232 void PanelBrowserWindowGtk::WorkAreaChanged() { |
| 233 panel_->manager()->OnDisplayChanged(); |
| 234 } |
| 235 |
228 void PanelBrowserWindowGtk::ShowPanel() { | 236 void PanelBrowserWindowGtk::ShowPanel() { |
229 Show(); | 237 Show(); |
230 } | 238 } |
231 | 239 |
232 void PanelBrowserWindowGtk::ShowPanelInactive() { | 240 void PanelBrowserWindowGtk::ShowPanelInactive() { |
233 ShowInactive(); | 241 ShowInactive(); |
234 } | 242 } |
235 | 243 |
236 gfx::Rect PanelBrowserWindowGtk::GetPanelBounds() const { | 244 gfx::Rect PanelBrowserWindowGtk::GetPanelBounds() const { |
237 return bounds_; | 245 return bounds_; |
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
728 } | 736 } |
729 } | 737 } |
730 | 738 |
731 bool NativePanelTestingGtk::IsWindowSizeKnown() const { | 739 bool NativePanelTestingGtk::IsWindowSizeKnown() const { |
732 return panel_browser_window_gtk_->window_size_known_; | 740 return panel_browser_window_gtk_->window_size_known_; |
733 } | 741 } |
734 | 742 |
735 bool NativePanelTestingGtk::IsAnimatingBounds() const { | 743 bool NativePanelTestingGtk::IsAnimatingBounds() const { |
736 return panel_browser_window_gtk_->IsAnimatingBounds(); | 744 return panel_browser_window_gtk_->IsAnimatingBounds(); |
737 } | 745 } |
OLD | NEW |