Commit 65805578 authored by Garfield Tan's avatar Garfield Tan Committed by Commit Bot

Add wayland impl of setting orientation lock.

BUG=823634
BUG=b/74621390
TEST=Manual tests with WM test app. Exo unit tests pass.

Change-Id: I0e0595fc62a50498790fd99144b547a88d1d9ba6
Reviewed-on: https://chromium-review.googlesource.com/996401
Commit-Queue: Garfield Tan <xutan@chromium.org>
Reviewed-by: default avatarDavid Reveman <reveman@chromium.org>
Reviewed-by: default avatarMitsuru Oshima <oshima@chromium.org>
Cr-Commit-Position: refs/heads/master@{#550748}
parent 4cebbb33
...@@ -463,6 +463,21 @@ void ClientControlledShellSurface::SetExtraTitle( ...@@ -463,6 +463,21 @@ void ClientControlledShellSurface::SetExtraTitle(
widget_->UpdateWindowTitle(); widget_->UpdateWindowTitle();
} }
void ClientControlledShellSurface::SetOrientationLock(
ash::OrientationLockType orientation_lock) {
TRACE_EVENT1("exo", "ClientControlledShellSurface::SetOrientationLock",
"orientation_lock", static_cast<int>(orientation_lock));
if (!widget_) {
initial_orientation_lock_ = orientation_lock;
return;
}
ash::Shell* shell = ash::Shell::Get();
shell->screen_orientation_controller()->LockOrientationForWindow(
widget_->GetNativeWindow(), orientation_lock);
}
void ClientControlledShellSurface::OnBoundsChangeEvent( void ClientControlledShellSurface::OnBoundsChangeEvent(
ash::mojom::WindowStateType current_state, ash::mojom::WindowStateType current_state,
ash::mojom::WindowStateType requested_state, ash::mojom::WindowStateType requested_state,
...@@ -828,6 +843,8 @@ void ClientControlledShellSurface::InitializeWindowState( ...@@ -828,6 +843,8 @@ void ClientControlledShellSurface::InitializeWindowState(
frame_view->SetCaptionButtonModel(std::make_unique<CaptionButtonModel>( frame_view->SetCaptionButtonModel(std::make_unique<CaptionButtonModel>(
frame_visible_button_mask_, frame_enabled_button_mask_)); frame_visible_button_mask_, frame_enabled_button_mask_));
UpdateAutoHideFrame(); UpdateAutoHideFrame();
if (initial_orientation_lock_ != ash::OrientationLockType::kAny)
SetOrientationLock(initial_orientation_lock_);
} }
float ClientControlledShellSurface::GetScale() const { float ClientControlledShellSurface::GetScale() const {
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include "ash/display/screen_orientation_controller.h"
#include "ash/display/window_tree_host_manager.h" #include "ash/display/window_tree_host_manager.h"
#include "ash/wm/client_controlled_state.h" #include "ash/wm/client_controlled_state.h"
#include "base/callback.h" #include "base/callback.h"
...@@ -171,6 +172,12 @@ class ClientControlledShellSurface ...@@ -171,6 +172,12 @@ class ClientControlledShellSurface
// Set the extra title for the surface. // Set the extra title for the surface.
void SetExtraTitle(const base::string16& extra_title); void SetExtraTitle(const base::string16& extra_title);
// Set specific orientation lock for this surface. When this surface is in
// foreground and the display can be rotated (e.g. tablet mode), apply the
// behavior defined by |orientation_lock|. See more details in
// //ash/display/screen_orientation_controller.h.
void SetOrientationLock(ash::OrientationLockType orientation_lock);
// Overridden from SurfaceDelegate: // Overridden from SurfaceDelegate:
void OnSurfaceCommit() override; void OnSurfaceCommit() override;
bool IsInputEnabled(Surface* surface) const override; bool IsInputEnabled(Surface* surface) const override;
...@@ -293,6 +300,11 @@ class ClientControlledShellSurface ...@@ -293,6 +300,11 @@ class ClientControlledShellSurface
std::unique_ptr<ui::CompositorLock> orientation_compositor_lock_; std::unique_ptr<ui::CompositorLock> orientation_compositor_lock_;
// The orientation to be applied when widget is being created. Only set when
// widget is not created yet orientation lock is being set.
ash::OrientationLockType initial_orientation_lock_ =
ash::OrientationLockType::kAny;
DISALLOW_COPY_AND_ASSIGN(ClientControlledShellSurface); DISALLOW_COPY_AND_ASSIGN(ClientControlledShellSurface);
}; };
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "components/exo/client_controlled_shell_surface.h" #include "components/exo/client_controlled_shell_surface.h"
#include "ash/display/screen_orientation_controller.h"
#include "ash/frame/caption_buttons/caption_button_model.h" #include "ash/frame/caption_buttons/caption_button_model.h"
#include "ash/frame/caption_buttons/frame_caption_button_container_view.h" #include "ash/frame/caption_buttons/frame_caption_button_container_view.h"
#include "ash/frame/custom_frame_view_ash.h" #include "ash/frame/custom_frame_view_ash.h"
...@@ -65,6 +66,11 @@ int GetShadowElevation(aura::Window* window) { ...@@ -65,6 +66,11 @@ int GetShadowElevation(aura::Window* window) {
return window->GetProperty(wm::kShadowElevationKey); return window->GetProperty(wm::kShadowElevationKey);
} }
void EnableTabletMode(bool enable) {
ash::Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(
enable);
}
} // namespace } // namespace
TEST_F(ClientControlledShellSurfaceTest, SetPinned) { TEST_F(ClientControlledShellSurfaceTest, SetPinned) {
...@@ -1152,4 +1158,37 @@ TEST_F(ClientControlledShellSurfaceTest, MultiDisplay) { ...@@ -1152,4 +1158,37 @@ TEST_F(ClientControlledShellSurfaceTest, MultiDisplay) {
} }
} }
// Set orientation lock to a window.
TEST_F(ClientControlledShellSurfaceTest, SetOrientationLock) {
display::test::DisplayManagerTestApi(ash::Shell::Get()->display_manager())
.SetFirstDisplayAsInternalDisplay();
EnableTabletMode(true);
ash::ScreenOrientationController* controller =
ash::Shell::Get()->screen_orientation_controller();
gfx::Size buffer_size(256, 256);
std::unique_ptr<Buffer> buffer(
new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)));
std::unique_ptr<Surface> surface(new Surface);
auto shell_surface =
exo_test_helper()->CreateClientControlledShellSurface(surface.get());
surface->Attach(buffer.get());
shell_surface->SetMaximized();
surface->Commit();
shell_surface->SetOrientationLock(
ash::OrientationLockType::kLandscapePrimary);
EXPECT_TRUE(controller->rotation_locked());
display::Display display(display::Screen::GetScreen()->GetPrimaryDisplay());
gfx::Size displaySize = display.size();
EXPECT_GT(displaySize.width(), displaySize.height());
shell_surface->SetOrientationLock(ash::OrientationLockType::kAny);
EXPECT_FALSE(controller->rotation_locked());
EnableTabletMode(false);
}
} // namespace exo } // namespace exo
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "ash/display/screen_orientation_controller.h"
#include "ash/frame/caption_buttons/caption_button_types.h" #include "ash/frame/caption_buttons/caption_button_types.h"
#include "ash/ime/ime_controller.h" #include "ash/ime/ime_controller.h"
#include "ash/public/cpp/shell_window_ids.h" #include "ash/public/cpp/shell_window_ids.h"
...@@ -2258,6 +2259,36 @@ void remote_surface_set_extra_title(wl_client* client, ...@@ -2258,6 +2259,36 @@ void remote_surface_set_extra_title(wl_client* client,
base::string16(base::UTF8ToUTF16(extra_title))); base::string16(base::UTF8ToUTF16(extra_title)));
} }
ash::OrientationLockType OrientationLock(uint32_t orientation_lock) {
switch (orientation_lock) {
case ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_NONE:
return ash::OrientationLockType::kAny;
case ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_CURRENT:
return ash::OrientationLockType::kCurrent;
case ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_PORTRAIT:
return ash::OrientationLockType::kPortrait;
case ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_LANDSCAPE:
return ash::OrientationLockType::kLandscape;
case ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_PORTRAIT_PRIMARY:
return ash::OrientationLockType::kPortraitPrimary;
case ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_PORTRAIT_SECONDARY:
return ash::OrientationLockType::kPortraitSecondary;
case ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_LANDSCAPE_PRIMARY:
return ash::OrientationLockType::kLandscapePrimary;
case ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_LANDSCAPE_SECONDARY:
return ash::OrientationLockType::kLandscapeSecondary;
}
VLOG(2) << "Unexpected value of orientation_lock: " << orientation_lock;
return ash::OrientationLockType::kAny;
}
void remote_surface_set_orientation_lock(wl_client* client,
wl_resource* resource,
uint32_t orientation_lock) {
GetUserDataAs<ClientControlledShellSurface>(resource)->SetOrientationLock(
OrientationLock(orientation_lock));
}
const struct zcr_remote_surface_v1_interface remote_surface_implementation = { const struct zcr_remote_surface_v1_interface remote_surface_implementation = {
remote_surface_destroy, remote_surface_destroy,
remote_surface_set_app_id, remote_surface_set_app_id,
...@@ -2297,7 +2328,8 @@ const struct zcr_remote_surface_v1_interface remote_surface_implementation = { ...@@ -2297,7 +2328,8 @@ const struct zcr_remote_surface_v1_interface remote_surface_implementation = {
remote_surface_start_resize, remote_surface_start_resize,
remote_surface_set_frame, remote_surface_set_frame,
remote_surface_set_frame_buttons, remote_surface_set_frame_buttons,
remote_surface_set_extra_title}; remote_surface_set_extra_title,
remote_surface_set_orientation_lock};
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// notification_surface_interface: // notification_surface_interface:
...@@ -2724,7 +2756,7 @@ const struct zcr_remote_shell_v1_interface remote_shell_implementation = { ...@@ -2724,7 +2756,7 @@ const struct zcr_remote_shell_v1_interface remote_shell_implementation = {
remote_shell_destroy, remote_shell_get_remote_surface, remote_shell_destroy, remote_shell_get_remote_surface,
remote_shell_get_notification_surface}; remote_shell_get_notification_surface};
const uint32_t remote_shell_version = 13; const uint32_t remote_shell_version = 14;
void bind_remote_shell(wl_client* client, void bind_remote_shell(wl_client* client,
void* data, void* data,
......
...@@ -660,6 +660,50 @@ enum zcr_remote_surface_v1_frame_button_type { ...@@ -660,6 +660,50 @@ enum zcr_remote_surface_v1_frame_button_type {
}; };
#endif /* ZCR_REMOTE_SURFACE_V1_FRAME_BUTTON_TYPE_ENUM */ #endif /* ZCR_REMOTE_SURFACE_V1_FRAME_BUTTON_TYPE_ENUM */
#ifndef ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_ENUM
#define ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_ENUM
/**
* @ingroup iface_zcr_remote_surface_v1
* orientation lock request for remote surfaces
*
* Defines orientation request when a remote surface is in foreground.
*/
enum zcr_remote_surface_v1_orientation_lock {
/**
* no orientation lock
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_NONE = 1,
/**
* primary or secondary portrait
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_PORTRAIT = 2,
/**
* primary or secondary landscape
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_LANDSCAPE = 3,
/**
* keep current orientation
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_CURRENT = 4,
/**
* primary portrait
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_PORTRAIT_PRIMARY = 5,
/**
* primary landscape
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_LANDSCAPE_PRIMARY = 6,
/**
* secondary portrait
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_PORTRAIT_SECONDARY = 7,
/**
* secondary landscape
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_LANDSCAPE_SECONDARY = 8,
};
#endif /* ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_ENUM */
/** /**
* @ingroup iface_zcr_remote_surface_v1 * @ingroup iface_zcr_remote_surface_v1
* @struct zcr_remote_surface_v1_listener * @struct zcr_remote_surface_v1_listener
...@@ -846,6 +890,7 @@ zcr_remote_surface_v1_add_listener(struct zcr_remote_surface_v1 *zcr_remote_surf ...@@ -846,6 +890,7 @@ zcr_remote_surface_v1_add_listener(struct zcr_remote_surface_v1 *zcr_remote_surf
#define ZCR_REMOTE_SURFACE_V1_SET_FRAME 36 #define ZCR_REMOTE_SURFACE_V1_SET_FRAME 36
#define ZCR_REMOTE_SURFACE_V1_SET_FRAME_BUTTONS 37 #define ZCR_REMOTE_SURFACE_V1_SET_FRAME_BUTTONS 37
#define ZCR_REMOTE_SURFACE_V1_SET_EXTRA_TITLE 38 #define ZCR_REMOTE_SURFACE_V1_SET_EXTRA_TITLE 38
#define ZCR_REMOTE_SURFACE_V1_SET_ORIENTATION_LOCK 39
/** /**
* @ingroup iface_zcr_remote_surface_v1 * @ingroup iface_zcr_remote_surface_v1
...@@ -1032,6 +1077,10 @@ zcr_remote_surface_v1_add_listener(struct zcr_remote_surface_v1 *zcr_remote_surf ...@@ -1032,6 +1077,10 @@ zcr_remote_surface_v1_add_listener(struct zcr_remote_surface_v1 *zcr_remote_surf
* @ingroup iface_zcr_remote_surface_v1 * @ingroup iface_zcr_remote_surface_v1
*/ */
#define ZCR_REMOTE_SURFACE_V1_SET_EXTRA_TITLE_SINCE_VERSION 13 #define ZCR_REMOTE_SURFACE_V1_SET_EXTRA_TITLE_SINCE_VERSION 13
/**
* @ingroup iface_zcr_remote_surface_v1
*/
#define ZCR_REMOTE_SURFACE_V1_SET_ORIENTATION_LOCK_SINCE_VERSION 14
/** @ingroup iface_zcr_remote_surface_v1 */ /** @ingroup iface_zcr_remote_surface_v1 */
static inline void static inline void
...@@ -1695,6 +1744,18 @@ zcr_remote_surface_v1_set_extra_title(struct zcr_remote_surface_v1 *zcr_remote_s ...@@ -1695,6 +1744,18 @@ zcr_remote_surface_v1_set_extra_title(struct zcr_remote_surface_v1 *zcr_remote_s
ZCR_REMOTE_SURFACE_V1_SET_EXTRA_TITLE, extra_title); ZCR_REMOTE_SURFACE_V1_SET_EXTRA_TITLE, extra_title);
} }
/**
* @ingroup iface_zcr_remote_surface_v1
*
* Request a specific orientation behavior when this surface is in foreground.
*/
static inline void
zcr_remote_surface_v1_set_orientation_lock(struct zcr_remote_surface_v1 *zcr_remote_surface_v1, uint32_t orientation_lock)
{
wl_proxy_marshal((struct wl_proxy *) zcr_remote_surface_v1,
ZCR_REMOTE_SURFACE_V1_SET_ORIENTATION_LOCK, orientation_lock);
}
#define ZCR_NOTIFICATION_SURFACE_V1_DESTROY 0 #define ZCR_NOTIFICATION_SURFACE_V1_DESTROY 0
......
...@@ -604,6 +604,50 @@ enum zcr_remote_surface_v1_frame_button_type { ...@@ -604,6 +604,50 @@ enum zcr_remote_surface_v1_frame_button_type {
}; };
#endif /* ZCR_REMOTE_SURFACE_V1_FRAME_BUTTON_TYPE_ENUM */ #endif /* ZCR_REMOTE_SURFACE_V1_FRAME_BUTTON_TYPE_ENUM */
#ifndef ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_ENUM
#define ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_ENUM
/**
* @ingroup iface_zcr_remote_surface_v1
* orientation lock request for remote surfaces
*
* Defines orientation request when a remote surface is in foreground.
*/
enum zcr_remote_surface_v1_orientation_lock {
/**
* no orientation lock
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_NONE = 1,
/**
* primary or secondary portrait
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_PORTRAIT = 2,
/**
* primary or secondary landscape
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_LANDSCAPE = 3,
/**
* keep current orientation
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_CURRENT = 4,
/**
* primary portrait
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_PORTRAIT_PRIMARY = 5,
/**
* primary landscape
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_LANDSCAPE_PRIMARY = 6,
/**
* secondary portrait
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_PORTRAIT_SECONDARY = 7,
/**
* secondary landscape
*/
ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_LANDSCAPE_SECONDARY = 8,
};
#endif /* ZCR_REMOTE_SURFACE_V1_ORIENTATION_LOCK_ENUM */
/** /**
* @ingroup iface_zcr_remote_surface_v1 * @ingroup iface_zcr_remote_surface_v1
* @struct zcr_remote_surface_v1_interface * @struct zcr_remote_surface_v1_interface
...@@ -1133,6 +1177,17 @@ struct zcr_remote_surface_v1_interface { ...@@ -1133,6 +1177,17 @@ struct zcr_remote_surface_v1_interface {
void (*set_extra_title)(struct wl_client *client, void (*set_extra_title)(struct wl_client *client,
struct wl_resource *resource, struct wl_resource *resource,
const char *extra_title); const char *extra_title);
/**
* set orientation lock for a remote surface
*
* Request a specific orientation behavior when this surface is
* in foreground.
* @param orientation_lock the orientation lock
* @since 14
*/
void (*set_orientation_lock)(struct wl_client *client,
struct wl_resource *resource,
uint32_t orientation_lock);
}; };
#define ZCR_REMOTE_SURFACE_V1_CLOSE 0 #define ZCR_REMOTE_SURFACE_V1_CLOSE 0
...@@ -1328,6 +1383,10 @@ struct zcr_remote_surface_v1_interface { ...@@ -1328,6 +1383,10 @@ struct zcr_remote_surface_v1_interface {
* @ingroup iface_zcr_remote_surface_v1 * @ingroup iface_zcr_remote_surface_v1
*/ */
#define ZCR_REMOTE_SURFACE_V1_SET_EXTRA_TITLE_SINCE_VERSION 13 #define ZCR_REMOTE_SURFACE_V1_SET_EXTRA_TITLE_SINCE_VERSION 13
/**
* @ingroup iface_zcr_remote_surface_v1
*/
#define ZCR_REMOTE_SURFACE_V1_SET_ORIENTATION_LOCK_SINCE_VERSION 14
/** /**
* @ingroup iface_zcr_remote_surface_v1 * @ingroup iface_zcr_remote_surface_v1
......
...@@ -70,7 +70,7 @@ static const struct wl_message zcr_remote_shell_v1_events[] = { ...@@ -70,7 +70,7 @@ static const struct wl_message zcr_remote_shell_v1_events[] = {
}; };
WL_EXPORT const struct wl_interface zcr_remote_shell_v1_interface = { WL_EXPORT const struct wl_interface zcr_remote_shell_v1_interface = {
"zcr_remote_shell_v1", 13, "zcr_remote_shell_v1", 14,
3, zcr_remote_shell_v1_requests, 3, zcr_remote_shell_v1_requests,
5, zcr_remote_shell_v1_events, 5, zcr_remote_shell_v1_events,
}; };
...@@ -115,6 +115,7 @@ static const struct wl_message zcr_remote_surface_v1_requests[] = { ...@@ -115,6 +115,7 @@ static const struct wl_message zcr_remote_surface_v1_requests[] = {
{ "set_frame", "13u", types + 0 }, { "set_frame", "13u", types + 0 },
{ "set_frame_buttons", "13uu", types + 0 }, { "set_frame_buttons", "13uu", types + 0 },
{ "set_extra_title", "13s", types + 0 }, { "set_extra_title", "13s", types + 0 },
{ "set_orientation_lock", "14u", types + 0 },
}; };
static const struct wl_message zcr_remote_surface_v1_events[] = { static const struct wl_message zcr_remote_surface_v1_events[] = {
...@@ -128,8 +129,8 @@ static const struct wl_message zcr_remote_surface_v1_events[] = { ...@@ -128,8 +129,8 @@ static const struct wl_message zcr_remote_surface_v1_events[] = {
}; };
WL_EXPORT const struct wl_interface zcr_remote_surface_v1_interface = { WL_EXPORT const struct wl_interface zcr_remote_surface_v1_interface = {
"zcr_remote_surface_v1", 13, "zcr_remote_surface_v1", 14,
39, zcr_remote_surface_v1_requests, 40, zcr_remote_surface_v1_requests,
7, zcr_remote_surface_v1_events, 7, zcr_remote_surface_v1_events,
}; };
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
reset. reset.
</description> </description>
<interface name="zcr_remote_shell_v1" version="13"> <interface name="zcr_remote_shell_v1" version="14">
<description summary="remote_shell"> <description summary="remote_shell">
The global interface that allows clients to turn a wl_surface into a The global interface that allows clients to turn a wl_surface into a
"real window" which is remotely managed but can be stacked, activated "real window" which is remotely managed but can be stacked, activated
...@@ -183,7 +183,7 @@ ...@@ -183,7 +183,7 @@
</event> </event>
</interface> </interface>
<interface name="zcr_remote_surface_v1" version="13"> <interface name="zcr_remote_surface_v1" version="14">
<description summary="A desktop window"> <description summary="A desktop window">
An interface that may be implemented by a wl_surface, for An interface that may be implemented by a wl_surface, for
implementations that provide a desktop-style user interface implementations that provide a desktop-style user interface
...@@ -859,6 +859,30 @@ ...@@ -859,6 +859,30 @@
</description> </description>
<arg name="extra_title" type="string"/> <arg name="extra_title" type="string"/>
</request> </request>
<!-- Version 14 additions -->
<enum name="orientation_lock">
<description summary="orientation lock request for remote surfaces">
Defines orientation request when a remote surface is in foreground.
</description>
<entry name="none" value="1" summary="no orientation lock"/>
<entry name="portrait" value="2" summary="primary or secondary portrait"/>
<entry name="landscape" value="3" summary="primary or secondary landscape"/>
<entry name="current" value="4" summary="keep current orientation"/>
<entry name="portrait_primary" value="5" summary="primary portrait"/>
<entry name="landscape_primary" value="6" summary="primary landscape"/>
<entry name="portrait_secondary" value="7" summary="secondary portrait"/>
<entry name="landscape_secondary" value="8" summary="secondary landscape"/>
</enum>
<request name="set_orientation_lock" since="14">
<description summary="set orientation lock for a remote surface">
Request a specific orientation behavior when this surface is in foreground.
</description>
<arg name="orientation_lock" type="uint" summary="the orientation lock"/>
</request>
</interface> </interface>
<interface name="zcr_notification_surface_v1" version="1"> <interface name="zcr_notification_surface_v1" version="1">
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment