Index: chrome/browser/ui/views/panels/panel_view.cc |
diff --git a/chrome/browser/ui/views/panels/panel_view.cc b/chrome/browser/ui/views/panels/panel_view.cc |
index d61ad214a7afbc7b84ce80e64f87f81d0c202b41..822bbdf252016a9542cdbc2bacd9256ded881684 100644 |
--- a/chrome/browser/ui/views/panels/panel_view.cc |
+++ b/chrome/browser/ui/views/panels/panel_view.cc |
@@ -20,6 +20,8 @@ |
#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/render_widget_host_view.h" |
#include "content/public/browser/web_contents.h" |
+#include "ui/aura/window.h" |
+#include "ui/aura/window_tree_host.h" |
#include "ui/gfx/image/image.h" |
#include "ui/gfx/path.h" |
#include "ui/gfx/screen.h" |
@@ -36,6 +38,11 @@ |
#include "ui/views/win/hwnd_util.h" |
#endif |
+#if defined(USE_X11) && !defined(OS_CHROMEOS) |
+#include "chrome/browser/ui/views/panels/x11_panel_resizer.h" |
+#include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h" |
+#endif |
+ |
namespace { |
#if defined(OS_WIN) |
@@ -307,6 +314,18 @@ PanelView::PanelView(Panel* panel, const gfx::Rect& bounds, bool always_on_top) |
views::HWNDForWidget(window_)); |
ui::win::PreventWindowFromPinning(views::HWNDForWidget(window_)); |
#endif |
+ |
+#if defined(USE_X11) && !defined(OS_CHROMEOS) |
+ // Swap the default non client event handler with one which handles resizes |
+ // for panels entirely within Chrome. This is needed because it is not |
+ // possible to tell when a resize performed by the window manager ends. |
+ views::DesktopWindowTreeHostX11* host = |
+ views::DesktopWindowTreeHostX11::GetHostForXID( |
+ window_->GetNativeView()->GetHost()->GetAcceleratedWidget()); |
+ scoped_ptr<ui::EventHandler> resizer( |
+ new X11PanelResizer(panel_.get(), window_->GetNativeWindow())); |
+ host->SwapNonClientEventHandler(resizer.Pass()); |
+#endif |
} |
PanelView::~PanelView() { |