datetime: Set the correct date and time in the UI
Set the current date in the calendar and keep the current time label updated.
This commit is contained in:
parent
2208f28618
commit
3c39f562c6
1 changed files with 47 additions and 1 deletions
|
@ -31,6 +31,8 @@ G_DEFINE_DYNAMIC_TYPE (CcDateTimePanel, cc_date_time_panel, CC_TYPE_PANEL)
|
||||||
struct _CcDateTimePanelPrivate
|
struct _CcDateTimePanelPrivate
|
||||||
{
|
{
|
||||||
GtkBuilder *builder;
|
GtkBuilder *builder;
|
||||||
|
|
||||||
|
guint timeout;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,6 +78,14 @@ cc_date_time_panel_dispose (GObject *object)
|
||||||
static void
|
static void
|
||||||
cc_date_time_panel_finalize (GObject *object)
|
cc_date_time_panel_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
|
CcDateTimePanelPrivate *priv = CC_DATE_TIME_PANEL (object)->priv;
|
||||||
|
|
||||||
|
if (priv->timeout)
|
||||||
|
{
|
||||||
|
g_source_remove (priv->timeout);
|
||||||
|
priv->timeout = 0;
|
||||||
|
}
|
||||||
|
|
||||||
G_OBJECT_CLASS (cc_date_time_panel_parent_class)->finalize (object);
|
G_OBJECT_CLASS (cc_date_time_panel_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,8 +105,33 @@ cc_date_time_panel_class_init (CcDateTimePanelClass *klass)
|
||||||
static void
|
static void
|
||||||
cc_date_time_panel_class_finalize (CcDateTimePanelClass *klass)
|
cc_date_time_panel_class_finalize (CcDateTimePanelClass *klass)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
update_time (CcDateTimePanel *self)
|
||||||
|
{
|
||||||
|
CcDateTimePanelPrivate *priv = self->priv;
|
||||||
|
GTimeVal timeval;
|
||||||
|
GtkWidget *widget;
|
||||||
|
gchar label[32];
|
||||||
|
time_t t;
|
||||||
|
|
||||||
|
g_get_current_time (&timeval);
|
||||||
|
|
||||||
|
priv->timeout = gdk_threads_add_timeout (1000 - timeval.tv_usec / 1000,
|
||||||
|
(GSourceFunc) update_time, self);
|
||||||
|
|
||||||
|
widget = (GtkWidget*) gtk_builder_get_object (priv->builder,
|
||||||
|
"label_current_time");
|
||||||
|
t = time (NULL);
|
||||||
|
strftime (label, 32, "%X", localtime (&t));
|
||||||
|
gtk_label_set_text (GTK_LABEL (widget), label);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cc_date_time_panel_init (CcDateTimePanel *self)
|
cc_date_time_panel_init (CcDateTimePanel *self)
|
||||||
{
|
{
|
||||||
|
@ -104,6 +139,7 @@ cc_date_time_panel_init (CcDateTimePanel *self)
|
||||||
gchar *objects[] = { "datetime-panel", NULL };
|
gchar *objects[] = { "datetime-panel", NULL };
|
||||||
GtkWidget *widget;
|
GtkWidget *widget;
|
||||||
GError *err = NULL;
|
GError *err = NULL;
|
||||||
|
GDate *date;
|
||||||
|
|
||||||
priv = self->priv = DATE_TIME_PANEL_PRIVATE (self);
|
priv = self->priv = DATE_TIME_PANEL_PRIVATE (self);
|
||||||
|
|
||||||
|
@ -127,7 +163,17 @@ cc_date_time_panel_init (CcDateTimePanel *self)
|
||||||
widget);
|
widget);
|
||||||
|
|
||||||
gtk_container_add (GTK_CONTAINER (self),
|
gtk_container_add (GTK_CONTAINER (self),
|
||||||
GTK_WIDGET (gtk_builder_get_object (priv->builder, "datetime-panel")));
|
GTK_WIDGET (gtk_builder_get_object (priv->builder,
|
||||||
|
"datetime-panel")));
|
||||||
|
|
||||||
|
widget = (GtkWidget *) gtk_builder_get_object (priv->builder, "calendar");
|
||||||
|
date = g_date_new ();
|
||||||
|
g_date_set_time_t (date, time (NULL));
|
||||||
|
gtk_calendar_select_day (GTK_CALENDAR (widget), g_date_get_day (date));
|
||||||
|
gtk_calendar_select_month (GTK_CALENDAR (widget), g_date_get_month (date) -1,
|
||||||
|
g_date_get_year (date));
|
||||||
|
|
||||||
|
update_time (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue