summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsschmitz@chromium.org <sschmitz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-17 17:41:03 +0000
committersschmitz@chromium.org <sschmitz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-17 17:41:03 +0000
commitdb4e75800922893ab03e6b57fbc7603c7ddfb115 (patch)
tree2ebbc885fb426d4cf24b00d7bf9ffa52abe9246c
parent688089ca804840d10d02a2d89299b6f4bd7a524f (diff)
downloadchromium_src-db4e75800922893ab03e6b57fbc7603c7ddfb115.zip
chromium_src-db4e75800922893ab03e6b57fbc7603c7ddfb115.tar.gz
chromium_src-db4e75800922893ab03e6b57fbc7603c7ddfb115.tar.bz2
New Behavior on pressing F4:
Restored -> Maximized Maximized -> Restored Fullscreen -> not fullscreen (what is was before) BUG=145402 TEST=On chromeos press F4 when in Restored, Maximize, Fullscreen windows. Review URL: https://chromiumcodereview.appspot.com/10914231 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@157147 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--ash/accelerators/accelerator_controller.cc25
-rw-r--r--ash/accelerators/accelerator_controller_unittest.cc10
-rw-r--r--ash/accelerators/accelerator_table.cc4
-rw-r--r--ash/accelerators/accelerator_table.h2
-rw-r--r--ash/shell_delegate.h1
-rw-r--r--ash/wm/window_util.cc4
-rw-r--r--ash/wm/window_util.h3
-rw-r--r--chrome/browser/ui/ash/chrome_shell_delegate.cc4
-rw-r--r--chrome/browser/ui/views/accelerator_table_unittest.cc22
-rw-r--r--chrome/tools/chromeactions.txt4
-rw-r--r--ui/aura/client/aura_constants.cc1
-rw-r--r--ui/aura/client/aura_constants.h3
-rw-r--r--ui/aura/test/test_windows.cc2
-rw-r--r--ui/views/widget/native_widget_aura.cc3
14 files changed, 66 insertions, 22 deletions
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc
index 2b9eaa5..8ace02d 100644
--- a/ash/accelerators/accelerator_controller.cc
+++ b/ash/accelerators/accelerator_controller.cc
@@ -649,20 +649,25 @@ bool AcceleratorController::PerformAction(int action,
}
break;
}
- case WINDOW_MAXIMIZE_RESTORE: {
+ case TOGGLE_MAXIMIZED: {
+ if (key_code == ui::VKEY_F4 && shell->delegate()) {
+ shell->delegate()->RecordUserMetricsAction(
+ UMA_ACCEL_MAXIMIZE_RESTORE_F4);
+ }
aura::Window* window = wm::GetActiveWindow();
- // Attempt to restore the window that would be cycled through next from
- // the launcher when there is no active window.
if (!window)
- return HandleCycleWindowMRU(WindowCycleController::FORWARD, false);
- if (!wm::IsWindowFullscreen(window)) {
- if (wm::IsWindowMaximized(window))
- wm::RestoreWindow(window);
- else
- wm::MaximizeWindow(window);
return true;
+ if (wm::IsWindowFullscreen(window)) {
+ // Chrome also uses VKEY_F4 as a shortcut. Its action is to toggle
+ // fullscreen. We return false below so Chrome will process the
+ // shortcut again and, in case of VKEY_F4, exit fullscreen.
+ return false;
}
- break;
+ if (wm::IsWindowMaximized(window))
+ wm::RestoreWindow(window);
+ else if (wm::CanMaximizeWindow(window))
+ wm::MaximizeWindow(window);
+ return true;
}
case WINDOW_POSITION_CENTER: {
aura::Window* window = wm::GetActiveWindow();
diff --git a/ash/accelerators/accelerator_controller_unittest.cc b/ash/accelerators/accelerator_controller_unittest.cc
index b9b4a1d..8b490b5 100644
--- a/ash/accelerators/accelerator_controller_unittest.cc
+++ b/ash/accelerators/accelerator_controller_unittest.cc
@@ -450,23 +450,23 @@ TEST_F(AcceleratorControllerTest, WindowSnap) {
{
gfx::Rect normal_bounds = window->bounds();
- GetController()->PerformAction(WINDOW_MAXIMIZE_RESTORE, dummy);
+ GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy);
EXPECT_TRUE(wm::IsWindowMaximized(window.get()));
EXPECT_NE(normal_bounds.ToString(), window->bounds().ToString());
- GetController()->PerformAction(WINDOW_MAXIMIZE_RESTORE, dummy);
+ GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy);
EXPECT_FALSE(wm::IsWindowMaximized(window.get()));
EXPECT_EQ(normal_bounds.ToString(), window->bounds().ToString());
- GetController()->PerformAction(WINDOW_MAXIMIZE_RESTORE, dummy);
+ GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy);
GetController()->PerformAction(WINDOW_SNAP_LEFT, dummy);
EXPECT_FALSE(wm::IsWindowMaximized(window.get()));
- GetController()->PerformAction(WINDOW_MAXIMIZE_RESTORE, dummy);
+ GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy);
GetController()->PerformAction(WINDOW_SNAP_RIGHT, dummy);
EXPECT_FALSE(wm::IsWindowMaximized(window.get()));
- GetController()->PerformAction(WINDOW_MAXIMIZE_RESTORE, dummy);
+ GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy);
EXPECT_TRUE(wm::IsWindowMaximized(window.get()));
GetController()->PerformAction(WINDOW_MINIMIZE, dummy);
EXPECT_FALSE(wm::IsWindowMaximized(window.get()));
diff --git a/ash/accelerators/accelerator_table.cc b/ash/accelerators/accelerator_table.cc
index e7bfcc0..f4a92fa 100644
--- a/ash/accelerators/accelerator_table.cc
+++ b/ash/accelerators/accelerator_table.cc
@@ -45,6 +45,7 @@ const AcceleratorData kAcceleratorData[] = {
{ true, ui::VKEY_KBD_BRIGHTNESS_DOWN, ui::EF_NONE, KEYBOARD_BRIGHTNESS_DOWN },
{ true, ui::VKEY_KBD_BRIGHTNESS_UP, ui::EF_NONE, KEYBOARD_BRIGHTNESS_UP },
{ true, ui::VKEY_F4, ui::EF_CONTROL_DOWN, CYCLE_DISPLAY_MODE },
+ { true, ui::VKEY_F4, ui::EF_NONE, TOGGLE_MAXIMIZED },
{ true, ui::VKEY_L, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, LOCK_SCREEN },
{ true, ui::VKEY_POWER, ui::EF_NONE, POWER_PRESSED },
{ false, ui::VKEY_POWER, ui::EF_NONE, POWER_RELEASED },
@@ -121,7 +122,7 @@ const AcceleratorData kAcceleratorData[] = {
{ true, ui::VKEY_OEM_4, ui::EF_ALT_DOWN, WINDOW_SNAP_LEFT },
{ true, ui::VKEY_OEM_6, ui::EF_ALT_DOWN, WINDOW_SNAP_RIGHT },
{ true, ui::VKEY_OEM_MINUS, ui::EF_ALT_DOWN, WINDOW_MINIMIZE },
- { true, ui::VKEY_OEM_PLUS, ui::EF_ALT_DOWN, WINDOW_MAXIMIZE_RESTORE },
+ { true, ui::VKEY_OEM_PLUS, ui::EF_ALT_DOWN, TOGGLE_MAXIMIZED },
{ true, ui::VKEY_OEM_PLUS, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
WINDOW_POSITION_CENTER },
{ true, ui::VKEY_F2, ui::EF_CONTROL_DOWN, FOCUS_NEXT_PANE },
@@ -171,6 +172,7 @@ const AcceleratorAction kReservedActions[] = {
FOCUS_PREVIOUS_PANE, // Control+F1
FOCUS_NEXT_PANE, // Control+F2
CYCLE_DISPLAY_MODE, // Control+F4
+ TOGGLE_MAXIMIZED, // F4
CYCLE_FORWARD_LINEAR, // F5
CYCLE_BACKWARD_LINEAR, // Shift+F5
TAKE_SCREENSHOT, // Control+F5
diff --git a/ash/accelerators/accelerator_table.h b/ash/accelerators/accelerator_table.h
index 4f2b867..85206dd 100644
--- a/ash/accelerators/accelerator_table.h
+++ b/ash/accelerators/accelerator_table.h
@@ -63,13 +63,13 @@ enum AcceleratorAction {
TOGGLE_APP_LIST,
TOGGLE_CAPS_LOCK,
TOGGLE_DESKTOP_BACKGROUND_MODE,
+ TOGGLE_MAXIMIZED,
TOGGLE_ROOT_WINDOW_FULL_SCREEN,
TOGGLE_SPOKEN_FEEDBACK,
TOGGLE_WIFI,
VOLUME_DOWN,
VOLUME_MUTE,
VOLUME_UP,
- WINDOW_MAXIMIZE_RESTORE,
WINDOW_MINIMIZE,
WINDOW_POSITION_CENTER,
WINDOW_SNAP_LEFT,
diff --git a/ash/shell_delegate.h b/ash/shell_delegate.h
index 641a95d..9bf245f 100644
--- a/ash/shell_delegate.h
+++ b/ash/shell_delegate.h
@@ -39,6 +39,7 @@ class SystemTrayDelegate;
class UserWallpaperDelegate;
enum UserMetricsAction {
+ UMA_ACCEL_MAXIMIZE_RESTORE_F4,
UMA_ACCEL_NEWTAB_T,
UMA_ACCEL_NEXTWINDOW_F5,
UMA_ACCEL_NEXTWINDOW_TAB,
diff --git a/ash/wm/window_util.cc b/ash/wm/window_util.cc
index cfbacdc..74c970f 100644
--- a/ash/wm/window_util.cc
+++ b/ash/wm/window_util.cc
@@ -61,6 +61,10 @@ bool CanActivateWindow(aura::Window* window) {
return client && client->CanActivateWindow(window);
}
+bool CanMaximizeWindow(aura::Window* window) {
+ return window->GetProperty(aura::client::kCanMaximizeKey);
+}
+
bool IsWindowNormal(aura::Window* window) {
return IsWindowStateNormal(window->GetProperty(aura::client::kShowStateKey));
}
diff --git a/ash/wm/window_util.h b/ash/wm/window_util.h
index 1675c43..f14ee5f 100644
--- a/ash/wm/window_util.h
+++ b/ash/wm/window_util.h
@@ -35,6 +35,9 @@ ASH_EXPORT bool CanActivateWindow(aura::Window* window);
// this is probably what you're looking for.
ASH_EXPORT aura::Window* GetActivatableWindow(aura::Window* window);
+// Returns true if |window| can be maximized.
+ASH_EXPORT bool CanMaximizeWindow(aura::Window* window);
+
// Returns true if |window| is normal or default.
ASH_EXPORT bool IsWindowNormal(aura::Window* window);
diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.cc b/chrome/browser/ui/ash/chrome_shell_delegate.cc
index 2a44a9e..7dacb13 100644
--- a/chrome/browser/ui/ash/chrome_shell_delegate.cc
+++ b/chrome/browser/ui/ash/chrome_shell_delegate.cc
@@ -349,6 +349,10 @@ void ChromeShellDelegate::OpenFeedbackPage() {
void ChromeShellDelegate::RecordUserMetricsAction(
ash::UserMetricsAction action) {
switch (action) {
+ case ash::UMA_ACCEL_MAXIMIZE_RESTORE_F4:
+ content::RecordAction(
+ content::UserMetricsAction("Accel_Maximize_Restore_F4"));
+ break;
case ash::UMA_ACCEL_PREVWINDOW_TAB:
content::RecordAction(content::UserMetricsAction("Accel_PrevWindow_Tab"));
break;
diff --git a/chrome/browser/ui/views/accelerator_table_unittest.cc b/chrome/browser/ui/views/accelerator_table_unittest.cc
index 00a9632..9eaf616 100644
--- a/chrome/browser/ui/views/accelerator_table_unittest.cc
+++ b/chrome/browser/ui/views/accelerator_table_unittest.cc
@@ -43,6 +43,16 @@ TEST(AcceleratorTableTest, CheckDuplicatedAccelerators) {
#if defined(USE_ASH)
TEST(AcceleratorTableTest, CheckDuplicatedAcceleratorsAsh) {
+ std::set<AcceleratorMapping, Cmp> allowed_duplicates;
+#if defined(OS_CHROMEOS)
+ AcceleratorMapping exception_entry;
+ // Both Chrome and Ash have a shortcut for F4
+ exception_entry.keycode = ui::VKEY_F4;
+ exception_entry.modifiers = ui::EF_NONE;
+ exception_entry.command_id = 0; // dummy
+ allowed_duplicates.insert(exception_entry);
+#endif
+
std::set<AcceleratorMapping, Cmp> acclerators;
for (size_t i = 0; i < kAcceleratorMapLength; ++i) {
const AcceleratorMapping& entry = kAcceleratorMap[i];
@@ -56,11 +66,13 @@ TEST(AcceleratorTableTest, CheckDuplicatedAcceleratorsAsh) {
entry.keycode = ash_entry.keycode;
entry.modifiers = ash_entry.modifiers;
entry.command_id = 0; // dummy
- EXPECT_TRUE(acclerators.insert(entry).second)
- << "Duplicated accelerator: " << entry.keycode << ", "
- << (entry.modifiers & ui::EF_SHIFT_DOWN) << ", "
- << (entry.modifiers & ui::EF_CONTROL_DOWN) << ", "
- << (entry.modifiers & ui::EF_ALT_DOWN);
+ if (allowed_duplicates.find(entry) == allowed_duplicates.end()) {
+ EXPECT_TRUE(acclerators.insert(entry).second)
+ << "Duplicated accelerator: " << entry.keycode << ", "
+ << (entry.modifiers & ui::EF_SHIFT_DOWN) << ", "
+ << (entry.modifiers & ui::EF_CONTROL_DOWN) << ", "
+ << (entry.modifiers & ui::EF_ALT_DOWN);
+ }
}
}
#endif // USE_ASH
diff --git a/chrome/tools/chromeactions.txt b/chrome/tools/chromeactions.txt
index 3fbe82a..3d506ea 100644
--- a/chrome/tools/chromeactions.txt
+++ b/chrome/tools/chromeactions.txt
@@ -59,6 +59,7 @@
0x36adab865c373745 Accel_Fullscreen_F4
0x125f05329e660307 Accel_KeyboardBrightnessDown_F6
0xcdd268156ab80bb1 Accel_KeyboardBrightnessUp_F7
+0x290302f64fd4dfe1 Accel_Maximize_Restore_F4
0x5e6bce93ecde1df8 Accel_NewTab_T
0x5a27559e6846a75e Accel_NextWindow_F5
0xc217e3bb30e9a004 Accel_NextWindow_Tab
@@ -1040,6 +1041,8 @@
0x31bc6949351f46a1 Options_DisableGData_Enable
0x3c91497bc48f7456 Options_DnsPrefetchCheckbox_Disable
0xb1c929ead405f1a9 Options_DnsPrefetchCheckbox_Enable
+0x5e1d34b2eb43d66f Options_DoNotTrackCheckbox_Disable
+0x127ee5905bb2d0cd Options_DoNotTrackCheckbox_Enable
0x24f63c90f4b05e70 Options_EnableCloudPrintProxy
0x7224f61ec49ec7ce Options_FormAutofill_Disable
0xe88933ca2c819b4e Options_FormAutofill_Enable
@@ -1280,6 +1283,7 @@
0x1afb02b1f90b177e ShowBookmarksBar
0xe8705f2d7890043e ShowControlPanel
0x537e45904298316b ShowDateOptions
+0xa27f5c1b4192af95 ShowDisplayOptions
0x3d0170d09a816e7f ShowDownloads
0xf530f742ba5b2683 ShowExtensions
0xa0118397d83c34d0 ShowFileBrowserFullTab
diff --git a/ui/aura/client/aura_constants.cc b/ui/aura/client/aura_constants.cc
index f705ac4..45ae6ee 100644
--- a/ui/aura/client/aura_constants.cc
+++ b/ui/aura/client/aura_constants.cc
@@ -20,6 +20,7 @@ namespace client {
DEFINE_WINDOW_PROPERTY_KEY(bool, kAlwaysOnTopKey, false);
DEFINE_WINDOW_PROPERTY_KEY(bool, kAnimationsDisabledKey, false);
+DEFINE_WINDOW_PROPERTY_KEY(bool, kCanMaximizeKey, false);
DEFINE_WINDOW_PROPERTY_KEY(bool, kConstrainedWindowKey, false);
DEFINE_WINDOW_PROPERTY_KEY(bool, kDrawAttentionKey, false);
DEFINE_WINDOW_PROPERTY_KEY(ui::ModalType, kModalKey, ui::MODAL_TYPE_NONE);
diff --git a/ui/aura/client/aura_constants.h b/ui/aura/client/aura_constants.h
index e39d42a..254ecf0 100644
--- a/ui/aura/client/aura_constants.h
+++ b/ui/aura/client/aura_constants.h
@@ -25,6 +25,9 @@ AURA_EXPORT extern const WindowProperty<bool>* const kAlwaysOnTopKey;
// of value is an int.
AURA_EXPORT extern const WindowProperty<bool>* const kAnimationsDisabledKey;
+// A property key to store can-maximize flag.
+AURA_EXPORT extern const WindowProperty<bool>* const kCanMaximizeKey;
+
// A property key to store if a window is a constrained window or not.
AURA_EXPORT extern const WindowProperty<bool>* const kConstrainedWindowKey;
diff --git a/ui/aura/test/test_windows.cc b/ui/aura/test/test_windows.cc
index 085846d..75cd530 100644
--- a/ui/aura/test/test_windows.cc
+++ b/ui/aura/test/test_windows.cc
@@ -5,6 +5,7 @@
#include "ui/aura/test/test_windows.h"
#include "base/string_number_conversions.h"
+#include "ui/aura/client/aura_constants.h"
#include "ui/aura/window.h"
#include "ui/compositor/layer.h"
#include "ui/gfx/rect.h"
@@ -52,6 +53,7 @@ Window* CreateTestWindowWithDelegateAndType(WindowDelegate* delegate,
window->SetBounds(bounds);
window->Show();
window->SetParent(parent);
+ window->SetProperty(aura::client::kCanMaximizeKey, true);
return window;
}
diff --git a/ui/views/widget/native_widget_aura.cc b/ui/views/widget/native_widget_aura.cc
index 6bb1cf2..3bb30c6 100644
--- a/ui/views/widget/native_widget_aura.cc
+++ b/ui/views/widget/native_widget_aura.cc
@@ -237,6 +237,9 @@ void NativeWidgetAura::InitNativeWidget(const Widget::InitParams& params) {
if (desktop_helper_.get())
desktop_helper_->PostInitialize();
+
+ window_->SetProperty(aura::client::kCanMaximizeKey,
+ GetWidget()->widget_delegate()->CanMaximize());
}
NonClientFrameView* NativeWidgetAura::CreateNonClientFrameView() {