Re: Gtk2::CellRendererSpinButton-Z
- From: muppet <scott asofyet org>
- To: gtk-perl mailing list <gtk-perl-list gnome org>
- Subject: Re: Gtk2::CellRendererSpinButton-Z
- Date: Mon, 6 Mar 2006 22:32:57 -0500
On Mar 6, 2006, at 3:57 PM, zentara wrote:
Hi,
Here is a working package, for the
Gtk2::CellRendererSpinButton.
It sets initial value, updates itself, and sets
new initial value at each edit.
I use a package global to hold the current value,
and if anyone knows a better way, my ears are open. :-)
You don't need the global at all.  You pass the new value through  
the  "new value" parameter of the edited signal.  The cell renderer  
should not alter its own value --- that's for client code to do, if  
desired, in the "edited" callback.  (Definitely "if desired" --  
imagine a situation in which the SpinButton is used in a TreeView  
using a custom TreeModel, whose data actually reflects state  
elsewhere in the system.  In this situation, having the CellRenderer  
set the value directly on the model may be quite bad.  This is always  
left for the client code to perform.)
I simply removed from your new code all lines that refer to $cur_val,  
and it all works as expected.  In fact, if you press Enter in the  
spinbutton after editing, the 'edited' signal gets emitted twice ---  
once explictly from key-press-event., and again from focus-out-event  
as the cell editor is being destroyed.
The original code required you to press "Enter" to "commit" the  
value, and allowed you to press "Esc" to cancel changing it.  If you  
don't care about the distinction, then you don't even need to handle  
"Enter" specially, and can just rely on the focus-out-event.
sub SET_PROPERTY {
    my ($self, $pspec, $val) = @_;
    $self->{ $pspec->get_name  } = $val;
# set the initial editing value
 if ($pspec->get_name eq 'value') {
        $cur_val = $val;
     }
}
After you remove the global, you have a SET_PROPERTY which is merely  
a perl implementation of what the XS code already does.
--
And then mama would throw the live crawdads in the boilin' water.   
And one day I decided I'd make my own crawdads.  So I threw the  
crawdads in the pot, but without any water.  It was just like makin'  
popcorn.
   -- Ear-bending cellmate, "Raising Arizona"
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]