Re: wrote EOG plugin: exif display
Emmanuel Touzery <[email protected]>
| Newsgroups | gmane.comp.gnome.apps.Eog |
|---|---|
| Message-ID | <[email protected]> |
Hi,
> I haven't found anything critical (besides the eog_image_load() call
> that should in theory only be used from the job queue, but we do the
> same in the statusbar-date plugin and it should be okay to leave it that
> way until we find a proper solution for this). There is one oddity
> though.
>
> Switching from an image that has Exif data to an image that doesn't have
> it updates the histogram but leaves the Exif tags intact (showing "old"
> data). They should probably be cleared in that case. You can probably
> copy the eog_exif_set_label function from EogPropertiesDialog for this.
>
Great!
I fixed that and also added the date when the picture was taken, and
tooltips on some fields which could get ellipsized since the sidebar is
not so wide: date, flash info, metering mode ("Center-Weighted Average"
for instance doesn't fit).
Now there's one warning but it's in that EOG method that I copied so I
didn't look at it ;-)
In attachment the diff of the .c file since the last submittion.
The newer zip file is now at:
http://www2.arnes.si/~shvali/exif-display-1.zip
emmanuel
_______________________________________________
Eog-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/eog-list
eog-exif-display-plugin.c.diff
(text/x-patch, 4.3 KB)
--- /home/emmanuel/Desktop/exif-display/eog-exif-display-plugin.c 2009-05-24 20:13:23.000000000 +0200
+++ eog-exif-display-plugin.c 2009-06-11 21:44:46.000000000 +0200
@@ -99,15 +99,38 @@
{
}
+/* stolen from eog-properties-dialog.c*/
+static void
+eog_exif_set_label (GtkWidget *w, ExifData *exif_data, gint tag_id)
+{
+ gchar exif_buffer[512];
+ const gchar *buf_ptr;
+ gchar *label_text = NULL;
+
+ if (exif_data) {
+ buf_ptr = eog_exif_util_get_value (exif_data, tag_id,
+ exif_buffer, 512);
+
+ if (tag_id == EXIF_TAG_DATE_TIME_ORIGINAL && buf_ptr)
+ label_text = eog_exif_util_format_date (buf_ptr);
+ else
+ label_text = eog_util_make_valid_utf8 (buf_ptr);
+ }
+
+ gtk_label_set_text (GTK_LABEL (w), label_text);
+ g_free (label_text);
+}
+
static void set_exif_label (ExifData *exif_data, int exif_tag,
- GtkBuilder *gtk_builder, const gchar *gtk_builder_label_name)
+ GtkBuilder *gtk_builder, const gchar *gtk_builder_label_name, gboolean tooltip)
{
- gchar exif_value[512];
- exif_value[0] = 0;
- ExifEntry *exif_entry = exif_data_get_entry (exif_data, exif_tag);
- exif_entry_get_value (exif_entry, exif_value, sizeof(exif_value));
- gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (
- gtk_builder, gtk_builder_label_name)), exif_value);
+ GtkWidget *widget = GTK_WIDGET (gtk_builder_get_object (
+ gtk_builder, gtk_builder_label_name));
+ eog_exif_set_label (widget, exif_data, exif_tag);
+
+ if (tooltip) {
+ gtk_widget_set_tooltip_text (widget, gtk_label_get_label (GTK_LABEL (widget)));
+ }
}
/* stolen from eog-properties-dialog and slightly modified
@@ -199,36 +222,37 @@
exif_data = (ExifData *)eog_image_get_exif_info (image);
- if (exif_data) {
- byte_order = exif_data_get_byte_order (exif_data);
+ byte_order = exif_data_get_byte_order (exif_data);
- eog_exif_set_focal_length_label (GTK_WIDGET (gtk_builder_get_object (
- data->sidebar_builder, "focal_length_label")), exif_data);
+ set_exif_label (exif_data, EXIF_TAG_DATE_TIME_ORIGINAL, data->sidebar_builder, "takenon_label", TRUE);
- set_exif_label (exif_data, EXIF_TAG_EXPOSURE_BIAS_VALUE, data->sidebar_builder, "exposure_bias_label");
+ eog_exif_set_focal_length_label (GTK_WIDGET (gtk_builder_get_object (
+ data->sidebar_builder, "focal_length_label")), exif_data);
- set_exif_label (exif_data, EXIF_TAG_EXPOSURE_TIME,
- data->sidebar_builder, "exposure_time_label");
+ set_exif_label (exif_data, EXIF_TAG_EXPOSURE_BIAS_VALUE, data->sidebar_builder, "exposure_bias_label", FALSE);
- set_exif_label (exif_data, EXIF_TAG_MODEL,
- data->sidebar_builder, "camera_model_label");
+ set_exif_label (exif_data, EXIF_TAG_EXPOSURE_TIME,
+ data->sidebar_builder, "exposure_time_label", FALSE);
- set_exif_label (exif_data, EXIF_TAG_FNUMBER,
- data->sidebar_builder, "aperture_label");
+ set_exif_label (exif_data, EXIF_TAG_MODEL,
+ data->sidebar_builder, "camera_model_label", FALSE);
- set_exif_label (exif_data, EXIF_TAG_ISO_SPEED_RATINGS,
- data->sidebar_builder, "iso_label");
+ set_exif_label (exif_data, EXIF_TAG_FNUMBER,
+ data->sidebar_builder, "aperture_label", FALSE);
- set_exif_label (exif_data, EXIF_TAG_FLASH,
- data->sidebar_builder, "flash_label");
+ set_exif_label (exif_data, EXIF_TAG_ISO_SPEED_RATINGS,
+ data->sidebar_builder, "iso_label", FALSE);
- set_exif_label (exif_data, EXIF_TAG_METERING_MODE,
- data->sidebar_builder, "metering_mode_label");
+ set_exif_label (exif_data, EXIF_TAG_FLASH,
+ data->sidebar_builder, "flash_label", TRUE);
- set_exif_label (exif_data, EXIF_TAG_EXPOSURE_BIAS_VALUE, data->sidebar_builder, "exposure_bias_label");
+ set_exif_label (exif_data, EXIF_TAG_METERING_MODE,
+ data->sidebar_builder, "metering_mode_label", TRUE);
+
+ set_exif_label (exif_data, EXIF_TAG_EXPOSURE_BIAS_VALUE, data->sidebar_builder, "exposure_bias_label", FALSE);
+
+ exif_data_unref (exif_data);
- exif_data_unref (exif_data);
- }
g_object_unref (image);
}
@@ -596,7 +620,7 @@
data->statusbar_exif = gtk_statusbar_new ();
gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (data->statusbar_exif),
FALSE);
- gtk_widget_set_size_request (data->statusbar_exif, 250, 10);
+ gtk_widget_set_size_request (data->statusbar_exif, 280, 10);
gtk_box_pack_end (GTK_BOX (statusbar),
data->statusbar_exif,
FALSE, FALSE, 0);