OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <sstream> | 5 #include <sstream> |
6 | 6 |
7 #include "apps/switches.h" | 7 #include "apps/switches.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 29 matching lines...) Expand all Loading... | |
40 #include "chrome/common/chrome_switches.h" | 40 #include "chrome/common/chrome_switches.h" |
41 #include "chrome/common/pref_names.h" | 41 #include "chrome/common/pref_names.h" |
42 #include "chrome/installer/launcher_support/chrome_launcher_support.h" | 42 #include "chrome/installer/launcher_support/chrome_launcher_support.h" |
43 #include "chrome/installer/util/browser_distribution.h" | 43 #include "chrome/installer/util/browser_distribution.h" |
44 #include "chrome/installer/util/google_update_settings.h" | 44 #include "chrome/installer/util/google_update_settings.h" |
45 #include "chrome/installer/util/util_constants.h" | 45 #include "chrome/installer/util/util_constants.h" |
46 #include "content/public/browser/browser_thread.h" | 46 #include "content/public/browser/browser_thread.h" |
47 #include "grit/chromium_strings.h" | 47 #include "grit/chromium_strings.h" |
48 #include "grit/generated_resources.h" | 48 #include "grit/generated_resources.h" |
49 #include "grit/google_chrome_strings.h" | 49 #include "grit/google_chrome_strings.h" |
50 #include "grit/theme_resources.h" | |
51 #include "ui/app_list/pagination_model.h" | 50 #include "ui/app_list/pagination_model.h" |
52 #include "ui/app_list/views/app_list_view.h" | 51 #include "ui/app_list/views/app_list_view.h" |
53 #include "ui/base/l10n/l10n_util.h" | 52 #include "ui/base/l10n/l10n_util.h" |
54 #include "ui/base/resource/resource_bundle.h" | 53 #include "ui/base/resource/resource_bundle.h" |
55 #include "ui/base/win/shell.h" | 54 #include "ui/base/win/shell.h" |
56 #include "ui/gfx/display.h" | 55 #include "ui/gfx/display.h" |
57 #include "ui/gfx/image/image_skia.h" | 56 #include "ui/gfx/image/image_skia.h" |
58 #include "ui/gfx/screen.h" | 57 #include "ui/gfx/screen.h" |
59 #include "ui/views/bubble/bubble_border.h" | 58 #include "ui/views/bubble/bubble_border.h" |
60 #include "ui/views/widget/widget.h" | 59 #include "ui/views/widget/widget.h" |
61 #include "win8/util/win8_util.h" | 60 #include "win8/util/win8_util.h" |
62 | 61 |
62 #if defined(GOOGLE_CHROME_BUILD) | |
63 #include "chrome/installer/util/install_util.h" | |
64 #endif | |
65 | |
63 #if defined(USE_AURA) | 66 #if defined(USE_AURA) |
64 #include "ui/aura/root_window.h" | 67 #include "ui/aura/root_window.h" |
65 #include "ui/aura/window.h" | 68 #include "ui/aura/window.h" |
66 #endif | 69 #endif |
67 | 70 |
68 namespace { | 71 namespace { |
69 | 72 |
70 // Offset from the cursor to the point of the bubble arrow. It looks weird | 73 // Offset from the cursor to the point of the bubble arrow. It looks weird |
71 // if the arrow comes up right on top of the cursor, so it is offset by this | 74 // if the arrow comes up right on top of the cursor, so it is offset by this |
72 // amount. | 75 // amount. |
73 static const int kAnchorOffset = 25; | 76 static const int kAnchorOffset = 25; |
74 | 77 |
75 static const wchar_t kTrayClassName[] = L"Shell_TrayWnd"; | 78 static const wchar_t kTrayClassName[] = L"Shell_TrayWnd"; |
76 | 79 |
77 // Icons are added to the resources of the DLL using icon names. The icon index | 80 // Icons are added to the resources of the DLL using icon names. The icon index |
78 // for the app list icon is named IDR_X_APP_LIST. Creating shortcuts needs to | 81 // for the app list icon is named IDR_X_APP_LIST or (for official builds) |
79 // specify a resource index, which are different to icon names. They are 0 | 82 // IDR_X_APP_LIST_SXS for Chrome Canary. Creating shortcuts needs to specify a |
80 // based and contiguous. As Google Chrome builds have extra icons the icon for | 83 // resource index, which are different to icon names. They are 0 based and |
81 // Google Chrome builds need to be higher. Unfortunately these indexes are not | 84 // contiguous. As Google Chrome builds have extra icons the icon for Google |
82 // in any generated header file. | 85 // Chrome builds need to be higher. Unfortunately these indexes are not in any |
86 // generated header file. | |
87 int GetAppListIconIndex() { | |
88 const int kAppListIconIndex = 5; | |
89 const int kAppListIconIndexSxS = 6; | |
90 const int kAppListIconIndexChromium = 1; | |
83 #if defined(GOOGLE_CHROME_BUILD) | 91 #if defined(GOOGLE_CHROME_BUILD) |
84 const int kAppListIconIndex = 5; | 92 if (InstallUtil::IsChromeSxSProcess()) |
93 return kAppListIconIndexSxS; | |
94 return kAppListIconIndex; | |
85 #else | 95 #else |
86 const int kAppListIconIndex = 1; | 96 return kAppListIconIndexChromium; |
87 #endif | 97 #endif |
98 } | |
88 | 99 |
89 CommandLine GetAppListCommandLine() { | 100 CommandLine GetAppListCommandLine() { |
90 const char* const kSwitchesToCopy[] = { switches::kUserDataDir }; | 101 const char* const kSwitchesToCopy[] = { switches::kUserDataDir }; |
91 CommandLine* current = CommandLine::ForCurrentProcess(); | 102 CommandLine* current = CommandLine::ForCurrentProcess(); |
92 CommandLine command_line(current->GetProgram()); | 103 CommandLine command_line(current->GetProgram()); |
93 command_line.CopySwitchesFrom(*current, kSwitchesToCopy, | 104 command_line.CopySwitchesFrom(*current, kSwitchesToCopy, |
94 arraysize(kSwitchesToCopy)); | 105 arraysize(kSwitchesToCopy)); |
95 command_line.AppendSwitch(switches::kShowAppList); | 106 command_line.AppendSwitch(switches::kShowAppList); |
96 return command_line; | 107 return command_line; |
97 } | 108 } |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
159 public: | 170 public: |
160 ScopedKeepAlive(); | 171 ScopedKeepAlive(); |
161 ~ScopedKeepAlive(); | 172 ~ScopedKeepAlive(); |
162 | 173 |
163 private: | 174 private: |
164 DISALLOW_COPY_AND_ASSIGN(ScopedKeepAlive); | 175 DISALLOW_COPY_AND_ASSIGN(ScopedKeepAlive); |
165 }; | 176 }; |
166 | 177 |
167 // The AppListController class manages global resources needed for the app | 178 // The AppListController class manages global resources needed for the app |
168 // list to operate, and controls when the app list is opened and closed. | 179 // list to operate, and controls when the app list is opened and closed. |
169 // TODO(tapted): Rename this class to AppListServiceWin and move entire file to | 180 // TODO(tapted): Rename this class to AppListServiceWin and move entire file to |
tapted
2013/04/10 06:36:38
Hrm. Still need to do this. This will make app_lis
| |
170 // chrome/browser/ui/app_list/app_list_service_win.cc after removing | 181 // chrome/browser/ui/app_list/app_list_service_win.cc after removing |
171 // chrome/browser/ui/views dependency. | 182 // chrome/browser/ui/views dependency. |
172 class AppListController : public AppListService { | 183 class AppListController : public AppListService { |
173 public: | 184 public: |
174 virtual ~AppListController(); | 185 virtual ~AppListController(); |
175 | 186 |
176 static AppListController* GetInstance() { | 187 static AppListController* GetInstance() { |
177 return Singleton<AppListController, | 188 return Singleton<AppListController, |
178 LeakySingletonTraits<AppListController> >::get(); | 189 LeakySingletonTraits<AppListController> >::get(); |
179 } | 190 } |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
327 AppListController::GetInstance()->AppListClosing(); | 338 AppListController::GetInstance()->AppListClosing(); |
328 } | 339 } |
329 | 340 |
330 gfx::NativeWindow AppListControllerDelegateWin::GetAppListWindow() { | 341 gfx::NativeWindow AppListControllerDelegateWin::GetAppListWindow() { |
331 app_list::AppListView* view = AppListController::GetInstance()->GetView(); | 342 app_list::AppListView* view = AppListController::GetInstance()->GetView(); |
332 return view ? view->GetWidget()->GetNativeWindow() : NULL; | 343 return view ? view->GetWidget()->GetNativeWindow() : NULL; |
333 } | 344 } |
334 | 345 |
335 gfx::ImageSkia AppListControllerDelegateWin::GetWindowIcon() { | 346 gfx::ImageSkia AppListControllerDelegateWin::GetWindowIcon() { |
336 gfx::ImageSkia* resource = ResourceBundle::GetSharedInstance(). | 347 gfx::ImageSkia* resource = ResourceBundle::GetSharedInstance(). |
337 GetImageSkiaNamed(IDR_APP_LIST); | 348 GetImageSkiaNamed(chrome::GetAppListIconResourceId()); |
338 return *resource; | 349 return *resource; |
339 } | 350 } |
340 | 351 |
341 bool AppListControllerDelegateWin::CanPin() { | 352 bool AppListControllerDelegateWin::CanPin() { |
342 return false; | 353 return false; |
343 } | 354 } |
344 | 355 |
345 void AppListControllerDelegateWin::OnShowExtensionPrompt() { | 356 void AppListControllerDelegateWin::OnShowExtensionPrompt() { |
346 AppListController::GetInstance()->set_can_close(false); | 357 AppListController::GetInstance()->set_can_close(false); |
347 } | 358 } |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
720 } | 731 } |
721 | 732 |
722 string16 AppListController::GetAppListIconPath() { | 733 string16 AppListController::GetAppListIconPath() { |
723 base::FilePath icon_path; | 734 base::FilePath icon_path; |
724 if (!PathService::Get(base::FILE_EXE, &icon_path)) { | 735 if (!PathService::Get(base::FILE_EXE, &icon_path)) { |
725 NOTREACHED(); | 736 NOTREACHED(); |
726 return string16(); | 737 return string16(); |
727 } | 738 } |
728 | 739 |
729 std::stringstream ss; | 740 std::stringstream ss; |
730 ss << "," << kAppListIconIndex; | 741 ss << "," << GetAppListIconIndex(); |
731 string16 result = icon_path.value(); | 742 string16 result = icon_path.value(); |
732 result.append(UTF8ToUTF16(ss.str())); | 743 result.append(UTF8ToUTF16(ss.str())); |
733 return result; | 744 return result; |
734 } | 745 } |
735 | 746 |
736 void AppListController::CheckTaskbarOrViewHasFocus() { | 747 void AppListController::CheckTaskbarOrViewHasFocus() { |
737 // Remember if the taskbar had focus without the right mouse button being | 748 // Remember if the taskbar had focus without the right mouse button being |
738 // down. | 749 // down. |
739 bool was_preserving_focus = preserving_focus_for_taskbar_menu_; | 750 bool was_preserving_focus = preserving_focus_for_taskbar_menu_; |
740 preserving_focus_for_taskbar_menu_ = false; | 751 preserving_focus_for_taskbar_menu_ = false; |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
854 | 865 |
855 base::win::ShortcutProperties shortcut_properties; | 866 base::win::ShortcutProperties shortcut_properties; |
856 shortcut_properties.set_target(chrome_exe); | 867 shortcut_properties.set_target(chrome_exe); |
857 shortcut_properties.set_working_dir(chrome_exe.DirName()); | 868 shortcut_properties.set_working_dir(chrome_exe.DirName()); |
858 | 869 |
859 string16 wide_switches(GetAppListCommandLine().GetArgumentsString()); | 870 string16 wide_switches(GetAppListCommandLine().GetArgumentsString()); |
860 shortcut_properties.set_arguments(wide_switches); | 871 shortcut_properties.set_arguments(wide_switches); |
861 shortcut_properties.set_description(l10n_util::GetStringUTF16( | 872 shortcut_properties.set_description(l10n_util::GetStringUTF16( |
862 IDS_APP_LIST_SHORTCUT_NAME)); | 873 IDS_APP_LIST_SHORTCUT_NAME)); |
863 | 874 |
864 shortcut_properties.set_icon(chrome_exe, kAppListIconIndex); | 875 shortcut_properties.set_icon(chrome_exe, GetAppListIconIndex()); |
865 shortcut_properties.set_app_id(app_model_id); | 876 shortcut_properties.set_app_id(app_model_id); |
866 | 877 |
867 const base::FilePath shortcut_path( | 878 const base::FilePath shortcut_path( |
868 GetAppListTaskbarShortcutPath(user_data_dir)); | 879 GetAppListTaskbarShortcutPath(user_data_dir)); |
869 base::win::CreateOrUpdateShortcutLink(shortcut_path, shortcut_properties, | 880 base::win::CreateOrUpdateShortcutLink(shortcut_path, shortcut_properties, |
870 base::win::SHORTCUT_CREATE_ALWAYS); | 881 base::win::SHORTCUT_CREATE_ALWAYS); |
871 | 882 |
872 if (!base::win::TaskbarPinShortcutLink(shortcut_path.value().c_str())) | 883 if (!base::win::TaskbarPinShortcutLink(shortcut_path.value().c_str())) |
873 LOG(WARNING) << "Failed to pin AppList using " << shortcut_path.value(); | 884 LOG(WARNING) << "Failed to pin AppList using " << shortcut_path.value(); |
874 } | 885 } |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
973 | 984 |
974 } // namespace | 985 } // namespace |
975 | 986 |
976 namespace chrome { | 987 namespace chrome { |
977 | 988 |
978 AppListService* GetAppListServiceWin() { | 989 AppListService* GetAppListServiceWin() { |
979 return AppListController::GetInstance(); | 990 return AppListController::GetInstance(); |
980 } | 991 } |
981 | 992 |
982 } // namespace chrome | 993 } // namespace chrome |
OLD | NEW |