wayland: Update to latest xdg-shell protocol
This commit is contained in:
parent
c49c37999c
commit
7732447abc
5 changed files with 148 additions and 238 deletions
|
@ -2801,9 +2801,6 @@ meta_window_maximize_internal (MetaWindow *window,
|
||||||
meta_window_recalc_features (window);
|
meta_window_recalc_features (window);
|
||||||
set_net_wm_state (window);
|
set_net_wm_state (window);
|
||||||
|
|
||||||
if (window->surface && window->maximized_horizontally && window->maximized_vertically)
|
|
||||||
meta_wayland_surface_send_maximized (window->surface);
|
|
||||||
|
|
||||||
g_object_freeze_notify (G_OBJECT (window));
|
g_object_freeze_notify (G_OBJECT (window));
|
||||||
g_object_notify (G_OBJECT (window), "maximized-horizontally");
|
g_object_notify (G_OBJECT (window), "maximized-horizontally");
|
||||||
g_object_notify (G_OBJECT (window), "maximized-vertically");
|
g_object_notify (G_OBJECT (window), "maximized-vertically");
|
||||||
|
@ -3252,9 +3249,6 @@ meta_window_unmaximize_internal (MetaWindow *window,
|
||||||
set_net_wm_state (window);
|
set_net_wm_state (window);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (window->surface && !window->maximized_horizontally && !window->maximized_vertically)
|
|
||||||
meta_wayland_surface_send_unmaximized (window->surface);
|
|
||||||
|
|
||||||
g_object_freeze_notify (G_OBJECT (window));
|
g_object_freeze_notify (G_OBJECT (window));
|
||||||
g_object_notify (G_OBJECT (window), "maximized-horizontally");
|
g_object_notify (G_OBJECT (window), "maximized-horizontally");
|
||||||
g_object_notify (G_OBJECT (window), "maximized-vertically");
|
g_object_notify (G_OBJECT (window), "maximized-vertically");
|
||||||
|
@ -3361,9 +3355,6 @@ meta_window_make_fullscreen_internal (MetaWindow *window)
|
||||||
/* For the auto-minimize feature, if we fail to get focus */
|
/* For the auto-minimize feature, if we fail to get focus */
|
||||||
meta_screen_queue_check_fullscreen (window->screen);
|
meta_screen_queue_check_fullscreen (window->screen);
|
||||||
|
|
||||||
if (window->surface)
|
|
||||||
meta_wayland_surface_send_fullscreened (window->surface);
|
|
||||||
|
|
||||||
g_object_notify (G_OBJECT (window), "fullscreen");
|
g_object_notify (G_OBJECT (window), "fullscreen");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3420,9 +3411,6 @@ meta_window_unmake_fullscreen (MetaWindow *window)
|
||||||
|
|
||||||
meta_window_update_layer (window);
|
meta_window_update_layer (window);
|
||||||
|
|
||||||
if (window->surface)
|
|
||||||
meta_wayland_surface_send_unfullscreened (window->surface);
|
|
||||||
|
|
||||||
g_object_notify (G_OBJECT (window), "fullscreen");
|
g_object_notify (G_OBJECT (window), "fullscreen");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -589,7 +589,6 @@ meta_wayland_surface_set_window (MetaWaylandSurface *surface,
|
||||||
MetaWindow *window)
|
MetaWindow *window)
|
||||||
{
|
{
|
||||||
surface->window = window;
|
surface->window = window;
|
||||||
|
|
||||||
sync_reactive (surface);
|
sync_reactive (surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -857,45 +856,8 @@ xdg_surface_resize (struct wl_client *client,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
xdg_surface_set_output (struct wl_client *client,
|
xdg_surface_ack_configure (struct wl_client *client,
|
||||||
struct wl_resource *resource,
|
struct wl_resource *resource,
|
||||||
struct wl_resource *output)
|
|
||||||
{
|
|
||||||
g_warning ("TODO: support xdg_surface.set_output");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
xdg_surface_request_change_state (struct wl_client *client,
|
|
||||||
struct wl_resource *resource,
|
|
||||||
uint32_t state_type,
|
|
||||||
uint32_t value,
|
|
||||||
uint32_t serial)
|
|
||||||
{
|
|
||||||
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
|
|
||||||
|
|
||||||
surface->state_changed_serial = serial;
|
|
||||||
|
|
||||||
switch (state_type)
|
|
||||||
{
|
|
||||||
case XDG_SURFACE_STATE_MAXIMIZED:
|
|
||||||
if (value)
|
|
||||||
meta_window_maximize (surface->window, META_MAXIMIZE_BOTH);
|
|
||||||
else
|
|
||||||
meta_window_unmaximize (surface->window, META_MAXIMIZE_BOTH);
|
|
||||||
break;
|
|
||||||
case XDG_SURFACE_STATE_FULLSCREEN:
|
|
||||||
if (value)
|
|
||||||
meta_window_make_fullscreen (surface->window);
|
|
||||||
else
|
|
||||||
meta_window_unmake_fullscreen (surface->window);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
xdg_surface_ack_change_state (struct wl_client *client,
|
|
||||||
struct wl_resource *resource,
|
|
||||||
uint32_t state_type,
|
|
||||||
uint32_t value,
|
|
||||||
uint32_t serial)
|
uint32_t serial)
|
||||||
{
|
{
|
||||||
/* Do nothing for now. In the future, we'd imagine that
|
/* Do nothing for now. In the future, we'd imagine that
|
||||||
|
@ -905,12 +867,44 @@ xdg_surface_ack_change_state (struct wl_client *client,
|
||||||
* client gets the new state. */
|
* client gets the new state. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xdg_surface_set_maximized (struct wl_client *client,
|
||||||
|
struct wl_resource *resource)
|
||||||
|
{
|
||||||
|
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
|
||||||
|
meta_window_maximize (surface->window, META_MAXIMIZE_BOTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xdg_surface_unset_maximized (struct wl_client *client,
|
||||||
|
struct wl_resource *resource)
|
||||||
|
{
|
||||||
|
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
|
||||||
|
meta_window_unmaximize (surface->window, META_MAXIMIZE_BOTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xdg_surface_set_fullscreen (struct wl_client *client,
|
||||||
|
struct wl_resource *resource,
|
||||||
|
struct wl_resource *output_resource)
|
||||||
|
{
|
||||||
|
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
|
||||||
|
meta_window_make_fullscreen (surface->window);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xdg_surface_unset_fullscreen (struct wl_client *client,
|
||||||
|
struct wl_resource *resource)
|
||||||
|
{
|
||||||
|
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
|
||||||
|
meta_window_unmake_fullscreen (surface->window);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
xdg_surface_set_minimized (struct wl_client *client,
|
xdg_surface_set_minimized (struct wl_client *client,
|
||||||
struct wl_resource *resource)
|
struct wl_resource *resource)
|
||||||
{
|
{
|
||||||
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
|
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
|
||||||
|
|
||||||
meta_window_minimize (surface->window);
|
meta_window_minimize (surface->window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -922,9 +916,11 @@ static const struct xdg_surface_interface meta_wayland_xdg_surface_interface = {
|
||||||
xdg_surface_set_app_id,
|
xdg_surface_set_app_id,
|
||||||
xdg_surface_move,
|
xdg_surface_move,
|
||||||
xdg_surface_resize,
|
xdg_surface_resize,
|
||||||
xdg_surface_set_output,
|
xdg_surface_ack_configure,
|
||||||
xdg_surface_request_change_state,
|
xdg_surface_set_maximized,
|
||||||
xdg_surface_ack_change_state,
|
xdg_surface_unset_maximized,
|
||||||
|
xdg_surface_set_fullscreen,
|
||||||
|
xdg_surface_unset_fullscreen,
|
||||||
xdg_surface_set_minimized,
|
xdg_surface_set_minimized,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1727,86 +1723,61 @@ meta_wayland_shell_init (MetaWaylandCompositor *compositor)
|
||||||
g_error ("Failed to register a global wl-subcompositor object");
|
g_error ("Failed to register a global wl-subcompositor object");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
fill_states (struct wl_array *states, MetaWindow *window)
|
||||||
|
{
|
||||||
|
uint32_t *s;
|
||||||
|
|
||||||
|
if (META_WINDOW_MAXIMIZED (window))
|
||||||
|
{
|
||||||
|
s = wl_array_add (states, sizeof *s);
|
||||||
|
*s = XDG_SURFACE_STATE_MAXIMIZED;
|
||||||
|
}
|
||||||
|
if (meta_window_is_fullscreen (window))
|
||||||
|
{
|
||||||
|
s = wl_array_add (states, sizeof *s);
|
||||||
|
*s = XDG_SURFACE_STATE_FULLSCREEN;
|
||||||
|
}
|
||||||
|
if (meta_grab_op_is_resizing (window->display->grab_op))
|
||||||
|
{
|
||||||
|
s = wl_array_add (states, sizeof *s);
|
||||||
|
*s = XDG_SURFACE_STATE_RESIZING;
|
||||||
|
}
|
||||||
|
if (meta_window_appears_focused (window))
|
||||||
|
{
|
||||||
|
s = wl_array_add (states, sizeof *s);
|
||||||
|
*s = XDG_SURFACE_STATE_ACTIVATED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_wayland_surface_configure_notify (MetaWaylandSurface *surface,
|
meta_wayland_surface_configure_notify (MetaWaylandSurface *surface,
|
||||||
int new_width,
|
int new_width,
|
||||||
int new_height)
|
int new_height)
|
||||||
{
|
{
|
||||||
/* new_width and new_height comes from window->rect,
|
|
||||||
* which is based on the buffer size, not the surface
|
|
||||||
* size. The configure event requires surface size. */
|
|
||||||
new_width /= surface->scale;
|
|
||||||
new_height /= surface->scale;
|
|
||||||
|
|
||||||
if (surface->xdg_surface.resource)
|
if (surface->xdg_surface.resource)
|
||||||
xdg_surface_send_configure (surface->xdg_surface.resource,
|
|
||||||
new_width, new_height);
|
|
||||||
else if (surface->wl_shell_surface.resource)
|
|
||||||
wl_shell_surface_send_configure (surface->wl_shell_surface.resource,
|
|
||||||
0, new_width, new_height);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
send_change_state (MetaWaylandSurface *surface,
|
|
||||||
uint32_t state_type,
|
|
||||||
uint32_t value)
|
|
||||||
{
|
|
||||||
if (surface->xdg_surface.resource)
|
|
||||||
{
|
|
||||||
uint32_t serial;
|
|
||||||
|
|
||||||
if (surface->state_changed_serial != 0)
|
|
||||||
{
|
|
||||||
serial = surface->state_changed_serial;
|
|
||||||
surface->state_changed_serial = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
struct wl_client *client = wl_resource_get_client (surface->xdg_surface.resource);
|
struct wl_client *client = wl_resource_get_client (surface->xdg_surface.resource);
|
||||||
struct wl_display *display = wl_client_get_display (client);
|
struct wl_display *display = wl_client_get_display (client);
|
||||||
serial = wl_display_next_serial (display);
|
uint32_t serial = wl_display_next_serial (display);
|
||||||
|
struct wl_array states;
|
||||||
|
|
||||||
|
wl_array_init (&states);
|
||||||
|
fill_states (&states, surface->window);
|
||||||
|
|
||||||
|
/* new_width and new_height comes from window->rect, which is based on
|
||||||
|
* the buffer size, not the surface size. The configure event requires
|
||||||
|
* surface size. */
|
||||||
|
new_width /= surface->scale;
|
||||||
|
new_height /= surface->scale;
|
||||||
|
|
||||||
|
xdg_surface_send_configure (surface->xdg_surface.resource, new_width, new_height, &states, serial);
|
||||||
|
|
||||||
|
wl_array_release (&states);
|
||||||
}
|
}
|
||||||
|
else if (surface->wl_shell_surface.resource)
|
||||||
xdg_surface_send_change_state (surface->xdg_surface.resource, state_type, value, serial);
|
wl_shell_surface_send_configure (surface->wl_shell_surface.resource,
|
||||||
}
|
0, new_width, new_height);
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
meta_wayland_surface_send_maximized (MetaWaylandSurface *surface)
|
|
||||||
{
|
|
||||||
send_change_state (surface, XDG_SURFACE_STATE_MAXIMIZED, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
meta_wayland_surface_send_unmaximized (MetaWaylandSurface *surface)
|
|
||||||
{
|
|
||||||
send_change_state (surface, XDG_SURFACE_STATE_MAXIMIZED, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
meta_wayland_surface_send_fullscreened (MetaWaylandSurface *surface)
|
|
||||||
{
|
|
||||||
send_change_state (surface, XDG_SURFACE_STATE_FULLSCREEN, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
meta_wayland_surface_send_unfullscreened (MetaWaylandSurface *surface)
|
|
||||||
{
|
|
||||||
send_change_state (surface, XDG_SURFACE_STATE_FULLSCREEN, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
meta_wayland_surface_activated (MetaWaylandSurface *surface)
|
|
||||||
{
|
|
||||||
if (surface->xdg_surface.resource)
|
|
||||||
xdg_surface_send_activated (surface->xdg_surface.resource);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
meta_wayland_surface_deactivated (MetaWaylandSurface *surface)
|
|
||||||
{
|
|
||||||
if (surface->xdg_surface.resource)
|
|
||||||
xdg_surface_send_deactivated (surface->xdg_surface.resource);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -109,8 +109,6 @@ struct _MetaWaylandSurface
|
||||||
GSList *pending_placement_ops;
|
GSList *pending_placement_ops;
|
||||||
} sub;
|
} sub;
|
||||||
|
|
||||||
uint32_t state_changed_serial;
|
|
||||||
|
|
||||||
/* All the pending state that wl_surface.commit will apply. */
|
/* All the pending state that wl_surface.commit will apply. */
|
||||||
MetaWaylandPendingState pending;
|
MetaWaylandPendingState pending;
|
||||||
};
|
};
|
||||||
|
@ -128,13 +126,6 @@ void meta_wayland_surface_set_window (MetaWaylandSurface *surface
|
||||||
void meta_wayland_surface_configure_notify (MetaWaylandSurface *surface,
|
void meta_wayland_surface_configure_notify (MetaWaylandSurface *surface,
|
||||||
int width,
|
int width,
|
||||||
int height);
|
int height);
|
||||||
void meta_wayland_surface_send_maximized (MetaWaylandSurface *surface);
|
|
||||||
void meta_wayland_surface_send_unmaximized (MetaWaylandSurface *surface);
|
|
||||||
void meta_wayland_surface_send_fullscreened (MetaWaylandSurface *surface);
|
|
||||||
void meta_wayland_surface_send_unfullscreened (MetaWaylandSurface *surface);
|
|
||||||
|
|
||||||
void meta_wayland_surface_activated (MetaWaylandSurface *surface);
|
|
||||||
void meta_wayland_surface_deactivated (MetaWaylandSurface *surface);
|
|
||||||
|
|
||||||
void meta_wayland_surface_ping (MetaWaylandSurface *surface,
|
void meta_wayland_surface_ping (MetaWaylandSurface *surface,
|
||||||
guint32 serial);
|
guint32 serial);
|
||||||
|
|
|
@ -241,40 +241,6 @@
|
||||||
<arg name="edges" type="uint" summary="which edge or corner is being dragged"/>
|
<arg name="edges" type="uint" summary="which edge or corner is being dragged"/>
|
||||||
</request>
|
</request>
|
||||||
|
|
||||||
<event name="configure">
|
|
||||||
<description summary="suggest resize">
|
|
||||||
The configure event asks the client to resize its surface.
|
|
||||||
|
|
||||||
The size is a hint, in the sense that the client is free to
|
|
||||||
ignore it if it doesn't resize, pick a smaller size (to
|
|
||||||
satisfy aspect ratio or resize in steps of NxM pixels).
|
|
||||||
|
|
||||||
The client is free to dismiss all but the last configure
|
|
||||||
event it received.
|
|
||||||
|
|
||||||
The width and height arguments specify the size of the window
|
|
||||||
in surface local coordinates.
|
|
||||||
</description>
|
|
||||||
|
|
||||||
<arg name="width" type="int"/>
|
|
||||||
<arg name="height" type="int"/>
|
|
||||||
</event>
|
|
||||||
|
|
||||||
<request name="set_output">
|
|
||||||
<description summary="set the default output used by this surface">
|
|
||||||
Set the default output used by this surface when it is first mapped.
|
|
||||||
|
|
||||||
If this value is NULL (default), it's up to the compositor to choose
|
|
||||||
which display will be used to map this surface.
|
|
||||||
|
|
||||||
When fullscreen or maximized state are set on this surface, and it
|
|
||||||
wasn't mapped yet, the output set with this method will be used.
|
|
||||||
Otherwise, the output where the surface is currently mapped will be
|
|
||||||
used.
|
|
||||||
</description>
|
|
||||||
<arg name="output" type="object" interface="wl_output" allow-null="true"/>
|
|
||||||
</request>
|
|
||||||
|
|
||||||
<enum name="state">
|
<enum name="state">
|
||||||
<description summary="types of state on the surface">
|
<description summary="types of state on the surface">
|
||||||
The different state values used on the surface. This is designed for
|
The different state values used on the surface. This is designed for
|
||||||
|
@ -297,89 +263,78 @@
|
||||||
0x1000 - 0x1FFF: GNOME
|
0x1000 - 0x1FFF: GNOME
|
||||||
</description>
|
</description>
|
||||||
<entry name="maximized" value="1" summary="the surface is maximized">
|
<entry name="maximized" value="1" summary="the surface is maximized">
|
||||||
A non-zero value indicates the surface is maximized. Otherwise,
|
The surface is maximized. The window geometry specified in the configure
|
||||||
the surface is unmaximized.
|
event must be obeyed by the client.
|
||||||
</entry>
|
</entry>
|
||||||
<entry name="fullscreen" value="2" summary="the surface is fullscreen">
|
<entry name="fullscreen" value="2" summary="the surface is fullscreen">
|
||||||
A non-zero value indicates the surface is fullscreen. Otherwise,
|
The surface is fullscreen. The window geometry specified in the configure
|
||||||
the surface is not fullscreen.
|
event must be obeyed by the client.
|
||||||
|
</entry>
|
||||||
|
<entry name="resizing" value="3">
|
||||||
|
The surface is being resized. The window geometry specified in the
|
||||||
|
configure event is a maximum; the client cannot resize beyond it.
|
||||||
|
Clients that have aspect ratio or cell sizing configuration can use
|
||||||
|
a smaller size, however.
|
||||||
|
</entry>
|
||||||
|
<entry name="activated" value="4">
|
||||||
|
Client window decorations should be painted as if the window is
|
||||||
|
active. Do not assume this means that the window actually has
|
||||||
|
keyboard or pointer focus.
|
||||||
</entry>
|
</entry>
|
||||||
</enum>
|
</enum>
|
||||||
|
|
||||||
<request name="request_change_state">
|
<event name="configure">
|
||||||
<description summary="client requests to change a surface's state">
|
<description summary="suggest a surface chnage">
|
||||||
This asks the compositor to change the state. If the compositor wants
|
The configure event asks the client to resize its surface.
|
||||||
to change the state, it will send a change_state event with the same
|
|
||||||
state_type, value, and serial, and the event flow continues as if it
|
|
||||||
it was initiated by the compositor.
|
|
||||||
|
|
||||||
If the compositor does not want to change the state, it will send a
|
The width and height arguments specify a hint to the window
|
||||||
change_state to the client with the old value of the state.
|
about how its surface should be resized in surface local
|
||||||
</description>
|
coordinates. The states listed in the event specify how the
|
||||||
<arg name="state_type" type="uint" summary="the state to set"/>
|
width/height arguments should be interpreted.
|
||||||
<arg name="value" type="uint" summary="the value to change the state to"/>
|
|
||||||
<arg name="serial" type="uint" summary="an event serial">
|
|
||||||
This serial is so the client can know which change_state event corresponds
|
|
||||||
to which request_change_state request it sent out.
|
|
||||||
</arg>
|
|
||||||
</request>
|
|
||||||
|
|
||||||
<event name="change_state">
|
A client should arrange a new surface, and then send a
|
||||||
<description summary="compositor wants to change a surface's state">
|
ack_configure request with the serial sent in this configure
|
||||||
This event tells the client to change a surface's state. The client
|
event before attaching a new surface.
|
||||||
should respond with an ack_change_state request to the compositor to
|
|
||||||
guarantee that the compositor knows that the client has seen it.
|
If the client receives multiple configure events before it
|
||||||
|
can respond to one, it is free to discard all but the last
|
||||||
|
event it received.
|
||||||
</description>
|
</description>
|
||||||
|
|
||||||
<arg name="state_type" type="uint" summary="the state to set"/>
|
<arg name="width" type="int"/>
|
||||||
<arg name="value" type="uint" summary="the value to change the state to"/>
|
<arg name="height" type="int"/>
|
||||||
<arg name="serial" type="uint" summary="a serial for the compositor's own tracking"/>
|
<arg name="states" type="array"/>
|
||||||
|
<arg name="serial" type="uint"/>
|
||||||
</event>
|
</event>
|
||||||
|
|
||||||
<request name="ack_change_state">
|
<request name="ack_configure">
|
||||||
<description summary="ack a change_state event">
|
<description summary="ack a configure event">
|
||||||
When a change_state event is received, a client should then ack it
|
When a configure event is received, a client should then ack it
|
||||||
using the ack_change_state request to ensure that the compositor
|
using the ack_configure request to ensure that the compositor
|
||||||
knows the client has seen the event.
|
knows the client has seen the event.
|
||||||
|
|
||||||
By this point, the state is confirmed, and the next attach should
|
By this point, the state is confirmed, and the next attach should
|
||||||
contain the buffer drawn for the new state value.
|
contain the buffer drawn for the configure event you are acking.
|
||||||
|
|
||||||
The values here need to be the same as the values in the cooresponding
|
|
||||||
change_state event.
|
|
||||||
</description>
|
</description>
|
||||||
<arg name="state_type" type="uint" summary="the state to set"/>
|
<arg name="serial" type="uint" summary="a serial to configure for"/>
|
||||||
<arg name="value" type="uint" summary="the value to change the state to"/>
|
|
||||||
<arg name="serial" type="uint" summary="a serial to pass to change_state"/>
|
|
||||||
</request>
|
</request>
|
||||||
|
|
||||||
<request name="set_minimized">
|
<request name="set_maximized" />
|
||||||
<description summary="minimize the surface">
|
<request name="unset_maximized" />
|
||||||
Minimize the surface.
|
|
||||||
|
<request name="set_fullscreen">
|
||||||
|
<description summary="set the window as fullscreen on a monitor">
|
||||||
|
Make the surface fullscreen.
|
||||||
|
|
||||||
|
You can specify an output that you would prefer to be fullscreen.
|
||||||
|
If this value is NULL, it's up to the compositor to choose which
|
||||||
|
display will be used to map this surface.
|
||||||
</description>
|
</description>
|
||||||
|
<arg name="output" type="object" interface="wl_output" allow-null="true"/>
|
||||||
</request>
|
</request>
|
||||||
|
<request name="unset_fullscreen" />
|
||||||
|
|
||||||
<event name="activated">
|
<request name="set_minimized" />
|
||||||
<description summary="surface was activated">
|
|
||||||
The activated_set event is sent when this surface has been
|
|
||||||
activated, which means that the surface has user attention.
|
|
||||||
Window decorations should be updated accordingly. You should
|
|
||||||
not use this event for anything but the style of decorations
|
|
||||||
you display, use wl_keyboard.enter and wl_keyboard.leave for
|
|
||||||
determining keyboard focus.
|
|
||||||
</description>
|
|
||||||
</event>
|
|
||||||
|
|
||||||
<event name="deactivated">
|
|
||||||
<description summary="surface was deactivated">
|
|
||||||
The deactivate event is sent when this surface has been
|
|
||||||
deactivated, which means that the surface lost user attention.
|
|
||||||
Window decorations should be updated accordingly. You should
|
|
||||||
not use this event for anything but the style of decorations
|
|
||||||
you display, use wl_keyboard.enter and wl_keyboard.leave for
|
|
||||||
determining keyboard focus.
|
|
||||||
</description>
|
|
||||||
</event>
|
|
||||||
|
|
||||||
<event name="close">
|
<event name="close">
|
||||||
<description summary="surface wants to be closed">
|
<description summary="surface wants to be closed">
|
||||||
|
|
|
@ -185,6 +185,14 @@ meta_window_wayland_move_resize_internal (MetaWindow *window,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
surface_state_changed (MetaWindow *window)
|
||||||
|
{
|
||||||
|
meta_wayland_surface_configure_notify (window->surface,
|
||||||
|
window->rect.width,
|
||||||
|
window->rect.height);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
appears_focused_changed (GObject *object,
|
appears_focused_changed (GObject *object,
|
||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
|
@ -197,10 +205,7 @@ appears_focused_changed (GObject *object,
|
||||||
if (window->unmanaging)
|
if (window->unmanaging)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (meta_window_appears_focused (window))
|
surface_state_changed (window);
|
||||||
meta_wayland_surface_activated (window->surface);
|
|
||||||
else
|
|
||||||
meta_wayland_surface_deactivated (window->surface);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in a new issue