static gchar * eog_exif_util_format_date_with_strptime (const gchar *date) { static GOnce strptime_updates_wday = G_ONCE_INIT; gchar *new_date = NULL; gchar tmp_date[DATE_BUF_SIZE]; gchar *p; gsize dlen; struct tm tm; memset (&tm, '\0', sizeof (tm)); p = strptime (date, "%Y:%m:%d %T", &tm); if (p == date + strlen (date)) { g_once (&strptime_updates_wday, _check_strptime_updates_wday, NULL); // Ensure tm.tm_wday and tm.tm_yday are set if (!GPOINTER_TO_BOOLEAN (strptime_updates_wday.retval)) _calculate_wday_yday (&tm); /* A strftime-formatted string, to display the date the image was taken. */ dlen = strftime (tmp_date, DATE_BUF_SIZE * sizeof(gchar), _("%a, %d %B %Y %X"), &tm); new_date = g_strndup (tmp_date, dlen); } return new_date; }
/* Close tab */ static gboolean really_close_tab (CeditTab *tab) { GtkWidget *toplevel; CeditWindow *window; cedit_debug (DEBUG_COMMANDS); g_return_val_if_fail (cedit_tab_get_state (tab) == CEDIT_TAB_STATE_CLOSING, FALSE); toplevel = gtk_widget_get_toplevel (GTK_WIDGET (tab)); g_return_val_if_fail (CEDIT_IS_WINDOW (toplevel), FALSE); window = CEDIT_WINDOW (toplevel); cedit_window_close_tab (window, tab); if (cedit_window_get_active_tab (window) == NULL) { gboolean is_quitting; is_quitting = GPOINTER_TO_BOOLEAN (g_object_get_data (G_OBJECT (window), CEDIT_IS_QUITTING)); if (is_quitting) gtk_widget_destroy (GTK_WIDGET (window)); } return FALSE; }
static void close_all_tabs (CeditWindow *window) { gboolean is_quitting; cedit_debug (DEBUG_COMMANDS); /* There is no document to save -> close all tabs */ cedit_window_close_all_tabs (window); is_quitting = GPOINTER_TO_BOOLEAN (g_object_get_data (G_OBJECT (window), CEDIT_IS_QUITTING)); if (is_quitting) gtk_widget_destroy (GTK_WIDGET (window)); return; }
static void save_dialog_response_cb (CeditFileChooserDialog *dialog, gint response_id, CeditWindow *window) { GFile *file; const CeditEncoding *encoding; CeditTab *tab; gpointer data; GSList *tabs_to_save_as; CeditDocumentNewlineType newline_type; cedit_debug (DEBUG_COMMANDS); tab = CEDIT_TAB (g_object_get_data (G_OBJECT (dialog), CEDIT_TAB_TO_SAVE_AS)); if (response_id != GTK_RESPONSE_OK) { gtk_widget_destroy (GTK_WIDGET (dialog)); goto save_next_tab; } file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); g_return_if_fail (file != NULL); encoding = cedit_file_chooser_dialog_get_encoding (dialog); newline_type = cedit_file_chooser_dialog_get_newline_type (dialog); gtk_widget_destroy (GTK_WIDGET (dialog)); if (tab != NULL) { CeditDocument *doc; gchar *parse_name; gchar *uri; doc = cedit_tab_get_document (tab); g_return_if_fail (CEDIT_IS_DOCUMENT (doc)); parse_name = g_file_get_parse_name (file); cedit_statusbar_flash_message (CEDIT_STATUSBAR (window->priv->statusbar), window->priv->generic_message_cid, _("Saving file '%s'\342\200\246"), parse_name); g_free (parse_name); /* let's remember the dir we navigated too, * even if the saving fails... */ _cedit_window_set_default_location (window, file); // FIXME: pass the GFile to tab when api is there uri = g_file_get_uri (file); _cedit_tab_save_as (tab, uri, encoding, newline_type); g_free (uri); } g_object_unref (file); save_next_tab: data = g_object_get_data (G_OBJECT (window), CEDIT_LIST_OF_TABS_TO_SAVE_AS); if (data == NULL) return; /* Save As the next tab of the list (we are Saving All files) */ tabs_to_save_as = (GSList *)data; g_return_if_fail (tab == CEDIT_TAB (tabs_to_save_as->data)); /* Remove the first item of the list */ tabs_to_save_as = g_slist_delete_link (tabs_to_save_as, tabs_to_save_as); g_object_set_data (G_OBJECT (window), CEDIT_LIST_OF_TABS_TO_SAVE_AS, tabs_to_save_as); if (tabs_to_save_as != NULL) { tab = CEDIT_TAB (tabs_to_save_as->data); if (GPOINTER_TO_BOOLEAN (g_object_get_data (G_OBJECT (tab), CEDIT_IS_CLOSING_TAB)) == TRUE) { g_object_set_data (G_OBJECT (tab), CEDIT_IS_CLOSING_TAB, NULL); /* Trace tab state changes */ g_signal_connect (tab, "notify::state", G_CALLBACK (tab_state_changed_while_saving), window); } cedit_window_set_active_tab (window, tab); file_save_as (tab, window); } }
static void close_confirmation_dialog_response_handler (CeditCloseConfirmationDialog *dlg, gint response_id, CeditWindow *window) { GList *selected_documents; gboolean is_closing_all; cedit_debug (DEBUG_COMMANDS); is_closing_all = GPOINTER_TO_BOOLEAN (g_object_get_data (G_OBJECT (window), CEDIT_IS_CLOSING_ALL)); gtk_widget_hide (GTK_WIDGET (dlg)); switch (response_id) { case GTK_RESPONSE_YES: /* Save and Close */ selected_documents = cedit_close_confirmation_dialog_get_selected_documents (dlg); if (selected_documents == NULL) { if (is_closing_all) { /* There is no document to save -> close all tabs */ /* We call gtk_widget_destroy before close_all_tabs * because close_all_tabs could destroy the cedit window */ gtk_widget_destroy (GTK_WIDGET (dlg)); close_all_tabs (window); return; } else g_return_if_reached (); } else { if (is_closing_all) { save_and_close_all_documents (selected_documents, window); } else { save_and_close_document (selected_documents, window); } } g_list_free (selected_documents); break; case GTK_RESPONSE_NO: /* Close without Saving */ if (is_closing_all) { /* We call gtk_widget_destroy before close_all_tabs * because close_all_tabs could destroy the cedit window */ gtk_widget_destroy (GTK_WIDGET (dlg)); close_all_tabs (window); return; } else { const GList *unsaved_documents; unsaved_documents = cedit_close_confirmation_dialog_get_unsaved_documents (dlg); g_return_if_fail (unsaved_documents->next == NULL); close_document (window, CEDIT_DOCUMENT (unsaved_documents->data)); } break; default: /* Do not close */ /* Reset is_quitting flag */ g_object_set_data (G_OBJECT (window), CEDIT_IS_QUITTING, GBOOLEAN_TO_POINTER (FALSE)); break; } gtk_widget_destroy (GTK_WIDGET (dlg)); }