[goffice] Image Save: fix problem with auto-format-by-extension
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [goffice] Image Save: fix problem with auto-format-by-extension
- Date: Mon, 20 Apr 2020 00:57:24 +0000 (UTC)
commit 064d643268352b946984750c638dba697550a2e2
Author: Morten Welinder <terra gnome org>
Date: Sun Apr 19 20:56:24 2020 -0400
Image Save: fix problem with auto-format-by-extension
ChangeLog | 5 +++++
goffice/gtk/goffice-gtk.c | 43 ++++++++++++++++++++++++++++++-------------
2 files changed, 35 insertions(+), 13 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 0381c2ba..8788854e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2020-04-19 Morten Welinder <terra gnome org>
+
+ * goffice/gtk/goffice-gtk.c (cb_format_combo_changed): Take
+ auto-by-extension into account.
+
2020-04-09 Jean Brefort <jean brefort normalesup org>
* goffice/graph/gog-series.c (gog_series_dataset_dim_changed): check
diff --git a/goffice/gtk/goffice-gtk.c b/goffice/gtk/goffice-gtk.c
index dc6f80c5..37b7a7ee 100644
--- a/goffice/gtk/goffice-gtk.c
+++ b/goffice/gtk/goffice-gtk.c
@@ -955,6 +955,11 @@ typedef struct {
double resolution;
gboolean is_expanded;
GOImageFormat format;
+
+ // Not saved, but used by handlers
+ gboolean by_ext;
+ GSList *supported_formats;
+ GtkWidget *resolution_widget;
} SaveInfoState;
static void
@@ -965,14 +970,24 @@ save_info_state_free (SaveInfoState *state)
}
static void
-cb_format_combo_changed (GtkComboBox *combo, GtkWidget *expander)
+cb_format_combo_changed (GtkComboBox *combo, SaveInfoState *state)
{
GOImageFormatInfo const *format_info;
+ gboolean sensitive;
+ int i;
- format_info = go_image_get_format_info (gtk_combo_box_get_active (combo));
- gtk_widget_set_sensitive (expander,
- format_info != NULL &&
- format_info->is_dpi_useful);
+ i = gtk_combo_box_get_active (combo);
+ if (state->by_ext && i == 0)
+ sensitive = TRUE;
+ else {
+ GOImageFormat fmt = GPOINTER_TO_UINT
+ (g_slist_nth_data (state->supported_formats,
+ i - state->by_ext));
+ GOImageFormatInfo const *format_info =
+ go_image_get_format_info (fmt);
+ sensitive = format_info && format_info->is_dpi_useful;
+ }
+ gtk_widget_set_sensitive (state->resolution_widget, sensitive);
}
/**
@@ -1003,7 +1018,6 @@ go_gui_get_image_save_info (GtkWindow *toplevel, GSList *supported_formats,
SaveInfoState *state;
char const *key = "go_gui_get_image_save_info";
char *uri = NULL;
- gboolean by_ext = FALSE;
state = g_object_get_data (G_OBJECT (toplevel), key);
if (state == NULL) {
@@ -1016,6 +1030,8 @@ go_gui_get_image_save_info (GtkWindow *toplevel, GSList *supported_formats,
g_object_set_data_full (G_OBJECT (toplevel), key,
state, (GDestroyNotify) save_info_state_free);
}
+ state->supported_formats = supported_formats;
+ state->by_ext = FALSE;
g_object_set (G_OBJECT (fsel), "title", _("Save as"), NULL);
@@ -1024,13 +1040,15 @@ go_gui_get_image_save_info (GtkWindow *toplevel, GSList *supported_formats,
if (gui != NULL) {
GtkWidget *widget;
+ state->resolution_widget = resolution_grid = go_gtk_builder_get_widget (gui,
"resolution-grid");
+
/* Format selection UI */
if (supported_formats != NULL && ret_format != NULL) {
int i;
GSList *l;
format_combo = go_gtk_builder_combo_box_init_text (gui, "format_combo");
- by_ext = TRUE;
+ state->by_ext = TRUE;
go_gtk_combo_box_append_text (format_combo, _("Auto by extension"));
for (l = supported_formats, i = 0; l != NULL; l = l->next, i++) {
@@ -1064,11 +1082,10 @@ go_gui_get_image_save_info (GtkWindow *toplevel, GSList *supported_formats,
gtk_widget_hide (expander);
if (resolution != NULL && supported_formats != NULL && ret_format != NULL) {
- resolution_grid = go_gtk_builder_get_widget (gui, "resolution-grid");
-
- cb_format_combo_changed (format_combo, resolution_grid);
+ cb_format_combo_changed (format_combo, state);
g_signal_connect (GTK_WIDGET (format_combo), "changed",
- G_CALLBACK (cb_format_combo_changed), resolution_grid);
+ G_CALLBACK (cb_format_combo_changed),
+ state);
}
g_object_unref (gui);
@@ -1091,7 +1108,7 @@ go_gui_get_image_save_info (GtkWindow *toplevel, GSList *supported_formats,
format = GO_IMAGE_FORMAT_UNKNOWN;
if (index < 0)
; // That's it.
- else if (by_ext && index == 0) {
+ else if (state->by_ext && index == 0) {
GSList *l;
for (l = supported_formats; l; l = l->next) {
@@ -1104,7 +1121,7 @@ go_gui_get_image_save_info (GtkWindow *toplevel, GSList *supported_formats,
goto loop;
} else {
format = GPOINTER_TO_UINT (g_slist_nth_data
- (supported_formats, index - by_ext));
+ (supported_formats, index - state->by_ext));
format_info = go_image_get_format_info (format);
if (!go_url_check_extension (uri, format_info->ext, &new_uri) &&
!go_gtk_query_yes_no (GTK_WINDOW (fsel), TRUE,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]