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

Side by Side Diff: chrome/browser/ui/panels/panel_browser_window_gtk.cc

Issue 8595003: Have panels respond to changes in work area on Linux. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 63
64 PanelBrowserWindowGtk::~PanelBrowserWindowGtk() { 64 PanelBrowserWindowGtk::~PanelBrowserWindowGtk() {
65 if (drag_widget_) { 65 if (drag_widget_) {
66 // Terminate the grab if we have it. We could do this using any widget, 66 // Terminate the grab if we have it. We could do this using any widget,
67 // |drag_widget_| is just convenient. 67 // |drag_widget_| is just convenient.
68 gtk_grab_add(drag_widget_); 68 gtk_grab_add(drag_widget_);
69 gtk_grab_remove(drag_widget_); 69 gtk_grab_remove(drag_widget_);
70 DestroyDragWidget(); 70 DestroyDragWidget();
71 } 71 }
72 panel_->OnNativePanelClosed(); 72 panel_->OnNativePanelClosed();
73 ui::WorkAreaWatcherX::RemoveObserver(this);
73 } 74 }
74 75
75 void PanelBrowserWindowGtk::Init() { 76 void PanelBrowserWindowGtk::Init() {
76 BrowserWindowGtk::Init(); 77 BrowserWindowGtk::Init();
77 78
78 // Keep the window docked to the bottom of the screen on resizes. 79 // Keep the window docked to the bottom of the screen on resizes.
79 gtk_window_set_gravity(window(), GDK_GRAVITY_SOUTH_EAST); 80 gtk_window_set_gravity(window(), GDK_GRAVITY_SOUTH_EAST);
80 81
81 // Keep the window always on top. 82 // Keep the window always on top.
82 gtk_window_set_keep_above(window(), TRUE); 83 gtk_window_set_keep_above(window(), TRUE);
83 84
84 // Show the window on all the virtual desktops. 85 // Show the window on all the virtual desktops.
85 gtk_window_stick(window()); 86 gtk_window_stick(window());
86 87
87 // Do not show an icon in the task bar. Window operations such as close, 88 // 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. 89 // minimize etc. can only be done from the panel UI.
89 gtk_window_set_skip_taskbar_hint(window(), TRUE); 90 gtk_window_set_skip_taskbar_hint(window(), TRUE);
90 91
91 g_signal_connect(titlebar_widget(), "button-press-event", 92 g_signal_connect(titlebar_widget(), "button-press-event",
92 G_CALLBACK(OnTitlebarButtonPressEventThunk), this); 93 G_CALLBACK(OnTitlebarButtonPressEventThunk), this);
93 g_signal_connect(titlebar_widget(), "button-release-event", 94 g_signal_connect(titlebar_widget(), "button-release-event",
94 G_CALLBACK(OnTitlebarButtonReleaseEventThunk), this); 95 G_CALLBACK(OnTitlebarButtonReleaseEventThunk), this);
96
97 // Strictly speaking we should have a single observer for work area changed
Dmitry Titov 2011/11/18 04:56:37 Not sure that long comment has to be here. If it's
prasadt 2011/11/18 22:31:42 Just a clarification in case someone wonders why i
98 // notification. There are a few reasons for doing it this way:
99 // 1) Keep it consistent with the way we do it on other platforms.
100 // 2) This is a rare enough event to create a separate class with
101 // implementations for all platforms.
102 // 3) It may not be possible to listen to this event without assoicating it
103 // with a window on all platforms.
104 ui::WorkAreaWatcherX::AddObserver(this);
95 } 105 }
96 106
97 bool PanelBrowserWindowGtk::GetWindowEdge(int x, int y, GdkWindowEdge* edge) { 107 bool PanelBrowserWindowGtk::GetWindowEdge(int x, int y, GdkWindowEdge* edge) {
98 // Since panels are not resizable or movable by the user, we should not 108 // 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, 109 // detect the window edge for behavioral purposes. The edge, if any,
100 // is present only for visual aspects. 110 // is present only for visual aspects.
101 return FALSE; 111 return FALSE;
102 } 112 }
103 113
104 bool PanelBrowserWindowGtk::HandleTitleBarLeftMousePress( 114 bool PanelBrowserWindowGtk::HandleTitleBarLeftMousePress(
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 NULL); 228 NULL);
219 *title = title_with_markup; 229 *title = title_with_markup;
220 g_free(title_escaped); 230 g_free(title_escaped);
221 g_free(title_with_markup); 231 g_free(title_with_markup);
222 return BrowserWindowGtk::PANGO_MARKUP; 232 return BrowserWindowGtk::PANGO_MARKUP;
223 } else { 233 } else {
224 return BrowserWindowGtk::GetWindowTitle(title); 234 return BrowserWindowGtk::GetWindowTitle(title);
225 } 235 }
226 } 236 }
227 237
238 void PanelBrowserWindowGtk::WorkAreaChanged() {
239 panel_->manager()->OnDisplayChanged();
240 }
241
228 void PanelBrowserWindowGtk::ShowPanel() { 242 void PanelBrowserWindowGtk::ShowPanel() {
229 Show(); 243 Show();
230 } 244 }
231 245
232 void PanelBrowserWindowGtk::ShowPanelInactive() { 246 void PanelBrowserWindowGtk::ShowPanelInactive() {
233 ShowInactive(); 247 ShowInactive();
234 } 248 }
235 249
236 gfx::Rect PanelBrowserWindowGtk::GetPanelBounds() const { 250 gfx::Rect PanelBrowserWindowGtk::GetPanelBounds() const {
237 return bounds_; 251 return bounds_;
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 } 742 }
729 } 743 }
730 744
731 bool NativePanelTestingGtk::IsWindowSizeKnown() const { 745 bool NativePanelTestingGtk::IsWindowSizeKnown() const {
732 return panel_browser_window_gtk_->window_size_known_; 746 return panel_browser_window_gtk_->window_size_known_;
733 } 747 }
734 748
735 bool NativePanelTestingGtk::IsAnimatingBounds() const { 749 bool NativePanelTestingGtk::IsAnimatingBounds() const {
736 return panel_browser_window_gtk_->IsAnimatingBounds(); 750 return panel_browser_window_gtk_->IsAnimatingBounds();
737 } 751 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698