diff options
author | sschmitz@chromium.org <sschmitz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-17 17:41:03 +0000 |
---|---|---|
committer | sschmitz@chromium.org <sschmitz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-17 17:41:03 +0000 |
commit | db4e75800922893ab03e6b57fbc7603c7ddfb115 (patch) | |
tree | 2ebbc885fb426d4cf24b00d7bf9ffa52abe9246c | |
parent | 688089ca804840d10d02a2d89299b6f4bd7a524f (diff) | |
download | chromium_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.cc | 25 | ||||
-rw-r--r-- | ash/accelerators/accelerator_controller_unittest.cc | 10 | ||||
-rw-r--r-- | ash/accelerators/accelerator_table.cc | 4 | ||||
-rw-r--r-- | ash/accelerators/accelerator_table.h | 2 | ||||
-rw-r--r-- | ash/shell_delegate.h | 1 | ||||
-rw-r--r-- | ash/wm/window_util.cc | 4 | ||||
-rw-r--r-- | ash/wm/window_util.h | 3 | ||||
-rw-r--r-- | chrome/browser/ui/ash/chrome_shell_delegate.cc | 4 | ||||
-rw-r--r-- | chrome/browser/ui/views/accelerator_table_unittest.cc | 22 | ||||
-rw-r--r-- | chrome/tools/chromeactions.txt | 4 | ||||
-rw-r--r-- | ui/aura/client/aura_constants.cc | 1 | ||||
-rw-r--r-- | ui/aura/client/aura_constants.h | 3 | ||||
-rw-r--r-- | ui/aura/test/test_windows.cc | 2 | ||||
-rw-r--r-- | ui/views/widget/native_widget_aura.cc | 3 |
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() { |