Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
140 changes: 140 additions & 0 deletions include/wpe/view-backend.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
extern "C" {
#endif

#include <stdbool.h>
#include <stdint.h>

struct wpe_view_backend;
Expand All @@ -56,6 +57,7 @@ struct wpe_input_touch_event;

struct wpe_view_backend_client;
struct wpe_view_backend_input_client;
struct wpe_view_backend_fullscreen_client;

struct wpe_view_backend_interface {
void* (*create)(void*, struct wpe_view_backend*);
Expand Down Expand Up @@ -97,6 +99,53 @@ WPE_EXPORT
void
wpe_view_backend_set_input_client(struct wpe_view_backend*, const struct wpe_view_backend_input_client*, void*);

/**
* wpe_view_backend_set_fullscreen_client:
* @view_backend: (transfer none): The view backend to obtains events from.
* @client: (transfer none): Client with callbacks for the events.
* @userdata: (transfer none): User data passed to client callbacks.
*
* Configure a @client with callbacks invoked for DOM fullscreen requests.
*
* This function must be only used once for a given @view_backend, the client
* cannot be changed once it has been set.
*
* Since: 1.12
*/
WPE_EXPORT
void
wpe_view_backend_set_fullscreen_client(struct wpe_view_backend*, const struct wpe_view_backend_fullscreen_client*, void*);

/**
* wpe_view_backend_fullscreen_handler:
* @userdata: (transfer none): User data passed to the embedder.
* @enable: (transfer none): User data passed to the embedder.
*
* Type of functions used by an embedder to implement fullscreening web views.
*
* Returns: a boolean indicating whether the operation was completed.
*
* Since: 1.12
*/
typedef bool (*wpe_view_backend_fullscreen_handler)(void *userdata, bool enable);

/**
* wpe_view_backend_set_fullscreen_handler:
* @view_backend: (transfer none): The view backend to obtains events from.
* @handler: (transfer none): Function used by an embedder to implement fullscreening web views.
* @userdata: (transfer none): User data passed to the handler function.
*
* Handler function set by an embedder to implement fullscreening web views.
*
* This function must be only used once for a given @view_backend, the handler
* cannot be changed once it has been set.
*
* Since: 1.12
*/
WPE_EXPORT
void
wpe_view_backend_set_fullscreen_handler(struct wpe_view_backend*, wpe_view_backend_fullscreen_handler handler, void* userdata);

WPE_EXPORT
void
wpe_view_backend_initialize(struct wpe_view_backend*);
Expand Down Expand Up @@ -179,6 +228,97 @@ WPE_EXPORT
void
wpe_view_backend_dispatch_touch_event(struct wpe_view_backend*, struct wpe_input_touch_event*);

/**
* wpe_view_backend_fullscreen_client:
* @did_enter_fullscreen: Invoked after fullscreen has been successfully entered.
* @did_exit_fullscreen: Invoked after fullscreen has been exited.
* @request_enter_fullscreen: Invoked after user has requested to enter fullscreen.
* @request_exit_fullscreen: Invoked after user has requested to exit fullscreen.
*
* A view backend's fullscreen client provides a series of callback functions
* which are invoked at different stages when a web view becomes fullscreened
* and back.
*
* Since: 1.12
*/
struct wpe_view_backend_fullscreen_client {
void (*did_enter_fullscreen)(void*);
void (*did_exit_fullscreen)(void*);
void (*request_enter_fullscreen)(void*);
void (*request_exit_fullscreen)(void*);

/*< private >*/
void (*_wpe_reserved0)(void);
void (*_wpe_reserved1)(void);
void (*_wpe_reserved2)(void);
void (*_wpe_reserved3)(void);
};

/**
* wpe_view_backend_platform_set_fullscreen:
* @view_backend: (transfer none): The view backend which fullscreen state will be changed.
* @fullscreen: (transfer none): True if fullscreen.
*
* Returns: a boolean indicating whether the operation was completed.
*
* DOM content calls this function to request the platform to enter/exit fullscreen.
* The platform will attempt to change it's window fullscreen state.
*
* Since: 1.12
*/
WPE_EXPORT
bool
wpe_view_backend_platform_set_fullscreen(struct wpe_view_backend*, bool);

/**
* wpe_view_backend_dispatch_did_enter_fullscreen:
* @view_backend: (transfer none): The view backend that triggered the event.
*
* Dispatchs the event that indicates fullscreen has been successfully entered.
*
* Since: 1.12
*/
WPE_EXPORT
void
wpe_view_backend_dispatch_did_enter_fullscreen(struct wpe_view_backend*);

/**
* wpe_view_backend_dispatch_did_exit_fullscreen:
* @view_backend: (transfer none): The view backend that triggered the event.
*
* Dispatchs the event that indicated fullscreen has been successfully entered.
*
* Since: 1.12
*/
WPE_EXPORT
void
wpe_view_backend_dispatch_did_exit_fullscreen(struct wpe_view_backend*);

/**
* wpe_view_backend_dispatch_request_enter_fullscreen:
* @view_backend: (transfer none): The view backend that triggered the event.
*
* Dispatchs the event that indicates user wants to enter DOM fullscreen state.
*
* Since: 1.12
*/
WPE_EXPORT
void
wpe_view_backend_dispatch_request_enter_fullscreen(struct wpe_view_backend*);

/**
* wpe_view_backend_dispatch_request_exit_fullscreen:
* @view_backend: (transfer none): The view backend that triggered the event.
*
* Dispatchs the event that indicates user wants to exit DOM fullscreen state.
*
* Since: 1.12
*/
WPE_EXPORT
void
wpe_view_backend_dispatch_request_exit_fullscreen(struct wpe_view_backend*);


#ifdef __cplusplus
}
#endif
Expand Down
6 changes: 6 additions & 0 deletions src/view-backend-private.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@ struct wpe_view_backend {
const struct wpe_view_backend_input_client* input_client;
void* input_client_data;

const struct wpe_view_backend_fullscreen_client* fullscreen_client;
void* fullscreen_client_data;

wpe_view_backend_fullscreen_handler fullscreen_handler;
void* fullscreen_handler_data;

uint32_t activity_state;
};

Expand Down
58 changes: 58 additions & 0 deletions src/view-backend.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "view-backend-private.h"

#include "loader-private.h"
#include <assert.h>
#include <stdlib.h>


Expand Down Expand Up @@ -65,6 +66,9 @@ wpe_view_backend_destroy(struct wpe_view_backend* backend)
backend->input_client = 0;
backend->input_client_data = 0;

backend->fullscreen_client = NULL;
backend->fullscreen_client_data = NULL;

backend->activity_state = 0;

free(backend);
Expand Down Expand Up @@ -93,6 +97,15 @@ wpe_view_backend_set_input_client(struct wpe_view_backend* backend, const struct
backend->input_client_data = client_data;
}

void
wpe_view_backend_set_fullscreen_client(struct wpe_view_backend* backend, const struct wpe_view_backend_fullscreen_client* client, void* client_data)
{
assert(!backend->fullscreen_client);

backend->fullscreen_client = client;
backend->fullscreen_client_data = client_data;
}

void
wpe_view_backend_initialize(struct wpe_view_backend* backend)
{
Expand Down Expand Up @@ -187,3 +200,48 @@ wpe_view_backend_dispatch_touch_event(struct wpe_view_backend* backend, struct w
if (backend->input_client)
backend->input_client->handle_touch_event(backend->input_client_data, event);
}

void
wpe_view_backend_set_fullscreen_handler(struct wpe_view_backend* backend, wpe_view_backend_fullscreen_handler handler, void* userdata)
{
assert(!backend->fullscreen_handler);

backend->fullscreen_handler = handler;
backend->fullscreen_handler_data = userdata;
}

bool
wpe_view_backend_platform_set_fullscreen(struct wpe_view_backend* backend, bool fullscreen)
{
if (backend->fullscreen_handler)
return backend->fullscreen_handler(backend->fullscreen_handler_data, fullscreen);
return false;
}

void
wpe_view_backend_dispatch_did_enter_fullscreen(struct wpe_view_backend* backend)
{
if (backend->fullscreen_client)
backend->fullscreen_client->did_enter_fullscreen(backend->fullscreen_client_data);
}

void
wpe_view_backend_dispatch_did_exit_fullscreen(struct wpe_view_backend* backend)
{
if (backend->fullscreen_client)
backend->fullscreen_client->did_exit_fullscreen(backend->fullscreen_client_data);
}

void
wpe_view_backend_dispatch_request_enter_fullscreen(struct wpe_view_backend* backend)
{
if (backend->fullscreen_client)
backend->fullscreen_client->request_enter_fullscreen(backend->fullscreen_client_data);
}

void
wpe_view_backend_dispatch_request_exit_fullscreen(struct wpe_view_backend* backend)
{
if (backend->fullscreen_client)
backend->fullscreen_client->request_exit_fullscreen(backend->fullscreen_client_data);
}