static int text_field_cmp (const char *s1, const char *s2) { if ((s1 != NULL) && (*s1 == 0)) s1 = NULL; if ((s2 != NULL) && (*s2 == 0)) s2 = NULL; return strcmp_null_tolerant (s1, s2); }
static char * get_full_uri (DlgNewData *data) { char *full_uri = NULL; char *uri; const char *filename; int idx; uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (data->dialog)); if ((uri == NULL) || (*uri == 0)) return NULL; filename = file_name_from_path (uri); if ((filename == NULL) || (*filename == 0)) { g_free (uri); return NULL; } idx = egg_file_format_chooser_get_format (EGG_FILE_FORMAT_CHOOSER (data->format_chooser), uri); if (idx > 0) { const char *uri_ext; char *default_ext; uri_ext = get_archive_filename_extension (uri); default_ext = mime_type_desc[data->supported_types[idx-1]].default_ext; if (strcmp_null_tolerant (uri_ext, default_ext) != 0) { full_uri = g_strconcat (uri, default_ext, NULL); g_free (uri); } } if (full_uri == NULL) full_uri = uri; return full_uri; }
void dlg_comment_update (GtkWidget *dlg) { DialogData *data; CommentData *cdata; GList *scan; char *first_image; g_return_if_fail (dlg != NULL); data = g_object_get_data (G_OBJECT (dlg), "dialog_data"); g_return_if_fail (data != NULL); /**/ free_dialog_data (data); data->file_list = gth_window_get_file_list_selection (data->window); if (data->file_list == NULL) { gtk_widget_set_sensitive (data->ok_button, FALSE); gtk_widget_set_sensitive (data->comment_main_box, FALSE); return; } else gtk_widget_set_sensitive (data->comment_main_box, TRUE); /* Set widgets data. */ gtk_option_menu_set_history (GTK_OPTION_MENU (data->date_optionmenu), NO_DATE); gtk_text_buffer_set_text (data->note_text_buffer, "", -1); gtk_entry_set_text (GTK_ENTRY (data->place_entry), ""); data->several_images = g_list_length (data->file_list) > 1; if (data->several_images) { gtk_widget_set_sensitive (data->save_changed_checkbutton, TRUE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->save_changed_checkbutton), TRUE); } else { gtk_widget_set_sensitive (data->save_changed_checkbutton, FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->save_changed_checkbutton), FALSE); } /* Does at least one image have exif data? */ data->have_exif_data = FALSE; for (scan = data->file_list; scan; scan = scan->next) if (have_exif_time (scan->data)) { data->have_exif_data = TRUE; break; } first_image = data->file_list->data; data->original_cdata = cdata = comments_load_comment (first_image, TRUE); if (cdata != NULL) { comment_data_free_keywords (cdata); /* NULL-ify a field if it is not the same in all comments. */ for (scan = data->file_list->next; scan; scan = scan->next) { CommentData *scan_cdata; scan_cdata = comments_load_comment (scan->data, TRUE); /* If there is no comment then all fields must be * considered to differ. */ if ((scan_cdata == NULL) || strcmp_null_tolerant (cdata->place, scan_cdata->place) != 0) { g_free (cdata->place); cdata->place = NULL; } if ((scan_cdata == NULL) || cdata->time != scan_cdata->time) cdata->time = 0; if ((scan_cdata == NULL) || strcmp_null_tolerant (cdata->comment, scan_cdata->comment) != 0) { g_free (cdata->comment); cdata->comment = NULL; } if (scan_cdata == NULL) break; comment_data_free (scan_cdata); } } gtk_widget_set_sensitive (get_exif_date_option_item (data), data->have_exif_data); gtk_widget_set_sensitive (data->date_dateedit, FALSE); if (cdata != NULL) { if (cdata->comment != NULL) { GtkTextIter iter; gtk_text_buffer_set_text (data->note_text_buffer, cdata->comment, strlen (cdata->comment)); gtk_text_buffer_get_iter_at_line (data->note_text_buffer, &iter, 0); gtk_text_buffer_place_cursor (data->note_text_buffer, &iter); } /**/ if (cdata->place != NULL) gtk_entry_set_text (GTK_ENTRY (data->place_entry), cdata->place); /**/ if (cdata->time > 0) { gtk_option_menu_set_history (GTK_OPTION_MENU (data->date_optionmenu), FOLLOWING_DATE); gnome_date_edit_set_time (GNOME_DATE_EDIT (data->date_dateedit), cdata->time); gtk_widget_set_sensitive (data->date_dateedit, TRUE); } else { if (data->several_images) gtk_option_menu_set_history (GTK_OPTION_MENU (data->date_optionmenu), NO_CHANGE); else gtk_option_menu_set_history (GTK_OPTION_MENU (data->date_optionmenu), NO_DATE); gnome_date_edit_set_time (GNOME_DATE_EDIT (data->date_dateedit), get_file_ctime (first_image)); } } else { time_t ctime = get_file_ctime (first_image); gtk_option_menu_set_history (GTK_OPTION_MENU (data->date_optionmenu), NO_DATE); gnome_date_edit_set_time (GNOME_DATE_EDIT (data->date_dateedit), ctime); } }