From eb32ba6f51d0c21d58cd7d89785285ff8fa64624 Mon Sep 17 00:00:00 2001 From: Zeno Albisser Date: Thu, 21 Nov 2013 14:09:57 +0100 Subject: Update chromium to branch 1599. Change-Id: I04e775a946a208bb4500d3b722bcb05c82b9d7cb Reviewed-by: Andras Becsi --- chromium/ash/ash.gyp | 12 +- chromium/ash/ash_switches.cc | 13 +- chromium/ash/ash_switches.h | 6 - chromium/ash/display/display_controller.cc | 61 +++- chromium/ash/display/display_controller.h | 6 + .../ash/display/display_controller_unittest.cc | 37 ++- chromium/ash/display/display_info.cc | 15 - chromium/ash/display/display_info.h | 8 +- chromium/ash/display/display_info_unittest.cc | 8 - chromium/ash/display/display_manager.cc | 102 ++---- chromium/ash/display/display_manager.h | 8 +- chromium/ash/display/display_manager_unittest.cc | 57 ---- chromium/ash/display/mouse_cursor_event_filter.cc | 7 +- .../display/mouse_cursor_event_filter_unittest.cc | 4 +- .../resolution_notification_controller_unittest.cc | 53 ++-- chromium/ash/display/screen_position_controller.cc | 4 + .../display/screen_position_controller_unittest.cc | 8 +- chromium/ash/extended_desktop_unittest.cc | 8 +- chromium/ash/keyboard_controller_proxy_stub.cc | 34 -- chromium/ash/keyboard_controller_proxy_stub.h | 33 -- chromium/ash/launcher/launcher_button.cc | 6 - chromium/ash/launcher/launcher_view.cc | 8 +- chromium/ash/resources/ash_resources.grd | 9 + .../status/status_logout_button_hover_bottom.png | Bin 0 -> 94 bytes .../status_logout_button_hover_bottom_left.png | Bin 0 -> 144 bytes .../status_logout_button_hover_bottom_right.png | Bin 0 -> 152 bytes .../status/status_logout_button_hover_center.png | Bin 0 -> 74 bytes .../status/status_logout_button_hover_left.png | Bin 0 -> 91 bytes .../status/status_logout_button_hover_right.png | Bin 0 -> 92 bytes .../cros/status/status_logout_button_hover_top.png | Bin 0 -> 94 bytes .../status/status_logout_button_hover_top_left.png | Bin 0 -> 128 bytes .../status_logout_button_hover_top_right.png | Bin 0 -> 138 bytes .../status/status_logout_button_normal_bottom.png | Bin 88 -> 89 bytes .../status_logout_button_normal_bottom_left.png | Bin 125 -> 131 bytes .../status_logout_button_normal_bottom_right.png | Bin 135 -> 141 bytes .../status/status_logout_button_normal_center.png | Bin 74 -> 74 bytes .../status/status_logout_button_normal_left.png | Bin 86 -> 85 bytes .../status/status_logout_button_normal_right.png | Bin 89 -> 86 bytes .../status/status_logout_button_normal_top.png | Bin 92 -> 87 bytes .../status_logout_button_normal_top_left.png | Bin 118 -> 119 bytes .../status_logout_button_normal_top_right.png | Bin 117 -> 125 bytes .../status/status_logout_button_pushed_bottom.png | Bin 88 -> 88 bytes .../status_logout_button_pushed_bottom_left.png | Bin 125 -> 103 bytes .../status_logout_button_pushed_bottom_right.png | Bin 135 -> 105 bytes .../status/status_logout_button_pushed_center.png | Bin 74 -> 74 bytes .../status/status_logout_button_pushed_left.png | Bin 86 -> 84 bytes .../status/status_logout_button_pushed_right.png | Bin 89 -> 83 bytes .../status/status_logout_button_pushed_top.png | Bin 92 -> 87 bytes .../status_logout_button_pushed_top_left.png | Bin 118 -> 103 bytes .../status_logout_button_pushed_top_right.png | Bin 125 -> 105 bytes .../cros/status/status_managed_mode_user.png | Bin 336 -> 3095 bytes .../status/status_logout_button_hover_bottom.png | Bin 0 -> 111 bytes .../status_logout_button_hover_bottom_left.png | Bin 0 -> 241 bytes .../status_logout_button_hover_bottom_right.png | Bin 0 -> 236 bytes .../status/status_logout_button_hover_center.png | Bin 0 -> 76 bytes .../status/status_logout_button_hover_left.png | Bin 0 -> 100 bytes .../status/status_logout_button_hover_right.png | Bin 0 -> 103 bytes .../cros/status/status_logout_button_hover_top.png | Bin 0 -> 101 bytes .../status/status_logout_button_hover_top_left.png | Bin 0 -> 197 bytes .../status_logout_button_hover_top_right.png | Bin 0 -> 212 bytes .../status/status_logout_button_normal_bottom.png | Bin 104 -> 99 bytes .../status_logout_button_normal_bottom_left.png | Bin 250 -> 181 bytes .../status_logout_button_normal_bottom_right.png | Bin 247 -> 190 bytes .../status/status_logout_button_normal_center.png | Bin 91 -> 76 bytes .../status/status_logout_button_normal_left.png | Bin 112 -> 90 bytes .../status/status_logout_button_normal_right.png | Bin 121 -> 93 bytes .../status/status_logout_button_normal_top.png | Bin 102 -> 90 bytes .../status_logout_button_normal_top_left.png | Bin 212 -> 159 bytes .../status_logout_button_normal_top_right.png | Bin 236 -> 162 bytes .../status/status_logout_button_pushed_bottom.png | Bin 104 -> 91 bytes .../status_logout_button_pushed_bottom_left.png | Bin 240 -> 123 bytes .../status_logout_button_pushed_bottom_right.png | Bin 241 -> 125 bytes .../status/status_logout_button_pushed_center.png | Bin 91 -> 76 bytes .../status/status_logout_button_pushed_left.png | Bin 116 -> 88 bytes .../status/status_logout_button_pushed_right.png | Bin 125 -> 88 bytes .../status/status_logout_button_pushed_top.png | Bin 99 -> 90 bytes .../status_logout_button_pushed_top_left.png | Bin 201 -> 130 bytes .../status_logout_button_pushed_top_right.png | Bin 228 -> 127 bytes .../cros/status/status_managed_mode_user.png | Bin 668 -> 3432 bytes chromium/ash/root_window_controller.cc | 46 ++- chromium/ash/root_window_controller.h | 7 +- chromium/ash/root_window_controller_unittest.cc | 79 ----- chromium/ash/shelf/shelf_layout_manager.cc | 144 ++++----- chromium/ash/shelf/shelf_layout_manager.h | 20 +- .../ash/shelf/shelf_layout_manager_unittest.cc | 146 +-------- chromium/ash/shelf/shelf_widget.cc | 42 +-- chromium/ash/shelf/shelf_widget.h | 8 +- chromium/ash/shell.cc | 4 +- chromium/ash/shell/shell_delegate_impl.cc | 33 +- chromium/ash/shell_window_ids.h | 39 ++- chromium/ash/strings/ash_strings_am.xtb | 37 ++- chromium/ash/strings/ash_strings_ar.xtb | 105 ++++--- chromium/ash/strings/ash_strings_bg.xtb | 37 ++- chromium/ash/strings/ash_strings_bn.xtb | 37 ++- chromium/ash/strings/ash_strings_ca.xtb | 37 ++- chromium/ash/strings/ash_strings_cs.xtb | 37 ++- chromium/ash/strings/ash_strings_da.xtb | 41 ++- chromium/ash/strings/ash_strings_de.xtb | 37 ++- chromium/ash/strings/ash_strings_el.xtb | 37 ++- chromium/ash/strings/ash_strings_en-GB.xtb | 37 ++- chromium/ash/strings/ash_strings_es-419.xtb | 37 ++- chromium/ash/strings/ash_strings_es.xtb | 37 ++- chromium/ash/strings/ash_strings_et.xtb | 37 ++- chromium/ash/strings/ash_strings_fa.xtb | 101 +++--- chromium/ash/strings/ash_strings_fi.xtb | 37 ++- chromium/ash/strings/ash_strings_fil.xtb | 37 ++- chromium/ash/strings/ash_strings_fr.xtb | 37 ++- chromium/ash/strings/ash_strings_gu.xtb | 37 ++- chromium/ash/strings/ash_strings_hi.xtb | 49 +-- chromium/ash/strings/ash_strings_hr.xtb | 37 ++- chromium/ash/strings/ash_strings_hu.xtb | 37 ++- chromium/ash/strings/ash_strings_id.xtb | 37 ++- chromium/ash/strings/ash_strings_it.xtb | 37 ++- chromium/ash/strings/ash_strings_iw.xtb | 123 ++++---- chromium/ash/strings/ash_strings_ja.xtb | 37 ++- chromium/ash/strings/ash_strings_kn.xtb | 37 ++- chromium/ash/strings/ash_strings_ko.xtb | 37 ++- chromium/ash/strings/ash_strings_lt.xtb | 37 ++- chromium/ash/strings/ash_strings_lv.xtb | 37 ++- chromium/ash/strings/ash_strings_ml.xtb | 37 ++- chromium/ash/strings/ash_strings_mr.xtb | 37 ++- chromium/ash/strings/ash_strings_ms.xtb | 37 ++- chromium/ash/strings/ash_strings_nl.xtb | 55 ++-- chromium/ash/strings/ash_strings_no.xtb | 37 ++- chromium/ash/strings/ash_strings_pl.xtb | 37 ++- chromium/ash/strings/ash_strings_pt-BR.xtb | 37 ++- chromium/ash/strings/ash_strings_pt-PT.xtb | 37 ++- chromium/ash/strings/ash_strings_ro.xtb | 37 ++- chromium/ash/strings/ash_strings_ru.xtb | 37 ++- chromium/ash/strings/ash_strings_sk.xtb | 37 ++- chromium/ash/strings/ash_strings_sl.xtb | 37 ++- chromium/ash/strings/ash_strings_sr.xtb | 37 ++- chromium/ash/strings/ash_strings_sv.xtb | 37 ++- chromium/ash/strings/ash_strings_sw.xtb | 37 ++- chromium/ash/strings/ash_strings_ta.xtb | 37 ++- chromium/ash/strings/ash_strings_te.xtb | 37 ++- chromium/ash/strings/ash_strings_th.xtb | 37 ++- chromium/ash/strings/ash_strings_tr.xtb | 37 ++- chromium/ash/strings/ash_strings_uk.xtb | 37 ++- chromium/ash/strings/ash_strings_vi.xtb | 37 ++- chromium/ash/strings/ash_strings_zh-CN.xtb | 37 ++- chromium/ash/strings/ash_strings_zh-TW.xtb | 37 ++- .../ash/system/chromeos/network/network_connect.cc | 36 ++- .../ash/system/chromeos/network/network_connect.h | 2 + .../ash/system/chromeos/network/network_icon.cc | 5 +- .../chromeos/network/network_state_notifier.cc | 8 +- .../network/network_state_notifier_unittest.cc | 5 + .../ash/system/chromeos/network/sms_observer.h | 26 ++ chromium/ash/system/chromeos/network/tray_sms.cc | 47 +-- chromium/ash/system/chromeos/network/tray_sms.h | 11 +- .../ash/system/chromeos/settings/tray_settings.cc | 3 + .../ash/system/logout_button/logout_button_tray.cc | 158 ---------- .../ash/system/logout_button/logout_button_tray.h | 62 ---- .../ash/system/logout_button/tray_logout_button.cc | 168 ++++++++++ .../ash/system/logout_button/tray_logout_button.h | 44 +++ chromium/ash/system/status_area_widget.cc | 16 - chromium/ash/system/status_area_widget.h | 5 +- chromium/ash/system/tray/system_tray.cc | 2 + chromium/ash/system/tray/system_tray.h | 1 + chromium/ash/system/tray/system_tray_delegate.h | 13 + chromium/ash/system/tray/system_tray_notifier.cc | 13 + chromium/ash/system/tray/system_tray_notifier.h | 7 + .../ash/system/tray/test_system_tray_delegate.cc | 13 + .../ash/system/tray/test_system_tray_delegate.h | 5 + chromium/ash/system/tray/tray_background_view.h | 3 +- chromium/ash/system/tray/tray_constants.cc | 9 +- chromium/ash/system/tray/tray_constants.h | 4 - chromium/ash/system/tray/tray_image_item.cc | 22 +- chromium/ash/system/tray/tray_image_item.h | 3 - chromium/ash/system/user/tray_user.cc | 29 +- .../web_notification/web_notification_tray.cc | 75 +++-- .../web_notification/web_notification_tray.h | 1 - .../web_notification_tray_unittest.cc | 119 +------ chromium/ash/wm/boot_splash_screen.cc | 75 +++++ chromium/ash/wm/boot_splash_screen.h | 53 ++++ chromium/ash/wm/boot_splash_screen_chromeos.cc | 76 ----- chromium/ash/wm/boot_splash_screen_chromeos.h | 53 ---- .../ash/wm/dock/docked_window_layout_manager.cc | 350 ++++++++++----------- .../ash/wm/dock/docked_window_layout_manager.h | 57 +--- .../dock/docked_window_layout_manager_unittest.cc | 91 +----- chromium/ash/wm/dock/docked_window_resizer.cc | 220 +++---------- chromium/ash/wm/dock/docked_window_resizer.h | 25 +- .../ash/wm/dock/docked_window_resizer_unittest.cc | 56 ++-- chromium/ash/wm/event_client_impl.cc | 43 +-- chromium/ash/wm/frame_painter.h | 2 + chromium/ash/wm/frame_painter_unittest.cc | 58 ++++ .../ash/wm/panels/panel_layout_manager_unittest.cc | 2 - chromium/ash/wm/status_area_layout_manager.cc | 2 +- chromium/ash/wm/window_animations.cc | 3 + chromium/ash/wm/window_resizer.cc | 23 +- chromium/ash/wm/window_selector.cc | 8 +- chromium/ash/wm/window_selector.h | 2 +- chromium/ash/wm/window_util.cc | 22 +- chromium/ash/wm/window_util.h | 12 +- .../ash/wm/workspace/phantom_window_controller.cc | 92 ++---- .../ash/wm/workspace/phantom_window_controller.h | 41 +-- .../ash/wm/workspace/workspace_layout_manager.cc | 34 +- .../workspace/workspace_layout_manager_unittest.cc | 9 + .../ash/wm/workspace/workspace_window_resizer.cc | 26 +- .../ash/wm/workspace/workspace_window_resizer.h | 5 - .../workspace/workspace_window_resizer_unittest.cc | 173 +--------- chromium/ash/wm/workspace_controller.cc | 2 + chromium/ash/wm/workspace_controller_unittest.cc | 8 - 203 files changed, 2785 insertions(+), 3004 deletions(-) delete mode 100644 chromium/ash/keyboard_controller_proxy_stub.cc delete mode 100644 chromium/ash/keyboard_controller_proxy_stub.h create mode 100644 chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_bottom.png create mode 100644 chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_bottom_left.png create mode 100644 chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_bottom_right.png create mode 100644 chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_center.png create mode 100644 chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_left.png create mode 100644 chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_right.png create mode 100644 chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_top.png create mode 100644 chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_top_left.png create mode 100644 chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_top_right.png create mode 100644 chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_bottom.png create mode 100644 chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_bottom_left.png create mode 100644 chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_bottom_right.png create mode 100644 chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_center.png create mode 100644 chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_left.png create mode 100644 chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_right.png create mode 100644 chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_top.png create mode 100644 chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_top_left.png create mode 100644 chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_top_right.png create mode 100644 chromium/ash/system/chromeos/network/sms_observer.h delete mode 100644 chromium/ash/system/logout_button/logout_button_tray.cc delete mode 100644 chromium/ash/system/logout_button/logout_button_tray.h create mode 100644 chromium/ash/system/logout_button/tray_logout_button.cc create mode 100644 chromium/ash/system/logout_button/tray_logout_button.h create mode 100644 chromium/ash/wm/boot_splash_screen.cc create mode 100644 chromium/ash/wm/boot_splash_screen.h delete mode 100644 chromium/ash/wm/boot_splash_screen_chromeos.cc delete mode 100644 chromium/ash/wm/boot_splash_screen_chromeos.h (limited to 'chromium/ash') diff --git a/chromium/ash/ash.gyp b/chromium/ash/ash.gyp index 2fba6f3122a..7a3f1be87e8 100644 --- a/chromium/ash/ash.gyp +++ b/chromium/ash/ash.gyp @@ -130,8 +130,6 @@ 'host/root_window_host_factory.cc', 'host/root_window_host_factory.h', 'host/root_window_host_factory_win.cc', - 'keyboard_controller_proxy_stub.cc', - 'keyboard_controller_proxy_stub.h', 'keyboard_overlay/keyboard_overlay_delegate.cc', 'keyboard_overlay/keyboard_overlay_delegate.h', 'keyboard_overlay/keyboard_overlay_view.cc', @@ -209,7 +207,7 @@ 'system/brightness/brightness_observer.h', 'system/brightness/brightness_control_delegate.h', 'system/brightness/tray_brightness.cc', - 'system/brightness/tray_brightness.h', + 'system/brightness/tray_brightness.h', 'system/chromeos/audio/tray_audio.cc', 'system/chromeos/audio/tray_audio.h', 'system/chromeos/enterprise/enterprise_domain_observer.h', @@ -279,8 +277,8 @@ 'system/locale/locale_notification_controller.cc', 'system/locale/locale_notification_controller.h', 'system/logout_button/logout_button_observer.h', - 'system/logout_button/logout_button_tray.cc', - 'system/logout_button/logout_button_tray.h', + 'system/logout_button/tray_logout_button.cc', + 'system/logout_button/tray_logout_button.h', 'system/monitor/tray_monitor.cc', 'system/monitor/tray_monitor.h', 'system/session_length_limit/session_length_limit_observer.h', @@ -384,8 +382,8 @@ 'wm/ash_focus_rules.h', 'wm/base_layout_manager.cc', 'wm/base_layout_manager.h', - 'wm/boot_splash_screen_chromeos.cc', - 'wm/boot_splash_screen_chromeos.h', + 'wm/boot_splash_screen.cc', + 'wm/boot_splash_screen.h', 'wm/capture_controller.cc', 'wm/capture_controller.h', 'wm/coordinate_conversion.cc', diff --git a/chromium/ash/ash_switches.cc b/chromium/ash/ash_switches.cc index c328b59ef35..b47ba5090d4 100644 --- a/chromium/ash/ash_switches.cc +++ b/chromium/ash/ash_switches.cc @@ -159,10 +159,6 @@ const char kAshTouchHud[] = "ash-touch-hud"; // crbug's [244983, 244990, 244994, 245005, 245012] const char kAshUseAlternateShelfLayout[] = "ash-use-alternate-shelf"; -// Flags explicitly show or hide the shelf alignment menu. -const char kShowShelfAlignmentMenu[] = "show-launcher-alignment-menu"; -const char kHideShelfAlignmentMenu[] = "hide-launcher-alignment-menu"; - // Uses the 1st display in --ash-host-window-bounds as internal display. // This is for debugging on linux desktop. const char kAshUseFirstDisplayAsInternal[] = @@ -191,12 +187,7 @@ const char kForcedMaximizeMode[] = "forced-maximize-mode"; bool UseAlternateShelfLayout() { return CommandLine::ForCurrentProcess()-> - HasSwitch(ash::switches::kAshUseAlternateShelfLayout); -} - -bool ShowShelfAlignmentMenu() { - return CommandLine::ForCurrentProcess()-> - HasSwitch(switches::kShowShelfAlignmentMenu); + HasSwitch(ash::switches::kAshUseAlternateShelfLayout); } #if defined(OS_CHROMEOS) @@ -207,7 +198,7 @@ bool ShowAudioDeviceMenu() { bool UseUsbChargerNotification() { return !CommandLine::ForCurrentProcess()-> - HasSwitch(ash::switches::kAshDisableUsbChargerNotification); + HasSwitch(ash::switches::kAshDisableUsbChargerNotification); } #endif diff --git a/chromium/ash/ash_switches.h b/chromium/ash/ash_switches.h index df615b87f76..7e5d471339b 100644 --- a/chromium/ash/ash_switches.h +++ b/chromium/ash/ash_switches.h @@ -68,15 +68,9 @@ ASH_EXPORT extern const char kForceAshToDesktop[]; #endif ASH_EXPORT extern const char kForcedMaximizeMode[]; -ASH_EXPORT extern const char kShowShelfAlignmentMenu[]; -ASH_EXPORT extern const char kHideShelfAlignmentMenu[]; - // Returns true if the alternate shelf layout should be used. ASH_EXPORT bool UseAlternateShelfLayout(); -// Returns true if side shelf alignment is enabled. -ASH_EXPORT bool ShowShelfAlignmentMenu(); - #if defined(OS_CHROMEOS) // Returns true if new audio handler should be used. ASH_EXPORT bool UseNewAudioHandler(); diff --git a/chromium/ash/display/display_controller.cc b/chromium/ash/display/display_controller.cc index f0ac711e991..fce5a82ed46 100644 --- a/chromium/ash/display/display_controller.cc +++ b/chromium/ash/display/display_controller.cc @@ -288,14 +288,15 @@ int DisplayController::GetNumDisplays() { } void DisplayController::InitPrimaryDisplay() { - const gfx::Display& primary_candidate = + const gfx::Display* primary_candidate = GetDisplayManager()->GetPrimaryDisplayCandidate(); - primary_display_id = primary_candidate.id(); - AddRootWindowForDisplay(primary_candidate); + primary_display_id = primary_candidate->id(); + AddRootWindowForDisplay(*primary_candidate); } void DisplayController::InitSecondaryDisplays() { internal::DisplayManager* display_manager = GetDisplayManager(); + UpdateDisplayBoundsForLayout(); for (size_t i = 0; i < display_manager->GetNumDisplays(); ++i) { const gfx::Display& display = display_manager->GetDisplayAt(i); if (primary_display_id != display.id()) { @@ -303,6 +304,13 @@ void DisplayController::InitSecondaryDisplays() { Shell::GetInstance()->InitRootWindowForSecondaryDisplay(root); } } + if (display_manager->GetNumDisplays() > 1) { + DisplayIdPair pair = GetCurrentDisplayIdPair(); + DisplayLayout layout = GetCurrentDisplayLayout(); + SetPrimaryDisplayId( + layout.primary_id == gfx::Display::kInvalidDisplayID ? + pair.first : layout.primary_id); + } UpdateHostWindowNames(); } @@ -379,7 +387,7 @@ void DisplayController::SetLayoutForCurrentDisplays( if (GetDisplayManager()->GetNumDisplays() < 2) return; const gfx::Display& primary = GetPrimaryDisplay(); - const DisplayIdPair pair = GetDisplayManager()->GetCurrentDisplayIdPair(); + const DisplayIdPair pair = GetCurrentDisplayIdPair(); // Invert if the primary was swapped. DisplayLayout to_set = pair.first == primary.id() ? layout_relative_to_primary : layout_relative_to_primary.Invert(); @@ -404,6 +412,40 @@ void DisplayController::SetLayoutForCurrentDisplays( } } +DisplayLayout DisplayController::GetCurrentDisplayLayout() { + DCHECK_EQ(2U, GetDisplayManager()->num_connected_displays()); + // Invert if the primary was swapped. + if (GetDisplayManager()->num_connected_displays() > 1) { + DisplayIdPair pair = GetCurrentDisplayIdPair(); + return GetDisplayManager()->layout_store()-> + ComputeDisplayLayoutForDisplayIdPair(pair); + } + NOTREACHED() << "DisplayLayout is requested for single display"; + // On release build, just fallback to default instead of blowing up. + DisplayLayout layout = + GetDisplayManager()->layout_store()->default_display_layout(); + layout.primary_id = primary_display_id; + return layout; +} + +DisplayIdPair DisplayController::GetCurrentDisplayIdPair() const { + internal::DisplayManager* display_manager = GetDisplayManager(); + const gfx::Display& primary = GetPrimaryDisplay(); + if (display_manager->IsMirrored()) { + return std::make_pair(primary.id(), + display_manager->mirrored_display().id()); + } + + const gfx::Display& secondary = ScreenAsh::GetSecondaryDisplay(); + if (primary.IsInternal() || + GetDisplayManager()->first_display_id() == primary.id()) { + return std::make_pair(primary.id(), secondary.id()); + } else { + // Display has been Swapped. + return std::make_pair(secondary.id(), primary.id()); + } +} + void DisplayController::ToggleMirrorMode() { internal::DisplayManager* display_manager = GetDisplayManager(); if (display_manager->num_connected_displays() <= 1) @@ -500,7 +542,7 @@ void DisplayController::SetPrimaryDisplay( primary_display_id = new_primary_display.id(); GetDisplayManager()->layout_store()->UpdatePrimaryDisplayId( - display_manager->GetCurrentDisplayIdPair(), primary_display_id); + GetCurrentDisplayIdPair(), primary_display_id); UpdateWorkAreaOfDisplayNearestWindow( primary_root, old_primary_display.GetWorkAreaInsets()); @@ -741,7 +783,7 @@ void DisplayController::PostDisplayConfigurationChange() { internal::DisplayManager* display_manager = GetDisplayManager(); internal::DisplayLayoutStore* layout_store = display_manager->layout_store(); if (display_manager->num_connected_displays() > 1) { - DisplayIdPair pair = display_manager->GetCurrentDisplayIdPair(); + DisplayIdPair pair = GetCurrentDisplayIdPair(); layout_store->UpdateMirrorStatus(pair, display_manager->IsMirrored()); DisplayLayout layout = layout_store->GetRegisteredDisplayLayout(pair); @@ -795,15 +837,14 @@ aura::RootWindow* DisplayController::AddRootWindowForDisplay( } void DisplayController::UpdateDisplayBoundsForLayout() { - internal::DisplayManager* display_manager = GetDisplayManager(); if (Shell::GetScreen()->GetNumDisplays() < 2 || - display_manager->num_connected_displays() < 2) { + GetDisplayManager()->num_connected_displays() < 2) { return; } DCHECK_EQ(2, Shell::GetScreen()->GetNumDisplays()); - const DisplayLayout layout = display_manager->GetCurrentDisplayLayout(); - display_manager->UpdateDisplayBoundsForLayoutById( + const DisplayLayout layout = GetCurrentDisplayLayout(); + Shell::GetInstance()->display_manager()->UpdateDisplayBoundsForLayoutById( layout, GetPrimaryDisplay(), ScreenAsh::GetSecondaryDisplay().id()); } diff --git a/chromium/ash/display/display_controller.h b/chromium/ash/display/display_controller.h index 97620fc93b0..f67f27dfeaa 100644 --- a/chromium/ash/display/display_controller.h +++ b/chromium/ash/display/display_controller.h @@ -133,6 +133,12 @@ class ASH_EXPORT DisplayController : public gfx::DisplayObserver, // the locaion of the secondary display relative to the primary. void SetLayoutForCurrentDisplays(const DisplayLayout& layout); + // Returns the display layout used for current displays. + DisplayLayout GetCurrentDisplayLayout(); + + // Returns the current display pair. + DisplayIdPair GetCurrentDisplayIdPair() const; + // Checks if the mouse pointer is on one of displays, and moves to // the center of the nearest display if it's outside of all displays. void EnsurePointerInDisplays(); diff --git a/chromium/ash/display/display_controller_unittest.cc b/chromium/ash/display/display_controller_unittest.cc index 7e6a0480ec0..9131468c969 100644 --- a/chromium/ash/display/display_controller_unittest.cc +++ b/chromium/ash/display/display_controller_unittest.cc @@ -416,6 +416,31 @@ TEST_F(DisplayControllerTest, BoundsUpdated) { EXPECT_EQ(0, observer.CountAndReset()); } +TEST_F(DisplayControllerTest, MirroredLayout) { + if (!SupportsMultipleDisplays()) + return; + + DisplayController* display_controller = + Shell::GetInstance()->display_controller(); + UpdateDisplay("500x500,400x400"); + EXPECT_FALSE(display_controller->GetCurrentDisplayLayout().mirrored); + EXPECT_EQ(2, Shell::GetScreen()->GetNumDisplays()); + EXPECT_EQ( + 2U, Shell::GetInstance()->display_manager()->num_connected_displays()); + + UpdateDisplay("1+0-500x500,1+0-500x500"); + EXPECT_TRUE(display_controller->GetCurrentDisplayLayout().mirrored); + EXPECT_EQ(1, Shell::GetScreen()->GetNumDisplays()); + EXPECT_EQ( + 2U, Shell::GetInstance()->display_manager()->num_connected_displays()); + + UpdateDisplay("500x500,500x500"); + EXPECT_FALSE(display_controller->GetCurrentDisplayLayout().mirrored); + EXPECT_EQ(2, Shell::GetScreen()->GetNumDisplays()); + EXPECT_EQ( + 2U, Shell::GetInstance()->display_manager()->num_connected_displays()); +} + TEST_F(DisplayControllerTest, InvertLayout) { EXPECT_EQ("left, 0", DisplayLayout(DisplayLayout::RIGHT, 0).Invert().ToString()); @@ -452,8 +477,6 @@ TEST_F(DisplayControllerTest, SwapPrimary) { DisplayController* display_controller = Shell::GetInstance()->display_controller(); - internal::DisplayManager* display_manager = - Shell::GetInstance()->display_manager(); UpdateDisplay("200x200,300x300"); gfx::Display primary_display = Shell::GetScreen()->GetPrimaryDisplay(); @@ -483,12 +506,12 @@ TEST_F(DisplayControllerTest, SwapPrimary) { EXPECT_EQ("200,0 300x300", secondary_display.bounds().ToString()); EXPECT_EQ("200,0 300x252", secondary_display.work_area().ToString()); EXPECT_EQ("right, 50", - display_manager->GetCurrentDisplayLayout().ToString()); + display_controller->GetCurrentDisplayLayout().ToString()); // Switch primary and secondary display_controller->SetPrimaryDisplay(secondary_display); const DisplayLayout& inverted_layout = - display_manager->GetCurrentDisplayLayout(); + display_controller->GetCurrentDisplayLayout(); EXPECT_EQ("left, -50", inverted_layout.ToString()); EXPECT_EQ(secondary_display.id(), @@ -543,8 +566,6 @@ TEST_F(DisplayControllerTest, SwapPrimaryById) { DisplayController* display_controller = Shell::GetInstance()->display_controller(); - internal::DisplayManager* display_manager = - Shell::GetInstance()->display_manager(); UpdateDisplay("200x200,300x300"); gfx::Display primary_display = Shell::GetScreen()->GetPrimaryDisplay(); @@ -587,7 +608,7 @@ TEST_F(DisplayControllerTest, SwapPrimaryById) { EXPECT_FALSE(secondary_root->Contains(launcher_window)); const DisplayLayout& inverted_layout = - display_manager->GetCurrentDisplayLayout(); + display_controller->GetCurrentDisplayLayout(); EXPECT_EQ("left, -50", inverted_layout.ToString()); @@ -613,6 +634,8 @@ TEST_F(DisplayControllerTest, SwapPrimaryById) { EXPECT_FALSE(tracker.Contains(secondary_root)); EXPECT_TRUE(primary_root->Contains(launcher_window)); + internal::DisplayManager* display_manager = + Shell::GetInstance()->display_manager(); // Adding 2nd display with the same ID. The 2nd display should become primary // since secondary id is still stored as desirable_primary_id. std::vector display_info_list; diff --git a/chromium/ash/display/display_info.cc b/chromium/ash/display/display_info.cc index 5e89a0d97f6..8f71e6d0c80 100644 --- a/chromium/ash/display/display_info.cc +++ b/chromium/ash/display/display_info.cc @@ -96,20 +96,6 @@ DisplayInfo DisplayInfo::CreateFromSpecWithID(const std::string& spec, &device_scale_factor) >= 4) { bounds_in_pixel.SetRect(x, y, width, height); } - - std::vector resolutions; - if (Tokenize(main_spec, "#", &parts) == 2) { - main_spec = parts[0]; - std::string resolution_list = parts[1]; - count = Tokenize(resolution_list, "|", &parts); - for (size_t i = 0; i < count; ++i) { - std::string resolution = parts[i]; - int width, height; - if (sscanf(resolution.c_str(), "%dx%d", &width, &height) == 2) - resolutions.push_back(Resolution(gfx::Size(width, height), false)); - } - } - if (id == gfx::Display::kInvalidDisplayID) id = synthesized_display_id++; DisplayInfo display_info( @@ -118,7 +104,6 @@ DisplayInfo DisplayInfo::CreateFromSpecWithID(const std::string& spec, display_info.set_rotation(rotation); display_info.set_ui_scale(ui_scale); display_info.SetBounds(bounds_in_pixel); - display_info.set_resolutions(resolutions); // To test the overscan, it creates the default 5% overscan. if (has_overscan) { diff --git a/chromium/ash/display/display_info.h b/chromium/ash/display/display_info.h index 17ba5f6cfaa..899dd1541a2 100644 --- a/chromium/ash/display/display_info.h +++ b/chromium/ash/display/display_info.h @@ -36,8 +36,7 @@ class ASH_EXPORT DisplayInfo { // whose size is 1440x800 at the location (100, 200) in host coordinates. // The format is // - // [origin-]widthxheight[*device_scale_factor][#resolutions list] - // [/][@ui-scale] + // [origin-]widthxheight[*device_scale_factor][/][@ui-scale] // // where [] are optional: // - |origin| is given in x+y- format. @@ -47,8 +46,6 @@ class ASH_EXPORT DisplayInfo { // (to the 'r'ight) 'u' is 180 degrees ('u'pside-down) and 'l' is // 270 degrees (to the 'l'eft). // - ui-scale is floating value, e.g. @1.5 or @1.25. - // - |resolution list| is the list of size that is given in - // |width x height| separated by '|'. // // A couple of examples: // "100x100" @@ -64,9 +61,6 @@ class ASH_EXPORT DisplayInfo { // "10+20-300x200/u@1.5" // 300x200 window at 10,20 origin. 1x device scale factor. // no overscan. flipped upside-down (180 degree) and 1.5 ui scale. - // "200x100#300x200|200x100|100x100" - // 200x100 window at 0,0 origin, with 3 possible resolutions, - // 300x200, 200x100 and 100x100. static DisplayInfo CreateFromSpec(const std::string& spec); // Creates a DisplayInfo from string spec using given |id|. diff --git a/chromium/ash/display/display_info_unittest.cc b/chromium/ash/display/display_info_unittest.cc index 4e9768de049..d425046c89c 100644 --- a/chromium/ash/display/display_info_unittest.cc +++ b/chromium/ash/display/display_info_unittest.cc @@ -43,14 +43,6 @@ TEST_F(DisplayInfoTest, CreateFromSpec) { EXPECT_EQ("10,20 300x400", info.bounds_in_pixel().ToString()); EXPECT_EQ(gfx::Display::ROTATE_270, info.rotation()); EXPECT_EQ(1.5f, info.ui_scale()); - - info = DisplayInfo::CreateFromSpecWithID( - "200x200#300x200|200x200|100x100", 10); - EXPECT_EQ("0,0 200x200", info.bounds_in_pixel().ToString()); - EXPECT_EQ(3u, info.resolutions().size()); - EXPECT_EQ("300x200", info.resolutions()[0].size.ToString()); - EXPECT_EQ("200x200", info.resolutions()[1].size.ToString()); - EXPECT_EQ("100x100", info.resolutions()[2].size.ToString()); } } // namespace internal diff --git a/chromium/ash/display/display_manager.cc b/chromium/ash/display/display_manager.cc index 8953fc8ab93..5943f99b189 100644 --- a/chromium/ash/display/display_manager.cc +++ b/chromium/ash/display/display_manager.cc @@ -72,14 +72,6 @@ struct DisplayInfoSortFunctor { } }; -struct ResolutionMatcher { - ResolutionMatcher(const gfx::Size& size) : size(size) {} - bool operator()(const Resolution& resolution) { - return resolution.size == size; - } - gfx::Size size; -}; - struct ScaleComparator { ScaleComparator(float s) : scale(s) {} @@ -95,12 +87,6 @@ gfx::Display& GetInvalidDisplay() { return *invalid_display; } -void MaybeInitInternalDisplay(int64 id) { - CommandLine* command_line = CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(switches::kAshUseFirstDisplayAsInternal)) - gfx::Display::SetInternalDisplayId(id); -} - // Scoped objects used to either create or close the mirror window // at specific timing. class MirrorWindowCreator { @@ -215,8 +201,9 @@ void DisplayManager::InitFromCommandLine() { iter != parts.end(); ++iter) { info_list.push_back(DisplayInfo::CreateFromSpec(*iter)); } - if (info_list.size()) - MaybeInitInternalDisplay(info_list[0].id()); + CommandLine* command_line = CommandLine::ForCurrentProcess(); + if (command_line->HasSwitch(switches::kAshUseFirstDisplayAsInternal)) + gfx::Display::SetInternalDisplayId(info_list[0].id()); OnNativeDisplaysChanged(info_list); } @@ -249,38 +236,6 @@ bool DisplayManager::IsInternalDisplayId(int64 id) const { return gfx::Display::InternalDisplayId() == id; } -DisplayLayout DisplayManager::GetCurrentDisplayLayout() { - DCHECK_EQ(2U, num_connected_displays()); - // Invert if the primary was swapped. - if (num_connected_displays() > 1) { - DisplayIdPair pair = GetCurrentDisplayIdPair(); - return layout_store_->ComputeDisplayLayoutForDisplayIdPair(pair); - } - NOTREACHED() << "DisplayLayout is requested for single display"; - // On release build, just fallback to default instead of blowing up. - DisplayLayout layout = - layout_store_->default_display_layout(); - layout.primary_id = displays_[0].id(); - return layout; -} - -DisplayIdPair DisplayManager::GetCurrentDisplayIdPair() const { - if (IsMirrored()) { - int64 mirrored_id = mirrored_display().id(); - return displays_[0].id() == mirrored_id ? - std::make_pair(displays_[1].id(), mirrored_id) : - std::make_pair(displays_[0].id(), mirrored_id); - } else { - int64 id_at_zero = displays_[0].id(); - if (id_at_zero == gfx::Display::InternalDisplayId() || - id_at_zero == first_display_id()) { - return std::make_pair(id_at_zero, displays_[1].id()); - } else { - return std::make_pair(displays_[1].id(), id_at_zero); - } - } -} - const gfx::Display& DisplayManager::GetDisplayForId(int64 id) const { gfx::Display* display = const_cast(this)->FindDisplayForId(id); @@ -371,23 +326,7 @@ void DisplayManager::SetDisplayResolution(int64 display_id, DCHECK_NE(gfx::Display::InternalDisplayId(), display_id); if (gfx::Display::InternalDisplayId() == display_id) return; - const DisplayInfo& display_info = GetDisplayInfo(display_id); - const std::vector& resolutions = display_info.resolutions(); - DCHECK_NE(0u, resolutions.size()); - std::vector::const_iterator iter = - std::find_if(resolutions.begin(), - resolutions.end(), - ResolutionMatcher(resolution)); - if (iter == resolutions.end()) { - LOG(WARNING) << "Unsupported resolution was requested:" - << resolution.ToString(); - return; - } else if (iter == resolutions.begin()) { - // The best resolution was set, so forget it. - resolutions_.erase(display_id); - } else { - resolutions_[display_id] = resolution; - } + resolutions_[display_id] = resolution; #if defined(OS_CHROMEOS) && defined(USE_X11) if (base::chromeos::IsRunningOnChromeOS()) Shell::GetInstance()->output_configurator()->ScheduleConfigureOutputs(); @@ -456,7 +395,6 @@ void DisplayManager::OnNativeDisplaysChanged( if (displays_.empty()) { std::vector init_displays; init_displays.push_back(DisplayInfo::CreateFromSpec(std::string())); - MaybeInitInternalDisplay(init_displays[0].id()); OnNativeDisplaysChanged(init_displays); } else { // Otherwise don't update the displays when all displays are disconnected. @@ -704,13 +642,28 @@ const gfx::Display& DisplayManager::GetDisplayAt(size_t index) const { return displays_[index]; } -const gfx::Display& DisplayManager::GetPrimaryDisplayCandidate() const { - if (GetNumDisplays() == 1) { - return displays_[0]; +const gfx::Display* DisplayManager::GetPrimaryDisplayCandidate() const { + const gfx::Display* primary_candidate = &displays_[0]; +#if defined(OS_CHROMEOS) + if (base::chromeos::IsRunningOnChromeOS()) { + // On ChromeOS device, root windows are stacked vertically, and + // default primary is the one on top. + int count = GetNumDisplays(); + int y = GetDisplayInfo(primary_candidate->id()).bounds_in_pixel().y(); + for (int i = 1; i < count; ++i) { + const gfx::Display* display = &displays_[i]; + const DisplayInfo& display_info = GetDisplayInfo(display->id()); + if (display->IsInternal()) { + primary_candidate = display; + break; + } else if (display_info.bounds_in_pixel().y() < y) { + primary_candidate = display; + y = display_info.bounds_in_pixel().y(); + } + } } - DisplayLayout layout = layout_store_->GetRegisteredDisplayLayout( - GetCurrentDisplayIdPair()); - return GetDisplayForId(layout.primary_id); +#endif + return primary_candidate; } size_t DisplayManager::GetNumDisplays() const { @@ -780,7 +733,7 @@ void DisplayManager::SetMirrorMode(bool mirrored) { void DisplayManager::AddRemoveDisplay() { DCHECK(!displays_.empty()); std::vector new_display_info_list; - const DisplayInfo& first_display = GetDisplayInfo(displays_[0].id()); + DisplayInfo first_display = GetDisplayInfo(displays_[0].id()); new_display_info_list.push_back(first_display); // Add if there is only one display connected. if (num_connected_displays() == 1) { @@ -899,9 +852,6 @@ bool DisplayManager::UpdateSecondaryDisplayBoundsForLayout( primary_index = 1; secondary_index = 0; } - // This function may be called before the secondary display is - // registered. The bounds is empty in that case and will - // return true. gfx::Rect bounds = GetDisplayForId(displays->at(secondary_index).id()).bounds(); UpdateDisplayBoundsForLayout( diff --git a/chromium/ash/display/display_manager.h b/chromium/ash/display/display_manager.h index f7554a79705..24303e1909b 100644 --- a/chromium/ash/display/display_manager.h +++ b/chromium/ash/display/display_manager.h @@ -107,12 +107,6 @@ class ASH_EXPORT DisplayManager bool IsInternalDisplayId(int64 id) const; - // Returns the display layout used for current displays. - DisplayLayout GetCurrentDisplayLayout(); - - // Returns the current display pair. - DisplayIdPair GetCurrentDisplayIdPair() const; - // Returns display for given |id|; const gfx::Display& GetDisplayForId(int64 id) const; @@ -176,7 +170,7 @@ class ASH_EXPORT DisplayManager // no longer considered "primary". const gfx::Display& GetDisplayAt(size_t index) const; - const gfx::Display& GetPrimaryDisplayCandidate() const; + const gfx::Display* GetPrimaryDisplayCandidate() const; // Returns the logical number of displays. This returns 1 // when displays are mirrored. diff --git a/chromium/ash/display/display_manager_unittest.cc b/chromium/ash/display/display_manager_unittest.cc index f7b6d1ded4f..33ca06e70d2 100644 --- a/chromium/ash/display/display_manager_unittest.cc +++ b/chromium/ash/display/display_manager_unittest.cc @@ -717,42 +717,6 @@ TEST_F(DisplayManagerTest, NativeDisplaysChangedAfterPrimaryChange) { EXPECT_EQ("0,0 100x100", GetDisplayForId(10).bounds().ToString()); } -TEST_F(DisplayManagerTest, DontRememberBestResolution) { - int display_id = 1000; - DisplayInfo native_display_info = - CreateDisplayInfo(display_id, gfx::Rect(0, 0, 1000, 500)); - std::vector resolutions; - resolutions.push_back(Resolution(gfx::Size(1000, 500), false)); - resolutions.push_back(Resolution(gfx::Size(800, 300), false)); - resolutions.push_back(Resolution(gfx::Size(400, 500), false)); - - native_display_info.set_resolutions(resolutions); - - std::vector display_info_list; - display_info_list.push_back(native_display_info); - display_manager()->OnNativeDisplaysChanged(display_info_list); - - gfx::Size selected; - EXPECT_FALSE(display_manager()->GetSelectedResolutionForDisplayId( - display_id, &selected)); - - // Unsupported resolution. - display_manager()->SetDisplayResolution(display_id, gfx::Size(800, 4000)); - EXPECT_FALSE(display_manager()->GetSelectedResolutionForDisplayId( - display_id, &selected)); - - // Supported resolution. - display_manager()->SetDisplayResolution(display_id, gfx::Size(800, 300)); - EXPECT_TRUE(display_manager()->GetSelectedResolutionForDisplayId( - display_id, &selected)); - EXPECT_EQ("800x300", selected.ToString()); - - // Best resolution. - display_manager()->SetDisplayResolution(display_id, gfx::Size(1000, 500)); - EXPECT_FALSE(display_manager()->GetSelectedResolutionForDisplayId( - display_id, &selected)); -} - TEST_F(DisplayManagerTest, Rotate) { if (!SupportsMultipleDisplays()) return; @@ -1027,26 +991,5 @@ TEST_F(DisplayManagerTest, SoftwareMirroring) { Shell::GetScreen()->RemoveObserver(&display_observer); } -TEST_F(DisplayManagerTest, MirroredLayout) { - if (!SupportsMultipleDisplays()) - return; - - DisplayManager* display_manager = Shell::GetInstance()->display_manager(); - UpdateDisplay("500x500,400x400"); - EXPECT_FALSE(display_manager->GetCurrentDisplayLayout().mirrored); - EXPECT_EQ(2, Shell::GetScreen()->GetNumDisplays()); - EXPECT_EQ(2U, display_manager->num_connected_displays()); - - UpdateDisplay("1+0-500x500,1+0-500x500"); - EXPECT_TRUE(display_manager->GetCurrentDisplayLayout().mirrored); - EXPECT_EQ(1, Shell::GetScreen()->GetNumDisplays()); - EXPECT_EQ(2U, display_manager->num_connected_displays()); - - UpdateDisplay("500x500,500x500"); - EXPECT_FALSE(display_manager->GetCurrentDisplayLayout().mirrored); - EXPECT_EQ(2, Shell::GetScreen()->GetNumDisplays()); - EXPECT_EQ(2U, display_manager->num_connected_displays()); -} - } // namespace internal } // namespace ash diff --git a/chromium/ash/display/mouse_cursor_event_filter.cc b/chromium/ash/display/mouse_cursor_event_filter.cc index f3c3a746d47..419ea783207 100644 --- a/chromium/ash/display/mouse_cursor_event_filter.cc +++ b/chromium/ash/display/mouse_cursor_event_filter.cc @@ -5,7 +5,6 @@ #include "ash/display/mouse_cursor_event_filter.h" #include "ash/display/display_controller.h" -#include "ash/display/display_manager.h" #include "ash/display/mirror_window_controller.h" #include "ash/display/shared_display_edge_indicator.h" #include "ash/screen_ash.h" @@ -58,7 +57,7 @@ void MouseCursorEventFilter::ShowSharedEdgeIndicator( drag_source_root_ = from; DisplayLayout::Position position = Shell::GetInstance()-> - display_manager()->GetCurrentDisplayLayout().position; + display_controller()->GetCurrentDisplayLayout().position; if (position == DisplayLayout::TOP || position == DisplayLayout::BOTTOM) UpdateHorizontalIndicatorWindowBounds(); else @@ -159,7 +158,7 @@ void MouseCursorEventFilter::UpdateHorizontalIndicatorWindowBounds() { Shell::GetScreen()->GetPrimaryDisplay().bounds(); const gfx::Rect secondary_bounds = ScreenAsh::GetSecondaryDisplay().bounds(); DisplayLayout::Position position = Shell::GetInstance()-> - display_manager()->GetCurrentDisplayLayout().position; + display_controller()->GetCurrentDisplayLayout().position; src_indicator_bounds_.set_x( std::max(primary_bounds.x(), secondary_bounds.x())); @@ -188,7 +187,7 @@ void MouseCursorEventFilter::UpdateVerticalIndicatorWindowBounds() { Shell::GetScreen()->GetPrimaryDisplay().bounds(); const gfx::Rect secondary_bounds = ScreenAsh::GetSecondaryDisplay().bounds(); DisplayLayout::Position position = Shell::GetInstance()-> - display_manager()->GetCurrentDisplayLayout().position; + display_controller()->GetCurrentDisplayLayout().position; int upper_shared_y = std::max(primary_bounds.y(), secondary_bounds.y()); int lower_shared_y = std::min(primary_bounds.bottom(), diff --git a/chromium/ash/display/mouse_cursor_event_filter_unittest.cc b/chromium/ash/display/mouse_cursor_event_filter_unittest.cc index e4c1f554ed8..db4c5dc1c70 100644 --- a/chromium/ash/display/mouse_cursor_event_filter_unittest.cc +++ b/chromium/ash/display/mouse_cursor_event_filter_unittest.cc @@ -108,7 +108,7 @@ TEST_F(MouseCursorEventFilterTest, WarpMouseDifferentSizeDisplays) { Shell::GetInstance()->mouse_cursor_filter(); ASSERT_EQ( DisplayLayout::RIGHT, - Shell::GetInstance()->display_manager()-> + Shell::GetInstance()->display_controller()-> GetCurrentDisplayLayout().position); Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); @@ -143,7 +143,7 @@ TEST_F(MouseCursorEventFilterTest, WarpMouseDifferentScaleDisplays) { Shell::GetInstance()->mouse_cursor_filter(); ASSERT_EQ( DisplayLayout::RIGHT, - Shell::GetInstance()->display_manager()-> + Shell::GetInstance()->display_controller()-> GetCurrentDisplayLayout().position); Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); diff --git a/chromium/ash/display/resolution_notification_controller_unittest.cc b/chromium/ash/display/resolution_notification_controller_unittest.cc index 036cce0d85c..3a479f98fd3 100644 --- a/chromium/ash/display/resolution_notification_controller_unittest.cc +++ b/chromium/ash/display/resolution_notification_controller_unittest.cc @@ -43,18 +43,16 @@ class ResolutionNotificationControllerTest : public ash::test::AshTestBase { // OnConfigurationChanged event won't be emitted in the test environment, // so invoke UpdateDisplay() to emit that event explicitly. - std::vector info_list; + std::string display_spec; for (size_t i = 0; i < display_manager->GetNumDisplays(); ++i) { + if (i > 0) + display_spec.append(","); int64 id = display_manager->GetDisplayAt(i).id(); - DisplayInfo info = display_manager->GetDisplayInfo(id); - if (display.id() == id) { - gfx::Rect bounds = info.bounds_in_pixel(); - bounds.set_size(new_resolution); - info.SetBounds(bounds); - } - info_list.push_back(info); + gfx::Size size = (display.id() == id) ? + new_resolution : display_manager->GetDisplayInfo(id).size_in_pixel(); + display_spec.append(size.ToString()); } - display_manager->OnNativeDisplaysChanged(info_list); + UpdateDisplay(display_spec); RunAllPendingInMessageLoop(); } @@ -106,7 +104,7 @@ TEST_F(ResolutionNotificationControllerTest, Basic) { if (!SupportsMultipleDisplays()) return; - UpdateDisplay("300x300#300x300|200x200,250x250#250x250|200x200"); + UpdateDisplay("100x100,150x150"); int64 id2 = ash::ScreenAsh::GetSecondaryDisplay().id(); ash::internal::DisplayManager* display_manager = ash::Shell::GetInstance()->display_manager(); @@ -123,20 +121,21 @@ TEST_F(ResolutionNotificationControllerTest, Basic) { display_manager->GetSelectedResolutionForDisplayId(id2, &resolution)); EXPECT_EQ("200x200", resolution.ToString()); - // Click the revert button, which reverts to the best resolution. + // Click the revert button, which reverts the resolution. ClickOnNotificationButton(0); RunAllPendingInMessageLoop(); EXPECT_FALSE(IsNotificationVisible()); EXPECT_EQ(0, accept_count()); - EXPECT_FALSE( + EXPECT_TRUE( display_manager->GetSelectedResolutionForDisplayId(id2, &resolution)); + EXPECT_EQ("150x150", resolution.ToString()); } TEST_F(ResolutionNotificationControllerTest, ClickMeansAccept) { if (!SupportsMultipleDisplays()) return; - UpdateDisplay("300x300#300x300|200x200,250x250#250x250|200x200"); + UpdateDisplay("100x100,150x150"); int64 id2 = ash::ScreenAsh::GetSecondaryDisplay().id(); ash::internal::DisplayManager* display_manager = ash::Shell::GetInstance()->display_manager(); @@ -170,7 +169,7 @@ TEST_F(ResolutionNotificationControllerTest, AcceptButton) { ash::internal::DisplayManager* display_manager = ash::Shell::GetInstance()->display_manager(); - UpdateDisplay("300x300#300x300|200x200"); + UpdateDisplay("100x100"); const gfx::Display& display = ash::Shell::GetScreen()->GetPrimaryDisplay(); SetDisplayResolutionAndNotify(display, gfx::Size(200, 200)); EXPECT_TRUE(IsNotificationVisible()); @@ -187,7 +186,7 @@ TEST_F(ResolutionNotificationControllerTest, AcceptButton) { EXPECT_EQ("200x200", resolution.ToString()); // In that case the second button is revert. - UpdateDisplay("300x300#300x300|200x200"); + UpdateDisplay("100x100"); SetDisplayResolutionAndNotify(display, gfx::Size(200, 200)); EXPECT_TRUE(IsNotificationVisible()); @@ -195,8 +194,9 @@ TEST_F(ResolutionNotificationControllerTest, AcceptButton) { ClickOnNotificationButton(1); EXPECT_FALSE(IsNotificationVisible()); EXPECT_EQ(1, accept_count()); - EXPECT_FALSE(display_manager->GetSelectedResolutionForDisplayId( + EXPECT_TRUE(display_manager->GetSelectedResolutionForDisplayId( display.id(), &resolution)); + EXPECT_EQ("100x100", resolution.ToString()); } TEST_F(ResolutionNotificationControllerTest, Close) { @@ -232,7 +232,7 @@ TEST_F(ResolutionNotificationControllerTest, Timeout) { if (!SupportsMultipleDisplays()) return; - UpdateDisplay("300x300#300x300|200x200"); + UpdateDisplay("100x100"); const gfx::Display& display = ash::Shell::GetScreen()->GetPrimaryDisplay(); SetDisplayResolutionAndNotify(display, gfx::Size(200, 200)); @@ -247,38 +247,39 @@ TEST_F(ResolutionNotificationControllerTest, Timeout) { gfx::Size resolution; ash::internal::DisplayManager* display_manager = ash::Shell::GetInstance()->display_manager(); - EXPECT_FALSE(display_manager->GetSelectedResolutionForDisplayId( + EXPECT_TRUE(display_manager->GetSelectedResolutionForDisplayId( display.id(), &resolution)); + EXPECT_EQ("100x100", resolution.ToString()); } TEST_F(ResolutionNotificationControllerTest, DisplayDisconnected) { if (!SupportsMultipleDisplays()) return; - UpdateDisplay("300x300#300x300|200x200,200x200#250x250|200x200|100x100"); + UpdateDisplay("100x100,150x150"); int64 id2 = ash::ScreenAsh::GetSecondaryDisplay().id(); ash::internal::DisplayManager* display_manager = ash::Shell::GetInstance()->display_manager(); SetDisplayResolutionAndNotify( - ScreenAsh::GetSecondaryDisplay(), gfx::Size(100, 100)); + ScreenAsh::GetSecondaryDisplay(), gfx::Size(200, 200)); ASSERT_TRUE(IsNotificationVisible()); // Disconnects the secondary display and verifies it doesn't cause crashes. - UpdateDisplay("300x300#300x300|200x200"); + UpdateDisplay("100x100"); RunAllPendingInMessageLoop(); EXPECT_FALSE(IsNotificationVisible()); EXPECT_EQ(0, accept_count()); gfx::Size resolution; EXPECT_TRUE( display_manager->GetSelectedResolutionForDisplayId(id2, &resolution)); - EXPECT_EQ("200x200", resolution.ToString()); + EXPECT_EQ("150x150", resolution.ToString()); } TEST_F(ResolutionNotificationControllerTest, MultipleResolutionChange) { if (!SupportsMultipleDisplays()) return; - UpdateDisplay("300x300#300x300|200x200,250x250#250x250|200x200"); + UpdateDisplay("100x100,150x150"); int64 id2 = ash::ScreenAsh::GetSecondaryDisplay().id(); ash::internal::DisplayManager* display_manager = ash::Shell::GetInstance()->display_manager(); @@ -296,8 +297,9 @@ TEST_F(ResolutionNotificationControllerTest, MultipleResolutionChange) { // visible. SetDisplayResolutionAndNotify( ScreenAsh::GetSecondaryDisplay(), gfx::Size(250, 250)); - EXPECT_FALSE( + EXPECT_TRUE( display_manager->GetSelectedResolutionForDisplayId(id2, &resolution)); + EXPECT_EQ("250x250", resolution.ToString()); // Then, click the revert button. Although |old_resolution| for the second // SetDisplayResolutionAndNotify is 200x200, it should revert to the original @@ -306,8 +308,9 @@ TEST_F(ResolutionNotificationControllerTest, MultipleResolutionChange) { RunAllPendingInMessageLoop(); EXPECT_FALSE(IsNotificationVisible()); EXPECT_EQ(0, accept_count()); - EXPECT_FALSE( + EXPECT_TRUE( display_manager->GetSelectedResolutionForDisplayId(id2, &resolution)); + EXPECT_EQ("150x150", resolution.ToString()); } } // namespace internal diff --git a/chromium/ash/display/screen_position_controller.cc b/chromium/ash/display/screen_position_controller.cc index 8c37efeebe4..03033b4135d 100644 --- a/chromium/ash/display/screen_position_controller.cc +++ b/chromium/ash/display/screen_position_controller.cc @@ -170,6 +170,10 @@ void ScreenPositionController::SetBounds(aura::Window* window, aura::Window* dst_container = NULL; if (dst_root != window->GetRootWindow()) { int container_id = window->parent()->id(); + // Dragging a docked window to another root window should show it floating + // rather than docked in another screen's dock. + if (container_id == kShellWindowId_DockedContainer) + container_id = kShellWindowId_DefaultContainer; // All containers that uses screen coordinates must have valid window ids. DCHECK_GE(container_id, 0); // Don't move modal background. diff --git a/chromium/ash/display/screen_position_controller_unittest.cc b/chromium/ash/display/screen_position_controller_unittest.cc index 260590ac5d3..3b62f52b27b 100644 --- a/chromium/ash/display/screen_position_controller_unittest.cc +++ b/chromium/ash/display/screen_position_controller_unittest.cc @@ -34,11 +34,11 @@ namespace test { namespace { void SetSecondaryDisplayLayout(DisplayLayout::Position position) { - DisplayLayout layout = - Shell::GetInstance()->display_manager()->GetCurrentDisplayLayout(); + DisplayController* display_controller = + Shell::GetInstance()->display_controller(); + DisplayLayout layout = display_controller->GetCurrentDisplayLayout(); layout.position = position; - Shell::GetInstance()->display_controller()-> - SetLayoutForCurrentDisplays(layout); + display_controller->SetLayoutForCurrentDisplays(layout); } internal::ScreenPositionController* GetScreenPositionController() { diff --git a/chromium/ash/extended_desktop_unittest.cc b/chromium/ash/extended_desktop_unittest.cc index d36e8240893..36161e046d0 100644 --- a/chromium/ash/extended_desktop_unittest.cc +++ b/chromium/ash/extended_desktop_unittest.cc @@ -36,11 +36,11 @@ namespace ash { namespace { void SetSecondaryDisplayLayout(DisplayLayout::Position position) { - DisplayLayout layout = - Shell::GetInstance()->display_manager()->GetCurrentDisplayLayout(); + DisplayController* display_controller = + Shell::GetInstance()->display_controller(); + DisplayLayout layout = display_controller->GetCurrentDisplayLayout(); layout.position = position; - Shell::GetInstance()->display_controller()-> - SetLayoutForCurrentDisplays(layout); + display_controller->SetLayoutForCurrentDisplays(layout); } internal::DisplayManager* GetDisplayManager() { diff --git a/chromium/ash/keyboard_controller_proxy_stub.cc b/chromium/ash/keyboard_controller_proxy_stub.cc deleted file mode 100644 index caaa3dd8a2e..00000000000 --- a/chromium/ash/keyboard_controller_proxy_stub.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ash/keyboard_controller_proxy_stub.h" - -#include "ash/shell.h" -#include "ui/views/corewm/input_method_event_filter.h" - -using namespace content; - -namespace ash { - -KeyboardControllerProxyStub::KeyboardControllerProxyStub() { -} - -KeyboardControllerProxyStub::~KeyboardControllerProxyStub() { -} - -BrowserContext* KeyboardControllerProxyStub::GetBrowserContext() { - return Shell::GetInstance()->browser_context(); -} - -ui::InputMethod* KeyboardControllerProxyStub::GetInputMethod() { - return Shell::GetInstance()->input_method_filter()->input_method(); -} - -void KeyboardControllerProxyStub::RequestAudioInput( - WebContents* web_contents, - const MediaStreamRequest& request, - const MediaResponseCallback& callback) { -} - -} // namespace ash diff --git a/chromium/ash/keyboard_controller_proxy_stub.h b/chromium/ash/keyboard_controller_proxy_stub.h deleted file mode 100644 index 25310d71601..00000000000 --- a/chromium/ash/keyboard_controller_proxy_stub.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef ASH_KEYBOARD_CONTROLLER_PROXY_STUB_H_ -#define ASH_KEYBOARD_CONTROLLER_PROXY_STUB_H_ - -#include "ash/ash_export.h" -#include "ui/keyboard/keyboard_controller_proxy.h" - -namespace ash { - -// Stub implementation of KeyboardControllerProxy -class ASH_EXPORT KeyboardControllerProxyStub - : public keyboard::KeyboardControllerProxy { - public: - KeyboardControllerProxyStub(); - virtual ~KeyboardControllerProxyStub(); - - private: - // Overridden from keyboard::KeyboardControllerProxy: - virtual content::BrowserContext* GetBrowserContext() OVERRIDE; - virtual ui::InputMethod* GetInputMethod() OVERRIDE; - virtual void RequestAudioInput(content::WebContents* web_contents, - const content::MediaStreamRequest& request, - const content::MediaResponseCallback& callback) OVERRIDE; - - DISALLOW_COPY_AND_ASSIGN(KeyboardControllerProxyStub); -}; - -} // namespace ash - -#endif // ASH_KEYBOARD_CONTROLLER_PROXY_STUB_H_ diff --git a/chromium/ash/launcher/launcher_button.cc b/chromium/ash/launcher/launcher_button.cc index 26677aef06a..2859d98c361 100644 --- a/chromium/ash/launcher/launcher_button.cc +++ b/chromium/ash/launcher/launcher_button.cc @@ -439,12 +439,6 @@ void LauncherButton::Layout() { icon_width, icon_height)); - // Icon size has been incorrect when running - // PanelLayoutManagerTest.PanelAlignmentSecondDisplay on valgrind bot, see - // http://crbug.com/234854. - DCHECK_LE(icon_width, kIconSize); - DCHECK_LE(icon_height, kIconSize); - bar_->SetBarBoundsRect(button_bounds); UpdateState(); diff --git a/chromium/ash/launcher/launcher_view.cc b/chromium/ash/launcher/launcher_view.cc index 1ec3e9461eb..82f75bed49e 100644 --- a/chromium/ash/launcher/launcher_view.cc +++ b/chromium/ash/launcher/launcher_view.cc @@ -1521,11 +1521,6 @@ void LauncherView::ButtonPressed(views::Button* sender, case TYPE_TABBED: case TYPE_APP_PANEL: delegate_->ItemSelected(model_->items()[view_index], event); - // Don't show the menu when the user creates a new browser using ctrl - // click. - if (model_->items()[view_index].type != TYPE_BROWSER_SHORTCUT || - !(event.flags() & ui::EF_CONTROL_DOWN)) - ShowListMenuForView(model_->items()[view_index], sender, event); break; case TYPE_APP_LIST: @@ -1535,6 +1530,9 @@ void LauncherView::ButtonPressed(views::Button* sender, break; } } + + if (model_->items()[view_index].type != TYPE_APP_LIST) + ShowListMenuForView(model_->items()[view_index], sender, event); } bool LauncherView::ShowListMenuForView(const LauncherItem& item, diff --git a/chromium/ash/resources/ash_resources.grd b/chromium/ash/resources/ash_resources.grd index 991c895a8d0..166fe5f7fb4 100644 --- a/chromium/ash/resources/ash_resources.grd +++ b/chromium/ash/resources/ash_resources.grd @@ -113,6 +113,15 @@ + + + + + + + + + diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_bottom.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_bottom.png new file mode 100644 index 00000000000..4bfbaeb55d3 Binary files /dev/null and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_bottom.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_bottom_left.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_bottom_left.png new file mode 100644 index 00000000000..5a96fee74f6 Binary files /dev/null and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_bottom_left.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_bottom_right.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_bottom_right.png new file mode 100644 index 00000000000..a5ddc1c7237 Binary files /dev/null and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_bottom_right.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_center.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_center.png new file mode 100644 index 00000000000..18ef4f8bb84 Binary files /dev/null and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_center.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_left.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_left.png new file mode 100644 index 00000000000..d806c99e202 Binary files /dev/null and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_left.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_right.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_right.png new file mode 100644 index 00000000000..2baa507df09 Binary files /dev/null and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_right.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_top.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_top.png new file mode 100644 index 00000000000..2752a48b452 Binary files /dev/null and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_top.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_top_left.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_top_left.png new file mode 100644 index 00000000000..71d450df94a Binary files /dev/null and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_top_left.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_top_right.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_top_right.png new file mode 100644 index 00000000000..3270b26e38a Binary files /dev/null and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_hover_top_right.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_bottom.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_bottom.png index 48a9b785df4..76c31f3da51 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_bottom.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_bottom.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_bottom_left.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_bottom_left.png index ed08895c1dc..64dd932a5b3 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_bottom_left.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_bottom_left.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_bottom_right.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_bottom_right.png index 5c411664aba..4ece433cd11 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_bottom_right.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_bottom_right.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_center.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_center.png index 674a2caf3ed..18ef4f8bb84 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_center.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_center.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_left.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_left.png index 0ca8c152c87..5decc7d040f 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_left.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_left.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_right.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_right.png index 107f25ee038..22b08962394 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_right.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_right.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_top.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_top.png index 0c882a30355..8100431a445 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_top.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_top.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_top_left.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_top_left.png index a2885849256..acd66413134 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_top_left.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_top_left.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_top_right.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_top_right.png index ac7c0dffecc..63e7c5180b7 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_top_right.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_normal_top_right.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_bottom.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_bottom.png index 07b1a81db81..cb40232c22f 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_bottom.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_bottom.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_bottom_left.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_bottom_left.png index a0c58bbca50..59664ce57c8 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_bottom_left.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_bottom_left.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_bottom_right.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_bottom_right.png index f20a29d47e6..b6a2d429033 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_bottom_right.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_bottom_right.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_center.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_center.png index 948a9225cbc..95e1357234b 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_center.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_center.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_left.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_left.png index e896e8105e6..6ff819e654d 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_left.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_left.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_right.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_right.png index 47e1e4ba51f..c1e9dda476f 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_right.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_right.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_top.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_top.png index 6e304f22192..f2b8fc513a4 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_top.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_top.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_top_left.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_top_left.png index aecbe19888c..7aa3057f727 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_top_left.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_top_left.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_top_right.png b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_top_right.png index 535677029ef..6d610d5150b 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_top_right.png and b/chromium/ash/resources/default_100_percent/cros/status/status_logout_button_pushed_top_right.png differ diff --git a/chromium/ash/resources/default_100_percent/cros/status/status_managed_mode_user.png b/chromium/ash/resources/default_100_percent/cros/status/status_managed_mode_user.png index 51104172bbd..684702b6242 100644 Binary files a/chromium/ash/resources/default_100_percent/cros/status/status_managed_mode_user.png and b/chromium/ash/resources/default_100_percent/cros/status/status_managed_mode_user.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_bottom.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_bottom.png new file mode 100644 index 00000000000..d15cb08743a Binary files /dev/null and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_bottom.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_bottom_left.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_bottom_left.png new file mode 100644 index 00000000000..40de4bb4838 Binary files /dev/null and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_bottom_left.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_bottom_right.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_bottom_right.png new file mode 100644 index 00000000000..216bffd3734 Binary files /dev/null and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_bottom_right.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_center.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_center.png new file mode 100644 index 00000000000..eb3f2c83973 Binary files /dev/null and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_center.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_left.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_left.png new file mode 100644 index 00000000000..bc35d9dc9c0 Binary files /dev/null and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_left.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_right.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_right.png new file mode 100644 index 00000000000..55ae12825f8 Binary files /dev/null and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_right.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_top.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_top.png new file mode 100644 index 00000000000..a4b48b2e5dd Binary files /dev/null and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_top.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_top_left.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_top_left.png new file mode 100644 index 00000000000..8d3823c18aa Binary files /dev/null and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_top_left.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_top_right.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_top_right.png new file mode 100644 index 00000000000..b73cd7e0640 Binary files /dev/null and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_hover_top_right.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_bottom.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_bottom.png index 679ebe905cd..a6a2e668849 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_bottom.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_bottom.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_bottom_left.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_bottom_left.png index 7b615e65c83..47768bcdf8f 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_bottom_left.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_bottom_left.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_bottom_right.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_bottom_right.png index 149b4a9c5dd..3cd5993e361 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_bottom_right.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_bottom_right.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_center.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_center.png index 436c2ac18a1..eb3f2c83973 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_center.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_center.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_left.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_left.png index c58ee946b2e..dbc95d67135 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_left.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_left.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_right.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_right.png index 5f7d6500ff8..0dc53850876 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_right.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_right.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_top.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_top.png index cc114446f6a..6b9e0865411 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_top.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_top.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_top_left.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_top_left.png index 05dfa2f90cd..3d9ff7fb1fa 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_top_left.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_top_left.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_top_right.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_top_right.png index bf15dcdec00..6f263c28bb4 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_top_right.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_normal_top_right.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_bottom.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_bottom.png index 0e23e565c4c..211e85791c7 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_bottom.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_bottom.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_bottom_left.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_bottom_left.png index 79f2792aa6b..615d7ca5bf8 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_bottom_left.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_bottom_left.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_bottom_right.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_bottom_right.png index d6aa1a4f511..e9a05e16fb5 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_bottom_right.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_bottom_right.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_center.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_center.png index 41a39c92caf..22b0846c757 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_center.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_center.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_left.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_left.png index 1617280c4f7..6c22eee78ef 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_left.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_left.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_right.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_right.png index c5a5730fdfa..315bd16343b 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_right.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_right.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_top.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_top.png index b340b1bc287..e46313972a6 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_top.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_top.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_top_left.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_top_left.png index 787ef70d361..3dede73f9f9 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_top_left.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_top_left.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_top_right.png b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_top_right.png index 5d5f6349fa6..3d9e5d9adb2 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_top_right.png and b/chromium/ash/resources/default_200_percent/cros/status/status_logout_button_pushed_top_right.png differ diff --git a/chromium/ash/resources/default_200_percent/cros/status/status_managed_mode_user.png b/chromium/ash/resources/default_200_percent/cros/status/status_managed_mode_user.png index b0b522db0a2..02eb311e8b8 100644 Binary files a/chromium/ash/resources/default_200_percent/cros/status/status_managed_mode_user.png and b/chromium/ash/resources/default_200_percent/cros/status/status_managed_mode_user.png differ diff --git a/chromium/ash/root_window_controller.cc b/chromium/ash/root_window_controller.cc index dd237436cff..e0c631ebf11 100644 --- a/chromium/ash/root_window_controller.cc +++ b/chromium/ash/root_window_controller.cc @@ -4,6 +4,7 @@ #include "ash/root_window_controller.h" +#include #include #include "ash/ash_constants.h" @@ -27,6 +28,7 @@ #include "ash/touch/touch_observer_hud.h" #include "ash/wm/always_on_top_controller.h" #include "ash/wm/base_layout_manager.h" +#include "ash/wm/boot_splash_screen.h" #include "ash/wm/dock/docked_window_layout_manager.h" #include "ash/wm/panels/panel_layout_manager.h" #include "ash/wm/panels/panel_window_event_handler.h" @@ -44,11 +46,13 @@ #include "base/command_line.h" #include "base/time/time.h" #include "ui/aura/client/aura_constants.h" +#include "ui/aura/client/drag_drop_client.h" #include "ui/aura/client/tooltip_client.h" #include "ui/aura/root_window.h" #include "ui/aura/window.h" #include "ui/aura/window_delegate.h" #include "ui/aura/window_observer.h" +#include "ui/aura/window_tracker.h" #include "ui/base/hit_test.h" #include "ui/base/models/menu_model.h" #include "ui/gfx/screen.h" @@ -59,20 +63,14 @@ #include "ui/views/view_model.h" #include "ui/views/view_model_utils.h" -#if defined(OS_CHROMEOS) -#include "ash/wm/boot_splash_screen_chromeos.h" -#endif - namespace ash { namespace { -#if defined(OS_CHROMEOS) // Duration for the animation that hides the boot splash screen, in // milliseconds. This should be short enough in relation to // wm/window_animation.cc's brightness/grayscale fade animation that the login // background image animation isn't hidden by the splash screen animation. const int kBootSplashScreenHideDurationMs = 500; -#endif // Creates a new window for use as a container. aura::Window* CreateContainer(int window_id, @@ -261,12 +259,17 @@ void RootWindowController::Shutdown() { wallpaper_controller_.reset(); animating_wallpaper_controller_.reset(); - CloseChildWindows(); + // Change the active root window before closing child windows. If any child + // being removed triggers a relayout of the shelf it will try to build a + // window list adding windows from the active root window's containers which + // may have already gone away. if (Shell::GetActiveRootWindow() == root_window_) { Shell::GetInstance()->set_active_root_window( Shell::GetPrimaryRootWindow() == root_window_.get() ? NULL : Shell::GetPrimaryRootWindow()); } + + CloseChildWindows(); SetRootWindowController(root_window_.get(), NULL); screen_dimmer_.reset(); workspace_controller_.reset(); @@ -350,7 +353,6 @@ void RootWindowController::UpdateAfterLoginStatusChange( } void RootWindowController::HandleInitialDesktopBackgroundAnimationStarted() { -#if defined(OS_CHROMEOS) if (CommandLine::ForCurrentProcess()->HasSwitch( switches::kAshAnimateFromBootSplashScreen) && boot_splash_screen_.get()) { @@ -359,15 +361,12 @@ void RootWindowController::HandleInitialDesktopBackgroundAnimationStarted() { boot_splash_screen_->StartHideAnimation( base::TimeDelta::FromMilliseconds(kBootSplashScreenHideDurationMs)); } -#endif } void RootWindowController::OnWallpaperAnimationFinished(views::Widget* widget) { // Make sure the wallpaper is visible. system_background_->SetColor(SK_ColorBLACK); -#if defined(OS_CHROMEOS) boot_splash_screen_.reset(); -#endif Shell::GetInstance()->user_wallpaper_delegate()-> OnWallpaperAnimationFinished(); @@ -404,6 +403,8 @@ void RootWindowController::CloseChildWindows() { docked_layout_manager_ = NULL; } + aura::client::SetDragDropClient(root_window_.get(), NULL); + // TODO(harrym): Remove when Status Area Widget is a child view. shelf_->ShutdownStatusAreaWidget(); @@ -417,10 +418,26 @@ void RootWindowController::CloseChildWindows() { workspace_controller_.reset(); aura::client::SetTooltipClient(root_window_.get(), NULL); - while (!root_window_->children().empty()) { - aura::Window* child = root_window_->children()[0]; - delete child; + // Remove all toplevel windows first. + std::queue non_toplevel_windows; + non_toplevel_windows.push(root_window_.get()); + while (!non_toplevel_windows.empty()) { + aura::Window* non_toplevel_window = non_toplevel_windows.front(); + non_toplevel_windows.pop(); + aura::WindowTracker toplevel_windows; + for (size_t i = 0; i < non_toplevel_window->children().size(); ++i) { + aura::Window* child = non_toplevel_window->children()[i]; + if (child->delegate()) + toplevel_windows.Add(child); + else + non_toplevel_windows.push(child); + } + while (!toplevel_windows.windows().empty()) + delete *toplevel_windows.windows().begin(); } + // And then remove the containers. + while (!root_window_->children().empty()) + delete root_window_->children()[0]; shelf_.reset(NULL); } @@ -496,7 +513,6 @@ void RootWindowController::InitKeyboard() { aura::Window* keyboard_container = keyboard_controller_->GetContainerWindow(); - keyboard_container->set_id(kShellWindowId_VirtualKeyboardContainer); parent->AddChild(keyboard_container); keyboard_container->SetBounds(parent->bounds()); } diff --git a/chromium/ash/root_window_controller.h b/chromium/ash/root_window_controller.h index 140a7d26c17..bbf29ce1e34 100644 --- a/chromium/ash/root_window_controller.h +++ b/chromium/ash/root_window_controller.h @@ -50,6 +50,7 @@ namespace internal { class AlwaysOnTopController; class AnimatingDesktopController; +class BootSplashScreen; class DesktopBackgroundWidgetController; class DockedWindowLayoutManager; class PanelLayoutManager; @@ -63,10 +64,6 @@ class TouchHudDebug; class TouchHudProjection; class WorkspaceController; -#if defined(USE_X11) -class BootSplashScreen; -#endif - // This class maintains the per root window state for ash. This class // owns the root window and other dependent objects that should be // deleted upon the deletion of the root window. The RootWindowController @@ -258,9 +255,7 @@ class ASH_EXPORT RootWindowController : public ShellObserver { PanelLayoutManager* panel_layout_manager_; scoped_ptr system_background_; -#if defined(USE_X11) scoped_ptr boot_splash_screen_; -#endif scoped_ptr screen_dimmer_; scoped_ptr workspace_controller_; diff --git a/chromium/ash/root_window_controller_unittest.cc b/chromium/ash/root_window_controller_unittest.cc index b4c16e35f2a..0d40125b90f 100644 --- a/chromium/ash/root_window_controller_unittest.cc +++ b/chromium/ash/root_window_controller_unittest.cc @@ -13,7 +13,6 @@ #include "ash/wm/system_modal_container_layout_manager.h" #include "ash/wm/window_properties.h" #include "ash/wm/window_util.h" -#include "base/command_line.h" #include "ui/aura/client/focus_change_observer.h" #include "ui/aura/client/focus_client.h" #include "ui/aura/env.h" @@ -23,7 +22,6 @@ #include "ui/aura/test/test_windows.h" #include "ui/aura/window.h" #include "ui/aura/window_tracker.h" -#include "ui/keyboard/keyboard_switches.h" #include "ui/views/controls/menu/menu_controller.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_delegate.h" @@ -82,36 +80,6 @@ class DeleteOnBlurDelegate : public aura::test::TestWindowDelegate, DISALLOW_COPY_AND_ASSIGN(DeleteOnBlurDelegate); }; -class ClickTestWindow : public views::WidgetDelegateView { - public: - ClickTestWindow() : mouse_presses_(0) {} - virtual ~ClickTestWindow() {} - - // Overridden from views::WidgetDelegate: - virtual views::View* GetContentsView() OVERRIDE { - return this; - } - - aura::Window* CreateTestWindowWithParent(aura::Window* parent) { - DCHECK(parent); - views::Widget* widget = Widget::CreateWindowWithParent(this, parent); - return widget->GetNativeView(); - } - - // Overridden from views::View: - virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE { - mouse_presses_++; - return false; - } - - int mouse_presses() const { return mouse_presses_; } - - private: - int mouse_presses_; - - DISALLOW_COPY_AND_ASSIGN(ClickTestWindow); -}; - } // namespace namespace test { @@ -524,52 +492,5 @@ TEST_F(NoSessionRootWindowControllerTest, Event) { gfx::Point(size.width() - 1, size.height() - 1))); } -class VirtualKeyboardRootWindowControllerTest : public test::AshTestBase { - public: - VirtualKeyboardRootWindowControllerTest() {}; - virtual ~VirtualKeyboardRootWindowControllerTest() {}; - - virtual void SetUp() OVERRIDE { - CommandLine::ForCurrentProcess()->AppendSwitch( - keyboard::switches::kEnableVirtualKeyboard); - test::AshTestBase::SetUp(); - } - - private: - DISALLOW_COPY_AND_ASSIGN(VirtualKeyboardRootWindowControllerTest); -}; - -// Test for http://crbug.com/263599. Virtual keyboard should be able to receive -// events at blocked user session. -TEST_F(VirtualKeyboardRootWindowControllerTest, - ClickVirtualKeyboardInBlockedWindow) { - aura::RootWindow* root_window = ash::Shell::GetPrimaryRootWindow(); - aura::Window* keyboard_container = Shell::GetContainer(root_window, - internal::kShellWindowId_VirtualKeyboardContainer); - ASSERT_TRUE(keyboard_container); - keyboard_container->Show(); - - ClickTestWindow* main_delegate = new ClickTestWindow(); - scoped_ptr keyboard_window( - main_delegate->CreateTestWindowWithParent(keyboard_container)); - keyboard_container->layout_manager()->OnWindowResized(); - keyboard_window->Show(); - aura::test::EventGenerator event_generator(root_window, - keyboard_window.get()); - event_generator.ClickLeftButton(); - int expected_mouse_presses = 1; - EXPECT_EQ(expected_mouse_presses, main_delegate->mouse_presses()); - - for (int block_reason = FIRST_BLOCK_REASON; - block_reason < NUMBER_OF_BLOCK_REASONS; - ++block_reason) { - BlockUserSession(static_cast(block_reason)); - event_generator.ClickLeftButton(); - expected_mouse_presses++; - EXPECT_EQ(expected_mouse_presses, main_delegate->mouse_presses()); - UnblockUserSession(); - } -} - } // namespace test } // namespace ash diff --git a/chromium/ash/shelf/shelf_layout_manager.cc b/chromium/ash/shelf/shelf_layout_manager.cc index a507da648a8..e392cc27417 100644 --- a/chromium/ash/shelf/shelf_layout_manager.cc +++ b/chromium/ash/shelf/shelf_layout_manager.cc @@ -197,7 +197,7 @@ class ShelfLayoutManager::UpdateShelfObserver ShelfLayoutManager::ShelfLayoutManager(ShelfWidget* shelf) : root_window_(shelf->GetNativeView()->GetRootWindow()), - updating_bounds_(false), + in_layout_(false), auto_hide_behavior_(SHELF_AUTO_HIDE_BEHAVIOR_NEVER), alignment_(SHELF_ALIGNMENT_BOTTOM), shelf_(shelf), @@ -272,20 +272,34 @@ gfx::Rect ShelfLayoutManager::GetIdealBounds() { } void ShelfLayoutManager::LayoutShelf() { + base::AutoReset auto_reset_in_layout(&in_layout_, true); + StopAnimating(); TargetBounds target_bounds; CalculateTargetBounds(state_, &target_bounds); - UpdateBoundsAndOpacity(target_bounds, false, NULL); - - if (shelf_->launcher()) { - // This is not part of UpdateBoundsAndOpacity() because - // SetLauncherViewBounds() sets the bounds immediately and does not animate. - // The height of the LauncherView for a horizontal shelf and the width of - // the LauncherView for a vertical shelf are set when |shelf_|'s bounds - // are changed via UpdateBoundsAndOpacity(). This sets the origin and the - // dimension in the other direction. + GetLayer(shelf_)->SetOpacity(target_bounds.opacity); + shelf_->SetWidgetBounds( + ScreenAsh::ConvertRectToScreen( + shelf_->GetNativeView()->parent(), + target_bounds.shelf_bounds_in_root)); + if (shelf_->launcher()) shelf_->launcher()->SetLauncherViewBounds( target_bounds.launcher_bounds_in_shelf); - } + GetLayer(shelf_->status_area_widget())->SetOpacity( + target_bounds.status_opacity); + // TODO(harrym): Once status area widget is a child view of shelf + // this can be simplified. + gfx::Rect status_bounds = target_bounds.status_bounds_in_shelf; + status_bounds.set_x(status_bounds.x() + + target_bounds.shelf_bounds_in_root.x()); + status_bounds.set_y(status_bounds.y() + + target_bounds.shelf_bounds_in_root.y()); + shelf_->status_area_widget()->SetBounds( + ScreenAsh::ConvertRectToScreen( + shelf_->status_area_widget()->GetNativeView()->parent(), + status_bounds)); + Shell::GetInstance()->SetDisplayWorkAreaInsets( + root_window_, target_bounds.work_area_insets); + UpdateHitTestBounds(); } ShelfVisibilityState ShelfLayoutManager::CalculateShelfVisibility() { @@ -467,12 +481,17 @@ void ShelfLayoutManager::CompleteGestureDrag(const ui::GestureEvent& gesture) { else UpdateVisibilityState(); gesture_drag_status_ = GESTURE_DRAG_NONE; + LayoutShelf(); } void ShelfLayoutManager::CancelGestureDrag() { - gesture_drag_status_ = GESTURE_DRAG_CANCEL_IN_PROGRESS; - UpdateVisibilityState(); gesture_drag_status_ = GESTURE_DRAG_NONE; + ui::ScopedLayerAnimationSettings + launcher_settings(GetLayer(shelf_)->GetAnimator()), + status_settings(GetLayer(shelf_->status_area_widget())->GetAnimator()); + LayoutShelf(); + UpdateVisibilityState(); + UpdateShelfBackground(BackgroundAnimator::CHANGE_ANIMATE); } //////////////////////////////////////////////////////////////////////////////// @@ -500,7 +519,7 @@ void ShelfLayoutManager::SetChildBounds(aura::Window* child, SetChildBoundsDirect(child, requested_bounds); // We may contain other widgets (such as frame maximize bubble) but they don't // effect the layout in anyway. - if (!updating_bounds_ && + if (!in_layout_ && ((shelf_->GetNativeView() == child) || (shelf_->status_area_widget()->GetNativeView() == child))) { LayoutShelf(); @@ -557,13 +576,7 @@ void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) { state.window_state = workspace_controller_ ? workspace_controller_->GetWindowState() : WORKSPACE_WINDOW_STATE_DEFAULT; - // Force an update because gesture drags affect the shelf bounds and we - // should animate back to the normal bounds at the end of a gesture. - bool force_update = - (gesture_drag_status_ == GESTURE_DRAG_CANCEL_IN_PROGRESS || - gesture_drag_status_ == GESTURE_DRAG_COMPLETE_IN_PROGRESS); - - if (!force_update && state_.Equals(state)) + if (state_.Equals(state)) return; // Nothing changed. FOR_EACH_OBSERVER(ShelfLayoutManagerObserver, observers_, @@ -582,6 +595,26 @@ void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) { State old_state = state_; state_ = state; + TargetBounds target_bounds; + CalculateTargetBounds(state_, &target_bounds); + + ui::ScopedLayerAnimationSettings launcher_animation_setter( + GetLayer(shelf_)->GetAnimator()); + launcher_animation_setter.SetTransitionDuration( + base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS)); + launcher_animation_setter.SetTweenType(ui::Tween::EASE_OUT); + launcher_animation_setter.SetPreemptionStrategy( + ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); + GetLayer(shelf_)->SetBounds( + target_bounds.shelf_bounds_in_root); + GetLayer(shelf_)->SetOpacity(target_bounds.opacity); + ui::ScopedLayerAnimationSettings status_animation_setter( + GetLayer(shelf_->status_area_widget())->GetAnimator()); + status_animation_setter.SetTransitionDuration( + base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS)); + status_animation_setter.SetTweenType(ui::Tween::EASE_OUT); + status_animation_setter.SetPreemptionStrategy( + ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); BackgroundAnimator::ChangeType change_type = BackgroundAnimator::CHANGE_ANIMATE; @@ -611,6 +644,7 @@ void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) { update_shelf_observer_->Detach(); // UpdateShelfBackground deletes itself when the animation is done. update_shelf_observer_ = new UpdateShelfObserver(this); + status_animation_setter.AddObserver(update_shelf_observer_); } else { UpdateShelfBackground(change_type); } @@ -619,10 +653,18 @@ void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) { state.visibility_state == SHELF_VISIBLE && state.window_state == WORKSPACE_WINDOW_STATE_MAXIMIZED); - TargetBounds target_bounds; - CalculateTargetBounds(state_, &target_bounds); - UpdateBoundsAndOpacity(target_bounds, true, - delay_background_change ? update_shelf_observer_ : NULL); + ui::Layer* layer = GetLayer(shelf_->status_area_widget()); + // TODO(harrym): Remove when status_area is view (crbug.com/180422). + gfx::Rect status_bounds = target_bounds.status_bounds_in_shelf; + status_bounds.set_x(status_bounds.x() + + target_bounds.shelf_bounds_in_root.x()); + status_bounds.set_y(status_bounds.y() + + target_bounds.shelf_bounds_in_root.y()); + layer->SetBounds(status_bounds); + layer->SetOpacity(target_bounds.status_opacity); + Shell::GetInstance()->SetDisplayWorkAreaInsets( + root_window_, target_bounds.work_area_insets); + UpdateHitTestBounds(); // OnAutoHideStateChanged Should be emitted when: // - firstly state changed to auto-hide from other state @@ -635,58 +677,6 @@ void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) { } } -void ShelfLayoutManager::UpdateBoundsAndOpacity( - const TargetBounds& target_bounds, - bool animate, - ui::ImplicitAnimationObserver* observer) { - base::AutoReset auto_reset_updating_bounds(&updating_bounds_, true); - - ui::ScopedLayerAnimationSettings launcher_animation_setter( - GetLayer(shelf_)->GetAnimator()); - ui::ScopedLayerAnimationSettings status_animation_setter( - GetLayer(shelf_->status_area_widget())->GetAnimator()); - if (animate) { - launcher_animation_setter.SetTransitionDuration( - base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS)); - launcher_animation_setter.SetTweenType(ui::Tween::EASE_OUT); - launcher_animation_setter.SetPreemptionStrategy( - ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); - status_animation_setter.SetTransitionDuration( - base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS)); - status_animation_setter.SetTweenType(ui::Tween::EASE_OUT); - status_animation_setter.SetPreemptionStrategy( - ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); - } else { - StopAnimating(); - launcher_animation_setter.SetTransitionDuration(base::TimeDelta()); - status_animation_setter.SetTransitionDuration(base::TimeDelta()); - } - if (observer) - status_animation_setter.AddObserver(observer); - - GetLayer(shelf_)->SetOpacity(target_bounds.opacity); - shelf_->SetBounds(ScreenAsh::ConvertRectToScreen( - shelf_->GetNativeView()->parent(), - target_bounds.shelf_bounds_in_root)); - - GetLayer(shelf_->status_area_widget())->SetOpacity( - target_bounds.status_opacity); - // TODO(harrym): Once status area widget is a child view of shelf - // this can be simplified. - gfx::Rect status_bounds = target_bounds.status_bounds_in_shelf; - status_bounds.set_x(status_bounds.x() + - target_bounds.shelf_bounds_in_root.x()); - status_bounds.set_y(status_bounds.y() + - target_bounds.shelf_bounds_in_root.y()); - shelf_->status_area_widget()->SetBounds( - ScreenAsh::ConvertRectToScreen( - shelf_->status_area_widget()->GetNativeView()->parent(), - status_bounds)); - Shell::GetInstance()->SetDisplayWorkAreaInsets( - root_window_, target_bounds.work_area_insets); - UpdateHitTestBounds(); -} - void ShelfLayoutManager::StopAnimating() { GetLayer(shelf_)->GetAnimator()->StopAnimating(); GetLayer(shelf_->status_area_widget())->GetAnimator()->StopAnimating(); diff --git a/chromium/ash/shelf/shelf_layout_manager.h b/chromium/ash/shelf/shelf_layout_manager.h index 56d7032f3db..467fe1a7424 100644 --- a/chromium/ash/shelf/shelf_layout_manager.h +++ b/chromium/ash/shelf/shelf_layout_manager.h @@ -33,15 +33,12 @@ class RootWindow; namespace ui { class GestureEvent; -class ImplicitAnimationObserver; } namespace ash { class ScreenAsh; class ShelfLayoutManagerObserver; class ShelfWidget; -FORWARD_DECLARE_TEST(WebNotificationTrayTest, PopupAndFullscreen); - namespace internal { class PanelLayoutManagerTest; @@ -101,7 +98,7 @@ class ASH_EXPORT ShelfLayoutManager : workspace_controller_ = controller; } - bool updating_bounds() const { return updating_bounds_; } + bool in_layout() const { return in_layout_; } // Clears internal data for shutdown process. void PrepareForShutdown(); @@ -214,7 +211,6 @@ class ASH_EXPORT ShelfLayoutManager : friend class ash::ScreenAsh; friend class PanelLayoutManagerTest; friend class ShelfLayoutManagerTest; - FRIEND_TEST_ALL_PREFIXES(ash::WebNotificationTrayTest, PopupAndFullscreen); struct TargetBounds { TargetBounds(); @@ -255,13 +251,6 @@ class ASH_EXPORT ShelfLayoutManager : // Sets the visibility of the shelf to |state|. void SetState(ShelfVisibilityState visibility_state); - // Updates the bounds and opacity of the launcher and status widgets. - // If |observer| is specified, it will be called back when the animations, if - // any, are complete. - void UpdateBoundsAndOpacity(const TargetBounds& target_bounds, - bool animate, - ui::ImplicitAnimationObserver* observer); - // Stops any animations and progresses them to the end. void StopAnimating(); @@ -330,9 +319,9 @@ class ASH_EXPORT ShelfLayoutManager : // deleted too. aura::RootWindow* root_window_; - // True when inside UpdateBoundsAndOpacity() method. Used to prevent calling - // UpdateBoundsAndOpacity() again from SetChildBounds(). - bool updating_bounds_; + // True when inside LayoutShelf method. Used to prevent calling LayoutShelf + // again from SetChildBounds(). + bool in_layout_; // See description above setter. ShelfAutoHideBehavior auto_hide_behavior_; @@ -371,7 +360,6 @@ class ASH_EXPORT ShelfLayoutManager : enum GestureDragStatus { GESTURE_DRAG_NONE, GESTURE_DRAG_IN_PROGRESS, - GESTURE_DRAG_CANCEL_IN_PROGRESS, GESTURE_DRAG_COMPLETE_IN_PROGRESS }; GestureDragStatus gesture_drag_status_; diff --git a/chromium/ash/shelf/shelf_layout_manager_unittest.cc b/chromium/ash/shelf/shelf_layout_manager_unittest.cc index e44fe347a68..e62bcec4f37 100644 --- a/chromium/ash/shelf/shelf_layout_manager_unittest.cc +++ b/chromium/ash/shelf/shelf_layout_manager_unittest.cc @@ -70,66 +70,6 @@ SystemTray* GetSystemTray() { return Shell::GetPrimaryRootWindowController()->GetSystemTray(); } -// Class which waits till the shelf finishes animating to the target size and -// counts the number of animation steps. -class ShelfAnimationWaiter : views::WidgetObserver { - public: - explicit ShelfAnimationWaiter(const gfx::Rect& target_bounds) - : target_bounds_(target_bounds), - animation_steps_(0), - done_waiting_(false) { - GetShelfWidget()->AddObserver(this); - } - - virtual ~ShelfAnimationWaiter() { - GetShelfWidget()->RemoveObserver(this); - } - - // Wait till the shelf finishes animating to its expected bounds. - void WaitTillDoneAnimating() { - if (IsDoneAnimating()) - done_waiting_ = true; - else - base::MessageLoop::current()->Run(); - } - - // Returns true if the animation has completed and it was valid. - bool WasValidAnimation() const { - return done_waiting_ && animation_steps_ > 0; - } - - private: - // Returns true if shelf has finished animating to the target size. - bool IsDoneAnimating() const { - ShelfLayoutManager* layout_manager = GetShelfLayoutManager(); - gfx::Rect current_bounds = GetShelfWidget()->GetWindowBoundsInScreen(); - int size = layout_manager->PrimaryAxisValue(current_bounds.height(), - current_bounds.width()); - int desired_size = layout_manager->PrimaryAxisValue(target_bounds_.height(), - target_bounds_.width()); - return (size == desired_size); - } - - // views::WidgetObserver override. - virtual void OnWidgetBoundsChanged(views::Widget* widget, - const gfx::Rect& new_bounds) OVERRIDE { - if (done_waiting_) - return; - - ++animation_steps_; - if (IsDoneAnimating()) { - done_waiting_ = true; - base::MessageLoop::current()->Quit(); - } - } - - gfx::Rect target_bounds_; - int animation_steps_; - bool done_waiting_; - - DISALLOW_COPY_AND_ASSIGN(ShelfAnimationWaiter); -}; - class ShelfDragCallback { public: ShelfDragCallback(const gfx::Rect& not_visible, const gfx::Rect& visible) @@ -1489,7 +1429,7 @@ TEST_F(ShelfLayoutManagerTest, WindowVisibilityDisablesAutoHide) { window1->Minimize(); EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); - // both minimized => disable auto hide + // both minimzed => disable auto hide window2->Minimize(); EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); @@ -1504,84 +1444,14 @@ TEST_F(ShelfLayoutManagerTest, WindowVisibilityDisablesAutoHide) { EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); } -// Test that the shelf animates back to its normal position upon a user -// completing a gesture drag. -TEST_F(ShelfLayoutManagerTest, ShelfAnimatesWhenGestureComplete) { - if (!SupportsHostWindowResize()) - return; - - // Test the shelf animates back to its original visible bounds when it is - // dragged when there are no visible windows. - ShelfLayoutManager* shelf = GetShelfLayoutManager(); - shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); - EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); - EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); - gfx::Rect visible_bounds = GetShelfWidget()->GetWindowBoundsInScreen(); - { - // Enable animations so that we can make sure that they occur. - ui::ScopedAnimationDurationScaleMode regular_animations( - ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION); - - aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); - gfx::Rect shelf_bounds_in_screen = - GetShelfWidget()->GetWindowBoundsInScreen(); - gfx::Point start(shelf_bounds_in_screen.CenterPoint()); - gfx::Point end(start.x(), shelf_bounds_in_screen.bottom()); - generator.GestureScrollSequence(start, end, - base::TimeDelta::FromMilliseconds(10), 1); - EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); - EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); - - ShelfAnimationWaiter waiter(visible_bounds); - // Wait till the animation completes and check that it occurred. - waiter.WaitTillDoneAnimating(); - EXPECT_TRUE(waiter.WasValidAnimation()); - } - - // Create a visible window so auto-hide behavior is enforced. - CreateTestWidget(); - - // Get the bounds of the shelf when it is hidden. - EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); - EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); - gfx::Rect auto_hidden_bounds = GetShelfWidget()->GetWindowBoundsInScreen(); - - { - // Enable the animations so that we can make sure they do occur. - ui::ScopedAnimationDurationScaleMode regular_animations( - ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION); - - gfx::Point start = - GetShelfWidget()->GetWindowBoundsInScreen().CenterPoint(); - gfx::Point end(start.x(), start.y() - 100); - aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); - - // Test that the shelf animates to the visible bounds after a swipe up on - // the auto hidden shelf. - generator.GestureScrollSequence(start, end, - base::TimeDelta::FromMilliseconds(10), 1); - EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); - ShelfAnimationWaiter waiter1(visible_bounds); - waiter1.WaitTillDoneAnimating(); - EXPECT_TRUE(waiter1.WasValidAnimation()); - - // Test that the shelf animates to the auto hidden bounds after a swipe up - // on the visible shelf. - EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); - generator.GestureScrollSequence(start, end, - base::TimeDelta::FromMilliseconds(10), 1); - EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); - EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); - ShelfAnimationWaiter waiter2(auto_hidden_bounds); - waiter2.WaitTillDoneAnimating(); - EXPECT_TRUE(waiter2.WasValidAnimation()); - } -} - -TEST_F(ShelfLayoutManagerTest, GestureRevealsTrayBubble) { - if (!SupportsHostWindowResize()) - return; +#if defined(OS_WIN) +// RootWindow and Display can't resize on Windows Ash. http://crbug.com/165962 +#define MAYBE_GestureRevealsTrayBubble DISABLED_GestureRevealsTrayBubble +#else +#define MAYBE_GestureRevealsTrayBubble GestureRevealsTrayBubble +#endif +TEST_F(ShelfLayoutManagerTest, MAYBE_GestureRevealsTrayBubble) { ShelfLayoutManager* shelf = GetShelfLayoutManager(); shelf->LayoutShelf(); diff --git a/chromium/ash/shelf/shelf_widget.cc b/chromium/ash/shelf/shelf_widget.cc index 8c7733ff2d6..d16f876bcd3 100644 --- a/chromium/ash/shelf/shelf_widget.cc +++ b/chromium/ash/shelf/shelf_widget.cc @@ -4,7 +4,6 @@ #include "ash/shelf/shelf_widget.h" -#include "ash/ash_switches.h" #include "ash/focus_cycler.h" #include "ash/launcher/launcher_delegate.h" #include "ash/launcher/launcher_model.h" @@ -16,7 +15,6 @@ #include "ash/shelf/shelf_widget.h" #include "ash/shell.h" #include "ash/shell_window_ids.h" -#include "ash/system/tray/test_system_tray_delegate.h" #include "ash/wm/property_util.h" #include "ash/wm/status_area_layout_manager.h" #include "ash/wm/window_properties.h" @@ -256,6 +254,9 @@ class ShelfWidget::DelegateView : public views::WidgetDelegate, void SetDimmed(bool dimmed); bool GetDimmed() const; + // Set the bounds of the widget. + void SetWidgetBounds(const gfx::Rect bounds); + void SetParentLayer(ui::Layer* layer); // views::View overrides: @@ -358,6 +359,11 @@ bool ShelfWidget::DelegateView::GetDimmed() const { return dimmer_.get() && dimmer_->IsVisible(); } +void ShelfWidget::DelegateView::SetWidgetBounds(const gfx::Rect bounds) { + if (dimmer_) + dimmer_->SetBounds(bounds); +} + void ShelfWidget::DelegateView::SetParentLayer(ui::Layer* layer) { layer->Add(&opaque_background_); ReorderLayers(); @@ -424,8 +430,6 @@ void ShelfWidget::DelegateView::ReorderChildLayers(ui::Layer* parent_layer) { void ShelfWidget::DelegateView::OnBoundsChanged(const gfx::Rect& old_bounds) { opaque_background_.SetBounds(GetLocalBounds()); - if (dimmer_) - dimmer_->SetBounds(GetBoundsInScreen()); } void ShelfWidget::DelegateView::ForceUndimming(bool force) { @@ -524,31 +528,6 @@ ShelfBackgroundType ShelfWidget::GetBackgroundType() const { return SHELF_BACKGROUND_DEFAULT; } -// static -bool ShelfWidget::ShelfAlignmentAllowed() { - if (!ash::switches::ShowShelfAlignmentMenu()) - return false; - user::LoginStatus login_status = - Shell::GetInstance()->system_tray_delegate()->GetUserLoginStatus(); - - switch (login_status) { - case user::LOGGED_IN_USER: - case user::LOGGED_IN_OWNER: - return true; - case user::LOGGED_IN_LOCKED: - case user::LOGGED_IN_PUBLIC: - case user::LOGGED_IN_LOCALLY_MANAGED: - case user::LOGGED_IN_GUEST: - case user::LOGGED_IN_RETAIL_MODE: - case user::LOGGED_IN_KIOSK_APP: - case user::LOGGED_IN_NONE: - return false; - } - - DCHECK(false); - return false; -} - ShelfAlignment ShelfWidget::GetAlignment() const { return shelf_layout_manager_->GetAlignment(); } @@ -623,6 +602,11 @@ void ShelfWidget::ShutdownStatusAreaWidget() { status_area_widget_ = NULL; } +void ShelfWidget::SetWidgetBounds(const gfx::Rect& rect) { + Widget::SetBounds(rect); + delegate_view_->SetWidgetBounds(rect); +} + void ShelfWidget::ForceUndimming(bool force) { delegate_view_->ForceUndimming(force); } diff --git a/chromium/ash/shelf/shelf_widget.h b/chromium/ash/shelf/shelf_widget.h index c7adb742555..392264ab4c2 100644 --- a/chromium/ash/shelf/shelf_widget.h +++ b/chromium/ash/shelf/shelf_widget.h @@ -34,11 +34,6 @@ class ASH_EXPORT ShelfWidget : public views::Widget, internal::WorkspaceController* workspace_controller); virtual ~ShelfWidget(); - // Returns if shelf alignment option is enabled, and the user is able - // to adjust the alignment (guest and supervised mode users cannot for - // example). - static bool ShelfAlignmentAllowed(); - void SetAlignment(ShelfAlignment alignmnet); ShelfAlignment GetAlignment() const; @@ -79,6 +74,9 @@ class ASH_EXPORT ShelfWidget : public views::Widget, // TODO(harrym): Remove when Status Area Widget is a child view. void ShutdownStatusAreaWidget(); + // Set the bounds of the widget and the dim shelf overlay. + void SetWidgetBounds(const gfx::Rect& rect); + // Force the shelf to be presented in an undimmed state. void ForceUndimming(bool force); diff --git a/chromium/ash/shell.cc b/chromium/ash/shell.cc index 996c817213c..57e73c56bb0 100644 --- a/chromium/ash/shell.cc +++ b/chromium/ash/shell.cc @@ -283,6 +283,9 @@ Shell::~Shell() { locale_notification_controller_.reset(); + // Drag-and-drop must be canceled prior to close all windows. + drag_drop_controller_.reset(); + // Destroy all child windows including widgets. display_controller_->CloseChildWindows(); @@ -293,7 +296,6 @@ Shell::~Shell() { // These need a valid Shell instance to clean up properly, so explicitly // delete them before invalidating the instance. // Alphabetical. TODO(oshima): sort. - drag_drop_controller_.reset(); magnification_controller_.reset(); partial_magnification_controller_.reset(); resize_shadow_controller_.reset(); diff --git a/chromium/ash/shell/shell_delegate_impl.cc b/chromium/ash/shell/shell_delegate_impl.cc index 471f5acbb50..20d0a7f65f6 100644 --- a/chromium/ash/shell/shell_delegate_impl.cc +++ b/chromium/ash/shell/shell_delegate_impl.cc @@ -8,7 +8,6 @@ #include "ash/caps_lock_delegate_stub.h" #include "ash/host/root_window_host_factory.h" -#include "ash/keyboard_controller_proxy_stub.h" #include "ash/session_state_delegate.h" #include "ash/session_state_delegate_stub.h" #include "ash/shell/context_menu.h" @@ -19,9 +18,39 @@ #include "ash/wm/window_util.h" #include "base/message_loop/message_loop.h" #include "ui/aura/window.h" +#include "ui/keyboard/keyboard_controller_proxy.h" #include "ui/views/corewm/input_method_event_filter.h" namespace ash { + +namespace { + +class DummyKeyboardControllerProxy : public keyboard::KeyboardControllerProxy { + public: + DummyKeyboardControllerProxy() {} + virtual ~DummyKeyboardControllerProxy() {} + + private: + // Overridden from keyboard::KeyboardControllerProxy: + virtual content::BrowserContext* GetBrowserContext() OVERRIDE { + return Shell::GetInstance()->browser_context(); + } + + virtual ui::InputMethod* GetInputMethod() OVERRIDE { + return Shell::GetInstance()->input_method_filter()->input_method(); + } + + virtual void RequestAudioInput(content::WebContents* web_contents, + const content::MediaStreamRequest& request, + const content::MediaResponseCallback& callback) OVERRIDE { + return; + } + + DISALLOW_COPY_AND_ASSIGN(DummyKeyboardControllerProxy); +}; + +} // namespace + namespace shell { ShellDelegateImpl::ShellDelegateImpl() @@ -99,7 +128,7 @@ void ShellDelegateImpl::ShowKeyboardOverlay() { keyboard::KeyboardControllerProxy* ShellDelegateImpl::CreateKeyboardControllerProxy() { - return new KeyboardControllerProxyStub(); + return new DummyKeyboardControllerProxy(); } void ShellDelegateImpl::ShowTaskManager() { diff --git a/chromium/ash/shell_window_ids.h b/chromium/ash/shell_window_ids.h index 1c1c396cbbc..406f417f4cf 100644 --- a/chromium/ash/shell_window_ids.h +++ b/chromium/ash/shell_window_ids.h @@ -36,68 +36,65 @@ const int kShellWindowId_UnparentedControlContainer = 3; // The desktop background window. const int kShellWindowId_DesktopBackgroundContainer = 4; -// The virtual keyboard container. -const int kShellWindowId_VirtualKeyboardContainer = 5; - // TODO(sky): rename kShellWindowId_DefaultContainer. // The container for standard top-level windows. -const int kShellWindowId_DefaultContainer = 6; +const int kShellWindowId_DefaultContainer = 5; // The container for top-level windows with the 'always-on-top' flag set. -const int kShellWindowId_AlwaysOnTopContainer = 7; +const int kShellWindowId_AlwaysOnTopContainer = 6; // The container for windows docked to either side of the desktop. -const int kShellWindowId_DockedContainer = 8; +const int kShellWindowId_DockedContainer = 7; // The container for panel windows. -const int kShellWindowId_PanelContainer = 9; +const int kShellWindowId_PanelContainer = 8; // The container for the shelf. -const int kShellWindowId_ShelfContainer = 10; +const int kShellWindowId_ShelfContainer = 9; // The container for the app list. -const int kShellWindowId_AppListContainer = 11; +const int kShellWindowId_AppListContainer = 10; // The container for user-specific modal windows. -const int kShellWindowId_SystemModalContainer = 12; +const int kShellWindowId_SystemModalContainer = 11; // The container for input method components such like candidate windows. They // are almost panels but have no activations/focus, and they should appear over // the AppList and SystemModal dialogs. -const int kShellWindowId_InputMethodContainer = 13; +const int kShellWindowId_InputMethodContainer = 12; // The container for the lock screen background. -const int kShellWindowId_LockScreenBackgroundContainer = 14; +const int kShellWindowId_LockScreenBackgroundContainer = 13; // The container for the lock screen. -const int kShellWindowId_LockScreenContainer = 15; +const int kShellWindowId_LockScreenContainer = 14; // The container for the lock screen modal windows. -const int kShellWindowId_LockSystemModalContainer = 16; +const int kShellWindowId_LockSystemModalContainer = 15; // The container for the status area. -const int kShellWindowId_StatusContainer = 17; +const int kShellWindowId_StatusContainer = 16; // The container for menus. -const int kShellWindowId_MenuContainer = 18; +const int kShellWindowId_MenuContainer = 17; // The container for drag/drop images and tooltips. -const int kShellWindowId_DragImageAndTooltipContainer = 19; +const int kShellWindowId_DragImageAndTooltipContainer = 18; // The container for bubbles briefly overlaid onscreen to show settings changes // (volume, brightness, etc.). -const int kShellWindowId_SettingBubbleContainer = 20; +const int kShellWindowId_SettingBubbleContainer = 19; // The container for special components overlaid onscreen, such as the // region selector for partial screenshots. -const int kShellWindowId_OverlayContainer = 21; +const int kShellWindowId_OverlayContainer = 20; // ID of the window created by PhantomWindowController or DragWindowController. -const int kShellWindowId_PhantomWindow = 22; +const int kShellWindowId_PhantomWindow = 21; // The topmost container, used for power off animation. -const int kShellWindowId_PowerButtonAnimationContainer = 23; +const int kShellWindowId_PowerButtonAnimationContainer = 22; } // namespace internal diff --git a/chromium/ash/strings/ash_strings_am.xtb b/chromium/ash/strings/ash_strings_am.xtb index b0c6c3803be..13c5bb4bde9 100644 --- a/chromium/ash/strings/ash_strings_am.xtb +++ b/chromium/ash/strings/ash_strings_am.xtb @@ -2,22 +2,26 @@ ባትሪ ሙሉ ነው -አስጀማሪን ራስ-ደብቅ እና የመተላለፊያ ሁኔታ የትርፍ ፍሰት አዝራር +270° ብሉቱዝ ነቅቷል + ወደ ዞሯል ብሉቱዝ ብሉቱዝ ተሰናክሏል +አውታረ መረቡን ማዋቀር አልተሳካም በአንድ ጊዜ ብዙ መግባት ላይ እስከ ሶስት መለያዎች ድረስ ብቻ ነው ሊኖርዎ የሚችለው። Wi-Fi ያንቁ ብሩህነት +አፈጻጸም መከታተያ ነቅቷል የባትሪ ጊዜን በማስላት ላይ። አውታረ መረብ ተኪ... የቁልፍ ሰሌዳ ተደራቢ የማረጋገጫ ምስክር ወረቀት በርቀት ተቀባይነት አላገኘም Google Drive + ጥራት ወደ ተለውጧል ኤች ቲ ቲ ፒ ማግኘት አልተሳካም የሁኔታ መሳቢያ ፒን ይጎድላል @@ -34,39 +38,41 @@ አነስተኛ ኃይል ያለው ባትሪ መሙያ ምንም የአውታረ መረብ መረጃ አይገኝም የተንቀሳቃሽ ስልክ ውሂብ ያዋቅሩ +መሳሪያዎችን ያስተዳድሩ... የተንቀሳቃሽ መለያ ይመልከቱ ተንቀሳቃሽ ሞደምን በማስጀመር ላይ... የማያ ገጽዎ ቁጥጥር በHangouts በኩል ለ በማጋራት ላይ። - ዞሯል ብሉቱዝን ያሰናክሉ ቅጽበታዊ ገጽ እይታን ማስቀመጥ አልተቻለም ለማዘመን ዳግም ያስጀምሩ ሁሉንም ዘግተህ ውጣ የቪ ፒ ኤን ግንኙነት ተቋርጧል ስራ ፈት -ባትሪ % ሙሉ ነው ትልቅ የመዳፊት ጠቋሚ -በተሰጠው የተጠቃሚ ስም ወይም ይለፍ ቃል ማረጋገጥ አልተቻለም እንግዳ ቋንቋዎችን እና ግብአቶችን አብጅ... + () +የመደርደሪያ አቀማመጥ ግብዓት አነስተኛ ኃይል ያለው ባትሪ መሙያ ተገናኝቷል ከክልል ውጪ ግንኙነት አቋርጥ የማረጋገጫ ምስክር ወረቀት በአውታረ መረቡ ተቀባይነት አላገኘም ዘግተህ ውጣ +180° ውቅር አቁም ተጨማሪ ለመረዳት... Wi-Fiን አሰናክል -መሣሪያ ያክሉ... በማንጸባረቅ ላይ +PPP ማረጋገጫ በተሳሳተ የተጠቃሚ ስም ወይም የይለፍ ቃል ምክንያት አልተሳካም CAPS LOCK በርቷል የውስጥ ማሳያ ቅንብሮችዎ ከተመሳሰሉ በኋላ ቋንቋው ከ« ወደ «» ተቀይሯል። ተያይዟል የተነገረ ግብረ መልስ Wi-Fi አብራ... +90° የግቤት ስልትዎ ወደ ተቀይሯል። ለመቀየር Shift + Alt ይጫኑ። የግል አውታረ መረብ @@ -83,11 +89,12 @@ % ይቀራል የግቤት ስልቶች % +መደርደሪያ የእርስዎ Chromebook በርቶ ሳለ ባትሪ ላይሞላ ይችላል። ዋናውን ባትሪ መሙያ መጠቀሙን ያስቡበት። አጥፋ ድምፅ +ለማዘመን ዳግም ያስጀምሩና በሃይል ይጠቡ የዲ ኤን ኤስ ፍለጋ አልተሳካም -ባትሪ ሙሉ እና ኃይል እየሞላ ነው። የድምጸ ተያያዥ ሞደም አውታረ መረቦችን በመፈለግ ላይ... ያልታወቀ ፍለጋ @@ -96,7 +103,6 @@ የአውታረ መረብ መረጃ ባትሪ ባዶ እስኪሆን ድረስ የቀረው ጊዜ፣ ከእንግዳ ውጣ -ባትሪ % ሙሉ እና ኃይል እየሞላ ነው ቀዳሚ ምናሌ ወደ ሌላ መለያ መግባት አይቻልም። ቀኝ @@ -114,6 +120,7 @@ ያልታወቀ የአውታረ መረብ ስህተት ግራ ኤስ ኤም ኤስ + ን በማግበር ላይ Wi-Fi አስፋ @@ -123,7 +130,6 @@ አነስተኛ ኃይል ወዳለው ባትሪ መሙያ ተሰክቷል። የባትሪ መሙላት አስተማማኝ ላይሆን ይችላል። ቆልፍ መተግበሪያዎች - መጠን ወደ ተቀይሯል የማግበር አለመሳካት ከአውታረ መረብ «» ጋር መገናኘት አልተሳካም፦ Wi-Fi ጠፍቷል። @@ -131,6 +137,7 @@ ልጣፍ አዘጋጅ... የመስመር ላይ ሁኔታ ባለከፍተኛ ንፅፅር ሁነታ + ውስጣዊ ስህተት ባትሪ ሙሉ ኃይል እስኪኖረው ድረስ የሚቀረው ጊዜ፣ የማያ ገጽ ማጉያ @@ -153,20 +160,24 @@ ከክፍለ-ጊዜ ውጣ Wi-Fi በርቷል። Alt+Search ወይም Shift +ባትሪው % ሙሉ ነው። ቅንብሮች ... +ትርፍ ቅኝት የመትከያ ሁነታ +መደርደሪያን በራስ ሰር ደብቅ መገናኘት ተጠይቋል OTASP አልተሳካም Alt+Search ፋይል/ፋይሎችን በማመሳሰል ላይ +ክትትል የሚደረግበት ተጠቃሚ 9+ CAPS LOCK ጠፍቷል ለመተው Control Shift Qን ሁለት ጊዜ ይጫኑ። +ባትሪው % ሙሉ ሆኖ በተጨማሪም ኃይል እየሞላ ነው። ፦ በማግበር ላይ... +ባትሪው ሙሉ ነው። የተንቀሳቃሽ ስልክ ውሂብ ገደብዎን ጨርሰው ሊሆን ይችላል። -በአካባቢው የሚተዳደር ተጠቃሚ - -የአስጀማሪው ቦታ +አድህር Search ወይም Shift እገዛ CAPS LOCK በርቷል። @@ -179,22 +190,24 @@ መጥፎ የይለፍ ሐረግ ተጨማሪ ለመረዳት ማገናኘት አልተሳካም + ውስጥ ወደ ቀድሞው ጥራት በመመለስ ላይ ይህ ክፍለ ጊዜ በ ጊዜ ውስጥ ያልቃል። በራስ-ሰር እንዲወጡ ይደረጋሉ። መጥፎ የWEP ቁልፍ ያልታወቀ ሁኔታ ወደ «» መልሰህ ቀይር (ዳግም ማስጀመር ይፈልጋል) የኤስ ኤም ኤስ መልዕክቶች፦ የGoogle Drive ቅንብሮች... -ማስጀመሪያ CAPS LOCK በርቷል። ለመሰረዝ Alt+Search ወይም Shift ይጫኑ። ባትሪ ዝቅተኛ ነው (%) +ይቀበሉ : ቀርቷል የማያ ገጽዎን ቁጥጥር በHangouts በኩል በማጋራት ላይ። ምንም አውታረ መረብ የለም ሌላ መለያ ያስገቡ... አሳንስ ሌላ ይቀላቀሉ... + ሙሉ እስኪሆን ድረስ ኤስ ኤም ኤስ ከ ድምጸ ተያያዥ ሞደም diff --git a/chromium/ash/strings/ash_strings_ar.xtb b/chromium/ash/strings/ash_strings_ar.xtb index 7be62a6e682..db45e7dafc7 100644 --- a/chromium/ash/strings/ash_strings_ar.xtb +++ b/chromium/ash/strings/ash_strings_ar.xtb @@ -2,23 +2,27 @@ البطارية ممتلئة -إخفاء المشغل تلقائيًا و حالة المدخل زر التدفق +270 درجة تم تمكين البلوتوث +تم تدوير إلى بلوتوث تم تعطيل البلوتوث +أخفقت تهيئة الشبكة يُمكنك تسجيل الدخول المتعدد باستخدام ثلاثة حسابات كحد أقصى. -تمكين Wi-Fi +‏تمكين Wi-Fi السطوع +تم تمكين تتبع مستوى الأداء يجري حساب وقت البطارية. الشبكة الخادم الوكيل... تراكب لوحة المفاتيح تم رفض شهادة المصادقة عن بُعد Google Drive -أخفق الحصول على HTTP +تم تغيير درجة دقة إلى +‏أخفق الحصول على HTTP علبة الحالة رقم التعريف الشخصي غير موجود : جارٍ الاتصال... @@ -26,48 +30,50 @@ تمكين البلوتوث تمديد الشاشة إلى خلوي -عنوان IP +‏عنوان IP أخفقت عملية التنشيط إعدادات الصوت -تم تغيير أسلوب الإدخال إلى *(جهة خارجية). +‏تم تغيير أسلوب الإدخال إلى *(جهة خارجية). اضغط على Shift + Alt للتبديل. شاحن منخفض الطاقة لا توجد معلومات متاحة حول الشبكة إعداد بيانات الجوال +إدارة الأجهزة... عرض حساب الجوال جارٍ تهيئة المودم الخلوي... -مشاركة التحكم في الشاشة مع عبر Hangouts. -تمّ تدوير +‏مشاركة التحكم في الشاشة مع عبر Hangouts. تعطيل البلوتوث أخفق حفظ لقطة الشاشة إعادة التشغيل للتحديث خروج الجميع تم قطع اتصال الشبكة الظاهرية الخاصة في وضع الخمول -اكتمل شحن % من البطارية مؤشر الماوس الكبير -أخفقت المصادقة باستخدام اسم المستخدم أو كلمة المرور المقدمين ضيف تخصيص اللغات والإدخال... + () +وضع الرف الإرسال تمّ توصيل شاحن منخفض الطاقة خارج النطاق قطع الاتصال تمّ رفض شهادة المصادقة بواسطة الشبكة الخروج +180 درجة تهيئة إيقاف مزيد من المعلومات... -تعطيل Wi-Fi -إضافة جهاز... +‏تعطيل Wi-Fi النسخ المطابق -مفتاح CAPS LOCK قيد التشغيل +‏أخفقت مصادقة PPP نظرًا لوجود خطأ في اسم المستخدم أو كلمة المرور +‏مفتاح CAPS LOCK قيد التشغيل العرض الداخلي تم تغيير اللغة من "" إلى "" بعد مزامنة إعداداتك. متصل التعليقات المنطوقة -تشغيل شبكة Wi-Fi... -تم تغيير أسلوب الإدخال إلى . +‏تشغيل شبكة Wi-Fi... +90 درجة +‏تم تغيير أسلوب الإدخال إلى . اضغط على Shift + Alt للتبديل. الشبكة الخاصة لا تتوفر شبكة خلوية @@ -77,17 +83,18 @@ تم التقاط لقطة الشاشة توسيع الشاشة لم تتم تهيئة الشبكة الظاهرية الخاصة. -للإنهاء، اضغط على Ctrl+Shift+Q مرتين. +‏للإنهاء، اضغط على Ctrl+Shift+Q مرتين. تعذر إجراء النسخ المطابق للعروض نظرًا لعدم العثور على درجات دقة متوافقة. تم الدخول إلى سطح المكتب الممتد بدلاً من ذلك. الوضع التجريبي باقٍ % أساليب الإدخال % -قد لا يستجيب جهاز Chromebook لعملية الشحن وهو قيد التشغيل. مع مراعاة استخدام الشاحن المخصص للجهاز. +الرف +‏قد لا يستجيب جهاز Chromebook لعملية الشحن وهو قيد التشغيل. مع مراعاة استخدام الشاحن المخصص للجهاز. إيقاف التشغيل مستوى الصوت +‏إعادة التشغيل وإجراء Powerwash للتحديث أخفق البحث في نظام أسماء النطاقات -البطارية مملوءة ويتم شحنها. جارٍ البحث عن شبكات للهاتف الجوال... غير محدّد البحث @@ -96,7 +103,6 @@ معلومات الشبكة الوقت المتبقي حتى تصبح البطارية فارغة إنهاء جلسة الضيف -اكتمل شحن % من البطارية ويتم شحنها القائمة السابقة يتعذّر تسجيل الدخول إلى حساب آخر. يمين @@ -106,16 +112,17 @@ الإعدادات جارٍ مزامنة التطبيقات... خطأ غير معروف: -أخفق فحص AAA +‏أخفق فحص AAA حتى الاكتمال: : -تم تمكين التعليقات المنطوقة. +‏تم تمكين التعليقات المنطوقة. يمكنك الضغط على Ctrl+Alt+Z لتعطيلها. إيثرنت خطأ غير معروف اليسار -الرسائل القصيرة SMS +‏الرسائل القصيرة SMS +0 درجة تنشيط -لاسلكي، Wi-Fi +‏لاسلكي، Wi-Fi تكبير : جارٍ التوصيل... شاشة عرض غير معروفة @@ -123,14 +130,14 @@ تمّ توصيل شاحن منخفض الطاقة. لذا قد لا تكون عملية شحن البطارية جديرة بالثقة. قفل تطبيقات -تمّ تغيير حجم إلى إخفاق في عملية التنشيط أخفق الاتصال بشبكة "": -تم إيقاف تشغيل Wi-Fi. +‏تم إيقاف تشغيل Wi-Fi. تم الاتصال بالموقع تعيين خلفية... الحالة متصل وضع التباين العالي +، خطأ داخلي الوقت المتبقي حتى يتم شحن البطارية بالكامل مكبّر الشاشة @@ -144,55 +151,61 @@ :: جارٍ البحث عن أجهزة... ، -جارِ البحث عن شبكات Wi-Fi... +‏جارِ البحث عن شبكات Wi-Fi... أخفق الاتصال بـ "": رسالة الخادم: حدث خطأ -يلزم توفر EVDO +‏يلزم توفر EVDO هي جلسة عامة يديرها إنهاء الجلسة -تم تشغيل Wi-Fi. -Alt+مفتاح البحث أو Shift +‏تم تشغيل Wi-Fi. +‏Alt+مفتاح البحث أو Shift +اكتمل شحن % من البطارية. الإعدادات... +الخروج عن إطار الشاشة وضع الإرساء +الإخفاء التلقائي للرف الاتصال مطلوب -أخفقت OTASP -Alt+مفتاح البحث +‏أخفقت OTASP +‏Alt+مفتاح البحث جارٍ مزامنة من الملفات -‎9+‎‏ -مفتاح CAPS LOCK قيد الإيقاف -للإنهاء، اضغط على Control Shift Q مرتين. +مستخدم يخضع للإدارة +‏‎9+‎‏ +‏مفتاح CAPS LOCK قيد الإيقاف +‏للإنهاء، اضغط على Control Shift Q مرتين. +اكتمل شحن % من البطارية ويجري شحنها. : جارٍ التنشيط... +البطارية مملوءة. ربما تكون قد استخدمت حصة بيانات الجوال المخصصة لك. -حساب مستخدم يخضع لإدارة محلية -: -موضع المشغل -مفتاح البحث أو Shift +التراجع عن الإجراء +‏مفتاح البحث أو Shift مساعدة -المفتاح CAPS LOCK في وضع التشغيل، اضغط على مفتاح البحث أو المفتاح Shift لإلغاء التشغيل. +‏المفتاح CAPS LOCK في وضع التشغيل، اضغط على مفتاح البحث أو المفتاح Shift لإلغاء التشغيل. جارٍ الحساب... يلزم توفر الشبكة الرئيسية تنشيط -أخفق بحث DHCP +‏أخفق بحث DHCP الاستماع عبارة مرور غير صالحة مزيد من المعلومات أخفق الاتصال +سيتم الرجوع إلى درجة الدقة القديمة في غضون ستنتهي هذه الجلسة في . سيتم الخروج تلقائيًا. -مفتاح WEP غير صالح +‏مفتاح WEP غير صالح حالة غير معروفة التغيير مرة أخرى إلى "" (يتطلب إعادة التشغيل) -الرسائل القصيرة SMS: -إعدادات Google Drive... -المشغّل -المفتاح CAPS LOCK في وضع التشغيل. اضغط على Alt+مفتاح البحث، أو اضغط على المفتاح Shift لإلغاء التشغيل. +‏الرسائل القصيرة SMS: +‏إعدادات Google Drive... +‏المفتاح CAPS LOCK في وضع التشغيل. اضغط على Alt+مفتاح البحث، أو اضغط على المفتاح Shift لإلغاء التشغيل. طاقة البطارية منخفضة (%) +قبول الوقت المتبقي: : -مشاركة التحكم في الشاشة عبر Hangouts. +‏مشاركة التحكم في الشاشة عبر Hangouts. لا شبكة تسجيل الدخول لحساب آخر... تصغير الانضمام إلى شبكة أخرى... +: س د حتى الاكتمال -رسالة قصيرة SMS من الهاتف رقم +‏رسالة قصيرة SMS من الهاتف رقم شركة اتصالات \ No newline at end of file diff --git a/chromium/ash/strings/ash_strings_bg.xtb b/chromium/ash/strings/ash_strings_bg.xtb index b7c4b204a5a..24aef8cddac 100644 --- a/chromium/ash/strings/ash_strings_bg.xtb +++ b/chromium/ash/strings/ash_strings_bg.xtb @@ -2,22 +2,26 @@ Батерията е заредена -Автоматично скриване на стартовия панел и Състояние на портала Бутон „Препълване“ +270° Bluetooth е активиран +Завъртяхте „“ на Bluetooth Bluetooth е деактивиран +Конфигурирането на мрежата не бе успешно В централизирания вход можете да имате най-много три профила. Активиране на Wi-Fi Яркост +Проследяването на ефективността е активирано Издръжливостта на батерията се изчислява. Мрежа Прокси сървър... Наслагване върху клавиатурата Сертификатът за удостоверяване бе отхвърлен отдалечено Google Диск +Променихте разделителната способност на „“ на Получаването на HTTP не бе успешно Област на състоянието Липсва PIN @@ -34,39 +38,41 @@ Зарядно устройство с малка мощност Не е налице информация за мрежата Настройка на мобилните данни +Управление на устройствата... Преглед на мобилния профил Клетъчният модем се подготвя за работа... Контролът върху екрана ви се споделя с/ъс чрез Hangouts. - бе завъртян Деактивиране на Bluetooth Запазването на екранната снимка не бе успешно Рестартирайте, за да актуализирате Изход за всички Връзката с виртуалната частна мрежа (VPN) е прекъсната Неактивна -Батерията е % пълна Голям курсор на мишката -Удостоверяването с предоставеното потребителско име или парола не бе успешно Гост Персонализиране на езиците и въвеждането... +“ () +Позиция на лавицата ВХОД Свързано е зарядно устройство с малка мощност Извън обхват Изключване Сертификатът за удостоверяване бе отхвърлен от мрежата Изход +180° Конфигурация Стоп Научете повече... Деактивиране на Wi-Fi -Добавяне на устройство... Дублиране +Удостоверяването през PPP не бе успешно поради неправилно потребителско име или парола „CAPS LOCK“ е включен Показване на вътрешна информация Езикът се промени от „“ на „“ след синхронизирането на настройките ви. Установена е връзка Обратна връзка с говор Включване на Wi-Fi... +90° Методът ви на въвеждане се промени на . Натиснете „Shift + Alt“, за да превключите. Частна мрежа @@ -83,11 +89,12 @@ Остава/т % Методи за въвеждане % +Лавица Възможно е вашият Chromebook да не се зарежда, докато е включен. Помислете за използване на официалното зарядно устройство. Изключване Звук +Рестартирайте и извършете Powerwash, за да актуализирате Търсенето в DNS не бе успешно -Батерията е пълна и се зарежда. Търсят се мобилни мрежи... Неизвестно Търсене @@ -96,7 +103,6 @@ Информация за мрежата Оставащо време до изразходването на батерията: Изход от сесията като гост -Батерията е % пълна и се зарежда Предишно меню Не може да влезете в друг профил. Надясно @@ -114,6 +120,7 @@ Неизвестна мрежова грешка Наляво SMS + “ се активира Wi-Fi Увеличаване @@ -123,7 +130,6 @@ Използва се зарядно устройство с малка мощност. Зареждането на батерията може да не е надеждно. Заключване Приложения - бе преоразмерен на Неуспех при активирането Свързването с мрежата „“ не бе успешно: Wi-Fi е изключен. @@ -131,6 +137,7 @@ Задаване на тапет... Състояние: Онлайн Режим на висок контраст +, Вътрешна грешка Оставащо време до пълното зареждане на батерията: Екранна лупа @@ -153,20 +160,24 @@ Изход от сесията Wi-Fi е включен. „Alt + търсене“ или „Shift“ +Батерията е % пълна. Настройки... +допълнителна област Режим на работа с докинг станция +Автоматично скриване на лавицата Заявено е свързване Безжичното осигуряване на услуга не бе успешно Alt + търсене Синхронизира/т се файл/а +Контролиран потребител 9+ „CAPS LOCK“ е изключен За изход натиснете два пъти Ctrl+Shift+Q. +Батерията е % пълна и се зарежда. “: Активира се... +Батерията е пълна. Може да сте изразходили отпуснатите ви мобилни данни. -Локално управляван потребител -: -Позиция на стартовия панел +Възстановяване „търсене“ или „Shift“ Помощ „CAPS LOCK“ е включен. @@ -179,22 +190,24 @@ Паролата е неправилна Научете повече Свързването не бе успешно +Старата разделителна способност ще се възстанови след Тази сесия ще приключи след . Ще излезете автоматично от нея. Ключът за WEP е неправилен Неразпознато състояние Връщане към „“ (изисква рестартиране) SMS съобщения: Настройки за Google Диск... -Стартов панел „CAPS LOCK“ е включен. Натиснете „Alt + търсене“ или „Shift“, за да анулирате. Батерията е изтощена (%) +Приемам Остава/т : Контролът върху екрана ви се споделя чрез Hangouts. Няма мрежа Вход в друг профил... Намаляване Присъединяване другаде... +: ч м до пълно зареждане SMS от Оператор diff --git a/chromium/ash/strings/ash_strings_bn.xtb b/chromium/ash/strings/ash_strings_bn.xtb index 44496f3ec74..fde6ff9b1c5 100644 --- a/chromium/ash/strings/ash_strings_bn.xtb +++ b/chromium/ash/strings/ash_strings_bn.xtb @@ -2,22 +2,26 @@ ব্যাটারি পুরো চার্জ -লঞ্চার স্বয়ংক্রিয়ভাবে লুকান এবং পোর্টাল স্থিতি ওভারফ্লো বোতাম +২৭০° ব্লুটুথ সক্ষমিত + আবর্তিত হয়েছে Bluetooth ব্লুটুথ অক্ষমিত +নেটওয়ার্ক কনফিগার করা যায়নি একাধিক সাইন ইনে আপনার কেবলমাত্র তিনটি অ্যাকাউন্ট থাকতে পারে৷ Wi-fi সক্ষম করুন উজ্জ্বলতা +কার্য-সম্পাদনা ট্রেস করা সক্ষম রয়েছে ব্যাটারি সময় গণনা করা হচ্ছে। নেটওয়ার্ক প্রক্সি... কীবোর্ড ওভারলে দূরবর্তী অবস্থান থেকে প্রমাণীকরণ শংসাপত্র প্রত্যাখ্যান করা হয়েছে Google ড্রাইভ + এর রেসুলিউশান বদল করে করা হয়েছে HTTP ব্যর্থ হয়েছে স্থিতি ট্রে PIN হারিয়েছে @@ -34,39 +38,41 @@ নিম্ন শক্তির চার্জার কোনো নেটওয়ার্ক সংক্রান্ত তথ্য উপলব্ধ নেই মোবাইল ডেটা সেটআপ করুন +ডিভাইসগুলি পরিচালন করুন... মোবাইল অ্যাকাউন্ট দেখুন সেলুলার মোডেম আরম্ভ করা হচ্ছে... Hangouts এর মাধ্যমে এর সঙ্গে আপনার স্ক্রীন নিয়ন্ত্রণ ভাগ করা হচ্ছে৷ - ঘোরানো হয়েছে ব্লুটুথ অক্ষম করুন স্ক্রীনশট সংরক্ষণ করতে ব্যর্থ হয়েছে আপডেট করার জন্য পুনরারম্ভ করুন সবগুলি সাইন আউট করুন VPN সংযোগ বিচ্ছিন্ন করা হয়েছে নিষ্ক্রিয় -ব্যাটারি % পরিপূর্ণ বড় মাউস কার্সার -সরবরাহ করা ব্যবহারকারীর নাম বা পাসওয়ার্ড সহ প্রমাণীকরণ ব্যর্থ অতিথি ভাষা এবং ইনপুট কাস্টমাইজ করুন... + () +শেল্ফ অবস্থান ইনপুট নিম্ন শক্তির চার্জার সংযুক্ত করা হয়েছে সীমার বাইরে সংযোগ বিচ্ছিন্ন নেটওয়ার্কের দ্বারা প্রমাণীকরণ শংসাপত্র প্রত্যাখ্যান করা হয়েছে সাইন আউট +১৮০° কনফিগারেশন বন্ধ আরো জানুন... Wi-Fi অক্ষম করুন -ডিভাইস জুড়ুন... অনুকরণ করা হচ্ছে +একটি ভুল ব্যবহারকারী নাম বা পাসওয়ার্ডের কারণে PPP প্রমাণীকরণ ব্যর্থ হয়েছে৷ CAPS LOCK চালু অভ্যন্তরীণ প্রদর্শন আপনার সেটিংস সিঙ্ক করার পরে ভাষা "" থেকে "" এ পরিবর্তন করা হয়েছে৷ সংযুক্ত কথ্য প্রতিক্রিয়া Wi-Fi চালু করুন... +৯০° আপনার ইনপুট পদ্ধতি এ পরিবর্তিত হয়েছে৷ স্যুইচ করতে Shift + Alt টিপুন৷ ব্যক্তিগত নেটওয়ার্ক @@ -83,11 +89,12 @@ % বাকি আছে ইনপুট পদ্ধতিসমূহ % +শেল্ফ চালু থাকার সময় আপনার Chromebook চার্জ নাও হতে পারে৷ এটির নিজস্ব চার্জার ব্যবহার করার কথা বিবেচনা করুন৷ শাটডাউন ভলিউম +আপডেট করার জন্য আবার শুরু করুন এবং পাওয়ারওয়াশ করুন DNS খোঁজ ব্যর্থ হয়েছে -ব্যাটারি পরিপূর্ণ এবং চার্জ হচ্ছে৷ সেলুলার নেটওয়ার্কগুলির জন্য অনুসন্ধান করছে... অজানা অনুসন্ধান @@ -96,7 +103,6 @@ নেটওয়ার্ক তথ্য ব্যাটারি শেষ হতে সময় বাকি আছে অতিথি থেকে প্রস্থান -ব্যাটারি % পরিপূর্ণ এবং চার্জ হচ্ছে পূর্ববর্তী মেনু অন্য একটি অ্যাকাউন্টে সাইন ইন করতে পারবেন না৷ ডান @@ -114,6 +120,7 @@ অজানা নেটওয়ার্ক ত্রুটি বাম SMS +০° সক্রিয় করা হচ্ছে Wi-Fi বড় করুন @@ -123,7 +130,6 @@ একটি নিম্ন শক্তির চার্জার প্লাগইন করা হয়েছে৷ বিশ্বস্ত ব্যাটারি চার্জ নাও হতে পারে৷ লক করুন Apps - এর আকার পরিবর্তন করে করা হয়েছে সক্রিয়করণে ব্যর্থতা নেটওয়ার্কের সাথে সংযোগ করতে ব্যর্থ '': Wi-Fi বন্ধ আছে৷ @@ -131,6 +137,7 @@ ওয়ালপেপার সেট করুন... অনলাইন স্থিতি উচ্চ কনট্রাস্ট মোড +, অভ্যন্তরীণ ত্রুটি ব্যাটারি পরিপূর্ণ চার্জ হতে, সময় বাকি আছে স্ক্রীন ম্যাগনিফায়ার @@ -153,20 +160,24 @@ সেশন থেকে প্রস্থান Wi-Fi চালু আছে৷ Alt+Search অথবা Shift +ব্যাটারি % পূর্ণ৷ সেটিংস... +ওভারস্ক্যান ডক মোড +শেল্ফ স্বয়ংক্রিয়ভাবে লুকান সংযুক্ত করার অনুরোধ করা হয়েছে OTASP ব্যর্থ Alt+Search টি ফাইল (গুলি) সিঙ্ক হচ্ছে +তত্ত্বাবধানে থাকা ব্যবহারকারী ৯+ CAPS LOCK বন্ধ আছে প্রস্থান করার জন্য দুবার Control Shift Q টিপুন৷ +ব্যাটারি % পূর্ণ এবং চার্জ হচ্ছে৷ : সক্রিয় করা হচ্ছে... +ব্যাটারি পূর্ণ৷ আপনি হয়তো আপনার মোবাইল ডেটা অ্যালাউন্স ব্যবহার করেছেন৷ -স্থানীয়ভাবে পরিচালিত ব্যবহারকারী -: -লঞ্চার অবস্থান +ফেরান Search অথবা Shift সহায়তা CAPS LOCK চালু আছে৷ @@ -179,22 +190,24 @@ Search অথবা বাতিল করতে Shift টিপুন৷খারাপ পাসফ্রেজ আরো জানুন সংযোগ ব্যর্থ হয়েছে + এ পুরানো রেসুলিউশানে ফেরানো হচ্ছে এই সেশনটি এর মধ্যে সমাপ্ত হবে৷ আপনি স্বয়ংক্রিয়ভাবে সাইন আউট হয়ে যাবেন৷ খারাপ WEP কী অস্বীকৃত স্থিতি "" তে ফেরান (পুনর্সূচনা প্রয়োজন) SMS বার্তা: Google ড্রাইভ সেটিংস ... -লঞ্চার CAPS LOCK চালু আছে৷ Alt+Search অথবা বাতিল করতে Shift টিপুন৷ (%) কম ব্যাটারি +স্বীকার : বাকি Hangouts এর মাধ্যমে আপনার স্ক্রীন নিয়ন্ত্রণ ভাগ করা হচ্ছে৷ কোনও নেটওয়ার্ক নেই অন্য একটি অ্যাকাউন্টে সাইন ইন করুন... ছোট করুন অন্যান্য যোগদান ... +: ঘন্টা মিনিট পর্যন্ত পূর্ণ -এর থেকে SMS... কেরিয়ার diff --git a/chromium/ash/strings/ash_strings_ca.xtb b/chromium/ash/strings/ash_strings_ca.xtb index 325713c2dff..f7e60ca8d53 100644 --- a/chromium/ash/strings/ash_strings_ca.xtb +++ b/chromium/ash/strings/ash_strings_ca.xtb @@ -2,22 +2,26 @@ Bateria carregada. -Oculta automàticament la barra d'execució ràpida i Estat del portal Botó de desbordament +270° S'ha activat el Bluetooth + s'ha canviat a Bluetooth S'ha desactivat el Bluetooth +No s'ha pogut configurar la xarxa Només podeu tenir tres comptes com a màxim en un inici de sessió múltiple. Activa la Wi-Fi Brillantor +Seguiment del rendiment activat S'està calculant el temps de la bateria. Xarxa Servidor intermediari... Superposició de teclat S'ha rebutjat el certificat d'autenticació de manera remota Google Drive +La resolució de ha canviat a La sol·licitud HTTP ha fallat Safata d'estat Falta el PIN @@ -34,39 +38,41 @@ Premeu Maj+Alt per canviar-lo. Carregador de baix consum No hi ha informació de xarxa disponible Configura les dades mòbils +Gestiona els dispositius... Mostra el compte mòbil S'està inicialitzant el mòdem mòbil... Comparteix el control de la pantalla amb mitjançant Hangouts. -S'ha girat Desactiva el Bluetooth S'ha produït un error en desar la captura de pantalla. Reinicia per actualitzar Tanca la sessió de tots els usuaris VPN desconnectada Inactiu -La bateria està carregada fins al % Cursor del ratolí gran -No s'ha pogut autenticar amb el nom d'usuari o amb la contrasenya que heu proporcionat Convidat Personalitza els idiomes i l'entrada... + () +Posició del prestatge ENTRADA S'ha connectat un carregador de baix consum Fora de l'interval Desconnecta La xarxa ha rebutjat el certificat d'autenticació Tanca la sessió +180° Configuració Atura Més informació... Desactiva la Wi-Fi -Afegeix un dispositiu... S'està creant una rèplica +L'autenticació de PPA ha fallat perquè el nom d'usuari o la contrasenya no eren correctes BLOQ MAJ està activat. Pantalla interna L'idioma ha canviat de "" a "" després de sincronitzar la vostra configuració. Connectat Comentaris de veu Activa la Wi-Fi... +90° El mètode d'entrada ha canviat a . Premeu Maj+Alt per canviar-lo. Xarxa privada @@ -83,11 +89,12 @@ Premeu Maj+Alt per canviar-lo. Queda un % Mètodes d'introducció % +Prestatge És possible que el vostre Chromebook no es carregui mentre estigui encès. Proveu de fer servir un carregador oficial. Aturada Volum +Reinicieu i feu un Powerwash per actualitzar La cerca de DNS ha fallat -La bateria és plena i s'està carregant. S'estan cercant xarxes mòbils... Desconegut Cerca @@ -96,7 +103,6 @@ Premeu Maj+Alt per canviar-lo. Informació de la xarxa Temps que queda fins que no s'esgoti la bateria: Surt de la sessió de convidat -La bateria està carregada fins al % i s'està carregant Menú anterior No podeu iniciar la sessió en un altre compte. A la dreta @@ -114,6 +120,7 @@ Premeu Ctrl+Alt+Z per desactivar-los. Error de xarxa desconegut A l'esquerra SMS + S'està activant Wi-Fi Maximitza @@ -123,7 +130,6 @@ Premeu Ctrl+Alt+Z per desactivar-los. S'ha connectat a un carregador de baix consum. És possible que la càrrega de la bateria no sigui fiable. Bloqueja Aplicacions -S'ha canviat la resolució de a Error d'activació S'ha produït un error en connectar amb la xarxa "": La Wi-Fi està desactivada. @@ -131,6 +137,7 @@ Premeu Ctrl+Alt+Z per desactivar-los. Defineix l'empaperat... Estat en línia Mode de contrast elevat +, Error intern Temps restant fins que la bateria no estigui totalment carregada: Augment de pantalla @@ -153,20 +160,24 @@ Missatge del servidor: Tanca la sessió La Wi-Fi està activada. Alt+Cerca o Maj +La bateria està carregada fins al %. Configuració... +sobreescaneig Mode connectat +Amaga el prestatge automàticament S'ha sol·licitat la connexió Error d'OTASP Alt+Cerca Fitxers que s'estan sincronitzant: +Usuari supervisat Més de 9 Bloq Maj està desactivat Premeu Control+Maj+Q dues vegades per sortir. +La bateria està carregada fins al % i s'està carregant. : s'està activant... +La bateria està carregada. Pot ser que hàgiu esgotat les dades mòbils. -Usuari gestionat localment -: -Posició de la barra d'execució ràpida +Reverteix Cerca o Maj Ajuda Bloq Maj està activat. @@ -179,22 +190,24 @@ Premeu Cerca o Maj per cancel·lar. Contrasenya no vàlida Més informació S'ha produït un error en la connexió +Es revertirà a la resolució anterior d'aquí a La sessió finalitzarà d'aquí a . Es tancarà la sessió automàticament. Clau WEP no vàlida Estat no reconegut Torna a canviar a "" (requereix reiniciar) Missatges SMS: Configuració de Google Drive... -Menú d'aplicacions Bloq Maj està activat. Premeu Alt+Cerca o Maj per cancel·lar. Bateria baixa (%) +Accepta Temps d'autonomia: : Compartiu el control de la pantalla mitjançant Hangouts. No hi ha xarxa Inicia la sessió amb un altre compte... Minimitza Uneix-te a una altra... +: Falten h min fins que estigui carregada completament SMS de Operador diff --git a/chromium/ash/strings/ash_strings_cs.xtb b/chromium/ash/strings/ash_strings_cs.xtb index cc7cafc6f7f..d5f2e98a3ae 100644 --- a/chromium/ash/strings/ash_strings_cs.xtb +++ b/chromium/ash/strings/ash_strings_cs.xtb @@ -2,22 +2,26 @@ Baterie je nabitá -Automaticky skrýt spouštěč a Stav portálu Tlačítko přetečení +270° Rozhraní Bluetooth aktivováno +Displej byl otočen o Bluetooth Rozhraní Bluetooth deaktivováno +Konfigurace sítě se nezdařila V rámci vícenásobného přihlášení lze používat maximálně tři účty. Povolit Wi-Fi Jas +Sledování výkonu aktivováno Výpočet doby výdrže baterie. Síť Server proxy... Překryvná klávesnice Ověřovací certifikát byl vzdáleně odmítnut Disk Google +Rozlišení displeje bylo změněno na Příkaz GET protokolu HTTP se nezdařil. Stavový panel Chybí kód PIN @@ -33,39 +37,41 @@ Nabíječka má příliš nízký výkon Informace o síti nejsou k dispozici Nastavení mobilního datového připojení +Spravovat zařízení... Zobrazit mobilní účet Inicializace mobilního modemu... Sdílíte ovládání obrazovky s uživatelem (prostřednictvím služby Hangouts). -Displej byl pootočen Vypnout Bluetooth Uložení snímku obrazovky se nezdařilo Restartovat a aktualizovat Odhlásit vše Síť VPN je odpojena Nečinnost -Baterie je nabitá na % Velký kurzor myši -Ověření prostřednictvím uvedeného uživatelského jména nebo hesla se nepodařilo. Host Personalizovat jazyky a zadávání... + () +Pozice na poličce VSTUP Byla připojena nabíječka s nízkým napětím Mimo dosah Odpojit Ověřovací certifikát byl sítí odmítnut Odhlásit se +180° Konfigurace Zastavit Další informace... Vypnout Wi-Fi -Přidat zařízení... Zrcadlení +Ověření PPP se nezdařilo kvůli nesprávnému uživatelskému jménu nebo heslu CAPS LOCK je zapnutý Interní displej Jazyk prohlížeče Chrome se po synchronizaci nastavení změnil z jazyka na jazyk . Připojeno Hlasová odezva Zapnout Wi-Fi... +90° Metoda zadávání se změnila na metodu . Přepnout ji můžete stisknutím klávesové zkratky Shift + Alt. Soukromá síť Není k dispozici žádná mobilní síť. @@ -81,11 +87,12 @@ Zbývá  % Metody zadávání dat % +Polička Když bude Chromebook zapnutý, možná se nebude nabíjet. Doporučujeme použít oficiální nabíječku. Vypnout počítač Hlasitost +Restartovat a aktualizovat pomocí funkce Powerwash Nepodařilo se nalézt server DNS. -Baterie je plně nabitá a nabíjí se. Vyhledávání mobilních sítí... Neznámý Vyhledávání @@ -94,7 +101,6 @@ Informace o síti Čas zbývající do vybití baterie: Odhlásit hosta -Baterie je nabitá na % a nabíjí se Předchozí nabídka Nelze se přihlásit k jinému účtu. Doprava @@ -112,6 +118,7 @@ Stiskem kláves Ctrl+Alt+Z ji deaktivujete. Neznámá chyba sítě Doleva SMS + Aktivace sítě Wi-Fi Maximalizovat @@ -121,7 +128,6 @@ Stiskem kláves Ctrl+Alt+Z ji deaktivujete. Byla připojena nabíječka s nízkým výkonem. Nabíjení baterie nemusí probíhat spolehlivě. Uzamknout Aplikace -Rozlišení displeje bylo změněno na Aktivace se nezdařila Připojení k síti se nezdařilo: Připojení Wi-Fi je vypnuto. @@ -129,6 +135,7 @@ Stiskem kláves Ctrl+Alt+Z ji deaktivujete. Nastavení tapety... Stav online Režim vysokého kontrastu +, Interní chyba Čas zbývající do úplného nabití baterie: Lupa obrazovky @@ -151,20 +158,24 @@ Zpráva serveru: Ukončit relaci Připojení Wi-Fi je zapnuto. Alt + Vyhledávání nebo Shift +Baterie je nabita na %. Nastavení... +přesah obrazu Režim doku +Automaticky skrývat poličku Je vyžadováno připojení Selhání OTASP Alt + Vyhledávání Synchronizace souborů () +Uživatel pod dohledem >9 CAPS LOCK je vypnutý Práci ukončíte dvojitým stisknutím kombinace kláves Ctrl+Shift+Q. +Baterie je nabita na % a nabíjí se. : Probíhá aktivace... +Baterie je plně nabita. Pravděpodobně jste vyčerpali povolený objem mobilních datových přenosů. -Místně spravovaný uživatel -: -Pozice spouštěče +Vrátit zpět Vyhledávání nebo Shift Nápověda CAPS LOCK je zapnutý. Vypnete jej stisknutím klávesy Vyhledávání nebo Shift. @@ -176,22 +187,24 @@ Zpráva serveru: Chybné přístupové heslo Další informace Připojení selhalo +Původní rozlišení bude obnoveno za Relace bude ukončena za . Poté budete automaticky odhlášeni. Chybný klíč WEP Neznámý stav Změnit zpět na jazyk (vyžaduje restart) Zprávy SMS: Nastavení Disku Google... -Spouštěč CAPS LOCK je zapnutý. Vypnete jej stisknutím kombinace kláves Alt + Vyhledávání nebo Shift. Slabá baterie ( %) +Přijmout Zbývá: : Sdílíte ovládání obrazovky (prostřednictvím služby Hangouts). Žádná síť Přihlásit jiný účet... Minimalizovat Připojit k jiné... +: h min do nabití SMS z čísla Operátor diff --git a/chromium/ash/strings/ash_strings_da.xtb b/chromium/ash/strings/ash_strings_da.xtb index 5b25908a370..fdb185e5c30 100644 --- a/chromium/ash/strings/ash_strings_da.xtb +++ b/chromium/ash/strings/ash_strings_da.xtb @@ -2,22 +2,26 @@ Batteri fuldt -Skjul automatisk applikationslisten og Tilstand for portal Knappen Overflow +270° Bluetooth er aktiveret + er roteret til Bluetooth Bluetooth er deaktiveret +Netværket kunne ikke konfigureres Du kan kun have op til tre konti i samlet login fra flere konti. Aktivér Wi-Fi Lysstyrke +Sporing af ydelsen er aktiveret Beregner batteritid. Netværk Proxy... Tastaturoverlejring Godkendelsescertifikatet blev afvist eksternt Google Drev +Opløsningen for er ændret til Det lykkedes ikke at hente HTTP Statusbakke Pinkode mangler @@ -34,39 +38,41 @@ Tryk på Shift+Alt for at ændre den. Oplader ved lav kraft Der er ingen tilgængelige netværksoplysninger Konfigurer mobildata +Administrer enheder... Vis mobilkonto Initialiserer mobilmodem... Deler kontrollen over din skærm med via Hangouts. - er roteret Deaktiver Bluetooth Skærmbilledet kunne ikke gemmes Genstart for at opdatere Log alle ud VPN afbrudt Ikke aktiv -Batteriet er % fuldt Stor musemarkør -Der kunne ikke godkendes med det angivne brugernavn eller adgangskoden Gæst Tilpas sprog og indtastning... + () +Hyldeplacering INPUT Oplader med lav kraft er tilsluttet Intet signal Afbryd Godkendelsescertifikatet blev afvist af netværk Log ud +180° Konfiguration Stop Flere oplysninger... Deaktiver Wi-Fi -Tilføj enhed... Spejling +PPP-godkendelsen mislykkedes på grund af forkert brugernavn eller adgangskode CAPS LOCK er slået til Internt display Sproget er blevet ændret fra "" til "", efter at du har synkroniseret dine indstillinger. Tilsluttet Talefeedback Slå Wi-Fi til... +90° Din inputmetode er ændret til . Tryk på Shift+Alt for at ændre den. Privat netværk @@ -83,11 +89,12 @@ Tryk på Shift+Alt for at ændre den. % tilbage Indtastningsmetoder % +Hylde Din Chromebook oplades muligvis ikke, når den er tændt. Anvend eventuelt den officielle oplader. Nedlukning Lydstyrke +Genstart, og udfør PowerWash for at opdatere DNS-opslag mislykkedes -Batteriet er fuldt opladet og oplader. Søger efter mobilnetværk... Ukendt Søgning @@ -96,7 +103,6 @@ Tryk på Shift+Alt for at ændre den. Netværksoplysninger Tid tilbage, indtil batteriet er tomt, Afslut gæstesession -Batteriet er % fuldt og oplader Forrige menu Kan ikke logge ind på en anden konto. Højre @@ -113,7 +119,8 @@ Tryk på Ctrl+Alt+Z for at deaktivere dette. Ethernet Ukendt netværksfejl Venstre -SMS +sms + Aktiverer Wi-Fi Maksimer @@ -123,7 +130,6 @@ Tryk på Ctrl+Alt+Z for at deaktivere dette. Tilsluttet en oplader med lav kraft. Batteriopladningen er muligvis ikke pålidelig. Lås Applikationer - er blevet ændret til Aktiveringsfejl: Der kunne ikke oprettes forbindelse til netværket "": Wi-Fi er slået fra. @@ -131,6 +137,7 @@ Tryk på Ctrl+Alt+Z for at deaktivere dette. Angiv baggrundsbillede... Onlinetilstand Tilstanden Høj kontrast +, Intern fejl Resterende tid, indtil batteriet er fuldt opladet, Skærmforstørrer @@ -153,20 +160,24 @@ Servermeddelelse: Afslut session Wi-Fi er slået til. Alt+Søg eller Skift +Batteriet er % opladet. Indstillinger... +overscan Docktilstand +Skjul hylde automatisk Der er anmodet om forbindelse OTASP mislykkedes Alt+Søg Synkroniserer fil(er) +Overvåget bruger 9 eller flere CAPS LOCK er deaktiveret Tryk på Ctrl+Shift+Q to gange for at afslutte. +Batteriet er % opladet og oplades nu. : Aktiverer... +Batteriet er helt opladet. Du har muligvis nået din mobildatagrænse. -Lokalt administreret bruger -: -Applikationslistens placering +Fortryd Søg eller skift Hjælp CAPS LOCK er slået til. @@ -179,22 +190,24 @@ Tryk på Søg eller Skift for at annullere. Ugyldig adgangssætning Flere oplysninger Forbindelsen mislykkedes +Fortryder og vender tilbage til den gamle opløsning om sekunder. Denne session afsluttes om . Du logges automatisk ud. Ugyldig WEP-nøgle Tilstanden genkendes ikke Skift tilbage til "" (kræver genstart) -SMS-beskeder: +sms-beskeder: Google Drev-indstillinger... -Applikationsliste CAPS LOCK er slået til. Tryk på Alt+Søg eller Skift for at annullere. Batteriniveauet er lavt ( %) +Accepter : tilbage Deler kontrollen over din skærm via Hangouts. Intet netværk Log ind på en anden konto... Minimer Find andre... +: t m, indtil det er fuldt opladet Sms fra Mobilselskab diff --git a/chromium/ash/strings/ash_strings_de.xtb b/chromium/ash/strings/ash_strings_de.xtb index aed761ffbb5..b3c6f1b2f0f 100644 --- a/chromium/ash/strings/ash_strings_de.xtb +++ b/chromium/ash/strings/ash_strings_de.xtb @@ -2,22 +2,26 @@ Akku voll -Übersicht automatisch ausblenden und Portal-Status Überlaufschaltfläche +270° Bluetooth aktiviert + wurde zu gedreht. Bluetooth Bluetooth deaktiviert +Fehler beim Konfigurieren des Netzwerks Bei der Mehrfachanmeldung sind maximal drei Konten zulässig. WLAN aktivieren Helligkeit +Leistungsnachverfolgung aktiviert Akku-Laufzeit wird berechnet. Netzwerk Proxy... Tastatur-Overlay Remoteablehnung des Authentifizierungszertifikats Google Drive +Auflösung von wurde zu geändert. HTTP-Abruf fehlgeschlagen Statusleiste PIN fehlt @@ -34,39 +38,41 @@ Drücken Sie zum Wechseln Umschalt+Alt. Schwachstrom-Ladegerät Keine Netzwerkinformationen verfügbar Mobilfunk einrichten +Geräte verwalten... Mobiles Konto aufrufen Mobilfunkmodem wird initialisiert... Bildschirmfreigabe für über Hangouts - wurde gedreht. Bluetooth deaktivieren Screenshot konnte nicht gespeichert werden. Zum Aktualisieren neu starten Alle abmelden VPN-Verbindung getrennt Inaktiv -Akku ist zu  % geladen. Großer Cursor -Fehler beim Authentifizieren mit dem angegebenen Nutzernamen oder Passwort Gast Sprache und Eingabe anpassen... + () +Ablageposition Eingang Schwachstrom-Ladegerät angeschlossen Außerhalb des Bereichs Verbindung trennen Ablehnung des Authentifizierungszertifikats durch das Netzwerk Abmelden +180° Konfiguration Stopp Weitere Informationen... WLAN deaktivieren -Gerät hinzufügen... Spiegelung +Fehler bei PPP-Authentifizierung aufgrund eines falschen Nutzernamens oder Passworts Feststelltaste An Interne Anzeige Nach der Synchronisierung Ihrer Einstellungen wurde die Sprache von "" in "" geändert. Verbunden Gesprochenes Feedback WLAN aktivieren... +90° Ihre Eingabemethode hat sich in geändert. Drücken Sie zum Wechseln Umschalt+Alt. Privates Netzwerk @@ -83,11 +89,12 @@ Drücken Sie zum Wechseln Umschalt+Alt. % verbleibend Eingabemethoden % +Ablage Ihr Chromebook kann möglicherweise nicht geladen werden, während es eingeschaltet ist. Wir empfehlen die Verwendung des Originalladegeräts. Herunterfahren Lautstärke +Zum Aktualisieren Neustart und Powerwash durchführen DNS-Suche fehlgeschlagen -Akku ist vollständig geladen und wird noch geladen. Suche nach Mobilfunknetzen läuft... Unbekannt Suche @@ -96,7 +103,6 @@ Drücken Sie zum Wechseln Umschalt+Alt. Netzwerkinformationen Verbleibende Akku-Laufzeit: Gastsitzung beenden -Akku ist zu  % geladen und wird geladen. Vorheriges Menü Anmeldung in weiterem Konto nicht möglich Nach rechts @@ -114,6 +120,7 @@ Zum Deaktivieren Strg+Alt+Z drücken Unbekannter Netzwerkfehler Nach links SMS + wird aktiviert WLAN Vergrößern @@ -123,7 +130,6 @@ Zum Deaktivieren Strg+Alt+Z drücken Das Gerät ist an ein Schwachstrom-Ladegerät angeschlossen. Möglicherweise kann der Akku nicht zuverlässig aufgeladen werden. Sperren Apps -Die Größe von wurde auf angepasst. Aktivierungsfehler Fehler beim Herstellen einer Verbindung mit dem Netzwerk "": WLAN ist deaktiviert. @@ -131,6 +137,7 @@ Zum Deaktivieren Strg+Alt+Z drücken Hintergrund festlegen Online-Status Modus mit hohem Kontrast +, Interner Fehler Verbleibende Zeit, bis der Akku vollständig geladen ist: Lupe @@ -153,20 +160,24 @@ Servernachricht: Sitzung beenden WLAN ist aktiviert. Alt+Such- oder Umschalttaste +Akku ist zu  % geladen. Einstellungen... +Overscan Dock-Modus +Ablage automatisch ausblenden Verbindung angefordert OTASP fehlgeschlagen Alt+Suchtaste Datei(en) wird bzw. werden synchronisiert. +Betreuter Nutzer 9+ Feststelltaste Aus Drücken Sie zum Beenden zweimal Steuerung-Shift-Q. +Akku ist zu  % geladen und wird geladen. : Wird aktiviert... +Akku ist vollständig geladen. Sie haben möglicherweise Ihr mobiles Datenvolumen aufgebraucht. -Lokal verwalteter Nutzer -: -Position der Übersicht +Rückgängig machen Such- oder Umschalttaste Hilfe Die Feststelltaste ist aktiviert. @@ -179,22 +190,24 @@ Drücken Sie die Such- oder die Umschalttaste, um die Aktivierung aufzuheben.Ungültige Passphrase Weitere Informationen Verbindungsaufbau fehlgeschlagen +Alte Auflösung wird in wiederhergestellt. Die Sitzung wird in beendet. Sie werden dann automatisch abgemeldet. Ungültiger WEP-Schlüssel Unbekannter Status Zurücksetzen auf "" (Neustart erforderlich) SMS: Google Drive-Einstellungen... -Übersicht Die Feststelltaste ist aktiviert. Drücken Sie Alt+Such- oder Umschalttaste, um die Aktivierung aufzuheben. Niedriger Akkustand ( %) +Annehmen : verbleiben Bildschirmfreigabe über Hangouts Nicht verbunden Anderes Konto anmelden... Verkleinern Andere Netzwerke... +: In Std. Min. vollständig aufgeladen SMS von Mobilfunkanbieter diff --git a/chromium/ash/strings/ash_strings_el.xtb b/chromium/ash/strings/ash_strings_el.xtb index b088fb0ee51..a37b5bf5254 100644 --- a/chromium/ash/strings/ash_strings_el.xtb +++ b/chromium/ash/strings/ash_strings_el.xtb @@ -2,22 +2,26 @@ Μπαταρία πλήρης -Αυτόματη απόκρυψη της λειτουργίας εκκίνησης και Κατάσταση πύλης Κουμπί επιπρόσθετης ροής +270° Το Bluetooth έχει ενεργοποιηθεί + περιστράφηκε σε Bluetooth Το Bluetooth έχει απενεργοποιηθεί +Αποτυχία διαμόρφωσης δικτύου Μπορείτε να συνδέεστε ταυτόχρονα με έως και τρεις λογαριασμούς. Ενεργοποίηση Wi-Fi Φωτεινότητα +Η παρακολούθηση απόδοσης έχει ενεργοποιηθεί Υπολογισμός χρόνου μπαταρίας που απομένει. Δίκτυο Διακομιστής μεσολάβησης... Επικάλυψη πληκτρολογίου Το πιστοποιητικό ελέγχου ταυτότητας απορρίφθηκε απομακρυσμένα Google Drive +Η ανάλυση άλλαξε σε Η λήψη HTTP απέτυχε Δίσκος κατάστασης Απουσιάζει το PIN @@ -34,39 +38,41 @@ Χαμηλή ισχύς φορτιστή Δεν υπάρχουν διαθέσιμες πληροφορίες δικτύου Ρύθμιση δεδομένων κινητής τηλεφωνίας +Διαχείριση συσκευών… Προβολή λογαριασμού κινητής τηλεφωνίας Εκκίνηση μόντεμ δικτύου κινητής τηλεφωνίας… Μοιράζεστε τον έλεγχο της οθόνης σας με το χρήστη μέσω του Hangouts. -Η οθόνη έχει περιστραφεί Απενεργοποίηση Bluetooth Αποτυχία αποθήκευσης στιγμιότυπου οθόνης Επανεκκίνηση για ενημέρωση Αποσύνδεση όλων Το VPN αποσυνδέθηκε Αδρανές -Η μπαταρία είναι πλήρης % Μεγάλος δείκτης ποντικιού -Δεν είναι δυνατός ο έλεγχος ταυτότητας με το όνομα χρήστη ή τον κωδικό πρόσβασης που παρέχεται Επισκέπτης Προσαρμογή γλωσσών και εισόδου... + () +Θέση ραφιού ΕΙΣΟΔΟΣ Ο συνδεδεμένος φορτιστής παρέχει χαμηλή ισχύ Εκτός εύρους τιμών Αποσύνδεση Το πιστοποιητικό ελέγχου ταυτότητας απορρίφθηκε από το δίκτυο Έξοδος +180° Διαμόρφωση Διακοπή Μάθετε περισσότερα… Απενεργοποίηση Wi-Fi -Προσθήκη συσκευής… Κατοπτρισμός +Αποτυχία ελέγχου ταυτότητας PPP λόγω εσφαλμένου ονόματος χρήστη ή κωδικού πρόσβασης Το CAPS LOCK είναι ενεργοποιημένο Εσωτερική οθόνη Η γλώσσα του άλλαξε από "" σε "" μετά τον συγχρονισμό των ρυθμίσεών σας. Σε σύνδεση Προφορικά σχόλια Ενεργοποίηση Wi-Fi… +90° Η μέθοδος εισαγωγής σας έχει αλλάξει σε . Πατήστε Shift + Alt για εναλλαγή. Ιδιωτικό δίκτυο @@ -83,11 +89,12 @@ Υπολείπεται % Μέθοδοι εισαγωγής % +Ράφι Το Chromebook ενδέχεται να μη φορτίζει ενώ είναι ενεργοποιημένο. Χρησιμοποιήστε τον αυθεντικό φορτιστή. Τερματισμός λειτουργίας Ένταση +Επανεκκίνηση και Powerwash για ενημέρωση Η αναζήτηση DNS απέτυχε -Η μπαταρία είναι πλήρης και φορτίζει. Αναζήτηση για δίκτυα κινητής τηλεφωνίας… Άγνωστο Αναζήτηση @@ -96,7 +103,6 @@ Πληροφορίες δικτύου Χρόνος που απομένει μέχρι να αδειάσει η μπαταρία, Έξοδος επισκέπτη -Η μπαταρία είναι πλήρης % και φορτίζει Προηγούμενο μενού Δεν είναι δυνατή η σύνδεση σε άλλο λογαριασμό. Δεξιά @@ -114,6 +120,7 @@ Άγνωστο σφάλμα δικτύου Αριστερά SMS + Ενεργοποίηση Wi-Fi Μεγιστοποίηση @@ -123,7 +130,6 @@ Σύνδεση με φορτιστή χαμηλής ισχύος. Η φόρτιση της μπαταρίας ενδέχεται να μη γίνεται με αξιόπιστο τρόπο. Κλείδωμα Εφαρμογές -Η ανάλυση της οθόνης έχει αλλάξει σε Αποτυχία ενεργοποίησης Δεν ήταν δυνατή η σύνδεση στο δίκτυο '': Το Wi-Fi έχει απενεργοποιηθεί. @@ -131,6 +137,7 @@ Ορισμός ταπετσαρίας... Κατάσταση "Σε σύνδεση" Λειτουργία υψηλής αντίθεσης +, Εσωτερικό σφάλμα Χρόνος που απομένει μέχρι να φορτιστεί πλήρως η μπαταρία, Μεγεθυντής οθόνης @@ -152,20 +159,24 @@ Έξοδος από συνεδρία Το Wi-Fi έχει ενεργοποιηθεί. Alt+Search ή Shift +Η μπαταρία είναι πλήρης %. Ρυθμίσεις... +υπερσάρωση Λειτουργία Dock +Αυτόματη απόκρυψη ραφιού Έχει υποβληθεί αίτημα σύνδεσης Αποτυχία OTASP Alt+Search Συγχρονισμός αρχείων +Εποπτευόμενος χρήστης 9+ Το CAPS LOCK είναι απενεργοποιημένο Πατήστε Control Shift Q δύο φορές για έξοδο. +Η μπαταρία είναι πλήρης % και φορτίζει. : Ενεργοποίηση… +Η μπαταρία είναι πλήρης. Ενδέχεται να έχετε χρησιμοποιήσει το πρόγραμμά δεδομένων της κινητής τηλεφωνίας σας. -Χρήστης τοπικής διαχείρισης -: -Θέση λειτουργίας εκκίνησης +Επαναφορά Search ή Shift Βοήθεια Το πλήκτρο CAPS LOCK έχει ενεργοποιηθεί. @@ -178,22 +189,24 @@ Εσφαλμένη κωδική φράση Μάθετε περισσότερα Η σύνδεση απέτυχε +Επαναφορά στην προηγούμενη ανάλυση σε Αυτή η περίοδος σύνδεσης θα λήξει αυτόματα σε . Θα αποσυνδεθείτε αυτόματα. Εσφαλμένο κλειδί WEP Μη αναγνωρίσιμη κατάσταση Αλλάξτε το πάλι σε "" (απαιτείται επανεκκίνηση) Μηνύματα SMS: Ρυθμίσεις Google Drive... -Λειτουργία εκκίνησης Το πλήκτρο CAPS LOCK έχει ενεργοποιηθεί. Πατήστε Alt+Search ή Shift για ακύρωση. Χαμηλή στάθμη μπαταρίας (%) +Αποδοχή Απομένουν : Γίνεται κοινή χρήση της οθόνης σας μέσω Hangouts. Κανένα δίκτυο Σύνδεση σε άλλο λογαριασμό… Ελαχιστοποίηση Συμμετοχή σε άλλο… +: ω λ μέχρι να ολοκληρωθεί η φόρτιση SMS από Εταιρεία κινητής τηλεφωνίας diff --git a/chromium/ash/strings/ash_strings_en-GB.xtb b/chromium/ash/strings/ash_strings_en-GB.xtb index c0e1ded60ce..d873968f172 100644 --- a/chromium/ash/strings/ash_strings_en-GB.xtb +++ b/chromium/ash/strings/ash_strings_en-GB.xtb @@ -2,22 +2,26 @@ Battery full -Auto-hide launcher and Portal state Overflow Button +270° Bluetooth enabled + was rotated to Bluetooth Bluetooth disabled +Failed to configure network You can only have up to three accounts in multiple sign-in. Enable Wi-Fi Brightness +Performance tracing enabled Calculating battery time. Network Proxy... Keyboard Overlay Authentication certificate rejected remotely Google Drive + resolution was changed to HTTP get failed Status tray PIN missing @@ -34,39 +38,41 @@ Press Shift + Alt to switch. Low-power charger No network information available Set up mobile data +Manage devices... View mobile account Initialising mobile modem... Sharing control of your screen with via Hangouts. - has been rotated Disable Bluetooth Failed to save screenshot Restart to update Sign out all VPN disconnected Idle -Battery is % full Large mouse cursor -Failed to authenticate with the provided username or password Guest Customise languages and input... + () +Shelf position INPUT Low-power charger connected Out of range Disconnect Authentication certificate rejected by network Sign out +180° Configuration Stop Learn more... Disable Wi-Fi -Add device ... Mirroring +PPP authentication failed due to an incorrect username or password CAPS LOCK is on Internal Display The language has changed from "" to "" after syncing your settings. Connected Spoken feedback Turn Wi-Fi on... +90° Your input method has changed to . Press Shift + Alt to switch. Private Network @@ -83,11 +89,12 @@ Press Shift + Alt to switch. % remaining Input methods % +Shelf Your Chromebook may not charge while it is turned on. Consider using the official charger. Shutdown volume +Restart and Powerwash to update DNS lookup failed -Battery is full and charging. Searching for cellular networks... Unknown Search @@ -96,7 +103,6 @@ Press Shift + Alt to switch. Network Info Time left until battery is empty, Exit guest -Battery is % full and charging Previous menu Can't sign into another account. Right @@ -114,6 +120,7 @@ Press Ctrl+Alt+Z to disable. Unknown network error Left SMS + Activating Wi-Fi Maximise @@ -123,7 +130,6 @@ Press Ctrl+Alt+Z to disable. Plugged in to a low-power charger. Battery charging may not be reliable. Lock Apps - has been resized to Activation failure Failed to connect to the network '': Wi-Fi is turned off. @@ -131,6 +137,7 @@ Press Ctrl+Alt+Z to disable. Set wallpaper... Online state High contrast mode +, Internal error Time remaining until battery is fully charged, Screen magnifier @@ -153,20 +160,24 @@ Server message: Exit session Wi-Fi is turned on. Alt+Search or Shift +Battery is % full. Settings... +overscan Dock mode +Autohide shelf Connect Requested OTASP failed Alt+Search Syncing file(s) +Supervised user 9+ CAPS LOCK is off Press Control Shift Q twice to exit. +Battery is % full and charging. : Activating... +Battery is full. You may have used up your mobile data allowance. -Locally managed user -: -Launcher position +Revert Search or Shift Help CAPS LOCK is on. @@ -179,22 +190,24 @@ Press Search or Shift to cancel. Bad passphrase Learn more Connection failed +Reverting to old resolution in This session will end in . You will be automatically signed out. Bad WEP key Unrecognised state Change back to "" (requires restart) SMS messages: Google Drive settings -Launcher CAPS LOCK is on. Press Alt+Search or Shift to cancel. Battery low (%) +Accept : left Sharing control of your screen via Hangouts. No network Sign in another account... Minimise Join other ... +: h m until full SMS from Operator diff --git a/chromium/ash/strings/ash_strings_es-419.xtb b/chromium/ash/strings/ash_strings_es-419.xtb index b752b8e297c..5a285041447 100644 --- a/chromium/ash/strings/ash_strings_es-419.xtb +++ b/chromium/ash/strings/ash_strings_es-419.xtb @@ -2,22 +2,26 @@ Batería completa -Ocultar automáticamente la barra de aplicaciones y Estado de portal Botón de desbordamiento +270° Bluetooth activado + se giró a . Bluetooth Bluetooth desactivado +Error al configurar la red Solo puedes tener un máximo de tres cuentas en un acceso múltiple. Habilitar Wi-Fi Brillo +Seguimiento de rendimiento habilitado Calculando duración de la batería... Red Proxy... Superposición del teclado Certificado de autenticación rechazado de forma remota Google Drive +La resolución de se cambió por . Error al obtener HTTP Bandeja de estado Falta el número de PIN @@ -34,39 +38,41 @@ Para cambiarlo, presiona Shift + Alt. Cargador de baja potencia No hay información de red disponible. Configurar datos de dispositivos móviles +Administrar dispositivos… Ver cuenta móvil Iniciando módem celular... Compartir el control de la pantalla con a través de Hangouts -Se rotó . Desactivar Bluetooth No se pudo guardar la captura de pantalla. Reinicia para actualizar. Salir de todo VPN desconectada Inactivo -% de batería Cursor del mouse grande -Error al autenticar con el nombre de usuario o la contraseña proporcionados. Invitado Personalizar idiomas y la entrada de datos + () +Posición de la biblioteca ENTRADA Cargador de baja potencia conectado Fuera de alcance Desconectar Certificado de autenticación rechazado por la red Salir +180° Configuración Interrumpir Más información... Desactivar Wi-Fi -Agregar dispositivo... Duplicando +Falló la autenticación de PPP debido a un nombre de usuario o una contraseña incorrectos. BLOQ MAYÚS está activado. Pantalla interna Después de sincronizar tu configuración, el idioma se cambió de "" a "". Conectado Comentarios por voz Encender Wi-Fi... +90° Tu método de introducción cambió a . Para cambiarlo, presiona Shift + Alt. Red privada @@ -83,11 +89,12 @@ Para cambiarlo, presiona Shift + Alt. % restante Métodos de entrada % +Biblioteca Es posible que tu Chromebook no se cargue mientras esté encendida. Te recomendamos que utilices el cargador oficial. Cierre Volumen +Reiniciar y aplicar Powerwash para actualizar Error al buscar DNS -Batería completa y cargando Buscando redes para celulares... Desconocido Buscar @@ -96,7 +103,6 @@ Para cambiarlo, presiona Shift + Alt. Información de red Tiempo restante hasta que se agote la batería: Salir de la sesión de invitado -% de batería y cargando Menú anterior No puedes acceder a otra cuenta. Derecha @@ -114,6 +120,7 @@ Para inhabilitar esta opción, presiona Ctrl+Alt+Z. Error de red desconocido Izquierda SMS + Activación de Wi-Fi Maximizar @@ -123,7 +130,6 @@ Para inhabilitar esta opción, presiona Ctrl+Alt+Z. Conexión a un cargador de baja potencia. Es posible que la carga de la batería no sea confiable. Bloquear Aplicaciones -Se cambió la resolución de a . Fallo en la activación Error al conectar a la red "": Wi-Fi desactivada @@ -131,6 +137,7 @@ Para inhabilitar esta opción, presiona Ctrl+Alt+Z. Establecer fondo de pantalla... Estado en línea Modo de contraste alto +, Error interno Tiempo restante hasta que la batería esté completamente cargada: Lupa @@ -153,20 +160,24 @@ Mensaje del servidor: Salir de la sesión Wi-Fi activada Alt+tecla de búsqueda o Mayús +La batería tiene un  % de carga. Configuración... +desajuste de dimensiones Modo de conector +Ocultar la biblioteca automáticamente Conexión solicitada OTASP falló Alt+tecla de búsqueda Sincronizando archivo(s) +Usuario supervisado Más de 9 El bloqueo de mayúsculas está desactivado. Presiona Control+Mayús+Q dos veces para salir. +La batería tiene un  % de carga y se está cargando. : Activando... +La batería está completa. Es posible que hayas agotado tu cuota de datos móviles. -Usuario administrado de forma local -: -Posición del selector +Revertir Tecla de búsqueda o Mayús Ayuda El BLOQUEO DE MAYÚSCULAS está activado. @@ -179,22 +190,24 @@ Presiona Mayús o la tecla de búsqueda para cancelar la operación.Frase de contraseña no válida Más información No se pudo conectar +Se revertirá a la resolución anterior en . Esta sesión finalizará en . Saldrás automáticamente. Clave de WEP no válida Estado no reconocido Volver a "" (debes reiniciar). Mensajes SMS: Configuración de Google Drive... -Selector El BLOQUEO DE MAYÚSCULAS está activado. Presiona Alt y la tecla de búsqueda o Mayús para cancelar la operación. Batería baja (%) +Aceptar : restante Compartir el control de la pantalla a través de Hangouts Sin red Acceder a otra cuenta Minimizar Conectarte a otra red... +: h min para completar la carga SMS de Proveedor de servicio celular diff --git a/chromium/ash/strings/ash_strings_es.xtb b/chromium/ash/strings/ash_strings_es.xtb index d3cc029c9b8..e69bab48c06 100644 --- a/chromium/ash/strings/ash_strings_es.xtb +++ b/chromium/ash/strings/ash_strings_es.xtb @@ -2,22 +2,26 @@ Batería al máximo -Ocultar automáticamente la barra de aplicaciones y Conectado vía portal Botón de flujo excesivo +270° Bluetooth habilitado +Se ha modificado la rotación de a Bluetooth Bluetooth inhabilitado +Error al configurar la red Solo puedes utilizar un máximo de tres cuentas en el inicio de sesión múltiple. Habilitar Wi-Fi Brillo +Se ha habilitado el control del rendimiento Calculando duración de la batería... Red Proxy... Superposición de teclado Certificado de autenticación rechazado de forma remota Google Drive +Se ha modificado la resolución de a Error al obtener HTTP Bandeja de estado Falta el PIN. @@ -34,39 +38,41 @@ Para cambiarlo, pulsa Mayús + Alt. Cargador de baja potencia No hay información de red disponible. Configurar datos móviles +Administrar dispositivos... Ver cuenta móvil Iniciando módem móvil... Comparte el control de tu pantalla con a través de Hangouts. -Se ha girado Inhabilitar Bluetooth Error al guardar captura de pantalla Reinicia el sistema para actualizarlo. Cerrar todas las sesiones VPN desconectada Inactiva -% de batería Cursor del ratón grande -Se ha producido un error al autenticar la contraseña o el nombre de usuario proporcionados. Invitado Personalizar idiomas... + () +Posición de la estantería ENTRADA Cargador de baja potencia conectado Fuera del alcance Desvincular Certificado de autenticación rechazado por la red Cerrar sesión +180° Configuración Interrumpir Más información... Inhabilitar Wi-Fi -Añadir dispositivo... Duplicando +Se ha producido un error en la autenticación de PPP porque la contraseña o el nombre de usuario son incorrectos Bloqueo de mayúsculas activado Pantalla interna El idioma ha cambiado de "" a "" después de sincronizar tu configuración. Con conexión Mensajes de voz Activar Wi-Fi... +90° Tu método de entrada ha cambiado a . Para cambiarlo, pulsa Mayús + Alt. Red privada @@ -83,11 +89,12 @@ Para cambiarlo, pulsa Mayús + Alt. % restante Métodos de entrada % +Estantería Es posible que tu Chromebook no se cargue mientras esté activado. Te recomendamos que utilices el cargador oficial. Cierre del navegador Volumen +Reinicia y aplica la función de Powerwash para actualizar el sistema Error al buscar DNS -Batería completa y cargándose Buscando redes móviles... Desconocido Búsqueda @@ -96,7 +103,6 @@ Para cambiarlo, pulsa Mayús + Alt. Información de red Tiempo restante hasta que se agote la batería: Salir de la sesión de invitado -% de batería y cargándose Menú anterior No puedo iniciar sesión con otra cuenta. Derecha @@ -114,6 +120,7 @@ Para inhabilitar esta opción, pulsa Ctrl+Alt+Z. Error desconocido de red Izquierda SMS + Activación de Wi-Fi Maximizar @@ -123,7 +130,6 @@ Para inhabilitar esta opción, pulsa Ctrl+Alt+Z. Conectado a un cargador de baja potencia. Es posible que la carga de la batería no sea fiable. Bloquear Aplicaciones -Se ha cambiado la resolución de a . Error de activación Error al establecer conexión con la red "": La conexión Wi-Fi está desactivada. @@ -131,6 +137,7 @@ Para inhabilitar esta opción, pulsa Ctrl+Alt+Z. Establecer fondo de pantalla... Estado online Modo de contraste alto +, Error interno Tiempo restante hasta que se cargue la batería por completo: Lupa @@ -153,20 +160,24 @@ Mensaje del servidor: Cerrar sesión La conexión Wi-Fi está activada. Alt+tecla de búsqueda o Mayús +La batería está al %. Configuración... +reajustar Modo de conector +Ocultar automáticamente estantería Conexión solicitada Error de OTASP Alt+tecla de búsqueda Sincronizando archivo(s) +Usuario supervisado +9 Bloqueo de mayúsculas desactivado Pulsa Ctrl+Mayús+Q dos veces para salir. +La batería se está cargando y está al %. : Activando... +La batería está llena. Es posible que hayas agotado los datos de tu plan de datos móviles. -Usuario administrado de forma local -: -Posición de la barra de aplicaciones +Deshacer Tecla de búsqueda o Mayús Ayuda El BLOQUEO DE MAYÚSCULAS está activado. @@ -179,22 +190,24 @@ Pulsa Mayús o la tecla de búsqueda para cancelar la operación. Frase de contraseña incorrecta Más información Error de conexión +Restableciendo la resolución anterior en Esta sesión finalizará en . La sesión se cerrará automáticamente. Clave WEP incorrecta Estado desconocido Cambiar de nuevo por "" (requiere reiniciar) Mensajes SMS: Configuración de Google Drive... -Menú de aplicaciones El BLOQUEO DE MAYÚSCULAS está activado. Pulsa Alt y la tecla de búsqueda o Mayús para cancelar la operación. Poca batería (%) +Aceptar Queda para : Comparte el control de tu pantalla a través de Hangouts. Ninguna red Inicia sesión con otra cuenta... Minimizar Conectarse a otra red... +: h y min para completar la carga SMS de Operador diff --git a/chromium/ash/strings/ash_strings_et.xtb b/chromium/ash/strings/ash_strings_et.xtb index 67871d1640a..6588f0e92c0 100644 --- a/chromium/ash/strings/ash_strings_et.xtb +++ b/chromium/ash/strings/ash_strings_et.xtb @@ -2,22 +2,26 @@ Aku on täis -Peida käiviti automaatselt ja Portaali olek Ülevoolunupp +270° Bluetooth on lubatud + vahetati valikule Bluetooth Bluetooth on keelatud +Võrgu seadistamine ebaõnnestus Saate korraga sisse logida kuni kolmele kontole. Luba WiFi Eredus +Toimivuse jälgimine on lubatud Aku tööaja arvutamine. Võrk Puhverserver ... Klaviatuuri ülekate Autentimissertifikaat lükati kaugühenduse kaudu tagasi Google Drive +Ekraani eraldusvõimeks määrati HTTP hankimine nurjus Olekusalv PIN-kood puudub @@ -34,39 +38,41 @@ Selle muutmiseks vajutage klahve Tõstuklahv + Alt. Väikese energiakuluga laadija Võrguteave ei ole saadaval Seadista mobiilne andmeside +Seadmete haldamine ... Kuva mobiilikonto Mobiilimodemi lähtestamine ... Teie ekraani juhtimist jagatakse Hangoutsi kaudu kasutajaga . - on pööratud Keela Bluetooth Ekraanipilti ei õnnestunud salvestada Taaskäivitage värskendamiseks Logi kõik kasutajad välja VPN-i ühendus on katkestatud Tegevusetu -Aku on % täis Suur hiirekursor -Autentimine esitatud kasutajanime või parooliga ebaõnnestus Külaline Keelte ja sisendi kohandamine... + () +Riiuli positsioon SISEND Väikese energiakuluga laadija on ühendatud Vahemikust väljas Katkesta ühendus Võrk lükkas autentimissertifikaadi tagasi Logi välja +180° Konfigureerimine Peata Lisateave ... Keela WiFi -Lisa seade ... Peegeldamine +PPP autentimine ebaõnnestus vale kasutajanime või parooli tõttu SUURTÄHELUKK on sisse lülitatud Sisemine kuva Pärast seadete sünkroonimist asendati keel keelega. Ühendatud Suuline tagasiside Lülita WiFi sisse ... +90° Teie sisestusmeetod on nüüd . Selle muutmiseks vajutage klahve Tõstuklahv + Alt. Privaatvõrk @@ -83,11 +89,12 @@ Selle muutmiseks vajutage klahve Tõstuklahv + Alt. % on jäänud Sisestusviisid % +Riiul Teie Chromebooki ei pruugita laadida, kui see on sisse lülitatud. Kaaluge ametliku laadija kasutamist. Sulgemine Helitugevus +Värskendamiseks tuleb arvuti taaskäivitada ja teha Powerwash DNS-i otsing nurjus -Aku on täis ja seda laetakse. Mobiilsidevõrkude otsimine ... Tundmatu Otsing @@ -96,7 +103,6 @@ Selle muutmiseks vajutage klahve Tõstuklahv + Alt. Võrguteave Aku tühjenemiseni on aega Välju külastajaseansist -Aku on % täis ja seda laetakse Eelmine menüü Teisele kontole ei saa sisse logida. Paremale @@ -114,6 +120,7 @@ Keelamiseks vajutage klahvikombinatsiooni Ctrl+Alt+Z. Tundmatu võrguviga Vasakule SMS + Võrgu aktiveerimine WiFi Maksimeeri @@ -123,7 +130,6 @@ Keelamiseks vajutage klahvikombinatsiooni Ctrl+Alt+Z. Ühendatud väikese energiakuluga laadijaga. Aku laadimine võib olla ebastabiilne. Lukusta Rakendused -Kuva eraldusvõimeks valiti Aktiveerimise tõrge Võrguga „” ühenduse loomine ebaõnnestus: WiFi on välja lülitatud. @@ -131,6 +137,7 @@ Keelamiseks vajutage klahvikombinatsiooni Ctrl+Alt+Z. Määra taustapilt ... Võrguühenduse olek Suure kontrastsusega režiim +, Sisemine viga Aku täitumiseni on aega Ekraanisuurendi @@ -153,20 +160,24 @@ Serveri teade: Välju seansist WiFi on sisse lülitatud. Alt + otsinguklahv või tõstuklahv +Aku on % täis. Seaded... +liighälvitus Dokirežiim +Riiuli automaatne peitmine Ühenduse taotlus OTASP nurjus Alt + otsinguklahv faili sünkroonimine +Valvatav kasutaja 9+ SUURTÄHELUKK on välja lülitatud Väljumiseks vajutage kaks korda klahvikombinatsiooni Ctrl + tõstuklahv + Q. +Aku on % täis ja seda laetakse. : aktiveerimine ... +Aku on täis. Tundub, et olete oma mobiilse andmesidemahu ära kasutanud. -Kohalikult hallatud kasutaja -: -Käiviti positsioon +Ennista Otsinguklahv või tõstuklahv Abi SUURTÄHELUKK on sisse lülitatud. @@ -179,22 +190,24 @@ Tühistamiseks vajutage otsinguklahvi või tõstuklahvi Halb parool Lisateave Ühendamine nurjus +Ekraan ennistatakse vanale eraldusvõimele pärast Selle seansi lõpuni on jäänud . Teid logitakse automaatselt välja. Halb WEP-võti Tundmatu olek Muuda tagasi seadele (nõuab taaskäivitust) SMS-id: Google Drive'i seaded ... -Käivitaja SUURTÄHELUKK on sisse lülitatud. Tühistamiseks vajutage klahvikombinatsiooni Alt + otsinguklahv või tõstuklahv Aku tühjeneb (%) +Nõustu : alles Teie ekraani juhtimist jagatakse Hangoutsi kaudu. Võrku pole Logige sisse teise kontoga ... Minimeeri Liitu muu võrguga ... +: h min aku täitumiseni SMS numbrilt Mobiilioperaator diff --git a/chromium/ash/strings/ash_strings_fa.xtb b/chromium/ash/strings/ash_strings_fa.xtb index 9639c888882..0707e7b6fb0 100644 --- a/chromium/ash/strings/ash_strings_fa.xtb +++ b/chromium/ash/strings/ash_strings_fa.xtb @@ -2,23 +2,27 @@ باتری پر است -مخفی کردن خودکار راه انداز و وضعیت سایت دکمه سرریز +‎۲۷۰°‎ بلوتوث فعال شد + به چرخانده شد بلوتوث بلوتوث غیرفعال است +پیکربندی شبکه انجام نشد در ورود چندگانه به سیستم حداکثر می‌توانید از سه حساب استفاده کنید. -فعال کردن Wi-Fi +‏فعال کردن Wi-Fi روشنایی +ردیابی عملکرد فعال شد درحال محاسبه زمان شارژ باتری. شبکه پراکسی... هم پوشانی صفحه‌کلید گواهینامه تأیید اعتبار، از راه دور، رد شد Google Drive -HTTP با خطا مواجه شد +وضوح به تغییر یافت +‏HTTP با خطا مواجه شد سینی وضعیت پین جا افتاده : در حال اتصال... @@ -26,47 +30,49 @@ فعال کردن بلوتوث گسترش صفحه به سلولی -آدرس IP +‏آدرس IP فعالسازی انجام نشد تنظیمات صوتی -روش ورودی شما به *(شخص ثالث) تغییر یافت. Shift + Alt را برای تعویض فشار دهید. +‏روش ورودی شما به *(شخص ثالث) تغییر یافت. Shift + Alt را برای تعویض فشار دهید. شارژر برق ضعیف اطلاعات شبکه در دسترس نیست تنظیم اطلاعات تلفن همراه +مدیریت دستگاه‌ها... مشاهده حساب تلفن همراه در حال راه‌اندازی مودم سلولی... -اشتراک‌گذاری کنترل صفحه نمایش‌تان با از طریق Hangouts. - چرخانده شده است +‏اشتراک‌گذاری کنترل صفحه نمایش‌تان با از طریق Hangouts. غیرفعال کردن بلوتوث عکس از صفحه نمایش ذخیره نشد راه‌اندازی مجدد برای به‌روزرسانی خروج همه از سیستم -VPN قطع شد +‏VPN قطع شد بدون فعالیت -باتری درصد پر است نشانگر موشواره بزرگ -تأیید اعتبار با نام کاربری و گذرواژه ارائه شده انجام نشد مهمان سفارشی کردن زبان‌ها و ورودی... + () +موقعیت قفسه ورودی شارژر برق متصل شده ضعیف است خارج از محدوده قطع اتصال گواهینامه تأیید اعتبار توسط شبکه رد شد خروج از سیستم +۱۸۰° پیکربندی توقف اطلاعات بیشتر... -غیرفعال کردن Wi-Fi -افزودن دستگاه… +‏غیرفعال کردن Wi-Fi بازتاب می‌شود -CAPS LOCK روشن است +‏احراز هویت PPP به دلیل نام کاربری یا گذرواژه نادرست انجام نشد +‏CAPS LOCK روشن است صفحه نمایش داخلی بعد از همگام‌سازی تنظیمات شما، زبان از «» به «» تغییر کرد. متصل بازخورد گفتاری -روشن کردن Wi-Fi در... -روش ورودی شما به تغییر یافت. Shift + Alt را برای تعویض فشار دهید. +‏روشن کردن Wi-Fi در... +۹۰° +‏روش ورودی شما به تغییر یافت. Shift + Alt را برای تعویض فشار دهید. شبکه خصوصی هیچ شبکه سلولی دردسترس نیست نمایشگر عزیز، ما برای هم ساخته نشده‌ایم. (این نمایشگر پشتیبانی نمی‌شود) @@ -74,18 +80,19 @@ پایین عکس از صفحه نمایش گرفته شد صفحه گسترش یافته است -VPN پیکربندی نشده است. -برای خروج Ctrl+Shift+Q را دو بار فشار دهید. +‏VPN پیکربندی نشده است. +‏برای خروج Ctrl+Shift+Q را دو بار فشار دهید. نمایش یک تصویر واحد در چند صفحه نمایش ممکن نیست زیرا وضوح تصویر پشتیبانی شده‌ای وجود ندارد. بجای آن حالت نمایش دسک‌تاپ چند بخشی استفاده می‌شود. حالت نمایش ٪ باقیمانده روش‌های ورودی % -وقتی Chromebook روشن است ممکن است شارژ نشود. از شارژر مخصوص دستگاه استفاده کنید. +قفسه +‏وقتی Chromebook روشن است ممکن است شارژ نشود. از شارژر مخصوص دستگاه استفاده کنید. بسته شدن میزان صدا -جستجوی DNS انجام نشد -باتری پر است و شارژ می‌شود. +‏راه‌اندازی مجدد و Powerwash برای به‌روزرسانی +‏جستجوی DNS انجام نشد جستجو برای شبکه‌های تلفن همراه ... ناشناخته جستجو @@ -94,7 +101,6 @@ اطلاعات شبکه زمان باقیمانده تا خالی‌شدن شارژ باتری، خروج از مهمان -باتری درصد پر است و شارژ می‌شود منوی قبلی ورود به حساب دیگر ممکن نیست. راست @@ -104,14 +110,15 @@ تنظیمات در حال همگام‌سازی برنامه‌ها… خطای نامشخص: -بررسی AAA انجام نشد +‏بررسی AAA انجام نشد : تا پر شود -بازخورد گفتاری فعال است. +‏بازخورد گفتاری فعال است. Ctrl+Alt+Z را فشار دید تا غیرفعال شود. اترنت خطای شبکه ناشناخته چپ پیامک +۰ درجه فعال‌سازی Wi-Fi بزرگ کردن @@ -121,14 +128,14 @@ Ctrl+Alt+Z را فشار دید تا غیرفعال شود. باتری به شارژر برق ضعیف متصل است. شارژ باتری ممکن است قابل اطمینان نباشد. قفل برنامه‌ها -اندازه به تغییر داده شد نقص در فعالسازی اتصال ناموفق به شبکه "": -Wi-Fi خاموش است. +‏Wi-Fi خاموش است. متصل به تنظیم کاغذدیواری... حالت آنلاین حالت کنتراست بالا +، خطای داخلی زمان باقی مانده تا شارژ کامل باتری، ذره‌بین صفحه @@ -142,57 +149,63 @@ Ctrl+Alt+Z را فشار دید تا غیرفعال شود. :: درحال جستجو برای دستگاه‌ها... ، -در حال جستجوی شبکه‌های Wi-Fi... +‏در حال جستجوی شبکه‌های Wi-Fi... اتصال به «» ناموفق بود: پیام سرور: یک خطا روی داد -EVDO مورد نیاز است +‏EVDO مورد نیاز است یک جلسه عمومی مدیریت‌شده توسط است خروج از جلسه -Wi-Fi روشن است. -Alt+جستجو یا Shift +‏Wi-Fi روشن است. +‏Alt+جستجو یا Shift +باتری درصد پر است. تنظیمات... +بزرگتر از صفحه حالت جایگاه اتصال +پنهان کردن خودکار قفسه درخواست اتصال -OTASP انجام نشد -Alt+جستجو +‏OTASP انجام نشد +‏Alt+جستجو در حال همگام‌سازی فایل(های) +کاربر نظارت‌شده -CAPS LOCK خاموش است -برای خروج Control‏، Shift و Q را دو بار فشار دهید. +‏CAPS LOCK خاموش است +‏برای خروج Control‏، Shift و Q را دو بار فشار دهید. +باتری درصد پر و درحال شارژ است. : در حال فعال‌سازی… +باتری پر است. ممکن است حجم مجاز داده تلفن همراه خود را مصرف کرده باشید. -کاربر مدیریت شده به صورت محلی -:‏ -موقعیت راه‌انداز -جستجو یا Shift +برگرداندن +‏جستجو یا Shift راهنما -CAPS LOCK روشن است. +‏CAPS LOCK روشن است. جستجو یا Shift را برای لغو فشار دهید. در حال محاسبه… شبکه خانگی مورد نیاز است فعال سازی -بررسی DHCP انجام نشد +‏بررسی DHCP انجام نشد خروجی کلمه عبور نادرست بیشتر بیاموزید اتصال برقرار نشد +برگرداندن به وضوح قدیمی در این جلسه در به اتمام خواهد رسید. به طور خودکار از سیستم خارج خواهید شد. -کلید WEP نادرست +‏کلید WEP نادرست حالت ناشناس به "" تغییر دهید (به راه‌اندازی دوباره نیاز دارد) پیامک‌ها: -تنظیمات Google Drive... -راه‌انداز -CAPS LOCK روشن است. +‏تنظیمات Google Drive... +‏CAPS LOCK روشن است. Alt+جستجو یا Shift را برای لغو فشار دهید. باتری ضعیف است (٪) +پذیرش : باقیمانده است -اشتراک‌گذاری کنترل صفحه نمایش شما از طریق Hangouts. +‏اشتراک‌گذاری کنترل صفحه نمایش شما از طریق Hangouts. بدون شبکه ورود به سیستم با حسابی دیگر... کوچک کردن پیوستن به شبکه دیگر… +: ساعت دقیقه مانده تا باتری شارژ شود پیامک از شرکت مخابراتی diff --git a/chromium/ash/strings/ash_strings_fi.xtb b/chromium/ash/strings/ash_strings_fi.xtb index d9793f2b869..9c4981dd86c 100644 --- a/chromium/ash/strings/ash_strings_fi.xtb +++ b/chromium/ash/strings/ash_strings_fi.xtb @@ -2,22 +2,26 @@ Akku täynnä -Piilota käynnistyspalkki Portaalitila Overflow-painike +270° Bluetooth käytössä + käännettiin asentoon Bluetooth Bluetooth pois käytöstä +Verkon asetuksien määrittäminen epäonnistui Sinulla voi olla enintään kolme tiliä useaan tiliin kirjautuessasi. Ota wifi käyttöön Kirkkaus +Tehokkuuden seuranta on käytössä Lasketaan akun kesto. Verkko Välityspalvelin... Näppäimistön peitto Todennusvarmenne on hylätty etäyhteyden kautta Google Drive +Ruudun tarkkuudeksi vaihdettiin HTTP get -toiminto epäonnistui Tila-alue PIN-koodi puuttuu @@ -34,39 +38,41 @@ Vaihda syöttötapaa painamalla Shift + Alt. Pienitehoinen laturi Verkon tietoja ei saatavilla Määritä mobiilitiedonsiirron asetukset +Hallinnoi laitteita… Näytä mobiilitili Alustetaan matkapuhelinmodeemia… Näytönhallinnan jakaminen henkilön kanssa Hangout-keskustelujen kautta. - on käännetty Poista Bluetooth käytöstä Kuvakaappauksen tallentaminen epäonnistui Päivitä käynnistämällä uudelleen Kirjaa kaikki ulos VPN-yhteys katkaistu Ei käytössä -Akussa on virtaa % Suuri hiiren osoitin -Todennus annetulla käyttäjänimellä ja salasanalla epäonnistui. Vieras Muokkaa kieliä ja syötettä... + () +Hyllyn sijainti ÄÄNITULO Pienitehoinen laturi kytketty Katvealueella Katkaise yhteys Verkko on hylännyt todennusvarmenteen Kirjaudu ulos +180° Määritykset Pysäytä Lisätietoja... Wifi pois käytöstä -Lisää laite... Peilaus päällä +PPP-todennus epäonnistui virheellisen käyttäjänimen tai salasanan vuoksi CAPS LOCK on päällä Sisäinen näyttö Käyttökieli on muutettu kielestä kieleksi asetustesi synkronoinnin yhteydessä. Yhdistetty Äänipalaute Ota wifi käyttöön… +90° Syöttötapa on vaihtunut. Uusi syöttötapa on . Vaihda syöttötapaa painamalla Shift + Alt. Yksityinen verkko @@ -83,11 +89,12 @@ Vaihda syöttötapaa painamalla Shift + Alt. % jäljellä Syöttötavat % +Hylly Chromebookisi ei välttämättä lataudu sen ollessa päällä. Harkitse virallisen laturin käyttämistä. Sulkeminen Äänenvoimakkuus +Käynnistä laite uudelleen ja suorita powerwash asentaaksesi päivitykset DNS-haku epäonnistui -Akku on täynnä ja laite on kytketty laturiin. Haetaan matkapuhelinverkkoja… Tuntematon Haku @@ -96,7 +103,6 @@ Vaihda syöttötapaa painamalla Shift + Alt. Verkon tiedot Akku on tyhjä kuluttua Sulje vierastila -Akussa on virtaa % ja laite on kytketty laturiin Edellinen valikko Toiseen tiliin kirjautuminen ei onnistunut. Oikealle @@ -114,6 +120,7 @@ Poista se käytöstä painamalla Ctrl+Alt+Z. Tuntematon verkkovirhe Vasemmalle Tekstiviesti + Aktivoidaan Wifi Suurenna @@ -123,7 +130,6 @@ Poista se käytöstä painamalla Ctrl+Alt+Z. Pienitehoinen laturi kytketty. Akku ei ehkä lataudu luotettavasti. Lukitse Sovellukset - on muutettu kokoon Aktivointivirhe Yhteyden muodostaminen verkkoon "" epäonnistui: Wifi ei ole käytössä. @@ -131,6 +137,7 @@ Poista se käytöstä painamalla Ctrl+Alt+Z. Aseta taustakuva... Online-tila Suuri kontrasti -tila +, Sisäinen virhe Akku on ladattu kuluttua Ruudun suurentaminen @@ -153,20 +160,24 @@ Palvelimen viesti: Sulje käyttökerta Wifi on käytössä. Alt + haku tai Shift +Akussa on virtaa %. Asetukset... +kuvasta rajataan pois osa Telakointitila +Piilota hylly automaattisesti Yhdistä pyydetyt OTASP epäonnistui Alt + haku Synkronoidaan tiedosto(a) +Valvottu käyttäjä Yli 9 CAPS LOCK on pois päältä Lopeta painamalla kahdesti Control Shift Q. +Akussa on virtaa %, ja laite on kytketty laturiin. : aktivoidaan… +Akku on täynnä. Olet ehkä käyttänyt mobiilitiedonsiirron kiintiösi. -Paikallisesti hallinnoitu käyttäjä -: -Käynnistyspalkin sijainti +Palauta Haku tai Shift Ohje CAPS LOCK on päällä. Peruuta painamalla haku- tai Shift-näppäintä. @@ -178,21 +189,23 @@ Palvelimen viesti: Väärä tunnuslause Lisätietoja Yhdistäminen epäonnistui +Palautetaan vanha tarkkuus, aikaa palautukseen Istunnon loppumiseen on . Sinut kirjataan automaattisesti ulos. Väärä WEP-avain Tunnistamaton tila Vaihda takaisin kieleksi (vaatii uudelleenkäynnistyksen) Tekstiviestit: Google Driven asetukset... -Käynnistysohjelma CAPS LOCK on päällä. Peruuta painamalla Alt + hakupainike tai Shift. Akku vähissä ( %) +Hyväksy . jäljellä Näytön hallinnan jakaminen Hangout-keskustelujen kautta. Ei verkkoa Kirjaudu sisään toiseen tiliin… Pienennä Liity muuhun verkkoon... +: Akku täynnä t min kuluttua Tekstiviesti lähettäjältä Operaattori diff --git a/chromium/ash/strings/ash_strings_fil.xtb b/chromium/ash/strings/ash_strings_fil.xtb index d3c61d5a6ff..3685689d96b 100644 --- a/chromium/ash/strings/ash_strings_fil.xtb +++ b/chromium/ash/strings/ash_strings_fil.xtb @@ -2,22 +2,26 @@ Puno na ang baterya -Awtomatikong itago ang launcher at Katayuan ng portal Button na Overflow +270° Pinapagana ang Bluetooth +Na-rotate ang sa Bluetooth Hindi pinagana ang Bluetooth +Nabigong ma-configure ang network Maaari ka lang magkaroon ng hanggang sa tatlong account sa multiple na pag-sign-in. Paganahin ang Wi-Fi Tingkad +Naka-enable ang pagte-trace sa pagganap Kinakalkula ang oras ng baterya. Network Proxy... Overlay ng Keyboard Remote na tinanggihan ang certificate sa pagpapatunay Google Drive +Ginawang ang resolution ng Nabigo ang pagkuha ng HTTP Tray ng katayuan Nawawala ang PIN @@ -34,39 +38,41 @@ Pindutin ang Shift + Alt upang magpalit. Low-power charger Walang available na impormasyon sa network I-setup ang mobile data +Pamahalaan ang mga device... Tingnan ang account sa mobile Sinisimulan ang cellular na modem... Ibinahagi ang kontrol sa iyong screen kay sa pamamagitan ng Hangouts. -Na-rotate na ang Huwag Paganahin ang Bluetooth Nabigong i-save ang screenshot I-restart upang mag-update I-sign out ang lahat Nakadiskonekta ang VPN Hindi Ginagamit -Ang baterya ay % na puno Malaking mouse cursor -Nabigong patotohanan gamit ang ibinigay na username o password Bisita I-customize ang mga wika at input... + () +Posisyon ng shelf INPUT Nakakabit ang low-power charger Wala sa sakop I-disconnect Tinanggihan ng network ang certificate sa pagpapatunay Mag-sign out +180° Configuration Stop Matuto nang higit pa... Huwag paganahin ang Wi-Fi -Magdagdag ng device... Nagmi-mirror +Nabigo ang pagpapatotoo sa PPP dahil sa hindi tamang username o password Naka-on ang CAPS LOCK Panloob na Display Nagbago ang wika mula "" patungong "" pagkatapos i-sync ang iyong mga setting. Nakakonekta Pasalitang feedback I-on ang Wi-Fi... +90° Naging ang iyong pamamaraan ng pag-input. Pindutin ang Shift + Alt upang magpalit. Pribadong Network @@ -83,11 +89,12 @@ Pindutin ang Shift + Alt upang magpalit. % ang natitira Mga pamamaraan ng pag-input % +Shelf Maaaring hindi mag-charge ang iyong Chromebook habang naka-on ito. Pag-isipang gamitin ang opisyal na charger. Shutdown Volume +I-restart at I-powerwash upang ma-update Nabigo ang paghahanap sa DNS -Ang baterya ay puno at nagcha-charge. Naghahanap ng mga cellular network... Hindi kilala Paghahanap @@ -96,7 +103,6 @@ Pindutin ang Shift + Alt upang magpalit. Impormasyon ng Network Natitirang oras bago maubos ang baterya, Lumabas sa session ng bisita -Ang baterya ay % na puno at nagcha-charge Nakaraang menu Hindi makaka-sign in sa isa pang account. Kanan @@ -114,6 +120,7 @@ Pindutin ang Ctrl+Alt+Z upang huwag paganahin. Hindi alam na error sa network Kaliwa SMS + Ina-activate ang Wi-Fi Maximize @@ -123,7 +130,6 @@ Pindutin ang Ctrl+Alt+Z upang huwag paganahin. Naka-saksak sa isang low-power charger. Maaaring hindi maging tiyak ang pag-charge ng baterya. I-lock Apps -na-resize ang sa Pagkabigo ng pag-activate Nabigong kumonekta sa network na '': Naka-off ang Wi-Fi. @@ -131,6 +137,7 @@ Pindutin ang Ctrl+Alt+Z upang huwag paganahin. Magtakda ng wallpaper... Katayuan online High contrast mode +, Panloob na error Natitirang oras bago ganap na ma-charge ang baterya, Screen magnifier @@ -153,20 +160,24 @@ Mensahe mula sa server: Lumabas sa session Naka-on ang Wi-Fi. Alt+Search o Shift +Ang baterya ay % na puno. Mga Setting... +overscan Dock mode +Awtomatikong itago ang shelf Hiniling ang Koneksyon Nabigo ang OTASP Alt+Search Nagsi-sync ng (na) file +Pinangangasiwaang user 9+ Naka-off ang CAPS LOCK Pindutin ang Control Shift Q nang dalawang beses upang lumabas. +Ang baterya ay % na puno at nagcha-charge. : Ina-activate... +Puno na ang baterya. Maaaring naubos mo na ang mobile data na nakalaan sa iyo. -Lokal na pinapamahalaang user -: -Posisyon ng launcher +I-revert Search or Shift Tulong Naka-on ang CAPS LOCK. @@ -179,22 +190,24 @@ Pindutin ang Search o Shift upang kanselahin. Mahinang passphrase Matuto nang higit pa Nabigo ang pagkonekta +Magre-revert sa lumang resolution sa loob ng Magtatapos ang session na ito sa . Awtomatiko kang masa-sign out. Mahinang WEP key Di-kilalang katayuan Palitan pabalik sa "" (kailangang i-restart) Mga mensaheng SMS: Mga setting ng Google Drive ... -Launcher Naka-on ang CAPS LOCK. Pindutin ang Alt+Search o Shift upang kanselahin. Mahina na ang baterya (%) +Tanggapin : ang natitira Ibinahagi ang kontrol sa iyong screen sa pamamagitan ng Hangouts. Walang network Mag-sign sa isa pang account... Minimize Sumali sa iba... +: o m hanggang mapuno SMS mula kay Carrier diff --git a/chromium/ash/strings/ash_strings_fr.xtb b/chromium/ash/strings/ash_strings_fr.xtb index 05c9f7ce73d..812cc0ff0ec 100644 --- a/chromium/ash/strings/ash_strings_fr.xtb +++ b/chromium/ash/strings/ash_strings_fr.xtb @@ -2,22 +2,26 @@ Batterie pleine -Masquer automatiquement le lanceur d'applications et État du portail Bouton de dépassement de capacité +270° Bluetooth activé +L'écran "" a effectué une rotation de . Bluetooth Bluetooth désactivé +Échec de la configuration du réseau. Vous ne pouvez vous connecter qu'à trois comptes au maximum dans le cadre de la connexion multicompte. Activer le Wi-Fi Luminosité +Suivi des performances activé Calcul de l'autonomie de la batterie en cours… Réseau Proxy… Clavier en superposition Certificat d'authentification rejeté à distance. Google Drive +La résolution de l'écran "" est désormais définie sur . Échec de l'obtention HTTP. Barre d'état Code secret manquant @@ -34,39 +38,41 @@ Appuyez sur Maj + Alt pour en utiliser un autre. Chargeur de faible puissance Aucune information disponible concernant le réseau Configurer les données mobiles +Gérer les appareils… Afficher le compte mobile Initialisation du modem cellulaire en cours… Partage du contrôle de votre écran avec via Hangouts -Rotation de l'écran "" Désactiver le Bluetooth Échec d'enregistrement de la capture d'écran. Redémarrez pour mettre à jour Déconnecter tous les utilisateurs VPN déconnecté Inactif -La batterie est chargée à  %. Grand curseur -Échec de l'authentification à l'aide du nom d'utilisateur ou du mot de passe indiqués. Invité Personnaliser les langues et la saisie... + () +Position de l'étagère ENTRÉE Chargeur de faible puissance connecté Hors de portée Se déconnecter Certificat d'authentification rejeté par le réseau. Déconnexion +180° Configuration en cours Arrêter En savoir plus… Désactiver le réseau Wi-Fi -Ajouter un appareil… Mise en miroir +Échec de l'authentification PPP en raison de la saisie d'un nom d'utilisateur ou d'un mot de passe erronés. Touche VERR MAJ activée Affichage interne La langue utilisée est passée de "" à "" après la synchronisation de vos paramètres. Connecté Commentaires audio Activer le Wi-Fi… +90° Votre mode de saisie a été remplacé par . Appuyez sur Maj + Alt pour en utiliser un autre. Réseau privé @@ -83,11 +89,12 @@ Appuyez sur Maj + Alt pour en utiliser un autre.  % restant(s) Modes de saisie  % +Étagère Votre Chromebook risque de ne pas charger lorsqu'il est allumé. Utilisez plutôt le chargeur officiel. Arrêt. Volume +Redémarrer, puis lancer Powerwash pour mettre à jour le système Échec de la résolution DNS. -La batterie est pleine et en charge. Recherche de réseaux cellulaires en cours… Inconnu Recherche @@ -96,7 +103,6 @@ Appuyez sur Maj + Alt pour en utiliser un autre. Informations réseau Temps restant avant que la batterie ne soit vide : . Fermer la session Invité -La batterie est chargée à  % et en charge. Menu précédent Impossible de se connecter à un autre compte. Vers la droite @@ -114,6 +120,7 @@ Appuyez sur les touches Ctrl+Alt+Z pour les désactiver. Erreur de réseau inconnue. Vers la gauche SMS + Activation du réseau en cours… Wi-Fi Agrandir @@ -123,7 +130,6 @@ Appuyez sur les touches Ctrl+Alt+Z pour les désactiver. L'appareil est branché à un chargeur de faible puissance. Il se peut que la charge ne soit pas fiable. Verrouiller Applications -La résolution de l'écran "" est désormais la suivante : . Échec de l'activation Échec de la connexion au réseau "" : . Le Wi-Fi est désactivé. @@ -131,6 +137,7 @@ Appuyez sur les touches Ctrl+Alt+Z pour les désactiver. Définir un fond d'écran… En ligne Mode Contraste élevé +, Erreur interne. Temps restant avant chargement complet de la batterie : . Loupe @@ -153,20 +160,24 @@ Message du serveur : Quitter la session Le Wi-Fi est activé. Alt + Recherche ou Maj +La batterie est chargée à  %. Paramètres... +Surbalayage Mode Ancrage +Masquer automatiquement l'étagère Connexion demandée Échec de l'opération OTASP Alt + Recherche Synchronisation de fichier(s) en cours… +Utilisateur supervisé Plus de 9 La touche de verrouillage des majuscules est désactivée. Pour quitter, appuyez deux fois sur Ctrl+Maj+Q. +La batterie est chargée à  % et en charge. : activation en cours… +La batterie est pleine. Vous avez peut-être épuisé votre forfait de données mobiles. -Utilisateur géré localement - : -Position du lanceur +Rétablir Recherche ou Maj Aide Le VERROUILLAGE DES MAJUSCULES est activé. @@ -179,22 +190,24 @@ Appuyez sur Search ou Maj pour le désactiver. Mot de passe multiterme erroné En savoir plus Échec de la connexion +Rétablissement de la résolution précédente dans Cette session se terminera dans . Vous serez automatiquement déconnecté. Clé WEP incorrecte État non reconnu Revenir à "" (redémarrage requis) Messages SMS : Paramètres Google Drive… -Lanceur d'applications Le VERROUILLAGE DES MAJUSCULES est activé. Appuyez sur Alt + Recherche ou Maj pour le désactiver. Batterie faible ( %) +Accepter : d'autonomie Partage du contrôle de votre écran via Hangouts Aucun réseau détecté Connecter un autre compte… Réduire Autre réseau… + : Encore  h  min de chargement SMS de Opérateur diff --git a/chromium/ash/strings/ash_strings_gu.xtb b/chromium/ash/strings/ash_strings_gu.xtb index 7e3858cabca..f83fe87680c 100644 --- a/chromium/ash/strings/ash_strings_gu.xtb +++ b/chromium/ash/strings/ash_strings_gu.xtb @@ -2,22 +2,26 @@ બૅટરી પૂર્ણ ચાર્જ -સ્વતઃછુપાવો લૉન્ચર અને પોર્ટલ સ્ટેટ ઓવરફ્લો બટન +270° Bluetooth સક્ષમ છે + ને પર ફેરવવામાં આવ્યું હતું Bluetooth Bluetooth અક્ષમ છે +નેટવર્ક ગોઠવવામાં નિષ્ફળ તમે બહુવિધ સાઇન-ઇનમાં માત્ર ત્રણ એકાઉન્ટ્સ સુધી રાખી શકો છો. Wi-Fi સક્ષમ કરો તેજ +ભજવણી ટ્રેસિંગ સક્ષમ બેટરી સમયની ગણના કરે છે. નેટવર્ક પ્રોક્સી... કીબોર્ડ ઓવરલે પ્રમાણીકરણ પ્રમાણપત્ર રિમોટલી નકારવામાં આવ્યું છે Google ડ્રાઇવ + ને પર બદલવામાં આવ્યું હતું HTTP નિષ્ફળ ગયું સ્થિતિ ટ્રે PIN ખૂટે છે @@ -34,39 +38,41 @@ નિમ્ન-પાવર ચાર્જર કોઈ નેટવર્ક માહિતી ઉપલબ્ધ નથી મોબાઇલ ડેટા સેટ કરો +ઉપકરણોનું સંચાલન કરો... મોબાઇલ એકાઉન્ટ જુઓ સેલ્યુલર મોડેમનો પ્રારંભ કરી રહ્યાં છે... Hangouts દ્વારા સાથે તમારી સ્ક્રીનનું નિયંત્રણ શેર કરવું. - ને ફેરવવામાં આવ્યું છે Bluetooth અક્ષમ કરો સ્ક્રીનશૉટ સાચવવામાં નિષ્ફળ રહ્યું અપડેટ કરવા માટે પુનઃપ્રારંભ કરો બધામાંથી સાઇન આઉટ કરો VPN ડિસ્કનેક્ટ કર્યું છે નિષ્ક્રિય -બેટરી % પૂર્ણ છે મોટું માઉસ કર્સર -આપેલા વપરાશકર્તાનામ અથવા પાસવર્ડ સાથે અધિકૃત કરવામાં નિષ્ફળ રહ્યું અતિથિ ભાષાઓ અને ઇનપુટને કસ્ટમાઇઝ કરો... + () +શેલ્ફ સ્થિતી ઇનપુટ નિમ્ન-પાવર ચાર્જર કનેક્ટ કર્યું છે પહોંચ બહાર ડિસ્કનેક્ટ કરો નેટવર્ક દ્વારા પ્રમાણીકરણ પ્રમાણપત્ર નકારવામાં આવ્યું સાઇન આઉટ +180° કન્ફિગરેશન રોકો વધુ જાણો... Wi-Fi ને અક્ષમ કરો -ઉપકરણ ઉમેરો... પ્રતિબિંબત થઈ રહ્યું છે +ખોટા વપરાશકર્તાનામ અથવા પાસવર્ડને કારણે PPP પ્રમાણીકરણ નિષ્ફળ થયું CAPS LOCK ચાલુ છે આંતરિક પ્રદર્શન તમારી સેટિંગ્સ સમન્વયિત કર્યા પછી ભાષા "" થી "" માં બદલાઈ ગઈ છે. કનેક્ટેડ બોલાયેલ પ્રતિસાદ Wi-Fi ચાલુ કરો... +90° તમારી ઇનપુટ પદ્ધતિ માં બદલાઇ ગયેલ છે. સ્વિચ કરવા માટે Shift + Alt દબાવો. ખાનગી નેટવર્ક @@ -83,11 +89,12 @@ % બાકી ઇનપુટ પદ્ધતિઓ % +શેલ્ફ જ્યારે તમારી Chromebook ચાલુ હોય ત્યારે તેને ચાર્જ કરી શકાશે નહીં. અધિકૃત ચાર્જરનો ઉપયોગ કરવાનું વિચારો. બંધ કરો વૉલ્યૂમ +અપડેટ કરવા માટે પુનઃપ્રારંભ કરો અને પાવરવૉશ કરો DNS લુકઅપ નિષ્ફળ ગયું -બેટરી સંપૂર્ણ છે અને ચાર્જ થઈ રહી છે. સેલ્યુલર નેટવર્ક્સ માટે શોધી રહ્યું છે... અજ્ઞાત શોધ @@ -96,7 +103,6 @@ નેટવર્ક માહિતી બેટરી ખાલી થવામાં બાકી સમય, અતિથિથી બહાર નીકળો -બેટરી % પૂર્ણ અને ચાર્જ થઈ રહી છે પહેલાનું મેનૂ બીજા એકાઉન્ટમાં સાઇન ઇન કરી શકતા નથી. જમણે @@ -113,6 +119,7 @@ અજ્ઞાત નેટવર્ક ભૂલ ડાબું SMS + ને સક્રિય કરી રહ્યું છે Wi-Fi મોટું કરો @@ -122,7 +129,6 @@ નિમ્ન-પાવર ચાર્જરમાં પ્લગ કરેલું છે. બૅટરી ચાર્જિંગ વિશ્વસનીય હશે નહીં. લૉક એપ્લિકેશન્સ - નું કદ માં બદલવામાં આવ્યું છે સક્રિયતા નિષ્ફળ નેટવર્ક '' થી કનેક્ટ કરવામાં નિષ્ફળ: Wi-Fi બંધ છે. @@ -130,6 +136,7 @@ વૉલપેપર સેટ કરો... ઓનલાઇન સ્ટેટ ઉચ્ચ કોન્ટ્રાસ્ટ મોડ +, આંતરિક ભૂલ બેટરી સંપૂર્ણપણે ચાર્જ થવામાં બાકી સમય, સ્ક્રીન બૃહદદર્શક @@ -152,20 +159,24 @@ સત્રમાંથી બહાર નીકળો Wi-Fi ચાલુ છે. Alt+Search અથવા Shift +બેટરી % પૂર્ણ છે. સેટિંગ્સ... +ઓવરસ્કૅન ડૉક મોડ +સ્વતઃછુપાવો શેલ્ફ કનેક્ટ કરવાની વિનંતી કરી છે OTASP નિષ્ફળ Alt+Search ફાઇલને સમન્વયિત કરી રહ્યું છે +નિરીક્ષણ કરેલ વપરાશકર્તા 9+ CAPS LOCK બંધ છે છોડવા માટે બે વાર Control Shift Q દબાવો. +બેટરી % પૂર્ણ અને ચાર્જ થઈ રહી છે. : સક્રિય કરી રહ્યું છે... +બેટરી સંપૂર્ણ છે. તમે તમારા મોબાઇલ ડેટા ભથ્થાનો ઉપયોગ કરી લીધો હશે. -સ્થાનિક રીતે સંચાલિત વપરાશકર્તા -: -લૉન્ચર સ્થિતિ +પાછા ફરો Search અથવા Shift સહાય CAPS LOCK ચાલુ છે. @@ -178,22 +189,24 @@ ખરાબ પાસફ્રેઝ વધુ જાણો કનેક્ટ કરવું નિષ્ફળ +જૂના રિઝોલ્યુશન પર પાછા ફરી રહ્યાં છે આ સત્ર માં સમાપ્ત થશે. તમને આપમેળે સાઇન આઉટ કરવામાં આવશે. ખરાબ WEP કી અપરિચિત સ્થિતિ "" પર પાછાં જાઓ (પુનર્પ્રારંભની જરૂર છે) SMS સંદેશા: Google ડ્રાઇવ સેટિંગ્સ... -લૉન્ચર CAPS LOCK ચાલુ છે. રદ કરવા માટે Alt+Search અથવા Shift દબાવો. બૅટરી ઓછી (%) +સ્વીકારો : બાકી Hangouts દ્વારા તમારી સ્ક્રીનનું નિયંત્રણ શેર કરી રહ્યું છે. નેટવર્ક નથી બીજા એકાઉન્ટમાં સાઇન ઇન કરો... નાનું કરો અન્યથી જોડાઓ... +: મિ સુધીમાં પૂર્ણ તરફથી SMS વાહક diff --git a/chromium/ash/strings/ash_strings_hi.xtb b/chromium/ash/strings/ash_strings_hi.xtb index d12758fd96d..7882991fab5 100644 --- a/chromium/ash/strings/ash_strings_hi.xtb +++ b/chromium/ash/strings/ash_strings_hi.xtb @@ -2,22 +2,26 @@ बैटरी पूर्ण -लॉन्चर को स्वत: छिपाएं और पोर्टल स्थिति ओवरफ़्लो बटन +270° Bluetooth सक्षम किया गया + को पर घुमाया गया Bluetooth Bluetooth अक्षम किया गया +नेटवर्क कॉन्फ़िगर करने में विफल एकाधिक साइन-इन में आप तीन तक खाते रख सकते हैं. Wi-Fi सक्षम करें चमक +निष्पादन ट्रेसिंग सक्षम है बैटरी समय की गणना की जा रही है. नेटवर्क प्रॉक्सी... कीबोर्ड ओवरले प्रमाणीकरण प्रमाणपत्र को दूरस्थ रूप से अस्वीकार किया गया Google डिस्क + रिज़ॉल्यूशन को में बदल दिया गया HTTP विफल हुआ स्थिति ट्रे पिन गुम @@ -34,39 +38,41 @@ कम-शक्ति वाला चार्जर कोई नेटवर्क जानकारी उपलब्ध नहीं मोबाइल डेटा सेट करें +उपकरणों को प्रबंधित करें... मोबाइल खाते देखें सेल्युलर मॉडम प्रारंभ हो रहा है... Hangout के माध्यम से अपनी स्क्रीन के साथ साझा करना. - को घुमा दिया गया है Bluetooth अक्षम करें स्क्रीनशॉट सहेजने में विफल अपडेट करने के लिए पुनरारंभ करें -सभी साइन आउट करें +सभी प्रस्थान करें VPN डिस्कनेक्ट है -निष्क्रिय -बैटरी % भर गई है +प्रयोग में नहीं बड़ा माउस कर्सर -प्रदान किए गए उपयोगकर्तानाम या पासवर्ड से प्रमाणीकृत करने में विफ़ल रहा अतिथि भाषाएं और इनपुट कस्टमाइज़ करें... + () +शेल्फ़ की स्थिति इनपुट कम-शक्ति वाला चार्जर सीमा से बाहर डिस्कनेक्ट करें नेटवर्क द्वारा प्रमाणीकरण प्रमाणपत्र अस्वीकार किया गया -साइन आउट करें +प्रस्थान करें +180° कॉन्फ़िगरेशन रोकें और जानें... Wi-Fi अक्षम करें -डिवाइस जोड़ें... मिरर करना +किसी गलत उपयोगकर्ता नाम या पासवर्ड के कारण PPP प्रमाणीकरण विफल रहा CAPS LOCK चालू है आंतरिक डिस्प्ले आपकी सेटिंग समन्वयित करने के बाद भाषा को "" से "" में बदल दिया गया है. कनेक्टेड बोला जाने वाला फ़ीडबैक Wi-Fi चालू करें... +90° आपकी इनपुट विधि में बदल गई है. स्विच करने के लिए Shift + Alt दबाएं. निजी नेटवर्क @@ -83,11 +89,12 @@ % शेष है इनपुट पद्धतियां % +शेल्फ़ हो सकता है चालू होने पर आपका Chromebook चार्ज न हो. आधिकारिक चार्जर उपयोग करें. बंद करें मात्रा +अपडेट करने के लिए पुनः प्रारंभ करें या पावरवॉश करें DNS लुकअप विफल -बैटरी भर गई है और चार्ज हो रही है. सेलुलर नेटवर्क खोज रहा है... अज्ञात खोज @@ -96,9 +103,8 @@ नेटवर्क जानकारी बैटरी के खाली होने में शेष समय, अतिथि सत्र से बाहर निकलें -बैटरी % भर गई है और चार्ज हो रही है पिछला मेनू -अन्य खाते में साइन इन नहीं कर सकते. +अन्य खाते में प्रवेश नहीं कर सकते. दाएं प्रमाणीकरण प्रमाणपत्र को स्थानीय रूप से अस्वीकार कर दिया गया मोबाइल ... @@ -114,6 +120,7 @@ अज्ञात नेटवर्क त्रुटि बाएं SMS + सक्रिय हो रहा है Wi-Fi बड़ा करें @@ -123,7 +130,6 @@ कम-शक्ति वाले चार्जर में प्लग इन करें. बैटरी चार्ज करना संभवत: विश्वसनीय नहीं होगा. लॉक करें एप्लिकेशन - का आकार बदलकर कर दिया गया है सक्रियण विफलता नेटवर्क से कनेक्ट करने में विफल '': Wi-Fi बंद है. @@ -131,6 +137,7 @@ वॉलपेपर सेट करें... ऑनलाइन स्थिति उच्च कंट्रास्ट मोड +, आंतरिक त्रुटि बैटरी के पूरी तरह से चार्ज होने में शेष समय, स्क्रीन आवर्द्धक @@ -153,20 +160,24 @@ सत्र से बाहर निकलें Wi-Fi चालू है. Alt+Search या Shift +बैटरी % भरी हुई है. सेटिंग... +ओवरस्कैन डॉक मोड +शेल्फ़ को स्वत: छिपाएं कनेक्ट करने का अनुरोध किया गया OTASP विफल Alt+Search फ़ाइल/फ़ाइलें समन्वयित हो रही है/हो रही हैं +पर्यवेक्षित उपयोगकर्ता 9 से अधिक CAPS LOCK बंद है छोड़ने के लिए Control Shift Q दो बार दबाएं. +बैटरी % भरी हुई है और चार्ज हो रही है. : सक्रिय हो रहा है... +बैटरी भरी हुई है. संभवत: आपने अपने मोबाइल डेटा सीमा का पूर्ण उपयोग कर लिया है. -स्थानीय रूप से प्रबंधित उपयोगकर्ता -: -लॉन्चर स्थिति +वापस लाएं Search या Shift सहायता CAPS LOCK चालू है. @@ -179,22 +190,24 @@ ख़राब पासफ़्रेज़ अधिक जानें कनेक्ट करना विफल -यह सत्र में समाप्त हो जाएगा. आपको स्वचालित रूप से साइन आउट कर दिया जाएगा. + में पुराने रिज़ॉल्यूशन में वापस लौट रहा है +यह सत्र में समाप्त हो जाएगा. आपको स्वचालित रूप से प्रस्थान कर दिया जाएगा. ख़राब WEP कुंजी अपरिचित अवस्था "" में पुन: बदलें (पुनः आरंभ करने की आवश्यकता है) SMS संदेश: Google डिस्क सेटिंग... -लॉन्चर CAPS LOCK चालू है. रद्द करने के लिए Alt+Search या Shift दबाएं. बैटरी कम (%) +स्वीकार करें : शेष Hangout के माध्यम से अपनी स्क्रीन साझा करना. नेटवर्क नहीं है -अन्य खाते में साइन इन करें... +अन्य खाते में प्रवेश करें... छोटा करें अन्य में शामिल हों... +: पूरी तरह से चार्ज होने में घं मि शेष से SMS कैरियर diff --git a/chromium/ash/strings/ash_strings_hr.xtb b/chromium/ash/strings/ash_strings_hr.xtb index b16f82def36..5e3fbd439c8 100644 --- a/chromium/ash/strings/ash_strings_hr.xtb +++ b/chromium/ash/strings/ash_strings_hr.xtb @@ -2,22 +2,26 @@ Baterija je puna -Automatski sakrij pokretač i Stanje mreže: Portal Gumb padajućeg izbornika +270° Bluetooth omogućen +Zaslon rotiran je za Bluetooth Bluetooth onemogućen +Konfiguriranje mreže nije uspjelo Možete imati najviše tri računa u višestrukoj prijavi. Omogući Wi-Fi Svjetlina +Omogućeno je praćenje izvedbe Izračun vremena baterije. Mreža Proxy... Preklapanje tipkovnice Certifikat za autentifikaciju odbijen je daljinski Google disk +Razlučivost zaslona promijenjena je na HTTP GET neuspješan Ladica statusa Nedostaje PIN @@ -34,39 +38,41 @@ Pritisnite Shift + Alt za promjenu. Punjač male snage Informacije o mreži nisu dostupne Postavi mobilne podatke +Upravljanje uređajima... Prikaz mobilnog računa Inicijaliziranje modema mobilne mreže... Dijelite kontrolu nad zaslonom s korisnikom putem značajke Hangouts. -Prikaz zakrenut je Onemogući Bluetooth Snimka zaslona nije spremljena Ponovo pokrenite za ažuriranje Odjavi sve Veza s VPN-om prekinuta U mirovanju -Baterija je % puna Veliki pokazivač miša -Autentifikacija s priloženim korisničkim imenom i zaporkom nije uspjela Gost Prilagodi jezike i unos... + () +Položaj police ULAZ Priključen je punjač male snage Izvan raspona Prekini vezu Mreža je odbila certifikat za autentifikaciju Odjava +180° Konfiguracija Zaustavi Saznajte više... Onemogući Wi-Fi -Dodajte uređaj... Zrcaljenje +PPP autentifikacija nije uspjela zbog netočnog korisničkog imena ili zaporke Opcija CAPS LOCK uključena Unutarnji zaslon Jezik je promijenjen iz: "" u: "" nakon sinkronizacije vaših postavki. Spojeno Govorne povratne informacije Uključite Wi-Fi... +90° Vaš je način unosa promijenjen u . Pritisnite Shift + Alt za promjenu. Privatna mreža @@ -83,11 +89,12 @@ Pritisnite Shift + Alt za promjenu. Preostalo % Načini unosa % +Polica Chromebook se možda neće puniti dok je uključen. Savjetujemo upotrebu službenog punjača. Isključivanje Glasnoća +Ponovo pokrenite sustav i Powerwash za ažuriranje Nije uspjelo pretraživanje DNS poslužitelja -Baterija je puna i puni se. Traženje mobilnih mreža... Nepoznato Pretraživanje @@ -96,7 +103,6 @@ Pritisnite Shift + Alt za promjenu. Podaci o mreži Baterija će se isprazniti za Izlazak iz sesije gosta -Baterija je % puna i puni se Prethodni izbornik Prijava na još jedan račun nije moguća. Udesno @@ -114,6 +120,7 @@ Pritisnite Ctrl + Alt + Z da biste ih onemogućili. Nepoznata mrežna pogreška Ulijevo SMS + Aktiviranje mreže Wi-Fi Maksimiziraj @@ -123,7 +130,6 @@ Pritisnite Ctrl + Alt + Z da biste ih onemogućili. Uređaj je priključen na punjač male snage. Punjenje baterije možda nije pouzdano. Zaključaj Apps -Veličina prikaza promijenjena je na Neuspjela aktivacija Neuspješno povezivanje s mrežom "": Wi-Fi je isključen. @@ -131,6 +137,7 @@ Pritisnite Ctrl + Alt + Z da biste ih onemogućili. Postavljanje pozadinske slike... Stanje na mreži Način visokog kontrasta +, Interna pogreška Baterija će se napuniti za Povećalo @@ -153,20 +160,24 @@ Poruka poslužitelja: Izlazak iz sesije Wi-Fi je uključen. Alt + Pretraživanje ili Shift +Baterija je % puna. Postavke... +rubno područje zaslona Način rada na priključnoj stanici +Automatski sakrij policu Podnesen je zahtjev za povezivanje OTASP nije uspio Alt + Pretraživanje Sinkroniziranje datoteka () +Nadzirani korisnik više od 9 Tipka CAPS LOCK isključena Pritisnite tipke Control, Shift i Q dvaput da biste odustali. +Baterija je % puna i puni se. : aktiviranje... +Baterija je puna. Možda ste potrošili dopuštenu količinu mobilnih podataka. -Lokalno upravljani korisnik -: -Položaj pokretača +Vrati Pretraživanje ili Shift Pomoć Uključena je opcija CAPS LOCK. @@ -179,22 +190,24 @@ Pritisnite tipke Pretraživanje ili Shift da biste ju isključili. Pogrešna zaporka Saznajte više Neuspjelo povezivanje +Vraćanje na staru razlučivost za Sesija će završiti za . Bit ćete automatski odjavljeni. Neispravan WEP ključ Neprepoznato stanje Vratite na "" (zahtijeva ponovno pokretanje) SMS poruke: Postavke Google diska... -Pokretač Uključena je opcija CAPS LOCK. Pritisnite tipke Alt + Pretraživanje ili Shift da biste ju isključili. Baterija je skoro prazna (%) +Prihvati Preostalo : Dijelite kontrolu nad zaslonom putem značajke Hangouts. Nema mreže Prijavite se na još jedan račun... Minimiziraj Pridruži se drugoj... +: h min do završetka punjenja SMS šalje Davatelj usluge diff --git a/chromium/ash/strings/ash_strings_hu.xtb b/chromium/ash/strings/ash_strings_hu.xtb index 560b64d7f45..376fef9e5ad 100644 --- a/chromium/ash/strings/ash_strings_hu.xtb +++ b/chromium/ash/strings/ash_strings_hu.xtb @@ -2,22 +2,26 @@ Akkumulátor feltöltve -Indító automatikus elrejtése és Portál állapota Túlcsordulás gomb +270° Bluetooth engedélyezve + elfordult erre: Bluetooth Bluetooth letiltva +Nem sikerült konfigurálni a hálózatot Legfeljebb három fiókot használhat a többfiókos bejelentkezés során. Wi-Fi engedélyezése Fényerő +Teljesítménykövetés engedélyezve Akkumulátor-időtartam kiszámítása. Hálózat Proxy... Billentyűzetkiosztás A hitelesítési tanúsítvány távolról elutasítva Google Drive + felbontása erre módosult: A HTTP-lekérés nem sikerült Állapottálca Hiányzó PIN kód @@ -34,39 +38,41 @@ A váltáshoz nyomja meg a Shift + Alt billentyűkódot. Kis teljesítményű töltő Nem áll rendelkezésre hálózati információ Mobiladatok beállítása +Eszközök kezelése... Mobil fiók megtekintése Mobilmodem inicializálása... segéddel való képernyőmegosztás vezérlése a Hangoutson keresztül. - elforgatva Bluetooth letiltása Nem sikerült menteni a képernyőképet. Indítsa újra a frissítéshez Összes kijelentkeztetése A VPN nincs csatlakoztatva Tétlen -Az akkumulátor töltöttsége: % Nagy egérmutató -A hitelesítés nem sikerült a megadott felhasználónévvel vagy jelszóval Vendég Nyelvek és beviteli módok személyre szabása... + () +Polc pozíciója BEMENET Kis teljesítményű töltő csatlakoztatva Tartományon kívül Kapcsolat bontása A hálózat elutasította a hitelesítési tanúsítványt Kijelentkezés +180° Konfiguráció Leállítás További információ... Wi-Fi letiltása -Eszköz hozzáadása... Tükrözés +Nem sikerült a PPP-hitelesítés helytelen felhasználónév vagy jelszó miatt A CAPS LOCK be van kapcsolva Belső kijelző A beállítások szinkronizálását követően "" nyelvről "" nyelvre változott a nyelvi beállítás. Kapcsolódva Hangos visszajelzés Wi-Fi bekapcsolása... +90° A beviteli mód a következőre változott: . A váltáshoz nyomja meg a Shift + Alt billentyűkódot. Magánhálózat @@ -83,11 +89,12 @@ A váltáshoz nyomja meg a Shift + Alt billentyűkódot. % maradt Beviteli módszerek % +Polc Előfordulhat, hogy a Chromebook nem töltődik, amíg be van kapcsolva. Vegye fontolóra a gyári töltő használatát. Kikapcsolás Hangerő +Indítsa újra, és végezze el a Powerwash folyamatot a frissítéshez A DNS keresése sikertelen -Az akkumulátor teljesen fel van töltve, és töltődik. Mobilhálózatok keresése... Ismeretlen Keresés @@ -96,7 +103,6 @@ A váltáshoz nyomja meg a Shift + Alt billentyűkódot. Hálózatinformáció Akkumulátor lemerüléséig hátralévő idő: Kilépés a vendég munkamenetből -Az akkumulátor töltöttsége %, és töltődik Előző menü Nem lehet bejelentkezni még egy fiókba. Jobbra @@ -114,6 +120,7 @@ A tiltásához nyomja le a Ctrl+Alt+Z billentyűkombinációt. Ismeretlen hálózati hiba Balra SMS + aktiválása Wi-Fi Teljes méret @@ -123,7 +130,6 @@ A tiltásához nyomja le a Ctrl+Alt+Z billentyűkombinációt. Kis teljesítményű töltőt csatlakoztatott. Az akkumulátor töltése nem megbízható. Zárolás Programok - átméretezve: Aktiválási hiba Nem sikerült csatlakozni a(z) hálózathoz: Wi-Fi kikapcsolva. @@ -131,6 +137,7 @@ A tiltásához nyomja le a Ctrl+Alt+Z billentyűkombinációt. Háttérkép beállítása... Online Nagy kontrasztú mód +, Belső hiba Akkumulátor teljes feltöltéséig hátralévő idő: Képernyőnagyító @@ -153,20 +160,24 @@ Szerverüzenet: Kilépés a munkamenetből Wi-Fi bekapcsolva. Alt + Keresés vagy Shift +Az akkumulátor töltöttsége: %. Beállítások... +túlpásztázás Dokkolt mód +Polc automatikus elrejtése Csatlakozás kérelmezve OTASP sikertelen Alt + Keresés fájl szinkronizálása +Felügyelt felhasználó 9+ A CAPS LOCK ki van kapcsolva A kilépéshez nyomja meg kétszer a Ctrl Shift Q billentyűkódot. +Az akkumulátor töltöttsége %, és töltődik. : aktiválás... +Az akkumulátor feltöltve. Elképzelhető, hogy mobil adatforgalmi kerete elfogyott. -Helyileg felügyelt felhasználó -: -Pozíció az Indítóban +Visszavonás Keresés vagy Shift Súgó A CAPS LOCK be van kapcsolva. @@ -179,22 +190,24 @@ Kikapcsolásához nyomja meg a Keresés vagy a Shift billentyűt. Rossz összetett jelszó További információ Csatlakozás sikertelen +Visszaállítás a régi felbontásra mp múlva A munkamenet múlva véget ér. Ekkor a rendszer automatikusan kijelentkezteti. Hibás WEP kulcs Azonosítatlan állam Visszatérés ehhez: "" (újraindítás szükséges) SMS-üzenetek: A Google Drive beállításai... -Indító A CAPS LOCK be van kapcsolva. Kikapcsolásához nyomja meg az Alt + Keresés vagy a Shift billentyűt. Alacsony akkumulátortöltöttség (%) +Elfogadás : van hátra Képernyő megosztásának vezérlése a Hangoutson keresztül. Nincs hálózat Bejelentkezés másik fiókba... Kicsinyítés Csatlakozás másik hálózathoz... +: ó p a teljes feltöltésig SMS innen: Szállító diff --git a/chromium/ash/strings/ash_strings_id.xtb b/chromium/ash/strings/ash_strings_id.xtb index 3007b2f92bd..5d3919c2e6a 100644 --- a/chromium/ash/strings/ash_strings_id.xtb +++ b/chromium/ash/strings/ash_strings_id.xtb @@ -2,22 +2,26 @@ Baterai penuh -Sembunyikan peluncur secara otomatis dan Status portal Tombol Luapan +270° Bluetooth diaktifkan + diputar ke Bluetooth Bluetooth dinonaktifkan +Gagal mengonfigurasi jaringan Anda hanya dapat memiliki paling banyak tiga akun dalam fitur masuk multipel. Aktifkan Wi-Fi Kecerahan +Kinerja pelacakan aktif Menghitung masa pakai baterai. Jaringan Proxy... Hamparan Keyboard Sertifikat atutentikasi ditolak dari jarak jauh Google Drive + resolusi diubah menjadi HTTP gagal Baki status PIN hilang @@ -34,39 +38,41 @@ Tekan Shift + Alt untuk beralih. Pengisi daya rendah Tidak tersedia informasi jaringan Siapkan data seluler +Mengelola perangkat... Lihat akun seluler Memulai modem seluler... Berbagi kontrol layar Anda dengan melalui Hangouts. - telah diputar Nonaktifkan Bluetooth Gagal menyimpan tangkapan layar Mulai ulang untuk memperbarui Keluarkan semua pengguna VPN terputus Menganggur -Baterai terisi % Kursor mouse besar -Gagal mengautentikasi dengan nama pengguna atau sandi yang diberikan Tamu Sesuaikan bahasa dan masukan... + () +Posisi rak MASUKAN Pengisi daya rendah terpasang Di luar jangkauan Putuskan Sertifikat autentikasi ditolak oleh jaringan Keluar +180° Konfigurasi Berhenti Pelajari selengkapnya... Nonaktifkan Wi-Fi -Tambahkan perangkat... Mencerminkan +Autentifikasi PDB gagal karena nama pengguna dan sandi salah CAPS LOCK aktif Tampilan Internal Bahasa telah diubah dari "" menjadi "" setelah menyinkronkan setelan Anda. Tersambung Masukan lisan Aktifkan Wi-Fi... +90° Metode masukan Anda telah berubah menjadi . Tekan Shift + Alt untuk beralih. Jaringan Pribadi @@ -83,11 +89,12 @@ Tekan Shift + Alt untuk beralih. Sisa % Metode masukan % +Rak Chromebook Anda mungkin tidak mengisi daya saat sedang menyala. Pertimbangkan untuk menggunakan pengisi daya resmi. Mati Volume +Mulai Ulang dan Powerwash untuk memperbarui Pencarian DNS gagal -Baterai sudah penuh dan masih mengisi. Menelusuri jaringan seluler... Tidak diketahui Penelusuran @@ -96,7 +103,6 @@ Tekan Shift + Alt untuk beralih. Info Jaringan Waktu yang tersisa hingga baterai kosong, Keluar dari sesi tamu -Baterai sudah terisi % dan masih mengisi Menu sebelumnya Tidak dapat masuk ke akun lain. Kanan @@ -114,6 +120,7 @@ Tekan Ctrl+Alt+Z untuk menonaktifkan. Kesalahan jaringan tidak dikenal Kiri SMS + Mengaktifkan Wi-Fi Perbesar @@ -123,7 +130,6 @@ Tekan Ctrl+Alt+Z untuk menonaktifkan. Dipasang ke pengisi daya rendah. Pengisian daya baterai mungkin tidak dapat diandalkan. Kunci Apl -Ukuran telah diubah ke Kegagalan aktivasi Gagal menyambung ke jaringan '': Wi-Fi dinonaktifkan. @@ -131,6 +137,7 @@ Tekan Ctrl+Alt+Z untuk menonaktifkan. Setel wallpaper... Status online Mode kontras tinggi +, Kesalahan internal Waktu yang tersisa hingga baterai terisi penuh, Kaca pembesar layar @@ -153,20 +160,24 @@ Pesan server: Keluar dari sesi Wi-Fi diaktifkan. Alt+Telusuri atau Shift +Baterai terisi %. Setelan... +pemindaian berlebih Mode dok +Sembunyikan otomatis rak Sambungan Diminta OTASP gagal Alt+Telusuri Menyinkronkan file +Pengguna yang diawasi 9+ CAPS LOCK tidak aktif Tekan Control Shift Q dua kali untuk keluar. +Baterai sudah terisi % dan masih mengisi. : Mengaktifkan... +Baterai penuh. Anda mungkin telah menghabiskan jatah data seluler. -Pengguna yang dikelola secara lokal -: -Posisi peluncur +Kembalikan Telusuri atau Shift Bantuan CAPS LOCK aktif. @@ -179,22 +190,24 @@ Tekan Telusuri atau Shift untuk membatalkan. Frasa sandi yang buruk Pelajari lebih lanjut Gagal menyambung +Mengembalikan ke resolusi lama dalam Sesi ini akan berakhir dalam . Anda akan otomatis dikeluarkan. Kunci WEP yang buruk Keadaan yang tidak dikenal Ubah kembali ke "" (harus dinyalakan ulang) Pesan SMS: Setelan Google Drive... -Peluncur CAPS LOCK aktif. Tekan Alt+Telusuri atau Shift untuk membatalkan. Baterai lemah (%) +Terima Sisa : Berbagi kontrol layar Anda melalui Hangouts. Tidak ada jaringan Masuk ke akun lain... Perkecil Bergabung dengan lainnya... +: j m sampai penuh SMS dari Operator diff --git a/chromium/ash/strings/ash_strings_it.xtb b/chromium/ash/strings/ash_strings_it.xtb index faa8420e5ff..5ba591b6e55 100644 --- a/chromium/ash/strings/ash_strings_it.xtb +++ b/chromium/ash/strings/ash_strings_it.xtb @@ -2,22 +2,26 @@ Batteria carica -Nascondi automaticamente Avvio applicazioni e Stato portale Pulsante Overflow +270° Bluetooth attivo + è stato ruotato a Bluetooth Bluetooth disattivo +Impossibile configurare la rete Puoi avere massimo tre account per l'accesso simultaneo. Attiva Wi-Fi Luminosità +Rilevamento del rendimento attivo Calcolo della durata della batteria. Rete Proxy... Overlay tastiera Certificato di autenticazione rifiutato da remoto Google Drive +La risoluzione di è stata modificata in: Recupero HTTP non riuscito Barra di stato PIN mancante @@ -34,39 +38,41 @@ Premi Maiusc+Alt per cambiare metodo. Caricabatterie a basso consumo Nessuna informazione di rete disponibile Configura dati mobili +Gestisci dispositivi... Visualizza account per cellulari Inizializzazione del modem per cellulari... Condivisione del controllo dello schermo con tramite Hangouts. - ruotato Disattiva Bluetooth Salvataggio dello screenshot non riuscito Riavvia per aggiornare Disconnetti tutti VPN scollegata In pausa -La batteria è carica al % Puntatore del mouse grande -Autenticazione non riuscita con il nome utente o la password forniti Ospite Personalizza lingue e immissione... + () +Posizione shelf INGRESSO Caricabatterie a basso consumo collegato Fuori dal raggio d'azione Disconnetti Certificato di autenticazione rifiutato dalla rete Esci +180° Configurazione Interrompi Ulteriori informazioni... Disattiva Wi-Fi -Aggiungi dispositivo... Mirroring +Autenticazione PPP non riuscita a causa di un nome utente o una password sbagliati BLOC MAIUSC è attivo Display interno La lingua è stata modificata da "" a "" dopo la sincronizzazione delle impostazioni. Connessa Feedback vocale Attiva Wi-Fi... +90° Il metodo di immissione è stato cambiato in . Premi Maiusc+Alt per cambiare metodo. Rete privata @@ -83,11 +89,12 @@ Premi Maiusc+Alt per cambiare metodo. % rimanente Metodi di immissione % +Shelf Il Chromebook potrebbe non ricaricarsi mentre è accesso. Prova a utilizzare il caricabatterie ufficiale. Chiusura Volume +Riavvia ed esegui Powerwash per aggiornare Ricerca DNS non riuscita -La batteria è carica e in ricarica. Ricerca reti cellulari... Sconosciuto Ricerca @@ -96,7 +103,6 @@ Premi Maiusc+Alt per cambiare metodo. Informazioni di rete Tempo rimanente all'esaurimento della batteria: Esci da sessione Ospite -La batteria è carica al % e in ricarica Menu precedente Impossibile accedere a un altro account. Destra @@ -114,6 +120,7 @@ Premi Ctrl+Alt+Z per disattivarlo. Errore di rete sconosciuto Sinistra SMS + Attivazione di Wi-Fi Ingrandisci @@ -123,7 +130,6 @@ Premi Ctrl+Alt+Z per disattivarlo. Collegato a un caricabatterie a basso consumo. La carica della batteria potrebbe non essere affidabile. Blocca Applicazioni - è stato ridimensionato a Errore di attivazione Connessione alla rete "" non riuscita: Wi-Fi non attivo. @@ -131,6 +137,7 @@ Premi Ctrl+Alt+Z per disattivarlo. Imposta sfondo... Stato online Modalità ad alto contrasto +, Errore interno Tempo rimanente al caricamento completo della batteria: Ingrandimento dello schermo @@ -153,20 +160,24 @@ Messaggio del server: Esci da sessione Wi-Fi attivo. Alt+tasto per la ricerca o Maiusc +Percentuale di caricamento della batteria: %. Impostazioni... +overscan Modalità dock +Nascondi automaticamente shelf Connessione richiesta OTASP non riuscito Alt+tasto per la ricerca Sincronizzazione di file in corso +Utente controllato Più di 9 Funzione BLOC MAIUSC non attiva Per uscire premi due volte Ctrl+Maiusc+Q. +Percentuale di caricamento batteria: %. La batteria è in carica. : attivazione in corso... +La batteria è carica. Potresti avere esaurito la tua quota di dati mobili. -Utente gestito localmente -: -Posizione Avvio applicazioni +Ripristina Tasto per la ricerca o Maiusc Guida La funzione BLOC MAIUSC è attiva. @@ -179,22 +190,24 @@ Premi il tasto per la ricerca o Maiusc per annullare. Passphrase non valida Ulteriori informazioni Connessione non riuscita +Ripristino della risoluzione precedente tra Questa sessione terminerà fra . Verrà eseguita automaticamente la disconnessione. Chiave WEP non valida Stato non riconosciuto Torna a "" (è necessario riavviare) Messaggi SMS: Impostazioni Google Drive... -Avvio applicazioni La funzione BLOC MAIUSC è attiva. Premi Alt+tasto per la ricerca o Maiusc per annullare. Batteria in esaurimento (%) +Accetto : rimanenti Condivisione del controllo dello schermo tramite Hangouts. Nessuna rete Accedi a un altro account... Riduci a icona Connetti a un'altra... +: h e m per completare la ricarica SMS da Gestore diff --git a/chromium/ash/strings/ash_strings_iw.xtb b/chromium/ash/strings/ash_strings_iw.xtb index a71f1be87f8..870abf095e2 100644 --- a/chromium/ash/strings/ash_strings_iw.xtb +++ b/chromium/ash/strings/ash_strings_iw.xtb @@ -2,72 +2,78 @@ סוללה מלאה -הסתר אוטומטית את המפעיל ו- מצב הפורטל לחצן גלישה -Bluetooth מופעל +270° +‏Bluetooth מופעל +בוצע סיבוב של אל Bluetooth -Bluetooth מושבת +‏Bluetooth מושבת +כשל בהגדרת התצורה של הרשת ניתן לכלול עד שלושה חשבונות בלבד בכניסה עם מספר חשבונות. -הפעל Wi-Fi +‏הפעל Wi-Fi בהירות +מעקב אחר הביצועים מופעל מחשב זמן סוללה רשת -שרת proxy... +‏שרת proxy... שכבת על של מקלדת אישור האימות נדחה מרחוק Google Drive -פעולת get של HTTP נכשלה +הרזולוציה של שונתה ל- +‏פעולת get של HTTP נכשלה מגש סטטוס -חסר PIN +‏חסר PIN : מתחבר... שגיאת חיבור רשת -הפעל Bluetooth +‏הפעל Bluetooth מרחיב את המסך אל סלולארי -כתובת IP +‏כתובת IP ההפעלה נכשלה הגדרות אודיו -שיטת הקלט שלך השתנתה ל-‏*(צד שלישי)‎. +‏שיטת הקלט שלך השתנתה ל-‏*(צד שלישי)‎. הקש Shift + Alt כדי להחליף. מטען בעל מתח נמוך אין מידע רשת זמין הגדר נתונים לנייד +נהל מכשירים... הצג את חשבון הנייד מאתחל מודם סלולרי... -משתף את השליטה במסך שלך עם באמצעות Hangouts. -בוצע סיבוב של -השבת Bluetooth +‏משתף את השליטה במסך שלך עם באמצעות Hangouts. +‏השבת Bluetooth שמירת צילום המסך נכשלה הפעל מחדש כדי לעדכן הוצא את כולם -VPN מנותק +‏VPN מנותק לא פעילה -הסוללה טעונה ב-‎%‎ סמן עכבר גדול -האימות נכשל עם שם המשתמש או הסיסמה שסופקו אורח התאם אישית שפה וקלט... +‏ () +מיקום המדף קלט חובר מטען בעל מתח נמוך מחוץ לטווח נתק אישור האימות נדחה על ידי הרשת יציאה +180° תצורה הפסק למידע נוסף... -השבת Wi-Fi -הוסף את המכשיר... +‏השבת Wi-Fi שיקוף -CAPS LOCK מופעל +‏אימות PPP נכשל בשל שם משתמש או סיסמה שגויים +‏CAPS LOCK מופעל תצוגה פנימית -שפת Chrome השתנתה מ"" ל"" לאחר סנכרון ההגדרות. +‏שפת Chrome השתנתה מ"" ל"" לאחר סנכרון ההגדרות. מחובר משוב קולי -הפעל את ה-Wi-Fi... -שיטת הקלט שלך השתנתה ל-. +‏הפעל את ה-Wi-Fi... +90° +‏שיטת הקלט שלך השתנתה ל-. הקש Shift + Alt כדי להחליף. רשת פרטית אין רשת סלולרית זמינה @@ -76,18 +82,19 @@ תחתית צילום המסך בוצע מסך מתרחב -לא הוגדר VPN. -לחץ על Ctrl+Shift+Q פעמיים כדי לצאת. +‏לא הוגדר VPN. +‏לחץ על Ctrl+Shift+Q פעמיים כדי לצאת. לא ניתן היה לשקף מסכים מכיוון שלא נמצאה רזולוציה נתמכת. במקום זאת התצוגה עברה למצב שולחן עבודה מורחב. מצב הדגמה -%‎ נותרו +%‎ נותרו שיטות קלט % -ייתכן שה-Chromebook שלך לא ייטען בזמן שהוא מופעל. מומלץ להשתמש במטען הראשי. +מדף +‏ייתכן שה-Chromebook שלך לא ייטען בזמן שהוא מופעל. מומלץ להשתמש במטען הראשי. כיבוי עוצמת קול -חיפוש ה-DNS נכשל -הסוללה מלאה ובטעינה. +‏הפעל מחדש ובצע פעולת Powerwash כדי לעדכן +‏חיפוש ה-DNS נכשל מחפש רשתות סלולריות... לא ידוע חיפוש @@ -96,7 +103,6 @@ פרטי רשת הזמן שנותר עד להתרוקנות הסוללה, צא מהפעלת אורח -הסוללה טעונה ב-‎%‎ ונמצאת בטעינה התפריט הקודם לא ניתן להיכנס לחשבון אחר. ימינה @@ -106,14 +112,15 @@ הגדרות מסנכרן יישומים... שגיאה לא מזוהה: -בדיקת AAA נכשלה +‏בדיקת AAA נכשלה : עד שמתמלא -משוב קולי מופעל. +‏משוב קולי מופעל. הקש Ctrl+Alt+Z כדי להשבית אותו. אתרנט שגיאת רשת לא ידועה שמאלה SMS +‎0°‎ מפעיל את Wi-Fi הגדל @@ -123,14 +130,14 @@ מחובר למטען בעל מתח נמוך. ייתכן שטעינת הסוללה לא תהיה אמינה. נעילה יישומים -הגודל של השתנה ל- כשל בהפעלה ההתחברות לרשת נכשלה '': -Wi-Fi כבוי. +‏Wi-Fi כבוי. מחובר ל הגדר טפט... מצב מקוון מצב ניגודיות גבוהה +‏, שגיאה פנימית הזמן שנותר עד לטעינה מלאה של הסוללה, מגדיל התצוגה @@ -144,58 +151,64 @@ :: סורק לאיתור מכשירים... , -מחפש רשתות Wi-Fi... +‏מחפש רשתות Wi-Fi... הניסיון להתחבר אל '' נכשל: הודעת השרת: אירעה שגיאה -יש צורך ב-EVDO +‏יש צורך ב-EVDO היא הפעלה ציבורית המנוהלת על ידי צא מההפעלה -Wi-Fi מופעל. -Alt + חיפוש או Shift +‏Wi-Fi מופעל. +‏Alt + חיפוש או Shift +‏הסוללה טעונה ברמה של ‎%‎. הגדרות... +סריקת יתר מצב מעגן +הסתרה אוטומטית של המדף נשלחה בקשה לחיבור -OTASP נכשל -Alt + חיפוש +‏OTASP נכשל +‏Alt + חיפוש מסנכרן קבצים +משתמש מבוקר ‎9+‎ -CAPS LOCK כבוי -לחץ פעמיים על Control Shift Q כדי לצאת. +‏CAPS LOCK כבוי +‏לחץ פעמיים על Control Shift Q כדי לצאת. +‏הסוללה טעונה ברמה של ‎%‎ ומתבצעת טעינה. : מפעיל... +הסוללה טעונה במלואה. ייתכן שכבר השתמשת בכל הקצבת הנתונים לנייד. -משתמש המנוהל באופן מקומי -: -מיקום המפעיל -חיפוש או Shift +חזרה לגרסה הקודמת +‏חיפוש או Shift עזרה -CAPS LOCK פועל. +‏CAPS LOCK פועל. הקש על 'חיפוש' או על Shift כדי לבטל. מחשב... יש צורך ברשת ביתית הפעל את -חיפוש DHCP נכשל +‏חיפוש DHCP נכשל פלט משפט-סיסמה גרוע למידע נוסף החיבור נכשל +חוזר לרזולוציה הקודמת בעוד הפעילות הזו באתר תסתיים בעוד . תנותק אוטומטית. -מקש WEP גרוע +‏מקש WEP גרוע מצב לא מזוהה שנה בחזרה ל"" (דורש הפעלה מחדש) -הודעות SMS‏: -הגדרות Google Drive... -מפעיל -CAPS LOCK פועל. +‏הודעות SMS‏: +‏הגדרות Google Drive... +‏CAPS LOCK פועל. הקש על Alt + 'חיפוש' או Shift כדי לבטל. -סוללה חלשה (‎%‎) +‏סוללה חלשה (‎%‎) +אשר נותרו -משתף את השליטה במסך שלך באמצעות Hangouts. +‏משתף את השליטה במסך שלך באמצעות Hangouts. אין רשת הכנס חשבון אחר... מזער הצטרף לרשת אחרת... +‏: שעות ו- דקות עד לטעינה מלאה -SMS מאת +‏SMS מאת ספק \ No newline at end of file diff --git a/chromium/ash/strings/ash_strings_ja.xtb b/chromium/ash/strings/ash_strings_ja.xtb index c98ccb31fe1..180ae7ca056 100644 --- a/chromium/ash/strings/ash_strings_ja.xtb +++ b/chromium/ash/strings/ash_strings_ja.xtb @@ -2,22 +2,26 @@ バッテリー残量: 満 -ランチャーを自動的に隠す ポータル状態 オーバーフロー ボタン +270° Bluetooth オン + に回転しました Bluetooth Bluetooth オフ +ネットワークを設定できませんでした マルチ ログインできるアカウントは 3 つまでです。 Wi-Fi を有効にする 輝度 +パフォーマンス追跡機能が有効です バッテリーの残り時間を計算しています。 ネットワーク プロキシ... キーボード オーバーレイ 認証証明書がリモートで拒否されました Google ドライブ + の解像度を に変更しました HTTP を取得できませんでした ステータス トレイ PIN がありません @@ -34,39 +38,41 @@ 低電力の充電器 利用可能なネットワーク情報がありません モバイル データをセットアップ +デバイスを管理... モバイル アカウントを表示 セルラー モデムを初期化しています... ハングアウトを介して画面の制御を さんと共有しています。 - は回転されました Bluetooth を無効にする スクリーンショットを保存できませんでした 再起動して更新 すべてログアウト VPN が切断されました 待機中 -バッテリー残量: % 大きいマウス カーソル -入力されたユーザー名またはパスワードで認証できませんでした ゲスト 言語と入力方法をカスタマイズ... + +シェルフの位置 入力 低電力の充電器に接続されています 圏外 切断 認証証明書がネットワークによって拒否されました ログアウト +180° 設定 中止 詳細... Wi-Fi を無効にする -デバイスを追加... ミラーリングしています +ユーザー名またはパスワードが正しくないため、PPP 認証に失敗しました Caps Lock がオンになっています 内蔵ディスプレイ 設定の同期後に言語が「」から「」に変更されました。 接続済み 音声フィードバック Wi-Fi をオンにしています... +90° 入力方法を に変更しました。 切り替えるには Shift+Alt キーを押します。 プライベート ネットワーク @@ -83,11 +89,12 @@ 残り % 入力方法 % +シェルフ この充電器がオンになっている間は、Chromebook が充電されない可能性があります。正規の充電器の使用をご検討ください。 シャットダウン 音量 +更新のため、再起動して Powerwash を実行してください DNS を検索できませんでした -バッテリー残量: 満(充電中) 携帯電話ネットワークを検索しています... 不明 検索 @@ -96,7 +103,6 @@ ネットワーク情報 バッテリーが空になるまであと: ゲスト セッションを終了 -バッテリー残量: %(充電中) 前のメニュー 別のアカウントにログインすることはできません。 @@ -114,6 +120,7 @@ ネットワークが不明なためエラーが発生しました SMS + を有効にしています Wi-Fi 最大化 @@ -123,7 +130,6 @@ 低電力の充電器に接続しています。バッテリーが充電されない可能性があります。 ロック アプリ - のサイズが に変更されました 起動失敗 ネットワーク「」に接続できませんでした: Wi-Fi が無効になりました。 @@ -131,6 +137,7 @@ 壁紙を設定... オンライン状態 ハイコントラスト モード + 内部エラー バッテリーがフル充電されるまであと: 画面拡大鏡 @@ -153,20 +160,24 @@ セッションを終了 Wi-Fi が有効になりました。 Alt+ 検索/Shift +バッテリー残量: %。 設定... +オーバースキャン ドック モード +シェルフを自動的に隠す 接続をリクエスト済み OTASP に失敗しました Alt+ 検索 個のファイルを同期中 +監視対象ユーザー 9+ CapsLock 機能はオフになっています 終了するには Ctrl+Shift+Q を 2 回押してください。 +バッテリー残量: %、充電しています。 : 有効にしています... +バッテリー残量: 満。 モバイル データの使用量上限に達した可能性があります。 -ローカルの管理対象ユーザー -: -ランチャーの位置 +元に戻す 検索/Shift ヘルプ CapsLock がオンになっています。 @@ -179,22 +190,24 @@ パスフレーズが正しくありません 詳しく見る 接続に失敗しました + 秒後に元の解像度に戻ります このセッションはあと で終了します。終了すると、自動的にログアウトします。 WEP キーが正しくありません 不明な状態 」に戻します(再起動が必要です) SMS メッセージ: Google ドライブの設定... -ランチャー CapsLock がオンになっています。 Alt+ 検索/Shift キーを押すと解除されます。 バッテリー残量: 少(%) +承諾 残り時間: : ハングアウトを介して画面の制御を共有しています。 ネットワーク接続なし 別のアカウントにログイン... 最小化 他のネットワークに接続... +: フル充電まで 時間 の SMS 通信会社 diff --git a/chromium/ash/strings/ash_strings_kn.xtb b/chromium/ash/strings/ash_strings_kn.xtb index 1b3adb9487e..a5bb15e106d 100644 --- a/chromium/ash/strings/ash_strings_kn.xtb +++ b/chromium/ash/strings/ash_strings_kn.xtb @@ -2,22 +2,26 @@ ಬ್ಯಾಟರಿ ಭರ್ತಿಯಾಗಿದೆ -ಲಾಂಚರ್ ಅನ್ನು ಸ್ವಯಂಮರೆಮಾಡಿ ಮತ್ತು ಪೋರ್ಟಲ್ ಸ್ಥಿತಿ ಅತ್ಯಧಿಕ ಬಟನ್ +270° Bluetooth ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ + ಅನ್ನು ಗೆ ತಿರುಗಿಸಲಾಗಿದೆ Bluetooth Bluetooth ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ +ನೆಟ್‌ವರ್ಕ್ ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ ಬಹು ಸೈನ್-ಇನ್‌ನಲ್ಲಿ ನೀವು ಮೂರರಷ್ಟು ಖಾತೆಗಳನ್ನು ಮಾತ್ರ ಹೊಂದಬಹುದು. Wi-Fi ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ ಪ್ರಕಾಶಮಾನ +ಕಾರ್ಯಕ್ಷಮತೆ ಟ್ರೇಸಿಂಗ್ ಸಕ್ರಿಯಗೊಂಡಿದೆ ಬ್ಯಾಟರಿ ಸಮಯವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲಾಗುತ್ತಿದೆ. ನೆಟ್‌ವರ್ಕ್ ಪ್ರಾಕ್ಸಿ... ಕೀಬೋರ್ಡ್ ಒವರ್‌ಲೇ ದೃಢೀಕರಣ ಪ್ರಮಾಣಪತ್ರವನ್ನು ರಿಮೋಟ್ ಆಗಿ ತಿರಸ್ಕರಿಸಲಾಗಿದೆ Google ಡ್ರೈವ್‌‌ + ರೆಸಲ್ಯೂಷನ್ ಅನ್ನು ಗೆ ಬದಲಿಸಲಾಗಿದೆ HTTP ವಿಫಲವಾಗಿದೆ ಸ್ಥಿತಿ ಟ್ರೆ PIN ಕಾಣೆಯಾಗಿದೆ @@ -34,39 +38,41 @@ ಕಡಿಮೆ ವಿದ್ಯುತ್ ಚಾರ್ಜರ್ ನೆಟ್‌ವರ್ಕ್ ಮಾಹಿತಿ ಲಭ್ಯವಿಲ್ಲ ಮೊಬೈಲ್ ಡೇಟಾವನ್ನು ಹೊಂದಿಸಿ +ಸಾಧನಗಳನ್ನು ನಿರ್ವಹಿಸಿ... ಮೊಬೈಲ್ ಖಾತೆಯನ್ನು ವೀಕ್ಷಿಸಿ ಸೆಲ್ಯುಲಾರ್ ಮೋಡೆಮ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ... Hangouts ಮೂಲಕ ಅವರೊಂದಿಗೆ ನಿಮ್ಮ ಪರದೆಯ ನಿಯಂತ್ರಣವನ್ನು ಹಂಚಲಾಗುತ್ತಿದೆ. - ಅನ್ನು ತಿರುಗಿಸಲಾಗಿದೆ bluetooth ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಉಳಿಸುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ ನವೀಕರಿಸಲು ಮರುಪ್ರಾರಂಭಿಸಿ ಎಲ್ಲವನ್ನೂ ಸೈನ್ ಔಟ್ ಮಾಡಿ VPN ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ ಕಾರ್ಯನಿರತವಾಗಿಲ್ಲ -ಬ್ಯಾಟರಿ % ಪೂರ್ಣವಾಗಿದೆ ದೊಡ್ಡ ಮೌಸ್ ಕರ್ಸರ್ -ಒದಗಿಸಲಾದ ಬಳಕೆದಾರಹೆಸರು ಅಥವಾ ಪಾಸ್‌ವರ್ಡ್‌ನೊಂದಿಗಿನ ದೃಢೀಕರಣವು ವಿಫಲಗೊಂಡಿದೆ ಅತಿಥಿ ಭಾಷೆಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಅನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ... + () +ಶೆಲ್ಫ್ ಸ್ಥಾನ ಇನ್‌ಪುಟ್ ಕಡಿಮೆ ವಿದ್ಯುತ್ ಚಾರ್ಜರ್ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ ವ್ಯಾಪ್ತಿಯ ಹೊರಗೆ ಡಿಸ್‌ಕನೆಕ್ಟ್ ದೃಢೀಕರಣ ಪ್ರಮಾಣಪತ್ರವನ್ನು ನೆಟ್‌ವರ್ಕ್‌ನಿಂದ ತಿರಸ್ಕರಿಸಲಾಗಿದೆ ಸೈನ್ ಔಟ್ +180° ಕಾನ್ಫಿಗರೇಶನ್ ನಿಲ್ಲಿಸು ಇನ್ನಷ್ಟು ತಿಳಿದುಕೊಳ್ಳಿ... Wi-Fi ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ -ಸಾಧನ ಸೇರಿಸಿ... ಪ್ರತಿಬಿಂಬಿಸುವಿಕೆ +ತಪ್ಪಾದ ಬಳಕೆದಾರ ಹೆಸರು ಮತ್ತು ಪಾಸ್‌ವರ್ಡ್‌ನಿಂದಾಗಿ PPP ದೃಢೀಕರಣ ವಿಫಲವಾಗಿದೆ CAPS LOCK ಆನ್ ಆಗಿದೆ ಆಂತರಿಕ ಪ್ರದರ್ಶನ ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಸಿಂಕ್ ಮಾಡಿದ ನಂತರ ಭಾಷೆಯನ್ನು "" ನಿಂದ "" ಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ. ಸಂಪರ್ಕಿಸಲಾಗಿದೆ ಮಾತನಾಡುವ ಪ್ರತಿಕ್ರಿಯೆ Wi-Fi ಆನ್ ಮಾಡಿ... +90° ಗೆ ನಿಮ್ಮ ಇನ್‌ಪುಟ್ ವಿಧಾನವನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ. ಬದಲಿಸಲು Shift + Alt ಕೀಲಿಯನ್ನು ಒತ್ತಿರಿ. ಖಾಸಗಿ ನೆಟ್‌ವರ್ಕ್‌ @@ -83,11 +89,12 @@ % ಉಳಿದಿದೆ ಇನ್‌ಪುಟ್ ವಿಧಾನಗಳು % +ಶೆಲ್ಫ್ ನಿಮ್ಮ Chromebook ಆನ್ ಆಗಿರುವಾಗ ಅದು ಚಾರ್ಜ್ ಆಗುವುದಿಲ್ಲ. ಅಧಿಕೃತ ಚಾರ್ಜರ್ ಬಳಸಿ. ಶಟ್‌ಡೌನ್ ವಾಲ್ಯೂಮ್ +ನವೀಕರಿಸಲು ಮರುಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಪವರ್‌ವಾಶ್ ಮಾಡಿ DNS ಲುಕಪ್ ವಿಫಲವಾಗಿದೆ -ಬ್ಯಾಟರಿ ಪೂರ್ಣಗೊಂಡಿದೆ ಮತ್ತು ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ. ಸೆಲ್ಯುಲರ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳಿಗಾಗಿ ಹುಡುಕುತ್ತಿದೆ... ಅಜ್ಞಾತ ಹುಡುಕಾಟ @@ -96,7 +103,6 @@ ನೆಟ್‌ವರ್ಕ್ ಮಾಹಿತಿ ಬ್ಯಾಟರಿ ಖಾಲಿ ಆಗುವವರೆಗೆ ಉಳಿದಿರುವ ಸಮಯ, ಅತಿಥಿ ಸೆಶೆನ್‌ನಿಂದ ನಿರ್ಗಮಿಸು -ಬ್ಯಾಟರಿ % ಪೂರ್ಣವಾಗಿದೆ ಮತ್ತು ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ ಹಿಂದಿನ ಮೆನು ಮತ್ತೊಂದು ಖಾತೆಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ. ಬಲಕ್ಕೆ @@ -114,6 +120,7 @@ ಅಜ್ಞಾತ ನೆಟ್‌ವರ್ಕ್ ದೋಷ ಎಡಕ್ಕೆ SMS + ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತಿದೆ Wi-Fi ಗರಿಷ್ಠಗೊಳಿಸು @@ -123,7 +130,6 @@ ಕಡಿಮೆ ವಿದ್ಯುತ್ ಚಾರ್ಜರ್‌ಗೆ ಪ್ಲಗ್ ಮಾಡಲಾಗಿದೆ. ಬ್ಯಾಟರಿ ಚಾರ್ಜಿಂಗ್ ವಿಶ್ವಾಸಾರ್ಹವಾಗಿಲ್ಲದಿರಬಹುದು. ಲಾಕ್ ಮಾಡಿ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು - ಅನ್ನು ಗೆ ಮರುಗಾತ್ರಗೊಳಿಸಲಾಗಿದೆ ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆ ವಿಫಲವಾಗಿದೆ '' ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಿಸಲು ವಿಫಲವಾಗಿದೆ: Wi-Fi ಆಫ್ ಮಾಡಲಾಗಿದೆ. @@ -131,6 +137,7 @@ ವಾಲ್‌ಪೇಪರ್ ಅನ್ನು ಹೊಂದಿಸಿ... ಆನ್‌ಲೈನ್ ಸ್ಥಿತಿ ಉನ್ನತ ಕಾಂಟ್ರಾಸ್ಟ್ ಮೋಡ್ +, ಆಂತರಿಕ ದೋಷ ಬ್ಯಾಟರಿ ಪೂರ್ಣವಾಗಿ ಚಾರ್ಜ್ ಆಗುವವರೆಗೆ ಉಳಿದಿರುವ ಸಮಯ, ಪರದೆ ವರ್ಧಕ @@ -153,20 +160,24 @@ ಸೆಶನ್‌ನಿಂದ ನಿರ್ಗಮಿಸು Wi-Fi ಆನ್ ಮಾಡಲಾಗಿದೆ. Alt+ಹುಡುಕಾಟ ಅಥವಾ Shift +ಬ್ಯಾಟರಿ % ಪೂರ್ಣವಾಗಿದೆ. ಸೆಟ್ಟಿಂಗ್‌ಗಳು... +ಓವರ್‌ಸ್ಕ್ಯಾನ್ ಡಾಕ್ ಮೋಡ್ +ಶೆಲ್ಫ್ ಅನ್ನು ಸ್ವಯಂಮರೆಮಾಡು ಸಂಪರ್ಕವನ್ನು ವಿನಂತಿಸಲಾಗಿದೆ OTASP ವಿಫಲವಾಗಿದೆ Alt+ಹುಡುಕಾಟ ಫೈಲ್‌(ಗಳ) ಅನ್ನು ಸಿಂಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ +ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರು 9+ CAPS LOCK ಆಫ್ ಆಗಿದೆ ತೊರೆಯಲು Control Shift Q ಅನ್ನು ಎರಡು ಬಾರಿ ಒತ್ತಿರಿ. +ಬ್ಯಾಟರಿ % ಪೂರ್ಣಗೊಂಡಿದೆ ಮತ್ತು ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ. : ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತಿದೆ... +ಬ್ಯಾಟರಿ ತುಂಬಿದೆ. ನಿಮ್ಮ ಮೊಬೈಲ್ ಡೇಟಾ ಭತ್ಯೆಯನ್ನು ನೀವು ಬಳಸಿರಬಹುದು. -ಸ್ಥಳೀಯವಾಗಿ ನಿರ್ವಹಿಸಲಾದ ಬಳಕೆದಾರ -: -ಲಾಂಚರ್ ಸ್ಥಾನ +ಹಿಂತಿರುಗಿಸು ಹುಡುಕಾಟ ಅಥವಾ Shift ಸಹಾಯ CAPS LOCK ಆನ್ ಆಗಿದೆ. @@ -179,22 +190,24 @@ ಕೆಟ್ಟ ಪಾಸ್‌ಫ್ರೇಸ್ ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ ಸಂಪರ್ಕವು ವಿಫಲವಾಗಿದೆ + ನಲ್ಲಿ ಹಳೆಯ ರೆಸಲ್ಯೂಷನ್‌ಗೆ ಹಿಂತಿರುಗಿಸಲಾಗುತ್ತಿದೆ ಈ ಸೆಷನ್ ರಲ್ಲಿ ಮುಕ್ತಾಯಗೊಳ್ಳುತ್ತದೆ. ನಿಮ್ಮನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೈನ್ ಔಟ್ ಮಾಡಲಾಗುತ್ತದೆ. ಕೆಟ್ಟ WEP ಕೀ ಅಂಗೀಕಾರವಲ್ಲದ ರಾಜ್ಯ "" ಗೆ ಮರುಬದಲಾಯಿಸಿ (ಮರುಪ್ರಾರಂಭಿಸುವ ಅಗತ್ಯವಿದೆ) SMS ಸಂದೇಶಗಳು: Google ಡ್ರೈವ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು... -ಲಾಂಚರ್ CAPS LOCK ಆನ್ ಆಗಿದೆ. ರದ್ದುಗೊಳಿಸಲು Alt+ಹುಡುಕಾಟ ಅಥವಾ Shift ಕೀಲಿಯನ್ನು ಒತ್ತಿರಿ ಬ್ಯಾಟರಿ ಕಡಿಮೆ (%) +ಸಮ್ಮತಿಸು : ಉಳಿದಿದೆ Hangouts ಮೂಲಕ ನಿಮ್ಮ ಪರದೆಯ ನಿಯಂತ್ರಣವನ್ನು ಹಂಚಲಾಗುತ್ತಿದೆ. ನೆಟ್‌ವರ್ಕ್ ಇಲ್ಲ ಮತ್ತೊಂದು ಖಾತೆಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ... ಕುಗ್ಗಿಸು ಇತರರನ್ನು ಸೇರಿ... +: ಪೂರ್ಣವಾಗುವವರಗೆ ಗಂ ನಿ ನಿಂದ SMS ವಾಹಕ diff --git a/chromium/ash/strings/ash_strings_ko.xtb b/chromium/ash/strings/ash_strings_ko.xtb index bb158ca6a3e..5c77190241c 100644 --- a/chromium/ash/strings/ash_strings_ko.xtb +++ b/chromium/ash/strings/ash_strings_ko.xtb @@ -2,22 +2,26 @@ 배터리 충전 완료 -실행기 자동으로 숨기기 시간 포털 상태 오버플로 버튼 +270° 블루투스를 사용함 +(이)가 (으)로 회전되었습니다. 블루투스 블루투스를 사용 안 함 +네트워크를 설정하지 못했습니다. 멀티 로그인 시 계정은 최대 3개까지만 사용할 수 있습니다. Wi-Fi 사용 밝기 +성능 추적 사용 중 배터리 시간 계산 중 네트워크 프록시... 키보드 오버레이 인증서가 원격으로 거부됨 Google 드라이브 + 해상도가 (으)로 변경되었습니다. HTTP 실패 상태 표시줄 PIN이 없습니다. @@ -34,39 +38,41 @@ 저출력 충전기 네트워크 정보 없음 모바일 데이터 설정 +기기 관리... 모바일 계정 표시 휴대전화 모뎀 초기화하는 중... 행아웃을 통해 화면 제어를 님과 공유 중 -이(가) 회전됨 블루투스 사용 안 함 캡처화면을 저장하지 못했습니다. 업데이트하려면 다시 시작 모두 로그아웃 VPN 연결 끊김 대기 -배터리가 % 충전됨 큰 마우스 커서 -제공한 사용자 이름 또는 비밀번호로 인증하지 못했습니다. 손님 언어 및 입력 설정... +() +서가 위치 입력: 저출력 충전기 연결됨 범위를 벗어났습니다. 연결 해제 인증서가 네트워크에 의해 거부됨 로그아웃 +180° 설정 중지 자세히 알아보기... Wi-Fi 사용 안 함 -기기 추가... 미러링 +사용자 이름 또는 비밀번호가 잘못되어 PPP 인증에 실패했습니다. CAPS LOCK이 켜져 있습니다. 내부 디스플레이 설정을 동기화한 뒤 Chrome의 언어가 ''에서 ''(으)로 변경되었습니다. 연결됨 음성 피드백 Wi-Fi 사용... +90° 입력 방법이 (으)로 변경되었습니다. 전환하려면 Shift+Alt를 누르세요. 사설 네트워크 @@ -83,11 +89,12 @@ % 남음 입력 방법 % +서가 크롬북이 켜져 있으면 충전되지 않을 수 있습니다. 공식 충전기를 사용해보세요. 종료 볼륨 +업데이트하려면 다시 시작하고 Powerwash하세요. DNS 조회 실패 -배터리 충전이 완료되었으며 충전 중입니다. 휴대전화 네트워크를 검색하는 중... 알 수 없음 검색 @@ -96,7 +103,6 @@ 네트워크 정보 남은 배터리 사용 시간은 입니다. 손님 세션 종료 -배터리가 % 충전되었으며 충전 중 이전 메뉴 다른 계정에 로그인할 수 없습니다. 오른쪽 @@ -114,6 +120,7 @@ 알려지지 않은 네트워크 오류 왼쪽 SMS + 활성화 중 Wi-Fi 최대화 @@ -123,7 +130,6 @@ 저출력 충전기에 연결되었습니다. 배터리 충전 상태가 불안정합니다. 잠금 애플리케이션 -의 해상도가 (으)로 변경됨 활성화 실패 '' 네트워크에 연결하지 못했습니다: Wi-Fi가 꺼져 있습니다. @@ -131,6 +137,7 @@ 배경화면 설정... 온라인 상태 고대비 모드 +, 내부 오류 배터리 충전이 완료될 때까지 남은 시간은 입니다. 화면 돋보기 @@ -153,20 +160,24 @@ 세션 종료 Wi-Fi가 켜져 있습니다. Alt+검색 또는 Shift 키 +배터리가 % 남았습니다. 설정... +오버스캔 도크 모드 +서가 자동 숨김 연결 요청됨 OTASP 실패 Alt+검색 키 파일 개를 동기화 중 +관리 대상 사용자 9+ CAPS LOCK이 꺼져 있음 종료하려면 Ctrl+Shift+Q를 두 번 누릅니다. +배터리가 % 충전되었으며 충전 중입니다. : 활성화 중... +배터리 충전이 완료되었습니다. 모바일 데이터 사용량을 모두 사용했을 수 있습니다. -로컬 관리 사용자 -: -실행기 위치 +되돌리기 검색 또는 Shift 키 도움말 CAPS LOCK이 켜져 있습니다. @@ -179,22 +190,24 @@ 잘못된 암호 자세히 알아보기 연결 실패 +초 후 기존 해상도로 돌아갑니다. 이 세션은 후에 종료되어 자동으로 로그아웃됩니다. 잘못된 WEP 키 인식할 수 없는 상태 ''(으)로 다시 변경(다시 시작해야 함) SMS 메시지: Google 문서함 설정... -실행기 CAPS LOCK이 켜져 있습니다. 취소하려면 Alt+검색 또는 Shift 키를 누릅니다. 배터리 부족(%) +수락 : 남음 행아웃을 통해 화면 제어 권한 공유 중 네트워크 없음 다른 계정에 로그인... 최소화 다른 네트워크에 연결 +: 충전 완료까지 시간 분 남음 에서 전송된 SMS 네트워크 사업자 diff --git a/chromium/ash/strings/ash_strings_lt.xtb b/chromium/ash/strings/ash_strings_lt.xtb index 611b1ea5ed3..0bb860e6630 100644 --- a/chromium/ash/strings/ash_strings_lt.xtb +++ b/chromium/ash/strings/ash_strings_lt.xtb @@ -2,22 +2,26 @@ Akumuliatorius įkrautas -Automatiškai slėpti paleidimo priemonę : Portalo būsena Perpildymo mygtukas +270° „Bluetooth“ įgalinta + pakeista į Bluetooth „Bluetooth“ neleidžiama +Nepavyko sukonfigūruoti tinklo Naudodami kelių paskyrų funkciją, galite turėti iki trijų paskyrų. Įgalinti „Wi-Fi“ Skaistis +Įgalintas našumo stebėjimas Apskaičiuojamas laikas, likęs iki akumuliatoriaus išsikrovimo. Tinklas Įgaliotasis serveris... Klaviatūros perdanga Autentifikavimo sertifikatas atmestas nuotoliniu būdu „Google“ diskas + skyra pakeista į Įvyko HTTP klaida Būsenos dėklas Trūksta PIN kodo @@ -34,39 +38,41 @@ Mažos galios įkroviklis Nėra tinklo informacijos Nustatyti duomenis mobiliesiems +Tvarkyti įrenginius... Žiūrėti paskyrą mobiliesiems Inicijuojamas korinio ryšio modemas... Jūsų ekrano valdymas bendrinamas su per „Hangout“. - pasuktas Neleisti „Bluetooth“ Išsaugant ekrano kopiją įvyko klaida Paleisti iš naujo, kad būtų atnaujinta Atjungti visus VPN atjungtas Neveikia -Likusi akumuliatoriaus įkrova: % Didelis pelės žymeklis -Nepavyko autentifikuoti naudojant pateiktą naudotojo vardą ar slaptažodį Svečias Tinkinti kalbas ir įvestį... + () +Lentynos pozicija ĮVESTIS Prijungtas mažos galios įkroviklis Nepasiekiama Atsijungti Autentifikavimo sertifikatą atmetė tinklas Atsijungti +180° Konfigūracija Sustabdyti Sužinokite daugiau... Neleisti „Wi-Fi“ -Pridėti įrenginį... Dubliuojama +Nepavyko autentifikuoti PGP dėl netinkamo naudotojo vardo ar slaptažodžio DIDŽIŲJŲ RAIDŽIŲ RAŠYMAS įjungtas Vidinė pateiktis Po nustatymų sinchronizavimo kalba pakeista iš į . Prijungta Žodiniai atsiliepimai Įjungti „Wi-Fi“... +90° Įvesties metodas pakeistas į . Jei norite perjungti, paspauskite „Shift“ + „Alt“. Privatus tinklas @@ -83,11 +89,12 @@ Liko proc. Įvesties metodai % +Lentyna „Chromebook“ gali nebūti įkraunamas, kai jis įjungtas. Apsvarstykite galimybę naudoti originalų įkroviklį. Išjungimas Apimtis +Kad atnaujintumėte, paleiskite iš naujo ir naudokite „Powerwash“ Įvyko DNS paieškos klaida -Akumuliatorius įkrautas ir vis įkraunamas. Ieškoma korinio ryšio tinklų... Nežinoma Ieškoti @@ -96,7 +103,6 @@ Tinklo informacija Laikas, likęs iki akumuliatoriaus išsikrovimo: Išeiti iš svečio režimo -Likusi akumuliatoriaus įkrova: %. Jis įkraunamas. Ankstesnis meniu Negalima prisijungti prie kitos paskyros. Dešinė @@ -114,6 +120,7 @@ Jei norite neleisti, paspauskite „Ctrl“ + „Alt“ + Z. Nežinoma tinklo klaida Kairė SMS + Aktyvinamas „ WI-Fi Išskleisti @@ -123,7 +130,6 @@ Jei norite neleisti, paspauskite „Ctrl“ + „Alt“ + Z. Prijungtas mažos galios įkroviklis. Akumuliatoriaus įkrovimas gali būti nepatikimas. Užrakinti Programos - dydis pakeistas į Aktyvinimo triktis Nepavyko prisijungti prie tinklo „“: „Wi-Fi“ ryšys išjungtas. @@ -131,6 +137,7 @@ Jei norite neleisti, paspauskite „Ctrl“ + „Alt“ + Z. Nustatyti darbalaukio foną... Būsena „Prisijungus“ Didelio kontrasto režimas +, Vidinė klaida Laikas, likęs iki akumuliatoriaus įkrovimo: Ekrano didintuvas @@ -153,20 +160,24 @@ Serverio pranešimas: Išeiti iš sesijos „Wi-Fi“ ryšys įjungtas. „Alt“ + paieškos arba antrojo lygio klavišas +Likusi akumuliatoriaus įkrova: %. Nustatymai... +sritis aplink vaizdo kraštus Doko režimas +Automatiškai slėpti lentyną Pateikta prisijungimo užklausa OTASP nepavyko „Alt“ + paieškos klavišas Sinchronizuojamas (-i) failas (-ai) +Prižiūrimas naudotojas Daugiau nei 9 DIDŽIŲJŲ RAIDŽIŲ RAŠYMAS išjungtas Jei norite išeiti, du kartus paspauskite „Control“ + „Shift“ + Q. +Likusi akumuliatoriaus įkrova: %. Jis įkraunamas. “: aktyvinama... +Akumuliatorius visiškai įkrautas. Galbūt išnaudojote savo mobiliojo ryšio duomenų normą. -Vietoje tvarkoma naudotojo paskyra -: -Paleidiklio pozicija +Grąžinti Paieškos arba antrojo lygio klavišas Žinynas DIDŽIŲJŲ RAIDŽIŲ RAŠYMAS įjungtas. @@ -179,22 +190,24 @@ Jei norite atšaukti, paspauskite paieškos arba antrojo lygio klavišą.Netinkama slaptafrazė Sužinokite daugiau Nepavyko prisijungti +Po bus grąžinta sena skyra Ši sesija baigsis po . Būsite automatiškai atjungti. Netinkamas WEP raktas Neatpažinta būsena Pakeisti atgal į „“ (reikia paleisti iš naujo) SMS pranešimų: „Google“ disko nustatymai... -Paleidimo priemonė DIDŽIŲJŲ RAIDŽIŲ RAŠYMAS įjungtas. Jei norite atšaukti, paspauskite „Alt“ + paieškos klavišas arba „Alt“ + antrojo lygio klavišas. Akumuliatorius senka ( %) +Priimti Liko . Jūsų ekrano valdymas bendrinamas per „Hangout“. Tinklo nėra Prisijungti prie kitos paskyros... Sumažinti Prisijungti prie kito... +: val. min. iki visiško įkrovimo SMS iš Operatorius diff --git a/chromium/ash/strings/ash_strings_lv.xtb b/chromium/ash/strings/ash_strings_lv.xtb index 5d8f38c5087..71e8d06b6e6 100644 --- a/chromium/ash/strings/ash_strings_lv.xtb +++ b/chromium/ash/strings/ash_strings_lv.xtb @@ -2,22 +2,26 @@ Akumulators pilns -Automātiski paslēpt palaišanas lapu un Portāla statuss Pārpildes poga +270° Bluetooth iespējots + tika pagriezts šādi: Bluetooth Bluetooth atspējots +Neizdevās konfigurēt tīklu Vairākkārtējas pierakstīšanās laikā var izmantot ne vairāk kā trīs kontus. Iespējot Wi-Fi Spilgtums +Veiktspējas izsekošana ir iespējota Notiek akumulatora darbības ilguma aprēķināšana. Tīkls Starpniekserveris... Tastatūras pārklājums Autentifikācijas sertifikāts tika attāli noraidīts. Google disks + izšķirtspēja tika mainīta uz Neizdevās iegūt HTTP Statusa tekne Trūkst PIN koda @@ -34,39 +38,41 @@ Lai to pārslēgtu, nospiediet taustiņu kombināciju Shift+Alt. Lādētājs ar mazu strāvas padevi Tīkla informācija nav pieejama. Iestatīt mobilo datu pārraidi +Pārvaldīt ierīces... Skatīt mobilo kontu Notiek mobilā modema inicializēšana... Ekrāna vadības kopīgošana ar lietotāju , izmantojot funkciju Hangouts. - ir pagriezts. Atspējot Bluetooth Neizdevās saglabāt ekrānuzņēmumu. Restartēt, lai atjauninātu Izrakstīt visus VPN ir atvienots Dīkstāve -Akumulatora uzlādes līmenis: % Liels peles kursors -Neizdevās autentificēt ievadīto lietotājvārdu un paroli Viesis Pielāgot valodas un ievadi... + () +Plaukta pozīcija IEEJA Pievienots lādētājs ar mazu strāvas padevi Ārpus diapazona Atvienot Tīkls noraidīja autentifikācijas sertifikātu. Izrakstīties +180° Konfigurācija Apturēt Uzzināt vairāk... Atspējot Wi-Fi -Pievienot ierīci... Spoguļošana +PSP autentifikācija neizdevās nepareiza lietotājvārda un paroles dēļ. Funkcija Caps Lock ir ieslēgta Iekšējais displejs Pēc jūsu iestatījumu sinhronizēšanas valoda ir mainīta no uz . pievienots Balss komentāri Ieslēgt Wi-Fi... +90° Ievades metode ir mainīta uz . Lai to pārslēgtu, nospiediet taustiņu kombināciju Shift+Alt. Privāts tīkls @@ -83,11 +89,12 @@ Lai to pārslēgtu, nospiediet taustiņu kombināciju Shift+Alt. Atlikums: % Ievades metodes % +Plaukts Jūsu Chromebook dators, iespējams, netiks uzlādēts, kamēr tas ir ieslēgts. Ieteicams izmantot oriģinālo lādētāju. Izslēgšana Skaļums +Lai atjauninātu, restartējiet un veiciet Powerwash DNS uzmeklēšana neizdevās -Akumulators ir pilnībā uzlādēts, un tiek turpināta tā uzlāde. Notiek mobilo sakaru tīklu meklēšana... Nezināms Meklēšana @@ -96,7 +103,6 @@ Lai to pārslēgtu, nospiediet taustiņu kombināciju Shift+Alt. Tīkla informācija Atlikušais akumulatora darbības laiks: . Aizvērt viesa sesiju -Akumulatora uzlādes līmenis: %; tiek turpināta tā uzlāde. Iepriekšējā izvēlne Nevar pierakstīties citā kontā. Pa labi @@ -114,6 +120,7 @@ Nospiediet Ctrl+Alt+Z, lai tos atspējotu. Nezināma tīkla kļūda Pa kreisi Īsziņa + Notiek aktivizēšana. Wi-Fi Maksimizēt @@ -123,7 +130,6 @@ Nospiediet Ctrl+Alt+Z, lai tos atspējotu. Pievienots lādētājs ar mazu strāvas padevi. Akumulatora uzlāde var nebūt uzticama. Bloķēt Lietotnes - lielums ir mainīts uz Aktivizācijas kļūme Neizdevās izveidot savienojumu ar tīklu : Wi-Fi tīkls ir izslēgts. @@ -131,6 +137,7 @@ Nospiediet Ctrl+Alt+Z, lai tos atspējotu. Iestatīt fona tapeti... Tiešsaistes statuss Augsta kontrasta režīms +, Iekšēja kļūda Pilnīgais uzlādei nepieciešamais laiks: . Ekrāna lupa @@ -153,20 +160,24 @@ Servera ziņojums: Iziet no sesijas Wi-Fi tīkls ir ieslēgts. Alt+Meklēt vai Shift +Akumulatora uzlādes līmenis: % Iestatījumi... +attēla izvērse Dokošanas režīms +Automātiski slēpt plauktu Ir pieprasīta savienojuma izveide. OTASP neizdevās Alt+Meklēt Notiek  faila(-u) sinhronizēšana +Uzraudzīts lietotājs 9+ Funkcija CAPS LOCK ir izslēgta. Lai izietu, divas reizes nospiediet taustiņu kombināciju Ctrl+Shift+Q. +Akumulatora uzlādes līmenis: %; uzlāde tiek turpināta. : notiek aktivizēšana... +Akumulators ir pilnībā uzlādēts. Iespējams, esat jau izmantojis savu mobilo datu atļauju. -Vietēji pārvaldīts lietotājs -: -Palaidēja novietojums +Atgriezt Meklēt vai Shift Palīdzība Ir ieslēgts BURTSLĒGS. @@ -179,22 +190,24 @@ Lai atceltu tā funkcionalitāti, nospiediet Meklēt vai Shift. Neatbilstoša ieejas frāze Uzziniet vairāk Savienojums neizdevās +Iepriekšējā izšķirtspēja tiks atgriezta pēc Atlikušais laiks līdz šīs sesijas beigām: . Jūs tiksiet automātiski izrakstīts. Neatbilstoša WEP atslēga Neatpazīts stāvoklis Mainīt atpakaļ uz (nepieciešama restartēšana) Īsziņas:  Google diska iestatījumi... -Lietojumprogrammu palaidējs Ir ieslēgts BURTSLĒGS. Lai atceltu tā funkcionalitāti, nospiediet Alt+Meklēt vai Shift. Akumulators gandrīz tukšs (%) +Pieņemt Atlicis: : Ekrāna vadības kopīgošana, izmantojot funkciju Hangouts. Nav tīkla Pierakstīties citā kontā... Minimizēt Pievienoties citam... +: Līdz pilnīgai uzlādei atlikušais laiks:  h  min SMS no Mobilo sakaru operators diff --git a/chromium/ash/strings/ash_strings_ml.xtb b/chromium/ash/strings/ash_strings_ml.xtb index df9b8e869c0..a258cc7a98a 100644 --- a/chromium/ash/strings/ash_strings_ml.xtb +++ b/chromium/ash/strings/ash_strings_ml.xtb @@ -2,22 +2,26 @@ ബാറ്ററി നിറഞ്ഞു -ലോഞ്ചർ യാന്ത്രികമായി മറയ്‌ക്കുക , പോര്‍ട്ടല്‍ അവസ്ഥ ഓവർഫ്ലോ ബട്ടൺ +270° Bluetooth പ്രാപ്‌തമാക്കി + എന്നതിനെ എന്നതിലേയ്‌ക്ക് തിരിച്ചു Bluetooth Bluetooth അപ്രാപ്‌തമാക്കി +നെറ്റ്‌വർക്ക് കോൺഫിഗർ ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു ഒന്നിലധികം സൈൻ ഇന്നുകളിൽ നിങ്ങൾക്ക് മൂന്ന് അക്കൗണ്ടുകൾ വരെ മാത്രമേ ഉണ്ടായിരിക്കാൻ പാടുള്ളൂ. Wi-fi പ്രാപ്‌തമാക്കുക മിഴിവ് +പ്രകടനം പിന്തുടരൽ പ്രവർത്തനക്ഷമമാക്കി ബാറ്ററി സമയം കണക്കാക്കുന്നു. നെറ്റ്വര്‍ക്ക് പ്രോക്‌സി... കീബോര്‍ഡ് ഓവര്‍ലേ പ്രാമാണീകരണ സർട്ടിഫിക്കറ്റ് വിദൂരമായി നിരസിച്ചു Google ഡ്രൈവ് + മിഴിവ് എന്നതിലേയ്‌ക്ക് മാറ്റി HTTP പരാജയപ്പെട്ടു സ്റ്റാറ്റസ് ട്രേ PIN കാണാനില്ല @@ -34,39 +38,41 @@ കുറഞ്ഞ തോതിൽ വൈദ്യുതി പ്രവഹിക്കുന്ന ചാർജർ നെറ്റ്‌വർക്ക് വിവരങ്ങളൊന്നും ലഭ്യമല്ല മൊബൈൽ ഡാറ്റ സജ്ജമാക്കുക +ഉപകരണങ്ങൾ നിയന്ത്രിക്കുക... മൊബൈൽ അക്കൗണ്ട് കാണുക സെല്ലുലാർ മോഡം സമാരംഭിക്കുന്നു... നിങ്ങളുടെ സ്‌ക്രീനിന്റെ നിയന്ത്രണം Hangouts വഴി എന്നതുമായി പങ്കിടുന്നു. - തിരിച്ചു Bluetooth അപ്രാപ്‌തമാക്കുക സ്‌ക്രീൻഷോട്ട് സംരക്ഷിക്കുന്നതിൽ പരാജയപ്പെട്ടു അപ്‌ഡേറ്റുചെയ്യുന്നതിന് പുനരാരംഭിക്കുക എല്ലാം സൈൻ ഔട്ട് ചെയ്യുക VPN വിച്ഛേദിച്ചു നിഷ്ക്രിയം -ബാറ്ററി % പൂർണ്ണമാണ് വലിയ മൗസ് കഴ്‌സർ -നൽകിയ ഉപയോക്തൃനാമം അല്ലെങ്കിൽ പാസ്‌വേഡ് ഉപയോഗിച്ച് പ്രാമാണീകരിക്കുന്നത് പരാജയപ്പെട്ടു അതിഥി ഭാഷകള്‍‌ ഇച്ഛാനുസൃതമാക്കി നല്‍‌കുക... + () +ഷെൽഫ് സ്ഥാനം ഇൻപുട്ട് കുറഞ്ഞ തോതിൽ വൈദ്യുതി പ്രവഹിക്കുന്ന ചാർജർ കണക്റ്റുചെയ്‌തു പരിധിയ്ക്ക് പുറത്താണ് വിച്ഛേദിക്കുക നെറ്റ്‌വർക്ക്, പ്രാമാണീകരണ സർട്ടിഫിക്കറ്റ് നിരസിച്ചു പുറത്തുകടക്കുക +180° ക്രമീകരണം നിര്‍ത്തുക കൂടുതലറിയുക... Wi-Fi അപ്രാപ്‌തമാക്കുക -ഉപകരണം ചേർക്കുക... മിററിംഗ് +തെറ്റായ ഉപയോക്തൃനാമമോ പാസ്‌വേഡോ കാരണം PPP പ്രാമാണീകരണം പരാജയപ്പെട്ടു CAPS LOCK ഓൺ ആണ് ആന്തരിക പ്രദർശനം നിങ്ങളുടെ ക്രമീകരണങ്ങള്‍ സമന്വയിപ്പിച്ചതിന് ശേഷം ഭാഷ "" എന്നതില്‍ നിന്ന് "" എന്നതിലേക്ക് മാറി. ബന്ധിപ്പിച്ചു സംഭാഷണ ഫീഡ്‌ബാക്ക് Wi-Fi ഓണാക്കുക... +90° നിങ്ങളുടെ ഇൻപുട്ട് രീതി എന്നതിലേയ്‌ക്ക് മാറ്റി. സ്വിച്ചുചെയ്യുന്നതിന് Shift + Alt അമർത്തുക. സ്വകാര്യ നെറ്റ്‌വർക്ക് സെല്ലുലാർ നെറ്റ്‌വർക്കൊന്നും ലഭ്യമല്ല @@ -82,11 +88,12 @@ % ശേഷിക്കുന്നു ഇൻപുട്ട് രീതികൾ % +ഷെൽഫ് ഓണായിരിക്കുമ്പോൾ നിങ്ങളുടെ Chromebook ചാർജ് ചെയ്യാനിടയില്ല. ഔദ്യോഗിക ചാർജ്ജർ ഉപയോഗിക്കുന്നത് പരിഗണിക്കുക. ഷട്ട്‌ഡൗൺ ചെയ്യുക അളവ് +പുനരാരംഭിക്കുക, തുടർന്ന് അപ്‌ഡേറ്റുചെയ്യാൻ പവർവാഷുചെയ്യുക DNS തിരയല്‍ പരാജയപ്പെട്ടു -ബാറ്ററി പൂർണ്ണവും ചാർജ്ജ് ചെയ്യുകയുമാണ്. സെല്ലുലാർ നെറ്റ്‌വർക്കുകൾക്കായി തിരയുന്നു... അജ്ഞാതം തിരയൂ @@ -95,7 +102,6 @@ നെറ്റ്‌വർക്ക് വിവരം ബാറ്ററി ശൂന്യമാകുന്നതിന് ശേഷിക്കുന്ന സമയം, അതിഥി സെഷനിൽ നിന്നും പുറത്തുകടക്കുക -ബാറ്ററി % പൂർണ്ണവും ചാർജ്ജ് ചെയ്യുകയുമാണ് മുൻ മെനു മറ്റൊരു അക്കൗണ്ടിൽ സൈൻ ഇൻ ചെയ്യാനാകില്ല. ശരി @@ -113,6 +119,7 @@ അറിയാത്ത നെറ്റ്‌വര്‍ക്ക് പിശക് ഇടത് SMS + സജീവമാക്കുന്നു Wi-Fi വലുതാക്കുക @@ -122,7 +129,6 @@ കുറഞ്ഞ തോതിൽ വൈദ്യുതി പ്രവഹിക്കുന്ന ചാർജ്ജറിലേക്ക് പ്ലഗ് ചെയ്‌തിരിക്കുന്നു. ബാറ്ററി ചാർജുചെയ്യൽ വിശ്വസനീയമാകണമെന്നില്ല. ലോക്കുചെയ്യുക അപ്ലിക്കേഷനുകള്‍ -, എന്നതിലേക്ക് വലുപ്പം മാറ്റി സജീവമാക്കല്‍ പരാജയപ്പെട്ടു '' നെറ്റ്‌വര്‍‌ക്കിലേക്ക് ബന്ധിപ്പിക്കുന്നതിൽ പരാജയപ്പെട്ടു: Wi-Fi ഓഫുചെയ്‌തു. @@ -130,6 +136,7 @@ വാൾപേപ്പർ സജ്ജമാക്കുക... ഓണ്‍ലൈന്‍ അവസ്ഥ ഉയർന്ന ദൃശ്യതീവ്രത മോഡ് +, ആന്തരിക പിശക് ബാറ്ററി പൂർണ്ണമായി ചാർജ്ജാകുന്നതിന് ശേഷിക്കുന്ന സമയം, സ്‌ക്രീൻ മാഗ്‌നിഫയർ @@ -152,20 +159,24 @@ സെഷനിൽ നിന്ന് പുറത്തുകടക്കുക Wi-Fi ഓൺ ചെയ്‌തു. Alt+തിരയൽ അല്ലെങ്കിൽ Shift +ബാറ്ററി % നിറഞ്ഞു. ക്രമീകരണങ്ങള്‍... +ഓവർസ്‌കാൻ ഡോക്ക് മോഡ് +ഷെൽഫ് യാന്ത്രികമായി മറയ്‌ക്കുക കണക്റ്റുചെയ്യാൻ അഭ്യർത്ഥിച്ചു OTASP പരാജയപ്പെട്ടു Alt+തിരയൽ ഫയൽ(കൾ) സമന്വയിപ്പിക്കുന്നു +സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താവ് 9+ CAPS LOCK ഓഫാണ് പുറത്തുപോകുന്നതിന് രണ്ടുതവണ Control Shift Q അമർത്തുക. +ബാറ്ററി % നിറഞ്ഞിരിക്കുന്നു, ചാർജുചെയ്യൽ തുടരുന്നു. : സജീവമാക്കുന്നു... +ബാറ്ററി ചാർജുചെയ്യൽ പൂർണ്ണമായി. നിങ്ങൾ മൊബൈൽ ഡാറ്റ അലവൻസ് ഉപയോഗിച്ചിരിക്കാനിടയുണ്ട്. -പ്രാദേശികമായി നിയന്ത്രിക്കപ്പെടുന്ന ഉപയോക്താവ് -: -ലോഞ്ചറിന്റെ സ്ഥാനം +പഴയപടിയാക്കുക തിരയൽ അല്ലെങ്കിൽ Shift സഹായം CAPS LOCK ഓൺ ആണ്. @@ -178,22 +189,24 @@ മോശം പാസ്ഫ്രെയ്സ് കൂടുതല്‍ മനസിലാക്കുക ബന്ധിപ്പിക്കല്‍ പരാജയപ്പെട്ടു +-ൽ പഴയ മിഴിവിലേക്ക് പഴയപടിയാക്കുന്നു ആകുമ്പോൾ ഈ സെഷൻ അവസാനിക്കും. നിങ്ങൾ യാന്ത്രികമായി സൈൻ ഔട്ടാകും. മോശം WEP കീ തിരിച്ചറിയാത്ത അവസ്ഥ "" എന്നതിലേക്ക് തിരികെ മാറുക (റീസ്റ്റാര്‍ട്ട് ആവശ്യമാണ്) SMS സന്ദേശങ്ങൾ: Google ഡ്രൈവ് ക്രമീകരണങ്ങൾ... -ലോഞ്ചർ CAPS LOCK ഓണാണ്. റദ്ദാക്കുന്നതിന് Alt+തിരയൽ അല്ലെങ്കിൽ Shift അമർത്തുക. ബാറ്ററി കുറവാണ് (%) +സ്വീകരിക്കുക : ശേഷിക്കുന്നു നിങ്ങളുടെ സ്‌ക്രീനിന്റെ നിയന്ത്രണം Hangouts വഴി പങ്കിടുന്നു. നെറ്റ്‍വര്‍ക്ക് ഇല്ല മറ്റൊരു അക്കൗണ്ടിൽ സൈൻ ഇൻ ചെയ്യുക... ചെറുതാക്കുക‍ മറ്റുള്ളവ ചേർക്കുക... +: പൂർണ്ണമായും ചാർജാകുന്നതിന് മി എന്നതില്‍ നിന്നുള്ള SMS കാരിയര്‍ diff --git a/chromium/ash/strings/ash_strings_mr.xtb b/chromium/ash/strings/ash_strings_mr.xtb index 4705f008a35..6d80de1f818 100644 --- a/chromium/ash/strings/ash_strings_mr.xtb +++ b/chromium/ash/strings/ash_strings_mr.xtb @@ -2,22 +2,26 @@ बॅटरी पूर्ण चार्ज -लाँचर स्वयं लपवा आणि पोर्टल राज्य ओव्हरफ्लो बटण +270° Bluetooth सक्षम + वर फिरविले होते Bluetooth Bluetooth अक्षम +नेटवर्क कॉन्फिगर करण्यात अयशस्वी आपल्याकडे एकाधिक साइन इनमध्ये फक्त तीन पर्यंत खाती असू शकतात. Wi-fi सक्षम करा ब्राइटनेस +कार्यप्रदर्शन ट्रेसिंग सक्षम केले बॅटरी वेळ गणना करत आहे. नेटवर्क प्रॉक्सी... कीबोर्ड आच्छादन प्रमाणीकरण प्रमाणपत्र दूरस्थपणे नाकारले Google ड्राइव्ह + रिजोल्यूशन वर बदलले होते HTTP अयशस्वी झाले स्थिती ट्रे PIN गहाळ आहे @@ -34,39 +38,41 @@ निम्न-उर्जेचे चार्जर कोणतीही नेटवर्क माहिती उपलब्ध नाही मोबाइल डेटा सेटअप करा +डिव्हाइस व्यवस्थापित करा... मोबाइल खाते पहा सेल्युलर मोडेम आरंभ करत आहे... Hangouts द्वारे सह आपल्या स्क्रीनचे सामायिकरण नियंत्रण. - फिरवले गेले आ Bluetooth अक्षम करा स्क्रीनशॉट जतन करण्यात अयशस्वी अद्यतनासाठी पुनर्प्रारंभ करा सर्व साइन आउट करा VPN डिस्कनेक्ट केले निष्क्रिय -बॅटरी % भरली आहे मोठा माउस कर्सर -प्रदान केलेल्या वापरकर्तानाव किंवा संकेतशब्दासह प्रमाणिकरण करण्‍यात अयशस्वी झाले अतिथी भाषा आणि इनपुट सानुकूलित करा... + () +शेल्फ स्थिती इनपुट निम्न-उर्जेचे चार्जर कनेक्ट केले परिक्षेत्राबाहेर ‍डिस्कनेक्ट प्रमाणीकरण प्रमाणपत्र नेटवर्कद्वारे नाकारले साइन आउट करा +180° कॉन्फिगरेशन थांबा अधिक जाणून घ्या... Wi-Fi अक्षम करा -डिव्हाइस जोडा... मिररिंग +अयोग्य वापरकर्तानावामुळे किंवा संकेतशब्दामुळे PPP प्रमाणीकरण अयशस्वी झाले CAPS LOCK सुरु आहे अंतर्गत डिस्प्ले आपली सेटिंग्ज समक्रमित केल्यानंतर भाषा "" मधून "" मध्ये बदलली आहे. कनेक्ट केले संभाषण अभिप्राय Wi-Fi चालू करा... +90° आपली इनपुट पद्धत मध्ये बदलली आहे. स्विच करण्यासाठी Shift + Alt दाबा. खाजगी नेटवर्क @@ -83,11 +89,12 @@ % उर्वरित इनपुट पद्धती % +शेल्फ आपले Chromebook चालू असताना ते चार्ज होऊ शकत नाही. अधिकृत चार्जर वापरण्याचा विचार करा. बंद करा व्हॉल्यूम +अद्यतनासाठी रीस्टार्ट करा आणि पॉवरवॉश करा DNS लुकअप अयश्सवी -बॅटरी भरली आहे आणि चार्ज होत आहे सेल्यूलर नेटवर्कसाठी शोधत आहे... अज्ञात शोध @@ -96,7 +103,6 @@ नेटवर्क माहिती बॅटरी रिक्त होईपर्यंत शिल्लक वेळ, अतिथी निर्गमन करा -बॅटरी % भरली आहे आणि चार्ज होत आहे मागील मेनू दुसर्‍या खात्यामध्ये साइन इन करू शकत नाही. उजवे @@ -114,6 +120,7 @@ अज्ञात नेटवर्क त्रुटी डावे SMS + सक्रिय करत आहे Wi-Fi वाढवा @@ -123,7 +130,6 @@ एका निम्न-उर्जेच्या चार्जरवर प्लग इन केले. बॅटरी चार्जिंग विश्वसनीय असू शकत नाही. लॉक करा अनुप्रयोग - चा आकार मध्ये बदलण्यात आला सक्रियन अयशस्वी '': नेटवर्कशी कनेक्ट करण्यात अयशस्वी. Wi-Fi बंद आहे. @@ -131,6 +137,7 @@ वॉलपेपर सेट करा... ऑनलाइन राज्य उच्च तीव्रता मोड +, अंतर्गत त्रुटी बॅटरी पूर्णपणे चार्ज होईपर्यंत उर्वरित वेळ, स्क्रीन भिंग @@ -153,20 +160,24 @@ सत्र निर्गमन करा Wi-Fi चालू आहे. Alt+Search किंवा Shift +बॅटरी % भरली आहे. सेटिंग्ज... +ओव्हरस्कॅन डॉक मोड +शेल्फ स्वयं लपवा विनंती केलेले कनेक्ट करा OTASP बिघडले Alt+Search फाईल(ली) समक्रमित करीत आहे +पर्यवेक्षी वापरकर्ता 9+ CAPS LOCK बंद आहे बाहेर पडण्यासाठी Control Shift Q दोनदा दाबा. +बॅटरी % भरली आहे आणि चार्ज होत आहे. : सक्रिय करत आहे... +बॅटरी भरली आहे. आपण आपल्या मोबाईल डेटा भत्त्याचा वापर केला असेल. -स्थानिकरित्या व्यवस्थापित वापरकर्ता -: -लाँचर स्थिती +परत करा Search किंवा Shift मदत CAPS LOCK चालू आहे. @@ -179,22 +190,24 @@ चुकीचा सांकेतिक वाक्यांश अधिक जाणून घ्या कनेक्ट करण्यात अयशस्वी + मध्ये जुन्या रिजोल्यूशनवर परत करत आहे हे सत्र मध्ये समाप्त होईल. आपल्याला स्वयंचलितपणे साइन आउट केले जाईल. खराब WEP की अपरिचित राज्य "" मध्ये परत बदला (रीस्टार्ट करणे आवश्यक) SMS संदेश: Google ड्राइव्ह सेटिंग्ज... -लाँचर CAPS LOCK चालू आहे. रद्द करण्यासाठी Alt+Search किंवा Shift दाबा. बॅटरी कमी झाली (%) +स्वीकारा : शिल्‍लक Hangouts द्वारे आपल्या स्क्रीनचे नियंत्रण सामायिक करत आहे. कोणतेही नेटवर्क नाही दुसऱ्या खात्यात साइन इन करा... लहान करा दुसरीकडे सामील व्हा... +: पूर्ण होईपर्यंत ता मि कडून SMS कॅरियर diff --git a/chromium/ash/strings/ash_strings_ms.xtb b/chromium/ash/strings/ash_strings_ms.xtb index e701bf92582..7006c53b69b 100644 --- a/chromium/ash/strings/ash_strings_ms.xtb +++ b/chromium/ash/strings/ash_strings_ms.xtb @@ -2,22 +2,26 @@ Bateri penuh -Autosembunyi pelancar dan Keadaan portal Butang Limpahan +270° Bluetooth didayakan + telah diputarkan ke Bluetooth Bluetooth dilumpuhkan +Gagal mengkonfigurasi rangkaian Anda hanya boleh mempunyai sehingga tiga akaun dalam log masuk berbilang. Dayakan Wi-Fi Kecerahan +Penjejakan prestasi didayakan Mengira tempoh bateri. Rangkaian Proksi... Tindihan Papan Kekunci Sijil pengesahan ditolak dari jauh Google Drive +Peleraian telah diubah kepada HTTP gagal Dulang status PIN tiada @@ -34,39 +38,41 @@ Tekan Shift + Alt untuk menukar. Pengecas berkuasa rendah Tiada maklumat rangkaian tersedia Sediakan data mudah alih +Uruskan peranti... Lihat akaun mudah alih Memulakan modem selular... Berkongsi kawalan skrin anda dengan melalui Hangouts. - telah diputar Lumpuhkan Bluetooth Gagal menyimpan tangkapan skrin Mulakan semula untuk mengemas kini Log keluar semua VPN diputuskan sambungan Melahu -Bateri % penuh Kursor tetikus besar -Gagal untuk mengesahkan dengan nama pengguna atau kata laluan yang disediakan Tetamu Sesuaikan bahasa dan input... + () +Kedudukan rak INPUT Pengecas berkuasa rendah disambungkan Di luar lingkungan Putuskan sambungan Sijil pengesahan ditolak oleh rangkaian Log keluar +180° Konfigurasi Berhenti Ketahui lebih lanjut... Lumpuhkan Wi-Fi -Tambah peranti... Pencerminan +Pengesahan PPP gagal disebabkan oleh nama pengguna atau kata laluan yang salah Kekunci CAPS LOCK dihidupkan Paparan Dalaman Bahasa telah ditukar daripada "" kepada "" selepas menyegerakkan tetapan anda. Disambungkan Maklum balas dituturkan Hidupkan Wi-Fi... +90° Kaedah masukan anda telah ditukar kepada . Tekan Shift + Alt untuk menukar. Rangkaian Persendirian @@ -83,11 +89,12 @@ Tekan Shift + Alt untuk menukar. Tinggal % Kaedah input % +Rak Chromebook anda tidak boleh dicas semasa dihidupkan. Pertimbangkan untuk menggunakan pengecas rasmi. Tutup Kelantangan +Mulakan semula dan Hapus Bersih untuk mengemas kini Carian DNS gagal -Bateri penuh dan sedang dicas. Mencari rangkaian selular... Tidak diketahui Cari @@ -96,7 +103,6 @@ Tekan Shift + Alt untuk menukar. Maklumat Rangkaian Masa yang tinggal sehingga bateri kosong, Keluar dari tetamu -Bateri % penuh dan sedang dicas Menu sebelumnya Tidak boleh log masuk ke akaun lain. Kanan @@ -114,6 +120,7 @@ Tekan Ctrl+Alt+Z untuk melumpuhkan. Ralat rangkaian tidak diketahui Kiri SMS + Mengaktifkan Wi-Fi Maksimumkan @@ -123,7 +130,6 @@ Tekan Ctrl+Alt+Z untuk melumpuhkan. Dipalamkan pada pengecas berkuasa rendah. Pengecasan bateri mungkin tidak boleh diharapkan. Kunci Apl - telah diubah saiz kepada Gagal pengaktifan Gagal untuk bersambung ke rangkaian '': Wi-Fi dimatikan. @@ -131,6 +137,7 @@ Tekan Ctrl+Alt+Z untuk melumpuhkan. Tetapkan kertas dinding... Keadaan dalam talian Mod kontras tinggi +, Ralat dalaman Masa yang tinggal sehingga bateri dicas sepenuhnya, Penggadang skrin @@ -153,20 +160,24 @@ Mesej pelayan: Keluar dari sesi Wi-Fi dihidupkan. Alt+Search atau Shift +Bateri % penuh. Tetapan... +imbas lampau Mod dok +Autosembunyi rak Sambungan Diminta OTASP gagal Alt+Search Menyegerakkan fail +Pengguna diselia 9+ Kekunci CAPS LOCK dimatikan Tekan Control Shift Q dua kali untuk keluar. +Bateri % penuh dan sedang dicas. : Mengaktifkan... +Bateri penuh. Anda mungkin telah menghabiskan peruntukan data mudah alih anda. -Pengguna terurus setempat -: -Kedudukan pelancar +Berbalik Search atau Shift Bantuan CAPS LOCK dihidupkan. Tekan Search atau Shift untuk membatalkan. @@ -178,22 +189,24 @@ Mesej pelayan: Frasa laluan teruk Ketahui lebih lanjut Gagal disambungkan +Kembali kepada peleraian lama dalam Sesi ini akan berakhir dalam . Anda akan dilog keluar secara automatik. Kekunci WEP teruk Keadaan tidak dikenali Tukar kembali kepada "" (perlu dimulakan semula) Mesej SMS: Tetapan Google Drive -Pelancar CAPS LOCK dihidupkan. Tekan Alt+Search atau Shift untuk membatalkan. Bateri lemah (%) +Terima : tinggal Berkongsi kawalan skrin anda melalui Hangouts. Tiada rangkaian Log masuk akaun lain... Minimumkan Sertai yang lain... +: j m sehingga penuh SMS daripada Pembawa diff --git a/chromium/ash/strings/ash_strings_nl.xtb b/chromium/ash/strings/ash_strings_nl.xtb index e92a4a594e3..ccb89626970 100644 --- a/chromium/ash/strings/ash_strings_nl.xtb +++ b/chromium/ash/strings/ash_strings_nl.xtb @@ -2,22 +2,26 @@ Accu is vol -Opstartprogramma automatisch verbergen en Status van portal Overloopknop +270° Bluetooth ingeschakeld + is gedraaid naar Bluetooth Bluetooth uitgeschakeld -U kunt maximaal drie accounts hebben in Toegang tot meerdere accounts +Kan netwerk niet configureren +Je kunt maximaal drie accounts hebben in Toegang tot meerdere accounts Wifi inschakelen Helderheid +Bijhouden van prestaties ingeschakeld Accuduur berekenen. Netwerk Proxy... Overlay voor toetsenbord Verificatiecertificaat afgewezen op afstand Google Drive +De resolutie van is gewijzigd in Ophalen van HTTP mislukt Statussysteemvak Pincode ontbreekt @@ -29,45 +33,47 @@ IP-adres Activering mislukt Audio-instellingen -Uw invoermethode is gewijzigd in *(derden). +Je invoermethode is gewijzigd in *(derden). Druk op Shift + Alt om te schakelen.j Laag-vermogen-lader Geen netwerkinformatie beschikbaar Mobiele gegevens instellen +Apparaten beheren... Mobiel account weergeven Mobiele modem initialiseren... -Controle over uw scherm delen met via Hangouts. - is gedraaid +Controle over je scherm delen met via Hangouts. Bluetooth uitschakelen Kan screenshot niet opslaan Opnieuw starten voor bijwerken Alle gebruikers uitloggen Verbinding met VPN verbroken Inactief -De accu is % vol Grote muisaanwijzer -Kan niet verifiëren met deze gebruikersnaam of dit wachtwoord Gast Talen en invoer aanpassen... + () +Positie van plank INVOER Laag-vermogen-lader aangesloten Geen bereik Verbinding verbreken Verificatiecertificaat geweigerd door netwerk Uitloggen +180° Configuratie Stop Meer informatie... Wifi uitschakelen -Apparaat toevoegen... Mirroring +PPP-verificatie mislukt wegens een onjuiste gebruikersnaam of wachtwoord CAPS LOCK is ingeschakeld Interne display -Na het synchroniseren met uw instellingen, is de taal gewijzigd van '' in ''. +Na het synchroniseren met je instellingen, is de taal gewijzigd van '' in ''. Verbonden Gesproken feedback Wifi inschakelen... -Uw invoermethode is gewijzigd in . +90° +Je invoermethode is gewijzigd in . Druk op Shift + Alt om te schakelen. Privénetwerk Geen mobiel netwerk beschikbaar @@ -83,11 +89,12 @@ Druk op Shift + Alt om te schakelen. % resterend Invoermethoden % -Uw Chromebook wordt mogelijk niet opgeladen wanneer deze is ingeschakeld. Overweeg het gebruik van een officiële lader. +Plank +Je Chromebook wordt mogelijk niet opgeladen wanneer deze is ingeschakeld. Overweeg het gebruik van een officiële lader. Uitschakeling Volume +Start opnieuw op en voer Powerwash uit om bij te werken DNS-lookup mislukt -De accu is vol en wordt opgeladen. Zoeken naar mobiele netwerken... Onbekend Zoeken @@ -96,7 +103,6 @@ Druk op Shift + Alt om te schakelen. Netwerkinfo Resterende tijd totdat de accu leeg is: Gastsessie sluiten -De accu is % vol en wordt opgeladen Vorig menu Kan niet inloggen op een ander account. Rechts @@ -114,6 +120,7 @@ Druk op Ctrl+Alt+Z om uit te schakelen. Onbekende netwerkfout Links SMS + activeren Wifi Maximaliseren @@ -123,7 +130,6 @@ Druk op Ctrl+Alt+Z om uit te schakelen. Aangesloten op een laag-vermogen-lader. Opladen van de batterij mogelijk niet betrouwbaar. Vergrendelen Applicaties -Het formaat van is aangepast naar Activering mislukt Kan geen verbinding maken met het netwerk '': Wifi is uitgeschakeld. @@ -131,6 +137,7 @@ Druk op Ctrl+Alt+Z om uit te schakelen. Achtergrond instellen... Online status Modus voor hoog contrast +, Interne fout Resterende tijd totdat de accu volledig is opgeladen: Vergrootglas @@ -153,20 +160,24 @@ Melding van de server: Sessie sluiten Wifi is ingeschakeld. Alt+Zoeken of Shift +De accu is % vol. Instellingen... +overscan Dockmodus +Plank automatisch verbergen Verbinding aangevraagd OTASP mislukt Alt+Zoeken bestand(en) synchroniseren +Bewaakte gebruiker 9+ CAPS LOCK is uitgeschakeld Druk twee keer op Control+Shift+Q om te stoppen. +De accu is % vol en wordt opgeladen. : activeren... -U heeft mogelijk uw quotum voor mobiele gegevens verbruikt. -Lokaal beheerde gebruiker -: -Positie van launcher +De accu is vol. +Je hebt mogelijk je quotum voor mobiele gegevens verbruikt. +Terugzetten Zoeken of Shift Help CAPS LOCK is ingeschakeld. @@ -179,22 +190,24 @@ Druk op Zoeken of Shift om te annuleren. Slechte wachtwoordzin Meer informatie Verbinding mislukt -Deze sessie loopt af over . U wordt automatisch uitgelogd. +Terugzetten naar oude resolutie over +Deze sessie loopt af over . Je wordt automatisch uitgelogd. Slechte WEP-sleutel Niet-herkende staat Teruggaan naar '' (opnieuw starten vereist) SMS-berichten: Instellingen voor Google Drive... -Opstartprogramma CAPS LOCK is ingeschakeld. Druk op Alt+Zoeken of Shift om te annuleren. Accu is bijna leeg (%) +Accepteren : resterend -Controle over uw scherm delen via Hangouts. +Controle over je scherm delen via Hangouts. Geen netwerk Inloggen op ander account... Minimaliseren Verbinding met ander netwerk maken... +: u m tot volledig opgeladen Sms van Provider diff --git a/chromium/ash/strings/ash_strings_no.xtb b/chromium/ash/strings/ash_strings_no.xtb index 06b5745a658..5c3a4876143 100644 --- a/chromium/ash/strings/ash_strings_no.xtb +++ b/chromium/ash/strings/ash_strings_no.xtb @@ -2,22 +2,26 @@ Batteriet er fullt -Skjul programlisten automatisk og Portaltilstand Overflyt-knappen +270° Bluetooth er aktivert + ble rotert til Bluetooth Bluetooth er deaktivert +Kunne ikke konfigurere nettverket Du kan bare ha opptil tre kontoer i flerpålogging. Aktivér Wi-Fi Lysstyrke +Ytelsessporing er aktivert Beregner batteritid. Nettverk Mellomtjener Tastaturbelegg Autentiseringssertifikatet ble avvist eksternt Google Disk +-oppløsningen ble endret til Henting av HTTP mislyktes Status-felt Personlig kode mangler @@ -34,39 +38,41 @@ Trykk på Shift + Alt for å bytte. Lading med lav effekt Ingen nettverksinformasjon tilgjengelig Konfigurer mobildata +Administrer enheter Se mobilkontoen Starter mobilmodemet ... Deling av skjermkontrollen din med via Hangouts. - er rotert Deaktiver Bluetooth Lagringen av skjermdumpen mislyktes Start på nytt for å oppdatere Logg alle av VPN frakoblet Ikke aktiv -Batteriet er % fullt Stor markør -Kunne ikke autentisere med oppgitt brukernavn eller passord Gjest Tilpass språk og inndata + () +Hylleposisjon INNDATA Laveffektslader er tilkoblet Utenfor rekkevidde Koble fra Autentiseringssertifikatet ble avvist av nettverket Logg av +180° Konfigurasjon Stopp Finn ut mer Deaktiver Wi-Fi -Legg til enhet Speiling +PPP-autentiseringen mislyktes på grunn av feil brukernavn eller passord Caps Lock er på Innebygd skjerm Språket er endret fra til etter synkronisering av innstillingene dine. Tilkoblet Talerespons Slå på Wi-Fi +90° Inndatametoden din er endret til . Trykk på Shift + Alt for å bytte. Privat nettverk @@ -83,11 +89,12 @@ Trykk på Shift + Alt for å bytte. % igjen Inndatametoder % +Hylle Chromebook kan ikke lades mens den er slått på. Vurder å bruke den offisielle laderen. Avslutning Volum +Start på nytt og kjør Powerwash for å oppdatere DNS-søk mislyktes -Batteriet er fullt og til lading. Søker etter mobilnettverk ... Ukjent Søk @@ -96,7 +103,6 @@ Trykk på Shift + Alt for å bytte. Nettverksinformasjon Gjenværende tid til batteriet er tomt – Avslutt gjesteøkten -Batteriet er % fullt og til lading Forrige meny Kan ikke logge på en annen konto. Høyre @@ -114,6 +120,7 @@ Trykk på Ctrl+Alt+Z for å deaktivere. Ukjent nettverksfeil Venstre SMS + Aktiverer Wi-Fi Maksimer @@ -123,7 +130,6 @@ Trykk på Ctrl+Alt+Z for å deaktivere. Tilkoblet laveffektslader. Batteriladingen kan være upålitelig. Lås Programmer - har endret oppløsning til Aktiveringen mislyktes Kunne ikke koble til nettverket «»: Wi-Fi er slått av. @@ -131,6 +137,7 @@ Trykk på Ctrl+Alt+Z for å deaktivere. Angi bakgrunnsbilde Tilkoblet tilstand Høykontrastmodus +, Intern feil Tid som gjenstår til batteriet er fulladet – Skjermforstørrer @@ -153,20 +160,24 @@ Tjenermelding: Avslutt økten Wi-Fi er slått på. Alt + Søk eller Shift +Batteriet er % fullt Innstillinger +overscan Dokkmodus +Skjul hylle automatisk Tilkobling har blitt forespurt OTASP mislyktes Alt + Søk Synkroniserer fil(er) +Overvåket bruker 9+ CAPS LOCK er av Trykk Control+Shift+Q to ganger for å avslutte. +Batteriet er % fullt og til lading. : aktiveres … +Batteriet er fullt. Du kan ha brukt opp mobildatakvoten din. -Lokalt administrert bruker -: -Programlisteplassering +Tilbakestill Søk eller Shift Hjelp Caps Lock er på. @@ -179,22 +190,24 @@ Trykk på Søk eller Shift for å avbryte. Feil passordfrase Les mer Tilkoblingen mislyktes +Går tilbake til den gamle oppløsningen om Denne økten slutter om . Du logges ut automatisk. Feil WEP-nøkkel Ikke gjenkjent tilstand Endre tilbake til (krever omstart) SMS-meldinger: Innstillinger for Google Disk -Appvelger Caps Lock er på. Trykk på Alt + Søk eller Shift for å avbryte. Lavt batterinivå ( %) +Godta . gjenstår Deler skjermkontrollen din via Hangouts. Ingen nettverk Logg på en annen konto Minimer Koble til annet +: t og m til batteriet er ferdigladet Tekstmelding fra Operatør diff --git a/chromium/ash/strings/ash_strings_pl.xtb b/chromium/ash/strings/ash_strings_pl.xtb index 2258bf53677..b0b124da7f4 100644 --- a/chromium/ash/strings/ash_strings_pl.xtb +++ b/chromium/ash/strings/ash_strings_pl.xtb @@ -2,22 +2,26 @@ Bateria naładowana -Automatycznie ukrywaj program uruchamiający i Stan portalu Przycisk akcji +270° Bluetooth włączony +Wyświetlacz został obrócony na Bluetooth Bluetooth wyłączony +Nie można skonfigurować sieci W wielokrotnym logowaniu możesz mieć najwyżej trzy konta. Włącz Wi-Fi Jasność +Śledzenie wydajności jest włączone Obliczanie czasu pracy na baterii. Sieć Serwer proxy... Nakładka klawiatury Certyfikat uwierzytelniania został odrzucony zdalnie Dysk Google +Rozdzielczość wyświetlacza została zmieniona na Wykonanie metody GET protokołu HTTP nie powiodło się. Zasobnik stanu Brak kodu PIN @@ -34,39 +38,41 @@ Naciśnij Shift + Alt, by ją przełączyć. Ładowarka o małej mocy Brak informacji o sieciach Skonfiguruj komórkową transmisję danych +Zarządzaj urządzeniami... Wyświetl konto dla telefonów komórkowych Inicjuję modem komórkowy... Udostępniasz ekran w Hangouts – kontroluje Twój komputer. -Ekran został obrócony Wyłącz Bluetooth Nie można zapisać zrzutu ekranu Uruchom ponownie i zaktualizuj Wyloguj wszystkich VPN odłączona Bezczynna -Naładowanie baterii: % Duży kursor myszy -Nie powiodło się uwierzytelnienie przy użyciu podanej nazwy użytkownika i hasła. Gość Dostosuj języki i metody wprowadzania + () +Pozycja półki WEJŚCIE Podłączono ładowarkę o małej mocy Poza zasięgiem Rozłącz Certyfikat uwierzytelniania został odrzucony przez sieć Wyloguj się +180° Konfiguracja Zatrzymaj Więcej informacji... Wyłącz Wi-Fi -Dodaj urządzenie... Odbicie lustrzane +Uwierzytelnianie PPP nie powiodło się z powodu nieprawidłowej nazwy użytkownika lub hasła CAPS LOCK jest włączony. Wyświetlacz wewnętrzny Po zsynchronizowaniu ustawień zmieniono język z „” na „”. Połączone Potwierdzenia głosowe Włącz Wi-Fi... +90° Metoda wprowadzania została zmieniona na . Naciśnij Shift + Alt, by ją przełączyć. Sieć prywatna @@ -83,11 +89,12 @@ Naciśnij Shift + Alt, by ją przełączyć. Pozostało % Wprowadzanie tekstu % +Półka Włączony Chromebook może nie być ładowany. Zalecamy użycie oryginalnej ładowarki. Wyłączenie Głośność +Uruchom ponownie i użyj funkcji Powerwash, by zaktualizować Wyszukiwanie DNS nie powiodło się. -Bateria jest pełna i trwa ładowanie. Szukam sieci komórkowych... Nieznany Wyszukiwanie @@ -96,7 +103,6 @@ Naciśnij Shift + Alt, by ją przełączyć. Informacje o sieci Czas pozostały do wyczerpania baterii: Zakończ sesję gościa -Naładowanie baterii: %. Trwa ładowanie Poprzednie menu Nie można zalogować się na kolejne konto. W prawo @@ -114,6 +120,7 @@ Aby wyłączyć, naciśnij Ctrl+Alt+Z. Nieznany błąd sieci W lewo SMS + Aktywuję Wi-Fi Maksymalizuj @@ -123,7 +130,6 @@ Aby wyłączyć, naciśnij Ctrl+Alt+Z. Podłączono ładowarkę o małej mocy. Ładowanie baterii może być nieprawidłowe. Zablokuj Aplikacje -Rozdzielczość ekranu została zmieniona na Niepowodzenie aktywacji Nie udało się połączyć z siecią „”: Wi-Fi wyłączone. @@ -131,6 +137,7 @@ Aby wyłączyć, naciśnij Ctrl+Alt+Z. Ustaw tapetę... Online Tryb wysokiego kontrastu +, Błąd wewnętrzny Czas pozostały do pełnego naładowania baterii: Lupa @@ -153,20 +160,24 @@ Komunikat serwera: Zakończ sesję Wi-Fi włączone. Alt+Szukaj lub Shift +Naładowanie baterii: %. Ustawienia +nadmiarowość obrazu Tryb doku +Autoukrywanie półki Poproszono o połączenie Dostarczanie OTASP nie powiodło się Alt+Szukaj Synchronizacja: pliki(ów) +Użytkownik nadzorowany Ponad 9 CAPS LOCK jest wyłączony Naciśnij dwukrotnie Control Shift Q, by zakończyć. +Naładowanie baterii: %. Trwa ładowanie. : aktywuję... +Bateria jest pełna. Być może został wyczerpany limit komórkowej transmisji danych. -Użytkownik zarządzany lokalnie -: -Pozycja programu uruchamiającego +Przywróć Szukaj lub Shift Pomoc CAPS LOCK jest włączony. @@ -179,22 +190,24 @@ Naciśnij Szukaj lub Shift, by anulować. Błędne hasło Więcej informacji Łączenie nie powiodło się +Powrót do wcześniejszej rozdzielczości za Ta sesja zakończy się za . Nastąpi automatyczne wylogowanie. Błędny klucz WEP Nierozpoznany stan Zmień z powrotem na „” (wymaga ponownego uruchomienia) SMS-y: Ustawienia Dysku Google... -Program uruchamiający CAPS LOCK jest włączony. Naciśnij Alt+Szukaj lub Shift, by anulować. Niski stan baterii (%) +Akceptuj Pozostało : Udostępniasz ekran i kontrolę nad komputerem w Hangouts. Brak sieci Zaloguj się na kolejne konto... Minimalizuj Połącz z inną... +: godz. min do pełnego naładowania Wiadomość SMS z numeru Operator diff --git a/chromium/ash/strings/ash_strings_pt-BR.xtb b/chromium/ash/strings/ash_strings_pt-BR.xtb index b351f45c0cd..d2f1d0e53a0 100644 --- a/chromium/ash/strings/ash_strings_pt-BR.xtb +++ b/chromium/ash/strings/ash_strings_pt-BR.xtb @@ -2,22 +2,26 @@ Bateria carregada -Ocultar automaticamente o iniciador e Estado do portal Botão de estouro +270° Bluetooth ativado + foi substituída por Bluetooth Bluetooth desativado +Falha ao configurar rede É possível ter até três contas em login múltiplo. Ativar Wi-Fi Brilho +Rastreamento de desempenho ativado Calculando duração da bateria. Rede Proxy... Sobreposição do teclado Certificado de autenticação rejeitado remotamente Google Drive +A resolução de foi alterada para HTTP falhou Bandeja de status PIN ausente @@ -34,39 +38,41 @@ Pressione Shift + Alt para alternar. Carregador de baixa potência Não há informações de rede disponíveis Configurar dados móveis +Gerenciar dispositivos... Exibir conta de celular Inicializando modem celular... Compartilhando o controle de sua tela com por meio do Hangouts. - foi girada Desativar bluetooth Falha ao salvar a captura de tela Reiniciar para atualizar Desconectar todos VPN desconectada Inativo -A bateria está % cheia Cursor grande do mouse -Falha na autenticação com nome de usuário ou senha fornecidos Visitante Personalizar idiomas e entrada... + () +Posição da estante ENTRADA Carregador de baixa potência conectado Fora de alcance Desconectar Certificado de autenticação rejeitado pela rede Sair +180° Configuração Parar Saiba mais... Desativar Wi-Fi -Adicionar dispositivo... Espelhamento +Falha da autenticação PPC devido a senha ou nome de usuário incorreto CAPS LOCK está ativado Display interno O idioma foi alterado de "" para "" após a sincronização de suas configurações. Conectado Feedback falado Ativar Wi-Fi... +90° Seu método de entrada mudou para . Pressione Shift + Alt para alternar. Rede privada @@ -83,11 +89,12 @@ Pressione Shift + Alt para alternar. % restante Métodos de entrada % +Estante Seu Chromebook pode não carregar enquanto estiver ligado. Considere usar o carregador oficial. Encerramento Volume +Reiniciar e executar Powerwash para atualizar A busca de DNS falhou -A bateria está cheia e carregando. Procurando redes de celular... Desconhecido Pesquisa @@ -96,7 +103,6 @@ Pressione Shift + Alt para alternar. Informações de rede O tempo restante até que a bateria se esgote é de Sair da sessão de visitante -A bateria está % cheia e carregando Menu anterior Não é possível fazer login em outra conta. Para a direita @@ -114,6 +120,7 @@ Pressione Ctrl+Alt+Z para desativá-lo. Erro de rede desconhecido Para a esquerda SMS + Ativando Wi-Fi Maximizar @@ -123,7 +130,6 @@ Pressione Ctrl+Alt+Z para desativá-lo. Conectado a um carregador de baixa potência. O carregamento da bateria pode não ser confiável. Bloquear Aplicativos - foi redimensionada para Falha na ativação Falha na conexão à rede "": O Wi-Fi está desligado. @@ -131,6 +137,7 @@ Pressione Ctrl+Alt+Z para desativá-lo. Definir plano de fundo... Estado on-line Modo de alto contraste +, Erro interno O tempo restante até que a bateria esteja totalmente carregada é de Lupa @@ -153,20 +160,24 @@ Mensagem do servidor: Sair da sessão O Wi-Fi está ligado. Alt + Pesquisar ou Shift +A bateria está % carregada. Configurações... +overscan Modo dock +Ocultar estante automaticamente Conexão solicitada Falha no OTASP Alt + Pesquisar Sincronizando arquivos +Usuário supervisionado Mais de 9 CAPS LOCK está desativado Pressione Control+Shift+Q duas vezes para sair. +A bateria está % cheia e carregando. : Ativando... +A bateria está carregada. Você pode ter esgotado sua permissão de dados móveis. -Usuário gerenciado localmente -: -Posição do iniciador +Reverter Pesquisar ou Shift Ajuda A tecla CAPS LOCK está ativada. Pressione Pesquisar ou Shift para cancelar. @@ -178,21 +189,23 @@ Mensagem do servidor: Senha incorreta Saiba mais Falha na conexão +Revertendo para resolução anterior em Esta sessão terminará em . Você será automaticamente desconectado. Chave WEP incorreta Estado não reconhecido Voltar a "" (exige reinicialização) Mensagens SMS: Configurações do Google Drive... -Iniciador A tecla CAPS LOCK está ativada. Pressione Alt + Pesquisar ou Shift para cancelar. Nível de bateria baixo (%) +Aceitar : restantes Compartilhando o controle de sua tela por meio do Hangouts. Sem rede Fazer login em outra conta... Minimizar Conectar-se a outra... +: hm até a carga total SMS de Operadora diff --git a/chromium/ash/strings/ash_strings_pt-PT.xtb b/chromium/ash/strings/ash_strings_pt-PT.xtb index cf5df2d6704..5cb04a1b4e2 100644 --- a/chromium/ash/strings/ash_strings_pt-PT.xtb +++ b/chromium/ash/strings/ash_strings_pt-PT.xtb @@ -2,22 +2,26 @@ Bateria carregada -Ocultar automaticamente iniciador e Estado do portal Botão de Sobrecarga +270° Bluetooth ativado + foi rodado para Bluetooth Bluetooth desativado +Não foi possível configurar a rede Só pode ter três contas no máximo no início de sessão integrado. Ativar Wi-Fi Brilho +Rastreio do desempenho ativado A calcular tempo da bateria. Rede Proxy... Sobreposição do teclado Certificado de autenticação rejeitado remotamente Google Drive +A resolução de foi alterada para A obtenção de HTTP falhou Tabuleiro de estado Falta o PIN @@ -34,39 +38,41 @@ Prima Shift + Alt para mudar. Carregador de baixo consumo Não existem informações de rede disponíveis Configurar dados móveis +Gerir dispositivos... Ver conta do telemóvel A inicializar o modem celular... Partilhar o controlo do seu ecrã com através do Hangouts. - foi rodado Desativar Bluetooth Não foi possível guardar a captura de ecrã Reiniciar para atualizar Terminar sessão de todos VPN desligado Inactiva -A bateria está % cheia Cursor do rato grande -Falha ao autenticar com o nome de utilizador ou palavra-passe fornecidos Convidado Personalizar idiomas e introdução... + () +Posição da prateleira ENTRADA Carregador de baixo consumo ligado Fora de alcance Desligar Certificado de autenticação rejeitado pela rede Terminar sessão +180° Configuração Parar Saiba mais... Desativar Wi-Fi -Adicionar aparelho... Espelhamento +Falha na autenticação PPP devido a um nome de utilizador ou palavra-passe incorretos CAPS LOCK está ativado Apresentação Interna O idioma foi alterado de para depois de sincronizar as suas definições. Ligado Respostas faladas Ligar Wi-Fi... +90° O seu método de introdução foi alterado para . Prima Shift + Alt para mudar. Rede Privada @@ -83,11 +89,12 @@ Prima Shift + Alt para mudar. % restante Métodos de introdução % +Prateleira É possível que não consiga carregar o seu Chromebook enquanto este se encontrar ligado. Considere utilizar o carregador oficial. Encerrar Volume +Reiniciar e Powerwash para atualizar A procura de DNS falhou -A bateria está cheia e a carregar. A procurar redes celulares... Desconhecido Pesquisa @@ -96,7 +103,6 @@ Prima Shift + Alt para mudar. Informações da Rede Tempo restante até a bateria terminar, Sair da sessão de convidado -A bateria está % cheia e a carregar Menu anterior Não é possível iniciar sessão noutra conta. Direita @@ -114,6 +120,7 @@ Prima Ctrl+Alt+Z para desativar. Erro de rede desconhecido Esquerda SMS + A ativar Wi-Fi Maximizar @@ -123,7 +130,6 @@ Prima Ctrl+Alt+Z para desativar. Ligado a um carregador de baixo consumo. O carregamento da bateria pode não ser fiável. Bloquear Aplicações - foi redimensionado para Falha na activação Falha ao ligar à rede "": A ligação Wi-Fi está desativada. @@ -131,6 +137,7 @@ Prima Ctrl+Alt+Z para desativar. Definir imagem de fundo... Estado on-line Modo de alto contraste +, Erro interno Tempo restante até a bateria estar totalmente carregada: Lupa @@ -153,20 +160,24 @@ Mensagem do servidor: Sair da sessão A ligação Wi-Fi está ativada. Alt + Pesquisar ou Shift +A bateria está % cheia. Definições... +overscan Modo da estação de ancoragem +Ocultar automaticamente a prateleira Ligação Solicitada O OTASP falhou Alt + Pesquisar A sincronizar ficheiro(s) +Utilizador supervisionado 9+ CAPS LOCK está desativado Prima Ctrl+Shift+Q duas vezes para sair. +A bateria está % cheia e a carregar. : a ativar... +A bateria está carregada. Poderá ter utilizado toda a sua bonificação de dados móveis. -Utilizador gerido localmente -: -Posição do iniciador +Reverter Pesquisar ou Shift Ajuda CAPS LOCK ativado. @@ -179,22 +190,24 @@ Prima Pesquisar ou Shift para cancelar. Frase de acesso incorrecta Saiba mais A ligação falhou +A reverter para a resolução antiga dentro de Esta sessão irá terminar em . A sua sessão será automaticamente terminada. Chave WEP incorrecta Estado não reconhecido Reverter alteração para (requer reinicio) Mensagens SMS: Definições do Google Drive... -Iniciador CAPS LOCK ativado. Prima Alt + Pesquisar ou Shift para cancelar. Bateria fraca (%) +Aceitar Restam : Partilhar o controlo do seu ecrã através dos Hangouts. Sem rede Iniciar sessão numa conta adicional... Minimizar Aderir a outra... +: h m até ficar completa SMS de Operador diff --git a/chromium/ash/strings/ash_strings_ro.xtb b/chromium/ash/strings/ash_strings_ro.xtb index 2412434089a..ace43009830 100644 --- a/chromium/ash/strings/ash_strings_ro.xtb +++ b/chromium/ash/strings/ash_strings_ro.xtb @@ -2,22 +2,26 @@ Baterie încărcată -Ascundeți automat lansatorul : Stare portal Butonul Overflow +270° Bluetooth activat + a fost rotit la Bluetooth Bluetooth dezactivat +Rețeaua nu a putut fi configurată Conectarea multiplă acceptă maximum trei conturi. Activați Wi-Fi Luminozitate +Urmărirea performanței este activată Se calculează durata bateriei. Rețea Proxy... Suprapunere a tastaturii Certificatul de autentificare a fost respins de la distanță Google Drive +Rezoluția a fost modificată la Metoda GET a protocolului HTTP a eșuat Bara de stare Codul PIN lipsește @@ -34,39 +38,41 @@ Încărcător de putere joasă Nu sunt disponibile informații despre rețele Configurați datele mobile +Gestionați dispozitivele... Afișați contul mobil Se inițializează modemul mobil... În prezent, vă poate controla ecranul prin intermediul Hangouts. - a fost rotit Dezactivați Bluetooth Captura de ecran nu a putut fi salvată. Reporniți pentru a actualiza Deconectați toți utilizatorii Rețea VPN deconectată Inactivă -Nivelul bateriei este de % Cursor de mouse mare -Autentificarea cu numele de utilizator sau parola furnizate a eșuat Invitat Personalizați limbile și modul de introducere... + () +Poziție raft INTRARE A fost conectat un încărcător de putere joasă Fără acoperire Deconectați-vă Certificatul de autentificare a fost respins de rețea Deconectați-vă +180° Configurare Opriți Aflați mai multe... Dezactivați Wi-Fi -Adăugați un dispozitiv... Oglindire +Autentificarea PPP nu a reușit, din cauza unui nume de utilizator sau a unei parole greșite Tasta CAPS LOCK este activată Afișaj intern După sincronizarea setărilor, limba a fost modificată de la „” la „”. Conectat Feedback vocal Activați Wi-Fi... +90° Metoda de introducere s-a schimbat la . Apăsați pe Shift + Alt pentru a comuta. Rețea privată @@ -83,11 +89,12 @@ Nivel disponibil: % Metode de introducere % +Raft Este posibil ca laptopul Chromebook să nu se încarce în timp ce este pornit. Se recomandă să utilizați încărcătorul original. Închideți Volum +Pentru a actualiza, reporniți și efectuați Powerwash Căutarea DNS a eșuat -Bateria este plină și se încarcă. Se caută rețele mobile... Necunoscut Căutare @@ -96,7 +103,6 @@ Informații despre rețea Timp rămas până la descărcarea bateriei: Ieșiți din sesiunea pentru invitați -Nivelul bateriei este de % și se încarcă Meniul anterior Nu vă mai puteți conecta la alt cont. Dreapta @@ -114,6 +120,7 @@ Apăsați Ctrl+Alt+Z pentru a-l dezactiva. Eroare de rețea necunoscută Stânga SMS + Se activează Wi-Fi Maximizați @@ -123,7 +130,6 @@ Apăsați Ctrl+Alt+Z pentru a-l dezactiva. V-ați conectat la un încărcător de putere joasă. Încărcarea bateriei poate fi nesigură. Blocați Google Apps - a fost redimensionat la Activare nereușită A eșuat conectarea la rețeaua „”: Conexiunea Wi-Fi este dezactivată. @@ -131,6 +137,7 @@ Apăsați Ctrl+Alt+Z pentru a-l dezactiva. Setați o imagine de fundal... Stare online Mod de contrast ridicat +, Eroare internă Timp rămas până la încărcarea completă a bateriei: Lupă de ecran @@ -153,20 +160,24 @@ Mesaj server: Ieșiți din sesiune Conexiunea Wi-Fi este activată. Alt+Căutare sau Shift +Nivelul bateriei este de %. Setări... +suprascanare Mod de andocare +Ascundeți automat raftul Conectare solicitată OTASP a eșuat Alt+Căutare Se sincronizează (de) fișiere +Utilizator monitorizat Peste 9 Tasta CAPS LOCK este dezactivată Apăsați de două ori Control Shift Q pentru a ieși. +Nivelul bateriei este de % și se încarcă. : se activează... +Bateria este încărcată complet. Este posibil să fi consumat complet alocarea datelor mobile. -Utilizator gestionat local -: -Poziția lansatorului +Reveniți Căutare sau Shift Ajutor Tasta CAPS LOCK este activată. @@ -179,22 +190,24 @@ Apăsați Căutare sau Shift pentru a anula. Expresie de acces greșită Aflați mai multe Conectarea a eșuat +Se revine la rezoluția anterioară în Această sesiune se va încheia în . Veți fi deconectat(ă) automat. Cheie WEP greșită Stare nerecunoscută Modificați înapoi la „” (este necesară repornirea) Mesaje SMS: Setări Disc Google... -Lansator Tasta CAPS LOCK este activată. Apăsați Alt+Căutare sau Shift pentru a anula. Baterie slabă ( %) +Accept Timp rămas: : În prezent, permiteți controlul la ecran prin intermediul Hangouts. Nicio rețea Conectați-vă la alt cont... Minimizați Conectați-vă la altă rețea... +: h. min. până la încărcare completă SMS de la Operator diff --git a/chromium/ash/strings/ash_strings_ru.xtb b/chromium/ash/strings/ash_strings_ru.xtb index c248abcaa21..e99e8b8418a 100644 --- a/chromium/ash/strings/ash_strings_ru.xtb +++ b/chromium/ash/strings/ash_strings_ru.xtb @@ -2,22 +2,26 @@ Аккумулятор заряжен -Автоматически скрывать панель запуска Состояние портала Кнопка переполнения +270° Bluetooth включен +: положение изменено на Bluetooth Bluetooth отключен +Не удалось настроить сеть Множественный вход поддерживает не более трех аккаунтов. Включить Wi-Fi Яркость +Включено отслеживание эффективности Подсчет оставшегося времени работы от батареи… Сеть Прокси-сервер… Накладка на клавиатуру Сертификат аутентификации отклонен удаленно Google Диск +: установлено разрешение Произошла ошибка запроса HTTP GET Строка состояния PIN-код отсутствует @@ -34,39 +38,41 @@ Маломощное зарядное устройство Информация о сетях недоступна Настроить мобильную передачу данных +Управление устройствами... Просмотр мобильного аккаунта Инициализация сотового модема… Доступ к экрану для в Hangouts. -Экран перевернут Отключить Bluetooth Не удалось сохранить скриншот Перезагрузите, чтобы обновить Выйти из всех аккаунтов VPN-соединение прервано Не активно -Батарея заряжена на %. Большой курсор мыши -Не удалось выполнить аутентификацию Гость Настройка языков и ввода... + () +Положение полки ВХОД Подключено маломощное зарядное устройство Выход за рамки диапазона Отключиться Сертификат аутентификации отклонен сетью Выйти +180° Конфигурация Остановить Подробнее… Отключить Wi-Fi -Добавить устройство Отражение +Не удалось выполнить аутентификацию PPP: неверное имя пользователя или пароль Включен режим CAPS LOCK Встроенный дисплей В результате синхронизации настроек язык изменен. Теперь используется , а не . Подключено Голосовое сопровождение Включение Wi-Fi... +90° Способ ввода изменен на . Для переключения нажмите Shift + Alt. Частная сеть @@ -83,11 +89,12 @@ Осталось % Методы ввода % +Полка Возможны проблемы при зарядке Chromebook. Рекомендуем использовать комплектное зарядное устройство. Завершение работы Объем +Чтобы обновить систему, перезапустите ее и выполните Powerwash Произошла ошибка при поиске сервера DNS -Батарея заряжена и подключена к источнику питания. Поиск сетей мобильной связи... неизвестно Поиск @@ -96,7 +103,6 @@ Информация о сети Оставшееся время работы от батареи: . Выйти из гостевого режима -Батарея заряжена на % и подключена к источнику питания. Предыдущее меню Не удается войти ещё в один аккаунт. Вправо @@ -113,6 +119,7 @@ Неизвестная ошибка сети Влево SMS + Активация Wi-Fi Развернуть @@ -122,7 +129,6 @@ Подключено маломощное зарядное устройство. Возможны проблемы при зарядке. Заблокировать Приложения -Установлено новое разрешение экрана : Сбой активации Не удалось подключиться к сети : Wi-Fi отключен @@ -130,6 +136,7 @@ Выбрать обои Состояние "В сети" Режим высокой контрастности +, Внутренняя ошибка Оставшееся время до полной зарядки батареи: . Лупа @@ -152,20 +159,24 @@ Завершить сеанс Wi-Fi включен Alt + Search или Shift +Батарея заряжена на %. Настройки... +Каемка экрана Закрепленный режим +Автоматически скрывать полку Запрос на подключение отправлен Сбой OTASP Alt + Search Синхронизация файлов () +Контролируемый профиль более 9 CAPS LOCK отключен Чтобы выйти, дважды нажмите Control + Shift + Q. +Батарея заряжена на % и подключена к источнику питания. : выполняется активация... +Батарея полностью заряжена. Вероятно, вы использовали весь объем данных, предусмотренный тарифным планом. -Локально управляемый профиль -Разрешение экрана : -Положение панели запуска +Отменить Search или Shift Справка Включен режим CAPS LOCK. @@ -178,22 +189,24 @@ Неправильная кодовая фраза Подробнее... Сбой подключения +Возврат к предыдущему разрешению через Сеанс будет завершен через . Произойдет автоматический выход из системы. Недопустимый ключ WEP Нераспознанное состояние Вернуться к языку: "" (потребуется перезагрузка) SMS: Настройки Диска Google… -Панель запуска Включен режим CAPS LOCK. Чтобы отключить его, нажмите Alt + Search или Shift. Низкий заряд батареи (%) +Принять Осталось : Доступ к экрану в Hangouts. Нет сети Войти ещё в один аккаунт... Свернуть Подключиться к другой сети... +: До полной зарядки: ч мин SMS от Оператор связи diff --git a/chromium/ash/strings/ash_strings_sk.xtb b/chromium/ash/strings/ash_strings_sk.xtb index 02ba009f4e1..c313ac11200 100644 --- a/chromium/ash/strings/ash_strings_sk.xtb +++ b/chromium/ash/strings/ash_strings_sk.xtb @@ -2,22 +2,26 @@ Batéria je nabitá -Automaticky skryť spúšťač a Stav portálu Tlačidlo pretečenia +270 ° Rozhranie Bluetooth je povolené +Obrazovka bola otočená o Bluetooth Rozhranie Bluetooth je zakázané +Sieť sa nepodarilo nakonfigurovať V rámci viacnásobného prihlásenia môžete mať maximálne tri účty. Povoliť Wi-Fi Jas +Sledovanie výkonnosti je povolené Výpočet času výdrže batérie. Sieť Server proxy... Prekryvná vrstva klávesnice Certifikát na overenie totožnosti bol zamietnutý na diaľku Disk Google +Rozlíšenie obrazovky bolo zmenené na Príkaz get protokolu HTTP zlyhal Stavový panel Chýba kód PIN @@ -34,39 +38,41 @@ Nabíjačka s nízkym výkonom Informácie o sieti nie sú k dispozícii Nastavenie mobilného dátového pripojenia +Spravovať zariadenia... Zobraziť mobilný účet Inicializácia mobilného modemu... Zdieľanie ovládania obrazovky s používateľom prostredníctvom služby Hangouts. -Obrazovka sa otočila Zakázať rozhranie Bluetooth Uloženie snímky obrazovky zlyhalo. Reštartovaním vykonáte aktualizáciu Odhlásiť všetkých Sieť VPN je odpojená Nečinná -Batéria je nabitá na % Veľký kurzor myši -Overenie totožnosti pomocou zadaného používateľského mena a hesla zlyhalo Hosť Prebieha prispôsobenie jazykov a vstupu... + () +Pozícia poličky VSTUP Pripojila sa nabíjačka s nízkym výkonom Mimo rozsah Odpojiť Certifikát na overenie totožnosti bol zamietnutý sieťou Odhlásiť sa +180 ° Konfigurácia Zastaviť Viac informácií... Zakázať sieť Wi-Fi -Pridať zariadenie ... Zrkadlenie +Overenie PKS zlyhalo z dôvodu nesprávneho používateľského mena alebo hesla Kláves CAPS LOCK je zapnutý Interný displej Po synchronizácii vašich nastavení bol zmenený jazyk „“ na jazyk „“. Pripojené Hlasová odozva Zapnúť sieť Wi-Fi... +90 ° Metóda vstupu sa zmenila na . Prepnete ju stlačením klávesov Shift + Alt. Súkromná sieť @@ -83,11 +89,12 @@ Zostáva % Metódy vstupu % +Polička Chromebook sa nesmie dobíjať v čase, keď je zapnutý. Zvážte použitie oficiálnej nabíjačky. Vypnúť Hlasitosť +Aktualizáciu uskutočníte reštartovaním a použitím funkcie Powerwash Vyhľadanie DNS zlyhalo -Batéria je úplne nabitá a nabíja sa. Prebieha vyhľadávanie mobilných sietí... Neznámy Vyhľadávanie @@ -96,7 +103,6 @@ Informácie o sieti Čas zostávajúci do vybitia batérie: Ukončiť reláciu hosťa -Batéria je nabitá na % a nabíja sa Predchádzajúca ponuka Nepodarilo sa prihlásiť do iného účtu. Doprava @@ -114,6 +120,7 @@ Zakážete ju stlačením klávesov Ctrl+Alt+Z. Neznáma chyba siete Doľava SMS + Aktivujte sa sieť Wi-Fi Maximalizovať @@ -123,7 +130,6 @@ Zakážete ju stlačením klávesov Ctrl+Alt+Z. Batéria je zapojená do nabíjačky s nízkym výkonom. Nabíjanie batérie nemusí byť spoľahlivé. Uzamknúť Aplikácie -Veľkosť obrazovky sa zmenila na veľkosť Zlyhanie aktivácie K sieti „“ sa nepodarilo pripojiť: Pripojenie Wi-Fi je vypnuté. @@ -131,6 +137,7 @@ Zakážete ju stlačením klávesov Ctrl+Alt+Z. Nastavenie tapety... Stav online Režim s vysokým kontrastom +, Interná chyba Čas zostávajúci do úplného nabitia batérie: Lupa @@ -153,20 +160,24 @@ Správa zo servera: Ukončiť reláciu Pripojenie Wi-Fi je zapnuté. Alt + Hľadať alebo Shift +Batéria je nabitá na %. Nastavenia... +presah obsahu Režim doku +Automatické skrývanie poličky Vyžaduje sa pripojenie Zlyhanie služby OTASP Alt + Hľadať Synchronizácia súborov () +Kontrolovaný používateľ viac ako 9 CAPS LOCK je vypnutý Ak chcete skončiť, stlačte dvakrát kombináciu kláves Ctrl+Shift+Q. +Batéria je nabitá na % a nabíja sa. : Aktivuje sa... +Batéria je úplne nabitá. Možno ste dosiahli limit povolených mobilných dát. -Miestne spravovaný používateľ -: -Pozícia spúťača +Vrátiť Hľadať alebo Shift Pomocník Kláves CAPS LOCK je zapnutý. @@ -179,22 +190,24 @@ Ak ho chcete zrušiť, stlačte klávesy Hľadať alebo Shift. Zlá prístupová fráza Viac informácií Zlyhanie pripojenia +Vrátenie starého rozlíšenia prebehne o Relácia sa ukončí o . Automaticky dôjde k odhláseniu. Zlý kľúč WEP Nerozpoznaný stav Zmeniť späť na miestne nastavenie „“ (vyžaduje sa reštart) Správy SMS: Nastavenia služby Disk Google... -Spúšťač Kláves CAPS LOCK je zapnutý. Ak ho chcete zrušiť, stlačte klávesy Alt + Hľadať alebo Shift. Kapacita batérie je nízka ( %) +Prijať zostáva : Zdieľanie ovládania obrazovky prostredníctvom služby Hangouts. Žiadna sieť Prihláste sa do iného účtu... Minimalizovať Pripojiť k ďalšej... +: h min do nabitia SMS z č. Operátor diff --git a/chromium/ash/strings/ash_strings_sl.xtb b/chromium/ash/strings/ash_strings_sl.xtb index 3ac1f59d5b2..e9d5d1ec8cc 100644 --- a/chromium/ash/strings/ash_strings_sl.xtb +++ b/chromium/ash/strings/ash_strings_sl.xtb @@ -2,22 +2,26 @@ Baterija je polna -Samodejno skrij zaganjalnik in Stanje portala Gumb za presežek +270° Bluetooth omogočen + – zasuk na Bluetooth Bluetooth onemogočen +Omrežja ni bilo mogoče konfigurirati S prijavo z več računi lahko uporabljate samo tri račune. Omogoči Wi-Fi Svetlost +Sledenje učinkovitosti delovanja je omogočeno Izračunavanje časa trajanja akumulatorja. Omrežje Proxy ... Prekrivna tipkovnica Potrdilo za preverjanje pristnosti je bilo zavrnjeno na oddaljeni lokaciji Google Drive + – ločljivost je bila spremenjena na: Ukaz HTTP get ni uspel Pladenj stanja Manjka PIN @@ -34,39 +38,41 @@ Pritisnite Shift + Alt, da ga preklopite. Nizkoenergijski polnilnik Ni podatkov o omrežju Nastavitev mobilne podatkovne povezave +Upravljanje naprav ... Prikaz mobilnega računa Inicializacija modema za mobilno omrežje ... Skupni nadzor zaslona z osebo prek klepetalnic Hangouts. -Zaslon je zasukan Onemogoči Bluetooth Posnetka zaslona ni bilo mogoče shraniti Znova zaženite za posodobitev Odjava vseh Povezava z navideznim zasebnim omrežjem je prekinjena Nedejavno -Napolnjenost akumulatorja: % Velik miškin kazalec -Preverjanje pristnosti vnesenega uporabniškega imena ali gesla ni uspelo Gost Prilagajanje jezikov in vnosa ... + () +Položaj police VHOD Priključen je nizkoenergijski polnilnik Zunaj dosega Prekini povezavo Omrežje je zavrnilo potrdilo za preverjanje pristnosti Odjava +180° Konfiguracija Ustavi Več o tem ... Onemogoči Wi-Fi -Dodaj napravo ... Zrcaljenje +Preverjanje pristnosti PPP ni uspelo zaradi napačnega uporabniškega imena ali gesla Tipka CAPS LOCK je vklopljena Notranji zaslon Po sinhronizaciji nastavitev se je jezik spremenil iz jezika »« v jezik »«. Povezano Glasovni odziv Vklop omrežja Wi-Fi ... +90° Način vnosa se je spremenil v . Pritisnite Shift + Alt, da ga preklopite. Zasebno omrežje @@ -83,11 +89,12 @@ Pritisnite Shift + Alt, da ga preklopite. Preostane še % Načini vnosa % +Polica Vaš Chromebook se ne more polniti, ko je vklopljen. Priporočamo uporabo uradnega polnilnika. Zaprt Glasnost +Če želite posodobiti, znova zaženite in uporabite funkcijo Powerwash Iskanje DNS ni uspelo -Akumulator je poln in se polni. Iskanje mobilnih omrežij ... Neznano Iskanje @@ -96,7 +103,6 @@ Pritisnite Shift + Alt, da ga preklopite. Podatki o omrežju Preostali čas do izpraznitve akumulatorja, Zapusti sejo gosta -Napolnjenost akumulatorja: % in se polni Prejšnji meni V drug račun se ni mogoče prijaviti. V desno @@ -114,6 +120,7 @@ Pritisnite Shift + Alt, da ga preklopite. Neznana napaka v omrežju V levo SMS + Aktiviranje omrežja Wi-Fi Povečaj @@ -123,7 +130,6 @@ Pritisnite Shift + Alt, da ga preklopite. Priključen je nizkoenergijski polnilnik. Polnjenje akumulatorja morda ne bo zanesljivo. Zakleni Google Apps -Ločljivost zaslona je spremenjena na Napaka pri aktiviranju Povezava z omrežjem »« ni uspela: Wi-Fi je izklopljen. @@ -131,6 +137,7 @@ Pritisnite Shift + Alt, da ga preklopite. Nastavi sliko za ozadje ... Stanje s povezavo Visokokontrastni način +, Notranja napaka Preostali čas do napolnitve akumulatorja, Lupa @@ -153,20 +160,24 @@ Sporočilo strežnika: Zapusti sejo Wi-Fi je vklopljen. Alt + iskanje ali Shift +Napolnjenost akumulatorja: %. Nastavitve ... +upodabljanje čez rob zaslona Zasidrani način +Samodejno skrivanje police Povezava zahtevana Storitev OTASP ni uspela Alt + iskanje Sinhroniziranje toliko datotek: ... +Nadzorovan uporabnik Več kot 9 Tipka CAPS LOCK je izklopljena Dvakrat pritisnite Ctrl + Shift + Q, če želite končati. +Napolnjenost akumulatorja: % – polnjenje še poteka. : Aktiviranje ... +Akumulator je poln. Morda ste porabili dovoljeno količino mobilnih podatkov. -Lokalno upravljani uporabnik -: -Položaj zaganjalnika +Razveljavi Iskanje ali Shift Pomoč Tipka CAPS LOCK je vklopljena. @@ -179,22 +190,24 @@ Pritisnite tipko za iskanje ali Shift, da jo prekličete. Napačno geslo Več o tem Vzpostavljanje povezave ni uspelo +Ponastavitev na prejšnjo ločljivost čez Ta seja se bo končala čez . Samodejno boste odjavljeni. Napačen ključ WEP Neprepoznano stanje Spremeni nazaj v jezik »« (potreben vnovični zagon) Sporočila SMS: Nastavitve za Google Drive ... -Zaganjalnik Tipka CAPS LOCK je vklopljena. Pritisnite Alt in tipko za iskanje ali Shift, da jo prekličete. Akumulator je skoraj prazen ( %) +Sprejmi Še . Skupni nadzor zaslona prek klepetalnic Hangouts. Ni omrežja Prijava z drugim računom ... Pomanjšaj Pridružite se drugemu ... +: h min do napolnjenosti SMS od Operater diff --git a/chromium/ash/strings/ash_strings_sr.xtb b/chromium/ash/strings/ash_strings_sr.xtb index dba64929d63..df00c69eecb 100644 --- a/chromium/ash/strings/ash_strings_sr.xtb +++ b/chromium/ash/strings/ash_strings_sr.xtb @@ -2,22 +2,26 @@ Батерија је пуна -Аутоматски сакриј покретач и Стање Портал Дугме за додатне опције +270° Bluetooth је омогућен +Екран је промењен у Bluetooth Bluetooth је онемогућен +Конфигурација мреже није успела Можете да имате највише три налога за вишеструко пријављивање. Омогући Wi-Fi Осветљеност +Праћење учинка је омогућено Израчунавање времена трајања батерије. Мрежа Прокси... Постављени елемент тастатуре Сертификат за потврду аутентичности је одбијен даљински Google диск +Резолуција је промењена у HTTP get није успео Палета статуса Недостаје PIN @@ -34,39 +38,41 @@ Пуњач мале снаге Нису доступне информације о мрежи Подеси податке за мобилне уређаје +Управљај уређајима... Прикажи налог за мобилне уређаје Покретање модема за мобилну мрежу... Контрола над екраном се дели са корисником преко Hangouts-а. -Екран је ротиран Онемогући Bluetooth Чување снимка екрана није успело Покрените поново да бисте ажурирали Одјави све Веза са VPN-ом је прекинута Неактивно -Батерија је % пуна Велики показивач миша -Потврда аутентичности помоћу наведеног корисничког имена или лозинке није успела Гост Прилагоди језике и унос... + () +Положај полице УЛАЗ Повезан је пуњач мале снаге Изван опсега Прекини везу Мрежа је одбила сертификат за потврду аутентичности Одјави ме +180° Конфигурација Заустави Сазнајте више... Онемогући Wi-Fi -Додај уређај... Пресликавање +Провера аутентичности преко протокола PPP није успела због нетачног корисничког имена или лозинке CAPS LOCK је укључен Интерни екран Језик је промењен са језика „“ на „“ након синхронизације подешавања. Повезан Говорне повратне информације Укључи Wi-Fi... +90° Метод уноса је промењен у . Притисните Shift + Alt да бисте пребацили. Приватна мрежа @@ -83,11 +89,12 @@ Преостало је % Методи уноса % +Полица Chromebook се можда неће пунити док је укључен. Размислите о коришћењу оригиналног пуњача. Затварање Јачина звука +Поново покрените и обавите Powerwash да бисте ажурирали DNS претрага није успела -Батерија је пуна и још увек се пуни. Претраживање мобилних мрежа... Непознато Претрага @@ -96,7 +103,6 @@ Информације о мрежи Време које је преостало док се батерија не испразни, Изађи из сесије госта -Батерија је % пуна и још увек се пуни Претходни мени Не можете да се пријавите на други налог. Удесно @@ -114,6 +120,7 @@ Непозната грешка на мрежи Улево SMS + Активирање мреже Wi-Fi Увећај @@ -123,7 +130,6 @@ Уређај је укључен у пуњач мале снаге. Пуњење батерије можда неће бити поуздано. Закључај Apps -Величина екрана је промењена у Активација није успела Повезивање са мрежом „“ није успело: Wi-Fi је искључен. @@ -131,6 +137,7 @@ Подеси позадину... Стање На мрежи Режим високог контраста +, Интерна грешка Време које је преостало док се батерија у потпуности не напуни, Лупа екрана @@ -153,20 +160,24 @@ Изађи из сесије Wi-Fi је укључен. Alt + тастер за претрагу или Shift +Батерија је % пуна. Подешавања... +ивично подручје екрана Режим базне станице +Аутоматски сакриј полицу Захтева се повезивање OTASP није успео Alt + тастер за претрагу Синхронизовање датотеке(а) +Корисник под надзором 9+ CAPS LOCK је искључен Притисните Control Shift Q двапут да бисте изашли. +Батерија је % пуна и још увек се пуни. : Активирање... +Батерија је пуна. Можда сте искористили додељени пакет података за мобилне уређаје. -Корисник којим се локално управља -: -Положај покретача +Врати Тастер за претрагу или Shift Помоћ CAPS LOCK је укључен. @@ -179,22 +190,24 @@ Неисправна приступна фраза Сазнајте више Повезивање није успело +Враћање на стару резолуцију за Ова сесија ће се завршити за . Бићете аутоматски одјављени. Неисправна WEP шифра Непознато стање Врати на „“ (потребно је поновно покретање) SMS поруке: Подешавања Google диска... -Покретач CAPS LOCK је укључен. Притисните Alt + тастер за претрагу или Shift да бисте га отказали. Батерија је скоро празна (%) +Прихвати Преостало је : Контрола над екраном се дели преко Hangouts-а. Нема мреже Пријави ме на други налог... Смањи Придружи ме другој... +: с м до краја пуњења SMS са броја Мобилни оператер diff --git a/chromium/ash/strings/ash_strings_sv.xtb b/chromium/ash/strings/ash_strings_sv.xtb index 7418d0e765a..b07c6b93e7a 100644 --- a/chromium/ash/strings/ash_strings_sv.xtb +++ b/chromium/ash/strings/ash_strings_sv.xtb @@ -2,22 +2,26 @@ Batteriet är fulladdat -Dölj startfältet automatiskt och Portalläge Överflödsknapp +270° Bluetooth aktiverad + byttes till Bluetooth Bluetooth inaktiverad +Det gick inte att konfigurera nätverket Du kan högst använda tre konton för multiinloggning. Aktivera Wi-Fi Ljusstyrka +Resultatspårning aktiverat Batteritiden beräknas. Nätverk Proxy ... Tangentbordsöverlägg Autentiseringscertifikatet godkändes inte av fjärrvärden Google Drive +Upplösningen för ändrades till HTTP GET misslyckades Statusfält PIN saknas @@ -34,39 +38,41 @@ Laddning med låg effekt Det finns ingen nätverksinformation Konfigurera mobildata +Hantera enheter ... Visa mobilkonto Mobilt modem initieras ... Delar kontrollen över din skärm med via Hangouts. - har roterats Inaktivera Bluetooth Det gick inte att spara skärmdumpen Starta om för att uppdatera Logga ut alla VPN frånkopplat Inaktiv -Batteriet är fullt till % Stor muspekare -Det gick inte att autentisera med användarnamnet eller lösenordet som angavs Gäst Anpassa språk och inmatning... + () +Hyllposition INDATA Laddare med låg effekt ansluten Utanför intervallet Koppla från Autentiseringscertifikatet godkändes inte av nätverket Logga ut +180° Konfiguration Stopp Läs mer ... Inaktivera Wi-Fi -Lägg till enhet ... Spegling +PPP-autentisering misslyckades på grund av felaktigt användarnamn eller lösenord CAPS LOCK är på Intern bildskärm Chromes språk har ändrats från till efter synkronisering av dina inställningar. Ansluten Talad feedback Aktivera Wi-Fi ... +90° Inmatningsmetoden har ändrats till . Tryck på Skift + Alt om du vill byta. Privat nätverk @@ -83,11 +89,12 @@ % återstår Inmatningsmetoder % +Hylla Din Chromebook kanske inte laddas medan den är på. Överväg att använda den officiella laddaren. Stängning Volym +Starta om och utför en powerwash för att uppdatera DNS-sökning misslyckades -Batteriet är fullt och laddas. Söker efter mobilnätverk ... Okänt Sökning @@ -96,7 +103,6 @@ Nätverksinformation Tid som återstår tills batteriet är tomt: Avsluta gästsession -Batteriet är fullt till % och laddas Föregående meny Det går inte att logga in på ett annat konto. Höger @@ -114,6 +120,7 @@ Inaktivera genom att trycka Ctrl+Alt+Z. Okänt nätverksfel Vänster SMS + Aktiverar Wi-Fi Maximera @@ -123,7 +130,6 @@ Inaktivera genom att trycka Ctrl+Alt+Z. Ansluten till en laddare med låg effekt. Batteriet kanske inte laddas ordentligt. Lås Appar -Storleken på har ändrats till Aktiveringsfel Det gick inte att ansluta till nätverket : Wi-Fi är inaktiverat. @@ -131,6 +137,7 @@ Inaktivera genom att trycka Ctrl+Alt+Z. Ange bakgrund ... Onlineläge Högkontrastläge +, Internt fel Tid som återstår tills batteriet är fulladdat: Skärmförstorare @@ -153,20 +160,24 @@ Meddelande från servern: Avsluta session Wi-Fi är aktiverat. Alt + Sök eller Skift +Batteriet är fullt till %. Inställningar... +överskanning Dockningsläge +Dölj hylla automatiskt Anslutning begärd Det gick inte att etablera tjänsten over-the-air. Alt + Sök Synkroniserar filer +Övervakad användare 9+ CAPS LOCK är av Avsluta genom att trycka på Ctrl + Skift + Q två gånger. +Batteriet är fullt till % och laddas. : Aktiverar ... +Batteriet är fullt. Du kanske har slut på mobildata. -Lokalt hanterad användare -: -Startfältets position +Återgå Sök eller Skift Hjälp CAPS LOCK är på. Avbryt genom att trycka på Sök eller Shift. @@ -178,21 +189,23 @@ Meddelande från servern: Ogiltig lösenfras Läs mer Kunde inte ansluta +Återgår till den gamla upplösningen om Sessionen avslutas om . Du kommer att loggas ut automatiskt. Felaktig WEP-nyckel Okänt tillstånd Byt tillbaka till "" (kräver omstart) SMS-meddelanden: Inställningar för Google Drive ... -Startprogram CAPS LOCK är på. Avbryt genom att trycka på Alt + Sök eller Skift. Låg batterinivå ( %) +Acceptera : kvar Delar kontrollen över din skärm via Hangouts. Inget nätverk Logga in på ett annat konto … Minimera Anslut till andra ... +: h m till fulladdat SMS från Operatör diff --git a/chromium/ash/strings/ash_strings_sw.xtb b/chromium/ash/strings/ash_strings_sw.xtb index 8ee3b5f47f3..ab296ff9543 100644 --- a/chromium/ash/strings/ash_strings_sw.xtb +++ b/chromium/ash/strings/ash_strings_sw.xtb @@ -2,22 +2,26 @@ Betri imejaa -Kizinduzi cha Kuficha otomatiki na Hali ya lango Kitufe Jalizi +270° Bluetooth imewezeshwa + ilizungushwa hadi Bluetooth Bluetooth imelemazwa +Ilishindwa kusanidi mtandao Unaweza tu kuwa na hadi akaunti tatu zilizoingiwa kwa wakati mmoja Wezesha Wi-Fi Ung'aavu +Ufuatiliaji wa utendaji umewashwa Inakokotoa muda wa betri. Mtandao Proksi... Mtandazo wa Kibodi Cheti cha uthibitishaji kimekataliwa kwa mbali Hifadhi ya Google +Ubora wa ulibadilishwa hadi HTTP imeshindikana Treya ya hali PIN inakosekana @@ -34,39 +38,41 @@ Bonyeza Shift + Alt ili kubadilisha. Chaja ya nguvu ya chini Hakuna maelezo ya mtandao yanayopatikana Sanidi data ya simu +Simamia vifaa... Ona akaunti ya simu ya mkononi Inaanzisha modemu ya simu za mkononi... Inashiriki udhibiti wa skrini yako na kupitia Hangouts. - limezungushwa Lemaza Bluetooth Imeshindwa kuhifadhi picha ya skrini Anzisha upya ili kusasisha Ondoa wote VPN imekatwa muunganisho Tulivu -Betri imejaa % Kishale kikubwa cha kipanya -Imeshindwa kuthibitisha kwa jina la mtumiaji au nenosiri lililotolewa Mgeni Geuza lugha na uingizaji kukufaa... + () +Nafasi ya rafu INGIZO Chaja ya nguvu ya chini imeunganishwa Nje ya eneo Tenganisha Cheti cha uthibitishaji kimekataliwa na mtandao Ondoka +180° Usanidi Simamisha Pata maelezo zaidi... Lemaza Wi-Fi -Ongeza kifaa... Kuakisi +Uthibitishaji wa PPP ulishindwa kutokana na jina la mtumiaji na nenosiri lisilo sahihi Caps Lock imewashwa. Onyesho la Ndani Lugha imebadilika kutoka " "na kuwa" " baada ya kulinganisha mipangilio yako. Umeunganishwa Maoni ya yaliyotamkwa Washa Wi-Fi... +90° Mbinu ingizo yako imebadilika hadi . Bonyeza Shift + Alt ili kubadili. Mtandao Binafsi @@ -83,11 +89,12 @@ Bonyeza Shift + Alt ili kubadili. % inayobaki Mbinu Ingizo % +Rafu Chromebook yako huenda isichaji ikiwa imewashwa. Fikiria kutumia chaja rasmi. Funga Kiwango +Zima na uwashe na Powerwash ili kusasisha Mwonekano wa DNS umeshindikana -Betri imejaa na inachajiwa. Inatafuta mitandao ya simu za mkononi... Siojulikana Tafuta @@ -96,7 +103,6 @@ Bonyeza Shift + Alt ili kubadili. Maelezo ya Mtandao Muda unaosalia mpaka betri inapoisha, Maliza Ugeni -Betri imejaa % na inachaji Menyu ya awali Huwezi kuingia katika akaunti nyingine. Kulia @@ -114,6 +120,7 @@ Bonyeza Ctrl+Alt+Z ili ufunge. Hitilafu isiyojulikana ya mtandao Kushoto SMS + Inaanza kutumia Wi-Fi Tanua @@ -123,7 +130,6 @@ Bonyeza Ctrl+Alt+Z ili ufunge. Imechomekwa katika chaja ya kawi ya chini. Huenda kuchaji kwa betri hakutakuwa kuzuri. Funga Programu - imebadilishwa ukubwa kuwa Kushindwa kwa uamilishaji Imeshindwa kuunganisha kwenye mtandao '': Wi-Fi imezimwa. @@ -131,6 +137,7 @@ Bonyeza Ctrl+Alt+Z ili ufunge. Weka Mandhari... Hali ya mtandaoni Hali ya juu ya utofautishaji +, Hitilafu ya ndani Muda unaosalia hadi betri itakapochajiwa kikamilifu, Kikuza skrini @@ -153,20 +160,24 @@ Ujumbe wa seza: Toka kwenye kipindi Wi-Fi imewashwa. Alt + Utafutaji au Hama +Betri imejaa %. Mipangilio... +angalia kwa ujumla: Hali ya kufungwa +Ficha rafu kiotomatiki Muunganisho Umeombwa OTASP imeshindikana Alt + Utafutaji Inalinganisha faili +Mtumiaji anayesimamiwa 9+ CAPS LOCK imezimwa Bofya "Control" na "Shift" na Q kwa pamoja mara mbili ili kuacha. +Betri imejaa % na inachaji. : Inaanza kutumia... +Betri imejaa. Inawezekana umemaliza mgawo wako wa data ya simu ya mkononi. -Mtumiaji anayedhibitiwa karibu -: -Sehemu ya kizinduzi +Rejesha Utafutaji au Hama Usaidizi CAPS LOCK imeamilishwa. @@ -179,22 +190,24 @@ Bonyeza Alt + Utafutaji au Hama ili kughairi. Kaulisiri mbovu Pata maelezo zaidi Muunganisho umeshindikana +Inarejesha katika ubora wa zamani baada ya Kipindi hiki kitaisha katika . Utaondolewa kiotomatiki. Kitufe kibovu cha WEP Hali isiyotambulika Badilisha hadi "" (inahitaji uzime na uwashe) Ujumbe wa SMS: Mipangilio ya Hifadhi ya Google... -Kizindua CAPS LOCK imeamilishwa. Bonyeza Alt + Utafutaji au Hama ili kughairi. Betri inaisha (%) +Kubali Imesalia : Kushiriki udhibiti wa skrini yako kupitia Hangouts. Hakuna mtandao Ingia katika akaunti nyingine... Punguza Jiunge na mwingine... +: Saa dakika ili ijae SMS kutoka Mtoa huduma diff --git a/chromium/ash/strings/ash_strings_ta.xtb b/chromium/ash/strings/ash_strings_ta.xtb index dce0b3ef07c..097fe33a02c 100644 --- a/chromium/ash/strings/ash_strings_ta.xtb +++ b/chromium/ash/strings/ash_strings_ta.xtb @@ -2,22 +2,26 @@ பேட்டரி நிரம்பியது -தொடக்கத்தை தானாக மறை மற்றும் போர்ட்டல் நிலை மிகைப்படுத்தி பொத்தான் +270° Bluetooth இயக்கப்பட்டது + ஆகச் சுழற்றப்பட்டது Bluetooth Bluetooth முடக்கப்பட்டது +பிணையத்தை உள்ளமைப்பது தோல்வியடைந்தது பல உள்நுழைவில் மூன்று கணக்குகள் வரை மட்டுமே வைத்திருக்கலாம். Wi-fi ஐ இயக்கு ஒளிர்வு +செயல்திறனைத் தடமறிதல் இயக்கப்பட்டுள்ளது பேட்டரி நேரத்தைக் கணக்கிடுகிறது. நெட்வொர்க் ப்ராக்ஸி... விசைப்பலகை மேல்தோற்றம் அங்கீகரிப்புச் சான்றிதழ் தொலைநிலையில் நிராகரிக்கப்பட்டது Google இயக்ககம் + தெளிவுத்திறன் க்கு மாற்றப்பட்டது HTTP தோல்வியடைந்தது நிலைத் தட்டு PIN இல்லை @@ -34,39 +38,41 @@ குறைந்த சக்திகொண்ட சார்ஜர் நெட்வொர்க் தகவல் எதுவும் இல்லை மொபைல் தரவை அமை +சாதனங்களை நிர்வகி... மொபைல் கணக்கைப் பார்க்கவும் செல்லுலார் பயன்முறையைத் துவக்குகிறது... Hangouts வழியாக உடன் உங்கள் திரையின் கட்டுப்பாட்டைப் பகிர்கிறது. - சுழற்றப்பட்டது Bluetooth ஐ முடக்கு ஸ்கிரீன் ஷாட்டை சேமிப்பதில் தோல்வி புதுப்பிக்க மீண்டும் தொடங்குக அனைவரையும் வெளியேற்று VPN துண்டிக்கப்பட்டது செயலின்றி -% பேட்டரி நிரம்பியது பெரிய மவுஸ் இடஞ்சுட்டி -வழங்கப்பட்ட பயனர் பெயர் அல்லது கடவுச்சொல்லை அங்கீகரிப்பதில் தோல்வி விருந்தினர் மொழிகள் மற்றும் உள்ளீடைத் தனிப்பயனாக்கு... + () +அடுக்கின் நிலை உள்ளீடு குறைந்த சக்தியிலான சார்ஜர் இணைக்கப்பட்டுள்ளது வரம்புக்கு வெளியே தொடர்பைத் துண்டி அங்கீகரிப்புச் சான்றிதழ் பிணையத்தால் நிராகரிக்கப்பட்டது வெளியேறு +180° உள்ளமைவு நிறுத்து மேலும் அறிக... Wi-Fi ஐ முடக்கு -சாதனத்தைச் சேர்க்கவும்... பிரதிபலிக்கிறது +தவறான பயனர்பெயர் அல்லது கடவுச்சொல் காரணமாக PPP அங்கீகாரம் தோல்வியடைந்தது CAPS LOCK இயக்கத்தில் இணையக் காட்சி உங்கள் அமைப்புகளை ஒத்திசைத்த பிறகு, மொழியானது "" இலிருந்து "" க்கு மாற்றப்பட்டுள்ளது. இணைக்கப்பட்டது பேச்சுவடிவ கருத்து Wi-Fi ஐ இயக்கு... +90° உங்கள் உள்ளீட்டு முறையானது க்கு மாற்றப்பட்டது. மாற்ற Shift + Alt ஐ அழுத்தவும். தனிப்பட்ட நெட்வொர்க் @@ -83,11 +89,12 @@ % மீதமுள்ளது உள்ளீட்டு முறைகள் % +அடுக்கு உங்கள் Chromebook இயக்கத்தில் இருக்கும்போது சார்ஜ் செய்ய முடியாது. அதிகாரப்பூர்வ சார்ஜரைப் பயன்படுத்தவும். நிறுத்தம் அளவு +புதுப்பிப்பதற்கு மீண்டும் தொடங்கி, பவர்வாஷ் செய்க DNS தேடுதல் தோல்வி -பேட்டரி நிரம்பியது மேலும் சார்ஜ் ஆகிறது. செல்லுலார் நெட்வொர்க்குகளைத் தேடுகிறது... அறியப்படாத தேடு @@ -96,7 +103,6 @@ பிணைய தகவல் இன்னும் இல் பேட்டரி காலியாகிவிடும் விருந்தினரிலிருந்து வெளியேறவும் -% பேட்டரி நிரம்பியது மேலும் சார்ஜ் ஆகிறது முந்தைய மெனு இன்னொரு கணக்கில் உள்நுழைய முடியாது. வலது @@ -114,6 +120,7 @@ அறியப்படாத பிணையப் பிழை இடது SMS + ஐச் செயல்படுத்துகிறது Wi-Fi பெரிதாக்கு @@ -123,7 +130,6 @@ குறைந்த சக்தியிலான சார்ஜர் செருகப்பட்டுள்ளது. பேட்டரி சார்ஜிங் நம்பகமானதாக இல்லாமல் இருக்கலாம். பூட்டு ஆப்ஸ் - ஆனது க்கு மாற்றியமைக்கப்பட்டது செயலாக்கம் தோல்வி '' நெட்வொர்க்குடன் இணைப்பதில் தோல்வி: Wi-Fi முடக்கத்தில் உள்ளது. @@ -131,6 +137,7 @@ வால்பேப்பரை அமை... ஆன்லைன் நிலை அதிக ஒளி மாறுபாட்டுப் பயன்முறை +, அகப் பிழை இல் பேட்டரி முழுவதும் சார்ஜ் ஆகிவிடும் திரை உருப்பெருக்கி @@ -153,20 +160,24 @@ அமர்விலிருந்து வெளியேறவும் Wi-Fi இயக்கத்தில் உள்ளது. Alt+Search அல்லது Shift +பேட்டரி % நிரம்பியது. அமைப்புகள்... +ஓவர்ஸ்கேன் டாக் பயன்முறை +அடுக்கைத் தானாக மறை இணைக்க கோரப்பட்டது OTASP தோல்வியுற்றது Alt+Search கோப்பு(களை) ஒத்திசைக்கிறது +கண்காணிக்கப்படும் பயனர் 9+ CAPS LOCK முடக்கப்பட்டுள்ளது வெளியேற Control Shift Q ஐ இருமுறை அழுத்தவும். +பேட்டரி % நிரம்பியது, மேலும் சார்ஜ் ஆகிறது. : செயல்படுத்துகிறது... +பேட்டரி நிரம்பியது. உங்களின் அனுமதிக்கப்பட்ட மொபைல் தரவை நீங்கள் பயன்படுத்தி இருக்கலாம். -உட்புறமாக நிர்வகிக்கப்படும் பயனர் -: -துவக்கி நிலை +மாற்றியமை Search அல்லது Shift உதவி CAPS LOCK இயக்கத்தில் உள்ளது. @@ -179,22 +190,24 @@ மோசமான கடவுச்சொற்றொடர் மேலும் அறிக இணைப்பு தோல்வியடைந்தது + வினாடிகளில் பழைய தெளிவுதிறனுக்கு மாற்றியமைக்கப்படும் இந்த அமர்வு நிமிடங்களில் முடியும். நீங்கள் தானாகவே வெளியேற்றப்படுவீர்கள். மோசமான WEP விசை அறியப்படாத நிலை "" க்கு மீண்டும் மாற்று (மறுதொடக்கம் தேவை) SMS செய்திகள்: Google இயக்கக அமைப்புகள்... -துவக்கி CAPS LOCK இயக்கத்தில் உள்ளது. ரத்துசெய்ய Alt+Search அல்லது Shift ஐ அழுத்தவும். பேட்டரி குறைவு (%) +ஏற்கிறேன் : உள்ளது Hangouts மூலமாக உங்கள் திரையின் கட்டுப்பாட்டைப் பகிர்கிறது. நெட்வொர்க் இல்லை இன்னொரு கணக்கில் உள்நுழைக... சிறிதாக்கு மற்றொன்றில் சேர்... +: முழுவதும் சார்ஜ் ஆகும் நேரம் - நி என்ற எண்ணிலிருந்து வந்த SMS சேவை வழங்குநர் diff --git a/chromium/ash/strings/ash_strings_te.xtb b/chromium/ash/strings/ash_strings_te.xtb index 9e37d6251b1..5bac372bd69 100644 --- a/chromium/ash/strings/ash_strings_te.xtb +++ b/chromium/ash/strings/ash_strings_te.xtb @@ -2,22 +2,26 @@ బ్యాటరీ నిండింది -లాంచర్‌ను స్వయంచాలకంగా దాచు మరియు పోర్టల్ స్థితి అతివ్యాప్తి బటన్ +270° Bluetooth ప్రారంభించబడింది + కి తిప్పబడింది Bluetooth Bluetooth నిలిపివేయబడింది +నెట్‌వర్క్‌ని కాన్ఫిగర్ చేయడంలో విఫలమైంది మీరు బహుళ సైన్-ఇన్‌లో గరిష్టంగా మూడు ఖాతాలను మాత్రమే కలిగి ఉండవచ్చు. Wi-fiని ప్రారంభించు ప్రకాశం +పనితీరుని గుర్తించడం ప్రారంభించబడింది బ్యాటరీ సమయాన్ని లెక్కిస్తోంది. నెట్‌వర్క్ ప్రాక్సీ... కీబోర్డ్ అవలోకనం ప్రామాణీకరణ ప్రమాణపత్రం రిమోట్‌లో తిరస్కరించబడింది Google డిస్క్ + రిజల్యూషన్ కి మార్చబడింది HTTP పొందడంలో విఫలమైంది స్థితి ట్రే PIN లేదు @@ -34,39 +38,41 @@ తక్కువ-పవర్ గల ఛార్జర్ నెట్‌వర్క్ సమాచారం అందుబాటులో లేదు మొబైల్ డేటాను సెటప్ చేయి +పరికరాలను నిర్వహించండి... మొబైల్ ఖాతాని వీక్షించండి సెల్యులార్ మోడెమ్‌ను ప్రారంభిస్తోంది... మీ స్క్రీన్ యొక్క నియంత్రణ Hangouts ద్వారా తో భాగస్వామ్యం చేయబడుతోంది. - తిప్పబడింది Bluetoothని నిలిపివేయి స్క్రీన్‌షాట్‌ను సేవ్ చేయడంలో విఫలమైంది నవీకరించడానికి పునఃప్రారంభించండి అందరినీ సైన్ అవుట్ చేయి VPN డిస్‌కనెక్ట్ చేయబడింది ఖాళీగా ఉంది -బ్యాటరీ % నిండింది పెద్ద మౌస్ కర్సర్ -అందించిన వినియోగదారు పేరుతో లేదా పాస్‌వర్డ్‌తో ప్రామాణీకరించడం విఫలమైంది అతిథి భాషలను అనుకూలీకరించి, ఇన్‌పుట్ చెయ్యి... + () +అర స్థానం ఇన్‌పుట్ తక్కువ-పవర్ గల ఛార్జర్ కనెక్ట్ చేయబడింది పరిధిని దాటింది డిస్‌కనెక్ట్ చెయ్యి ప్రామాణీకరణ ప్రమాణపత్రం నెట్‌వర్క్ ద్వారా తిరస్కరించబడింది సైన్ ఔట్ +180° కాన్ఫిగరేషన్ ఆపు మరింత తెలుసుకోండి... Wi-Fiని నిలిపివేయి -పరికరాన్ని జోడించు... ప్రతిబింబిస్తుంది +వినియోగదారు పేరు లేదా పాస్‌వర్డ్ తప్పు అయినందున PPP ప్రామాణీకరణ విఫలమైంది CAPS LOCK ఆన్‌లో ఉంది అంతర్గత ప్రదర్శన మీ సెట్టింగ్‌లను సమకాలీకరించిన తర్వాత Chrome యొక్క భాష "" నుండి ""కి మార్చబడింది. కనెక్ట్ అయింది చదవబడే అభిప్రాయం Wi-Fiని ప్రారంభించు... +90° మీ ఇన్‌పుట్ పద్ధతి కు మార్చబడింది. మారడానికి Shift + Altను నొక్కండి. ప్రైవేట్ నెట్‌వర్క్ @@ -83,11 +89,12 @@ % మిగిలి ఉంది ఇన్‌పుట్ పద్ధతులు % +అర మీ Chromebook ప్రారంభించబడినప్పుడు ఛార్జ్ కాకపోవచ్చు. అధికారిక ఛార్జర్‌ను ఉపయోగించడానికి ప్రయత్నించండి. షట్‌డౌన్ వాల్యూమ్ +నవీకరించడానికి పునఃప్రారంభించి పవర్‌వాష్ చేయండి DNS శోధన విఫలమైంది -బ్యాటరీ నిండింది మరియు చార్జ్ అవుతోంది. సెల్యులార్ నెట్‌వర్క్‌ల కోసం శోధిస్తోంది... తెలియనిది శోధన @@ -96,7 +103,6 @@ నెట్‌వర్క్ సమాచారం బ్యాటరీ ఖాళీ కావడానికి మిగిలి ఉన్న సమయం, అతిథిగా నిష్క్రమించు -బ్యాటరీ % నిండింది మరియు చార్జ్ అవుతోంది మునుపటి మెను మరో ఖాతాకు సైన్ ఇన్ చేయలేరు. కుడి @@ -114,6 +120,7 @@ తెలియని నెట్‌వర్క్ లోపం ఎడమ SMS + ని సక్రియం చేస్తోంది Wi-Fi గరిష్ఠీకరించు @@ -123,7 +130,6 @@ తక్కువ-పవర్ గల ఛార్జర్‌కు ప్లగిన్ చేయబడింది. బ్యాటరీ ఛార్జింగ్ విశ్వసనీయంగా ఉండకపోవచ్చు. లాక్ చేయి Apps - పరిమాణం కి మార్చబడింది సక్రియా విఫలం ''కు నెట్‌వర్క్‌కు కనెక్ట్ చేయడానికి విఫలమైంది: Wi-Fi నిలిపివేయబడింది. @@ -131,6 +137,7 @@ వాల్‌పేపర్‌ను సెట్ చేయి... ఆన్‌లైన్ స్థితి అధిక కాంట్రాస్ట్ మోడ్ +, అంతర్గత లోపం బ్యాటరీ నిండటానికి పట్టే సమయం, స్క్రీన్ మాగ్నిఫైయర్ @@ -153,20 +160,24 @@ సెషన్‌ని నిష్క్రమించు Wi-Fi ప్రారంభించబడింది. Alt+Search లేదా Shift +బ్యాటరీ % నిండింది. సెట్టింగ్‌లు... +ఓవర్‌స్కాన్ డాక్ మోడ్ +అరను స్వయంచాలకంగా దాచు కనెక్ట్ చేయడం అభ్యర్థించబడింది OTASP విఫలమైంది Alt+Search ఫైల్(ల)ను సమకాలీకరిస్తోంది +పర్యవేక్షించబడే వినియోగదారు 9+ CAPS LOCK ఆపివేయబడింది నిష్క్రమించడానికి రెండుసార్లు Control Shift Q నొక్కండి. +బ్యాటరీ % నిండింది మరియు ఛార్జ్ అవుతోంది. : సక్రియం చేస్తోంది... +బ్యాటరీ నిండింది. మీరు మీ మొబైల్ డేటా కేటాయింపును ఉపయోగించి ఉండవచ్చు. -స్థానికంగా నిర్వహించబడే వినియోగదారు -: -లాంచర్ స్థానం +తిరిగి పూర్వ స్థితికి మార్చు Search లేదా Shift సహాయం CAPS LOCK ఆన్‌లో ఉంది. @@ -179,22 +190,24 @@ తప్పుడు పాస్‌ఫ్రేజ్ మరింత తెలుసుకోండి కనెక్ట్ విఫలమైంది +లో తిరిగి పాత రిజల్యూషన్‌కి మార్చబడుతోంది ఈ సెషన్ తర్వాత ముగుస్తుంది. మీరు స్వయంచాలకంగా సైన్ అవుట్ చేయబడతారు. తప్పుడు WEP కీ గుర్తించబడని రాష్ట్రం ""కు వెనుకకి మార్చండి (పునఃప్రారంభం అవసరం) SMS సందేశాలు: Google డిస్క్ సెట్టింగ్‌లు... -లాంచర్ CAPS LOCK ఆన్‌లో ఉంది. రద్దు చేయడానికి Alt+Search లేదా Shiftని నొక్కండి. బ్యాటరీ తక్కువగా ఉంది (%) +ఆమోదించు : మిగిలి ఉంది మీ స్క్రీన్ యొక్క నియంత్రణ Hangouts ద్వారా భాగస్వామ్యం చేయబడుతోంది. ఏ నెట్‌వర్క్ లేదు మరో ఖాతాతో సైన్ ఇన్ చేయి... కనిష్టీకరించు మరొక దానిలో చేరండి... +: నిండే వరకు h m అవుతుంది నుండి SMS కారియర్ diff --git a/chromium/ash/strings/ash_strings_th.xtb b/chromium/ash/strings/ash_strings_th.xtb index a749f023b66..c0d786c12c0 100644 --- a/chromium/ash/strings/ash_strings_th.xtb +++ b/chromium/ash/strings/ash_strings_th.xtb @@ -2,22 +2,26 @@ แบตเตอรี่เต็ม -ตัวเรียกใช้งานแบบซ่อนอัตโนมัติ กับ สถานะพอร์ทัล ปุ่มแบบโอเวอร์โฟลว์ +270° เปิดใช้งานบลูทูธแล้ว + หมุนเวียนเป็น บลูทูธ ปิดใช้งานบลูทูธแล้ว +ล้มเหลวในการกำหนดค่าเครือข่าย คุณสามารถมีได้มากสุดสามบัญชีเท่านั้นในการลงชื่อเข้าสู่ระบบพร้อมกันหลายบัญชี เปิดใช้งาน Wi-Fi ความสว่าง +เปิดใช้งานการติดตามการปฏิบัติงานแล้ว กำลังคำนวณเวลาใช้งานแบตเตอรี่ เครือข่าย พร็อกซี... การวางซ้อนแป้นพิมพ์ ใบรับรองการตรวจสอบสิทธิ์ได้รับการปฏิเสธจากระยะไกล Google ไดรฟ์ +ความละเอียดของ เปลี่ยนเป็น การรับ HTTP ล้มเหลว ถาดสถานะ ไม่พบ PIN @@ -34,39 +38,41 @@ ที่ชาร์จพลังงานต่ำ ไม่มีข้อมูลเครือข่ายที่สามารถใช้งานได้ ตั้งค่าข้อมูลมือถือ +จัดการอุปกรณ์... ดูบัญชีมือถือ กำลังเริ่มต้นโมเด็มมือถือ... กำลังแชร์การควบคุมหน้าจอของคุณด้วย ผ่านแฮงเอาท์ - ถูกหมุนเวียน ปิดใช้งานบลูทูธ ไม่สามารถบันทึกภาพหน้าจอ รีสตาร์ทเพื่ออัปเดต ออกจากระบบทั้งหมด ยกเลิกการเชื่อมต่อ VPN แล้ว ไม่ทำงาน -มีแบตเตอรี่ % เคอร์เซอร์เมาส์ขนาดใหญ่ -ไม่สามารถตรวจสอบสิทธิ์ชื่อผู้ใช้หรือรหัสผ่านที่ให้มาได้ ผู้มาเยือน กำหนดค่าภาษาและการป้อนข้อมูล... + () +ตำแหน่งของชั้นวาง อินพุต เชื่อมต่อกับที่ชาร์จพลังงานต่ำ อยู่นอกระยะสัญญาณ ตัดการเชื่อมต่อ ใบรับรองการตรวจสอบสิทธิ์ได้รับการปฏิเสธจากเครือข่าย ออกจากระบบ +180° การกำหนดค่า หยุด เรียนรู้เพิ่มเติม... ปิดใช้งาน WiFi -เพิ่มอุปกรณ์... กำลังแสดงผล +การตรวจสอบสิทธิ์ PPP ล้มเหลวเนื่องจากชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง Caps Lock เปิดอยู่ จอแสดงผลภายใน เปลี่ยนภาษาจาก "" เป็น "" หลังจากซิงค์การตั้งค่าของคุณ เชื่อมต่อแล้ว การตอบสนองด้วยเสียง เปิด WiFi... +90° วิธีการป้อนข้อมูลของคุณเปลี่ยนแปลงเป็น แล้ว กด Shift + Alt เพื่อสลับ เครือข่ายส่วนบุคคล @@ -83,11 +89,12 @@ เหลืออีก % วิธีการป้อนข้อมูล % +ชั้นวาง Chromebook ของคุณอาจไม่ได้ชาร์จในขณะที่เปิดอยู่ ลองใช้ที่ชาร์จมาตรฐาน ปิด ระดับเสียง +รีสตาร์ทและ Powerwash เพื่ออัปเดต การค้นหา DNS ล้มเหลว -แบตเตอรี่เต็มและกำลังชาร์จ กำลังค้นหาเครือข่ายโทรศัพท์มือถือ... ไม่รู้จัก เครื่องมือค้นหา @@ -96,7 +103,6 @@ ข้อมูลเครือข่าย เวลาที่เหลือกว่าแบตเตอรี่จะหมด, ออกจากเซสชันผู้มาเยือน -มีแบตเตอรี่ % และกำลังชาร์จ เมนูก่อนหน้า ไม่สามารถลงชื่อเข้าใช้บัญชีอื่น ขวา @@ -114,6 +120,7 @@ ข้อผิดพลาดเครือข่ายที่ไม่รู้จัก ซ้าย SMS + กำลังเปิดใช้งาน Wi-Fi ย่อ @@ -123,7 +130,6 @@ เสียบอยู่กับที่ชาร์จพลังงานต่ำ การชาร์จแบตเตอรี่อาจไม่น่าเชื่อถือ ล็อก Apps - ถูกปรับขนาดเป็น การเปิดใช้งานล้มเหลว ไม่สามารถเชื่อมต่อเครือข่าย "": WiFi ปิดอยู่ @@ -131,6 +137,7 @@ ตั้งค่าวอลเปเปอร์... สถานะออนไลน์ โหมดคอนทราสต์สูง +, ข้อผิดพลาดภายใน เวลาที่เหลือกว่าจะชาร์จแบตเตอรี่เต็ม, แว่นขยายหน้าจอ @@ -153,20 +160,24 @@ ออกจากเซสชัน WiFi เปิดอยู่ Alt+ค้นหา หรือ Shift +มีแบตเตอรี่ % การตั้งค่า... +โอเวอร์สแกน โหมดแท่นชาร์จ +ซ่อนชั้นวางโดยอัตโนมัติ ขอเชื่อมต่อ OTASP ล้มเหลว Alt+ค้นหา กำลังซิงค์ ไฟล์ +ผู้ใช้ภายใต้การดูแล 9+ CAPS LOCK ปิดอยู่ กด Control Shift Q สองครั้งเพื่อออก +มีแบตเตอรี่ % และกำลังชาร์จ กำลังเปิดใช้งาน... +แบตเตอรี่เต็ม คุณอาจใช้ข้อมูลมือถือถึงขีดจำกัดแล้ว -ผู้ใช้ที่ได้รับการจัดการในเครื่อง -: -ตำแหน่งของตัวเรียกใช้งาน +ย้อนกลับ ค้นหาหรือ Shift ช่วยเหลือ CAPS LOCK เปิดอยู่ @@ -179,22 +190,24 @@ ข้อความรหัสผ่านไม่ถูกต้อง เรียนรู้เพิ่มเติม การเชื่อมต่อล้มเหลว +เปลี่ยนกลับไปเป็นความละเอียดเดิมภายใน เซสชันนี้จะสิ้นสุดใน ระบบจะลงชื่อออกให้คุณโดยอัตโนมัติ คีย์ WEP ไม่ถูกต้อง สถานะที่ไม่รู้จัก เปลี่ยนกลับเป็น "" (จำเป็นต้องรีสตาร์ต) ข้อความ SMS: การตั้งค่า Google ไดรฟ์... -ตัวเรียกใช้งาน CAPS LOCK เปิดอยู่ กด Alt+ค้นหา หรือ Shift เพื่อยกเลิก แบตเตอรี่ต่ำ (%) +ยอมรับ เหลืออีก : กำลังแชร์การควบคุมหน้าจอผ่านแฮงเอาท์ ไม่มีเครือข่าย ลงชื่อเข้าใช้บัญชีอื่น... ย่อ เชื่อมต่อเครือข่ายอื่น... +: อีก ชม. นาทีจึงจะเต็ม SMS จาก ผู้ให้บริการ diff --git a/chromium/ash/strings/ash_strings_tr.xtb b/chromium/ash/strings/ash_strings_tr.xtb index b6580301792..afc2efc3574 100644 --- a/chromium/ash/strings/ash_strings_tr.xtb +++ b/chromium/ash/strings/ash_strings_tr.xtb @@ -2,22 +2,26 @@ Pil tam dolu -Başlatıcıyı otomatik gizle ve Portal durumu Taşma Düğmesi +270° Bluetooth etkin + dönme ayarı olarak değiştirildi Bluetooth Bluetooth devre dışı +Ağ yapılandırılamadı Çoklu oturum açmada en fazla üç hesabınız olabilir. Kablosuzu Etkinleştir Parlaklık +Performans izleme etkin Pilin süresi hesaplanıyor. Proxy... Klavye Yer Paylaşımı Kimlik doğrulama sertifikası uzaktan reddedildi Google Drive + çözünürlüğü olarak değiştirildi HTTP get işlevi başarısız oldu Durum tepsisi PIN eksik @@ -34,39 +38,41 @@ Geçiş yapmak için ÜstKrktr + Alt tuşlarına basın. Düşük güçlü şarj cihazı Hiçbir ağ bilgisi yok Mobil verileri ayarla +Cihazları yönet... Mobil hesabı görüntüle Hücresel modem başlatılıyor... Ekranınızın denetimi Hangouts üzerinden ile paylaşılıyor. - döndürüldü Bluetooth'u devre dışı bırak Ekran görüntüsü kaydedilemedi Güncellemek için yeniden başlat Tüm kullanıcıların oturumunu kapat VPN bağlantısı kesildi Boşta -Pil % dolu Büyük fare imleci -Sağlanan kullanıcı adı ve şifreyle kimlik doğrulanamadı Misafir Dilleri ve girişi özelleştir... + () +Raf konumu GİRİŞ Düşük güçlü şarj cihazı bağlandı Aralık dışında Bağlantıyı kes Kimlik doğrulama sertifikası ağ tarafından reddedildi Çıkış +180° Yapılandırma Durdur Daha fazla bilgi edinin... Kablosuz bağlantıyı devre dışı bırak -Cihaz ekle... Yansıtılıyor +Yanlış kullanıcı adı veya şifreden dolayı PPP kimlik doğrulaması başarısız oldu CAPS LOCK açık Dahili Ekran Ayarlarınız senkronize edildikten sonra "" olan dil "" olarak değiştirildi. Bağlı Sesli geri bildirim Kablosuz'u aç... +90° Giriş yönteminiz olarak değiştirildi. Geçiş yapmak için ÜstKrktr + Alt tuşlarına basın. Özel Ağ @@ -83,11 +89,12 @@ Geçiş yapmak için ÜstKrktr + Alt tuşlarına basın. % kaldı Giriş yöntemleri % +Raf Chromebook'unuz açıkken şarj edilemeyebilir. Orijinal şarj cihazını kullanmayı düşünün. Kapat Ses +Güncellemek için yeniden başlatın ve Powerwash yapın DNS arama başarısız oldu -Pil dolu ve şarj oluyor. Hücresel ağlar aranıyor... Bilinmiyor Arama @@ -96,7 +103,6 @@ Geçiş yapmak için ÜstKrktr + Alt tuşlarına basın. Ağ Bilgisi Pilin boşalması için kalan süre, Misafir oturumundan çık -Pil % dolu ve şarj oluyor Önceki menü Başka bir hesapta oturum açılamıyor. Sağa @@ -114,6 +120,7 @@ Devre dışı bırakmak için Ctrl+Alt+Z tuşlarına basın. Bilinmeyen ağ hatası Sola SMS + etkinleştiriliyor Kablosuz Büyüt @@ -123,7 +130,6 @@ Devre dışı bırakmak için Ctrl+Alt+Z tuşlarına basın. Düşük güçlü bir şarj cihazına takıldı. Şarj durumu güvenilir olmayabilir. Kilitle Uygulamalar - ekranı olarak yeniden boyutlandırıldı Etkinleştirme hatası '' ağına bağlanamadı: Kablosuz kapalı. @@ -131,6 +137,7 @@ Devre dışı bırakmak için Ctrl+Alt+Z tuşlarına basın. Duvar kağıdını ayarla... Çevrimiçi durumu Yüksek kontrast modu +, Dahili hata Pilin tam olarak şarj olması için kalan süre, Ekran büyüteci @@ -153,20 +160,24 @@ Sunucu mesajı: Oturumdan çık Kablosuz açık. Alt+Arama veya Üst Karakter +Pil % dolu. Ayarlar... +fazla tarama Yuva modu +Rafı otomatik gizle Bağlantı İstendi OTASP başarısız oldu Alt+Arama dosya senkronize ediliyor +Denetlenen kullanıcı 9+ CAPS LOCK kapalı Çıkmak için Ctrl+ÜstKrktr+Q tuşlarına iki kez basın. +Pil % dolu ve şarj oluyor. : Etkinleştiriliyor... +Pil dolu. Mobil veri hakkınızı bitirmiş olabilirsiniz. -Yerel olarak yönetilen kullanıcı -: -Başlatıcı konumu +Geri döndür Arama veya Üst Karakter Yardım CAPS LOCK açık. @@ -179,22 +190,24 @@ Sunucu mesajı: Hatalı parola Daha fazla bilgi edinin Bağlantı başarısız oldu + saniye içinde eski çözünürlüğe dönülüyor Bu oturum içinde sona erecek. Oturumunuz otomatik olarak kapatılacaktır. Hatalı WEP anahtarı Tanınmayan durum Tekrar "" ayarına dön (yeniden başlatmak gerekir) SMS mesajları: Google Drive ayarları... -Başlatıcı CAPS LOCK açık. İptal için Alt+Arama veya Üst Karakter tuşlarına basın. Pil gücü az (%) +Kabul et : kaldı Ekranınızın denetimi Hangouts üzerinden paylaşılıyor. Ağ yok Başka bir hesapta oturum açın... Simge durumuna küçült Başka ağa katıl... +: Tam dolana kadar sa dk var numaradan SMS alındı Operatör diff --git a/chromium/ash/strings/ash_strings_uk.xtb b/chromium/ash/strings/ash_strings_uk.xtb index 711cb63da8f..298cd93d92c 100644 --- a/chromium/ash/strings/ash_strings_uk.xtb +++ b/chromium/ash/strings/ash_strings_uk.xtb @@ -2,22 +2,26 @@ Акумулятор заряджено -Автоматично ховати панель запуску і Стан порталу Кнопка переповнення +270° Bluetooth увімкнено + обернено на Bluetooth Bluetooth вимкнено +Помилка налаштування мережі Паралельно можна входити не більше ніж у три облікові записи. Увімкнути Wi-Fi Яскравість +Відстеження ефективності ввімкнено Обчислення часу роботи акумулятора. Мережа Проксі-сервер... Розкладка клавіатури Сертифікат автентифікації відхилений дистанційно Диск Google +: установлено роздільну здатність Помилка HTTP Контейтер стану Відсутній PIN-код @@ -34,39 +38,41 @@ Зарядний пристрій низької потужності Інформація про мережу не доступна Налаштувати передавання мобільних даних +Керування пристроями… Переглянути обліковий запис для мобільних пристроїв Ініціалізація мобільного модема… Спільний доступ до екрана для користувача через Hangouts. -Екран обернено Вимкнути Bluetooth Не вдалося зберегти знімок екрана Перезапустіть, щоб оновити Вийти з усіх облікових записів VPN від’єднано Простій -Акумулятор заряджений на % Великий курсор миші -Помилка автентифікації за допомогою введеного імені користувача чи пароля Гість Налаштувати мови та введення тексту... + () +Розташування полиці ВХІД Зарядний пристрій низької потужності підключено За межами досяжності Від'єднатися Сертифікат автентифікації відхилений мережею Вийти +180° Конфігурація Зупинити Докладніше... Вимкнути Wi-Fi -Додати пристрій... Дзеркальне відображення +Помилка автентифікації PPP через неправильне ім’я користувача або пароль Режим CAPS LOCK увімкнено Внутрішній екран Після синхронізації налаштувань мову змінено. Попередня: , нова: . Підключено Голосові підказки Увімкнення Wi-Fi… +90° Метод введення змінено на . Щоб переключитися, натисніть Shift + Alt. Приватна мережа @@ -83,11 +89,12 @@ Залишилося % Методи введення % +Полиця Ваш Chromebook може не заряджатися, якщо ввімкнений. Спробуйте скористатися офіційним зарядним пристроєм. Завершення роботи Гучність +Щоб оновити, перезапустіть і скористайтеся функцією Powerwash Помилка пошуку DNS -Акумулятор заряджений і продовжує заряджатися. Пошук мобільних мереж… Невідомо Пошук @@ -96,7 +103,6 @@ Інформація про мережу До розрядження акумулятора залишилося Завершити сеанс у режимі гостя -Акумулятор заряджений на % і продовжує заряджатися Попереднє меню Неможливо ввійти в інший обліковий запис. Праворуч @@ -114,6 +120,7 @@ Невідома помилка мережі Ліворуч SMS + Активація Wi-Fi Збільшити @@ -123,7 +130,6 @@ Підключено до зарядного пристрою низької потужності. Акумулятор може заряджатися неналежним чином. Заблокувати Програми -Роздільну здатність екрана змінено на Помилка активації Не вдалося під’єднатися до мережі "": Wi-Fi вимкнено. @@ -131,6 +137,7 @@ Установити фоновий малюнок... Статус онлайн Режим високого контрасту +, Внутрішня помилка До повного зарядження акумулятора залишилося Лупа @@ -153,20 +160,24 @@ Завершити сеанс Wi-Fi увімкнено. Alt+клавіша пошуку або Shift +Акумулятор заряджений на %. Налаштування... +облямівка екрана Режим док-станції +Автоматично ховати полицю Подано запит на під’єднання Помилка OTASP Alt+клавіша пошуку Синхронізація файлів () +Контрольований користувач 9+ Режим CAPS LOCK вимкнено Двічі натисніть комбінацію клавіш Control Shift Q, щоб вийти. +Акумулятор заряджений на % і заряджається. : активація… +Акумулятор заряджений. Можливо, ви використали свій ліміт мобільного передавання даних. -Локально керований користувач -: -Положення панелі запуску +Повернути Клавіша пошуку або Shift Довідка Клавішу CAPS LOCK увімкнено. @@ -179,22 +190,24 @@ Погана парольна фраза Докладніше Помилка з'єднання +Попередня роздільна здатність повернеться через Сеанс закінчиться за . Ви вийдете автоматично. Поганий WEP-ключ Нерозпізнаний стан Повернутися до мови "" (потрібно перезавантажитися) SMS повідомлень: Налаштування Диска Google... -Панель запуску Клавішу CAPS LOCK увімкнено. Натисніть Alt+клавішу пошуку або Shift, щоб скасувати. Низький заряд акумулятора (%) +Прийняти Залишилося : Спільний доступ до екрана через Hangouts. Немає мережі Увійти в інший обліковий запис… Зменшити Під’єднатися до іншої... +: год. хв. до повного зарядження SMS-повідомлення від Постачальник diff --git a/chromium/ash/strings/ash_strings_vi.xtb b/chromium/ash/strings/ash_strings_vi.xtb index b0affdb44ce..52855111fed 100644 --- a/chromium/ash/strings/ash_strings_vi.xtb +++ b/chromium/ash/strings/ash_strings_vi.xtb @@ -2,22 +2,26 @@ Pin đầy -Tự động ẩn trình khởi chạy Trạng thái cổng Nút tràn +270° Đã bật bluetooth + đã được xoay vòng sang Bluetooth Đã tắt bluetooth +Không định cấu hình mạng được Bạn chỉ có thể có tối đa ba tài khoản khi đăng nhập nhiều tài khoản. Bật Wi-Fi Độ sáng +Đã bật theo dõi hoạt động Đang tính toán thời lượng pin. Mạng Proxy... Lớp phủ bàn phím Chứng chỉ xác thực bị từ chối từ xa Google Drive +Độ phân giải đã được chuyển thành HTTP gặp lỗi Khay trạng thái Thiếu PIN @@ -34,39 +38,41 @@ Nhấn Shift + Alt để chuyển đổi. Bộ sạc công suất thấp Không có thông tin mạng Thiết lập dữ liệu di động +Quản lý thiết bị... Xem tài khoản di động Đang khởi chạy modem di động... Chia sẻ quyền kiểm soát màn hình của bạn với qua Hangouts. - đã được xoay Tắt bluetooth Không lưu được ảnh chụp màn hình Khởi động lại để cập nhật Đăng xuất tất cả Đã ngắt kết nối VPN Rảnh -Pin % đầy Con trỏ chuột lớn -Không thể xác thực với tên người dùng và mật khẩu đã cung cấp Khách Tùy chỉnh ngôn ngữ và dữ liệu nhập... + () +Vị trí giá ĐẦU VÀO Đã kết nối bộ sạc công suất thấp Ngoài vùng phủ sóng Ngắt kết nối Chứng chỉ xác thực bị mạng từ chối Đăng xuất +180° Cấu hình Dừng Tìm hiểu thêm... Tắt Wi-Fi -Thêm thiết bị... Đang phản chiếu +Xác thực PPP không thành công do tên người dùng hoặc mật khẩu không đúng Đang bật CAPS LOCK Màn hình nội bộ Ngôn ngữ đã chuyển từ "" thành "" sau khi đồng bộ hóa cài đặt của bạn. Đã kết nối Phản hồi nói Bật Wi-Fi... +90° Phương thức nhập của bạn đã thay đổi thành . Nhấn Shift + Alt để chuyển đổi. Mạng riêng @@ -83,11 +89,12 @@ Nhấn Shift + Alt để chuyển đổi. Còn lại % Phương thức nhập % +Giá Chromebook của bạn có thể không sạc khi đang bật. Hãy xem xét sử dụng bộ sạc chính thức. Tắt Âm lượng +Khởi động lại và powerwash để cập nhật Tìm kiếm DNS không thành công -Pin đầy và đang sạc. Đang tìm kiếm mạng di động... Không biết Tìm kiếm @@ -96,7 +103,6 @@ Nhấn Shift + Alt để chuyển đổi. Thông tin mạng Thời gian còn lại cho đến khi pin hết, Thoát khỏi phiên khách -Pin % đầy và đang sạc Trình đơn trước Không thể đăng nhập tài khoản khác. Phải @@ -114,6 +120,7 @@ Nhấn Ctrl+Alt+Z để tắt. Lỗi mạng không xác định Trái SMS + Kích hoạt Wi-Fi Phóng to @@ -123,7 +130,6 @@ Nhấn Ctrl+Alt+Z để tắt. Được cắm vào bộ sạc công suất thấp. Việc sạc pin có thể không được đảm bảo. Khóa Ứng dụng - đã được đổi kích thước thành Lỗi kích hoạt Không thể kết nối với mạng '': Wi-Fi đang tắt. @@ -131,6 +137,7 @@ Nhấn Ctrl+Alt+Z để tắt. Đặt hình nền... Trạng thái trực tuyến Chế độ tương phản cao +, Lỗi nội bộ Thời gian còn lại cho đến khi pin được sạc đầy, Phóng to màn hình @@ -153,20 +160,24 @@ Thông báo máy chủ: Thoát khỏi phiên Wi-Fi đang bật. Alt+Search hoặc Shift +Pin đầy %. Cài đặt... +quét quá mức Chế độ gắn đế +Tự động ẩn giá Yêu cầu kết nối OTASP không thành công Alt+Search Đang đồng bộ hóa tệp +Người dùng được giám sát 9+ CAPS LOCK tắt Nhấn Control Shift Q hai lần để thoát. +Pin đầy % và đang sạc. : Đang kích hoạt... +Pin đầy. Có thể bạn đã sử dụng hết dữ liệu di động được phép. -Người dùng được quản lý cục bộ -: -Vị trí trình khởi chạy +Hoàn nguyên Search hoặc Shift Trợ giúp CAPS LOCK đang bật. @@ -179,22 +190,24 @@ Nhấn Search hoặc Shift để hủy. Cụm mật khẩu sai Tìm hiểu thêm Kết nối không thành công +Sẽ hoàn nguyên về độ phân giải cũ sau Phiên này sẽ kết thúc sau . Bạn sẽ tự động bị đăng xuất. Khóa WEP sai Trạng thái không xác định Thay đổi lại thành "" (yêu cầu khởi động lại) Tin nhắn SMS: Cài đặt Google Drive... -Trình khởi chạy CAPS LOCK đang bật. Nhấn Alt+Search hoặc Shift để hủy. Pin yếu (%) +Chấp nhận Còn lại : Chia sẻ quyền kiểm soát màn hình của bạn qua Hangouts. Không có mạng nào Đăng nhập tài khoản khác... Thu nhỏ Tham gia mạng khác... +: g p cho đến khi đầy SMS từ Nhà cung cấp diff --git a/chromium/ash/strings/ash_strings_zh-CN.xtb b/chromium/ash/strings/ash_strings_zh-CN.xtb index 97af7e7a548..18ab6705034 100644 --- a/chromium/ash/strings/ash_strings_zh-CN.xtb +++ b/chromium/ash/strings/ash_strings_zh-CN.xtb @@ -2,22 +2,26 @@ 电池已充满 -自动隐藏启动程序 “门户网站”状态 溢出按钮 +270° 蓝牙已启用 +已旋转为 蓝牙 蓝牙已停用 +无法配置网络 使用多帐户登录时,最多只能有 3 个帐户。 启用 Wi-Fi 亮度 +已启用性能跟踪 正在计算续航时间。 网络 代理... Overlay 键盘 身份验证证书遭到远程拒绝 Google 云端硬盘 +的分辨率已改为 HTTP 获取请求失败 状态栏 缺少 PIN @@ -34,39 +38,41 @@ 低功率充电器 没有可用的网络信息 设置移动数据 +管理设备… 查看移动帐户 正在初始化蜂窝调制解调器... 通过环聊与共享您屏幕的控制权。 -已旋转 停用蓝牙 无法保存屏幕截图 重新启动以进行更新 全部退出 VPN 连接已断开 空闲 -电池电量为 % 大号鼠标光标 -无法使用提供的用户名或密码进行身份验证 访客 自定义语言和输入法... + +底栏的放置 输入 已连接低功率充电器 超出范围 断开连接 身份验证证书遭到网络拒绝 退出 +180° 配置 停止 了解详情... 停用 Wi-Fi -添加设备... 正在镜像 +用户名或密码不正确,导致 PPP 身份验证失败 CAPS LOCK 已打开 内部显示 同步了您的设置后,该语言已由“”更改为“”。 已连接 语音反馈 启用 Wi-Fi... +90° 您的输入法已更改为“”。 按 Shift + Alt 键可进行切换。 专用网 @@ -83,11 +89,12 @@ 剩余电量:% 输入法 % +底栏 您的 Chromebook 在开启期间可能无法充电。建议您使用产品原装的充电器。 关闭 音量 +重新启动并通过 Powerwash 来更新系统 DNS 查找失败 -电池电量已满并处于充电状态。 正在搜索蜂窝网络... 未知 搜索 @@ -96,7 +103,6 @@ 网络信息 电池电量将在 后耗尽 退出访客模式 -电池电量为 % 并处于充电状态 上一菜单 无法登录到其他帐户。 向右 @@ -114,6 +120,7 @@ 未知网络错误 向左 短信 + 正在激活“ Wi-Fi 最大化 @@ -123,7 +130,6 @@ 已插入低功率充电器;可能无法保证充电成功。 锁定 应用 -的分辨率已调整为 激活失败 无法连接到网络“”: Wi-Fi 已关闭。 @@ -131,6 +137,7 @@ 设置壁纸... “在线”状态 高反差模式 + 内部错误 电池电量将在 后充满 屏幕放大镜 @@ -153,20 +160,24 @@ 退出会话 Wi-Fi 已打开。 Alt + 搜索键或 Shift +电池电量为%。 设置... +过扫描 基座模式 +自动隐藏底栏 连接请求已发送 OTASP 失败 Alt + 搜索键 正在同步 个文件 +受监管用户 9+ CAPS LOCK 已关闭 连按两次 Control+Shift+Q 即可退出。 +电池电量为%(正在充电)。 :正在激活… +电池电量已满。 您可能已用尽移动数据配额。 -本地托管用户 - -启动器位置 +还原 搜索键或 Shift 帮助 CAPS LOCK 已开启。 @@ -179,22 +190,24 @@ 密码错误 了解详情 连接失败 +秒后恢复到原分辨率 该会话将在 后结束,到时您将自动退出。 WEP 密钥错误 未知状态 重新更改为“”(需要重启) 短信数: Google 云端硬盘设置... -启动器 Caps Lock 已开启。 按 Alt + 搜索键或 Shift 可取消。 电池电量不足 (%) +接受 可用时长:: 通过环聊共享您屏幕的控制权。 未连接任何网络 登录其他帐户… 最小化 连接其他... + 还需要 小时 分钟才能充满电 发来的短信 运营商 diff --git a/chromium/ash/strings/ash_strings_zh-TW.xtb b/chromium/ash/strings/ash_strings_zh-TW.xtb index 83261ecbf75..ac3d090bb42 100644 --- a/chromium/ash/strings/ash_strings_zh-TW.xtb +++ b/chromium/ash/strings/ash_strings_zh-TW.xtb @@ -2,22 +2,26 @@ 電池已充滿 -自動隱藏啟動器 小時 分鐘 入口網站狀態 溢位按鈕 +270 度 藍牙已啟用 + 已旋轉到 藍牙 藍牙已停用 +無法設定網路 多帳戶登入功能一次只能登入最多 3 個帳戶。 啟用 Wi-Fi 亮度 +效能追蹤已啟用 正在計算電池使用時間。 網路 Proxy... 鍵盤自訂快速鍵 遠端已拒絕驗證憑證 Google 雲端硬碟 + 的解析度已變更為 HTTP 擷取失敗 狀態匣 找不到 PIN @@ -34,39 +38,41 @@ 低功率充電器 沒有可用的網路資訊 設定行動數據 +管理裝置... 查看行動帳戶 正在初始化行動數據機... 透過 Hangouts 與 分享螢幕控制權。 -已旋轉 停用藍牙 無法儲存螢幕擷取畫面 重新啟用即可更新 登出所有使用者 已中斷 VPN 連線 閒置 -電池電量為 % 大型滑鼠游標 -無法使用您所提供的使用者名稱或密碼進行驗證 訪客 自訂語言與輸入法... + () +檔案櫃位置 輸入 已連接低功率充電器 超出範圍 中斷連線 網路已拒絕驗證憑證 登出 +180 度 設定 停止 瞭解詳情... 停用 WiFi -新增裝置... 鏡像 +使用者名稱或密碼錯誤,導致 PPP 驗證失敗 大寫鍵已啟用 內部畫面 同步處理您的設定後,系統已將語言從「」變更為「」。 已連線 互動朗讀 開啟 Wi-Fi... +90 度 您的輸入法已變更為 。 按下 Shift + Alt 鍵即可切換。 私人網路 @@ -83,11 +89,12 @@ 剩餘電量:% 輸入法 % +檔案櫃 您的 Chromebook 可能無法在開機時充電。建議您使用官方提供的充電器。 關閉 音量 +重新啟動並恢復原廠設定以進行更新 DNS 查詢失敗 -電池電量已滿 (充電中)。 正在搜尋行動網路... 不明 搜尋 @@ -96,7 +103,6 @@ 網路資訊 電池剩餘使用時間: 結束訪客工作階段 -電池電量為 % (充電中) 前一個選單 無法登入其他帳戶。 向右 @@ -114,6 +120,7 @@ 不明的網路錯誤 向左 簡訊 + 正在啟用 Wi-Fi 放到最大 @@ -123,7 +130,6 @@ 使用低功率充電器,可能導致充電狀態不穩定。 鎖定 應用程式 -已將 的大小重新調整為 啟用失敗 無法連線至「」: Wi-Fi 已關閉。 @@ -131,6 +137,7 @@ 設定桌布... 線上狀態 高反差模式 + 內部錯誤 電池剩餘充電時間: 畫面放大鏡 @@ -153,20 +160,24 @@ 結束工作階段 Wi-Fi 已開啟。 Alt + 搜尋鍵或 Shift 鍵 +電池電量為 %。 設定... +遮視區域 座架模式 +自動隱藏檔案櫃 已要求連線 OTASP 失敗 Alt + 搜尋鍵 正在同步處理 個檔案 +受監管的使用者 9+ 大寫鍵已關閉 按兩下 Control、Shift 和 Q 鍵即可結束。 +電池電量為 % (充電中)。 :正在啟用... +電池電量已滿。 您可能已用盡行動數據配額。 -本機管理化環境下的使用者 - -啟動器位置 +還原 搜尋鍵或 Shift 鍵 說明 大寫鍵已啟用。 @@ -179,22 +190,24 @@ 通關密語有誤 瞭解詳情 連線失敗 +系統將在 秒後還原成原來的解析度 這個工作階段將在 後結束,系統會自動將您登出。 WEP 金鑰有誤 不明狀態 改回「」(需要重新啟動) 簡訊數: Google 雲端硬碟設定... -啟動器 大寫鍵已啟用。 按下 Alt + 搜尋鍵或 Shift 鍵即可取消。 電池電量不足 (%) +接受 電量剩餘時間:: 透過 Hangouts 分享螢幕控制權。 沒有網路 使用其他帳戶登入... 縮到最小 加入其他網路... + 尚需 小時 分鐘才能充滿電 來自 的簡訊 通訊業者 diff --git a/chromium/ash/system/chromeos/network/network_connect.cc b/chromium/ash/system/chromeos/network/network_connect.cc index 3aca1622223..d733a01fa64 100644 --- a/chromium/ash/system/chromeos/network/network_connect.cc +++ b/chromium/ash/system/chromeos/network/network_connect.cc @@ -66,7 +66,8 @@ void OnConnectFailed(const std::string& service_path, if (error_name == NetworkConnectionHandler::kErrorConnectCanceled) return; - if (error_name == NetworkConnectionHandler::kErrorPassphraseRequired || + if (error_name == flimflam::kErrorBadPassphrase || + error_name == NetworkConnectionHandler::kErrorPassphraseRequired || error_name == NetworkConnectionHandler::kErrorConfigurationRequired || error_name == NetworkConnectionHandler::kErrorAuthenticationRequired) { ash::Shell::GetInstance()->system_tray_delegate()->ConfigureNetwork( @@ -96,7 +97,7 @@ void OnConnectFailed(const std::string& service_path, ShowErrorNotification(error_name, service_path); // Show a configure dialog for ConnectFailed errors. - if (error_name != NetworkConnectionHandler::kErrorConnectFailed) + if (error_name != flimflam::kErrorConnectFailed) return; // If Shill reports an InProgress error, don't try to configure the network. @@ -137,11 +138,10 @@ void CallConnectToNetwork(const std::string& service_path, } void OnActivateFailed(const std::string& service_path, - const std::string& error_name, + const std::string& error_name, scoped_ptr error_data) { NET_LOG_ERROR("Unable to activate network", service_path); - ShowErrorNotification( - NetworkConnectionHandler::kErrorActivateFailed, service_path); + ShowErrorNotification(network_connect::kErrorActivateFailed, service_path); } void OnActivateSucceeded(const std::string& service_path) { @@ -246,6 +246,8 @@ void ConfigureSetProfileSucceeded( namespace network_connect { +const char kErrorActivateFailed[] = "activate-failed"; + void ConnectToNetwork(const std::string& service_path, gfx::NativeWindow owning_window) { const bool check_error_state = true; @@ -254,25 +256,27 @@ void ConnectToNetwork(const std::string& service_path, void ActivateCellular(const std::string& service_path) { NET_LOG_USER("ActivateCellular", service_path); + const NetworkState* cellular = + NetworkHandler::Get()->network_state_handler()-> + GetNetworkState(service_path); + if (!cellular || cellular->type() != flimflam::kTypeCellular) { + NET_LOG_ERROR("ActivateCellular with no Service", service_path); + return; + } const DeviceState* cellular_device = NetworkHandler::Get()->network_state_handler()-> - GetDeviceStateByType(flimflam::kTypeCellular); + GetDeviceState(cellular->device_path()); if (!cellular_device) { NET_LOG_ERROR("ActivateCellular with no Device", service_path); return; } if (!IsDirectActivatedCarrier(cellular_device->carrier())) { // For non direct activation, show the mobile setup dialog which can be - // used to activate the network. - ash::Shell::GetInstance()->system_tray_delegate()->ShowMobileSetup( - service_path); - return; - } - const NetworkState* cellular = - NetworkHandler::Get()->network_state_handler()-> - GetNetworkState(service_path); - if (!cellular || cellular->type() != flimflam::kTypeCellular) { - NET_LOG_ERROR("ActivateCellular with no Service", service_path); + // used to activate the network. Only show the dialog, if an account + // management URL is available. + if (!cellular->payment_url().empty()) + ash::Shell::GetInstance()->system_tray_delegate()->ShowMobileSetup( + service_path); return; } if (cellular->activation_state() == flimflam::kActivationStateActivated) { diff --git a/chromium/ash/system/chromeos/network/network_connect.h b/chromium/ash/system/chromeos/network/network_connect.h index 65c430d073e..06656ce0548 100644 --- a/chromium/ash/system/chromeos/network/network_connect.h +++ b/chromium/ash/system/chromeos/network/network_connect.h @@ -18,6 +18,8 @@ class DictionaryValue; namespace ash { namespace network_connect { +ASH_EXPORT extern const char kErrorActivateFailed[]; + // Requests a network connection and handles any errors and notifications. // |owning_window| is used to parent any UI on failure (e.g. for certificate // enrollment). If NULL, the default window will be used. diff --git a/chromium/ash/system/chromeos/network/network_icon.cc b/chromium/ash/system/chromeos/network/network_icon.cc index efe7e07afc4..bd32a9f8b16 100644 --- a/chromium/ash/system/chromeos/network/network_icon.cc +++ b/chromium/ash/system/chromeos/network/network_icon.cc @@ -620,8 +620,9 @@ void NetworkIconImpl::GetBadges(const NetworkState* network, Badges* badges) { // For networks that are always in roaming don't show roaming badge. const DeviceState* device = handler->GetDeviceState(network->device_path()); - DCHECK(device); - if (!device->provider_requires_roaming()) { + LOG_IF(WARNING, !device) << "Could not find device state for " + << network->device_path(); + if (!device || !device->provider_requires_roaming()) { badges->bottom_right = rb.GetImageSkiaNamed( IconTypeIsDark(icon_type_) ? IDR_AURA_UBER_TRAY_NETWORK_ROAMING_DARK : diff --git a/chromium/ash/system/chromeos/network/network_state_notifier.cc b/chromium/ash/system/chromeos/network/network_state_notifier.cc index 1c971a32a44..47940d5f746 100644 --- a/chromium/ash/system/chromeos/network/network_state_notifier.cc +++ b/chromium/ash/system/chromeos/network/network_state_notifier.cc @@ -35,7 +35,7 @@ string16 GetConnectErrorString(const std::string& error_name) { if (error_name == NetworkConnectionHandler::kErrorConfigureFailed) return l10n_util::GetStringUTF16( IDS_CHROMEOS_NETWORK_ERROR_CONFIGURE_FAILED); - if (error_name == NetworkConnectionHandler::kErrorActivateFailed) + if (error_name == ash::network_connect::kErrorActivateFailed) return l10n_util::GetStringUTF16( IDS_CHROMEOS_NETWORK_ERROR_ACTIVATION_FAILED); return string16(); @@ -71,7 +71,7 @@ void NetworkStateNotifier::NetworkListChanged() { // case a connect attempt fails because a network is no longer visible. if (!connect_failed_network_.empty()) { ShowNetworkConnectError( - NetworkConnectionHandler::kErrorConnectFailed, connect_failed_network_); + flimflam::kErrorConnectFailed, connect_failed_network_); } } @@ -92,7 +92,7 @@ void NetworkStateNotifier::NetworkPropertiesUpdated( // property has been set. if (network->path() == connect_failed_network_ && !network->error().empty()) { ShowNetworkConnectError( - NetworkConnectionHandler::kErrorConnectFailed, connect_failed_network_); + flimflam::kErrorConnectFailed, connect_failed_network_); } // Trigger "Out of credits" notification if the cellular network is the most // recent default network (i.e. we have not switched to another network). @@ -141,7 +141,7 @@ void NetworkStateNotifier::ShowNetworkConnectError( const std::string& service_path) { const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> GetNetworkState(service_path); - if (error_name == NetworkConnectionHandler::kErrorConnectFailed && + if (error_name == flimflam::kErrorConnectFailed && service_path != connect_failed_network_) { // Shill may not have set the Error property yet. First request an update // and wait for either the update to complete or the network list to be diff --git a/chromium/ash/system/chromeos/network/network_state_notifier_unittest.cc b/chromium/ash/system/chromeos/network/network_state_notifier_unittest.cc index d8d036ad653..6e2069deb65 100644 --- a/chromium/ash/system/chromeos/network/network_state_notifier_unittest.cc +++ b/chromium/ash/system/chromeos/network/network_state_notifier_unittest.cc @@ -14,6 +14,7 @@ #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/shill_device_client.h" #include "chromeos/dbus/shill_service_client.h" +#include "chromeos/network/network_connection_handler.h" #include "third_party/cros_system_api/dbus/service_constants.h" namespace { @@ -26,6 +27,8 @@ ash::SystemTray* GetSystemTray() { } // namespace using chromeos::DBusThreadManager; +using chromeos::NetworkHandler; +using chromeos::NetworkConnectionHandler; using chromeos::ShillDeviceClient; using chromeos::ShillServiceClient; @@ -40,12 +43,14 @@ class NetworkStateNotifierTest : public AshTestBase { virtual void SetUp() OVERRIDE { DBusThreadManager::InitializeWithStub(); SetupDefaultShillState(); + NetworkHandler::Initialize(); RunAllPendingInMessageLoop(); AshTestBase::SetUp(); } virtual void TearDown() OVERRIDE { AshTestBase::TearDown(); + NetworkHandler::Shutdown(); DBusThreadManager::Shutdown(); } diff --git a/chromium/ash/system/chromeos/network/sms_observer.h b/chromium/ash/system/chromeos/network/sms_observer.h new file mode 100644 index 00000000000..bc5496780d1 --- /dev/null +++ b/chromium/ash/system/chromeos/network/sms_observer.h @@ -0,0 +1,26 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_SYSTEM_CHROMEOS_NETWORK_SMS_OBSERVER_H +#define ASH_SYSTEM_CHROMEOS_NETWORK_SMS_OBSERVER_H + +namespace base { +class DictionaryValue; +} + +namespace ash { + +const char kSmsNumberKey[] = "number"; +const char kSmsTextKey[] = "text"; + +class SmsObserver { + public: + virtual ~SmsObserver() {} + + virtual void AddMessage(const base::DictionaryValue& message) = 0; +}; + +} // namespace ash + +#endif // ASH_SYSTEM_CHROMEOS_NETWORK_SMS_OBSERVER_H diff --git a/chromium/ash/system/chromeos/network/tray_sms.cc b/chromium/ash/system/chromeos/network/tray_sms.cc index 008129faa5f..982a5643181 100644 --- a/chromium/ash/system/chromeos/network/tray_sms.cc +++ b/chromium/ash/system/chromeos/network/tray_sms.cc @@ -16,8 +16,6 @@ #include "ash/system/tray/tray_notification_view.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" -#include "chromeos/network/network_event_log.h" -#include "chromeos/network/network_handler.h" #include "grit/ash_resources.h" #include "grit/ash_strings.h" #include "ui/base/l10n/l10n_util.h" @@ -37,15 +35,12 @@ const int kMessageListMinHeight = 200; // Top/bottom padding of the text items. const int kPaddingVertical = 10; -const char kSmsNumberKey[] = "number"; -const char kSmsTextKey[] = "text"; - bool GetMessageFromDictionary(const base::DictionaryValue* message, std::string* number, std::string* text) { - if (!message->GetStringWithoutPathExpansion(kSmsNumberKey, number)) + if (!message->GetStringWithoutPathExpansion(ash::kSmsNumberKey, number)) return false; - if (!message->GetStringWithoutPathExpansion(kSmsTextKey, text)) + if (!message->GetStringWithoutPathExpansion(ash::kSmsTextKey, text)) return false; return true; } @@ -286,14 +281,11 @@ TraySms::TraySms(SystemTray* system_tray) default_(NULL), detailed_(NULL), notification_(NULL) { - // TODO(armansito): SMS could be a special case for cellular that requires a - // user (perhaps the owner) to be logged in. If that is the case, then an - // additional check should be done before subscribing for SMS notifications. - chromeos::NetworkHandler::Get()->network_sms_handler()->AddObserver(this); + Shell::GetInstance()->system_tray_notifier()->AddSmsObserver(this); } TraySms::~TraySms() { - chromeos::NetworkHandler::Get()->network_sms_handler()->RemoveObserver(this); + Shell::GetInstance()->system_tray_notifier()->RemoveSmsObserver(this); } views::View* TraySms::CreateDefaultView(user::LoginStatus status) { @@ -335,35 +327,8 @@ void TraySms::DestroyNotificationView() { notification_ = NULL; } -void TraySms::MessageReceived(const base::DictionaryValue& message) { - - std::string message_text; - if (!message.GetStringWithoutPathExpansion( - chromeos::NetworkSmsHandler::kTextKey, &message_text)) { - NET_LOG_ERROR("SMS message contains no content.", ""); - return; - } - // TODO(armansito): A message might be due to a special "Message Waiting" - // state that the message is in. Once SMS handling moves to shill, such - // messages should be filtered there so that this check becomes unnecessary. - if (message_text.empty()) { - NET_LOG_DEBUG("SMS has empty content text. Ignoring.", ""); - return; - } - std::string message_number; - if (!message.GetStringWithoutPathExpansion( - chromeos::NetworkSmsHandler::kNumberKey, &message_number)) { - NET_LOG_DEBUG("SMS contains no number. Ignoring.", ""); - return; - } - - NET_LOG_DEBUG("Received SMS from: " + message_number + " with text: " + - message_text, ""); - - base::DictionaryValue* dict = new base::DictionaryValue(); - dict->SetString(kSmsNumberKey, message_number); - dict->SetString(kSmsTextKey, message_text); - messages_.Append(dict); +void TraySms::AddMessage(const base::DictionaryValue& message) { + messages_.Append(message.DeepCopy()); Update(true); } diff --git a/chromium/ash/system/chromeos/network/tray_sms.h b/chromium/ash/system/chromeos/network/tray_sms.h index 5a79360052a..7fc334b7ebd 100644 --- a/chromium/ash/system/chromeos/network/tray_sms.h +++ b/chromium/ash/system/chromeos/network/tray_sms.h @@ -7,15 +7,15 @@ #include +#include "ash/system/chromeos/network/sms_observer.h" #include "ash/system/tray/system_tray_item.h" #include "base/values.h" -#include "chromeos/network/network_sms_handler.h" namespace ash { namespace internal { class TraySms : public SystemTrayItem, - public chromeos::NetworkSmsHandler::Observer { + public SmsObserver { public: explicit TraySms(SystemTray* system_tray); virtual ~TraySms(); @@ -29,8 +29,8 @@ class TraySms : public SystemTrayItem, virtual void DestroyDetailedView() OVERRIDE; virtual void DestroyNotificationView() OVERRIDE; - // Overridden from chromeos::NetworkSmsHandler::Observer. - virtual void MessageReceived(const base::DictionaryValue& message) OVERRIDE; + // Overridden from SmsObserver. + virtual void AddMessage(const base::DictionaryValue& message) OVERRIDE; protected: class SmsDefaultView; @@ -45,8 +45,7 @@ class TraySms : public SystemTrayItem, // Removes message at |index| from message list. void RemoveMessage(size_t index); - // Called when sms messages have changed (through - // chromeos::NetworkSmsHandler::Observer). + // Called when sms messages have changed (by tray::SmsObserver). void Update(bool notify); base::ListValue& messages() { return messages_; } diff --git a/chromium/ash/system/chromeos/settings/tray_settings.cc b/chromium/ash/system/chromeos/settings/tray_settings.cc index 8153aeae81e..8868b7cf50d 100644 --- a/chromium/ash/system/chromeos/settings/tray_settings.cc +++ b/chromium/ash/system/chromeos/settings/tray_settings.cc @@ -142,6 +142,9 @@ views::View* TraySettings::CreateDefaultView(user::LoginStatus status) { !PowerStatus::Get()->IsBatteryPresent()) return NULL; + if (!ash::Shell::GetInstance()->system_tray_delegate()->ShouldShowSettings()) + return NULL; + CHECK(default_view_ == NULL); default_view_ = new tray::SettingsDefaultView(status); return default_view_; diff --git a/chromium/ash/system/logout_button/logout_button_tray.cc b/chromium/ash/system/logout_button/logout_button_tray.cc deleted file mode 100644 index f62921f1a08..00000000000 --- a/chromium/ash/system/logout_button/logout_button_tray.cc +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ash/system/logout_button/logout_button_tray.h" - -#include "ash/shelf/shelf_types.h" -#include "ash/shell.h" -#include "ash/system/status_area_widget.h" -#include "ash/system/tray/system_tray_delegate.h" -#include "ash/system/tray/system_tray_notifier.h" -#include "ash/system/tray/tray_constants.h" -#include "ash/system/tray/tray_utils.h" -#include "base/logging.h" -#include "grit/ash_resources.h" -#include "third_party/skia/include/core/SkColor.h" -#include "ui/base/events/event.h" -#include "ui/gfx/font.h" -#include "ui/gfx/insets.h" -#include "ui/gfx/size.h" -#include "ui/views/bubble/tray_bubble_view.h" -#include "ui/views/controls/button/label_button.h" -#include "ui/views/controls/button/label_button_border.h" -#include "ui/views/painter.h" - -namespace ash { - -namespace internal { - -namespace { - -const int kLogoutButtonHorizontalExtraPadding = 7; - -const int kLogoutButtonNormalImages[] = { - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_TOP_LEFT, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_TOP, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_TOP_RIGHT, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_LEFT, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_CENTER, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_RIGHT, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_BOTTOM_LEFT, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_BOTTOM, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_BOTTOM_RIGHT -}; - -const int kLogoutButtonPushedImages[] = { - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_TOP_LEFT, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_TOP, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_TOP_RIGHT, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_LEFT, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_CENTER, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_RIGHT, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_BOTTOM_LEFT, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_BOTTOM, - IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_BOTTOM_RIGHT -}; - -class LogoutButton : public views::LabelButton { - public: - LogoutButton(views::ButtonListener* listener); - virtual ~LogoutButton(); - - private: - DISALLOW_COPY_AND_ASSIGN(LogoutButton); -}; - -} // namespace - -LogoutButton::LogoutButton(views::ButtonListener* listener) - : views::LabelButton(listener, base::string16()) { - SetupLabelForTray(label()); - SetFont(GetFont().DeriveFont(0, gfx::Font::NORMAL)); - for (size_t state = 0; state < views::Button::STATE_COUNT; ++state) - SetTextColor(static_cast(state), SK_ColorWHITE); - - views::LabelButtonBorder* border = - new views::LabelButtonBorder(views::Button::STYLE_TEXTBUTTON); - border->SetPainter(false, views::Button::STATE_NORMAL, - views::Painter::CreateImageGridPainter(kLogoutButtonNormalImages)); - border->SetPainter(false, views::Button::STATE_HOVERED, - views::Painter::CreateImageGridPainter(kLogoutButtonNormalImages)); - border->SetPainter(false, views::Button::STATE_PRESSED, - views::Painter::CreateImageGridPainter(kLogoutButtonPushedImages)); - gfx::Insets insets = border->GetInsets(); - insets += gfx::Insets(0, kLogoutButtonHorizontalExtraPadding, - 0, kLogoutButtonHorizontalExtraPadding); - border->set_insets(insets); - set_border(border); - set_animate_on_state_change(false); - - set_min_size(gfx::Size(0, GetShelfItemHeight())); -} - -LogoutButton::~LogoutButton() { -} - -LogoutButtonTray::LogoutButtonTray(StatusAreaWidget* status_area_widget) - : TrayBackgroundView(status_area_widget), - button_(NULL), - login_status_(user::LOGGED_IN_NONE), - show_logout_button_in_tray_(false) { - button_ = new LogoutButton(this); - tray_container()->AddChildView(button_); - tray_container()->set_border(NULL); - Shell::GetInstance()->system_tray_notifier()->AddLogoutButtonObserver(this); -} - -LogoutButtonTray::~LogoutButtonTray() { - Shell::GetInstance()->system_tray_notifier()-> - RemoveLogoutButtonObserver(this); -} - -void LogoutButtonTray::SetShelfAlignment(ShelfAlignment alignment) { - TrayBackgroundView::SetShelfAlignment(alignment); - tray_container()->set_border(NULL); -} - -base::string16 LogoutButtonTray::GetAccessibleNameForTray() { - return button_->GetText(); -} - -void LogoutButtonTray::HideBubbleWithView( - const views::TrayBubbleView* bubble_view) { -} - -bool LogoutButtonTray::ClickedOutsideBubble() { - return false; -} - -void LogoutButtonTray::OnShowLogoutButtonInTrayChanged(bool show) { - show_logout_button_in_tray_ = show; - UpdateVisibility(); -} - -void LogoutButtonTray::ButtonPressed(views::Button* sender, - const ui::Event& event) { - DCHECK_EQ(sender, button_); - Shell::GetInstance()->system_tray_delegate()->SignOut(); -} - -void LogoutButtonTray::UpdateAfterLoginStatusChange( - user::LoginStatus login_status) { - login_status_ = login_status; - const base::string16 title = - GetLocalizedSignOutStringForStatus(login_status, false); - button_->SetText(title); - button_->SetAccessibleName(title); - UpdateVisibility(); -} - -void LogoutButtonTray::UpdateVisibility() { - SetVisible(show_logout_button_in_tray_ && - login_status_ != user::LOGGED_IN_NONE && - login_status_ != user::LOGGED_IN_LOCKED); -} - -} // namespace internal -} // namespace ash diff --git a/chromium/ash/system/logout_button/logout_button_tray.h b/chromium/ash/system/logout_button/logout_button_tray.h deleted file mode 100644 index 5683e5e2654..00000000000 --- a/chromium/ash/system/logout_button/logout_button_tray.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef ASH_SYSTEM_LOGOUT_BUTTON_LOGOUT_BUTTON_TRAY_H_ -#define ASH_SYSTEM_LOGOUT_BUTTON_LOGOUT_BUTTON_TRAY_H_ - -#include "ash/system/logout_button/logout_button_observer.h" -#include "ash/system/tray/tray_background_view.h" -#include "ash/system/user/login_status.h" -#include "base/basictypes.h" -#include "base/compiler_specific.h" -#include "ui/views/controls/button/button.h" - -namespace views { -class LabelButton; -} - -namespace ash { -namespace internal { - -class StatusAreaWidget; - -// Adds a logout button to the launcher's status area if enabled by the -// kShowLogoutButtonInTray pref. -class LogoutButtonTray : public TrayBackgroundView, - public LogoutButtonObserver, - public views::ButtonListener { - public: - explicit LogoutButtonTray(StatusAreaWidget* status_area_widget); - virtual ~LogoutButtonTray(); - - // TrayBackgroundView: - virtual void SetShelfAlignment(ShelfAlignment alignment) OVERRIDE; - virtual base::string16 GetAccessibleNameForTray() OVERRIDE; - virtual void HideBubbleWithView( - const views::TrayBubbleView* bubble_view) OVERRIDE; - virtual bool ClickedOutsideBubble() OVERRIDE; - - // LogoutButtonObserver: - virtual void OnShowLogoutButtonInTrayChanged(bool show) OVERRIDE; - - // views::ButtonListener: - virtual void ButtonPressed(views::Button* sender, - const ui::Event& event) OVERRIDE; - - void UpdateAfterLoginStatusChange(user::LoginStatus login_status); - - private: - void UpdateVisibility(); - - views::LabelButton* button_; // Not owned. - user::LoginStatus login_status_; - bool show_logout_button_in_tray_; - - DISALLOW_COPY_AND_ASSIGN(LogoutButtonTray); -}; - -} // namespace internal -} // namespace ash - -#endif // ASH_SYSTEM_LOGOUT_BUTTON_LOGOUT_BUTTON_TRAY_H_ diff --git a/chromium/ash/system/logout_button/tray_logout_button.cc b/chromium/ash/system/logout_button/tray_logout_button.cc new file mode 100644 index 00000000000..102329c9a22 --- /dev/null +++ b/chromium/ash/system/logout_button/tray_logout_button.cc @@ -0,0 +1,168 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/system/logout_button/tray_logout_button.h" + +#include + +#include "ash/shell.h" +#include "ash/system/tray/system_tray_delegate.h" +#include "ash/system/tray/system_tray_notifier.h" +#include "ash/system/tray/tray_constants.h" +#include "ash/system/user/login_status.h" +#include "base/logging.h" +#include "base/strings/string16.h" +#include "grit/ash_resources.h" +#include "third_party/skia/include/core/SkColor.h" +#include "ui/views/border.h" +#include "ui/views/controls/button/button.h" +#include "ui/views/controls/button/custom_button.h" +#include "ui/views/controls/button/label_button.h" +#include "ui/views/controls/button/label_button_border.h" +#include "ui/views/layout/box_layout.h" +#include "ui/views/view.h" + +namespace { + +const int kLogoutButtonNormalImages[] = { + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_TOP_LEFT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_TOP, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_TOP_RIGHT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_LEFT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_CENTER, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_RIGHT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_BOTTOM_LEFT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_BOTTOM, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_NORMAL_BOTTOM_RIGHT +}; +const int kLogoutButtonHotImages[] = { + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_HOT_TOP_LEFT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_HOT_TOP, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_HOT_TOP_RIGHT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_HOT_LEFT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_HOT_CENTER, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_HOT_RIGHT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_HOT_BOTTOM_LEFT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_HOT_BOTTOM, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_HOT_BOTTOM_RIGHT +}; +const int kLogoutButtonPushedImages[] = { + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_TOP_LEFT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_TOP, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_TOP_RIGHT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_LEFT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_CENTER, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_RIGHT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_BOTTOM_LEFT, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_BOTTOM, + IDR_AURA_UBER_TRAY_LOGOUT_BUTTON_PUSHED_BOTTOM_RIGHT +}; + +} // namespace + +namespace ash { +namespace internal { + +namespace tray { + +class LogoutButton : public views::View, + public views::ButtonListener { + public: + LogoutButton(user::LoginStatus status) : button_(NULL), + login_status_(user::LOGGED_IN_NONE), + show_logout_button_in_tray_(false) { + views::BoxLayout* layout = new views::BoxLayout( + views::BoxLayout::kHorizontal, 0, 0, 0); + layout->set_spread_blank_space(true); + SetLayoutManager(layout); + set_border(views::Border::CreateEmptyBorder( + 0, kTrayLabelItemHorizontalPaddingBottomAlignment, 0, 0)); + + button_ = new views::LabelButton(this, base::string16()); + for (size_t state = 0; state < views::Button::STATE_COUNT; ++state) { + button_->SetTextColor( + static_cast(state), SK_ColorWHITE); + } + button_->SetFont(button_->GetFont().DeriveFont(1)); + views::LabelButtonBorder* border = + new views::LabelButtonBorder(views::Button::STYLE_TEXTBUTTON); + border->SetPainter(false, views::Button::STATE_NORMAL, + views::Painter::CreateImageGridPainter(kLogoutButtonNormalImages)); + border->SetPainter(false, views::Button::STATE_HOVERED, + views::Painter::CreateImageGridPainter(kLogoutButtonHotImages)); + border->SetPainter(false, views::Button::STATE_PRESSED, + views::Painter::CreateImageGridPainter(kLogoutButtonPushedImages)); + button_->set_border(border); + AddChildView(button_); + OnLoginStatusChanged(status); + } + + void OnLoginStatusChanged(user::LoginStatus status) { + login_status_ = status; + const base::string16 title = GetLocalizedSignOutStringForStatus( + login_status_, false); + button_->SetText(title); + button_->SetAccessibleName(title); + UpdateVisibility(); + } + + void OnShowLogoutButtonInTrayChanged(bool show) { + show_logout_button_in_tray_ = show; + UpdateVisibility(); + } + + // Overridden from views::ButtonListener. + virtual void ButtonPressed(views::Button* sender, + const ui::Event& event) OVERRIDE { + DCHECK_EQ(sender, button_); + Shell::GetInstance()->system_tray_delegate()->SignOut(); + } + + private: + void UpdateVisibility() { + SetVisible(show_logout_button_in_tray_ && + login_status_ != user::LOGGED_IN_NONE && + login_status_ != user::LOGGED_IN_LOCKED); + } + + views::LabelButton* button_; + user::LoginStatus login_status_; + bool show_logout_button_in_tray_; + + DISALLOW_COPY_AND_ASSIGN(LogoutButton); +}; + +} // namespace tray + +TrayLogoutButton::TrayLogoutButton(SystemTray* system_tray) + : SystemTrayItem(system_tray), + logout_button_(NULL) { + Shell::GetInstance()->system_tray_notifier()->AddLogoutButtonObserver(this); +} + +TrayLogoutButton::~TrayLogoutButton() { + Shell::GetInstance()->system_tray_notifier()-> + RemoveLogoutButtonObserver(this); +} + +views::View* TrayLogoutButton::CreateTrayView(user::LoginStatus status) { + CHECK(logout_button_ == NULL); + logout_button_ = new tray::LogoutButton(status); + return logout_button_; +} + +void TrayLogoutButton::DestroyTrayView() { + logout_button_ = NULL; +} + +void TrayLogoutButton::UpdateAfterLoginStatusChange(user::LoginStatus status) { + logout_button_->OnLoginStatusChanged(status); +} + +void TrayLogoutButton::OnShowLogoutButtonInTrayChanged(bool show) { + logout_button_->OnShowLogoutButtonInTrayChanged(show); +} + +} // namespace internal +} // namespace ash diff --git a/chromium/ash/system/logout_button/tray_logout_button.h b/chromium/ash/system/logout_button/tray_logout_button.h new file mode 100644 index 00000000000..50ca9f9c2c1 --- /dev/null +++ b/chromium/ash/system/logout_button/tray_logout_button.h @@ -0,0 +1,44 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_SYSTEM_LOGOUT_BUTTON_TRAY_LOGOUT_BUTTON_H_ +#define ASH_SYSTEM_LOGOUT_BUTTON_TRAY_LOGOUT_BUTTON_H_ + +#include "ash/system/logout_button/logout_button_observer.h" +#include "ash/system/tray/system_tray_item.h" +#include "base/basictypes.h" +#include "base/compiler_specific.h" + +namespace ash { +namespace internal { + +namespace tray { +class LogoutButton; +} + +// Adds a logout button to the system tray if enabled by the +// kShowLogoutButtonInTray pref. +class TrayLogoutButton : public SystemTrayItem, public LogoutButtonObserver { + public: + explicit TrayLogoutButton(SystemTray* system_tray); + virtual ~TrayLogoutButton(); + + // Overridden from SystemTrayItem. + virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE; + virtual void DestroyTrayView() OVERRIDE; + virtual void UpdateAfterLoginStatusChange(user::LoginStatus status) OVERRIDE; + + // Overridden from LogoutButtonObserver. + virtual void OnShowLogoutButtonInTrayChanged(bool show) OVERRIDE; + + private: + tray::LogoutButton* logout_button_; + + DISALLOW_COPY_AND_ASSIGN(TrayLogoutButton); +}; + +} // namespace internal +} // namespace ash + +#endif // ASH_SYSTEM_LOGOUT_BUTTON_TRAY_LOGOUT_BUTTON_H_ diff --git a/chromium/ash/system/status_area_widget.cc b/chromium/ash/system/status_area_widget.cc index ed31ba286fd..147251c6f52 100644 --- a/chromium/ash/system/status_area_widget.cc +++ b/chromium/ash/system/status_area_widget.cc @@ -11,7 +11,6 @@ #include "ash/shell_delegate.h" #include "ash/shell_window_ids.h" #include "ash/system/bluetooth/bluetooth_observer.h" -#include "ash/system/logout_button/logout_button_tray.h" #include "ash/system/status_area_widget_delegate.h" #include "ash/system/tray/system_tray.h" #include "ash/system/tray/system_tray_delegate.h" @@ -31,7 +30,6 @@ StatusAreaWidget::StatusAreaWidget(aura::Window* status_container) : status_area_widget_delegate_(new internal::StatusAreaWidgetDelegate), system_tray_(NULL), web_notification_tray_(NULL), - logout_button_tray_(NULL), login_status_(user::LOGGED_IN_NONE) { views::Widget::InitParams params( views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); @@ -50,7 +48,6 @@ StatusAreaWidget::~StatusAreaWidget() { void StatusAreaWidget::CreateTrayViews() { AddSystemTray(); AddWebNotificationTray(); - AddLogoutButtonTray(); SystemTrayDelegate* delegate = ash::Shell::GetInstance()->system_tray_delegate(); DCHECK(delegate); @@ -59,8 +56,6 @@ void StatusAreaWidget::CreateTrayViews() { system_tray_->InitializeTrayItems(delegate); if (web_notification_tray_) web_notification_tray_->Initialize(); - if (logout_button_tray_) - logout_button_tray_->Initialize(); UpdateAfterLoginStatusChange(delegate->GetUserLoginStatus()); } @@ -68,8 +63,6 @@ void StatusAreaWidget::Shutdown() { // Destroy the trays early, causing them to be removed from the view // hierarchy. Do not used scoped pointers since we don't want to destroy them // in the destructor if Shutdown() is not called (e.g. in tests). - delete logout_button_tray_; - logout_button_tray_ = NULL; delete web_notification_tray_; web_notification_tray_ = NULL; delete system_tray_; @@ -114,19 +107,12 @@ void StatusAreaWidget::AddWebNotificationTray() { status_area_widget_delegate_->AddTray(web_notification_tray_); } -void StatusAreaWidget::AddLogoutButtonTray() { - logout_button_tray_ = new LogoutButtonTray(this); - status_area_widget_delegate_->AddTray(logout_button_tray_); -} - void StatusAreaWidget::SetShelfAlignment(ShelfAlignment alignment) { status_area_widget_delegate_->set_alignment(alignment); if (system_tray_) system_tray_->SetShelfAlignment(alignment); if (web_notification_tray_) web_notification_tray_->SetShelfAlignment(alignment); - if (logout_button_tray_) - logout_button_tray_->SetShelfAlignment(alignment); status_area_widget_delegate_->UpdateLayout(); } @@ -148,8 +134,6 @@ void StatusAreaWidget::UpdateAfterLoginStatusChange( system_tray_->UpdateAfterLoginStatusChange(login_status); if (web_notification_tray_) web_notification_tray_->UpdateAfterLoginStatusChange(login_status); - if (logout_button_tray_) - logout_button_tray_->UpdateAfterLoginStatusChange(login_status); } } // namespace internal diff --git a/chromium/ash/system/status_area_widget.h b/chromium/ash/system/status_area_widget.h index 6a4cb2a40aa..5283535f5a0 100644 --- a/chromium/ash/system/status_area_widget.h +++ b/chromium/ash/system/status_area_widget.h @@ -18,7 +18,6 @@ class WebNotificationTray; namespace internal { -class LogoutButtonTray; class StatusAreaWidgetDelegate; class ASH_EXPORT StatusAreaWidget : public views::Widget { @@ -28,7 +27,7 @@ class ASH_EXPORT StatusAreaWidget : public views::Widget { explicit StatusAreaWidget(aura::Window* status_container); virtual ~StatusAreaWidget(); - // Creates the SystemTray, WebNotificationTray and LogoutButtonTray. + // Creates the SystemTray and the WebNotificationTray. void CreateTrayViews(); // Destroys the system tray and web notification tray. Called before @@ -73,13 +72,11 @@ class ASH_EXPORT StatusAreaWidget : public views::Widget { private: void AddSystemTray(); void AddWebNotificationTray(); - void AddLogoutButtonTray(); // Weak pointers to View classes that are parented to StatusAreaWidget: internal::StatusAreaWidgetDelegate* status_area_widget_delegate_; SystemTray* system_tray_; WebNotificationTray* web_notification_tray_; - LogoutButtonTray* logout_button_tray_; user::LoginStatus login_status_; DISALLOW_COPY_AND_ASSIGN(StatusAreaWidget); diff --git a/chromium/ash/system/tray/system_tray.cc b/chromium/ash/system/tray/system_tray.cc index 47157ea46ff..122253f9986 100644 --- a/chromium/ash/system/tray/system_tray.cc +++ b/chromium/ash/system/tray/system_tray.cc @@ -15,6 +15,7 @@ #include "ash/system/date/tray_date.h" #include "ash/system/drive/tray_drive.h" #include "ash/system/ime/tray_ime.h" +#include "ash/system/logout_button/tray_logout_button.h" #include "ash/system/monitor/tray_monitor.h" #include "ash/system/session_length_limit/tray_session_length_limit.h" #include "ash/system/status_area_widget.h" @@ -146,6 +147,7 @@ void SystemTray::InitializeTrayItems(SystemTrayDelegate* delegate) { void SystemTray::CreateItems(SystemTrayDelegate* delegate) { #if !defined(OS_WIN) AddTrayItem(new internal::TraySessionLengthLimit(this)); + AddTrayItem(new internal::TrayLogoutButton(this)); // In multi-profile user mode we can have multiple user tiles. ash::Shell* shell = ash::Shell::GetInstance(); int maximum_user_profiles = diff --git a/chromium/ash/system/tray/system_tray.h b/chromium/ash/system/tray/system_tray.h index b37a643205a..ded64750026 100644 --- a/chromium/ash/system/tray/system_tray.h +++ b/chromium/ash/system/tray/system_tray.h @@ -36,6 +36,7 @@ class UpdateObserver; class UserObserver; #if defined(OS_CHROMEOS) class NetworkObserver; +class SmsObserver; #endif class SystemTrayItem; diff --git a/chromium/ash/system/tray/system_tray_delegate.h b/chromium/ash/system/tray/system_tray_delegate.h index a66726b8232..0742ad147ad 100644 --- a/chromium/ash/system/tray/system_tray_delegate.h +++ b/chromium/ash/system/tray/system_tray_delegate.h @@ -156,6 +156,9 @@ class SystemTrayDelegate { // Shows settings. virtual void ShowSettings() = 0; + // Returns true if settings menu item should appear. + virtual bool ShouldShowSettings() = 0; + // Shows the settings related to date, timezone etc. virtual void ShowDateSettings() = 0; @@ -288,6 +291,16 @@ class SystemTrayDelegate { // Returns whether bluetooth is enabled. virtual bool GetBluetoothEnabled() = 0; + // Retrieves information about the carrier and locale specific |setup_url|. + // If none of the carrier info/setup URL cannot be retrieved, returns false. + // Note: |setup_url| is returned when carrier is not defined (no SIM card). + virtual bool GetCellularCarrierInfo(std::string* carrier_id, + std::string* topup_url, + std::string* setup_url) = 0; + + // Opens the cellular network specific URL. + virtual void ShowCellularURL(const std::string& url) = 0; + // Shows UI for changing proxy settings. virtual void ChangeProxySettings() = 0; diff --git a/chromium/ash/system/tray/system_tray_notifier.cc b/chromium/ash/system/tray/system_tray_notifier.cc index fcdb2d6d5bc..73f619586fd 100644 --- a/chromium/ash/system/tray/system_tray_notifier.cc +++ b/chromium/ash/system/tray/system_tray_notifier.cc @@ -140,6 +140,14 @@ void SystemTrayNotifier::RemoveNetworkObserver(NetworkObserver* observer) { network_observers_.RemoveObserver(observer); } +void SystemTrayNotifier::AddSmsObserver(SmsObserver* observer) { + sms_observers_.AddObserver(observer); +} + +void SystemTrayNotifier::RemoveSmsObserver(SmsObserver* observer) { + sms_observers_.RemoveObserver(observer); +} + void SystemTrayNotifier::AddEnterpriseDomainObserver( EnterpriseDomainObserver* observer) { enterprise_domain_observers_.AddObserver(observer); @@ -318,6 +326,11 @@ void SystemTrayNotifier::NotifyRequestToggleWifi() { RequestToggleWifi()); } +void SystemTrayNotifier::NotifyAddSmsMessage( + const base::DictionaryValue& message) { + FOR_EACH_OBSERVER(SmsObserver, sms_observers_, AddMessage(message)); +} + void SystemTrayNotifier::NotifyEnterpriseDomainChanged() { FOR_EACH_OBSERVER(EnterpriseDomainObserver, enterprise_domain_observers_, OnEnterpriseDomainChanged()); diff --git a/chromium/ash/system/tray/system_tray_notifier.h b/chromium/ash/system/tray/system_tray_notifier.h index 2ae739fe9e3..86210b4d343 100644 --- a/chromium/ash/system/tray/system_tray_notifier.h +++ b/chromium/ash/system/tray/system_tray_notifier.h @@ -13,6 +13,7 @@ #include "ash/system/brightness/brightness_observer.h" #include "ash/system/chromeos/enterprise/enterprise_domain_observer.h" #include "ash/system/chromeos/network/network_observer.h" +#include "ash/system/chromeos/network/sms_observer.h" #include "ash/system/chromeos/tray_tracing.h" #include "ash/system/date/clock_observer.h" #include "ash/system/drive/drive_observer.h" @@ -28,6 +29,7 @@ #if defined(OS_CHROMEOS) #include "ash/system/chromeos/network/network_observer.h" +#include "ash/system/chromeos/network/sms_observer.h" #include "ash/system/chromeos/screen_security/screen_capture_observer.h" #include "ash/system/chromeos/screen_security/screen_share_observer.h" #endif @@ -86,6 +88,9 @@ public: void AddNetworkObserver(NetworkObserver* observer); void RemoveNetworkObserver(NetworkObserver* observer); + void AddSmsObserver(SmsObserver* observer); + void RemoveSmsObserver(SmsObserver* observer); + void AddEnterpriseDomainObserver(EnterpriseDomainObserver* observer); void RemoveEnterpriseDomainObserver(EnterpriseDomainObserver* observer); @@ -126,6 +131,7 @@ public: const std::vector& links); void NotifyClearNetworkMessage(NetworkObserver::MessageType message_type); void NotifyRequestToggleWifi(); + void NotifyAddSmsMessage(const base::DictionaryValue& message); void NotifyEnterpriseDomainChanged(); void NotifyScreenCaptureStart(const base::Closure& stop_callback, const base::string16& sharing_app_name); @@ -155,6 +161,7 @@ public: ObserverList user_observers_; #if defined(OS_CHROMEOS) ObserverList network_observers_; + ObserverList sms_observers_; ObserverList enterprise_domain_observers_; ObserverList screen_capture_observers_; ObserverList screen_share_observers_; diff --git a/chromium/ash/system/tray/test_system_tray_delegate.cc b/chromium/ash/system/tray/test_system_tray_delegate.cc index 44b21fa8ff9..d7a3a551584 100644 --- a/chromium/ash/system/tray/test_system_tray_delegate.cc +++ b/chromium/ash/system/tray/test_system_tray_delegate.cc @@ -114,6 +114,10 @@ base::HourClockType TestSystemTrayDelegate::GetHourClockType() const { void TestSystemTrayDelegate::ShowSettings() { } +bool TestSystemTrayDelegate::ShouldShowSettings() { + return true; +} + void TestSystemTrayDelegate::ShowDateSettings() { } @@ -254,6 +258,15 @@ bool TestSystemTrayDelegate::GetBluetoothEnabled() { return bluetooth_enabled_; } +bool TestSystemTrayDelegate::GetCellularCarrierInfo(std::string* carrier_id, + std::string* topup_url, + std::string* setup_url) { + return false; +} + +void TestSystemTrayDelegate::ShowCellularURL(const std::string& url) { +} + void TestSystemTrayDelegate::ChangeProxySettings() { } diff --git a/chromium/ash/system/tray/test_system_tray_delegate.h b/chromium/ash/system/tray/test_system_tray_delegate.h index 9be9c8ac652..68bb593b843 100644 --- a/chromium/ash/system/tray/test_system_tray_delegate.h +++ b/chromium/ash/system/tray/test_system_tray_delegate.h @@ -38,6 +38,7 @@ class TestSystemTrayDelegate : public SystemTrayDelegate { virtual bool SystemShouldUpgrade() const OVERRIDE; virtual base::HourClockType GetHourClockType() const OVERRIDE; virtual void ShowSettings() OVERRIDE; + virtual bool ShouldShowSettings() OVERRIDE; virtual void ShowDateSettings() OVERRIDE; virtual void ShowNetworkSettings(const std::string& service_path) OVERRIDE; virtual void ShowBluetoothSettings() OVERRIDE; @@ -83,6 +84,10 @@ class TestSystemTrayDelegate : public SystemTrayDelegate { virtual void ShowOtherCellular() OVERRIDE; virtual bool GetBluetoothAvailable() OVERRIDE; virtual bool GetBluetoothEnabled() OVERRIDE; + virtual bool GetCellularCarrierInfo(std::string* carrier_id, + std::string* topup_url, + std::string* setup_url) OVERRIDE; + virtual void ShowCellularURL(const std::string& url) OVERRIDE; virtual void ChangeProxySettings() OVERRIDE; virtual VolumeControlDelegate* GetVolumeControlDelegate() const OVERRIDE; virtual void SetVolumeControlDelegate( diff --git a/chromium/ash/system/tray/tray_background_view.h b/chromium/ash/system/tray/tray_background_view.h index b0f28067f61..4d57d5bab22 100644 --- a/chromium/ash/system/tray/tray_background_view.h +++ b/chromium/ash/system/tray/tray_background_view.h @@ -19,8 +19,7 @@ class StatusAreaWidget; class TrayEventFilter; class TrayBackground; -// Base class for children of StatusAreaWidget: SystemTray, WebNotificationTray, -// LogoutButtonTray. +// Base class for children of StatusAreaWidget: SystemTray, WebNotificationTray. // This class handles setting and animating the background when the Launcher // his shown/hidden. It also inherits from ActionableView so that the tray // items can override PerformAction when clicked on. diff --git a/chromium/ash/system/tray/tray_constants.cc b/chromium/ash/system/tray/tray_constants.cc index 6d4b2e6b90d..6d108c8d029 100644 --- a/chromium/ash/system/tray/tray_constants.cc +++ b/chromium/ash/system/tray/tray_constants.cc @@ -67,17 +67,12 @@ const int kTrayNotificationContentsWidth = kTrayPopupMinWidth - (kTrayPopupPaddingHorizontal / 2) * 3); const int kTraySpacing = 8; const int kAlternateTraySpacing = 4; -const int kShelfItemHeight = 31; -const int kAlternateShelfItemHeight = 38; +// Returns kTraySpacing or kAlternateTraySpacing as applicable +// (Determined by ash::switches::UseAlternateShelfLayout). int GetTraySpacing() { return ash::switches::UseAlternateShelfLayout() ? kAlternateTraySpacing : kTraySpacing; } -int GetShelfItemHeight() { - return ash::switches::UseAlternateShelfLayout() ? - kAlternateShelfItemHeight : kShelfItemHeight; -} - } // namespace ash diff --git a/chromium/ash/system/tray/tray_constants.h b/chromium/ash/system/tray/tray_constants.h index 50b2210bca0..480d5d54a35 100644 --- a/chromium/ash/system/tray/tray_constants.h +++ b/chromium/ash/system/tray/tray_constants.h @@ -66,10 +66,6 @@ extern const int kTrayNotificationContentsWidth; // (Determined by ash::switches::UseAlternateShelfLayout). int GetTraySpacing(); -// Returns kShelfItemHeight or kAlternateShelfItemHeight as applicable -// (Determined by ash::switches::UseAlternateShelfLayout). -int GetShelfItemHeight(); - } // namespace ash #endif // ASH_SYSTEM_TRAY_TRAY_CONSTANTS_H_ diff --git a/chromium/ash/system/tray/tray_image_item.cc b/chromium/ash/system/tray/tray_image_item.cc index 7c5e216c942..d4ff9040ade 100644 --- a/chromium/ash/system/tray/tray_image_item.cc +++ b/chromium/ash/system/tray/tray_image_item.cc @@ -4,13 +4,12 @@ #include "ash/system/tray/tray_image_item.h" -#include "ash/system/tray/system_tray.h" #include "ash/system/tray/tray_item_view.h" #include "ash/system/tray/tray_utils.h" #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/image/image.h" #include "ui/views/controls/image_view.h" -#include "ui/views/layout/box_layout.h" +#include "ui/views/layout/fill_layout.h" namespace ash { namespace internal { @@ -42,7 +41,6 @@ views::View* TrayImageItem::CreateTrayView(user::LoginStatus status) { tray_view_->image_view()->SetImage(ui::ResourceBundle::GetSharedInstance(). GetImageNamed(resource_id_).ToImageSkia()); tray_view_->SetVisible(GetInitialVisibility()); - SetItemAlignment(system_tray()->shelf_alignment()); return tray_view_; } @@ -59,7 +57,6 @@ void TrayImageItem::UpdateAfterLoginStatusChange(user::LoginStatus status) { void TrayImageItem::UpdateAfterShelfAlignmentChange(ShelfAlignment alignment) { SetTrayImageItemBorder(tray_view_, alignment); - SetItemAlignment(alignment); } void TrayImageItem::DestroyTrayView() { @@ -72,22 +69,5 @@ void TrayImageItem::DestroyDefaultView() { void TrayImageItem::DestroyDetailedView() { } -void TrayImageItem::SetItemAlignment(ShelfAlignment alignment) { - // Center the item dependent on the orientation of the shelf. - views::BoxLayout::Orientation layout = views::BoxLayout::kHorizontal; - switch (alignment) { - case ash::SHELF_ALIGNMENT_BOTTOM: - case ash::SHELF_ALIGNMENT_TOP: - layout = views::BoxLayout::kHorizontal; - break; - case ash::SHELF_ALIGNMENT_LEFT: - case ash::SHELF_ALIGNMENT_RIGHT: - layout = views::BoxLayout::kVertical; - break; - } - tray_view_->SetLayoutManager(new views::BoxLayout(layout, 0, 0, 0)); - tray_view_->Layout(); -} - } // namespace internal } // namespace ash diff --git a/chromium/ash/system/tray/tray_image_item.h b/chromium/ash/system/tray/tray_image_item.h index 6dea5c8372f..ebaf30e14a0 100644 --- a/chromium/ash/system/tray/tray_image_item.h +++ b/chromium/ash/system/tray/tray_image_item.h @@ -41,9 +41,6 @@ class TrayImageItem : public SystemTrayItem { ShelfAlignment alignment) OVERRIDE; private: - // Set the alignment of the image depending on the shelf alignment. - void SetItemAlignment(ShelfAlignment alignment); - int resource_id_; TrayItemView* tray_view_; diff --git a/chromium/ash/system/user/tray_user.cc b/chromium/ash/system/user/tray_user.cc index 94a85ea07a5..2ab24a8b8a4 100644 --- a/chromium/ash/system/user/tray_user.cc +++ b/chromium/ash/system/user/tray_user.cc @@ -10,9 +10,7 @@ #include "ash/ash_switches.h" #include "ash/popup_message.h" -#include "ash/root_window_controller.h" #include "ash/session_state_delegate.h" -#include "ash/shelf/shelf_layout_manager.h" #include "ash/shell.h" #include "ash/shell_delegate.h" #include "ash/system/tray/system_tray.h" @@ -1172,7 +1170,7 @@ void TrayUser::UpdateAfterLoginStatusChange(user::LoginStatus status) { need_label = true; break; case user::LOGGED_IN_GUEST: - need_label = true; + need_avatar = true; break; case user::LOGGED_IN_RETAIL_MODE: case user::LOGGED_IN_KIOSK_APP: @@ -1202,8 +1200,6 @@ void TrayUser::UpdateAfterLoginStatusChange(user::LoginStatus status) { if (status == user::LOGGED_IN_LOCALLY_MANAGED) { label_->SetText( bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_LOCALLY_MANAGED_LABEL)); - } else if (status == user::LOGGED_IN_GUEST) { - label_->SetText(bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_GUEST_LABEL)); } if (avatar_ && ash::switches::UseAlternateShelfLayout()) { @@ -1214,12 +1210,6 @@ void TrayUser::UpdateAfterLoginStatusChange(user::LoginStatus status) { avatar_->set_border(NULL); } UpdateAvatarImage(status); - - // Update layout after setting label_ and avatar_ with new login status. - if (Shell::GetPrimaryRootWindowController()->shelf()) - UpdateAfterShelfAlignmentChange( - Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager()-> - GetAlignment()); } void TrayUser::UpdateAfterShelfAlignmentChange(ShelfAlignment alignment) { @@ -1286,10 +1276,19 @@ void TrayUser::UpdateAvatarImage(user::LoginStatus status) { int icon_size = ash::switches::UseAlternateShelfLayout() ? kUserIconLargeSize : kUserIconSize; - avatar_->SetImage( - ash::Shell::GetInstance()->session_state_delegate()->GetUserImage( - multiprofile_index_), - gfx::Size(icon_size, icon_size)); + if (status == user::LOGGED_IN_GUEST) { + int image_name = ash::switches::UseAlternateShelfLayout() ? + IDR_AURA_UBER_TRAY_GUEST_ICON_LARGE : + IDR_AURA_UBER_TRAY_GUEST_ICON; + avatar_->SetImage(*ui::ResourceBundle::GetSharedInstance(). + GetImageNamed(image_name).ToImageSkia(), + gfx::Size(icon_size, icon_size)); + } else { + avatar_->SetImage( + ash::Shell::GetInstance()->session_state_delegate()->GetUserImage( + multiprofile_index_), + gfx::Size(icon_size, icon_size)); + } } } // namespace internal diff --git a/chromium/ash/system/web_notification/web_notification_tray.cc b/chromium/ash/system/web_notification/web_notification_tray.cc index e6bd4925e3e..2a6e2deadca 100644 --- a/chromium/ash/system/web_notification/web_notification_tray.cc +++ b/chromium/ash/system/web_notification/web_notification_tray.cc @@ -58,6 +58,10 @@ namespace ash { namespace internal { namespace { +const int kWebNotificationIconSize = 31; +// Height of the art assets used in alternate shelf layout, +// see ash/ash_switches.h:UseAlternateShelfLayout. +const int kWebNotificationAlternateSize = 38; const SkColor kWebNotificationColorNoUnread = SkColorSetA(SK_ColorWHITE, 128); const SkColor kWebNotificationColorWithUnread = SK_ColorWHITE; @@ -106,15 +110,6 @@ WorkAreaObserver::~WorkAreaObserver() { void WorkAreaObserver::SetSystemTrayHeight(int height) { system_tray_height_ = height; - - // If the shelf is shown during auto-hide state, the distance from the edge - // should be reduced by the height of shelf's shown height. - if (shelf_->visibility_state() == SHELF_AUTO_HIDE && - shelf_->auto_hide_state() == SHELF_AUTO_HIDE_SHOWN) { - system_tray_height_ -= ShelfLayoutManager::GetPreferredShelfSize() - - ShelfLayoutManager::kAutoHideSize; - } - if (system_tray_height_ > 0 && ash::switches::UseAlternateShelfLayout()) system_tray_height_ += message_center::kMarginBetweenItems; @@ -132,23 +127,43 @@ void WorkAreaObserver::OnAutoHideStateChanged(ShelfAutoHideState new_state) { shelf_->shelf_widget()->GetNativeView()); gfx::Rect work_area = display.work_area(); int width = 0; - if ((shelf_->visibility_state() == SHELF_AUTO_HIDE) && - new_state == SHELF_AUTO_HIDE_SHOWN) { - // Since the work_area is already reduced by kAutoHideSize, the inset width - // should be just the difference. - width = ShelfLayoutManager::GetPreferredShelfSize() - - ShelfLayoutManager::kAutoHideSize; + if (shelf_->auto_hide_behavior() != SHELF_AUTO_HIDE_BEHAVIOR_NEVER) { + width = (new_state == SHELF_AUTO_HIDE_HIDDEN) ? + ShelfLayoutManager::kAutoHideSize : + ShelfLayoutManager::GetPreferredShelfSize(); } - work_area.Inset(shelf_->SelectValueForShelfAlignment( - gfx::Insets(0, 0, width, 0), - gfx::Insets(0, width, 0, 0), - gfx::Insets(0, 0, 0, width), - gfx::Insets(width, 0, 0, 0))); - if (system_tray_height_ > 0) { - work_area.set_height( - std::max(0, work_area.height() - system_tray_height_)); - if (shelf_->GetAlignment() == SHELF_ALIGNMENT_TOP) - work_area.set_y(work_area.y() + system_tray_height_); + switch (shelf_->GetAlignment()) { + case SHELF_ALIGNMENT_BOTTOM: + work_area.Inset(0, 0, 0, width); + if (system_tray_height_ > 0) { + work_area.set_height( + std::max(0, work_area.height() - system_tray_height_)); + } + break; + case SHELF_ALIGNMENT_LEFT: + work_area.Inset(width, 0, 0, 0); + // Popups appear on the left bottom only when UI is RTL. + if (base::i18n::IsRTL() && system_tray_height_ > 0) { + work_area.set_height( + std::max(0, work_area.height() - system_tray_height_)); + } + break; + case SHELF_ALIGNMENT_RIGHT: + work_area.Inset(0, 0, width, 0); + // Popups appear on the right bottom only when UI isn't RTL. + if (!base::i18n::IsRTL() && system_tray_height_ > 0) { + work_area.set_height( + std::max(0, work_area.height() - system_tray_height_)); + } + break; + case SHELF_ALIGNMENT_TOP: + work_area.Inset(0, width, 0, 0); + if (system_tray_height_ > 0) { + work_area.set_y(work_area.y() + system_tray_height_); + work_area.set_height( + std::max(0, work_area.height() - system_tray_height_)); + } + break; } collection_->SetDisplayInfo(work_area, display.bounds()); } @@ -226,12 +241,10 @@ class WebNotificationButton : public views::CustomButton { protected: // Overridden from views::ImageButton: virtual gfx::Size GetPreferredSize() OVERRIDE { - const int notification_item_size = GetShelfItemHeight(); - return gfx::Size(notification_item_size, notification_item_size); - } - - virtual int GetHeightForWidth(int width) OVERRIDE { - return GetPreferredSize().height(); + if (ash::switches::UseAlternateShelfLayout()) + return gfx::Size(kWebNotificationAlternateSize, + kWebNotificationAlternateSize); + return gfx::Size(kWebNotificationIconSize, kWebNotificationIconSize); } private: diff --git a/chromium/ash/system/web_notification/web_notification_tray.h b/chromium/ash/system/web_notification/web_notification_tray.h index 1fb9c4d3fbc..d8b2fd3a02a 100644 --- a/chromium/ash/system/web_notification/web_notification_tray.h +++ b/chromium/ash/system/web_notification/web_notification_tray.h @@ -124,7 +124,6 @@ class ASH_EXPORT WebNotificationTray FRIEND_TEST_ALL_PREFIXES(WebNotificationTrayTest, ManyPopupNotifications); FRIEND_TEST_ALL_PREFIXES(WebNotificationTrayTest, PopupShownOnBothDisplays); FRIEND_TEST_ALL_PREFIXES(WebNotificationTrayTest, PopupAndSystemTray); - FRIEND_TEST_ALL_PREFIXES(WebNotificationTrayTest, PopupAndAutoHideShelf); void UpdateTrayContent(); diff --git a/chromium/ash/system/web_notification/web_notification_tray_unittest.cc b/chromium/ash/system/web_notification/web_notification_tray_unittest.cc index 5b67b7d72b4..026500f1798 100644 --- a/chromium/ash/system/web_notification/web_notification_tray_unittest.cc +++ b/chromium/ash/system/web_notification/web_notification_tray_unittest.cc @@ -16,14 +16,8 @@ #include "ash/system/tray/system_tray_item.h" #include "ash/system/tray/test_system_tray_delegate.h" #include "ash/test/ash_test_base.h" -#include "ash/wm/window_properties.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" -#include "ui/aura/client/aura_constants.h" -#include "ui/aura/test/event_generator.h" -#include "ui/aura/window.h" -#include "ui/gfx/display.h" -#include "ui/gfx/screen.h" #include "ui/message_center/message_center_style.h" #include "ui/message_center/message_center_tray.h" #include "ui/message_center/message_center_util.h" @@ -150,10 +144,6 @@ class WebNotificationTrayTest : public test::AshTestBase { return tray->popup_collection_->work_area_; } - bool IsPopupVisible() { - return GetTray()->IsPopupVisible(); - } - private: DISALLOW_COPY_AND_ASSIGN(WebNotificationTrayTest); }; @@ -304,12 +294,8 @@ TEST_F(WebNotificationTrayTest, MAYBE_PopupShownOnBothDisplays) { // RootWindow's bound can be bigger than gfx::Display's work area so that // openingsystem tray doesn't affect at all the work area of popups. #define MAYBE_PopupAndSystemTray PopupAndSystemTray -#define MAYBE_PopupAndAutoHideShelf PopupAndAutoHideShelf -#define MAYBE_PopupAndFullscreen PopupAndFullscreen #else #define MAYBE_PopupAndSystemTray DISABLED_PopupAndSystemTray -#define MAYBE_PopupAndAutoHideShelf DISABLED_PopupAndAutoHideShelf -#define MAYBE_PopupAndFullscreen DISABLED_PopupAndFullscreen #endif TEST_F(WebNotificationTrayTest, MAYBE_PopupAndSystemTray) { @@ -346,115 +332,22 @@ TEST_F(WebNotificationTrayTest, MAYBE_PopupAndSystemTray) { EXPECT_LT(work_area_with_tray_notificaiton.size().GetArea(), work_area_with_notification.size().GetArea()); - // Close the system tray notifications. + // Close the notifications. GetSystemTray()->HideNotificationView(test_item); EXPECT_TRUE(GetTray()->IsPopupVisible()); EXPECT_EQ(work_area.ToString(), GetPopupWorkArea().ToString()); } -TEST_F(WebNotificationTrayTest, MAYBE_PopupAndAutoHideShelf) { +TEST_F(WebNotificationTrayTest, PopupAndSystemTrayAlignment) { + Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager()-> + SetAlignment(SHELF_ALIGNMENT_LEFT); AddNotification("test_id"); - EXPECT_TRUE(GetTray()->IsPopupVisible()); gfx::Rect work_area = GetPopupWorkArea(); - // Shelf's auto-hide state won't be HIDDEN unless window exists. - scoped_ptr window( - CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4))); - internal::ShelfLayoutManager* shelf = - Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager(); - shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); - - EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); - gfx::Rect work_area_auto_hidden = GetPopupWorkArea(); - EXPECT_LT(work_area.size().GetArea(), work_area_auto_hidden.size().GetArea()); - - // Close the window, which shows the shelf. - window.reset(); - EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); - gfx::Rect work_area_auto_shown = GetPopupWorkArea(); - EXPECT_EQ(work_area.ToString(), work_area_auto_shown.ToString()); - - // Create the system tray during auto-hide. - window.reset(CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4))); - TestItem* test_item = new TestItem; - GetSystemTray()->AddTrayItem(test_item); + // System tray is created, but the work area is not affected since the tray + // appears at the left-bottom while the popups appear at the right bottom. GetSystemTray()->ShowDefaultView(BUBBLE_CREATE_NEW); - - EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); - EXPECT_TRUE(GetTray()->IsPopupVisible()); - gfx::Rect work_area_with_tray = GetPopupWorkArea(); - EXPECT_GT(work_area_auto_shown.size().GetArea(), - work_area_with_tray.size().GetArea()); - - // Create tray notification. - GetSystemTray()->ShowNotificationView(test_item); - EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); - gfx::Rect work_area_with_tray_notification = GetPopupWorkArea(); - EXPECT_GT(work_area_with_tray.size().GetArea(), - work_area_with_tray_notification.size().GetArea()); - - // Close the system tray. - GetSystemTray()->ClickedOutsideBubble(); - shelf->UpdateAutoHideState(); - RunAllPendingInMessageLoop(); - EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); - gfx::Rect work_area_hidden_with_tray_notification = GetPopupWorkArea(); - EXPECT_LT(work_area_with_tray_notification.size().GetArea(), - work_area_hidden_with_tray_notification.size().GetArea()); - EXPECT_GT(work_area_auto_hidden.size().GetArea(), - work_area_hidden_with_tray_notification.size().GetArea()); - - // Close the window again, which shows the shelf. - window.reset(); - EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); - gfx::Rect work_area_shown_with_tray_notification = GetPopupWorkArea(); - EXPECT_GT(work_area_hidden_with_tray_notification.size().GetArea(), - work_area_shown_with_tray_notification.size().GetArea()); - EXPECT_GT(work_area_auto_shown.size().GetArea(), - work_area_shown_with_tray_notification.size().GetArea()); -} - -TEST_F(WebNotificationTrayTest, MAYBE_PopupAndFullscreen) { - AddNotification("test_id"); - EXPECT_TRUE(IsPopupVisible()); - gfx::Rect work_area = GetPopupWorkArea(); - - // Checks the work area for normal auto-hidden state. - scoped_ptr window( - CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4))); - internal::ShelfLayoutManager* shelf = - Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager(); - shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); - EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); - gfx::Rect work_area_auto_hidden = GetPopupWorkArea(); - shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); - - // Make the window to use immersive mode. - window->SetProperty(internal::kFullscreenUsesMinimalChromeKey, true); - window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); - RunAllPendingInMessageLoop(); - - // The work area for auto-hidden status of fullscreen is a bit larger - // since it doesn't even have the 3-pixel width. - EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); - gfx::Rect work_area_fullscreen_hidden = GetPopupWorkArea(); - EXPECT_EQ(work_area_auto_hidden.ToString(), - work_area_fullscreen_hidden.ToString()); - - // Move the mouse cursor at the bottom, which shows the shelf. - aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); - gfx::Point bottom_right = - Shell::GetScreen()->GetPrimaryDisplay().bounds().bottom_right(); - bottom_right.Offset(-1, -1); - generator.MoveMouseTo(bottom_right); - shelf->UpdateAutoHideStateNow(); - EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); EXPECT_EQ(work_area.ToString(), GetPopupWorkArea().ToString()); - - generator.MoveMouseTo(work_area.CenterPoint()); - shelf->UpdateAutoHideStateNow(); - EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); - EXPECT_EQ(work_area_auto_hidden.ToString(), GetPopupWorkArea().ToString()); } TEST_F(WebNotificationTrayTest, MAYBE_PopupAndSystemTrayMultiDisplay) { diff --git a/chromium/ash/wm/boot_splash_screen.cc b/chromium/ash/wm/boot_splash_screen.cc new file mode 100644 index 00000000000..202ebe28eeb --- /dev/null +++ b/chromium/ash/wm/boot_splash_screen.cc @@ -0,0 +1,75 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/wm/boot_splash_screen.h" + +#include "third_party/skia/include/core/SkBitmap.h" +#include "ui/aura/root_window.h" +#include "ui/compositor/layer.h" +#include "ui/compositor/layer_type.h" +#include "ui/compositor/scoped_layer_animation_settings.h" +#include "ui/gfx/canvas.h" + +namespace ash { +namespace internal { + +// ui::LayerDelegate that copies the aura host window's content to a ui::Layer. +class BootSplashScreen::CopyHostContentLayerDelegate + : public ui::LayerDelegate { + public: + explicit CopyHostContentLayerDelegate(aura::RootWindow* root_window) + : root_window_(root_window) { + } + + virtual ~CopyHostContentLayerDelegate() {} + + // ui::LayerDelegate overrides: + virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE { + // It'd be safer to copy the area to a canvas in the constructor and then + // copy from that canvas to this one here, but this appears to work (i.e. we + // only call this before we draw our first frame) and it saves us an extra + // copy. + // TODO(derat): Instead of copying the data, use GLX_EXT_texture_from_pixmap + // to create a zero-copy texture (when possible): + // https://codereview.chromium.org/10543125 + root_window_->CopyAreaToSkCanvas( + gfx::Rect(root_window_->GetHostOrigin(), root_window_->GetHostSize()), + gfx::Point(), canvas->sk_canvas()); + } + + virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE {} + + virtual base::Closure PrepareForLayerBoundsChange() OVERRIDE { + return base::Closure(); + } + + private: + aura::RootWindow* root_window_; // not owned + + DISALLOW_COPY_AND_ASSIGN(CopyHostContentLayerDelegate); +}; + +BootSplashScreen::BootSplashScreen(aura::RootWindow* root_window) + : layer_delegate_(new CopyHostContentLayerDelegate(root_window)), + layer_(new ui::Layer(ui::LAYER_TEXTURED)) { + layer_->set_delegate(layer_delegate_.get()); + + ui::Layer* root_layer = root_window->layer(); + layer_->SetBounds(gfx::Rect(root_layer->bounds().size())); + root_layer->Add(layer_.get()); + root_layer->StackAtTop(layer_.get()); +} + +BootSplashScreen::~BootSplashScreen() { +} + +void BootSplashScreen::StartHideAnimation(base::TimeDelta duration) { + ui::ScopedLayerAnimationSettings settings(layer_->GetAnimator()); + settings.SetTransitionDuration(duration); + settings.SetPreemptionStrategy(ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS); + layer_->SetOpacity(0.0f); +} + +} // namespace internal +} // namespace ash diff --git a/chromium/ash/wm/boot_splash_screen.h b/chromium/ash/wm/boot_splash_screen.h new file mode 100644 index 00000000000..f56f49fe195 --- /dev/null +++ b/chromium/ash/wm/boot_splash_screen.h @@ -0,0 +1,53 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_WM_BOOT_SPLASH_SCREEN_H_ +#define ASH_WM_BOOT_SPLASH_SCREEN_H_ + +#include + +#include "base/basictypes.h" +#include "base/memory/scoped_ptr.h" +#include "base/time/time.h" + +namespace aura { +class RootWindow; +} + +namespace ui { +class Layer; +class LayerDelegate; +} + +namespace ash { +namespace internal { + +// BootSplashScreen manages a ui::Layer, stacked at the top of the root layer's +// children, that displays a copy of the initial contents of the host window. +// This allows us to continue displaying the Chrome OS boot splash screen (which +// is displayed before Ash starts) after the compositor has taken over so we can +// animate the transition between the splash screen and the login screen. +class BootSplashScreen { + public: + explicit BootSplashScreen(aura::RootWindow* root_window); + ~BootSplashScreen(); + + // Begins animating |layer_|'s opacity to 0 over |duration|. + void StartHideAnimation(base::TimeDelta duration); + + private: + class CopyHostContentLayerDelegate; + + // Copies the host window's content to |layer_|. + scoped_ptr layer_delegate_; + + scoped_ptr layer_; + + DISALLOW_COPY_AND_ASSIGN(BootSplashScreen); +}; + +} // namespace internal +} // namespace ash + +#endif // ASH_WM_BOOT_SPLASH_SCREEN_H_ diff --git a/chromium/ash/wm/boot_splash_screen_chromeos.cc b/chromium/ash/wm/boot_splash_screen_chromeos.cc deleted file mode 100644 index 00743409ae5..00000000000 --- a/chromium/ash/wm/boot_splash_screen_chromeos.cc +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ash/wm/boot_splash_screen_chromeos.h" - -#include "third_party/skia/include/core/SkBitmap.h" -#include "ui/aura/root_window.h" -#include "ui/base/x/x11_util.h" -#include "ui/compositor/layer.h" -#include "ui/compositor/layer_type.h" -#include "ui/compositor/scoped_layer_animation_settings.h" -#include "ui/gfx/canvas.h" - -namespace ash { -namespace internal { - -// ui::LayerDelegate that copies the aura host window's content to a ui::Layer. -class BootSplashScreen::CopyHostContentLayerDelegate - : public ui::LayerDelegate { - public: - explicit CopyHostContentLayerDelegate(aura::RootWindow* root_window) - : root_window_(root_window) { - } - - virtual ~CopyHostContentLayerDelegate() {} - - // ui::LayerDelegate overrides: - virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE { - // It'd be safer to copy the area to a canvas in the constructor and then - // copy from that canvas to this one here, but this appears to work (i.e. we - // only call this before we draw our first frame) and it saves us an extra - // copy. - // TODO(derat): Instead of copying the data, use GLX_EXT_texture_from_pixmap - // to create a zero-copy texture (when possible): - // https://codereview.chromium.org/10543125 - ui::CopyAreaToCanvas(root_window_->GetAcceleratedWidget(), - gfx::Rect(root_window_->GetHostOrigin(), root_window_->GetHostSize()), - gfx::Point(), canvas); - } - - virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE {} - - virtual base::Closure PrepareForLayerBoundsChange() OVERRIDE { - return base::Closure(); - } - - private: - aura::RootWindow* root_window_; // not owned - - DISALLOW_COPY_AND_ASSIGN(CopyHostContentLayerDelegate); -}; - -BootSplashScreen::BootSplashScreen(aura::RootWindow* root_window) - : layer_delegate_(new CopyHostContentLayerDelegate(root_window)), - layer_(new ui::Layer(ui::LAYER_TEXTURED)) { - layer_->set_delegate(layer_delegate_.get()); - - ui::Layer* root_layer = root_window->layer(); - layer_->SetBounds(gfx::Rect(root_layer->bounds().size())); - root_layer->Add(layer_.get()); - root_layer->StackAtTop(layer_.get()); -} - -BootSplashScreen::~BootSplashScreen() { -} - -void BootSplashScreen::StartHideAnimation(base::TimeDelta duration) { - ui::ScopedLayerAnimationSettings settings(layer_->GetAnimator()); - settings.SetTransitionDuration(duration); - settings.SetPreemptionStrategy(ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS); - layer_->SetOpacity(0.0f); -} - -} // namespace internal -} // namespace ash diff --git a/chromium/ash/wm/boot_splash_screen_chromeos.h b/chromium/ash/wm/boot_splash_screen_chromeos.h deleted file mode 100644 index e844275ad5f..00000000000 --- a/chromium/ash/wm/boot_splash_screen_chromeos.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef ASH_WM_BOOT_SPLASH_SCREEN_CHROMEOS_H_ -#define ASH_WM_BOOT_SPLASH_SCREEN_CHROMEOS_H_ - -#include - -#include "base/basictypes.h" -#include "base/memory/scoped_ptr.h" -#include "base/time/time.h" - -namespace aura { -class RootWindow; -} - -namespace ui { -class Layer; -class LayerDelegate; -} - -namespace ash { -namespace internal { - -// BootSplashScreen manages a ui::Layer, stacked at the top of the root layer's -// children, that displays a copy of the initial contents of the host window. -// This allows us to continue displaying the Chrome OS boot splash screen (which -// is displayed before Ash starts) after the compositor has taken over so we can -// animate the transition between the splash screen and the login screen. -class BootSplashScreen { - public: - explicit BootSplashScreen(aura::RootWindow* root_window); - ~BootSplashScreen(); - - // Begins animating |layer_|'s opacity to 0 over |duration|. - void StartHideAnimation(base::TimeDelta duration); - - private: - class CopyHostContentLayerDelegate; - - // Copies the host window's content to |layer_|. - scoped_ptr layer_delegate_; - - scoped_ptr layer_; - - DISALLOW_COPY_AND_ASSIGN(BootSplashScreen); -}; - -} // namespace internal -} // namespace ash - -#endif // ASH_WM_BOOT_SPLASH_SCREEN_CHROMEOS_H_ diff --git a/chromium/ash/wm/dock/docked_window_layout_manager.cc b/chromium/ash/wm/dock/docked_window_layout_manager.cc index 1dacf5e9fbd..d73a0ccac7d 100644 --- a/chromium/ash/wm/dock/docked_window_layout_manager.cc +++ b/chromium/ash/wm/dock/docked_window_layout_manager.cc @@ -84,58 +84,10 @@ bool IsUsedByLayout(aura::Window* window) { window->type() != aura::client::WINDOW_TYPE_POPUP); } -// A functor used to sort the windows in order of their center Y position. -// |delta| is a pre-calculated distance from the bottom of one window to the top -// of the next. Its value can be positive (gap) or negative (overlap). -// Half of |delta| is used as a transition point at which windows could ideally -// swap positions. -struct CompareWindowPos { - CompareWindowPos(aura::Window* dragged_window, float delta) - : dragged_window_(dragged_window), - delta_(delta / 2) {} - - bool operator()(const aura::Window* win1, const aura::Window* win2) { - const gfx::Rect win1_bounds = win1->GetBoundsInScreen(); - const gfx::Rect win2_bounds = win2->GetBoundsInScreen(); - // If one of the windows is the |dragged_window_| attempt to make an - // earlier swap between the windows than just based on their centers. - // This is possible if the dragged window is at least as tall as the other - // window. - if (win1 == dragged_window_) - return compare_two_windows(win1_bounds, win2_bounds); - if (win2 == dragged_window_) - return !compare_two_windows(win2_bounds, win1_bounds); - // Otherwise just compare the centers. - return win1_bounds.CenterPoint().y() < win2_bounds.CenterPoint().y(); - } - - // Based on center point tries to deduce where the drag is coming from. - // When dragging from below up the transition point is lower. - // When dragging from above down the transition point is higher. - bool compare_bounds(const gfx::Rect dragged, const gfx::Rect other) { - if (dragged.CenterPoint().y() < other.CenterPoint().y()) - return dragged.CenterPoint().y() < other.y() - delta_; - return dragged.CenterPoint().y() < other.bottom() + delta_; - } - - // Performs comparison both ways and selects stable result. - bool compare_two_windows(const gfx::Rect bounds1, const gfx::Rect bounds2) { - // Try comparing windows in both possible orders and see if the comparison - // is stable. - bool result1 = compare_bounds(bounds1, bounds2); - bool result2 = compare_bounds(bounds2, bounds1); - if (result1 != result2) - return result1; - - // Otherwise it is not possible to be sure that the windows will not bounce. - // In this case just compare the centers. - return bounds1.CenterPoint().y() < bounds2.CenterPoint().y(); - } - - private: - aura::Window* dragged_window_; - float delta_; -}; +bool CompareWindowPos(const aura::Window* win1, const aura::Window* win2) { + return win1->GetTargetBounds().CenterPoint().y() < + win2->GetTargetBounds().CenterPoint().y(); +} } // namespace @@ -146,8 +98,6 @@ DockedWindowLayoutManager::DockedWindowLayoutManager( : dock_container_(dock_container), in_layout_(false), dragged_window_(NULL), - is_dragged_window_docked_(false), - is_dragged_from_dock_(false), launcher_(NULL), shelf_layout_manager_(NULL), shelf_hidden_(false), @@ -189,79 +139,106 @@ void DockedWindowLayoutManager::RemoveObserver( } void DockedWindowLayoutManager::StartDragging(aura::Window* window) { + if (window->parent() != dock_container_) + return; DCHECK(!dragged_window_); dragged_window_ = window; - // Start observing a window unless it is docked container's child in which - // case it is already observed. - if (dragged_window_->parent() != dock_container_) - dragged_window_->AddObserver(this); - is_dragged_from_dock_ = window->parent() == dock_container_; - DCHECK(!is_dragged_window_docked_); -} - -void DockedWindowLayoutManager::DockDraggedWindow(aura::Window* window) { - OnWindowDocked(window); Relayout(); } -void DockedWindowLayoutManager::UndockDraggedWindow() { - OnWindowUndocked(); - Relayout(); - is_dragged_from_dock_ = false; -} - void DockedWindowLayoutManager::FinishDragging() { - DCHECK(dragged_window_); - if (is_dragged_window_docked_) - OnWindowUndocked(); - DCHECK (!is_dragged_window_docked_); - // Stop observing a window unless it is docked container's child in which - // case it needs to keep being observed after the drag completes. - if (dragged_window_->parent() != dock_container_) - dragged_window_->RemoveObserver(this); - dragged_window_ = NULL; + if (!dragged_window_) + return; + + // If this is the first window getting docked - update alignment. + if (alignment_ == DOCKED_ALIGNMENT_NONE) { + alignment_ = AlignmentOfWindow(dragged_window_); + } else { + // There were some docked windows before. Check if the |dragged_window_| + // was the only one remaining and if so possibly switch alignment to + // opposite side. Ignore popups. + bool found_docked_window = false; + for (size_t i = 0; i < dock_container_->children().size(); ++i) { + aura::Window* window(dock_container_->children()[i]); + if (window != dragged_window_ && + window->type() != aura::client::WINDOW_TYPE_POPUP) { + found_docked_window = true; + break; + } + } + if (!found_docked_window) + alignment_ = AlignmentOfWindow(dragged_window_); + } + + // We no longer need to observe |dragged_window_| unless it is added back; + if (dragged_window_) { + if (dragged_window_->parent() != dock_container_) + dragged_window_->RemoveObserver(this); + dragged_window_ = NULL; + } + Relayout(); UpdateDockBounds(); } -void DockedWindowLayoutManager::SetLauncher(ash::Launcher* launcher) { - DCHECK(!launcher_); - DCHECK(!shelf_layout_manager_); - launcher_ = launcher; - if (launcher_->shelf_widget()) { - shelf_layout_manager_ = ash::internal::ShelfLayoutManager::ForLauncher( - launcher_->shelf_widget()->GetNativeWindow()); - WillChangeVisibilityState(shelf_layout_manager_->visibility_state()); - shelf_layout_manager_->AddObserver(this); +// static +bool DockedWindowLayoutManager::ShouldWindowDock(aura::Window* window, + const gfx::Point& location) { + DockedWindowLayoutManager* layout_manager = GetDockLayoutManager(window, + location); + const DockedAlignment alignment = layout_manager->CalculateAlignment(); + const gfx::Rect& bounds(window->GetBoundsInScreen()); + const gfx::Rect docked_bounds = (alignment == DOCKED_ALIGNMENT_NONE) ? + layout_manager->dock_container_->GetBoundsInScreen() : + layout_manager->docked_bounds_; + DockedAlignment dock_edge = DOCKED_ALIGNMENT_NONE; + if (alignment == DOCKED_ALIGNMENT_NONE) { + // Check if the window is touching the edge - it may need to get docked. + dock_edge = layout_manager->AlignmentOfWindow(window); + } else if ((docked_bounds.Intersects(bounds) && + docked_bounds.Contains(location)) || + alignment == layout_manager->AlignmentOfWindow(window)) { + // A window is being added to other docked windows (on the same side). + // Both bounds and pointer location are checked because some drags involve + // sticky edges and so the |location| may be outside of the |bounds|. + // It is also possible that all the docked windows are minimized or hidden + // in which case the dragged window needs to be exactly touching the same + // edge that those docked windows were aligned before they got minimized. + dock_edge = alignment; } -} -DockedAlignment DockedWindowLayoutManager::GetAlignmentOfWindow( - const aura::Window* window) const { - const gfx::Rect& bounds(window->GetBoundsInScreen()); - const gfx::Rect docked_bounds = dock_container_->GetBoundsInScreen(); + // Do not allow docking on the same side as launcher shelf. + if (layout_manager->launcher_ && layout_manager->launcher_->shelf_widget()) { + ShelfAlignment shelf_alignment = + layout_manager->launcher_->shelf_widget()->GetAlignment(); + if ((shelf_alignment == SHELF_ALIGNMENT_LEFT && + dock_edge == DOCKED_ALIGNMENT_LEFT) || + (shelf_alignment == SHELF_ALIGNMENT_RIGHT && + dock_edge == DOCKED_ALIGNMENT_RIGHT)) { + dock_edge = DOCKED_ALIGNMENT_NONE; + } + } // Do not allow docking if a window is vertically maximized (as is the case // when it is snapped). const gfx::Rect work_area = - Shell::GetScreen()->GetDisplayNearestWindow(dock_container_).work_area(); + Shell::GetScreen()->GetDisplayNearestWindow(window).work_area(); if (bounds.y() == work_area.y() && bounds.height() == work_area.height()) - return DOCKED_ALIGNMENT_NONE; + dock_edge = DOCKED_ALIGNMENT_NONE; - // Do not allow docking on the same side as launcher shelf. - ShelfAlignment shelf_alignment = SHELF_ALIGNMENT_BOTTOM; - if (launcher_) - shelf_alignment = launcher_->alignment(); + return dock_edge != DOCKED_ALIGNMENT_NONE; +} - if (bounds.x() == docked_bounds.x() && - shelf_alignment != SHELF_ALIGNMENT_LEFT) { - return DOCKED_ALIGNMENT_LEFT; - } - if (bounds.right() == docked_bounds.right() && - shelf_alignment != SHELF_ALIGNMENT_RIGHT) { - return DOCKED_ALIGNMENT_RIGHT; +void DockedWindowLayoutManager::SetLauncher(ash::Launcher* launcher) { + DCHECK(!launcher_); + DCHECK(!shelf_layout_manager_); + launcher_ = launcher; + if (launcher_->shelf_widget()) { + shelf_layout_manager_ = ash::internal::ShelfLayoutManager::ForLauncher( + launcher_->shelf_widget()->GetNativeWindow()); + WillChangeVisibilityState(shelf_layout_manager_->visibility_state()); + shelf_layout_manager_->AddObserver(this); } - return DOCKED_ALIGNMENT_NONE; } DockedAlignment DockedWindowLayoutManager::CalculateAlignment() const { @@ -285,24 +262,22 @@ DockedAlignment DockedWindowLayoutManager::CalculateAlignment() const { // DockLayoutManager, aura::LayoutManager implementation: void DockedWindowLayoutManager::OnWindowResized() { Relayout(); - // When screen resizes update the insets even when dock width or alignment - // does not change. + // When screen resizes we need to update the insets even when dock width or + // alignment does not change. UpdateDockBounds(); } void DockedWindowLayoutManager::OnWindowAddedToLayout(aura::Window* child) { if (child->type() == aura::client::WINDOW_TYPE_POPUP) return; - // Dragged windows are already observed by StartDragging and do not change - // docked alignment during the drag. - if (child == dragged_window_) - return; + // If this is the first window getting docked - update alignment. - if (alignment_ == DOCKED_ALIGNMENT_NONE) { - alignment_ = GetAlignmentOfWindow(child); - DCHECK(alignment_ != DOCKED_ALIGNMENT_NONE); - } - child->AddObserver(this); + if (alignment_ == DOCKED_ALIGNMENT_NONE) + alignment_ = AlignmentOfWindow(child); + // We need to observe a child unless it is a |dragged_window_| that just got + // added back in which case we are already observing it. + if (child != dragged_window_) + child->AddObserver(this); Relayout(); UpdateDockBounds(); } @@ -310,20 +285,36 @@ void DockedWindowLayoutManager::OnWindowAddedToLayout(aura::Window* child) { void DockedWindowLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) { if (child->type() == aura::client::WINDOW_TYPE_POPUP) return; - // Dragged windows are stopped being observed by FinishDragging and do not - // change alignment during the drag. They also cannot be set to be the - // |last_active_window_|. - if (child == dragged_window_) - return; - // If this is the last window, set alignment and maximize the workspace. - if (!IsAnyWindowDocked()) { - alignment_ = DOCKED_ALIGNMENT_NONE; - docked_width_ = 0; + + // Try to find a child that is not a popup and is not being dragged. + bool found_docked_window = false; + for (size_t i = 0; i < dock_container_->children().size(); ++i) { + aura::Window* window(dock_container_->children()[i]); + if (window != dragged_window_ && + window->type() != aura::client::WINDOW_TYPE_POPUP) { + found_docked_window = true; + break; + } } + if (!found_docked_window) + alignment_ = DOCKED_ALIGNMENT_NONE; + + // Keep track of former children if they are dragged as they can be reparented + // temporarily just for the drag. + if (child != dragged_window_) + child->RemoveObserver(this); + if (last_active_window_ == child) last_active_window_ = NULL; - child->RemoveObserver(this); + + // Close the dock and expand workspace work area. Relayout(); + + // When a panel is removed from this layout manager it may still be dragged. + // Delay updating dock and workspace bounds until the drag is completed. This + // preserves the docked area width until the panel drag is finished. + if (child->type() != aura::client::WINDOW_TYPE_PANEL) + UpdateDockBounds(); } void DockedWindowLayoutManager::OnChildWindowVisibilityChanged( @@ -340,8 +331,11 @@ void DockedWindowLayoutManager::OnChildWindowVisibilityChanged( void DockedWindowLayoutManager::SetChildBounds( aura::Window* child, const gfx::Rect& requested_bounds) { - // Whenever one of our windows is moved or resized enforce layout. + // Whenever one of our windows is moved or resized we need to enforce layout. SetChildBoundsDirect(child, requested_bounds); + if (child->type() == aura::client::WINDOW_TYPE_POPUP) + return; + Relayout(); } //////////////////////////////////////////////////////////////////////////////// @@ -394,18 +388,13 @@ void DockedWindowLayoutManager::OnWindowBoundsChanged( aura::Window* window, const gfx::Rect& old_bounds, const gfx::Rect& new_bounds) { - // Only relayout if the dragged window would get docked. - if (window == dragged_window_ && is_dragged_window_docked_) + if (window == dragged_window_) Relayout(); } void DockedWindowLayoutManager::OnWindowDestroying(aura::Window* window) { if (dragged_window_ == window) - FinishDragging(); - DCHECK(!dragged_window_); - DCHECK (!is_dragged_window_docked_); - if (window == last_active_window_) - last_active_window_ = NULL; + dragged_window_ = NULL; } @@ -437,7 +426,7 @@ void DockedWindowLayoutManager::WillChangeVisibilityState( // to allow the full-screen application to use the full screen. // TODO(varkha): ShelfLayoutManager::UpdateVisibilityState sets state to - // SHELF_AUTO_HIDE when in immersive mode. Distinguish this from + // SHELF_AUTO_HIDE when in immersive mode. We need to distinguish this from // when shelf enters auto-hide state based on mouse hover when auto-hide // setting is enabled and hide all windows (immersive mode should hide docked // windows). @@ -473,43 +462,30 @@ void DockedWindowLayoutManager::RestoreWindow(aura::Window* window) { window->Show(); } -void DockedWindowLayoutManager::OnWindowDocked(aura::Window* window) { - DCHECK(!is_dragged_window_docked_); - is_dragged_window_docked_ = true; - - // If there are no other docked windows update alignment. - if (!IsAnyWindowDocked()) - alignment_ = DOCKED_ALIGNMENT_NONE; -} - -void DockedWindowLayoutManager::OnWindowUndocked() { - // If this is the first window getting docked - update alignment. - if (!IsAnyWindowDocked()) - alignment_ = GetAlignmentOfWindow(dragged_window_); - - DCHECK (is_dragged_window_docked_); - is_dragged_window_docked_ = false; -} - -bool DockedWindowLayoutManager::IsAnyWindowDocked() { - return CalculateAlignment() != DOCKED_ALIGNMENT_NONE; +DockedAlignment DockedWindowLayoutManager::AlignmentOfWindow( + const aura::Window* window) const { + const gfx::Rect& bounds(window->GetBoundsInScreen()); + const gfx::Rect docked_bounds = dock_container_->GetBoundsInScreen(); + if (bounds.x() == docked_bounds.x()) + return DOCKED_ALIGNMENT_LEFT; + if (bounds.right() == docked_bounds.right()) + return DOCKED_ALIGNMENT_RIGHT; + return DOCKED_ALIGNMENT_NONE; } void DockedWindowLayoutManager::Relayout() { - if (in_layout_) - return; - if (alignment_ == DOCKED_ALIGNMENT_NONE && !is_dragged_window_docked_) + if (in_layout_ || alignment_ == DOCKED_ALIGNMENT_NONE) return; base::AutoReset auto_reset_in_layout(&in_layout_, true); - gfx::Rect dock_bounds = dock_container_->GetBoundsInScreen(); + gfx::Rect dock_bounds = dock_container_->bounds(); aura::Window* active_window = NULL; aura::Window::Windows visible_windows; docked_width_ = 0; for (size_t i = 0; i < dock_container_->children().size(); ++i) { aura::Window* window(dock_container_->children()[i]); - if (!IsUsedByLayout(window) || window == dragged_window_) + if (!IsUsedByLayout(window)) continue; // If the shelf is currently hidden (full-screen mode), hide window until @@ -529,14 +505,14 @@ void DockedWindowLayoutManager::Relayout() { visible_windows.push_back(window); } - // Consider docked dragged_window_ when fanning out other child windows. - if (is_dragged_window_docked_) { + // Consider windows that were formerly children of the |dock_container_| + // when fanning out other child windows. + if (dragged_window_ && dragged_window_->parent() != dock_container_) visible_windows.push_back(dragged_window_); - DCHECK(!active_window); - active_window = dragged_window_; - } - // Calculate free space or overlap. + // Sort windows by their center positions and fan out overlapping + // windows. + std::sort(visible_windows.begin(), visible_windows.end(), CompareWindowPos); gfx::Display display = Shell::GetScreen()->GetDisplayNearestWindow( dock_container_); const gfx::Rect work_area = display.work_area(); @@ -549,19 +525,15 @@ void DockedWindowLayoutManager::Relayout() { const float delta = (float)available_room / ((available_room > 0 || num_windows <= 1) ? num_windows + 1 : num_windows - 1); - float y_pos = work_area.y() + ((available_room > 0) ? delta : 0); + float y_pos = (available_room > 0) ? delta : 0; - // Sort windows by their center positions and fan out overlapping - // windows. - std::sort(visible_windows.begin(), - visible_windows.end(), - CompareWindowPos(is_dragged_from_dock_ ? dragged_window_ : NULL, - delta)); - is_dragged_from_dock_ = true; for (aura::Window::Windows::const_iterator iter = visible_windows.begin(); iter != visible_windows.end(); ++iter) { aura::Window* window = *iter; - gfx::Rect bounds = window->GetBoundsInScreen(); + gfx::Rect bounds = window->GetTargetBounds(); + // Do not force position of a single window. + if (num_windows == 1) + y_pos = bounds.y(); // Fan out windows evenly distributing the overlap or remaining free space. bounds.set_y(std::max(work_area.y(), @@ -571,27 +543,24 @@ void DockedWindowLayoutManager::Relayout() { // All docked windows other than the one currently dragged remain stuck // to the screen edge. + if (window == dragged_window_) + continue; switch (alignment_) { case DOCKED_ALIGNMENT_LEFT: - bounds.set_x(dock_bounds.x()); + bounds.set_x(0); break; case DOCKED_ALIGNMENT_RIGHT: bounds.set_x(dock_bounds.right() - bounds.width()); break; case DOCKED_ALIGNMENT_NONE: + NOTREACHED() << "Relayout called when dock alignment is 'NONE'"; break; } - if (window == dragged_window_) { - dragged_bounds_ = bounds; - continue; - } - DCHECK_NE(alignment_, DOCKED_ALIGNMENT_NONE); // Keep the dock at least kMinDockWidth when all windows in it overhang. docked_width_ = std::min(kMaxDockWidth, std::max(docked_width_, bounds.width() > kMaxDockWidth ? kMinDockWidth : bounds.width())); - bounds = ScreenAsh::ConvertRectFromScreen(dock_container_, bounds); SetChildBoundsDirect(window, bounds); } UpdateStacking(active_window); @@ -600,7 +569,7 @@ void DockedWindowLayoutManager::Relayout() { void DockedWindowLayoutManager::UpdateDockBounds() { int dock_inset = docked_width_ + (docked_width_ > 0 ? kMinDockGap : 0); gfx::Rect bounds = gfx::Rect( - alignment_ == DOCKED_ALIGNMENT_RIGHT && dock_inset > 0 ? + alignment_ == DOCKED_ALIGNMENT_RIGHT ? dock_container_->bounds().right() - dock_inset: dock_container_->bounds().x(), dock_container_->bounds().y(), @@ -632,7 +601,7 @@ void DockedWindowLayoutManager::UpdateStacking(aura::Window* active_window) { active_window = last_active_window_; } - // Windows are stacked like a deck of cards: + // We want to to stack the windows like a deck of cards: // ,------. // |,------.| // |,------.| @@ -641,7 +610,7 @@ void DockedWindowLayoutManager::UpdateStacking(aura::Window* active_window) { // |`------'| // |`------'| // `------' - // Use the middle of each window to figure out how to stack the window. + // We use the middle of each window to figure out how to stack the window. // This allows us to update the stacking when a window is being dragged around // by the titlebar. std::map window_ordering; @@ -656,7 +625,7 @@ void DockedWindowLayoutManager::UpdateStacking(aura::Window* active_window) { } int active_center_y = active_window->bounds().CenterPoint().y(); - aura::Window* previous_window = NULL; + aura::Window* previous_window = background_widget_->GetNativeWindow(); for (std::map::const_iterator it = window_ordering.begin(); it != window_ordering.end() && it->first < active_center_y; ++it) { @@ -676,8 +645,9 @@ void DockedWindowLayoutManager::UpdateStacking(aura::Window* active_window) { if (active_window->parent() == dock_container_) dock_container_->StackChildAtTop(active_window); - if (active_window != dragged_window_) - last_active_window_ = active_window; + if (dragged_window_ && dragged_window_->parent() == dock_container_) + dock_container_->StackChildAtTop(dragged_window_); + last_active_window_ = active_window; } //////////////////////////////////////////////////////////////////////////////// diff --git a/chromium/ash/wm/dock/docked_window_layout_manager.h b/chromium/ash/wm/dock/docked_window_layout_manager.h index a3019aa7175..aa02b343423 100644 --- a/chromium/ash/wm/dock/docked_window_layout_manager.h +++ b/chromium/ash/wm/dock/docked_window_layout_manager.h @@ -50,9 +50,7 @@ class ShelfLayoutManager; // its layout manager to this instance, e.g.: // dock_container->SetLayoutManager( // new DockedWindowLayoutManager(dock_container)); -// -// TODO(varkha): extend BaseLayoutManager instead of LayoutManager to inherit -// common functionality. + class ASH_EXPORT DockedWindowLayoutManager : public aura::LayoutManager, public ash::ShellObserver, @@ -72,35 +70,26 @@ class ASH_EXPORT DockedWindowLayoutManager virtual void RemoveObserver(DockedWindowLayoutManagerObserver* observer); // Called by a DockedWindowResizer to update which window is being dragged. - // Starts observing the window unless it is a child. void StartDragging(aura::Window* window); - - // Called by a DockedWindowResizer when a dragged window is docked. - void DockDraggedWindow(aura::Window* window); - - // Called by a DockedWindowResizer when a dragged window is no longer docked. - void UndockDraggedWindow(); - - // Called by a DockedWindowResizer when a window is no longer being dragged. - // Stops observing the window unless it is a child. void FinishDragging(); + // Returns true if a window is touching the side of the screen except 2 cases: + // when some other windows are already docked on the other side or + // when launcher (shelf) is aligned on the same side. + static bool ShouldWindowDock(aura::Window* window, + const gfx::Point& location); + ash::Launcher* launcher() { return launcher_; } void SetLauncher(ash::Launcher* launcher); - // Calculates if a window is touching the screen edges and returns edge. - DockedAlignment GetAlignmentOfWindow(const aura::Window* window) const; - // Used to snap docked windows to the side of screen during drag. DockedAlignment CalculateAlignment() const; - aura::Window* dock_container() const { return dock_container_; } - // Returns current bounding rectangle of docked windows area. const gfx::Rect& docked_bounds() const { return docked_bounds_; } - // Returns last known coordinates of |dragged_window_| after Relayout. - const gfx::Rect dragged_bounds() const { return dragged_bounds_;} + // Currently dragged window should be able to dock on another screen + aura::Window* dragged_window() const { return dragged_window_;} // aura::LayoutManager: virtual void OnWindowResized() OVERRIDE; @@ -154,14 +143,8 @@ class ASH_EXPORT DockedWindowLayoutManager void MinimizeWindow(aura::Window* window); void RestoreWindow(aura::Window* window); - // Updates docked layout state when a window gets inside the dock. - void OnWindowDocked(aura::Window* window); - - // Updates docked layout state when a window gets outside the dock. - void OnWindowUndocked(); - - // Returns true if there are any windows currently docked. - bool IsAnyWindowDocked(); + // Calculates if a window is touching the screen edges and returns edge. + DockedAlignment AlignmentOfWindow(const aura::Window* window) const; // Called whenever the window layout might change. void Relayout(); @@ -182,21 +165,8 @@ class ASH_EXPORT DockedWindowLayoutManager aura::Window* dock_container_; // Protect against recursive calls to Relayout(). bool in_layout_; - - // A window that is being dragged (whether docked or not). - // Windows are tracked by docked layout manager only if they are docked; - // however we need to know if a window is being dragged in order to avoid - // positioning it or even considering it for layout. + // The docked window being dragged. aura::Window* dragged_window_; - - // True if the window being dragged is currently docked. - bool is_dragged_window_docked_; - - // Previously docked windows use a more relaxed dragging sorting algorithm - // that uses assumption that a window starts being dragged out of position - // that was previously established in Relayout. This allows easier reordering. - bool is_dragged_from_dock_; - // The launcher we are observing for launcher icon changes. Launcher* launcher_; // The shelf layout manager being observed for visibility changes. @@ -210,9 +180,6 @@ class ASH_EXPORT DockedWindowLayoutManager // Last bounds that were sent to observers. gfx::Rect docked_bounds_; - // Target bounds of a docked window being dragged. - gfx::Rect dragged_bounds_; - // Side of the screen that the dock is positioned at. DockedAlignment alignment_; diff --git a/chromium/ash/wm/dock/docked_window_layout_manager_unittest.cc b/chromium/ash/wm/dock/docked_window_layout_manager_unittest.cc index b2f6ffd9cf4..cf7b476f26a 100644 --- a/chromium/ash/wm/dock/docked_window_layout_manager_unittest.cc +++ b/chromium/ash/wm/dock/docked_window_layout_manager_unittest.cc @@ -5,7 +5,6 @@ #include "ash/wm/dock/docked_window_layout_manager.h" #include "ash/ash_switches.h" -#include "ash/display/display_controller.h" #include "ash/launcher/launcher.h" #include "ash/launcher/launcher_model.h" #include "ash/root_window_controller.h" @@ -28,7 +27,6 @@ #include "ui/aura/root_window.h" #include "ui/aura/window.h" #include "ui/base/hit_test.h" -#include "ui/gfx/screen.h" #include "ui/views/widget/widget.h" namespace ash { @@ -62,6 +60,11 @@ class DockedWindowLayoutManagerTest DOCKED_EDGE_RIGHT, }; + enum DockedState { + UNDOCKED, + DOCKED, + }; + aura::Window* CreateTestWindow(const gfx::Rect& bounds) { aura::Window* window = CreateTestWindowInShellWithDelegateAndType( NULL, @@ -133,10 +136,12 @@ class DockedWindowLayoutManagerTest // Docked windows are parented by dock container during drags. // All other windows that we are testing here have default container as a // parent. - int CorrectContainerIdDuringDrag() { + int CorrectContainerIdDuringDrag(DockedState is_docked) { if (window_type_ == aura::client::WINDOW_TYPE_PANEL) return internal::kShellWindowId_PanelContainer; - return internal::kShellWindowId_DockedContainer; + if (is_docked == DOCKED) + return internal::kShellWindowId_DockedContainer; + return internal::kShellWindowId_DefaultContainer; } // Test dragging the window vertically (to detach if it is a panel) and then @@ -181,7 +186,7 @@ class DockedWindowLayoutManagerTest // Drag enough to detach since our tests assume panels to be initially // detached. DragMove(0, dy); - EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); + EXPECT_EQ(CorrectContainerIdDuringDrag(UNDOCKED), window->parent()->id()); EXPECT_EQ(initial_bounds.x(), window->GetBoundsInScreen().x()); EXPECT_EQ(initial_bounds.y() + dy, window->GetBoundsInScreen().y()); @@ -203,7 +208,7 @@ class DockedWindowLayoutManagerTest else if (edge == DOCKED_EDGE_RIGHT) dx += window->GetRootWindow()->bounds().right() - initial_bounds.right(); DragMove(dx, window_type_ == aura::client::WINDOW_TYPE_PANEL ? 0 : dy); - EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); + EXPECT_EQ(CorrectContainerIdDuringDrag(UNDOCKED), window->parent()->id()); // Release the mouse and the panel should be attached to the dock. DragEnd(); @@ -309,7 +314,7 @@ TEST_P(DockedWindowLayoutManagerTest, ThreeWindowsDragging) { scoped_ptr w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); scoped_ptr w2(CreateTestWindow(gfx::Rect(0, 0, 210, 202))); - DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w2.get(), 200); + DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w2.get(), 100); scoped_ptr w3(CreateTestWindow(gfx::Rect(0, 0, 220, 204))); DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w3.get(), 300); @@ -336,10 +341,9 @@ TEST_P(DockedWindowLayoutManagerTest, ThreeWindowsDragging) { EXPECT_LE(abs(overlap2 - overlap3), 1); EXPECT_EQ(0, overlap4); - // Drag w1 below the point where w1 and w2 would swap places. This point is - // half way between the tops of those two windows. Add 1 because w2 is taller. + // Drag w1 below w2. ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromwindowOrigin(w1.get(), 0, 20)); - DragMove(0, (w2->bounds().y() - w1->bounds().y()) / 2 + 1); + DragMove(0, w2->bounds().y() - w1->bounds().y() + 20); // During the drag the windows get rearranged and the top and the bottom // should be clamped by the work area. @@ -360,73 +364,6 @@ TEST_P(DockedWindowLayoutManagerTest, ThreeWindowsDragging) { EXPECT_EQ(0, overlap4); } -// Adds three windows in bottom display and tests layout after a drag. -TEST_P(DockedWindowLayoutManagerTest, ThreeWindowsDraggingSecondScreen) { - if (!SupportsMultipleDisplays()) - return; - if (!SupportsHostWindowResize()) - return; - - // Create two screen vertical layout. - UpdateDisplay("100+100-600x600,100+700-600x600"); - // Layout the secondary display to the bottom of the primary. - DisplayLayout layout(DisplayLayout::BOTTOM, 0); - ASSERT_GT(Shell::GetScreen()->GetNumDisplays(), 1); - Shell::GetInstance()->display_controller()-> - SetLayoutForCurrentDisplays(layout); - - scoped_ptr w1(CreateTestWindow(gfx::Rect(0, 600, 201, 201))); - DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 600 + 20); - scoped_ptr w2(CreateTestWindow(gfx::Rect(0, 600, 210, 202))); - DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w2.get(), 600 + 200); - scoped_ptr w3(CreateTestWindow(gfx::Rect(0, 600, 220, 204))); - DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w3.get(), 600 + 300); - - // All windows should be attached and snapped to the right side of the screen. - EXPECT_EQ(w1->GetRootWindow()->bounds().right(), - w1->GetBoundsInScreen().right()); - EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); - EXPECT_EQ(w2->GetRootWindow()->bounds().right(), - w2->GetBoundsInScreen().right()); - EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); - EXPECT_EQ(w3->GetRootWindow()->bounds().right(), - w3->GetBoundsInScreen().right()); - EXPECT_EQ(internal::kShellWindowId_DockedContainer, w3->parent()->id()); - - gfx::Rect work_area = - Shell::GetScreen()->GetDisplayNearestWindow(w1.get()).work_area(); - // Test that the top and bottom windows are clamped in work area and - // that the overlaps between the windows differ at most by a pixel. - int overlap1 = w1->GetBoundsInScreen().y() - work_area.y(); - int overlap2 = w1->GetBoundsInScreen().bottom() - w2->GetBoundsInScreen().y(); - int overlap3 = w2->GetBoundsInScreen().bottom() - w3->GetBoundsInScreen().y(); - int overlap4 = work_area.bottom() - w3->GetBoundsInScreen().bottom(); - EXPECT_EQ(0, overlap1); - EXPECT_LE(abs(overlap2 - overlap3), 1); - EXPECT_EQ(0, overlap4); - - // Drag w1 below the point where w1 and w2 would swap places. This point is - // half way between the tops of those two windows. Add 1 because w2 is taller. - ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromwindowOrigin(w1.get(), 0, 20)); - DragMove(0, (w2->bounds().y() - w1->bounds().y()) / 2 + 1); - - // During the drag the windows get rearranged and the top and the bottom - // should be clamped by the work area. - EXPECT_EQ(work_area.y(), w2->GetBoundsInScreen().y()); - EXPECT_GT(w1->GetBoundsInScreen().y(), w2->GetBoundsInScreen().y()); - EXPECT_EQ(work_area.bottom(), w3->GetBoundsInScreen().bottom()); - DragEnd(); - - // Test the new windows order and that the overlaps differ at most by a pixel. - overlap1 = w2->GetBoundsInScreen().y() - work_area.y(); - overlap2 = w2->GetBoundsInScreen().bottom() - w1->GetBoundsInScreen().y(); - overlap3 = w1->GetBoundsInScreen().bottom() - w3->GetBoundsInScreen().y(); - overlap4 = work_area.bottom() - w3->GetBoundsInScreen().bottom(); - EXPECT_EQ(0, overlap1); - EXPECT_LE(abs(overlap2 - overlap3), 1); - EXPECT_EQ(0, overlap4); -} - // Tests run twice - on both panels and normal windows INSTANTIATE_TEST_CASE_P(NormalOrPanel, DockedWindowLayoutManagerTest, diff --git a/chromium/ash/wm/dock/docked_window_resizer.cc b/chromium/ash/wm/dock/docked_window_resizer.cc index 3e1ef29b0ad..beae1d13a18 100644 --- a/chromium/ash/wm/dock/docked_window_resizer.cc +++ b/chromium/ash/wm/dock/docked_window_resizer.cc @@ -16,9 +16,7 @@ #include "ash/wm/dock/docked_window_layout_manager.h" #include "ash/wm/property_util.h" #include "ash/wm/window_properties.h" -#include "ash/wm/workspace/magnetism_matcher.h" -#include "ash/wm/workspace/phantom_window_controller.h" -#include "ash/wm/workspace/workspace_window_resizer.h" +#include "ash/wm/workspace_controller.h" #include "base/command_line.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/env.h" @@ -31,18 +29,15 @@ #include "ui/views/widget/widget.h" namespace ash { -namespace internal { namespace { -DockedWindowLayoutManager* GetDockedLayoutManagerAtPoint( - const gfx::Point& point) { - aura::Window* dock_container = Shell::GetContainer( - wm::GetRootWindowAt(point), - kShellWindowId_DockedContainer); - return static_cast( - dock_container->layout_manager()); -} +// Distance in pixels that the cursor must move past an edge for a window +// to move beyond that edge. +const int kStickyDistance = 64; + +// How far in pixels we have to drag to undock a window. +const int kSnapToDockDistance = 32; } // namespace @@ -94,78 +89,37 @@ void DockedWindowResizer::Drag(const gfx::Point& location, int event_flags) { destroyed_ = NULL; if (set_tracked_by_workspace) SetTrackedByWorkspace(GetTarget(), tracked_by_workspace); - - DockedWindowLayoutManager* new_dock_layout = - GetDockedLayoutManagerAtPoint(last_location_); - if (new_dock_layout != dock_layout_) { - // The window is being dragged to a new display. If the previous - // container is the current parent of the window it will be informed of - // the end of drag when the window is reparented, otherwise let the - // previous container know the drag is complete. If we told the - // window's parent that the drag was complete it would begin - // positioning the window. - if (is_docked_) - dock_layout_->UndockDraggedWindow(); - if (dock_layout_ != initial_dock_layout_) - dock_layout_->FinishDragging(); - is_docked_ = false; - dock_layout_ = new_dock_layout; - // The window's initial layout manager already knows that the drag is - // in progress for this window. - if (new_dock_layout != initial_dock_layout_) - new_dock_layout->StartDragging(GetTarget()); - } - - // Show snapping animation when a window touches a screen edge or when - // it is about to get docked. - DockedAlignment new_docked_alignment = GetDraggedWindowAlignment(); - if (new_docked_alignment != DOCKED_ALIGNMENT_NONE) { - if (!is_docked_) { - dock_layout_->DockDraggedWindow(GetTarget()); - is_docked_ = true; - } - UpdateSnapPhantomWindow(); - } else { - if (is_docked_) { - dock_layout_->UndockDraggedWindow(); - is_docked_ = false; - } - // Clear phantom window when a window gets undocked. - snap_phantom_window_controller_.reset(); - } } void DockedWindowResizer::CompleteDrag(int event_flags) { - snap_phantom_window_controller_.reset(); - // Temporarily clear kWindowTrackedByWorkspaceKey for panels so that they // don't get forced into the workspace that may be shrunken because of docked // windows. bool tracked_by_workspace = GetTrackedByWorkspace(GetTarget()); - bool set_tracked_by_workspace = was_docked_; + bool set_tracked_by_workspace = + (was_docked_ && GetTarget()->type() == aura::client::WINDOW_TYPE_PANEL); if (set_tracked_by_workspace) SetTrackedByWorkspace(GetTarget(), false); // The root window can change when dragging into a different screen. next_window_resizer_->CompleteDrag(event_flags); - FinishedDragging(); if (set_tracked_by_workspace) SetTrackedByWorkspace(GetTarget(), tracked_by_workspace); + FinishDragging(); } void DockedWindowResizer::RevertDrag() { - snap_phantom_window_controller_.reset(); - // Temporarily clear kWindowTrackedByWorkspaceKey for panels so that they // don't get forced into the workspace that may be shrunken because of docked // windows. bool tracked_by_workspace = GetTrackedByWorkspace(GetTarget()); - bool set_tracked_by_workspace = was_docked_; + bool set_tracked_by_workspace = + (was_docked_ && GetTarget()->type() == aura::client::WINDOW_TYPE_PANEL); if (set_tracked_by_workspace) SetTrackedByWorkspace(GetTarget(), false); next_window_resizer_->RevertDrag(); - FinishedDragging(); if (set_tracked_by_workspace) SetTrackedByWorkspace(GetTarget(), tracked_by_workspace); + FinishDragging(); } aura::Window* DockedWindowResizer::GetTarget() { @@ -181,57 +135,29 @@ DockedWindowResizer::DockedWindowResizer(WindowResizer* next_window_resizer, : details_(details), next_window_resizer_(next_window_resizer), dock_layout_(NULL), - initial_dock_layout_(NULL), did_move_or_resize_(false), was_docked_(false), - is_docked_(false), destroyed_(NULL) { DCHECK(details_.is_resizable); aura::Window* dock_container = Shell::GetContainer( details.window->GetRootWindow(), - kShellWindowId_DockedContainer); - dock_layout_ = static_cast( + internal::kShellWindowId_DockedContainer); + DCHECK(dock_container->id() == internal::kShellWindowId_DockedContainer); + dock_layout_ = static_cast( dock_container->layout_manager()); - initial_dock_layout_ = dock_layout_; was_docked_ = details.window->parent() == dock_container; - is_docked_ = was_docked_; -} - -DockedAlignment DockedWindowResizer::GetDraggedWindowAlignment() { - aura::Window* window = GetTarget(); - DockedWindowLayoutManager* layout_manager = - GetDockedLayoutManagerAtPoint(last_location_); - const DockedAlignment alignment = layout_manager->CalculateAlignment(); - const gfx::Rect& bounds(window->GetBoundsInScreen()); - - // Check if the window is touching the edge - it may need to get docked. - if (alignment == DOCKED_ALIGNMENT_NONE) - return layout_manager->GetAlignmentOfWindow(window); - - // Both bounds and pointer location are checked because some drags involve - // stickiness at the workspace-to-dock boundary and so the |location| may be - // outside of the |bounds|. - // It is also possible that all the docked windows are minimized or hidden - // in which case the dragged window needs to be exactly touching the same - // edge that those docked windows were aligned before they got minimized. - // TODO(varkha): Consider eliminating sticky behavior on that boundary when - // a pointer enters docked area. - if ((layout_manager->docked_bounds().Intersects(bounds) && - layout_manager->docked_bounds().Contains(last_location_)) || - alignment == layout_manager->GetAlignmentOfWindow(window)) { - // A window is being added to other docked windows (on the same side). - return alignment; - } - return DOCKED_ALIGNMENT_NONE; } bool DockedWindowResizer::MaybeSnapToEdge(const gfx::Rect& bounds, gfx::Point* offset) { aura::Window* dock_container = Shell::GetContainer( wm::GetRootWindowAt(last_location_), - kShellWindowId_DockedContainer); - DockedAlignment dock_alignment = - GetDockedLayoutManagerAtPoint(last_location_)->CalculateAlignment(); + internal::kShellWindowId_DockedContainer); + DCHECK(dock_container->id() == internal::kShellWindowId_DockedContainer); + internal::DockedWindowLayoutManager* dock_layout = + static_cast( + dock_container->layout_manager()); + internal::DockedAlignment dock_alignment = dock_layout->CalculateAlignment(); gfx::Rect dock_bounds = ScreenAsh::ConvertRectFromScreen( GetTarget()->parent(), dock_container->GetBoundsInScreen()); // Windows only snap magnetically when they are close to the edge of the @@ -239,33 +165,23 @@ bool DockedWindowResizer::MaybeSnapToEdge(const gfx::Rect& bounds, // When a window being dragged is the last window that was previously // docked it is still allowed to magnetically snap to either side. bool can_snap = was_docked_ || - (GetDraggedWindowAlignment() != DOCKED_ALIGNMENT_NONE); + internal::DockedWindowLayoutManager::ShouldWindowDock(GetTarget(), + last_location_); if (!can_snap) return false; - // Distance in pixels that the cursor must move past an edge for a window - // to move beyond that edge. Same constant as in WorkspaceWindowResizer - // is used for consistency. - const int kStickyDistance = WorkspaceWindowResizer::kStickyDistancePixels; - - // Short-range magnetism when retaining docked state. Same constant as in - // MagnetismMatcher is used for consistency. - const int kSnapToDockDistance = MagnetismMatcher::kMagneticDistance; - - if (dock_alignment == DOCKED_ALIGNMENT_LEFT || - (dock_alignment == DOCKED_ALIGNMENT_NONE && was_docked_)) { + if (dock_alignment == internal::DOCKED_ALIGNMENT_LEFT || + (dock_alignment == internal::DOCKED_ALIGNMENT_NONE && was_docked_)) { const int distance = bounds.x() - dock_bounds.x(); - if (distance < (was_docked_ ? kSnapToDockDistance : 0) && - distance > -kStickyDistance) { + if (distance < kSnapToDockDistance && distance > -kStickyDistance) { offset->set_x(-distance); return true; } } - if (dock_alignment == DOCKED_ALIGNMENT_RIGHT || - (dock_alignment == DOCKED_ALIGNMENT_NONE && was_docked_)) { + if (dock_alignment == internal::DOCKED_ALIGNMENT_RIGHT || + (dock_alignment == internal::DOCKED_ALIGNMENT_NONE && was_docked_)) { const int distance = dock_bounds.right() - bounds.right(); - if (distance < (was_docked_ ? kSnapToDockDistance : 0) && - distance > -kStickyDistance) { + if (distance < kSnapToDockDistance && distance > -kStickyDistance) { offset->set_x(distance); return true; } @@ -275,54 +191,37 @@ bool DockedWindowResizer::MaybeSnapToEdge(const gfx::Rect& bounds, void DockedWindowResizer::StartedDragging() { // Tell the dock layout manager that we are dragging this window. - // At this point we are not yet animating the window as it may not be - // inside the docked area. dock_layout_->StartDragging(GetTarget()); - // Reparent workspace windows during the drag to elevate them above workspace. - // Other windows for which the DockedWindowResizer is instantiated include - // panels and windows that are already docked. Those do not need reparenting. - if (GetTarget()->type() != aura::client::WINDOW_TYPE_PANEL && - GetTarget()->parent()->id() == kShellWindowId_DefaultContainer) { - // The window is going to be reparented - avoid completing the drag. - GetTarget()->SetProperty(kContinueDragAfterReparent, true); - - // Reparent the window into the docked windows container in order to get it - // on top of other docked windows. - aura::Window* docked_container = Shell::GetContainer( - GetTarget()->GetRootWindow(), - kShellWindowId_DockedContainer); - docked_container->AddChild(GetTarget()); - } - if (is_docked_) - dock_layout_->DockDraggedWindow(GetTarget()); } -void DockedWindowResizer::FinishedDragging() { +void DockedWindowResizer::FinishDragging() { if (!did_move_or_resize_) return; aura::Window* window = GetTarget(); bool should_dock = was_docked_; - const bool attached_panel = - window->type() == aura::client::WINDOW_TYPE_PANEL && - window->GetProperty(kPanelAttachedKey); - // If a window was previously docked then keep it docked if it is resized and - // still aligned at the screen edge. - if ((was_docked_ || - ((details_.bounds_change & WindowResizer::kBoundsChange_Repositions) && - !(details_.bounds_change & WindowResizer::kBoundsChange_Resizes)))) { - should_dock = GetDraggedWindowAlignment() != DOCKED_ALIGNMENT_NONE; + if ((details_.bounds_change & WindowResizer::kBoundsChange_Repositions) && + !(details_.bounds_change & WindowResizer::kBoundsChange_Resizes) && + CommandLine::ForCurrentProcess()->HasSwitch( + switches::kAshEnableDockedWindows)) { + const bool attached_panel = + window->type() == aura::client::WINDOW_TYPE_PANEL && + window->GetProperty(internal::kPanelAttachedKey); + should_dock = !attached_panel && + internal::DockedWindowLayoutManager::ShouldWindowDock(window, + last_location_); } - // Check if the window needs to be docked or returned to workspace. - aura::Window* dock_container = Shell::GetContainer( - window->GetRootWindow(), - kShellWindowId_DockedContainer); - if (!attached_panel && - should_dock != (window->parent() == dock_container)) { + // Check if desired docked state is not same as current. + // If not same dock or undock accordingly. + if (should_dock != + (window->parent()->id() == internal::kShellWindowId_DockedContainer)) { if (should_dock) { + aura::Window* dock_container = Shell::GetContainer( + window->GetRootWindow(), + internal::kShellWindowId_DockedContainer); dock_container->AddChild(window); - } else if (window->parent()->id() == kShellWindowId_DockedContainer) { + } else { // Reparent the window back to workspace. // We need to be careful to give SetDefaultParentByRootWindow location in // the right root window (matching the logic in DragWindowResizer) based @@ -336,25 +235,6 @@ void DockedWindowResizer::FinishedDragging() { } } dock_layout_->FinishDragging(); - - // If we started the drag in one root window and moved into another root - // but then canceled the drag we may need to inform the original layout - // manager that the drag is finished. - if (initial_dock_layout_ != dock_layout_) - initial_dock_layout_->FinishDragging(); - is_docked_ = false; -} - -void DockedWindowResizer::UpdateSnapPhantomWindow() { - if (!did_move_or_resize_ || details_.window_component != HTCAPTION) - return; - - if (!snap_phantom_window_controller_) { - snap_phantom_window_controller_.reset( - new PhantomWindowController(GetTarget())); - } - snap_phantom_window_controller_->Show(dock_layout_->dragged_bounds()); } -} // namespace internal -} // namespace ash +} // namespace aura diff --git a/chromium/ash/wm/dock/docked_window_resizer.h b/chromium/ash/wm/dock/docked_window_resizer.h index 41bb4fecd5f..41dd47d5b38 100644 --- a/chromium/ash/wm/dock/docked_window_resizer.h +++ b/chromium/ash/wm/dock/docked_window_resizer.h @@ -5,10 +5,8 @@ #ifndef ASH_WM_DOCK_DOCK_WINDOW_RESIZER_H_ #define ASH_WM_DOCK_DOCK_WINDOW_RESIZER_H_ -#include "ash/wm/dock/dock_types.h" #include "ash/wm/window_resizer.h" #include "base/compiler_specific.h" -#include "base/memory/scoped_ptr.h" namespace gfx { class Point; @@ -20,10 +18,10 @@ class RootWindow; } namespace ash { -namespace internal { +namespace internal { class DockedWindowLayoutManager; -class PhantomWindowController; +} // DockWindowResizer is used by ToplevelWindowEventFilter to handle dragging, // moving or resizing of a window while it is docked to the side of a screen. @@ -54,12 +52,6 @@ class ASH_EXPORT DockedWindowResizer : public WindowResizer { DockedWindowResizer(WindowResizer* next_window_resizer, const Details& details); - // Returns the side of the screen that the window should dock to or - // DOCKED_ALIGNMENT_NONE when the window is not on a side or when some other - // windows are already docked on the other side or when launcher (shelf) is - // aligned on the same side. - DockedAlignment GetDraggedWindowAlignment(); - // Checks if the provided window bounds should snap to the side of a screen. // If so the offset returned gives the necessary adjustment to snap. bool MaybeSnapToEdge(const gfx::Rect& bounds, gfx::Point* offset); @@ -70,10 +62,7 @@ class ASH_EXPORT DockedWindowResizer : public WindowResizer { // Informs the DockLayoutManager that the drag is complete if it was informed // of the drag start. - void FinishedDragging(); - - // Updates the bounds of the phantom window that is used as a docking hint. - void UpdateSnapPhantomWindow(); + void FinishDragging(); const Details details_; @@ -84,20 +73,13 @@ class ASH_EXPORT DockedWindowResizer : public WindowResizer { // Dock container window. internal::DockedWindowLayoutManager* dock_layout_; - internal::DockedWindowLayoutManager* initial_dock_layout_; // Set to true once Drag() is invoked and the bounds of the window change. bool did_move_or_resize_; - // Gives a preview of where the the window will end up. - scoped_ptr snap_phantom_window_controller_; - // Set to true if the window that is being dragged was docked before drag. bool was_docked_; - // True if the dragged window is docked during the drag. - bool is_docked_; - // If non-NULL the destructor sets this to true. Used to determine if this has // been deleted. bool* destroyed_; @@ -105,7 +87,6 @@ class ASH_EXPORT DockedWindowResizer : public WindowResizer { DISALLOW_COPY_AND_ASSIGN(DockedWindowResizer); }; -} // namespace internal } // namespace ash #endif // ASH_WM_DOCK_DOCK_WINDOW_RESIZER_H_ diff --git a/chromium/ash/wm/dock/docked_window_resizer_unittest.cc b/chromium/ash/wm/dock/docked_window_resizer_unittest.cc index 49aeca25318..606e6f4f9d7 100644 --- a/chromium/ash/wm/dock/docked_window_resizer_unittest.cc +++ b/chromium/ash/wm/dock/docked_window_resizer_unittest.cc @@ -63,6 +63,11 @@ class DockedWindowResizerTest DOCKED_EDGE_RIGHT, }; + enum DockedState { + UNDOCKED, + DOCKED, + }; + aura::Window* CreateTestWindow(const gfx::Rect& bounds) { aura::Window* window = CreateTestWindowInShellWithDelegateAndType( &delegate_, @@ -140,12 +145,15 @@ class DockedWindowResizerTest } // Panels are parented by panel container during drags. - // All other windows that are tested here are parented by dock container - // during drags. - int CorrectContainerIdDuringDrag() { + // Docked windows are parented by dock container during drags. + // All other windows that we are testing here have default container as a + // parent. + int CorrectContainerIdDuringDrag(DockedState is_docked) { if (window_type_ == aura::client::WINDOW_TYPE_PANEL) return internal::kShellWindowId_PanelContainer; - return internal::kShellWindowId_DockedContainer; + if (is_docked == DOCKED) + return internal::kShellWindowId_DockedContainer; + return internal::kShellWindowId_DefaultContainer; } // Test dragging the window vertically (to detach if it is a panel) and then @@ -190,7 +198,7 @@ class DockedWindowResizerTest // Drag enough to detach since our tests assume panels to be initially // detached. DragMove(0, dy); - EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); + EXPECT_EQ(CorrectContainerIdDuringDrag(UNDOCKED), window->parent()->id()); EXPECT_EQ(initial_bounds.x(), window->GetBoundsInScreen().x()); EXPECT_EQ(initial_bounds.y() + dy, window->GetBoundsInScreen().y()); @@ -212,7 +220,7 @@ class DockedWindowResizerTest else if (edge == DOCKED_EDGE_RIGHT) dx += window->GetRootWindow()->bounds().right() - initial_bounds.right(); DragMove(dx, window_type_ == aura::client::WINDOW_TYPE_PANEL ? 0 : dy); - EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); + EXPECT_EQ(CorrectContainerIdDuringDrag(UNDOCKED), window->parent()->id()); // Release the mouse and the panel should be attached to the dock. DragEnd(); @@ -381,10 +389,9 @@ TEST_P(DockedWindowResizerTest, AttachTryDetach) { window->GetBoundsInScreen().right()); EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); - // Try to detach by dragging left less than kSnapToDockDistance. - // The window should stay docked. + // Try to detach by dragging left a bit (should stay docked) ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); - DragMove(-4, -10); + DragMove(-10, -10); // Release the mouse and the window should be still attached to the dock. DragEnd(); @@ -393,8 +400,7 @@ TEST_P(DockedWindowResizerTest, AttachTryDetach) { window->GetBoundsInScreen().right()); EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); - // Try to detach by dragging left by kSnapToDockDistance or more. - // The window should get undocked. + // Try to detach by dragging left a bit more (should get undocked) ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); DragMove(-32, -10); // Release the mouse and the window should be no longer attached to the dock. @@ -539,7 +545,7 @@ TEST_P(DockedWindowResizerTest, DragAcrossDisplays) { // but not enough to land in the other screen ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); DragMove(70, 0); - EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); + EXPECT_EQ(CorrectContainerIdDuringDrag(DOCKED), window->parent()->id()); DragEnd(); EXPECT_NE(window->GetRootWindow()->bounds().right(), window->GetBoundsInScreen().right()); @@ -550,7 +556,7 @@ TEST_P(DockedWindowResizerTest, DragAcrossDisplays) { // Move back left - should dock again. ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); DragMove(-70, 0); - EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); + EXPECT_EQ(CorrectContainerIdDuringDrag(UNDOCKED), window->parent()->id()); DragEnd(); EXPECT_EQ(window->GetRootWindow()->bounds().right(), window->GetBoundsInScreen().right()); @@ -566,7 +572,7 @@ TEST_P(DockedWindowResizerTest, DragAcrossDisplays) { window->bounds().width()/2 + 10, 0)); DragMove(window->bounds().width()/2 - 5, 0); - EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); + EXPECT_EQ(CorrectContainerIdDuringDrag(DOCKED), window->parent()->id()); DragEnd(); EXPECT_NE(window->GetRootWindow()->bounds().right(), window->GetBoundsInScreen().right()); @@ -583,7 +589,7 @@ TEST_P(DockedWindowResizerTest, DragAcrossDisplays) { DragMove(window->GetRootWindow()->GetBoundsInScreen().x() - window->GetBoundsInScreen().x(), 0); - EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); + EXPECT_EQ(CorrectContainerIdDuringDrag(UNDOCKED), window->parent()->id()); DragEnd(); EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().x(), window->GetBoundsInScreen().x()); @@ -614,7 +620,7 @@ TEST_P(DockedWindowResizerTest, AttachTwoWindowsDetachOne) EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, manager->alignment_); EXPECT_EQ(w1->bounds().width(), manager->docked_width_); - DragToVerticalPositionRelativeToEdge(DOCKED_EDGE_RIGHT, w2.get(), 0, 100); + DragToVerticalPositionRelativeToEdge(DOCKED_EDGE_RIGHT, w2.get(), 0, 50); // Both windows should now be attached and snapped to the right edge. EXPECT_EQ(w2->GetRootWindow()->bounds().right(), w2->GetBoundsInScreen().right()); @@ -721,11 +727,12 @@ TEST_P(DockedWindowResizerTest, AttachWindowMaximizeOther) ASSERT_NO_FATAL_FAILURE(DragStart(w1.get())); EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, manager->alignment_); DragMove(-35, 10); - // Alignment is set to "NONE" when drag starts. - EXPECT_EQ(DOCKED_ALIGNMENT_NONE, manager->alignment_); + // For NORMAL windows alignment is set to "RIGHT" until the drag is completed. + // For PANEL windows alignment is set to "NONE" when drag starts. + EXPECT_EQ(test_panels() ? DOCKED_ALIGNMENT_NONE : DOCKED_ALIGNMENT_RIGHT, + manager->alignment_); // Release the mouse and the window should be no longer attached to the edge. DragEnd(); - EXPECT_EQ(DOCKED_ALIGNMENT_NONE, manager->alignment_); // Dock should get shrunk and desktop should get expanded. EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w1->parent()->id()); EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); @@ -817,7 +824,7 @@ TEST_P(DockedWindowResizerTest, AttachOneTestSticky) // Drag w2 by a bit more - it should resist the drag (stuck edges) int start_x = w2->bounds().x(); - ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromwindowOrigin(w2.get(), 100, 5)); + ASSERT_NO_FATAL_FAILURE(DragStart(w2.get())); DragMove(-2, 0); // Window should not actually move. EXPECT_EQ(start_x, w2->bounds().x()); @@ -881,7 +888,7 @@ TEST_P(DockedWindowResizerTest, ResizeTwoWindows) EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, manager->alignment_); EXPECT_EQ(w1->bounds().width(), manager->docked_width_); - DragToVerticalPositionRelativeToEdge(DOCKED_EDGE_RIGHT, w2.get(), 0, 100); + DragToVerticalPositionRelativeToEdge(DOCKED_EDGE_RIGHT, w2.get(), 0, 50); // Both windows should now be attached and snapped to the right edge. EXPECT_EQ(w2->GetRootWindow()->bounds().right(), w2->GetBoundsInScreen().right()); @@ -1024,11 +1031,12 @@ TEST_P(DockedWindowResizerTest, DragToShelf) // Detach and drag down to shelf. ASSERT_NO_FATAL_FAILURE(DragStart(w1.get())); DragMove(-40, 0); - // Alignment is set to "NONE" when drag starts. - EXPECT_EQ(DOCKED_ALIGNMENT_NONE, manager->alignment_); + // For NORMAL windows alignment is set to "RIGHT" until the drag is completed. + // For PANEL windows alignment is set to "NONE" when drag starts. + EXPECT_EQ(test_panels() ? DOCKED_ALIGNMENT_NONE : DOCKED_ALIGNMENT_RIGHT, + manager->alignment_); // Release the mouse and the window should be no longer attached to the edge. DragEnd(); - EXPECT_EQ(DOCKED_ALIGNMENT_NONE, manager->alignment_); // Drag down almost to shelf. A panel will snap, a regular window won't. ShelfWidget* shelf = Launcher::ForPrimaryDisplay()->shelf_widget(); diff --git a/chromium/ash/wm/event_client_impl.cc b/chromium/ash/wm/event_client_impl.cc index 03d4dea0b03..fcdc1b425d3 100644 --- a/chromium/ash/wm/event_client_impl.cc +++ b/chromium/ash/wm/event_client_impl.cc @@ -8,7 +8,6 @@ #include "ash/shell.h" #include "ash/shell_window_ids.h" #include "ui/aura/window.h" -#include "ui/keyboard/keyboard_util.h" namespace ash { namespace internal { @@ -22,34 +21,26 @@ EventClientImpl::~EventClientImpl() { bool EventClientImpl::CanProcessEventsWithinSubtree( const aura::Window* window) const { const aura::RootWindow* root_window = window ? window->GetRootWindow() : NULL; - if (!root_window || - !Shell::GetInstance()->session_state_delegate()->IsUserSessionBlocked()) { + if (!root_window) return true; - } - - const aura::Window* lock_screen_containers = Shell::GetContainer( - root_window, - kShellWindowId_LockScreenContainersContainer); - const aura::Window* lock_background_containers = Shell::GetContainer( - root_window, - kShellWindowId_LockScreenBackgroundContainer); - const aura::Window* lock_screen_related_containers = Shell::GetContainer( - root_window, - kShellWindowId_LockScreenRelatedContainersContainer); - bool can_process_events = (window->Contains(lock_screen_containers) && - window->Contains(lock_background_containers) && - window->Contains(lock_screen_related_containers)) || - lock_screen_containers->Contains(window) || - lock_background_containers->Contains(window) || - lock_screen_related_containers->Contains(window); - if (keyboard::IsKeyboardEnabled()) { - const aura::Window* virtual_keyboard_container = Shell::GetContainer( + if (Shell::GetInstance()->session_state_delegate()->IsUserSessionBlocked()) { + const aura::Window* lock_screen_containers = Shell::GetContainer( + root_window, + kShellWindowId_LockScreenContainersContainer); + const aura::Window* lock_background_containers = Shell::GetContainer( + root_window, + kShellWindowId_LockScreenBackgroundContainer); + const aura::Window* lock_screen_related_containers = Shell::GetContainer( root_window, - kShellWindowId_VirtualKeyboardContainer); - can_process_events |= (window->Contains(virtual_keyboard_container) || - virtual_keyboard_container->Contains(window)); + kShellWindowId_LockScreenRelatedContainersContainer); + return (window->Contains(lock_screen_containers) && + window->Contains(lock_background_containers) && + window->Contains(lock_screen_related_containers)) || + lock_screen_containers->Contains(window) || + lock_background_containers->Contains(window) || + lock_screen_related_containers->Contains(window); } - return can_process_events; + return true; } ui::EventTarget* EventClientImpl::GetToplevelEventTarget() { diff --git a/chromium/ash/wm/frame_painter.h b/chromium/ash/wm/frame_painter.h index e79b012d2e9..38f2fb1e697 100644 --- a/chromium/ash/wm/frame_painter.h +++ b/chromium/ash/wm/frame_painter.h @@ -160,6 +160,8 @@ class ASH_EXPORT FramePainter : public aura::WindowObserver, FRIEND_TEST_ALL_PREFIXES(FramePainterTest, GetHeaderOpacity); FRIEND_TEST_ALL_PREFIXES(FramePainterTest, TitleIconAlignment); FRIEND_TEST_ALL_PREFIXES(FramePainterTest, ChildWindowVisibility); + FRIEND_TEST_ALL_PREFIXES(FramePainterTest, + NoCrashShutdownWithAlwaysOnTopWindow); // Sets the images for a button based on IDs from the |frame_| theme provider. void SetButtonImages(views::ImageButton* button, diff --git a/chromium/ash/wm/frame_painter_unittest.cc b/chromium/ash/wm/frame_painter_unittest.cc index ee9313fcf10..5826be6787d 100644 --- a/chromium/ash/wm/frame_painter_unittest.cc +++ b/chromium/ash/wm/frame_painter_unittest.cc @@ -12,6 +12,7 @@ #include "ash/wm/window_properties.h" #include "ash/wm/window_util.h" #include "base/memory/scoped_ptr.h" +#include "base/message_loop/message_loop.h" #include "grit/ash_resources.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/aura/client/aura_constants.h" @@ -25,6 +26,7 @@ #include "ui/views/controls/button/image_button.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_delegate.h" +#include "ui/views/widget/widget_observer.h" #include "ui/views/window/non_client_view.h" using ash::FramePainter; @@ -148,6 +150,33 @@ FramePainter* CreateTestPainter(Widget* widget) { return painter; } +// Self-owned manager of the frame painter which deletes the painter and itself +// when its widget is closed. +class FramePainterOwner : views::WidgetObserver { + public: + explicit FramePainterOwner(Widget* widget) + : frame_painter_(CreateTestPainter(widget)) { + widget->AddObserver(this); + } + + virtual ~FramePainterOwner() {} + + FramePainter* frame_painter() { return frame_painter_.get(); } + + private: + virtual void OnWidgetDestroying(Widget* widget) OVERRIDE { + widget->RemoveObserver(this); + // Do not delete directly here, since the task of FramePainter causing + // the crash of crbug.com/273310 may run after this class handles this + // event. + base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); + } + + scoped_ptr frame_painter_; + + DISALLOW_COPY_AND_ASSIGN(FramePainterOwner); +}; + } // namespace namespace ash { @@ -690,4 +719,33 @@ TEST_F(FramePainterTest, ChildWindowVisibility) { 0)); } +TEST_F(FramePainterTest, NoCrashShutdownWithAlwaysOnTopWindow) { + // Create normal window and an always-on-top window, and leave it as is + // and finish the test, then verify it doesn't cause a crash. See + // crbug.com/273310. Note that those widgets will be deleted at + // RootWindowController::CloseChildWindows(), so this code is memory-safe. + Widget* w1 = new Widget; + Widget::InitParams params1; + params1.context = CurrentContext(); + w1->Init(params1); + FramePainterOwner* o1 = new FramePainterOwner(w1); + FramePainter* p1 = o1->frame_painter(); + w1->SetBounds(gfx::Rect(0, 0, 100, 100)); + w1->Show(); + EXPECT_TRUE(p1->UseSoloWindowHeader()); + + Widget* w2 = new Widget; + Widget::InitParams params2; + params2.context = CurrentContext(); + params2.keep_on_top = true; + w2->Init(params2); + FramePainterOwner* o2 = new FramePainterOwner(w2); + FramePainter* p2 = o2->frame_painter(); + w2->Show(); + EXPECT_FALSE(p1->UseSoloWindowHeader()); + EXPECT_FALSE(p2->UseSoloWindowHeader()); + + // Exit with no resource release. They'll be released at shutdown. +} + } // namespace ash diff --git a/chromium/ash/wm/panels/panel_layout_manager_unittest.cc b/chromium/ash/wm/panels/panel_layout_manager_unittest.cc index 08f53f7aa8b..ca231ce005d 100644 --- a/chromium/ash/wm/panels/panel_layout_manager_unittest.cc +++ b/chromium/ash/wm/panels/panel_layout_manager_unittest.cc @@ -128,8 +128,6 @@ class PanelLayoutManagerTest : public test::AshTestBase { ASSERT_FALSE(icon_bounds.width() == 0 && icon_bounds.height() == 0); gfx::Rect window_bounds = panel->GetBoundsInScreen(); - ASSERT_LT(icon_bounds.width(), window_bounds.width()); - ASSERT_LT(icon_bounds.height(), window_bounds.height()); gfx::Rect launcher_bounds = launcher->shelf_widget()-> GetWindowBoundsInScreen(); ShelfAlignment alignment = GetAlignment(panel->GetRootWindow()); diff --git a/chromium/ash/wm/status_area_layout_manager.cc b/chromium/ash/wm/status_area_layout_manager.cc index d9e0424d240..e17d84e26d2 100644 --- a/chromium/ash/wm/status_area_layout_manager.cc +++ b/chromium/ash/wm/status_area_layout_manager.cc @@ -70,7 +70,7 @@ void StatusAreaLayoutManager::SetChildBounds( void StatusAreaLayoutManager::LayoutStatusArea() { // Shelf layout manager may be already doing layout. - if (shelf_->shelf_layout_manager()->updating_bounds()) + if (shelf_->shelf_layout_manager()->in_layout()) return; base::AutoReset auto_reset_in_layout(&in_layout_, true); diff --git a/chromium/ash/wm/window_animations.cc b/chromium/ash/wm/window_animations.cc index a3c0ca80621..73deafd75c1 100644 --- a/chromium/ash/wm/window_animations.cc +++ b/chromium/ash/wm/window_animations.cc @@ -295,6 +295,9 @@ class CrossFadeObserver : public ui::CompositorObserver, // Triggers OnImplicitAnimationsCompleted() to be called and deletes us. layer_->GetAnimator()->StopAnimating(); } + virtual void OnWindowRemovingFromRootWindow(aura::Window* window) OVERRIDE { + layer_->GetAnimator()->StopAnimating(); + } // ui::ImplicitAnimationObserver overrides: virtual void OnImplicitAnimationsCompleted() OVERRIDE { diff --git a/chromium/ash/wm/window_resizer.cc b/chromium/ash/wm/window_resizer.cc index 1ea317a1a3f..e312fc179e5 100644 --- a/chromium/ash/wm/window_resizer.cc +++ b/chromium/ash/wm/window_resizer.cc @@ -7,7 +7,6 @@ #include "ash/screen_ash.h" #include "ash/shell.h" #include "ash/shell_window_ids.h" -#include "ash/wm/coordinate_conversion.h" #include "ash/wm/dock/docked_window_layout_manager.h" #include "ash/wm/property_util.h" #include "ash/wm/window_util.h" @@ -181,6 +180,14 @@ gfx::Rect WindowResizer::CalculateBoundsForDrag( return details.initial_bounds_in_parent; gfx::Point location = passed_location; + aura::Window* dock_container = Shell::GetContainer( + details.window->GetRootWindow(), + internal::kShellWindowId_DockedContainer); + DCHECK_EQ(dock_container->id(), internal::kShellWindowId_DockedContainer); + internal::DockedWindowLayoutManager* dock_layout = + static_cast( + dock_container->layout_manager()); + int delta_x = location.x() - details.initial_location_in_parent.x(); int delta_y = location.y() - details.initial_location_in_parent.y(); @@ -199,13 +206,6 @@ gfx::Rect WindowResizer::CalculateBoundsForDrag( if (details.bounds_change & kBoundsChange_Resizes) { gfx::Rect work_area = Shell::GetScreen()->GetDisplayNearestWindow(details.window).work_area(); - aura::Window* dock_container = Shell::GetContainer( - details.window->GetRootWindow(), - internal::kShellWindowId_DockedContainer); - internal::DockedWindowLayoutManager* dock_layout = - static_cast( - dock_container->layout_manager()); - work_area.Union(dock_layout->docked_bounds()); work_area = ScreenAsh::ConvertRectFromScreen(details.window->parent(), work_area); @@ -265,13 +265,6 @@ gfx::Rect WindowResizer::CalculateBoundsForDrag( ScreenAsh::ConvertRectToScreen(parent, new_bounds); const gfx::Display& display = Shell::GetScreen()->GetDisplayMatching(new_bounds_in_screen); - aura::Window* dock_container = Shell::GetContainer( - wm::GetRootWindowMatching(new_bounds_in_screen), - internal::kShellWindowId_DockedContainer); - internal::DockedWindowLayoutManager* dock_layout = - static_cast( - dock_container->layout_manager()); - gfx::Rect screen_work_area = display.work_area(); screen_work_area.Union(dock_layout->docked_bounds()); screen_work_area.Inset(kMinimumOnScreenArea, 0); diff --git a/chromium/ash/wm/window_selector.cc b/chromium/ash/wm/window_selector.cc index 47e20159572..8e87a95163c 100644 --- a/chromium/ash/wm/window_selector.cc +++ b/chromium/ash/wm/window_selector.cc @@ -361,10 +361,6 @@ void WindowSelector::OnEvent(ui::Event* event) { aura::Window* target = static_cast(event->target()); for (size_t i = 0; i < windows_.size(); ++i) { if (windows_[i]->Contains(target)) { - // TODO(flackr): StopPropogation prevents generation of gesture events. - // We should find a better way to prevent events from being delivered to - // the window, perhaps a transparent window in front of the target window - // or using EventClientImpl::CanProcessEventsWithinSubtree. event->StopPropagation(); break; } @@ -385,8 +381,8 @@ void WindowSelector::OnMouseEvent(ui::MouseEvent* event) { HandleSelectionEvent(target); } -void WindowSelector::OnTouchEvent(ui::TouchEvent* event) { - if (event->type() != ui::ET_TOUCH_PRESSED) +void WindowSelector::OnGestureEvent(ui::GestureEvent* event) { + if (event->type() != ui::ET_GESTURE_TAP) return; WindowSelectorWindow* target = GetEventTarget(event); if (!target) diff --git a/chromium/ash/wm/window_selector.h b/chromium/ash/wm/window_selector.h index 9cd1e04fd22..92ed607eabc 100644 --- a/chromium/ash/wm/window_selector.h +++ b/chromium/ash/wm/window_selector.h @@ -64,7 +64,7 @@ class WindowSelector : public ui::EventHandler, // ui::EventHandler: virtual void OnEvent(ui::Event* event) OVERRIDE; virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE; - virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE; + virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; // aura::WindowObserver: virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE; diff --git a/chromium/ash/wm/window_util.cc b/chromium/ash/wm/window_util.cc index 67dcd95c4c1..7b8e616aa7e 100644 --- a/chromium/ash/wm/window_util.cc +++ b/chromium/ash/wm/window_util.cc @@ -161,29 +161,29 @@ void SetPreAutoManageWindowBounds(aura::Window* window, new gfx::Rect(bounds)); } -void AdjustBoundsToEnsureMinimumWindowVisibility(const gfx::Rect& work_area, +void AdjustBoundsToEnsureMinimumWindowVisibility(const gfx::Rect& visible_area, gfx::Rect* bounds) { AdjustBoundsToEnsureWindowVisibility( - work_area, kMinimumOnScreenArea, kMinimumOnScreenArea, bounds); + visible_area, kMinimumOnScreenArea, kMinimumOnScreenArea, bounds); } -void AdjustBoundsToEnsureWindowVisibility(const gfx::Rect& work_area, +void AdjustBoundsToEnsureWindowVisibility(const gfx::Rect& visible_area, int min_width, int min_height, gfx::Rect* bounds) { - bounds->set_width(std::min(bounds->width(), work_area.width())); - bounds->set_height(std::min(bounds->height(), work_area.height())); + bounds->set_width(std::min(bounds->width(), visible_area.width())); + bounds->set_height(std::min(bounds->height(), visible_area.height())); - min_width = std::min(min_width, work_area.width()); - min_height = std::min(min_height, work_area.height()); + min_width = std::min(min_width, visible_area.width()); + min_height = std::min(min_height, visible_area.height()); - if (bounds->x() + min_width > work_area.right()) { - bounds->set_x(work_area.right() - min_width); + if (bounds->x() + min_width > visible_area.right()) { + bounds->set_x(visible_area.right() - min_width); } else if (bounds->right() - min_width < 0) { bounds->set_x(min_width - bounds->width()); } - if (bounds->y() + min_height > work_area.bottom()) { - bounds->set_y(work_area.bottom() - min_height); + if (bounds->y() + min_height > visible_area.bottom()) { + bounds->set_y(visible_area.bottom() - min_height); } else if (bounds->bottom() - min_height < 0) { bounds->set_y(min_height - bounds->height()); } diff --git a/chromium/ash/wm/window_util.h b/chromium/ash/wm/window_util.h index 1ffeb7db8a3..659d3e11e2d 100644 --- a/chromium/ash/wm/window_util.h +++ b/chromium/ash/wm/window_util.h @@ -108,16 +108,16 @@ ASH_EXPORT const gfx::Rect* GetPreAutoManageWindowBounds( ASH_EXPORT void SetPreAutoManageWindowBounds(aura::Window* window, const gfx::Rect& bounds); -// Move the given bounds inside the given work area, including a safety margin -// given by |kMinimumOnScreenArea|. +// Move the given bounds inside the given |visible_area|, including a +// safety margin given by |kMinimumOnScreenArea|. ASH_EXPORT void AdjustBoundsToEnsureMinimumWindowVisibility( - const gfx::Rect& work_area, + const gfx::Rect& visible_area, gfx::Rect* bounds); -// Move the given bounds inside the given work area, including a safety margin -// given by |min_width| and |min_height|. +// Move the given bounds inside the given |visible_area|, including a +// safety margin given by |min_width| and |min_height|. ASH_EXPORT void AdjustBoundsToEnsureWindowVisibility( - const gfx::Rect& work_area, + const gfx::Rect& visible_area, int min_width, int min_height, gfx::Rect* bounds); diff --git a/chromium/ash/wm/workspace/phantom_window_controller.cc b/chromium/ash/wm/workspace/phantom_window_controller.cc index 67272c18a39..4287d5b40d0 100644 --- a/chromium/ash/wm/workspace/phantom_window_controller.cc +++ b/chromium/ash/wm/workspace/phantom_window_controller.cc @@ -8,7 +8,6 @@ #include "ash/shell_window_ids.h" #include "ash/wm/coordinate_conversion.h" #include "third_party/skia/include/core/SkCanvas.h" -#include "ui/aura/root_window.h" #include "ui/aura/window.h" #include "ui/base/animation/slide_animation.h" #include "ui/compositor/layer.h" @@ -92,56 +91,25 @@ void EdgePainter::Paint(gfx::Canvas* canvas, const gfx::Size& size) { PhantomWindowController::PhantomWindowController(aura::Window* window) : window_(window), phantom_below_window_(NULL), - phantom_widget_(NULL), - phantom_widget_start_(NULL) { + phantom_widget_(NULL) { } PhantomWindowController::~PhantomWindowController() { Hide(); } -void PhantomWindowController::Show(const gfx::Rect& bounds_in_screen) { - if (bounds_in_screen == bounds_in_screen_) +void PhantomWindowController::Show(const gfx::Rect& bounds) { + if (bounds == bounds_) return; - bounds_in_screen_ = bounds_in_screen; - aura::RootWindow* target_root = wm::GetRootWindowMatching(bounds_in_screen); - // Show the phantom at the current bounds of the window. We'll animate to the - // target bounds. If phantom exists, update the start bounds. - if (!phantom_widget_) + bounds_ = bounds; + if (!phantom_widget_) { + // Show the phantom at the bounds of the window. We'll animate to the target + // bounds. start_bounds_ = window_->GetBoundsInScreen(); - else + CreatePhantomWidget(start_bounds_); + } else { start_bounds_ = phantom_widget_->GetWindowBoundsInScreen(); - if (phantom_widget_ && - phantom_widget_->GetNativeWindow()->GetRootWindow() != target_root) { - phantom_widget_->Close(); - phantom_widget_ = NULL; - } - if (!phantom_widget_) - phantom_widget_ = CreatePhantomWidget(target_root, start_bounds_); - - // Create a secondary widget in a second screen if start_bounds_ lie at least - // partially in that other screen. This allows animations to start or restart - // in one root window and progress into another root. - aura::RootWindow* start_root = wm::GetRootWindowMatching(start_bounds_); - if (start_root == target_root) { - Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); - for (size_t i = 0; i < root_windows.size(); ++i) { - if (root_windows[i] != target_root && - root_windows[i]->GetBoundsInScreen().Intersects(start_bounds_)) { - start_root = root_windows[i]; - break; - } - } } - if (phantom_widget_start_ && - (phantom_widget_start_->GetNativeWindow()->GetRootWindow() != start_root - || start_root == target_root)) { - phantom_widget_start_->Close(); - phantom_widget_start_ = NULL; - } - if (!phantom_widget_start_ && start_root != target_root) - phantom_widget_start_ = CreatePhantomWidget(start_root, start_bounds_); - animation_.reset(new ui::SlideAnimation(this)); animation_->SetTweenType(ui::Tween::EASE_IN); const int kAnimationDurationMS = 200; @@ -153,9 +121,6 @@ void PhantomWindowController::Hide() { if (phantom_widget_) phantom_widget_->Close(); phantom_widget_ = NULL; - if (phantom_widget_start_) - phantom_widget_start_->Close(); - phantom_widget_start_ = NULL; } bool PhantomWindowController::IsShowing() const { @@ -164,50 +129,45 @@ bool PhantomWindowController::IsShowing() const { void PhantomWindowController::AnimationProgressed( const ui::Animation* animation) { - const gfx::Rect current_bounds = - animation->CurrentValueBetween(start_bounds_, bounds_in_screen_); - if (phantom_widget_start_) - phantom_widget_start_->SetBounds(current_bounds); - phantom_widget_->SetBounds(current_bounds); + phantom_widget_->SetBounds( + animation->CurrentValueBetween(start_bounds_, bounds_)); } -views::Widget* PhantomWindowController::CreatePhantomWidget( - aura::RootWindow* root_window, - const gfx::Rect& bounds_in_screen) { - views::Widget* phantom_widget = new views::Widget; +void PhantomWindowController::CreatePhantomWidget(const gfx::Rect& bounds) { + DCHECK(!phantom_widget_); + phantom_widget_ = new views::Widget; views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; // PhantomWindowController is used by FrameMaximizeButton to highlight the // launcher button. Put the phantom in the same window as the launcher so that // the phantom is visible. - params.parent = Shell::GetContainer(root_window, + params.parent = Shell::GetContainer(wm::GetRootWindowMatching(bounds), kShellWindowId_ShelfContainer); params.can_activate = false; params.keep_on_top = true; - phantom_widget->set_focus_on_creation(false); - phantom_widget->Init(params); - phantom_widget->SetVisibilityChangedAnimationsEnabled(false); - phantom_widget->GetNativeWindow()->SetName("PhantomWindow"); - phantom_widget->GetNativeWindow()->set_id(kShellWindowId_PhantomWindow); + phantom_widget_->set_focus_on_creation(false); + phantom_widget_->Init(params); + phantom_widget_->SetVisibilityChangedAnimationsEnabled(false); + phantom_widget_->GetNativeWindow()->SetName("PhantomWindow"); + phantom_widget_->GetNativeWindow()->set_id(kShellWindowId_PhantomWindow); views::View* content_view = new views::View; content_view->set_background( views::Background::CreateBackgroundPainter(true, new EdgePainter)); - phantom_widget->SetContentsView(content_view); - phantom_widget->SetBounds(bounds_in_screen); + phantom_widget_->SetContentsView(content_view); + phantom_widget_->SetBounds(bounds); if (phantom_below_window_) - phantom_widget->StackBelow(phantom_below_window_); + phantom_widget_->StackBelow(phantom_below_window_); else - phantom_widget->StackAbove(window_); + phantom_widget_->StackAbove(window_); // Show the widget after all the setups. - phantom_widget->Show(); + phantom_widget_->Show(); // Fade the window in. - ui::Layer* widget_layer = phantom_widget->GetNativeWindow()->layer(); + ui::Layer* widget_layer = phantom_widget_->GetNativeWindow()->layer(); widget_layer->SetOpacity(0); ui::ScopedLayerAnimationSettings scoped_setter(widget_layer->GetAnimator()); widget_layer->SetOpacity(1); - return phantom_widget; } } // namespace internal diff --git a/chromium/ash/wm/workspace/phantom_window_controller.h b/chromium/ash/wm/workspace/phantom_window_controller.h index 5cd40daa2cd..d7622fcc556 100644 --- a/chromium/ash/wm/workspace/phantom_window_controller.h +++ b/chromium/ash/wm/workspace/phantom_window_controller.h @@ -13,7 +13,6 @@ #include "ui/gfx/rect.h" namespace aura { -class RootWindow; class Window; } @@ -36,14 +35,13 @@ class ASH_EXPORT PhantomWindowController : public ui::AnimationDelegate { virtual ~PhantomWindowController(); // Bounds last passed to Show(). - const gfx::Rect& bounds_in_screen() const { return bounds_in_screen_; } + const gfx::Rect& bounds() const { return bounds_; } - // Animates the phantom window towards |bounds_in_screen|. - // Creates two (if start bounds intersect any root window other than the - // root window that matches the target bounds) or one (otherwise) phantom - // widgets to display animated rectangle in each root. + // Shows the phantom window at the specified location (coordinates of the + // parent). If |layer| is non-NULL, it is shown on top of the phantom window. + // |layer| is owned by the caller. // This does not immediately show the window. - void Show(const gfx::Rect& bounds_in_screen); + void Show(const gfx::Rect& bounds); // Hides the phantom. void Hide(); @@ -61,12 +59,12 @@ class ASH_EXPORT PhantomWindowController : public ui::AnimationDelegate { virtual void AnimationProgressed(const ui::Animation* animation) OVERRIDE; private: - FRIEND_TEST_ALL_PREFIXES(WorkspaceWindowResizerTest, PhantomWindowShow); + FRIEND_TEST_ALL_PREFIXES(WorkspaceWindowResizerTest, PhantomStyle); - // Creates, shows and returns a phantom widget at |bounds| - // with kShellWindowId_ShelfContainer in |root_window| as a parent. - views::Widget* CreatePhantomWidget(aura::RootWindow* root_window, - const gfx::Rect& bounds_in_screen); + // Creates and shows the |phantom_widget_| at |bounds|. + // |layer| is shown on top of the phantom window if it is non-NULL. + // |layer| is not owned by this object. + void CreatePhantomWidget(const gfx::Rect& bounds); // Window the phantom is placed beneath. aura::Window* window_; @@ -74,24 +72,15 @@ class ASH_EXPORT PhantomWindowController : public ui::AnimationDelegate { // If set, the phantom window should get stacked below this window. aura::Window* phantom_below_window_; - // Initially the bounds of |window_| (in screen coordinates). - // Each time Show() is invoked |start_bounds_| is then reset to the bounds of - // |phantom_widget_| and |bounds_| is set to the value passed into Show(). - // The animation animates between these two values. + // Initially the bounds of |window_|. Each time Show() is invoked + // |start_bounds_| is then reset to the bounds of |phantom_widget_| and + // |bounds_| is set to the value passed into Show(). The animation animates + // between these two values. gfx::Rect start_bounds_; + gfx::Rect bounds_; - // Target bounds of the animation in screen coordinates. - gfx::Rect bounds_in_screen_; - - // The primary phantom representation of the window. It is parented by the - // root window matching the target bounds. views::Widget* phantom_widget_; - // If the animation starts on another display, this is the secondary phantom - // representation of the window used on the initial display, otherwise this is - // NULL. This allows animation to progress from one display into the other. - views::Widget* phantom_widget_start_; - // Used to transition the bounds. scoped_ptr animation_; diff --git a/chromium/ash/wm/workspace/workspace_layout_manager.cc b/chromium/ash/wm/workspace/workspace_layout_manager.cc index 69bcc16069a..0dd9dbf3464 100644 --- a/chromium/ash/wm/workspace/workspace_layout_manager.cc +++ b/chromium/ash/wm/workspace/workspace_layout_manager.cc @@ -48,13 +48,15 @@ void MoveToDisplayForRestore(aura::Window* window) { return; // Move only if the restore bounds is outside of - // the root window. There is no information about in which + // the display. There is no information about in which // display it should be restored, so this is best guess. // TODO(oshima): Restore information should contain the // work area information like WindowResizer does for the // last window location. - if (!window->GetRootWindow()->GetBoundsInScreen().Intersects( - *restore_bounds)) { + gfx::Rect display_area = + Shell::GetScreen()->GetDisplayNearestWindow(window).bounds(); + + if (!display_area.Intersects(*restore_bounds)) { DisplayController* display_controller = Shell::GetInstance()->display_controller(); const gfx::Display& display = @@ -87,14 +89,7 @@ void WorkspaceLayoutManager::SetShelf(internal::ShelfLayoutManager* shelf) { } void WorkspaceLayoutManager::OnWindowAddedToLayout(Window* child) { - // Adjust window bounds in case that the new child is given the bounds that - // is out of the workspace. Exclude the case where bounds is empty - // (this happens when a views::Widget is created), or the window - // is added with the bounds because a user explicitly moved to - // this position (drag and drop for example). - if (!child->bounds().IsEmpty() && - !wm::HasUserChangedWindowPositionOrSize(child)) - AdjustWindowBoundsWhenAdded(child); + AdjustWindowBoundsWhenAdded(child); BaseLayoutManager::OnWindowAddedToLayout(child); UpdateDesktopVisibility(); RearrangeVisibleWindowOnShow(child); @@ -252,6 +247,14 @@ void WorkspaceLayoutManager::AdjustWindowBoundsForWorkAreaChange( void WorkspaceLayoutManager::AdjustWindowBoundsWhenAdded( Window* window) { + // Don't adjust window bounds if the bounds are empty as this + // happens when a new views::Widget is created. + // When a window is dragged and dropped onto a different + // root window, the bounds will be updated after they are added + // to the root window. + if (window->bounds().IsEmpty()) + return; + if (!GetTrackedByWorkspace(window)) return; @@ -261,9 +264,14 @@ void WorkspaceLayoutManager::AdjustWindowBoundsWhenAdded( gfx::Rect bounds = window->bounds(); int min_width = bounds.width() * kMinimumPercentOnScreenArea; int min_height = bounds.height() * kMinimumPercentOnScreenArea; + // Use entire display instead of workarea because the workarea can + // be further shrunk by the docked area. The logic ensures 30% + // visibility which should be enough to see where the window gets + // moved. + gfx::Rect display_area = + Shell::GetScreen()->GetDisplayNearestWindow(window).bounds(); ash::wm::AdjustBoundsToEnsureWindowVisibility( - work_area_, min_width, min_height, &bounds); - + display_area, min_width, min_height, &bounds); if (window->bounds() != bounds) window->SetBounds(bounds); } diff --git a/chromium/ash/wm/workspace/workspace_layout_manager_unittest.cc b/chromium/ash/wm/workspace/workspace_layout_manager_unittest.cc index 3dce5b015c9..13cfdea04a3 100644 --- a/chromium/ash/wm/workspace/workspace_layout_manager_unittest.cc +++ b/chromium/ash/wm/workspace/workspace_layout_manager_unittest.cc @@ -304,6 +304,15 @@ TEST_F(WorkspaceLayoutManagerTest, WindowShouldBeOnScreenWhenAdded) { EXPECT_GT(bounds.width(), out_window->bounds().width() * 0.29); EXPECT_GT(bounds.height(), out_window->bounds().height() * 0.29); + aura::Window* parent = out_window->parent(); + parent->RemoveChild(out_window.get()); + out_window->SetBounds(gfx::Rect(-200, -200, 200, 200)); + // UserHasChangedWindowPositionOrSize flag shouldn't turn off this behavior. + wm::SetUserHasChangedWindowPositionOrSize(window.get(), true); + parent->AddChild(out_window.get()); + EXPECT_GT(bounds.width(), out_window->bounds().width() * 0.29); + EXPECT_GT(bounds.height(), out_window->bounds().height() * 0.29); + // Make sure we always make more than 1/3 of the window edge visible even // if the initial bounds intersects with display. window_bounds.SetRect(-150, -150, 200, 200); diff --git a/chromium/ash/wm/workspace/workspace_window_resizer.cc b/chromium/ash/wm/workspace/workspace_window_resizer.cc index 4b8c0aaf7e9..2143e45668b 100644 --- a/chromium/ash/wm/workspace/workspace_window_resizer.cc +++ b/chromium/ash/wm/workspace/workspace_window_resizer.cc @@ -87,13 +87,8 @@ scoped_ptr CreateWindowResizer( window_resizer = PanelWindowResizer::Create( window_resizer, window, point_in_parent, window_component, source); } - if (CommandLine::ForCurrentProcess()->HasSwitch( - switches::kAshEnableDockedWindows) && - window_resizer && window->parent() && - (window->parent()->id() == internal::kShellWindowId_DefaultContainer || - window->parent()->id() == internal::kShellWindowId_DockedContainer || - window->parent()->id() == internal::kShellWindowId_PanelContainer)) { - window_resizer = internal::DockedWindowResizer::Create( + if (window_resizer) { + window_resizer = DockedWindowResizer::Create( window_resizer, window, point_in_parent, window_component, source); } return make_scoped_ptr(window_resizer); @@ -103,6 +98,10 @@ namespace internal { namespace { +// Distance in pixels that the cursor must move past an edge for a window +// to move or resize beyond that edge. +const int kStickyDistancePixels = 64; + // Snapping distance used instead of WorkspaceWindowResizer::kScreenEdgeInset // when resizing a window using touchscreen. const int kScreenEdgeInsetForTouchResize = 32; @@ -117,7 +116,7 @@ bool ShouldStickToEdge(int distance_from_edge, int sticky_size) { distance_from_edge > -sticky_size; } return distance_from_edge < sticky_size && - distance_from_edge > -sticky_size * 2; + distance_from_edge > -sticky_size * 2; } // Returns the coordinate along the secondary axis to snap to. @@ -260,9 +259,6 @@ const int WorkspaceWindowResizer::kMinOnscreenHeight = 32; // static const int WorkspaceWindowResizer::kScreenEdgeInset = 8; -// static -const int WorkspaceWindowResizer::kStickyDistancePixels = 64; - // Represents the width or height of a window with constraints on its minimum // and maximum size. 0 represents a lack of a constraint. class WindowSize { @@ -509,7 +505,7 @@ gfx::Rect WorkspaceWindowResizer::GetFinalBounds( const gfx::Rect& bounds) const { if (snap_phantom_window_controller_.get() && snap_phantom_window_controller_->IsShowing()) { - return snap_phantom_window_controller_->bounds_in_screen(); + return snap_phantom_window_controller_->bounds(); } return bounds; } @@ -750,12 +746,8 @@ void WorkspaceWindowResizer::AdjustBoundsForMainWindow( } if (sticky_size > 0) { - // Possibly stick to edge except when a mouse pointer is outside the - // work area. - if (!(display.work_area().Contains(last_mouse_location_in_screen) && - StickToWorkAreaOnMove(work_area, sticky_size, bounds))) { + if (!StickToWorkAreaOnMove(work_area, sticky_size, bounds)) MagneticallySnapToOtherWindows(bounds); - } } } else if (sticky_size > 0) { MagneticallySnapResizeToOtherWindows(bounds); diff --git a/chromium/ash/wm/workspace/workspace_window_resizer.h b/chromium/ash/wm/workspace/workspace_window_resizer.h index 76176b1a2b4..61f18969cbc 100644 --- a/chromium/ash/wm/workspace/workspace_window_resizer.h +++ b/chromium/ash/wm/workspace/workspace_window_resizer.h @@ -41,10 +41,6 @@ class ASH_EXPORT WorkspaceWindowResizer : public WindowResizer { // this close to an edge of the screen it snaps to the edge. static const int kScreenEdgeInset; - // Distance in pixels that the cursor must move past an edge for a window - // to move or resize beyond that edge. - static const int kStickyDistancePixels; - virtual ~WorkspaceWindowResizer(); static WorkspaceWindowResizer* Create( @@ -69,7 +65,6 @@ class ASH_EXPORT WorkspaceWindowResizer : public WindowResizer { private: FRIEND_TEST_ALL_PREFIXES(WorkspaceWindowResizerTest, CancelSnapPhantom); FRIEND_TEST_ALL_PREFIXES(WorkspaceWindowResizerTest, PhantomSnapMaxSize); - FRIEND_TEST_ALL_PREFIXES(WorkspaceWindowResizerTest, PhantomWindowShow); // Type of snapping. enum SnapType { diff --git a/chromium/ash/wm/workspace/workspace_window_resizer_unittest.cc b/chromium/ash/wm/workspace/workspace_window_resizer_unittest.cc index 8459c54ef5f..a00d0121429 100644 --- a/chromium/ash/wm/workspace/workspace_window_resizer_unittest.cc +++ b/chromium/ash/wm/workspace/workspace_window_resizer_unittest.cc @@ -30,36 +30,6 @@ #include "ui/gfx/screen.h" #include "ui/views/widget/widget.h" -namespace ui { - -// Class to provide access to SlideAnimation internals for testing. -class SlideAnimation::TestApi { - public: - explicit TestApi(SlideAnimation* animation) : animation_(animation) {} - - void SetStartTime(base::TimeTicks ticks) { - animation_->SetStartTime(ticks); - } - - void Step(base::TimeTicks ticks) { - animation_->Step(ticks); - } - - void RunTillComplete() { - SetStartTime(base::TimeTicks()); - Step(base::TimeTicks() + - base::TimeDelta::FromMilliseconds(animation_->GetSlideDuration())); - EXPECT_EQ(1.0, animation_->GetCurrentValue()); - } - - private: - SlideAnimation* animation_; - - DISALLOW_COPY_AND_ASSIGN(TestApi); -}; - -} - namespace ash { namespace internal { namespace { @@ -200,12 +170,6 @@ class WorkspaceWindowResizerTest : public test::AshTestBase { touch_resize_window_->set_hit_test_bounds_override_inner(mouse_insets); } - // Simulate running the animation. - void RunAnimationTillComplete(ui::SlideAnimation* animation) { - ui::SlideAnimation::TestApi test_api(animation); - test_api.RunTillComplete(); - } - TestWindowDelegate delegate_; TestWindowDelegate delegate2_; TestWindowDelegate delegate3_; @@ -878,12 +842,8 @@ TEST_F(WorkspaceWindowResizerTest, SnapToEdge) { Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager()-> SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); window_->SetBounds(gfx::Rect(96, 112, 320, 160)); - // Click 50px to the right so that the mouse pointer does not leave the - // workspace ensuring sticky behavior. scoped_ptr resizer(WorkspaceWindowResizer::Create( - window_.get(), - window_->bounds().origin() + gfx::Vector2d(50, 0), - HTCAPTION, + window_.get(), gfx::Point(), HTCAPTION, aura::client::WINDOW_MOVE_SOURCE_MOUSE, empty_windows())); ASSERT_TRUE(resizer.get()); // Move to an x-coordinate of 15, which should not snap. @@ -998,12 +958,8 @@ TEST_F(WorkspaceWindowResizerTestSticky, StickToEdge) { Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager()-> SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); window_->SetBounds(gfx::Rect(96, 112, 320, 160)); - // Click 50px to the right so that the mouse pointer does not leave the - // workspace ensuring sticky behavior. scoped_ptr resizer(WorkspaceWindowResizer::Create( - window_.get(), - window_->bounds().origin() + gfx::Vector2d(50, 0), - HTCAPTION, + window_.get(), gfx::Point(), HTCAPTION, aura::client::WINDOW_MOVE_SOURCE_MOUSE, empty_windows())); ASSERT_TRUE(resizer.get()); // Move to an x-coordinate of 15, which should not stick. @@ -1038,22 +994,6 @@ TEST_F(WorkspaceWindowResizerTestSticky, StickToEdge) { // No need to test dragging < 0 as we force that to 0. } -// Verifies not sticking to edges when a mouse pointer is outside of work area. -TEST_F(WorkspaceWindowResizerTestSticky, NoStickToEdgeWhenOutside) { - Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager()-> - SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); - window_->SetBounds(gfx::Rect(96, 112, 320, 160)); - scoped_ptr resizer(WorkspaceWindowResizer::Create( - window_.get(), gfx::Point(), HTCAPTION, - aura::client::WINDOW_MOVE_SOURCE_MOUSE, empty_windows())); - ASSERT_TRUE(resizer.get()); - // Move to an x-coordinate of 15, which should not stick. - resizer->Drag(CalculateDragPoint(*resizer, 15 - 96, 0), 0); - // Move to -15, should still stick to 0. - resizer->Drag(CalculateDragPoint(*resizer, -15 - 96, 0), 0); - EXPECT_EQ("-15,112 320x160", window_->bounds().ToString()); -} - // Verifies a resize sticks when dragging TOPLEFT. TEST_F(WorkspaceWindowResizerTestSticky, StickToWorkArea_TOPLEFT) { window_->SetBounds(gfx::Rect(100, 200, 20, 30)); @@ -1865,114 +1805,5 @@ TEST_F(WorkspaceWindowResizerTest, TouchResizeToEdge_BOTTOM) { EXPECT_EQ(gfx::Rect(100, 100, 600, kRootHeight - 100).ToString(), touch_resize_window_->bounds().ToString()); } - -TEST_F(WorkspaceWindowResizerTest, PhantomWindowShow) { - if (!SupportsMultipleDisplays()) - return; - - UpdateDisplay("500x400,500x400"); - window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), - Shell::GetScreen()->GetPrimaryDisplay()); - Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); - EXPECT_EQ(root_windows[0], window_->GetRootWindow()); - - scoped_ptr resizer(WorkspaceWindowResizer::Create( - window_.get(), gfx::Point(), HTCAPTION, - aura::client::WINDOW_MOVE_SOURCE_MOUSE, empty_windows())); - ASSERT_TRUE(resizer.get()); - EXPECT_FALSE(resizer->snap_phantom_window_controller_.get()); - - // The pointer is on the edge but not shared. The snap phantom window - // controller should be non-NULL. - resizer->Drag(CalculateDragPoint(*resizer, 499, 0), 0); - EXPECT_TRUE(resizer->snap_phantom_window_controller_.get()); - PhantomWindowController* phantom_controller( - resizer->snap_phantom_window_controller_.get()); - - // phantom widget only in the left screen. - phantom_controller->Show(gfx::Rect(100, 100, 50, 60)); - EXPECT_TRUE(phantom_controller->phantom_widget_); - EXPECT_FALSE(phantom_controller->phantom_widget_start_); - EXPECT_EQ( - root_windows[0], - phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); - - // Move phantom widget into the right screen. Test that 2 widgets got created. - phantom_controller->Show(gfx::Rect(600, 100, 50, 60)); - EXPECT_TRUE(phantom_controller->phantom_widget_); - EXPECT_TRUE(phantom_controller->phantom_widget_start_); - EXPECT_EQ( - root_windows[1], - phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); - EXPECT_EQ( - root_windows[0], - phantom_controller->phantom_widget_start_->GetNativeWindow()-> - GetRootWindow()); - RunAnimationTillComplete(phantom_controller->animation_.get()); - - // Move phantom widget only in the right screen. Start widget should close. - phantom_controller->Show(gfx::Rect(700, 100, 50, 60)); - EXPECT_TRUE(phantom_controller->phantom_widget_); - EXPECT_FALSE(phantom_controller->phantom_widget_start_); - EXPECT_EQ( - root_windows[1], - phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); - RunAnimationTillComplete(phantom_controller->animation_.get()); - - // Move phantom widget into the left screen. Start widget should open. - phantom_controller->Show(gfx::Rect(100, 100, 50, 60)); - EXPECT_TRUE(phantom_controller->phantom_widget_); - EXPECT_TRUE(phantom_controller->phantom_widget_start_); - EXPECT_EQ( - root_windows[0], - phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); - EXPECT_EQ( - root_windows[1], - phantom_controller->phantom_widget_start_->GetNativeWindow()-> - GetRootWindow()); - RunAnimationTillComplete(phantom_controller->animation_.get()); - - // Move phantom widget while in the left screen. Start widget should close. - phantom_controller->Show(gfx::Rect(200, 100, 50, 60)); - EXPECT_TRUE(phantom_controller->phantom_widget_); - EXPECT_FALSE(phantom_controller->phantom_widget_start_); - EXPECT_EQ( - root_windows[0], - phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); - RunAnimationTillComplete(phantom_controller->animation_.get()); - - // Move phantom widget spanning both screens with most of the window in the - // right screen. Two widgets are created. - phantom_controller->Show(gfx::Rect(495, 100, 50, 60)); - EXPECT_TRUE(phantom_controller->phantom_widget_); - EXPECT_TRUE(phantom_controller->phantom_widget_start_); - EXPECT_EQ( - root_windows[1], - phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); - EXPECT_EQ( - root_windows[0], - phantom_controller->phantom_widget_start_->GetNativeWindow()-> - GetRootWindow()); - RunAnimationTillComplete(phantom_controller->animation_.get()); - - // Move phantom widget back into the left screen. Phantom widgets should swap. - phantom_controller->Show(gfx::Rect(200, 100, 50, 60)); - EXPECT_TRUE(phantom_controller->phantom_widget_); - EXPECT_TRUE(phantom_controller->phantom_widget_start_); - EXPECT_EQ( - root_windows[0], - phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); - EXPECT_EQ( - root_windows[1], - phantom_controller->phantom_widget_start_->GetNativeWindow()-> - GetRootWindow()); - RunAnimationTillComplete(phantom_controller->animation_.get()); - - // Hide phantom controller. Both widgets should close. - phantom_controller->Hide(); - EXPECT_FALSE(phantom_controller->phantom_widget_); - EXPECT_FALSE(phantom_controller->phantom_widget_start_); -} - } // namespace internal } // namespace ash diff --git a/chromium/ash/wm/workspace_controller.cc b/chromium/ash/wm/workspace_controller.cc index 7fbbda2f7af..e2ee3f5c222 100644 --- a/chromium/ash/wm/workspace_controller.cc +++ b/chromium/ash/wm/workspace_controller.cc @@ -39,6 +39,8 @@ WorkspaceController::WorkspaceController(aura::Window* viewport) event_handler_(new WorkspaceEventHandler(viewport_)) { SetWindowVisibilityAnimationTransition( viewport_, views::corewm::ANIMATE_NONE); + // Do this so when animating out windows don't extend beyond the bounds. + viewport_->layer()->SetMasksToBounds(true); // The layout-manager cannot be created in the initializer list since it // depends on the window to have been initialized. diff --git a/chromium/ash/wm/workspace_controller_unittest.cc b/chromium/ash/wm/workspace_controller_unittest.cc index 7dca75a08ba..f6a4ffb0ef2 100644 --- a/chromium/ash/wm/workspace_controller_unittest.cc +++ b/chromium/ash/wm/workspace_controller_unittest.cc @@ -1118,16 +1118,8 @@ class DragMaximizedNonTrackedWindowObserver } // aura::WindowObserver overrides: - // Counts number of times a window is reparented. Ignores reparenting into and - // from a docked container which is expected when a tab is dragged. virtual void OnWindowHierarchyChanged( const HierarchyChangeParams& params) OVERRIDE { - if ((params.old_parent->id() == kShellWindowId_DefaultContainer && - params.new_parent->id() == kShellWindowId_DockedContainer) || - (params.old_parent->id() == kShellWindowId_DockedContainer && - params.new_parent->id() == kShellWindowId_DefaultContainer)) { - return; - } change_count_++; } -- cgit v1.2.1