@@ -169,7 +169,8 @@ xdp_session_unregister (XdpSession *session)
169169
170170void
171171xdp_session_close (XdpSession * session ,
172- gboolean notify_closed )
172+ gboolean notify_closed ,
173+ gboolean voluntary )
173174{
174175 if (session -> closed )
175176 return ;
@@ -199,8 +200,23 @@ xdp_session_close (XdpSession *session,
199200 {
200201 g_autoptr (GError ) error = NULL ;
201202
202- if (!xdp_dbus_impl_session_call_close_sync (session -> impl_session ,
203- NULL , & error ))
203+ if (xdp_dbus_impl_session_get_version (session -> impl_session ) >= 2 )
204+ {
205+ g_auto (GVariantBuilder ) options_builder =
206+ G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE_VARDICT );
207+
208+ g_variant_builder_add (& options_builder , "{sv}" , "voluntary" ,
209+ g_variant_new_boolean (voluntary ));
210+
211+ xdp_dbus_impl_session_call_close_ex_sync (session -> impl_session ,
212+ g_variant_builder_end (& options_builder ),
213+ NULL , & error );
214+ }
215+ else
216+ xdp_dbus_impl_session_call_close_sync (session -> impl_session ,
217+ NULL , & error );
218+
219+ if (error != NULL )
204220 g_warning ("Failed to close session implementation: %s" ,
205221 error -> message );
206222
@@ -221,7 +237,7 @@ handle_close (XdpDbusSession *object,
221237
222238 SESSION_AUTOLOCK_UNREF (g_object_ref (session ));
223239
224- xdp_session_close (session , FALSE);
240+ xdp_session_close (session , FALSE, TRUE );
225241
226242 xdp_dbus_session_complete_close (object , invocation );
227243
@@ -263,7 +279,7 @@ close_sessions_in_thread_func (GTask *task,
263279 XdpSession * session = l -> data ;
264280
265281 SESSION_AUTOLOCK (session );
266- xdp_session_close (session , FALSE);
282+ xdp_session_close (session , FALSE, FALSE );
267283 }
268284
269285 g_slist_free_full (list , g_object_unref );
@@ -288,7 +304,7 @@ on_closed (XdpDbusImplSession *object, GObject *data)
288304 SESSION_AUTOLOCK_UNREF (g_object_ref (session ));
289305
290306 g_clear_object (& session -> impl_session );
291- xdp_session_close (session , TRUE);
307+ xdp_session_close (session , TRUE, FALSE );
292308}
293309
294310static gboolean
0 commit comments