From 6b2e3415c984fcacaaef3d95fface86b337abe4c Mon Sep 17 00:00:00 2001 From: Sven Neumann Date: Wed, 12 Nov 2003 16:39:11 +0000 Subject: [PATCH] fixed a problem with the value being clamped to wrong boundaries when 2003-11-12 Sven Neumann * libgimpwidgets/gimpmemsizeentry.c: fixed a problem with the value being clamped to wrong boundaries when setting the value prorammatically. --- ChangeLog | 6 +++ libgimpwidgets/gimpmemsizeentry.c | 71 +++++++++++++++---------------- 2 files changed, 41 insertions(+), 36 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6d805e91d9..c567a76577 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2003-11-12 Sven Neumann + + * libgimpwidgets/gimpmemsizeentry.c: fixed a problem with the + value being clamped to wrong boundaries when setting the value + prorammatically. + 2003-11-12 Michael Natterer * libgimpwidgets/gimpquerybox.c (create_query_box): set proper diff --git a/libgimpwidgets/gimpmemsizeentry.c b/libgimpwidgets/gimpmemsizeentry.c index b331374a33..b9849a5e4b 100644 --- a/libgimpwidgets/gimpmemsizeentry.c +++ b/libgimpwidgets/gimpmemsizeentry.c @@ -31,13 +31,13 @@ #include "libgimp/libgimp-intl.h" + enum { VALUE_CHANGED, LAST_SIGNAL }; - static void gimp_memsize_entry_class_init (GimpMemsizeEntryClass *klass); static void gimp_memsize_entry_init (GimpMemsizeEntry *entry); static void gimp_memsize_entry_finalize (GObject *object); @@ -129,6 +129,38 @@ gimp_memsize_entry_finalize (GObject *object) G_OBJECT_CLASS (parent_class)->finalize (object); } +static void +gimp_memsize_entry_adj_callback (GtkAdjustment *adj, + GimpMemsizeEntry *entry) +{ + gulong size = gtk_adjustment_get_value (adj); + + entry->value = size << entry->shift; + + g_signal_emit (entry, gimp_memsize_entry_signals[VALUE_CHANGED], 0); +} + +static void +gimp_memsize_entry_unit_callback (GtkWidget *widget, + GimpMemsizeEntry *entry) +{ + guint shift = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (widget), + "gimp-item-data")); + + if (shift != entry->shift) + { + entry->shift = shift; + + entry->adjustment->value = entry->value >> shift; + entry->adjustment->lower = entry->lower >> shift; + entry->adjustment->upper = entry->upper >> shift; + + gtk_adjustment_value_changed (entry->adjustment); + gtk_adjustment_changed (entry->adjustment); + } +} + + /** * gimp_memsize_entry_new: * @value: the initial value (in Bytes) @@ -221,6 +253,8 @@ gimp_memsize_entry_set_value (GimpMemsizeEntry *entry, if (shift != entry->shift) { entry->shift = shift; + entry->value = value; + gimp_option_menu_set_history (GTK_OPTION_MENU (entry->menu), GUINT_TO_POINTER (shift)); } @@ -243,38 +277,3 @@ gimp_memsize_entry_get_value (GimpMemsizeEntry *entry) return entry->value; } - - -static void -gimp_memsize_entry_adj_callback (GtkAdjustment *adj, - GimpMemsizeEntry *entry) -{ - gulong size; - - size = gtk_adjustment_get_value (adj); - - entry->value = size << entry->shift; - - g_signal_emit (entry, gimp_memsize_entry_signals[VALUE_CHANGED], 0); -} - -static void -gimp_memsize_entry_unit_callback (GtkWidget *widget, - GimpMemsizeEntry *entry) -{ - guint shift = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (widget), - "gimp-item-data")); - - if (shift != entry->shift) - { - entry->shift = shift; - - entry->adjustment->lower = entry->lower >> shift; - entry->adjustment->upper = entry->upper >> shift; - - gtk_adjustment_changed (entry->adjustment); - - gtk_adjustment_set_value (GTK_ADJUSTMENT (entry->adjustment), - entry->value >> shift); - } -}