Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1174)

Unified Diff: win8/metro_driver/settings_handler.cc

Issue 10875008: Integrate the Windows 8 code into the Chromium tree. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove conflicting OWNERS file. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « win8/metro_driver/settings_handler.h ('k') | win8/metro_driver/stdafx.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: win8/metro_driver/settings_handler.cc
diff --git a/win8/metro_driver/settings_handler.cc b/win8/metro_driver/settings_handler.cc
new file mode 100644
index 0000000000000000000000000000000000000000..6feae24320f7390c736f7cc2e3c33de095b6a67e
--- /dev/null
+++ b/win8/metro_driver/settings_handler.cc
@@ -0,0 +1,175 @@
+// 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 "stdafx.h"
+#include "settings_handler.h"
+
+// This include allows to send WM_SYSCOMMANDs to chrome.
+#include "chrome/app/chrome_command_ids.h"
+#include "chrome_app_view.h"
+#include "winrt_utils.h"
+
+typedef winfoundtn::ITypedEventHandler<
+ winui::ApplicationSettings::SettingsPane*,
+ winui::ApplicationSettings::SettingsPaneCommandsRequestedEventArgs*>
+ CommandsRequestedHandler;
+
+namespace {
+
+// String identifiers for the settings pane commands.
+const wchar_t* kSettingsId = L"settings";
+const wchar_t* kHelpId = L"help";
+const wchar_t* kAboutId = L"about";
+
+}
+
+SettingsHandler::SettingsHandler() {
+ DVLOG(1) << __FUNCTION__;
+}
+
+SettingsHandler::~SettingsHandler() {
+ DVLOG(1) << __FUNCTION__;
+}
+
+HRESULT SettingsHandler::Initialize() {
+ mswr::ComPtr<winui::ApplicationSettings::ISettingsPaneStatics>
+ settings_pane_statics;
+ HRESULT hr = winrt_utils::CreateActivationFactory(
+ RuntimeClass_Windows_UI_ApplicationSettings_SettingsPane,
+ settings_pane_statics.GetAddressOf());
+ CheckHR(hr, "Failed to activate ISettingsPaneStatics");
+
+ mswr::ComPtr<winui::ApplicationSettings::ISettingsPane> settings_pane;
+ hr = settings_pane_statics->GetForCurrentView(&settings_pane);
+ CheckHR(hr, "Failed to get ISettingsPane");
+
+ hr = settings_pane->add_CommandsRequested(
+ mswr::Callback<CommandsRequestedHandler>(
+ this,
+ &SettingsHandler::OnSettingsCommandsRequested).Get(),
+ &settings_token_);
+ CheckHR(hr, "Failed to add CommandsRequested");
+
+ return hr;
+}
+
+HRESULT SettingsHandler::OnSettingsCommandsRequested(
+ winui::ApplicationSettings::ISettingsPane* settings_pane,
+ winui::ApplicationSettings::ISettingsPaneCommandsRequestedEventArgs* args) {
+ mswr::ComPtr<winui::ApplicationSettings::ISettingsCommandFactory>
+ settings_command_factory;
+ HRESULT hr = winrt_utils::CreateActivationFactory(
+ RuntimeClass_Windows_UI_ApplicationSettings_SettingsCommand,
+ settings_command_factory.GetAddressOf());
+ CheckHR(hr, "Failed to activate ISettingsCommandFactory");
+
+ mswr::ComPtr<winui::ApplicationSettings::ISettingsPaneCommandsRequest>
+ settings_command_request;
+ hr = args->get_Request(&settings_command_request);
+ CheckHR(hr, "Failed to get_Request");
+
+ mswr::ComPtr<SettingsHandler::ISettingsCommandVector> application_commands;
+ hr = settings_command_request->get_ApplicationCommands(&application_commands);
+ CheckHR(hr, "Failed to get_ApplicationCommands");
+
+ // TODO(mad): Internationalize the hard coded user visible strings.
+ hr = AppendNewSettingsCommand(
+ kSettingsId, L"Settings", settings_command_factory.Get(),
+ application_commands.Get());
+ CheckHR(hr, "Failed to append new settings command");
+
+ hr = AppendNewSettingsCommand(
+ kHelpId, L"Help", settings_command_factory.Get(),
+ application_commands.Get());
+ CheckHR(hr, "Failed to append new help command");
+
+ hr = AppendNewSettingsCommand(
+ kAboutId, L"About", settings_command_factory.Get(),
+ application_commands.Get());
+ CheckHR(hr, "Failed to append new about command");
+
+ return hr;
+}
+
+HRESULT SettingsHandler::AppendNewSettingsCommand(
+ const wchar_t* id,
+ const wchar_t* name,
+ winui::ApplicationSettings::ISettingsCommandFactory*
+ settings_command_factory,
+ SettingsHandler::ISettingsCommandVector* settings_command_vector) {
+ mswr::ComPtr<winfoundtn::IPropertyValue> settings_id;
+ HRESULT hr = GetSettingsId(id, &settings_id);
+ CheckHR(hr, "Can't get settings id");
+
+ mswrw::HString settings_name;
+ settings_name.Attach(MakeHString(name));
+ mswr::ComPtr<winui::Popups::IUICommand> command;
+ hr = settings_command_factory->CreateSettingsCommand(
+ settings_id.Get(),
+ settings_name.Get(),
+ mswr::Callback<winui::Popups::IUICommandInvokedHandler>(
+ &SettingsHandler::OnSettings).Get(),
+ command.GetAddressOf());
+ CheckHR(hr, "Can't create settings command");
+
+ hr = settings_command_vector->Append(command.Get());
+ CheckHR(hr, "Failed to append settings command");
+
+ return hr;
+}
+
+HRESULT SettingsHandler::OnSettings(winui::Popups::IUICommand* command) {
+ mswr::ComPtr<winfoundtn::IPropertyValue> settings_id;
+ HRESULT hr = GetSettingsId(kSettingsId, &settings_id);
+ CheckHR(hr, "Failed to get settings id");
+
+ mswr::ComPtr<winfoundtn::IPropertyValue> help_id;
+ hr = GetSettingsId(kHelpId, &help_id);
+ CheckHR(hr, "Failed to get settings id");
+
+ mswr::ComPtr<winfoundtn::IPropertyValue> about_id;
+ hr = GetSettingsId(kAboutId, &about_id);
+ CheckHR(hr, "Failed to get settings id");
+
+ mswr::ComPtr<winfoundtn::IPropertyValue> command_id;
+ hr = command->get_Id(&command_id);
+ CheckHR(hr, "Failed to get command id");
+
+ INT32 result = -1;
+ hr = winrt_utils::CompareProperties(
+ command_id.Get(), settings_id.Get(), &result);
+ CheckHR(hr, "Failed to compare ids");
+
+ HWND chrome_window = globals.host_windows.front().first;
+
+ if (result == 0) {
+ ::PostMessageW(chrome_window, WM_SYSCOMMAND, IDC_OPTIONS, 0);
+ return S_OK;
+ }
+
+ hr = winrt_utils::CompareProperties(command_id.Get(), help_id.Get(), &result);
+ CheckHR(hr, "Failed to compare ids");
+ if (result == 0) {
+ ::PostMessageW(chrome_window, WM_SYSCOMMAND, IDC_HELP_PAGE_VIA_MENU, 0);
+ return S_OK;
+ }
+
+ hr = winrt_utils::CompareProperties(
+ command_id.Get(), about_id.Get(), &result);
+ CheckHR(hr, "Failed to compare ids");
+ if (result == 0) {
+ ::PostMessageW(chrome_window, WM_SYSCOMMAND, IDC_ABOUT, 0);
+ return S_OK;
+ }
+
+ return S_OK;
+}
+
+HRESULT SettingsHandler::GetSettingsId(
+ const wchar_t* value, winfoundtn::IPropertyValue** settings_id) {
+ mswrw::HString property_value_string;
+ property_value_string.Attach(MakeHString(value));
+ return winrt_utils::CreateStringProperty(property_value_string.Get(),
+ settings_id);
+}
« no previous file with comments | « win8/metro_driver/settings_handler.h ('k') | win8/metro_driver/stdafx.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698