wayland/gtk-shell: Add an explicit gtk-shell surface release request
Previously the wl_resource and MetaWaylandGtkSurface corresponding to any client gtk_surface have been kept around until the exit of the client due to the client side destroy method not signaling the destruction to the server. Ideally the protocol would have specified a destroy request marked as destructor to handle this automatically, however this is no longer possible due to the destroy method being implicitly generated in the absence of an explicit request in the protocol. Adding a destroy request marked as destructor now would generate a new destroy method that unconditionally would send the request to the server, which would break clients running on servers not supporting that request. So instead of modifying the destroy request add a new "release" destructor, that indicates to the server that it can release the resource. This can be optionally be used by clients depending on the server protocol version. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1307>
This commit is contained in:
parent
b41c4aec26
commit
c9aa43aa7a
@ -208,12 +208,20 @@ gtk_surface_request_focus (struct wl_client *client,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_surface_release (struct wl_client *client,
|
||||||
|
struct wl_resource *resource)
|
||||||
|
{
|
||||||
|
wl_resource_destroy (resource);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct gtk_surface1_interface meta_wayland_gtk_surface_interface = {
|
static const struct gtk_surface1_interface meta_wayland_gtk_surface_interface = {
|
||||||
gtk_surface_set_dbus_properties,
|
gtk_surface_set_dbus_properties,
|
||||||
gtk_surface_set_modal,
|
gtk_surface_set_modal,
|
||||||
gtk_surface_unset_modal,
|
gtk_surface_unset_modal,
|
||||||
gtk_surface_present,
|
gtk_surface_present,
|
||||||
gtk_surface_request_focus,
|
gtk_surface_request_focus,
|
||||||
|
gtk_surface_release
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
#define META_WL_SEAT_VERSION 5
|
#define META_WL_SEAT_VERSION 5
|
||||||
#define META_WL_OUTPUT_VERSION 2
|
#define META_WL_OUTPUT_VERSION 2
|
||||||
#define META_XSERVER_VERSION 1
|
#define META_XSERVER_VERSION 1
|
||||||
#define META_GTK_SHELL1_VERSION 3
|
#define META_GTK_SHELL1_VERSION 4
|
||||||
#define META_WL_SUBCOMPOSITOR_VERSION 1
|
#define META_WL_SUBCOMPOSITOR_VERSION 1
|
||||||
#define META_ZWP_POINTER_GESTURES_V1_VERSION 1
|
#define META_ZWP_POINTER_GESTURES_V1_VERSION 1
|
||||||
#define META_ZXDG_EXPORTER_V1_VERSION 1
|
#define META_ZXDG_EXPORTER_V1_VERSION 1
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<protocol name="gtk">
|
<protocol name="gtk">
|
||||||
|
|
||||||
<interface name="gtk_shell1" version="3">
|
<interface name="gtk_shell1" version="4">
|
||||||
<description summary="gtk specific extensions">
|
<description summary="gtk specific extensions">
|
||||||
gtk_shell is a protocol extension providing additional features for
|
gtk_shell is a protocol extension providing additional features for
|
||||||
clients implementing it.
|
clients implementing it.
|
||||||
@ -35,7 +35,7 @@
|
|||||||
</request>
|
</request>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
||||||
<interface name="gtk_surface1" version="3">
|
<interface name="gtk_surface1" version="4">
|
||||||
<request name="set_dbus_properties">
|
<request name="set_dbus_properties">
|
||||||
<arg name="application_id" type="string" allow-null="true"/>
|
<arg name="application_id" type="string" allow-null="true"/>
|
||||||
<arg name="app_menu_path" type="string" allow-null="true"/>
|
<arg name="app_menu_path" type="string" allow-null="true"/>
|
||||||
@ -82,6 +82,9 @@
|
|||||||
<request name="request_focus" since="3">
|
<request name="request_focus" since="3">
|
||||||
<arg name="startup_id" type="string" allow-null="true"/>
|
<arg name="startup_id" type="string" allow-null="true"/>
|
||||||
</request>
|
</request>
|
||||||
|
|
||||||
|
<!-- Version 4 additions -->
|
||||||
|
<request name="release" type="destructor" since="4"/>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
||||||
</protocol>
|
</protocol>
|
||||||
|
Loading…
Reference in New Issue
Block a user