Datetime: use a gdbus-codegen-erated wrapper

Instead of handrolled, copy-pasted async code for talking to
the date-time-mechanism, use gdbus-codegen to generate one
that looks nicer and is just all-around better.
This commit is contained in:
Matthias Clasen 2011-05-17 11:27:47 -04:00
parent 11571bf609
commit 5e05b920c4
4 changed files with 3673 additions and 24 deletions

View file

@ -104,8 +104,8 @@ libdate_time_la_SOURCES = \
cc-datetime-panel.h \
cc-timezone-map.c \
cc-timezone-map.h \
set-timezone.c \
set-timezone.h \
dtm.c \
dtm.h \
date-endian.c \
date-endian.h \
tz.c tz.h

View file

@ -19,11 +19,12 @@
*
*/
#include "config.h"
#include "cc-datetime-panel.h"
#include <sys/time.h>
#include "cc-timezone-map.h"
#include "set-timezone.h"
#include "dtm.h"
#include "date-endian.h"
#include <gdesktop-enums.h>
@ -77,6 +78,9 @@ struct _CcDateTimePanelPrivate
GDesktopClockFormat clock_format;
guint update_id;
DateTimeMechanism *dtm;
GCancellable *cancellable;
};
static void update_time (CcDateTimePanel *self);
@ -137,6 +141,19 @@ cc_date_time_panel_dispose (GObject *object)
priv->date = NULL;
}
if (priv->cancellable)
{
g_cancellable_cancel (priv->cancellable);
g_object_unref (priv->cancellable);
priv->cancellable = NULL;
}
if (priv->dtm)
{
g_object_unref (priv->dtm);
priv->dtm = NULL;
}
G_OBJECT_CLASS (cc_date_time_panel_parent_class)->dispose (object);
}
@ -252,13 +269,21 @@ update_time (CcDateTimePanel *self)
}
static void
set_time_cb (CcDateTimePanel *self,
GError *error)
set_time_cb (GObject *source,
GAsyncResult *res,
gpointer user_data)
{
/* TODO: display any error in a user friendly way */
if (error)
CcDateTimePanel *self = user_data;
GError *error;
error = NULL;
if (!date_time_mechanism_call_set_time_finish (self->priv->dtm,
res,
&error))
{
/* TODO: display any error in a user friendly way */
g_warning ("Could not set system time: %s", error->message);
g_error_free (error);
}
else
{
@ -267,24 +292,40 @@ set_time_cb (CcDateTimePanel *self,
}
static void
set_timezone_cb (CcDateTimePanel *self,
GError *error)
set_timezone_cb (GObject *source,
GAsyncResult *res,
gpointer user_data)
{
/* TODO: display any error in a user friendly way */
if (error)
CcDateTimePanel *self = user_data;
GError *error;
error = NULL;
if (!date_time_mechanism_call_set_timezone_finish (self->priv->dtm,
res,
&error))
{
/* TODO: display any error in a user friendly way */
g_warning ("Could not set system timezone: %s", error->message);
g_error_free (error);
}
}
static void
set_using_ntp_cb (CcDateTimePanel *self,
GError *error)
set_using_ntp_cb (GObject *source,
GAsyncResult *res,
gpointer user_data)
{
/* TODO: display any error in a user friendly way */
if (error)
CcDateTimePanel *self = user_data;
GError *error;
error = NULL;
if (!date_time_mechanism_call_set_using_ntp_finish (self->priv->dtm,
res,
&error))
{
/* TODO: display any error in a user friendly way */
g_warning ("Could not set system to use NTP: %s", error->message);
g_error_free (error);
}
}
@ -295,7 +336,12 @@ queue_set_datetime (CcDateTimePanel *self)
/* for now just do it */
unixtime = g_date_time_to_unix (self->priv->date);
set_system_time_async (unixtime, (GFunc) set_time_cb, self, NULL);
date_time_mechanism_call_set_time (self->priv->dtm,
unixtime,
self->priv->cancellable,
set_time_cb,
self);
}
static void
@ -305,7 +351,12 @@ queue_set_ntp (CcDateTimePanel *self)
gboolean using_ntp;
/* for now just do it */
using_ntp = gtk_switch_get_active (GTK_SWITCH (W("network_time_switch")));
set_using_ntp_async (using_ntp, (GFunc) set_using_ntp_cb, self, NULL);
date_time_mechanism_call_set_using_ntp (self->priv->dtm,
using_ntp,
self->priv->cancellable,
set_using_ntp_cb,
self);
}
static void
@ -314,7 +365,11 @@ queue_set_timezone (CcDateTimePanel *self)
/* for now just do it */
if (self->priv->current_location)
{
set_system_timezone_async (self->priv->current_location->zone, (GFunc) set_timezone_cb, self, NULL);
date_time_mechanism_call_set_timezone (self->priv->dtm,
self->priv->current_location->zone,
self->priv->cancellable,
set_timezone_cb,
self);
}
}
@ -471,15 +526,20 @@ location_changed_cb (CcTimezoneMap *map,
}
static void
get_timezone_cb (CcDateTimePanel *self,
const gchar *timezone,
GError *error)
get_timezone_cb (GObject *source,
GAsyncResult *res,
gpointer user_data)
{
CcDateTimePanel *self = user_data;
GtkWidget *widget;
gchar *timezone;
GError *error;
if (error)
error = NULL;
if (!date_time_mechanism_call_get_timezone_finish (self->priv->dtm, &timezone, res, &error))
{
g_warning ("Could not get current timezone: %s", error->message);
g_error_free (error);
}
else
{
@ -504,6 +564,8 @@ get_timezone_cb (CcDateTimePanel *self,
g_signal_connect (self->priv->map, "location-changed",
G_CALLBACK (location_changed_cb), self);
g_free (timezone);
}
/* load region and city tree models */
@ -813,13 +875,28 @@ cc_date_time_panel_init (CcDateTimePanel *self)
GtkTreeModelSort *city_modelsort;
guint i, num_days;
gboolean using_ntp;
gboolean can_use_ntp;
int ret;
GtkWidget *lockbutton;
GPermission *permission;
DateEndianess endianess;
GError *error;
priv = self->priv = DATE_TIME_PANEL_PRIVATE (self);
priv->cancellable = g_cancellable_new ();
error = NULL;
priv->dtm = date_time_mechanism_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
G_DBUS_PROXY_FLAGS_NONE,
"org.gnome.SettingsDaemon.DateTimeMechanism",
"/",
priv->cancellable,
&error);
if (priv->dtm == NULL) {
g_warning ("could not get proxy for DateTimeMechanism: %s", error->message);
g_error_free (error);
}
priv->builder = gtk_builder_new ();
ret = gtk_builder_add_objects_from_file (priv->builder, DATADIR"/datetime.ui",
@ -834,7 +911,18 @@ cc_date_time_panel_init (CcDateTimePanel *self)
}
/* set up network time button */
using_ntp = get_using_ntp ();
error = NULL;
using_ntp = can_use_ntp = FALSE;
if (!date_time_mechanism_call_get_using_ntp_sync (priv->dtm,
&can_use_ntp,
&using_ntp,
priv->cancellable,
&error))
{
g_warning ("Failed to get using ntp: %s", error->message);
g_error_free (error);
}
gtk_switch_set_active (GTK_SWITCH (W("network_time_switch")), using_ntp);
update_widget_state_for_ntp (self, using_ntp);
g_signal_connect (W("network_time_switch"), "notify::active",
@ -924,7 +1012,10 @@ cc_date_time_panel_init (CcDateTimePanel *self)
/* After the initial setup, so we can be sure that
* the model is filled up */
get_system_timezone_async ((GetTimezoneFunc) get_timezone_cb, self, NULL);
date_time_mechanism_call_get_timezone (priv->dtm,
priv->cancellable,
get_timezone_cb,
self);
queue_clock_update (self);

3085
panels/datetime/dtm.c Normal file

File diff suppressed because it is too large Load diff

473
panels/datetime/dtm.h Normal file
View file

@ -0,0 +1,473 @@
/*
* Generated by gdbus-codegen 2.29.5. DO NOT EDIT.
*
* The license of this code is the same as for the source it was derived from.
*/
#ifndef __DTM_H__
#define __DTM_H__
#include <gio/gio.h>
G_BEGIN_DECLS
/* ------------------------------------------------------------------------ */
/* Declarations for org.gnome.SettingsDaemon.DateTimeMechanism */
#define TYPE_DATE_TIME_MECHANISM (date_time_mechanism_get_type ())
#define DATE_TIME_MECHANISM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_DATE_TIME_MECHANISM, DateTimeMechanism))
#define IS_DATE_TIME_MECHANISM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_DATE_TIME_MECHANISM))
#define DATE_TIME_MECHANISM_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), TYPE_DATE_TIME_MECHANISM, DateTimeMechanism))
struct _DateTimeMechanism;
typedef struct _DateTimeMechanism DateTimeMechanism;
typedef struct _DateTimeMechanismIface DateTimeMechanismIface;
struct _DateTimeMechanismIface
{
GTypeInterface parent_iface;
gboolean (*handle_adjust_time) (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation,
gint64 seconds_to_add);
gboolean (*handle_can_set_time) (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation);
gboolean (*handle_can_set_timezone) (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation);
gboolean (*handle_can_set_using_ntp) (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation);
gboolean (*handle_get_hardware_clock_using_utc) (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation);
gboolean (*handle_get_timezone) (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation);
gboolean (*handle_get_using_ntp) (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation);
gboolean (*handle_set_date) (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation,
guint day,
guint month,
guint year);
gboolean (*handle_set_hardware_clock_using_utc) (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation,
gboolean is_using_utc);
gboolean (*handle_set_time) (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation,
gint64 seconds_since_epoch);
gboolean (*handle_set_timezone) (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation,
const gchar *tz);
gboolean (*handle_set_using_ntp) (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation,
gboolean is_using_ntp);
};
GType date_time_mechanism_get_type (void) G_GNUC_CONST;
GDBusInterfaceInfo *date_time_mechanism_interface_info (void);
/* D-Bus method call completion functions: */
void date_time_mechanism_complete_set_timezone (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation);
void date_time_mechanism_complete_get_timezone (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation,
const gchar *timezone);
void date_time_mechanism_complete_can_set_timezone (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation,
gint value);
void date_time_mechanism_complete_set_date (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation);
void date_time_mechanism_complete_set_time (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation);
void date_time_mechanism_complete_can_set_time (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation,
gint value);
void date_time_mechanism_complete_adjust_time (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation);
void date_time_mechanism_complete_get_hardware_clock_using_utc (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation,
gboolean is_using_utc);
void date_time_mechanism_complete_set_hardware_clock_using_utc (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation);
void date_time_mechanism_complete_get_using_ntp (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation,
gboolean can_use_ntp,
gboolean is_using_ntp);
void date_time_mechanism_complete_set_using_ntp (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation);
void date_time_mechanism_complete_can_set_using_ntp (
DateTimeMechanism *object,
GDBusMethodInvocation *invocation,
gint value);
/* D-Bus method calls: */
void date_time_mechanism_call_set_timezone (
DateTimeMechanism *proxy,
const gchar *tz,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean date_time_mechanism_call_set_timezone_finish (
DateTimeMechanism *proxy,
GAsyncResult *res,
GError **error);
gboolean date_time_mechanism_call_set_timezone_sync (
DateTimeMechanism *proxy,
const gchar *tz,
GCancellable *cancellable,
GError **error);
void date_time_mechanism_call_get_timezone (
DateTimeMechanism *proxy,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean date_time_mechanism_call_get_timezone_finish (
DateTimeMechanism *proxy,
gchar **out_timezone,
GAsyncResult *res,
GError **error);
gboolean date_time_mechanism_call_get_timezone_sync (
DateTimeMechanism *proxy,
gchar **out_timezone,
GCancellable *cancellable,
GError **error);
void date_time_mechanism_call_can_set_timezone (
DateTimeMechanism *proxy,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean date_time_mechanism_call_can_set_timezone_finish (
DateTimeMechanism *proxy,
gint *out_value,
GAsyncResult *res,
GError **error);
gboolean date_time_mechanism_call_can_set_timezone_sync (
DateTimeMechanism *proxy,
gint *out_value,
GCancellable *cancellable,
GError **error);
void date_time_mechanism_call_set_date (
DateTimeMechanism *proxy,
guint day,
guint month,
guint year,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean date_time_mechanism_call_set_date_finish (
DateTimeMechanism *proxy,
GAsyncResult *res,
GError **error);
gboolean date_time_mechanism_call_set_date_sync (
DateTimeMechanism *proxy,
guint day,
guint month,
guint year,
GCancellable *cancellable,
GError **error);
void date_time_mechanism_call_set_time (
DateTimeMechanism *proxy,
gint64 seconds_since_epoch,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean date_time_mechanism_call_set_time_finish (
DateTimeMechanism *proxy,
GAsyncResult *res,
GError **error);
gboolean date_time_mechanism_call_set_time_sync (
DateTimeMechanism *proxy,
gint64 seconds_since_epoch,
GCancellable *cancellable,
GError **error);
void date_time_mechanism_call_can_set_time (
DateTimeMechanism *proxy,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean date_time_mechanism_call_can_set_time_finish (
DateTimeMechanism *proxy,
gint *out_value,
GAsyncResult *res,
GError **error);
gboolean date_time_mechanism_call_can_set_time_sync (
DateTimeMechanism *proxy,
gint *out_value,
GCancellable *cancellable,
GError **error);
void date_time_mechanism_call_adjust_time (
DateTimeMechanism *proxy,
gint64 seconds_to_add,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean date_time_mechanism_call_adjust_time_finish (
DateTimeMechanism *proxy,
GAsyncResult *res,
GError **error);
gboolean date_time_mechanism_call_adjust_time_sync (
DateTimeMechanism *proxy,
gint64 seconds_to_add,
GCancellable *cancellable,
GError **error);
void date_time_mechanism_call_get_hardware_clock_using_utc (
DateTimeMechanism *proxy,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean date_time_mechanism_call_get_hardware_clock_using_utc_finish (
DateTimeMechanism *proxy,
gboolean *out_is_using_utc,
GAsyncResult *res,
GError **error);
gboolean date_time_mechanism_call_get_hardware_clock_using_utc_sync (
DateTimeMechanism *proxy,
gboolean *out_is_using_utc,
GCancellable *cancellable,
GError **error);
void date_time_mechanism_call_set_hardware_clock_using_utc (
DateTimeMechanism *proxy,
gboolean is_using_utc,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean date_time_mechanism_call_set_hardware_clock_using_utc_finish (
DateTimeMechanism *proxy,
GAsyncResult *res,
GError **error);
gboolean date_time_mechanism_call_set_hardware_clock_using_utc_sync (
DateTimeMechanism *proxy,
gboolean is_using_utc,
GCancellable *cancellable,
GError **error);
void date_time_mechanism_call_get_using_ntp (
DateTimeMechanism *proxy,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean date_time_mechanism_call_get_using_ntp_finish (
DateTimeMechanism *proxy,
gboolean *out_can_use_ntp,
gboolean *out_is_using_ntp,
GAsyncResult *res,
GError **error);
gboolean date_time_mechanism_call_get_using_ntp_sync (
DateTimeMechanism *proxy,
gboolean *out_can_use_ntp,
gboolean *out_is_using_ntp,
GCancellable *cancellable,
GError **error);
void date_time_mechanism_call_set_using_ntp (
DateTimeMechanism *proxy,
gboolean is_using_ntp,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean date_time_mechanism_call_set_using_ntp_finish (
DateTimeMechanism *proxy,
GAsyncResult *res,
GError **error);
gboolean date_time_mechanism_call_set_using_ntp_sync (
DateTimeMechanism *proxy,
gboolean is_using_ntp,
GCancellable *cancellable,
GError **error);
void date_time_mechanism_call_can_set_using_ntp (
DateTimeMechanism *proxy,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean date_time_mechanism_call_can_set_using_ntp_finish (
DateTimeMechanism *proxy,
gint *out_value,
GAsyncResult *res,
GError **error);
gboolean date_time_mechanism_call_can_set_using_ntp_sync (
DateTimeMechanism *proxy,
gint *out_value,
GCancellable *cancellable,
GError **error);
/* ---- */
#define TYPE_DATE_TIME_MECHANISM_PROXY (date_time_mechanism_proxy_get_type ())
#define DATE_TIME_MECHANISM_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_DATE_TIME_MECHANISM_PROXY, DateTimeMechanismProxy))
#define DATE_TIME_MECHANISM_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TYPE_DATE_TIME_MECHANISM_PROXY, DateTimeMechanismProxyClass))
#define DATE_TIME_MECHANISM_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_DATE_TIME_MECHANISM_PROXY, DateTimeMechanismProxyClass))
#define IS_DATE_TIME_MECHANISM_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_DATE_TIME_MECHANISM_PROXY))
#define IS_DATE_TIME_MECHANISM_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_DATE_TIME_MECHANISM_PROXY))
typedef struct _DateTimeMechanismProxy DateTimeMechanismProxy;
typedef struct _DateTimeMechanismProxyClass DateTimeMechanismProxyClass;
typedef struct _DateTimeMechanismProxyPrivate DateTimeMechanismProxyPrivate;
struct _DateTimeMechanismProxy
{
GDBusProxy parent_instance;
DateTimeMechanismProxyPrivate *priv;
};
struct _DateTimeMechanismProxyClass
{
GDBusProxyClass parent_class;
};
GType date_time_mechanism_proxy_get_type (void) G_GNUC_CONST;
void date_time_mechanism_proxy_new (
GDBusConnection *connection,
GDBusProxyFlags flags,
const gchar *name,
const gchar *object_path,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
DateTimeMechanism *date_time_mechanism_proxy_new_finish (
GAsyncResult *res,
GError **error);
DateTimeMechanism *date_time_mechanism_proxy_new_sync (
GDBusConnection *connection,
GDBusProxyFlags flags,
const gchar *name,
const gchar *object_path,
GCancellable *cancellable,
GError **error);
void date_time_mechanism_proxy_new_for_bus (
GBusType bus_type,
GDBusProxyFlags flags,
const gchar *name,
const gchar *object_path,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
DateTimeMechanism *date_time_mechanism_proxy_new_for_bus_finish (
GAsyncResult *res,
GError **error);
DateTimeMechanism *date_time_mechanism_proxy_new_for_bus_sync (
GBusType bus_type,
GDBusProxyFlags flags,
const gchar *name,
const gchar *object_path,
GCancellable *cancellable,
GError **error);
/* ---- */
#define TYPE_DATE_TIME_MECHANISM_SKELETON (date_time_mechanism_skeleton_get_type ())
#define DATE_TIME_MECHANISM_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_DATE_TIME_MECHANISM_SKELETON, DateTimeMechanismSkeleton))
#define DATE_TIME_MECHANISM_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TYPE_DATE_TIME_MECHANISM_SKELETON, DateTimeMechanismSkeletonClass))
#define DATE_TIME_MECHANISM_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_DATE_TIME_MECHANISM_SKELETON, DateTimeMechanismSkeletonClass))
#define IS_DATE_TIME_MECHANISM_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_DATE_TIME_MECHANISM_SKELETON))
#define IS_DATE_TIME_MECHANISM_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_DATE_TIME_MECHANISM_SKELETON))
typedef struct _DateTimeMechanismSkeleton DateTimeMechanismSkeleton;
typedef struct _DateTimeMechanismSkeletonClass DateTimeMechanismSkeletonClass;
typedef struct _DateTimeMechanismSkeletonPrivate DateTimeMechanismSkeletonPrivate;
struct _DateTimeMechanismSkeleton
{
GDBusInterfaceSkeleton parent_instance;
DateTimeMechanismSkeletonPrivate *priv;
};
struct _DateTimeMechanismSkeletonClass
{
GDBusInterfaceSkeletonClass parent_class;
};
GType date_time_mechanism_skeleton_get_type (void) G_GNUC_CONST;
DateTimeMechanism *date_time_mechanism_skeleton_new (void);
G_END_DECLS
#endif /* __DTM_H__ */