diff --git a/support/hololens/ServoApp/App.cpp b/support/hololens/ServoApp/App.cpp
index 917226dc4efb..a505da34d5aa 100644
--- a/support/hololens/ServoApp/App.cpp
+++ b/support/hololens/ServoApp/App.cpp
@@ -32,9 +32,8 @@ App::App() {
}
void App::createRootFrame(
- bool prelaunchActivated,
+ Frame &rootFrame, bool prelaunchActivated,
winrt::Windows::Foundation::IInspectable const &args) {
- Frame rootFrame{nullptr};
auto content = Window::Current().Content();
if (content) {
rootFrame = content.try_as();
@@ -63,13 +62,22 @@ void App::createRootFrame(
}
void App::OnLaunched(LaunchActivatedEventArgs const &e) {
- this->createRootFrame(e.PrelaunchActivated(), box_value(e.Arguments()));
+ Frame rootFrame{nullptr};
+ this->createRootFrame(rootFrame, e.PrelaunchActivated(),
+ box_value(e.Arguments()));
}
void App::OnActivated(IActivatedEventArgs const &args) {
if (args.Kind() == Windows::ApplicationModel::Activation::ActivationKind::
CommandLineLaunch) {
- return this->createRootFrame(false, nullptr);
+ auto cmdLineArgs{args.as()};
+ auto cmdLineStr = cmdLineArgs.Operation().Arguments();
+ Frame rootFrame{nullptr};
+ this->createRootFrame(rootFrame, false, nullptr);
+ auto page = rootFrame.Content().try_as();
+ page->SetArgs(cmdLineStr);
+ return;
}
if (args.Kind() ==
@@ -82,10 +90,7 @@ void App::OnActivated(IActivatedEventArgs const &args) {
auto content = Window::Current().Content();
bool isRunning = content != nullptr;
if (!isRunning) {
- rootFrame = Frame();
- rootFrame.Navigate(xaml_typename());
- Window::Current().Content(rootFrame);
- Window::Current().Activate();
+ this->createRootFrame(rootFrame, false, nullptr);
} else {
rootFrame = content.try_as();
}
diff --git a/support/hololens/ServoApp/App.h b/support/hololens/ServoApp/App.h
index 8abc9bc8d2ed..4772306e91fe 100644
--- a/support/hololens/ServoApp/App.h
+++ b/support/hololens/ServoApp/App.h
@@ -9,12 +9,12 @@ namespace winrt::ServoApp::implementation {
struct App : AppT {
App();
- void createRootFrame(bool prelaunchActivated,
- winrt::Windows::Foundation::IInspectable const &args);
+ void createRootFrame(winrt::Windows::UI::Xaml::Controls::Frame &, bool,
+ winrt::Windows::Foundation::IInspectable const &);
void OnLaunched(
Windows::ApplicationModel::Activation::LaunchActivatedEventArgs const &);
void App::OnActivated(
- Windows::ApplicationModel::Activation::IActivatedEventArgs const &args);
+ Windows::ApplicationModel::Activation::IActivatedEventArgs const &);
void OnSuspending(IInspectable const &,
Windows::ApplicationModel::SuspendingEventArgs const &);
void OnNavigationFailed(
diff --git a/support/hololens/ServoApp/BrowserPage.cpp b/support/hololens/ServoApp/BrowserPage.cpp
index a4d5fcd2a947..558b403a43da 100644
--- a/support/hololens/ServoApp/BrowserPage.cpp
+++ b/support/hololens/ServoApp/BrowserPage.cpp
@@ -67,6 +67,8 @@ void BrowserPage::SetTransientMode(bool transient) {
: Visibility::Visible);
}
+void BrowserPage::SetArgs(hstring args) { servoControl().SetArgs(args); }
+
void BrowserPage::Shutdown() { servoControl().Shutdown(); }
/**** USER INTERACTIONS WITH UI ****/
diff --git a/support/hololens/ServoApp/BrowserPage.h b/support/hololens/ServoApp/BrowserPage.h
index 89372c9af3ba..8c3a540d4c1e 100644
--- a/support/hololens/ServoApp/BrowserPage.h
+++ b/support/hololens/ServoApp/BrowserPage.h
@@ -29,6 +29,7 @@ struct BrowserPage : BrowserPageT {
void Shutdown();
void LoadServoURI(Windows::Foundation::Uri uri);
void SetTransientMode(bool);
+ void SetArgs(hstring);
private:
void BindServoEvents();
diff --git a/support/hololens/ServoApp/ServoControl/Servo.cpp b/support/hololens/ServoApp/ServoControl/Servo.cpp
index c315cb984092..70a5b9c6bf50 100644
--- a/support/hololens/ServoApp/ServoControl/Servo.cpp
+++ b/support/hololens/ServoApp/ServoControl/Servo.cpp
@@ -56,12 +56,12 @@ const char* get_clipboard_contents() {
return nullptr;
}
-Servo::Servo(hstring url, GLsizei width, GLsizei height, float dpi,
+Servo::Servo(hstring url, hstring args, GLsizei width, GLsizei height, float dpi,
ServoDelegate &aDelegate)
: mWindowHeight(height), mWindowWidth(width), mDelegate(aDelegate) {
capi::CInitOptions o;
- o.args = "--pref dom.webxr.enabled";
+ o.args = *hstring2char(args);
o.url = *hstring2char(url);
o.width = mWindowWidth;
o.height = mWindowHeight;
diff --git a/support/hololens/ServoApp/ServoControl/Servo.h b/support/hololens/ServoApp/ServoControl/Servo.h
index 170bc466e4b3..26e268bd7a7c 100644
--- a/support/hololens/ServoApp/ServoControl/Servo.h
+++ b/support/hololens/ServoApp/ServoControl/Servo.h
@@ -43,7 +43,7 @@ class ServoDelegate {
class Servo {
public:
- Servo(hstring, GLsizei, GLsizei, float, ServoDelegate &);
+ Servo(hstring, hstring, GLsizei, GLsizei, float, ServoDelegate &);
~Servo();
ServoDelegate &Delegate() { return mDelegate; }
diff --git a/support/hololens/ServoApp/ServoControl/ServoControl.cpp b/support/hololens/ServoApp/ServoControl/ServoControl.cpp
index dc721410b89f..1d409e86c958 100644
--- a/support/hololens/ServoApp/ServoControl/ServoControl.cpp
+++ b/support/hololens/ServoApp/ServoControl/ServoControl.cpp
@@ -40,20 +40,19 @@ void ServoControl::OnLoaded(IInspectable const &, RoutedEventArgs const &) {
std::bind(&ServoControl::OnSurfaceClicked, this, _1, _2));
panel.ManipulationStarted(
[=](IInspectable const &,
- Input::ManipulationStartedRoutedEventArgs const &e) {
+ Input::ManipulationStartedRoutedEventArgs const &e) {
mOnCaptureGesturesStartedEvent();
e.Handled(true);
});
panel.ManipulationCompleted(
[=](IInspectable const &,
- Input::ManipulationCompletedRoutedEventArgs const &e) {
+ Input::ManipulationCompletedRoutedEventArgs const &e) {
mOnCaptureGesturesEndedEvent();
e.Handled(true);
});
panel.ManipulationDelta(
std::bind(&ServoControl::OnSurfaceManipulationDelta, this, _1, _2));
- Panel().SizeChanged(
- std::bind(&ServoControl::OnSurfaceResized, this, _1, _2));
+ Panel().SizeChanged(std::bind(&ServoControl::OnSurfaceResized, this, _1, _2));
InitializeConditionVariable(&mGLCondVar);
InitializeCriticalSection(&mGLLock);
CreateRenderSurface();
@@ -166,7 +165,8 @@ void ServoControl::Loop() {
if (mServo == nullptr) {
log("Entering loop");
ServoDelegate *sd = static_cast(this);
- mServo = std::make_unique(mInitialURL, panelWidth, panelHeight, mDPI, *sd);
+ mServo = std::make_unique(mInitialURL, mArgs, panelWidth, panelHeight, mDPI,
+ *sd);
} else {
// FIXME: this will fail since create_task didn't pick the thread
// where Servo was running initially.
@@ -273,9 +273,7 @@ void ServoControl::WakeUp() {
bool ServoControl::OnServoAllowNavigation(hstring uri) {
if (mTransient) {
- RunOnUIThread([=] {
- Launcher::LaunchUriAsync(Uri{uri});
- });
+ RunOnUIThread([=] { Launcher::LaunchUriAsync(Uri{uri}); });
}
return !mTransient;
}
@@ -288,7 +286,8 @@ void ServoControl::OnServoAnimatingChanged(bool animating) {
}
void ServoControl::OnServoIMEStateChanged(bool aShow) {
- // FIXME: https://docs.microsoft.com/en-us/windows/win32/winauto/uiauto-implementingtextandtextrange
+ // FIXME:
+ // https://docs.microsoft.com/en-us/windows/win32/winauto/uiauto-implementingtextandtextrange
}
template void ServoControl::RunOnUIThread(Callable cb) {
diff --git a/support/hololens/ServoApp/ServoControl/ServoControl.h b/support/hololens/ServoApp/ServoControl/ServoControl.h
index 1476b4ba7b5c..4baa861d463a 100644
--- a/support/hololens/ServoApp/ServoControl/ServoControl.h
+++ b/support/hololens/ServoApp/ServoControl/ServoControl.h
@@ -72,6 +72,8 @@ struct ServoControl : ServoControlT, public servo::ServoDelegate {
void SetTransientMode(bool transient) { mTransient = transient; }
+ void SetArgs(hstring args) { mArgs = args; }
+
virtual void WakeUp();
virtual void OnServoLoadStarted();
virtual void OnServoLoadEnded();
@@ -139,6 +141,7 @@ struct ServoControl : ServoControlT, public servo::ServoDelegate {
CRITICAL_SECTION mGLLock;
CONDITION_VARIABLE mGLCondVar;
std::unique_ptr> mLoopTask;
+ hstring mArgs;
};
} // namespace winrt::ServoApp::implementation
diff --git a/support/hololens/ServoApp/ServoControl/ServoControl.idl b/support/hololens/ServoApp/ServoControl/ServoControl.idl
index a8f6328c5528..597fe3320da1 100644
--- a/support/hololens/ServoApp/ServoControl/ServoControl.idl
+++ b/support/hololens/ServoApp/ServoControl/ServoControl.idl
@@ -11,6 +11,7 @@ namespace ServoApp {
void Stop();
Windows.Foundation.Uri LoadURIOrSearch(String url);
void SetTransientMode(Boolean transient);
+ void SetArgs(String args);
void Shutdown();
event EventDelegate OnLoadStarted;
event EventDelegate OnLoadEnded;