Index: chrome/browser/ui/views/frame/desktop_browser_frame_aura.cc |
diff --git a/chrome/browser/ui/views/frame/desktop_browser_frame_aura.cc b/chrome/browser/ui/views/frame/desktop_browser_frame_aura.cc |
index ab7ad0378892e3ec8a11ba58085d1db463cc1d96..b7fa3bd3dec82ea0914020438327bbaba5ff89bc 100644 |
--- a/chrome/browser/ui/views/frame/desktop_browser_frame_aura.cc |
+++ b/chrome/browser/ui/views/frame/desktop_browser_frame_aura.cc |
@@ -4,10 +4,13 @@ |
#include "chrome/browser/ui/views/frame/desktop_browser_frame_aura.h" |
+#include "base/command_line.h" |
#include "chrome/app/chrome_command_ids.h" |
#include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host.h" |
#include "chrome/browser/ui/views/frame/browser_shutdown.h" |
#include "chrome/browser/ui/views/frame/browser_view.h" |
+#include "chrome/browser/web_applications/web_app.h" |
+#include "chrome/common/chrome_switches.h" |
#include "ui/aura/client/aura_constants.h" |
#include "ui/aura/window.h" |
#include "ui/aura/window_event_dispatcher.h" |
@@ -18,6 +21,10 @@ |
#include "ui/views/view.h" |
#include "ui/wm/core/visibility_controller.h" |
+#if defined(OS_LINUX) |
+#include "chrome/browser/shell_integration_linux.h" |
+#endif |
+ |
using aura::Window; |
/////////////////////////////////////////////////////////////////////////////// |
@@ -74,12 +81,40 @@ void DesktopBrowserFrameAura::InitNativeWidget( |
//////////////////////////////////////////////////////////////////////////////// |
// DesktopBrowserFrameAura, NativeBrowserFrame implementation: |
-views::NativeWidget* DesktopBrowserFrameAura::AsNativeWidget() { |
- return this; |
-} |
- |
-const views::NativeWidget* DesktopBrowserFrameAura::AsNativeWidget() const { |
- return this; |
+views::Widget::InitParams DesktopBrowserFrameAura::GetWidgetParams() { |
+ views::Widget::InitParams params; |
+ params.native_widget = this; |
+ |
+#if defined(OS_LINUX) |
+ // Set up a custom WM_CLASS for some sorts of window types. This allows |
+ // task switchers in X11 environments to distinguish between main browser |
+ // windows and e.g app windows. |
+ const base::CommandLine& command_line = |
+ *base::CommandLine::ForCurrentProcess(); |
+ const Browser& browser = *browser_view_->browser(); |
+ params.wm_class_class = shell_integration_linux::GetProgramClassName(); |
+ params.wm_class_name = params.wm_class_class; |
+ if (browser.is_app() && !browser.is_devtools()) { |
+ // This window is a hosted app or v1 packaged app. |
+ // NOTE: v2 packaged app windows are created by ChromeNativeAppWindowViews. |
+ params.wm_class_name = web_app::GetWMClassFromAppName(browser.app_name()); |
+ } else if (command_line.HasSwitch(switches::kUserDataDir)) { |
+ // Set the class name to e.g. "Chrome (/tmp/my-user-data)". The |
+ // class name will show up in the alt-tab list in gnome-shell if |
+ // you're running a binary that doesn't have a matching .desktop |
+ // file. |
+ const std::string user_data_dir = |
+ command_line.GetSwitchValueNative(switches::kUserDataDir); |
+ params.wm_class_name += " (" + user_data_dir + ")"; |
+ } |
+ const char kX11WindowRoleBrowser[] = "browser"; |
+ const char kX11WindowRolePopup[] = "pop-up"; |
+ params.wm_role_name = browser_view_->browser()->is_type_tabbed() ? |
+ std::string(kX11WindowRoleBrowser) : std::string(kX11WindowRolePopup); |
+ params.remove_standard_frame = browser_frame_->UseCustomFrame(); |
+#endif // defined(OS_LINUX) |
+ |
+ return params; |
} |
bool DesktopBrowserFrameAura::UsesNativeSystemMenu() const { |