static void gcrd_day_selected (GtkWidget *popup_window, GncCellRendererDate *cell) { guint year; guint month; guint day; time64 t; gchar *str; gtk_calendar_get_date (GTK_CALENDAR (cell->calendar), &year, &month, &day); t = gcrd_dmy2time ( day, month + 1, year); cell->time = t; str = gcrd_time2dmy_string (t); gnc_popup_entry_set_text ( GNC_POPUP_ENTRY (GNC_CELL_RENDERER_POPUP (cell)->editable), str); g_free (str); }
static gboolean gpw_key_press_event (GtkWidget *box, GdkEventKey *key_event) { GncPopupEntry *widget = GNC_POPUP_ENTRY (box); GdkEvent tmp_event; if (key_event->keyval == GDK_Escape) { widget->editing_canceled = TRUE; gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget)); gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE (widget)); return TRUE; } gtk_widget_grab_focus (widget->entry); /* Hackish :/ Synthesize a key press event for the entry. */ memcpy (&tmp_event, key_event, sizeof (GdkEventKey)); tmp_event.key.window = widget->entry->window; tmp_event.key.send_event = TRUE; gtk_widget_event (widget->entry, &tmp_event); return GTK_WIDGET_CLASS (parent_class)->key_press_event (GTK_WIDGET (widget), key_event); }
static void gcrd_show (GncCellRendererPopup *cell, const gchar *path, gint x1, gint y1, gint x2, gint y2) { GncCellRendererDate *date; gint year; gint month; gint day; gint index; const gchar *text; if (parent_class->show_popup) { parent_class->show_popup (cell, path, x1, y1, x2, y2); } date = GNC_CELL_RENDERER_DATE (cell); text = gnc_popup_entry_get_text (GNC_POPUP_ENTRY (GNC_CELL_RENDERER_POPUP (cell)->editable)); if (!(g_strcmp0(text, ""))) { date->time = gnc_time (NULL); gcrd_time2dmy ( date->time, &day, &month, &year); } else { date->time = gcrd_string_dmy2time (text); gcrd_time2dmy ( date->time, &day, &month, &year); } gtk_calendar_clear_marks (GTK_CALENDAR (date->calendar)); gtk_calendar_select_month (GTK_CALENDAR (date->calendar), month - 1, year); gtk_calendar_select_day (GTK_CALENDAR (date->calendar), day); gtk_calendar_mark_day (GTK_CALENDAR (date->calendar), day); }
static void gpw_start_editing (GtkCellEditable *cell_editable, GdkEvent *event) { GncPopupEntry *widget = GNC_POPUP_ENTRY (cell_editable); gtk_editable_select_region (GTK_EDITABLE (widget->entry), 0, -1); g_signal_connect (G_OBJECT (widget->entry), "activate", G_CALLBACK (gtk_cell_editable_entry_activated), widget); g_signal_connect (G_OBJECT (widget->entry), "key_press_event", G_CALLBACK (gtk_cell_editable_key_press_event), widget); g_signal_connect (G_OBJECT (widget->button), "clicked", (GCallback) gpw_arrow_clicked, widget); }