eog r4299 - in trunk: . src



Author: friemann
Date: Wed Jan  9 11:03:09 2008
New Revision: 4299
URL: http://svn.gnome.org/viewvc/eog?rev=4299&view=rev

Log:
2008-01-09  Felix Riemann  <friemann svn gnome org>

	* configure.ac:
	* src/eog-print-image-setup.c: (get_scale_to_px_factor),
	(on_scale_changed), (size_changed), (set_scale_unit),
	(on_unit_changed), (set_initial_values),
	(eog_print_image_setup_init):
	Use the locale data to determine if the metric or the imperial system
	should be the default for the print setup tab. Fixes bug #504093.


Modified:
   trunk/ChangeLog
   trunk/configure.ac
   trunk/src/eog-print-image-setup.c

Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac	(original)
+++ trunk/configure.ac	Wed Jan  9 11:03:09 2008
@@ -38,6 +38,20 @@
 
 AC_CHECK_FUNCS(strptime)
 
+# ****************************************************************
+# Support for nl_langinfo (_NL_MEASUREMENT_MEASUREMENT) (optional)
+# ****************************************************************
+AC_MSG_CHECKING([for _NL_MEASUREMENT_MEASUREMENT])
+AC_TRY_LINK([#include <langinfo.h>], [
+char c;
+c = *((unsigned char *)  nl_langinfo(_NL_MEASUREMENT_MEASUREMENT));
+], have_langinfo_measurement=yes, have_langinfo_measurement=no)
+AC_MSG_RESULT($have_langinfo_measurement)
+if test "$have_langinfo_measurement" = "yes"; then
+  AC_DEFINE([HAVE__NL_MEASUREMENT_MEASUREMENT], [1],
+            [Define if _NL_MEASUREMENT_MEASUREMENT is available])
+fi
+
 # ***********
 # Translation 
 # ***********

Modified: trunk/src/eog-print-image-setup.c
==============================================================================
--- trunk/src/eog-print-image-setup.c	(original)
+++ trunk/src/eog-print-image-setup.c	Wed Jan  9 11:03:09 2008
@@ -19,10 +19,19 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <gtk/gtk.h>
 #include <gtk/gtkprintunixdialog.h>
 #include <glib/gi18n.h>
 #include <glib/gprintf.h>
+
+#ifdef HAVE__NL_MEASUREMENT_MEASUREMENT
+#include <langinfo.h>
+#endif
+
 #include "eog-print-image-setup.h"
 #include "eog-print-preview.h"
 
@@ -132,6 +141,25 @@
 }
 
 static gdouble
