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

Unified Diff: chrome/browser/ui/gtk/panels/panel_gtk.cc

Issue 17397006: Fix the problem that some stacked panels might not be brought to the top when a collapsed panel is … (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/gtk/panels/panel_gtk.cc
diff --git a/chrome/browser/ui/gtk/panels/panel_gtk.cc b/chrome/browser/ui/gtk/panels/panel_gtk.cc
index 4361cf931c7f10049d9166322bb3081b6847b7ab..d1debdbc90dbc382dc3b99b1577cec27e9057aca 100644
--- a/chrome/browser/ui/gtk/panels/panel_gtk.cc
+++ b/chrome/browser/ui/gtk/panels/panel_gtk.cc
@@ -195,7 +195,7 @@ void SetFrameSize(const gfx::Size& new_size) {
frame_size.SetSize(new_size.width(), new_size.height());
}
-}
+} // namespace
// static
NativePanel* Panel::CreateNativePanel(Panel* panel,
@@ -608,7 +608,20 @@ gboolean PanelGtk::OnTitlebarButtonPressEvent(
if (event->type != GDK_BUTTON_PRESS)
return TRUE;
- gdk_window_raise(gtk_widget_get_window(GTK_WIDGET(window_)));
+ // If the panel is in a stack, bring all other panels in the stack to the
+ // top.
+ StackedPanelCollection* stack = panel_->stack();
+ if (stack) {
+ for (StackedPanelCollection::Panels::const_iterator iter =
+ stack->panels().begin();
+ iter != stack->panels().end(); ++iter) {
+ gdk_window_raise(gtk_widget_get_window(GTK_WIDGET(
+ (*iter)->GetNativeWindow())));
+ }
+ } else {
+ gdk_window_raise(gtk_widget_get_window(GTK_WIDGET(window_)));
+ }
+
EnsureDragHelperCreated();
drag_helper_->InitialTitlebarMousePress(event, titlebar_->widget());
return TRUE;
@@ -864,6 +877,20 @@ bool PanelGtk::IsPanelActive() const {
}
void PanelGtk::PreventActivationByOS(bool prevent_activation) {
+ // If the GTK window is set with no focus accepted, it introduces the
+ // following issues:
+ // 1) It cannot be brought to the top by calling gdk_window_raise.
+ // 2) Even after it is forced to the top by calling gtk_window_present or
+ // gtk_window_set_keep_above, it is not lowered in the z-order when the
+ // client area of other window is clicked.
+ // When a docked panel is minimized to a few pixel lines, we do not want it
+ // to take focus since the user would have hard time to notice that. However,
+ // when a stacked panel is collapsed to the titlebar-only, focusing on it
+ // seems not to be too bad. Since we do not have other solution to solve
Dmitry Titov 2013/06/20 00:57:23 The main reason for us to avoid focusing is to pre
+ // the two issues mentioned above for stacked panels, we choose not to
+ // prevent activation for non-docked panels.
+ if (panel_->collection()->type() != PanelCollection::DOCKED)
+ prevent_activation = false;
gtk_window_set_accept_focus(window_, !prevent_activation);
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698