1 /*
2  * Generated by gdbus-codegen 2.56.1. DO NOT EDIT.
3  *
4  * The license of this code is the same as for the D-Bus interface description
5  * it was derived from.
6  */
7 
8 #ifdef HAVE_CONFIG_H
9 #  include "config.h"
10 #endif
11 
12 #include "gdm-manager-glue.h"
13 
14 #include <string.h>
15 #ifdef G_OS_UNIX
16 #  include <gio/gunixfdlist.h>
17 #endif
18 
19 typedef struct
20 {
21   GDBusArgInfo parent_struct;
22   gboolean use_gvariant;
23 } _ExtendedGDBusArgInfo;
24 
25 typedef struct
26 {
27   GDBusMethodInfo parent_struct;
28   const gchar *signal_name;
29   gboolean pass_fdlist;
30 } _ExtendedGDBusMethodInfo;
31 
32 typedef struct
33 {
34   GDBusSignalInfo parent_struct;
35   const gchar *signal_name;
36 } _ExtendedGDBusSignalInfo;
37 
38 typedef struct
39 {
40   GDBusPropertyInfo parent_struct;
41   const gchar *hyphen_name;
42   gboolean use_gvariant;
43 } _ExtendedGDBusPropertyInfo;
44 
45 typedef struct
46 {
47   GDBusInterfaceInfo parent_struct;
48   const gchar *hyphen_name;
49 } _ExtendedGDBusInterfaceInfo;
50 
51 typedef struct
52 {
53   const _ExtendedGDBusPropertyInfo *info;
54   guint prop_id;
55   GValue orig_value; /* the value before the change */
56 } ChangedProperty;
57 
58 static void
_changed_property_free(ChangedProperty * data)59 _changed_property_free (ChangedProperty *data)
60 {
61   g_value_unset (&data->orig_value);
62   g_free (data);
63 }
64 
65 static gboolean
_g_strv_equal0(gchar ** a,gchar ** b)66 _g_strv_equal0 (gchar **a, gchar **b)
67 {
68   gboolean ret = FALSE;
69   guint n;
70   if (a == NULL && b == NULL)
71     {
72       ret = TRUE;
73       goto out;
74     }
75   if (a == NULL || b == NULL)
76     goto out;
77   if (g_strv_length (a) != g_strv_length (b))
78     goto out;
79   for (n = 0; a[n] != NULL; n++)
80     if (g_strcmp0 (a[n], b[n]) != 0)
81       goto out;
82   ret = TRUE;
83 out:
84   return ret;
85 }
86 
87 static gboolean
_g_variant_equal0(GVariant * a,GVariant * b)88 _g_variant_equal0 (GVariant *a, GVariant *b)
89 {
90   gboolean ret = FALSE;
91   if (a == NULL && b == NULL)
92     {
93       ret = TRUE;
94       goto out;
95     }
96   if (a == NULL || b == NULL)
97     goto out;
98   ret = g_variant_equal (a, b);
99 out:
100   return ret;
101 }
102 
103 G_GNUC_UNUSED static gboolean
_g_value_equal(const GValue * a,const GValue * b)104 _g_value_equal (const GValue *a, const GValue *b)
105 {
106   gboolean ret = FALSE;
107   g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));
108   switch (G_VALUE_TYPE (a))
109     {
110       case G_TYPE_BOOLEAN:
111         ret = (g_value_get_boolean (a) == g_value_get_boolean (b));
112         break;
113       case G_TYPE_UCHAR:
114         ret = (g_value_get_uchar (a) == g_value_get_uchar (b));
115         break;
116       case G_TYPE_INT:
117         ret = (g_value_get_int (a) == g_value_get_int (b));
118         break;
119       case G_TYPE_UINT:
120         ret = (g_value_get_uint (a) == g_value_get_uint (b));
121         break;
122       case G_TYPE_INT64:
123         ret = (g_value_get_int64 (a) == g_value_get_int64 (b));
124         break;
125       case G_TYPE_UINT64:
126         ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));
127         break;
128       case G_TYPE_DOUBLE:
129         {
130           /* Avoid -Wfloat-equal warnings by doing a direct bit compare */
131           gdouble da = g_value_get_double (a);
132           gdouble db = g_value_get_double (b);
133           ret = memcmp (&da, &db, sizeof (gdouble)) == 0;
134         }
135         break;
136       case G_TYPE_STRING:
137         ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);
138         break;
139       case G_TYPE_VARIANT:
140         ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));
141         break;
142       default:
143         if (G_VALUE_TYPE (a) == G_TYPE_STRV)
144           ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));
145         else
146           g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));
147         break;
148     }
149   return ret;
150 }
151 
152 /* ------------------------------------------------------------------------
153  * Code for interface org.gnome.DisplayManager.Manager
154  * ------------------------------------------------------------------------
155  */
156 
157 /**
158  * SECTION:GdmDBusManager
159  * @title: GdmDBusManager
160  * @short_description: Generated C code for the org.gnome.DisplayManager.Manager D-Bus interface
161  *
162  * This section contains code for working with the <link linkend="gdbus-interface-org-gnome-DisplayManager-Manager.top_of_page">org.gnome.DisplayManager.Manager</link> D-Bus interface in C.
163  */
164 
165 /* ---- Introspection data for org.gnome.DisplayManager.Manager ---- */
166 
167 static const _ExtendedGDBusArgInfo _gdm_dbus_manager_method_info_register_display_IN_ARG_details =
168 {
169   {
170     -1,
171     (gchar *) "details",
172     (gchar *) "a{ss}",
173     NULL
174   },
175   FALSE
176 };
177 
178 static const _ExtendedGDBusArgInfo * const _gdm_dbus_manager_method_info_register_display_IN_ARG_pointers[] =
179 {
180   &_gdm_dbus_manager_method_info_register_display_IN_ARG_details,
181   NULL
182 };
183 
184 static const _ExtendedGDBusMethodInfo _gdm_dbus_manager_method_info_register_display =
185 {
186   {
187     -1,
188     (gchar *) "RegisterDisplay",
189     (GDBusArgInfo **) &_gdm_dbus_manager_method_info_register_display_IN_ARG_pointers,
190     NULL,
191     NULL
192   },
193   "handle-register-display",
194   FALSE
195 };
196 
197 static const _ExtendedGDBusArgInfo _gdm_dbus_manager_method_info_open_session_OUT_ARG_address =
198 {
199   {
200     -1,
201     (gchar *) "address",
202     (gchar *) "s",
203     NULL
204   },
205   FALSE
206 };
207 
208 static const _ExtendedGDBusArgInfo * const _gdm_dbus_manager_method_info_open_session_OUT_ARG_pointers[] =
209 {
210   &_gdm_dbus_manager_method_info_open_session_OUT_ARG_address,
211   NULL
212 };
213 
214 static const _ExtendedGDBusMethodInfo _gdm_dbus_manager_method_info_open_session =
215 {
216   {
217     -1,
218     (gchar *) "OpenSession",
219     NULL,
220     (GDBusArgInfo **) &_gdm_dbus_manager_method_info_open_session_OUT_ARG_pointers,
221     NULL
222   },
223   "handle-open-session",
224   FALSE
225 };
226 
227 static const _ExtendedGDBusArgInfo _gdm_dbus_manager_method_info_open_reauthentication_channel_IN_ARG_username =
228 {
229   {
230     -1,
231     (gchar *) "username",
232     (gchar *) "s",
233     NULL
234   },
235   FALSE
236 };
237 
238 static const _ExtendedGDBusArgInfo * const _gdm_dbus_manager_method_info_open_reauthentication_channel_IN_ARG_pointers[] =
239 {
240   &_gdm_dbus_manager_method_info_open_reauthentication_channel_IN_ARG_username,
241   NULL
242 };
243 
244 static const _ExtendedGDBusArgInfo _gdm_dbus_manager_method_info_open_reauthentication_channel_OUT_ARG_address =
245 {
246   {
247     -1,
248     (gchar *) "address",
249     (gchar *) "s",
250     NULL
251   },
252   FALSE
253 };
254 
255 static const _ExtendedGDBusArgInfo * const _gdm_dbus_manager_method_info_open_reauthentication_channel_OUT_ARG_pointers[] =
256 {
257   &_gdm_dbus_manager_method_info_open_reauthentication_channel_OUT_ARG_address,
258   NULL
259 };
260 
261 static const _ExtendedGDBusMethodInfo _gdm_dbus_manager_method_info_open_reauthentication_channel =
262 {
263   {
264     -1,
265     (gchar *) "OpenReauthenticationChannel",
266     (GDBusArgInfo **) &_gdm_dbus_manager_method_info_open_reauthentication_channel_IN_ARG_pointers,
267     (GDBusArgInfo **) &_gdm_dbus_manager_method_info_open_reauthentication_channel_OUT_ARG_pointers,
268     NULL
269   },
270   "handle-open-reauthentication-channel",
271   FALSE
272 };
273 
274 static const _ExtendedGDBusMethodInfo * const _gdm_dbus_manager_method_info_pointers[] =
275 {
276   &_gdm_dbus_manager_method_info_register_display,
277   &_gdm_dbus_manager_method_info_open_session,
278   &_gdm_dbus_manager_method_info_open_reauthentication_channel,
279   NULL
280 };
281 
282 static const _ExtendedGDBusPropertyInfo _gdm_dbus_manager_property_info_version =
283 {
284   {
285     -1,
286     (gchar *) "Version",
287     (gchar *) "s",
288     G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
289     NULL
290   },
291   "version",
292   FALSE
293 };
294 
295 static const _ExtendedGDBusPropertyInfo * const _gdm_dbus_manager_property_info_pointers[] =
296 {
297   &_gdm_dbus_manager_property_info_version,
298   NULL
299 };
300 
301 static const _ExtendedGDBusInterfaceInfo _gdm_dbus_manager_interface_info =
302 {
303   {
304     -1,
305     (gchar *) "org.gnome.DisplayManager.Manager",
306     (GDBusMethodInfo **) &_gdm_dbus_manager_method_info_pointers,
307     NULL,
308     (GDBusPropertyInfo **) &_gdm_dbus_manager_property_info_pointers,
309     NULL
310   },
311   "manager",
312 };
313 
314 
315 /**
316  * gdm_dbus_manager_interface_info:
317  *
318  * Gets a machine-readable description of the <link linkend="gdbus-interface-org-gnome-DisplayManager-Manager.top_of_page">org.gnome.DisplayManager.Manager</link> D-Bus interface.
319  *
320  * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
321  */
322 GDBusInterfaceInfo *
gdm_dbus_manager_interface_info(void)323 gdm_dbus_manager_interface_info (void)
324 {
325   return (GDBusInterfaceInfo *) &_gdm_dbus_manager_interface_info.parent_struct;
326 }
327 
328 /**
329  * gdm_dbus_manager_override_properties:
330  * @klass: The class structure for a #GObject derived class.
331  * @property_id_begin: The property id to assign to the first overridden property.
332  *
333  * Overrides all #GObject properties in the #GdmDBusManager interface for a concrete class.
334  * The properties are overridden in the order they are defined.
335  *
336  * Returns: The last property id.
337  */
338 guint
gdm_dbus_manager_override_properties(GObjectClass * klass,guint property_id_begin)339 gdm_dbus_manager_override_properties (GObjectClass *klass, guint property_id_begin)
340 {
341   g_object_class_override_property (klass, property_id_begin++, "version");
342   return property_id_begin - 1;
343 }
344 
345 
346 
347 /**
348  * GdmDBusManager:
349  *
350  * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-gnome-DisplayManager-Manager.top_of_page">org.gnome.DisplayManager.Manager</link>.
351  */
352 
353 /**
354  * GdmDBusManagerIface:
355  * @parent_iface: The parent interface.
356  * @handle_open_reauthentication_channel: Handler for the #GdmDBusManager::handle-open-reauthentication-channel signal.
357  * @handle_open_session: Handler for the #GdmDBusManager::handle-open-session signal.
358  * @handle_register_display: Handler for the #GdmDBusManager::handle-register-display signal.
359  * @get_version: Getter for the #GdmDBusManager:version property.
360  *
361  * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-gnome-DisplayManager-Manager.top_of_page">org.gnome.DisplayManager.Manager</link>.
362  */
363 
364 typedef GdmDBusManagerIface GdmDBusManagerInterface;
G_DEFINE_INTERFACE(GdmDBusManager,gdm_dbus_manager,G_TYPE_OBJECT)365 G_DEFINE_INTERFACE (GdmDBusManager, gdm_dbus_manager, G_TYPE_OBJECT)
366 
367 static void
368 gdm_dbus_manager_default_init (GdmDBusManagerIface *iface)
369 {
370   /* GObject signals for incoming D-Bus method calls: */
371   /**
372    * GdmDBusManager::handle-register-display:
373    * @object: A #GdmDBusManager.
374    * @invocation: A #GDBusMethodInvocation.
375    * @arg_details: Argument passed by remote caller.
376    *
377    * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-gnome-DisplayManager-Manager.RegisterDisplay">RegisterDisplay()</link> D-Bus method.
378    *
379    * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call gdm_dbus_manager_complete_register_display() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
380    *
381    * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
382    */
383   g_signal_new ("handle-register-display",
384     G_TYPE_FROM_INTERFACE (iface),
385     G_SIGNAL_RUN_LAST,
386     G_STRUCT_OFFSET (GdmDBusManagerIface, handle_register_display),
387     g_signal_accumulator_true_handled,
388     NULL,
389     g_cclosure_marshal_generic,
390     G_TYPE_BOOLEAN,
391     2,
392     G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_VARIANT);
393 
394   /**
395    * GdmDBusManager::handle-open-session:
396    * @object: A #GdmDBusManager.
397    * @invocation: A #GDBusMethodInvocation.
398    *
399    * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-gnome-DisplayManager-Manager.OpenSession">OpenSession()</link> D-Bus method.
400    *
401    * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call gdm_dbus_manager_complete_open_session() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
402    *
403    * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
404    */
405   g_signal_new ("handle-open-session",
406     G_TYPE_FROM_INTERFACE (iface),
407     G_SIGNAL_RUN_LAST,
408     G_STRUCT_OFFSET (GdmDBusManagerIface, handle_open_session),
409     g_signal_accumulator_true_handled,
410     NULL,
411     g_cclosure_marshal_generic,
412     G_TYPE_BOOLEAN,
413     1,
414     G_TYPE_DBUS_METHOD_INVOCATION);
415 
416   /**
417    * GdmDBusManager::handle-open-reauthentication-channel:
418    * @object: A #GdmDBusManager.
419    * @invocation: A #GDBusMethodInvocation.
420    * @arg_username: Argument passed by remote caller.
421    *
422    * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-gnome-DisplayManager-Manager.OpenReauthenticationChannel">OpenReauthenticationChannel()</link> D-Bus method.
423    *
424    * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call gdm_dbus_manager_complete_open_reauthentication_channel() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
425    *
426    * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
427    */
428   g_signal_new ("handle-open-reauthentication-channel",
429     G_TYPE_FROM_INTERFACE (iface),
430     G_SIGNAL_RUN_LAST,
431     G_STRUCT_OFFSET (GdmDBusManagerIface, handle_open_reauthentication_channel),
432     g_signal_accumulator_true_handled,
433     NULL,
434     g_cclosure_marshal_generic,
435     G_TYPE_BOOLEAN,
436     2,
437     G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING);
438 
439   /* GObject properties for D-Bus properties: */
440   /**
441    * GdmDBusManager:version:
442    *
443    * Represents the D-Bus property <link linkend="gdbus-property-org-gnome-DisplayManager-Manager.Version">"Version"</link>.
444    *
445    * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
446    */
447   g_object_interface_install_property (iface,
448     g_param_spec_string ("version", "Version", "Version", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
449 }
450 
451 /**
452  * gdm_dbus_manager_get_version: (skip)
453  * @object: A #GdmDBusManager.
454  *
455  * Gets the value of the <link linkend="gdbus-property-org-gnome-DisplayManager-Manager.Version">"Version"</link> D-Bus property.
456  *
457  * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
458  *
459  * <warning>The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where @object was constructed. Use gdm_dbus_manager_dup_version() if on another thread.</warning>
460  *
461  * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object.
462  */
463 const gchar *
gdm_dbus_manager_get_version(GdmDBusManager * object)464 gdm_dbus_manager_get_version (GdmDBusManager *object)
465 {
466   return GDM_DBUS_MANAGER_GET_IFACE (object)->get_version (object);
467 }
468 
469 /**
470  * gdm_dbus_manager_dup_version: (skip)
471  * @object: A #GdmDBusManager.
472  *
473  * Gets a copy of the <link linkend="gdbus-property-org-gnome-DisplayManager-Manager.Version">"Version"</link> D-Bus property.
474  *
475  * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
476  *
477  * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free().
478  */
479 gchar *
gdm_dbus_manager_dup_version(GdmDBusManager * object)480 gdm_dbus_manager_dup_version (GdmDBusManager *object)
481 {
482   gchar *value;
483   g_object_get (G_OBJECT (object), "version", &value, NULL);
484   return value;
485 }
486 
487 /**
488  * gdm_dbus_manager_set_version: (skip)
489  * @object: A #GdmDBusManager.
490  * @value: The value to set.
491  *
492  * Sets the <link linkend="gdbus-property-org-gnome-DisplayManager-Manager.Version">"Version"</link> D-Bus property to @value.
493  *
494  * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
495  */
496 void
gdm_dbus_manager_set_version(GdmDBusManager * object,const gchar * value)497 gdm_dbus_manager_set_version (GdmDBusManager *object, const gchar *value)
498 {
499   g_object_set (G_OBJECT (object), "version", value, NULL);
500 }
501 
502 /**
503  * gdm_dbus_manager_call_register_display:
504  * @proxy: A #GdmDBusManagerProxy.
505  * @arg_details: Argument to pass with the method invocation.
506  * @cancellable: (nullable): A #GCancellable or %NULL.
507  * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
508  * @user_data: User data to pass to @callback.
509  *
510  * Asynchronously invokes the <link linkend="gdbus-method-org-gnome-DisplayManager-Manager.RegisterDisplay">RegisterDisplay()</link> D-Bus method on @proxy.
511  * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
512  * You can then call gdm_dbus_manager_call_register_display_finish() to get the result of the operation.
513  *
514  * See gdm_dbus_manager_call_register_display_sync() for the synchronous, blocking version of this method.
515  */
516 void
gdm_dbus_manager_call_register_display(GdmDBusManager * proxy,GVariant * arg_details,GCancellable * cancellable,GAsyncReadyCallback callback,gpointer user_data)517 gdm_dbus_manager_call_register_display (
518     GdmDBusManager *proxy,
519     GVariant *arg_details,
520     GCancellable *cancellable,
521     GAsyncReadyCallback callback,
522     gpointer user_data)
523 {
524   g_dbus_proxy_call (G_DBUS_PROXY (proxy),
525     "RegisterDisplay",
526     g_variant_new ("(@a{ss})",
527                    arg_details),
528     G_DBUS_CALL_FLAGS_NONE,
529     -1,
530     cancellable,
531     callback,
532     user_data);
533 }
534 
535 /**
536  * gdm_dbus_manager_call_register_display_finish:
537  * @proxy: A #GdmDBusManagerProxy.
538  * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to gdm_dbus_manager_call_register_display().
539  * @error: Return location for error or %NULL.
540  *
541  * Finishes an operation started with gdm_dbus_manager_call_register_display().
542  *
543  * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
544  */
545 gboolean
gdm_dbus_manager_call_register_display_finish(GdmDBusManager * proxy,GAsyncResult * res,GError ** error)546 gdm_dbus_manager_call_register_display_finish (
547     GdmDBusManager *proxy,
548     GAsyncResult *res,
549     GError **error)
550 {
551   GVariant *_ret;
552   _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
553   if (_ret == NULL)
554     goto _out;
555   g_variant_get (_ret,
556                  "()");
557   g_variant_unref (_ret);
558 _out:
559   return _ret != NULL;
560 }
561 
562 /**
563  * gdm_dbus_manager_call_register_display_sync:
564  * @proxy: A #GdmDBusManagerProxy.
565  * @arg_details: Argument to pass with the method invocation.
566  * @cancellable: (nullable): A #GCancellable or %NULL.
567  * @error: Return location for error or %NULL.
568  *
569  * Synchronously invokes the <link linkend="gdbus-method-org-gnome-DisplayManager-Manager.RegisterDisplay">RegisterDisplay()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
570  *
571  * See gdm_dbus_manager_call_register_display() for the asynchronous version of this method.
572  *
573  * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
574  */
575 gboolean
gdm_dbus_manager_call_register_display_sync(GdmDBusManager * proxy,GVariant * arg_details,GCancellable * cancellable,GError ** error)576 gdm_dbus_manager_call_register_display_sync (
577     GdmDBusManager *proxy,
578     GVariant *arg_details,
579     GCancellable *cancellable,
580     GError **error)
581 {
582   GVariant *_ret;
583   _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
584     "RegisterDisplay",
585     g_variant_new ("(@a{ss})",
586                    arg_details),
587     G_DBUS_CALL_FLAGS_NONE,
588     -1,
589     cancellable,
590     error);
591   if (_ret == NULL)
592     goto _out;
593   g_variant_get (_ret,
594                  "()");
595   g_variant_unref (_ret);
596 _out:
597   return _ret != NULL;
598 }
599 
600 /**
601  * gdm_dbus_manager_call_open_session:
602  * @proxy: A #GdmDBusManagerProxy.
603  * @cancellable: (nullable): A #GCancellable or %NULL.
604  * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
605  * @user_data: User data to pass to @callback.
606  *
607  * Asynchronously invokes the <link linkend="gdbus-method-org-gnome-DisplayManager-Manager.OpenSession">OpenSession()</link> D-Bus method on @proxy.
608  * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
609  * You can then call gdm_dbus_manager_call_open_session_finish() to get the result of the operation.
610  *
611  * See gdm_dbus_manager_call_open_session_sync() for the synchronous, blocking version of this method.
612  */
613 void
gdm_dbus_manager_call_open_session(GdmDBusManager * proxy,GCancellable * cancellable,GAsyncReadyCallback callback,gpointer user_data)614 gdm_dbus_manager_call_open_session (
615     GdmDBusManager *proxy,
616     GCancellable *cancellable,
617     GAsyncReadyCallback callback,
618     gpointer user_data)
619 {
620   g_dbus_proxy_call (G_DBUS_PROXY (proxy),
621     "OpenSession",
622     g_variant_new ("()"),
623     G_DBUS_CALL_FLAGS_NONE,
624     -1,
625     cancellable,
626     callback,
627     user_data);
628 }
629 
630 /**
631  * gdm_dbus_manager_call_open_session_finish:
632  * @proxy: A #GdmDBusManagerProxy.
633  * @out_address: (out): Return location for return parameter or %NULL to ignore.
634  * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to gdm_dbus_manager_call_open_session().
635  * @error: Return location for error or %NULL.
636  *
637  * Finishes an operation started with gdm_dbus_manager_call_open_session().
638  *
639  * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
640  */
641 gboolean
gdm_dbus_manager_call_open_session_finish(GdmDBusManager * proxy,gchar ** out_address,GAsyncResult * res,GError ** error)642 gdm_dbus_manager_call_open_session_finish (
643     GdmDBusManager *proxy,
644     gchar **out_address,
645     GAsyncResult *res,
646     GError **error)
647 {
648   GVariant *_ret;
649   _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
650   if (_ret == NULL)
651     goto _out;
652   g_variant_get (_ret,
653                  "(s)",
654                  out_address);
655   g_variant_unref (_ret);
656 _out:
657   return _ret != NULL;
658 }
659 
660 /**
661  * gdm_dbus_manager_call_open_session_sync:
662  * @proxy: A #GdmDBusManagerProxy.
663  * @out_address: (out): Return location for return parameter or %NULL to ignore.
664  * @cancellable: (nullable): A #GCancellable or %NULL.
665  * @error: Return location for error or %NULL.
666  *
667  * Synchronously invokes the <link linkend="gdbus-method-org-gnome-DisplayManager-Manager.OpenSession">OpenSession()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
668  *
669  * See gdm_dbus_manager_call_open_session() for the asynchronous version of this method.
670  *
671  * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
672  */
673 gboolean
gdm_dbus_manager_call_open_session_sync(GdmDBusManager * proxy,gchar ** out_address,GCancellable * cancellable,GError ** error)674 gdm_dbus_manager_call_open_session_sync (
675     GdmDBusManager *proxy,
676     gchar **out_address,
677     GCancellable *cancellable,
678     GError **error)
679 {
680   GVariant *_ret;
681   _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
682     "OpenSession",
683     g_variant_new ("()"),
684     G_DBUS_CALL_FLAGS_NONE,
685     -1,
686     cancellable,
687     error);
688   if (_ret == NULL)
689     goto _out;
690   g_variant_get (_ret,
691                  "(s)",
692                  out_address);
693   g_variant_unref (_ret);
694 _out:
695   return _ret != NULL;
696 }
697 
698 /**
699  * gdm_dbus_manager_call_open_reauthentication_channel:
700  * @proxy: A #GdmDBusManagerProxy.
701  * @arg_username: Argument to pass with the method invocation.
702  * @cancellable: (nullable): A #GCancellable or %NULL.
703  * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
704  * @user_data: User data to pass to @callback.
705  *
706  * Asynchronously invokes the <link linkend="gdbus-method-org-gnome-DisplayManager-Manager.OpenReauthenticationChannel">OpenReauthenticationChannel()</link> D-Bus method on @proxy.
707  * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
708  * You can then call gdm_dbus_manager_call_open_reauthentication_channel_finish() to get the result of the operation.
709  *
710  * See gdm_dbus_manager_call_open_reauthentication_channel_sync() for the synchronous, blocking version of this method.
711  */
712 void
gdm_dbus_manager_call_open_reauthentication_channel(GdmDBusManager * proxy,const gchar * arg_username,GCancellable * cancellable,GAsyncReadyCallback callback,gpointer user_data)713 gdm_dbus_manager_call_open_reauthentication_channel (
714     GdmDBusManager *proxy,
715     const gchar *arg_username,
716     GCancellable *cancellable,
717     GAsyncReadyCallback callback,
718     gpointer user_data)
719 {
720   g_dbus_proxy_call (G_DBUS_PROXY (proxy),
721     "OpenReauthenticationChannel",
722     g_variant_new ("(s)",
723                    arg_username),
724     G_DBUS_CALL_FLAGS_NONE,
725     -1,
726     cancellable,
727     callback,
728     user_data);
729 }
730 
731 /**
732  * gdm_dbus_manager_call_open_reauthentication_channel_finish:
733  * @proxy: A #GdmDBusManagerProxy.
734  * @out_address: (out): Return location for return parameter or %NULL to ignore.
735  * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to gdm_dbus_manager_call_open_reauthentication_channel().
736  * @error: Return location for error or %NULL.
737  *
738  * Finishes an operation started with gdm_dbus_manager_call_open_reauthentication_channel().
739  *
740  * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
741  */
742 gboolean
gdm_dbus_manager_call_open_reauthentication_channel_finish(GdmDBusManager * proxy,gchar ** out_address,GAsyncResult * res,GError ** error)743 gdm_dbus_manager_call_open_reauthentication_channel_finish (
744     GdmDBusManager *proxy,
745     gchar **out_address,
746     GAsyncResult *res,
747     GError **error)
748 {
749   GVariant *_ret;
750   _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
751   if (_ret == NULL)
752     goto _out;
753   g_variant_get (_ret,
754                  "(s)",
755                  out_address);
756   g_variant_unref (_ret);
757 _out:
758   return _ret != NULL;
759 }
760 
761 /**
762  * gdm_dbus_manager_call_open_reauthentication_channel_sync:
763  * @proxy: A #GdmDBusManagerProxy.
764  * @arg_username: Argument to pass with the method invocation.
765  * @out_address: (out): Return location for return parameter or %NULL to ignore.
766  * @cancellable: (nullable): A #GCancellable or %NULL.
767  * @error: Return location for error or %NULL.
768  *
769  * Synchronously invokes the <link linkend="gdbus-method-org-gnome-DisplayManager-Manager.OpenReauthenticationChannel">OpenReauthenticationChannel()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
770  *
771  * See gdm_dbus_manager_call_open_reauthentication_channel() for the asynchronous version of this method.
772  *
773  * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
774  */
775 gboolean
gdm_dbus_manager_call_open_reauthentication_channel_sync(GdmDBusManager * proxy,const gchar * arg_username,gchar ** out_address,GCancellable * cancellable,GError ** error)776 gdm_dbus_manager_call_open_reauthentication_channel_sync (
777     GdmDBusManager *proxy,
778     const gchar *arg_username,
779     gchar **out_address,
780     GCancellable *cancellable,
781     GError **error)
782 {
783   GVariant *_ret;
784   _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
785     "OpenReauthenticationChannel",
786     g_variant_new ("(s)",
787                    arg_username),
788     G_DBUS_CALL_FLAGS_NONE,
789     -1,
790     cancellable,
791     error);
792   if (_ret == NULL)
793     goto _out;
794   g_variant_get (_ret,
795                  "(s)",
796                  out_address);
797   g_variant_unref (_ret);
798 _out:
799   return _ret != NULL;
800 }
801 
802 /**
803  * gdm_dbus_manager_complete_register_display:
804  * @object: A #GdmDBusManager.
805  * @invocation: (transfer full): A #GDBusMethodInvocation.
806  *
807  * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-gnome-DisplayManager-Manager.RegisterDisplay">RegisterDisplay()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
808  *
809  * This method will free @invocation, you cannot use it afterwards.
810  */
811 void
gdm_dbus_manager_complete_register_display(GdmDBusManager * object,GDBusMethodInvocation * invocation)812 gdm_dbus_manager_complete_register_display (
813     GdmDBusManager *object,
814     GDBusMethodInvocation *invocation)
815 {
816   g_dbus_method_invocation_return_value (invocation,
817     g_variant_new ("()"));
818 }
819 
820 /**
821  * gdm_dbus_manager_complete_open_session:
822  * @object: A #GdmDBusManager.
823  * @invocation: (transfer full): A #GDBusMethodInvocation.
824  * @address: Parameter to return.
825  *
826  * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-gnome-DisplayManager-Manager.OpenSession">OpenSession()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
827  *
828  * This method will free @invocation, you cannot use it afterwards.
829  */
830 void
gdm_dbus_manager_complete_open_session(GdmDBusManager * object,GDBusMethodInvocation * invocation,const gchar * address)831 gdm_dbus_manager_complete_open_session (
832     GdmDBusManager *object,
833     GDBusMethodInvocation *invocation,
834     const gchar *address)
835 {
836   g_dbus_method_invocation_return_value (invocation,
837     g_variant_new ("(s)",
838                    address));
839 }
840 
841 /**
842  * gdm_dbus_manager_complete_open_reauthentication_channel:
843  * @object: A #GdmDBusManager.
844  * @invocation: (transfer full): A #GDBusMethodInvocation.
845  * @address: Parameter to return.
846  *
847  * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-gnome-DisplayManager-Manager.OpenReauthenticationChannel">OpenReauthenticationChannel()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
848  *
849  * This method will free @invocation, you cannot use it afterwards.
850  */
851 void
gdm_dbus_manager_complete_open_reauthentication_channel(GdmDBusManager * object,GDBusMethodInvocation * invocation,const gchar * address)852 gdm_dbus_manager_complete_open_reauthentication_channel (
853     GdmDBusManager *object,
854     GDBusMethodInvocation *invocation,
855     const gchar *address)
856 {
857   g_dbus_method_invocation_return_value (invocation,
858     g_variant_new ("(s)",
859                    address));
860 }
861 
862 /* ------------------------------------------------------------------------ */
863 
864 /**
865  * GdmDBusManagerProxy:
866  *
867  * The #GdmDBusManagerProxy structure contains only private data and should only be accessed using the provided API.
868  */
869 
870 /**
871  * GdmDBusManagerProxyClass:
872  * @parent_class: The parent class.
873  *
874  * Class structure for #GdmDBusManagerProxy.
875  */
876 
877 struct _GdmDBusManagerProxyPrivate
878 {
879   GData *qdata;
880 };
881 
882 static void gdm_dbus_manager_proxy_iface_init (GdmDBusManagerIface *iface);
883 
884 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
G_DEFINE_TYPE_WITH_CODE(GdmDBusManagerProxy,gdm_dbus_manager_proxy,G_TYPE_DBUS_PROXY,G_ADD_PRIVATE (GdmDBusManagerProxy)G_IMPLEMENT_INTERFACE (GDM_DBUS_TYPE_MANAGER,gdm_dbus_manager_proxy_iface_init))885 G_DEFINE_TYPE_WITH_CODE (GdmDBusManagerProxy, gdm_dbus_manager_proxy, G_TYPE_DBUS_PROXY,
886                          G_ADD_PRIVATE (GdmDBusManagerProxy)
887                          G_IMPLEMENT_INTERFACE (GDM_DBUS_TYPE_MANAGER, gdm_dbus_manager_proxy_iface_init))
888 
889 #else
890 G_DEFINE_TYPE_WITH_CODE (GdmDBusManagerProxy, gdm_dbus_manager_proxy, G_TYPE_DBUS_PROXY,
891                          G_IMPLEMENT_INTERFACE (GDM_DBUS_TYPE_MANAGER, gdm_dbus_manager_proxy_iface_init))
892 
893 #endif
894 static void
895 gdm_dbus_manager_proxy_finalize (GObject *object)
896 {
897   GdmDBusManagerProxy *proxy = GDM_DBUS_MANAGER_PROXY (object);
898   g_datalist_clear (&proxy->priv->qdata);
899   G_OBJECT_CLASS (gdm_dbus_manager_proxy_parent_class)->finalize (object);
900 }
901 
902 static void
gdm_dbus_manager_proxy_get_property(GObject * object,guint prop_id,GValue * value,GParamSpec * pspec G_GNUC_UNUSED)903 gdm_dbus_manager_proxy_get_property (GObject      *object,
904   guint         prop_id,
905   GValue       *value,
906   GParamSpec   *pspec G_GNUC_UNUSED)
907 {
908   const _ExtendedGDBusPropertyInfo *info;
909   GVariant *variant;
910   g_assert (prop_id != 0 && prop_id - 1 < 1);
911   info = _gdm_dbus_manager_property_info_pointers[prop_id - 1];
912   variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name);
913   if (info->use_gvariant)
914     {
915       g_value_set_variant (value, variant);
916     }
917   else
918     {
919       if (variant != NULL)
920         g_dbus_gvariant_to_gvalue (variant, value);
921     }
922   if (variant != NULL)
923     g_variant_unref (variant);
924 }
925 
926 static void
gdm_dbus_manager_proxy_set_property_cb(GDBusProxy * proxy,GAsyncResult * res,gpointer user_data)927 gdm_dbus_manager_proxy_set_property_cb (GDBusProxy *proxy,
928   GAsyncResult *res,
929   gpointer      user_data)
930 {
931   const _ExtendedGDBusPropertyInfo *info = user_data;
932   GError *error;
933   GVariant *_ret;
934   error = NULL;
935   _ret = g_dbus_proxy_call_finish (proxy, res, &error);
936   if (!_ret)
937     {
938       g_warning ("Error setting property '%s' on interface org.gnome.DisplayManager.Manager: %s (%s, %d)",
939                  info->parent_struct.name,
940                  error->message, g_quark_to_string (error->domain), error->code);
941       g_error_free (error);
942     }
943   else
944     {
945       g_variant_unref (_ret);
946     }
947 }
948 
949 static void
gdm_dbus_manager_proxy_set_property(GObject * object,guint prop_id,const GValue * value,GParamSpec * pspec G_GNUC_UNUSED)950 gdm_dbus_manager_proxy_set_property (GObject      *object,
951   guint         prop_id,
952   const GValue *value,
953   GParamSpec   *pspec G_GNUC_UNUSED)
954 {
955   const _ExtendedGDBusPropertyInfo *info;
956   GVariant *variant;
957   g_assert (prop_id != 0 && prop_id - 1 < 1);
958   info = _gdm_dbus_manager_property_info_pointers[prop_id - 1];
959   variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature));
960   g_dbus_proxy_call (G_DBUS_PROXY (object),
961     "org.freedesktop.DBus.Properties.Set",
962     g_variant_new ("(ssv)", "org.gnome.DisplayManager.Manager", info->parent_struct.name, variant),
963     G_DBUS_CALL_FLAGS_NONE,
964     -1,
965     NULL, (GAsyncReadyCallback) gdm_dbus_manager_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct);
966   g_variant_unref (variant);
967 }
968 
969 static void
gdm_dbus_manager_proxy_g_signal(GDBusProxy * proxy,const gchar * sender_name G_GNUC_UNUSED,const gchar * signal_name,GVariant * parameters)970 gdm_dbus_manager_proxy_g_signal (GDBusProxy *proxy,
971   const gchar *sender_name G_GNUC_UNUSED,
972   const gchar *signal_name,
973   GVariant *parameters)
974 {
975   _ExtendedGDBusSignalInfo *info;
976   GVariantIter iter;
977   GVariant *child;
978   GValue *paramv;
979   gsize num_params;
980   gsize n;
981   guint signal_id;
982   info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_gdm_dbus_manager_interface_info.parent_struct, signal_name);
983   if (info == NULL)
984     return;
985   num_params = g_variant_n_children (parameters);
986   paramv = g_new0 (GValue, num_params + 1);
987   g_value_init (&paramv[0], GDM_DBUS_TYPE_MANAGER);
988   g_value_set_object (&paramv[0], proxy);
989   g_variant_iter_init (&iter, parameters);
990   n = 1;
991   while ((child = g_variant_iter_next_value (&iter)) != NULL)
992     {
993       _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
994       if (arg_info->use_gvariant)
995         {
996           g_value_init (&paramv[n], G_TYPE_VARIANT);
997           g_value_set_variant (&paramv[n], child);
998           n++;
999         }
1000       else
1001         g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
1002       g_variant_unref (child);
1003     }
1004   signal_id = g_signal_lookup (info->signal_name, GDM_DBUS_TYPE_MANAGER);
1005   g_signal_emitv (paramv, signal_id, 0, NULL);
1006   for (n = 0; n < num_params + 1; n++)
1007     g_value_unset (&paramv[n]);
1008   g_free (paramv);
1009 }
1010 
1011 static void
gdm_dbus_manager_proxy_g_properties_changed(GDBusProxy * _proxy,GVariant * changed_properties,const gchar * const * invalidated_properties)1012 gdm_dbus_manager_proxy_g_properties_changed (GDBusProxy *_proxy,
1013   GVariant *changed_properties,
1014   const gchar *const *invalidated_properties)
1015 {
1016   GdmDBusManagerProxy *proxy = GDM_DBUS_MANAGER_PROXY (_proxy);
1017   guint n;
1018   const gchar *key;
1019   GVariantIter *iter;
1020   _ExtendedGDBusPropertyInfo *info;
1021   g_variant_get (changed_properties, "a{sv}", &iter);
1022   while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
1023     {
1024       info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_gdm_dbus_manager_interface_info.parent_struct, key);
1025       g_datalist_remove_data (&proxy->priv->qdata, key);
1026       if (info != NULL)
1027         g_object_notify (G_OBJECT (proxy), info->hyphen_name);
1028     }
1029   g_variant_iter_free (iter);
1030   for (n = 0; invalidated_properties[n] != NULL; n++)
1031     {
1032       info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_gdm_dbus_manager_interface_info.parent_struct, invalidated_properties[n]);
1033       g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
1034       if (info != NULL)
1035         g_object_notify (G_OBJECT (proxy), info->hyphen_name);
1036     }
1037 }
1038 
1039 static const gchar *
gdm_dbus_manager_proxy_get_version(GdmDBusManager * object)1040 gdm_dbus_manager_proxy_get_version (GdmDBusManager *object)
1041 {
1042   GdmDBusManagerProxy *proxy = GDM_DBUS_MANAGER_PROXY (object);
1043   GVariant *variant;
1044   const gchar *value = NULL;
1045   variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "Version");
1046   if (variant != NULL)
1047     {
1048       value = g_variant_get_string (variant, NULL);
1049       g_variant_unref (variant);
1050     }
1051   return value;
1052 }
1053 
1054 static void
gdm_dbus_manager_proxy_init(GdmDBusManagerProxy * proxy)1055 gdm_dbus_manager_proxy_init (GdmDBusManagerProxy *proxy)
1056 {
1057 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
1058   proxy->priv = gdm_dbus_manager_proxy_get_instance_private (proxy);
1059 #else
1060   proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, GDM_DBUS_TYPE_MANAGER_PROXY, GdmDBusManagerProxyPrivate);
1061 #endif
1062 
1063   g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), gdm_dbus_manager_interface_info ());
1064 }
1065 
1066 static void
gdm_dbus_manager_proxy_class_init(GdmDBusManagerProxyClass * klass)1067 gdm_dbus_manager_proxy_class_init (GdmDBusManagerProxyClass *klass)
1068 {
1069   GObjectClass *gobject_class;
1070   GDBusProxyClass *proxy_class;
1071 
1072   gobject_class = G_OBJECT_CLASS (klass);
1073   gobject_class->finalize     = gdm_dbus_manager_proxy_finalize;
1074   gobject_class->get_property = gdm_dbus_manager_proxy_get_property;
1075   gobject_class->set_property = gdm_dbus_manager_proxy_set_property;
1076 
1077   proxy_class = G_DBUS_PROXY_CLASS (klass);
1078   proxy_class->g_signal = gdm_dbus_manager_proxy_g_signal;
1079   proxy_class->g_properties_changed = gdm_dbus_manager_proxy_g_properties_changed;
1080 
1081   gdm_dbus_manager_override_properties (gobject_class, 1);
1082 
1083 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
1084   g_type_class_add_private (klass, sizeof (GdmDBusManagerProxyPrivate));
1085 #endif
1086 }
1087 
1088 static void
gdm_dbus_manager_proxy_iface_init(GdmDBusManagerIface * iface)1089 gdm_dbus_manager_proxy_iface_init (GdmDBusManagerIface *iface)
1090 {
1091   iface->get_version = gdm_dbus_manager_proxy_get_version;
1092 }
1093 
1094 /**
1095  * gdm_dbus_manager_proxy_new:
1096  * @connection: A #GDBusConnection.
1097  * @flags: Flags from the #GDBusProxyFlags enumeration.
1098  * @name: (nullable): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
1099  * @object_path: An object path.
1100  * @cancellable: (nullable): A #GCancellable or %NULL.
1101  * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
1102  * @user_data: User data to pass to @callback.
1103  *
1104  * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-gnome-DisplayManager-Manager.top_of_page">org.gnome.DisplayManager.Manager</link>. See g_dbus_proxy_new() for more details.
1105  *
1106  * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
1107  * You can then call gdm_dbus_manager_proxy_new_finish() to get the result of the operation.
1108  *
1109  * See gdm_dbus_manager_proxy_new_sync() for the synchronous, blocking version of this constructor.
1110  */
1111 void
gdm_dbus_manager_proxy_new(GDBusConnection * connection,GDBusProxyFlags flags,const gchar * name,const gchar * object_path,GCancellable * cancellable,GAsyncReadyCallback callback,gpointer user_data)1112 gdm_dbus_manager_proxy_new (
1113     GDBusConnection     *connection,
1114     GDBusProxyFlags      flags,
1115     const gchar         *name,
1116     const gchar         *object_path,
1117     GCancellable        *cancellable,
1118     GAsyncReadyCallback  callback,
1119     gpointer             user_data)
1120 {
1121   g_async_initable_new_async (GDM_DBUS_TYPE_MANAGER_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.gnome.DisplayManager.Manager", NULL);
1122 }
1123 
1124 /**
1125  * gdm_dbus_manager_proxy_new_finish:
1126  * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to gdm_dbus_manager_proxy_new().
1127  * @error: Return location for error or %NULL
1128  *
1129  * Finishes an operation started with gdm_dbus_manager_proxy_new().
1130  *
1131  * Returns: (transfer full) (type GdmDBusManagerProxy): The constructed proxy object or %NULL if @error is set.
1132  */
1133 GdmDBusManager *
gdm_dbus_manager_proxy_new_finish(GAsyncResult * res,GError ** error)1134 gdm_dbus_manager_proxy_new_finish (
1135     GAsyncResult        *res,
1136     GError             **error)
1137 {
1138   GObject *ret;
1139   GObject *source_object;
1140   source_object = g_async_result_get_source_object (res);
1141   ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
1142   g_object_unref (source_object);
1143   if (ret != NULL)
1144     return GDM_DBUS_MANAGER (ret);
1145   else
1146     return NULL;
1147 }
1148 
1149 /**
1150  * gdm_dbus_manager_proxy_new_sync:
1151  * @connection: A #GDBusConnection.
1152  * @flags: Flags from the #GDBusProxyFlags enumeration.
1153  * @name: (nullable): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
1154  * @object_path: An object path.
1155  * @cancellable: (nullable): A #GCancellable or %NULL.
1156  * @error: Return location for error or %NULL
1157  *
1158  * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-gnome-DisplayManager-Manager.top_of_page">org.gnome.DisplayManager.Manager</link>. See g_dbus_proxy_new_sync() for more details.
1159  *
1160  * The calling thread is blocked until a reply is received.
1161  *
1162  * See gdm_dbus_manager_proxy_new() for the asynchronous version of this constructor.
1163  *
1164  * Returns: (transfer full) (type GdmDBusManagerProxy): The constructed proxy object or %NULL if @error is set.
1165  */
1166 GdmDBusManager *
gdm_dbus_manager_proxy_new_sync(GDBusConnection * connection,GDBusProxyFlags flags,const gchar * name,const gchar * object_path,GCancellable * cancellable,GError ** error)1167 gdm_dbus_manager_proxy_new_sync (
1168     GDBusConnection     *connection,
1169     GDBusProxyFlags      flags,
1170     const gchar         *name,
1171     const gchar         *object_path,
1172     GCancellable        *cancellable,
1173     GError             **error)
1174 {
1175   GInitable *ret;
1176   ret = g_initable_new (GDM_DBUS_TYPE_MANAGER_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.gnome.DisplayManager.Manager", NULL);
1177   if (ret != NULL)
1178     return GDM_DBUS_MANAGER (ret);
1179   else
1180     return NULL;
1181 }
1182 
1183 
1184 /**
1185  * gdm_dbus_manager_proxy_new_for_bus:
1186  * @bus_type: A #GBusType.
1187  * @flags: Flags from the #GDBusProxyFlags enumeration.
1188  * @name: A bus name (well-known or unique).
1189  * @object_path: An object path.
1190  * @cancellable: (nullable): A #GCancellable or %NULL.
1191  * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
1192  * @user_data: User data to pass to @callback.
1193  *
1194  * Like gdm_dbus_manager_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
1195  *
1196  * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
1197  * You can then call gdm_dbus_manager_proxy_new_for_bus_finish() to get the result of the operation.
1198  *
1199  * See gdm_dbus_manager_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
1200  */
1201 void
gdm_dbus_manager_proxy_new_for_bus(GBusType bus_type,GDBusProxyFlags flags,const gchar * name,const gchar * object_path,GCancellable * cancellable,GAsyncReadyCallback callback,gpointer user_data)1202 gdm_dbus_manager_proxy_new_for_bus (
1203     GBusType             bus_type,
1204     GDBusProxyFlags      flags,
1205     const gchar         *name,
1206     const gchar         *object_path,
1207     GCancellable        *cancellable,
1208     GAsyncReadyCallback  callback,
1209     gpointer             user_data)
1210 {
1211   g_async_initable_new_async (GDM_DBUS_TYPE_MANAGER_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.gnome.DisplayManager.Manager", NULL);
1212 }
1213 
1214 /**
1215  * gdm_dbus_manager_proxy_new_for_bus_finish:
1216  * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to gdm_dbus_manager_proxy_new_for_bus().
1217  * @error: Return location for error or %NULL
1218  *
1219  * Finishes an operation started with gdm_dbus_manager_proxy_new_for_bus().
1220  *
1221  * Returns: (transfer full) (type GdmDBusManagerProxy): The constructed proxy object or %NULL if @error is set.
1222  */
1223 GdmDBusManager *
gdm_dbus_manager_proxy_new_for_bus_finish(GAsyncResult * res,GError ** error)1224 gdm_dbus_manager_proxy_new_for_bus_finish (
1225     GAsyncResult        *res,
1226     GError             **error)
1227 {
1228   GObject *ret;
1229   GObject *source_object;
1230   source_object = g_async_result_get_source_object (res);
1231   ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
1232   g_object_unref (source_object);
1233   if (ret != NULL)
1234     return GDM_DBUS_MANAGER (ret);
1235   else
1236     return NULL;
1237 }
1238 
1239 /**
1240  * gdm_dbus_manager_proxy_new_for_bus_sync:
1241  * @bus_type: A #GBusType.
1242  * @flags: Flags from the #GDBusProxyFlags enumeration.
1243  * @name: A bus name (well-known or unique).
1244  * @object_path: An object path.
1245  * @cancellable: (nullable): A #GCancellable or %NULL.
1246  * @error: Return location for error or %NULL
1247  *
1248  * Like gdm_dbus_manager_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
1249  *
1250  * The calling thread is blocked until a reply is received.
1251  *
1252  * See gdm_dbus_manager_proxy_new_for_bus() for the asynchronous version of this constructor.
1253  *
1254  * Returns: (transfer full) (type GdmDBusManagerProxy): The constructed proxy object or %NULL if @error is set.
1255  */
1256 GdmDBusManager *
gdm_dbus_manager_proxy_new_for_bus_sync(GBusType bus_type,GDBusProxyFlags flags,const gchar * name,const gchar * object_path,GCancellable * cancellable,GError ** error)1257 gdm_dbus_manager_proxy_new_for_bus_sync (
1258     GBusType             bus_type,
1259     GDBusProxyFlags      flags,
1260     const gchar         *name,
1261     const gchar         *object_path,
1262     GCancellable        *cancellable,
1263     GError             **error)
1264 {
1265   GInitable *ret;
1266   ret = g_initable_new (GDM_DBUS_TYPE_MANAGER_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.gnome.DisplayManager.Manager", NULL);
1267   if (ret != NULL)
1268     return GDM_DBUS_MANAGER (ret);
1269   else
1270     return NULL;
1271 }
1272 
1273 
1274 /* ------------------------------------------------------------------------ */
1275 
1276 /**
1277  * GdmDBusManagerSkeleton:
1278  *
1279  * The #GdmDBusManagerSkeleton structure contains only private data and should only be accessed using the provided API.
1280  */
1281 
1282 /**
1283  * GdmDBusManagerSkeletonClass:
1284  * @parent_class: The parent class.
1285  *
1286  * Class structure for #GdmDBusManagerSkeleton.
1287  */
1288 
1289 struct _GdmDBusManagerSkeletonPrivate
1290 {
1291   GValue *properties;
1292   GList *changed_properties;
1293   GSource *changed_properties_idle_source;
1294   GMainContext *context;
1295   GMutex lock;
1296 };
1297 
1298 static void
_gdm_dbus_manager_skeleton_handle_method_call(GDBusConnection * connection G_GNUC_UNUSED,const gchar * sender G_GNUC_UNUSED,const gchar * object_path G_GNUC_UNUSED,const gchar * interface_name,const gchar * method_name,GVariant * parameters,GDBusMethodInvocation * invocation,gpointer user_data)1299 _gdm_dbus_manager_skeleton_handle_method_call (
1300   GDBusConnection *connection G_GNUC_UNUSED,
1301   const gchar *sender G_GNUC_UNUSED,
1302   const gchar *object_path G_GNUC_UNUSED,
1303   const gchar *interface_name,
1304   const gchar *method_name,
1305   GVariant *parameters,
1306   GDBusMethodInvocation *invocation,
1307   gpointer user_data)
1308 {
1309   GdmDBusManagerSkeleton *skeleton = GDM_DBUS_MANAGER_SKELETON (user_data);
1310   _ExtendedGDBusMethodInfo *info;
1311   GVariantIter iter;
1312   GVariant *child;
1313   GValue *paramv;
1314   gsize num_params;
1315   guint num_extra;
1316   gsize n;
1317   guint signal_id;
1318   GValue return_value = G_VALUE_INIT;
1319   info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
1320   g_assert (info != NULL);
1321   num_params = g_variant_n_children (parameters);
1322   num_extra = info->pass_fdlist ? 3 : 2;  paramv = g_new0 (GValue, num_params + num_extra);
1323   n = 0;
1324   g_value_init (&paramv[n], GDM_DBUS_TYPE_MANAGER);
1325   g_value_set_object (&paramv[n++], skeleton);
1326   g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
1327   g_value_set_object (&paramv[n++], invocation);
1328   if (info->pass_fdlist)
1329     {
1330 #ifdef G_OS_UNIX
1331       g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
1332       g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));
1333 #else
1334       g_assert_not_reached ();
1335 #endif
1336     }
1337   g_variant_iter_init (&iter, parameters);
1338   while ((child = g_variant_iter_next_value (&iter)) != NULL)
1339     {
1340       _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
1341       if (arg_info->use_gvariant)
1342         {
1343           g_value_init (&paramv[n], G_TYPE_VARIANT);
1344           g_value_set_variant (&paramv[n], child);
1345           n++;
1346         }
1347       else
1348         g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
1349       g_variant_unref (child);
1350     }
1351   signal_id = g_signal_lookup (info->signal_name, GDM_DBUS_TYPE_MANAGER);
1352   g_value_init (&return_value, G_TYPE_BOOLEAN);
1353   g_signal_emitv (paramv, signal_id, 0, &return_value);
1354   if (!g_value_get_boolean (&return_value))
1355     g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);
1356   g_value_unset (&return_value);
1357   for (n = 0; n < num_params + num_extra; n++)
1358     g_value_unset (&paramv[n]);
1359   g_free (paramv);
1360 }
1361 
1362 static GVariant *
_gdm_dbus_manager_skeleton_handle_get_property(GDBusConnection * connection G_GNUC_UNUSED,const gchar * sender G_GNUC_UNUSED,const gchar * object_path G_GNUC_UNUSED,const gchar * interface_name G_GNUC_UNUSED,const gchar * property_name,GError ** error,gpointer user_data)1363 _gdm_dbus_manager_skeleton_handle_get_property (
1364   GDBusConnection *connection G_GNUC_UNUSED,
1365   const gchar *sender G_GNUC_UNUSED,
1366   const gchar *object_path G_GNUC_UNUSED,
1367   const gchar *interface_name G_GNUC_UNUSED,
1368   const gchar *property_name,
1369   GError **error,
1370   gpointer user_data)
1371 {
1372   GdmDBusManagerSkeleton *skeleton = GDM_DBUS_MANAGER_SKELETON (user_data);
1373   GValue value = G_VALUE_INIT;
1374   GParamSpec *pspec;
1375   _ExtendedGDBusPropertyInfo *info;
1376   GVariant *ret;
1377   ret = NULL;
1378   info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_gdm_dbus_manager_interface_info.parent_struct, property_name);
1379   g_assert (info != NULL);
1380   pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
1381   if (pspec == NULL)
1382     {
1383       g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
1384     }
1385   else
1386     {
1387       g_value_init (&value, pspec->value_type);
1388       g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
1389       ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
1390       g_value_unset (&value);
1391     }
1392   return ret;
1393 }
1394 
1395 static gboolean
_gdm_dbus_manager_skeleton_handle_set_property(GDBusConnection * connection G_GNUC_UNUSED,const gchar * sender G_GNUC_UNUSED,const gchar * object_path G_GNUC_UNUSED,const gchar * interface_name G_GNUC_UNUSED,const gchar * property_name,GVariant * variant,GError ** error,gpointer user_data)1396 _gdm_dbus_manager_skeleton_handle_set_property (
1397   GDBusConnection *connection G_GNUC_UNUSED,
1398   const gchar *sender G_GNUC_UNUSED,
1399   const gchar *object_path G_GNUC_UNUSED,
1400   const gchar *interface_name G_GNUC_UNUSED,
1401   const gchar *property_name,
1402   GVariant *variant,
1403   GError **error,
1404   gpointer user_data)
1405 {
1406   GdmDBusManagerSkeleton *skeleton = GDM_DBUS_MANAGER_SKELETON (user_data);
1407   GValue value = G_VALUE_INIT;
1408   GParamSpec *pspec;
1409   _ExtendedGDBusPropertyInfo *info;
1410   gboolean ret;
1411   ret = FALSE;
1412   info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_gdm_dbus_manager_interface_info.parent_struct, property_name);
1413   g_assert (info != NULL);
1414   pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
1415   if (pspec == NULL)
1416     {
1417       g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
1418     }
1419   else
1420     {
1421       if (info->use_gvariant)
1422         g_value_set_variant (&value, variant);
1423       else
1424         g_dbus_gvariant_to_gvalue (variant, &value);
1425       g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
1426       g_value_unset (&value);
1427       ret = TRUE;
1428     }
1429   return ret;
1430 }
1431 
1432 static const GDBusInterfaceVTable _gdm_dbus_manager_skeleton_vtable =
1433 {
1434   _gdm_dbus_manager_skeleton_handle_method_call,
1435   _gdm_dbus_manager_skeleton_handle_get_property,
1436   _gdm_dbus_manager_skeleton_handle_set_property,
1437   {NULL}
1438 };
1439 
1440 static GDBusInterfaceInfo *
gdm_dbus_manager_skeleton_dbus_interface_get_info(GDBusInterfaceSkeleton * skeleton G_GNUC_UNUSED)1441 gdm_dbus_manager_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
1442 {
1443   return gdm_dbus_manager_interface_info ();
1444 }
1445 
1446 static GDBusInterfaceVTable *
gdm_dbus_manager_skeleton_dbus_interface_get_vtable(GDBusInterfaceSkeleton * skeleton G_GNUC_UNUSED)1447 gdm_dbus_manager_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
1448 {
1449   return (GDBusInterfaceVTable *) &_gdm_dbus_manager_skeleton_vtable;
1450 }
1451 
1452 static GVariant *
gdm_dbus_manager_skeleton_dbus_interface_get_properties(GDBusInterfaceSkeleton * _skeleton)1453 gdm_dbus_manager_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
1454 {
1455   GdmDBusManagerSkeleton *skeleton = GDM_DBUS_MANAGER_SKELETON (_skeleton);
1456 
1457   GVariantBuilder builder;
1458   guint n;
1459   g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
1460   if (_gdm_dbus_manager_interface_info.parent_struct.properties == NULL)
1461     goto out;
1462   for (n = 0; _gdm_dbus_manager_interface_info.parent_struct.properties[n] != NULL; n++)
1463     {
1464       GDBusPropertyInfo *info = _gdm_dbus_manager_interface_info.parent_struct.properties[n];
1465       if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
1466         {
1467           GVariant *value;
1468           value = _gdm_dbus_manager_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.gnome.DisplayManager.Manager", info->name, NULL, skeleton);
1469           if (value != NULL)
1470             {
1471               g_variant_take_ref (value);
1472               g_variant_builder_add (&builder, "{sv}", info->name, value);
1473               g_variant_unref (value);
1474             }
1475         }
1476     }
1477 out:
1478   return g_variant_builder_end (&builder);
1479 }
1480 
1481 static gboolean _gdm_dbus_manager_emit_changed (gpointer user_data);
1482 
1483 static void
gdm_dbus_manager_skeleton_dbus_interface_flush(GDBusInterfaceSkeleton * _skeleton)1484 gdm_dbus_manager_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
1485 {
1486   GdmDBusManagerSkeleton *skeleton = GDM_DBUS_MANAGER_SKELETON (_skeleton);
1487   gboolean emit_changed = FALSE;
1488 
1489   g_mutex_lock (&skeleton->priv->lock);
1490   if (skeleton->priv->changed_properties_idle_source != NULL)
1491     {
1492       g_source_destroy (skeleton->priv->changed_properties_idle_source);
1493       skeleton->priv->changed_properties_idle_source = NULL;
1494       emit_changed = TRUE;
1495     }
1496   g_mutex_unlock (&skeleton->priv->lock);
1497 
1498   if (emit_changed)
1499     _gdm_dbus_manager_emit_changed (skeleton);
1500 }
1501 
1502 static void gdm_dbus_manager_skeleton_iface_init (GdmDBusManagerIface *iface);
1503 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
G_DEFINE_TYPE_WITH_CODE(GdmDBusManagerSkeleton,gdm_dbus_manager_skeleton,G_TYPE_DBUS_INTERFACE_SKELETON,G_ADD_PRIVATE (GdmDBusManagerSkeleton)G_IMPLEMENT_INTERFACE (GDM_DBUS_TYPE_MANAGER,gdm_dbus_manager_skeleton_iface_init))1504 G_DEFINE_TYPE_WITH_CODE (GdmDBusManagerSkeleton, gdm_dbus_manager_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
1505                          G_ADD_PRIVATE (GdmDBusManagerSkeleton)
1506                          G_IMPLEMENT_INTERFACE (GDM_DBUS_TYPE_MANAGER, gdm_dbus_manager_skeleton_iface_init))
1507 
1508 #else
1509 G_DEFINE_TYPE_WITH_CODE (GdmDBusManagerSkeleton, gdm_dbus_manager_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
1510                          G_IMPLEMENT_INTERFACE (GDM_DBUS_TYPE_MANAGER, gdm_dbus_manager_skeleton_iface_init))
1511 
1512 #endif
1513 static void
1514 gdm_dbus_manager_skeleton_finalize (GObject *object)
1515 {
1516   GdmDBusManagerSkeleton *skeleton = GDM_DBUS_MANAGER_SKELETON (object);
1517   guint n;
1518   for (n = 0; n < 1; n++)
1519     g_value_unset (&skeleton->priv->properties[n]);
1520   g_free (skeleton->priv->properties);
1521   g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
1522   if (skeleton->priv->changed_properties_idle_source != NULL)
1523     g_source_destroy (skeleton->priv->changed_properties_idle_source);
1524   g_main_context_unref (skeleton->priv->context);
1525   g_mutex_clear (&skeleton->priv->lock);
1526   G_OBJECT_CLASS (gdm_dbus_manager_skeleton_parent_class)->finalize (object);
1527 }
1528 
1529 static void
gdm_dbus_manager_skeleton_get_property(GObject * object,guint prop_id,GValue * value,GParamSpec * pspec G_GNUC_UNUSED)1530 gdm_dbus_manager_skeleton_get_property (GObject      *object,
1531   guint         prop_id,
1532   GValue       *value,
1533   GParamSpec   *pspec G_GNUC_UNUSED)
1534 {
1535   GdmDBusManagerSkeleton *skeleton = GDM_DBUS_MANAGER_SKELETON (object);
1536   g_assert (prop_id != 0 && prop_id - 1 < 1);
1537   g_mutex_lock (&skeleton->priv->lock);
1538   g_value_copy (&skeleton->priv->properties[prop_id - 1], value);
1539   g_mutex_unlock (&skeleton->priv->lock);
1540 }
1541 
1542 static gboolean
_gdm_dbus_manager_emit_changed(gpointer user_data)1543 _gdm_dbus_manager_emit_changed (gpointer user_data)
1544 {
1545   GdmDBusManagerSkeleton *skeleton = GDM_DBUS_MANAGER_SKELETON (user_data);
1546   GList *l;
1547   GVariantBuilder builder;
1548   GVariantBuilder invalidated_builder;
1549   guint num_changes;
1550 
1551   g_mutex_lock (&skeleton->priv->lock);
1552   g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
1553   g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as"));
1554   for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next)
1555     {
1556       ChangedProperty *cp = l->data;
1557       GVariant *variant;
1558       const GValue *cur_value;
1559 
1560       cur_value = &skeleton->priv->properties[cp->prop_id - 1];
1561       if (!_g_value_equal (cur_value, &cp->orig_value))
1562         {
1563           variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature));
1564           g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant);
1565           g_variant_unref (variant);
1566           num_changes++;
1567         }
1568     }
1569   if (num_changes > 0)
1570     {
1571       GList *connections, *ll;
1572       GVariant *signal_variant;
1573       signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.gnome.DisplayManager.Manager",
1574                                            &builder, &invalidated_builder));
1575       connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
1576       for (ll = connections; ll != NULL; ll = ll->next)
1577         {
1578           GDBusConnection *connection = ll->data;
1579 
1580           g_dbus_connection_emit_signal (connection,
1581                                          NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)),
1582                                          "org.freedesktop.DBus.Properties",
1583                                          "PropertiesChanged",
1584                                          signal_variant,
1585                                          NULL);
1586         }
1587       g_variant_unref (signal_variant);
1588       g_list_free_full (connections, g_object_unref);
1589     }
1590   else
1591     {
1592       g_variant_builder_clear (&builder);
1593       g_variant_builder_clear (&invalidated_builder);
1594     }
1595   g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
1596   skeleton->priv->changed_properties = NULL;
1597   skeleton->priv->changed_properties_idle_source = NULL;
1598   g_mutex_unlock (&skeleton->priv->lock);
1599   return FALSE;
1600 }
1601 
1602 static void
_gdm_dbus_manager_schedule_emit_changed(GdmDBusManagerSkeleton * skeleton,const _ExtendedGDBusPropertyInfo * info,guint prop_id,const GValue * orig_value)1603 _gdm_dbus_manager_schedule_emit_changed (GdmDBusManagerSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value)
1604 {
1605   ChangedProperty *cp;
1606   GList *l;
1607   cp = NULL;
1608   for (l = skeleton->priv->changed_properties; l != NULL; l = l->next)
1609     {
1610       ChangedProperty *i_cp = l->data;
1611       if (i_cp->info == info)
1612         {
1613           cp = i_cp;
1614           break;
1615         }
1616     }
1617   if (cp == NULL)
1618     {
1619       cp = g_new0 (ChangedProperty, 1);
1620       cp->prop_id = prop_id;
1621       cp->info = info;
1622       skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp);
1623       g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value));
1624       g_value_copy (orig_value, &cp->orig_value);
1625     }
1626 }
1627 
1628 static void
gdm_dbus_manager_skeleton_notify(GObject * object,GParamSpec * pspec G_GNUC_UNUSED)1629 gdm_dbus_manager_skeleton_notify (GObject      *object,
1630   GParamSpec *pspec G_GNUC_UNUSED)
1631 {
1632   GdmDBusManagerSkeleton *skeleton = GDM_DBUS_MANAGER_SKELETON (object);
1633   g_mutex_lock (&skeleton->priv->lock);
1634   if (skeleton->priv->changed_properties != NULL &&
1635       skeleton->priv->changed_properties_idle_source == NULL)
1636     {
1637       skeleton->priv->changed_properties_idle_source = g_idle_source_new ();
1638       g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT);
1639       g_source_set_callback (skeleton->priv->changed_properties_idle_source, _gdm_dbus_manager_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref);
1640       g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _gdm_dbus_manager_emit_changed");
1641       g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context);
1642       g_source_unref (skeleton->priv->changed_properties_idle_source);
1643     }
1644   g_mutex_unlock (&skeleton->priv->lock);
1645 }
1646 
1647 static void
gdm_dbus_manager_skeleton_set_property(GObject * object,guint prop_id,const GValue * value,GParamSpec * pspec)1648 gdm_dbus_manager_skeleton_set_property (GObject      *object,
1649   guint         prop_id,
1650   const GValue *value,
1651   GParamSpec   *pspec)
1652 {
1653   GdmDBusManagerSkeleton *skeleton = GDM_DBUS_MANAGER_SKELETON (object);
1654   g_assert (prop_id != 0 && prop_id - 1 < 1);
1655   g_mutex_lock (&skeleton->priv->lock);
1656   g_object_freeze_notify (object);
1657   if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1]))
1658     {
1659       if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL)
1660         _gdm_dbus_manager_schedule_emit_changed (skeleton, _gdm_dbus_manager_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]);
1661       g_value_copy (value, &skeleton->priv->properties[prop_id - 1]);
1662       g_object_notify_by_pspec (object, pspec);
1663     }
1664   g_mutex_unlock (&skeleton->priv->lock);
1665   g_object_thaw_notify (object);
1666 }
1667 
1668 static void
gdm_dbus_manager_skeleton_init(GdmDBusManagerSkeleton * skeleton)1669 gdm_dbus_manager_skeleton_init (GdmDBusManagerSkeleton *skeleton)
1670 {
1671 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
1672   skeleton->priv = gdm_dbus_manager_skeleton_get_instance_private (skeleton);
1673 #else
1674   skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, GDM_DBUS_TYPE_MANAGER_SKELETON, GdmDBusManagerSkeletonPrivate);
1675 #endif
1676 
1677   g_mutex_init (&skeleton->priv->lock);
1678   skeleton->priv->context = g_main_context_ref_thread_default ();
1679   skeleton->priv->properties = g_new0 (GValue, 1);
1680   g_value_init (&skeleton->priv->properties[0], G_TYPE_STRING);
1681 }
1682 
1683 static const gchar *
gdm_dbus_manager_skeleton_get_version(GdmDBusManager * object)1684 gdm_dbus_manager_skeleton_get_version (GdmDBusManager *object)
1685 {
1686   GdmDBusManagerSkeleton *skeleton = GDM_DBUS_MANAGER_SKELETON (object);
1687   const gchar *value;
1688   g_mutex_lock (&skeleton->priv->lock);
1689   value = g_value_get_string (&(skeleton->priv->properties[0]));
1690   g_mutex_unlock (&skeleton->priv->lock);
1691   return value;
1692 }
1693 
1694 static void
gdm_dbus_manager_skeleton_class_init(GdmDBusManagerSkeletonClass * klass)1695 gdm_dbus_manager_skeleton_class_init (GdmDBusManagerSkeletonClass *klass)
1696 {
1697   GObjectClass *gobject_class;
1698   GDBusInterfaceSkeletonClass *skeleton_class;
1699 
1700   gobject_class = G_OBJECT_CLASS (klass);
1701   gobject_class->finalize = gdm_dbus_manager_skeleton_finalize;
1702   gobject_class->get_property = gdm_dbus_manager_skeleton_get_property;
1703   gobject_class->set_property = gdm_dbus_manager_skeleton_set_property;
1704   gobject_class->notify       = gdm_dbus_manager_skeleton_notify;
1705 
1706 
1707   gdm_dbus_manager_override_properties (gobject_class, 1);
1708 
1709   skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
1710   skeleton_class->get_info = gdm_dbus_manager_skeleton_dbus_interface_get_info;
1711   skeleton_class->get_properties = gdm_dbus_manager_skeleton_dbus_interface_get_properties;
1712   skeleton_class->flush = gdm_dbus_manager_skeleton_dbus_interface_flush;
1713   skeleton_class->get_vtable = gdm_dbus_manager_skeleton_dbus_interface_get_vtable;
1714 
1715 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
1716   g_type_class_add_private (klass, sizeof (GdmDBusManagerSkeletonPrivate));
1717 #endif
1718 }
1719 
1720 static void
gdm_dbus_manager_skeleton_iface_init(GdmDBusManagerIface * iface)1721 gdm_dbus_manager_skeleton_iface_init (GdmDBusManagerIface *iface)
1722 {
1723   iface->get_version = gdm_dbus_manager_skeleton_get_version;
1724 }
1725 
1726 /**
1727  * gdm_dbus_manager_skeleton_new:
1728  *
1729  * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-gnome-DisplayManager-Manager.top_of_page">org.gnome.DisplayManager.Manager</link>.
1730  *
1731  * Returns: (transfer full) (type GdmDBusManagerSkeleton): The skeleton object.
1732  */
1733 GdmDBusManager *
gdm_dbus_manager_skeleton_new(void)1734 gdm_dbus_manager_skeleton_new (void)
1735 {
1736   return GDM_DBUS_MANAGER (g_object_new (GDM_DBUS_TYPE_MANAGER_SKELETON, NULL));
1737 }
1738 
1739