+get_scale_to_px_factor (EogPrintImageSetup *setup)
+{
+	gdouble factor = 0.;
+
+	switch (setup->priv->current_unit) {
+	case GTK_UNIT_MM: 
+		factor = FACTOR_MM_TO_PIXEL;
+		break;
+	case GTK_UNIT_INCH:
+		factor = FACTOR_INCH_TO_PIXEL;
+		break;
+	default:
+		g_assert_not_reached ();
+	}
+
+	return factor;
+}
+
+static gdouble
 get_max_percentage (EogPrintImageSetup *setup)
 {
 	EogPrintImageSetupPrivate *priv = setup->priv;
@@ -262,16 +290,7 @@
 	image = priv->image;
 	eog_image_get_size (image, &pix_width, &pix_height);
 
-	switch (priv->current_unit) {
-	case GTK_UNIT_MM: 
-		factor = FACTOR_MM_TO_PIXEL;
-		break;
-	case GTK_UNIT_INCH:
-		factor = FACTOR_INCH_TO_PIXEL;
-		break;
-	default:
-		g_assert_not_reached ();
-	}
+	factor = get_scale_to_px_factor (setup);
 
 	width = (gdouble)pix_width/factor;
 	height = (gdouble)pix_height/factor;
@@ -437,16 +456,7 @@
 
 	eog_image_get_size (priv->image, &pix_width, &pix_height);
 
-	switch (priv->current_unit) {
-	case GTK_UNIT_MM:
-		factor = FACTOR_MM_TO_PIXEL;
-		break;
-	case GTK_UNIT_INCH:
-		factor = FACTOR_INCH_TO_PIXEL;
-		break;
-	default:
-		g_assert_not_reached ();
-	}
+	factor = get_scale_to_px_factor (setup);
 	
 	switch (change) {
 	case CHANGE_HORIZ:
@@ -543,22 +553,25 @@
 }
 
 static void
-on_unit_changed (GtkComboBox *combobox, 
-		 gpointer user_data)
+set_scale_unit (EogPrintImageSetup *setup,
+		GtkUnit unit)
 {
-	EogPrintImageSetupPrivate *priv = EOG_PRINT_IMAGE_SETUP (user_data)->priv;
+	EogPrintImageSetupPrivate *priv = setup->priv;
 	gdouble factor;
 	gdouble step, page;
 	gint digits;
 
-	switch (priv->current_unit) {
-	case GTK_UNIT_INCH:
+	if (G_UNLIKELY (priv->current_unit == unit))
+		return;
+
+	switch (unit) {
+	case GTK_UNIT_MM:
 		factor = FACTOR_INCH_TO_MM;
 		digits = 0;
 		step = 1;
 		page = 10;
 		break;
-	case GTK_UNIT_MM:
+	case GTK_UNIT_INCH:
 		factor = FACTOR_MM_TO_INCH;
 		digits = 2;
 		step = 0.01;
@@ -568,7 +581,7 @@
 		g_assert_not_reached ();
 	}
 	
- 	block_handlers (EOG_PRINT_IMAGE_SETUP (user_data));
+ 	block_handlers (setup);
 
 	change_unit (GTK_SPIN_BUTTON (priv->width), factor, digits, step, page);
 	change_unit (GTK_SPIN_BUTTON (priv->height), factor, digits, step, page);
@@ -577,18 +590,29 @@
 	change_unit (GTK_SPIN_BUTTON (priv->top), factor, digits, step, page);
 	change_unit (GTK_SPIN_BUTTON (priv->bottom), factor, digits, step, page);
 
- 	unblock_handlers (EOG_PRINT_IMAGE_SETUP (user_data));
-	
+ 	unblock_handlers (setup);
+
+	priv->current_unit = unit;	
+}
+
+static void
+on_unit_changed (GtkComboBox *combobox, 
+		 gpointer user_data)
+{
+	GtkUnit unit = GTK_UNIT_INCH;
+
 	switch (gtk_combo_box_get_active (combobox)) {
 	case UNIT_INCH:
-		priv->current_unit = GTK_UNIT_INCH;
+		unit = GTK_UNIT_INCH;
 		break;
 	case UNIT_MM:
-		priv->current_unit = GTK_UNIT_MM;
+		unit = GTK_UNIT_MM;
 		break;
 	default:
 		g_assert_not_reached ();
 	}
+
+	set_scale_unit (EOG_PRINT_IMAGE_SETUP (user_data), unit);
 }
 
 static void
@@ -722,6 +746,7 @@
 	EogImage *image;
 	gdouble page_width, page_height;
 	gint pix_width, pix_height;
+	gdouble factor;
 	gdouble width, height;
 	gdouble max_perc;
 
@@ -729,9 +754,11 @@
 	page_setup = priv->page_setup;
 	image = priv->image;
 	
+	factor = get_scale_to_px_factor (setup);
+
 	eog_image_get_size (image, &pix_width, &pix_height);
-	width = (gdouble)pix_width/FACTOR_INCH_TO_PIXEL;
-	height = (gdouble)pix_height/FACTOR_INCH_TO_PIXEL;
+	width = (gdouble)pix_width/factor;
+	height = (gdouble)pix_height/factor;
 
 	max_perc = get_max_percentage (setup);
 
@@ -743,7 +770,8 @@
 	gtk_range_set_value (GTK_RANGE (priv->scaling), 100*max_perc);
 
 	eog_print_preview_set_scale (EOG_PRINT_PREVIEW (priv->preview), max_perc);
-	
+	gtk_spin_button_set_range (GTK_SPIN_BUTTON (priv->width), 0, width);
+	gtk_spin_button_set_range (GTK_SPIN_BUTTON (priv->height), 0, height);
 	gtk_spin_button_set_value (GTK_SPIN_BUTTON (priv->width), width);
 	gtk_spin_button_set_value (GTK_SPIN_BUTTON (priv->height), height);
 	
@@ -762,8 +790,7 @@
 
 	update_image_pos_ranges (setup, page_width, page_height, width, height);
 
-	gtk_spin_button_set_range (GTK_SPIN_BUTTON (priv->width), 0, width);
-	gtk_spin_button_set_range (GTK_SPIN_BUTTON (priv->height), 0, height);
+
 }
 
 static void 
@@ -828,6 +855,10 @@
 	GtkWidget *combobox;
 	EogPrintImageSetupPrivate *priv;
 
+#ifdef HAVE__NL_MEASUREMENT_MEASUREMENT
+	gchar *locale_scale = NULL;
+#endif
+
 	priv = setup->priv = EOG_PRINT_IMAGE_SETUP_GET_PRIVATE (setup);
 
 	priv->image = NULL;
@@ -903,8 +934,18 @@
 				   _("Millimeters"));
 	gtk_combo_box_insert_text (GTK_COMBO_BOX (combobox), UNIT_INCH,
 				   _("Inches"));
-	gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), UNIT_INCH);
-	priv->current_unit = GTK_UNIT_INCH;
+
+#ifdef HAVE__NL_MEASUREMENT_MEASUREMENT
+	locale_scale = nl_langinfo (_NL_MEASUREMENT_MEASUREMENT);
+	if (locale_scale && locale_scale[0] == 2) {
+		gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), UNIT_INCH);
+		set_scale_unit (setup, GTK_UNIT_INCH);
+	} else
+#endif
+	{
+		gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), UNIT_MM);
+		set_scale_unit (setup, GTK_UNIT_MM);
+	}
 
 	gtk_table_attach (GTK_TABLE (table), label, 
 			  0, 1, 2, 3, GTK_FILL, GTK_FILL, 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]