date-selector: set date on GtkEntry::focus-out-event
This commit is contained in:
committed by
Erick Pérez Castellanos
parent
26df8ec8d8
commit
55b4002e6b
@@ -21,6 +21,7 @@
|
||||
|
||||
#include <locale.h>
|
||||
#include <langinfo.h>
|
||||
#include <stdlib.h>
|
||||
#include <glib/gi18n.h>
|
||||
|
||||
enum
|
||||
@@ -65,6 +66,10 @@ static guint signals[NUM_SIGNALS] = { 0, };
|
||||
static void calendar_day_selected (GtkCalendar *calendar,
|
||||
gpointer user_data);
|
||||
|
||||
static void date_entry_focus_out (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
gpointer user_data);
|
||||
|
||||
static void text_inserted (GtkEditable *editable,
|
||||
gchar *new_text,
|
||||
gint new_text_length,
|
||||
@@ -99,6 +104,51 @@ calendar_day_selected (GtkCalendar *calendar,
|
||||
user_data);
|
||||
}
|
||||
|
||||
static void
|
||||
date_entry_focus_out (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
gpointer user_data)
|
||||
{
|
||||
GcalDateSelectorPrivate *priv;
|
||||
gint day, month, year;
|
||||
|
||||
priv = gcal_date_selector_get_instance_private (GCAL_DATE_SELECTOR (user_data));
|
||||
|
||||
day = strtol (gtk_entry_get_text (GTK_ENTRY (priv->entries[DAY])), NULL, 0);
|
||||
month = strtol (gtk_entry_get_text (GTK_ENTRY (priv->entries[MONTH])), NULL, 0);
|
||||
year = strtol (gtk_entry_get_text (GTK_ENTRY (priv->entries[YEAR])), NULL, 0);
|
||||
|
||||
/* Fix year if neccessary */
|
||||
if (!priv->have_long_year)
|
||||
{
|
||||
GDateTime *dt;
|
||||
gint suffix;
|
||||
|
||||
dt = g_date_time_new_now_local ();
|
||||
suffix = g_date_time_get_year (dt) % 100;
|
||||
|
||||
/* last century */
|
||||
if (year > suffix)
|
||||
year += g_date_time_get_year (dt) - suffix - 100;
|
||||
|
||||
/* this century */
|
||||
else
|
||||
year += g_date_time_get_year (dt) - suffix;
|
||||
|
||||
g_date_time_unref (dt);
|
||||
}
|
||||
|
||||
/* select the date */
|
||||
g_signal_handlers_block_by_func (priv->calendar,
|
||||
calendar_day_selected,
|
||||
user_data);
|
||||
gcal_date_selector_set_date (GCAL_DATE_SELECTOR (user_data), day, month, year);
|
||||
|
||||
g_signal_handlers_unblock_by_func (priv->calendar,
|
||||
calendar_day_selected,
|
||||
user_data);
|
||||
}
|
||||
|
||||
static void
|
||||
text_inserted (GtkEditable *editable,
|
||||
gchar *new_text,
|
||||
@@ -319,6 +369,9 @@ gcal_date_selector_constructed (GObject *object)
|
||||
g_signal_connect (priv->entries[YEAR], "insert-text", G_CALLBACK (text_inserted), object);
|
||||
|
||||
g_signal_connect (priv->calendar, "day-selected", G_CALLBACK (calendar_day_selected), object);
|
||||
g_signal_connect (priv->entries[DAY], "focus-out-event", G_CALLBACK (date_entry_focus_out), object);
|
||||
g_signal_connect (priv->entries[MONTH], "focus-out-event", G_CALLBACK (date_entry_focus_out), object);
|
||||
g_signal_connect (priv->entries[YEAR], "focus-out-event", G_CALLBACK (date_entry_focus_out), object);
|
||||
|
||||
g_object_unref (builder);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user