http://qs321.pair.com?node_id=1171530


in reply to Referring to Gtk3::EntryBuffer data

And now $gtktextentryish is unfazed that its data value has changed underneath it.

Hi,

What value does $gtktextentryish display, does it display "Some value" or something else?

http://cpansearch.perl.org/src/XAOC/Gtk2-1.2498/t/GtkEntryBuffer.t doesn't show Gtk2::EntryBuffer->new taking a reference, and neither does https://github.com/Programmica/perl-gtk3-examples/blob/master/entrybuffer.pl

What docs are you reading? I can't find any perl specific docs to suggest you can pass a reference

  • Comment on Re: Referring to Gtk3::EntryBuffer data

Replies are listed 'Best First'.
Re^2: Referring to Gtk3::EntryBuffer data
by rir (Vicar) on Sep 11, 2016 at 00:34 UTC

    Nonny, sorry I was unclear.

    You are right so far as I know (whether Gtk2 or Gtk3). I am just starting with Gtk3.

    I would like to find an editable text entry widget, which can be passed a scalar ref at creation and can have the referenced value be changed by actions invoked by code outside the widget. Which is to say, outside changing when the user's cursor is in the widget need not be defined.

    It occurs to me that I may be asking a lot of code that is wrapping C/C++.

    rir

      :) see perltie, and usage idease see Tk::Trace/Tie::Watch

      So you write something like this , tested in gtk2

      #!/usr/bin/perl -- use strict; use warnings; #~ use Gtk3 '-init'; #~ my $windowclass = 'Gtk3::Window'; #~ my $entryclass = 'Gtk3::Entry'; #~ my $quitclass = 'Gtk3'; #~ my $box = Gtk3::Box->new('vertical', 5); #~ my $bufferclass = 'Gtk3::EntryBuffer'; use Gtk2 '-init'; my $windowclass = 'Gtk2::Window'; my $entryclass = 'Gtk2::Entry'; my $quitclass = 'Gtk2'; my $bufferclass = 'Gtk2::EntryBuffer'; my $box = Gtk2::VBox->new; ## my $bufferentry = $bufferclass->new; my $uff = $bufferclass->new; tie my $foo, 'TraceBuffer', $uff, "foo text"; my $bar = TraceBuffer->new( $bufferentry, "bar text" ); $foo = "sha nana "; $bar->STORE("tra la la "); my $window = $windowclass->new(); $window->set_title('EntryBuffer'); $window->signal_connect('destroy' => sub {$quitclass->main_quit}); $window->add($box); my $ent = $entryclass->new(); $ent->set_buffer($uff); $box->add($ent); my $entry = $entryclass->new(); $entry->set_buffer($bufferentry); $box->add($entry); $window->show_all(); $quitclass->main(); BEGIN { package TraceBuffer; sub new { my $pkg = shift; $pkg->TIESCALAR(@_); } sub TIESCALAR { my $class = shift; my $buffer = shift || die "USELESS WITHOUT BUFFER!\n"; my $text = shift || ''; $buffer->set_text( $text ); return bless [ $buffer, $text ] => $class; } sub FETCH { #~ return $_[0]->[0]->get_text(); return $_[0]->[1]; } sub STORE { $_[0]->[1] = $_[1]; $_[0]->[0]->set_text( $_[1] ); } sub DESTROY { undef @{$_[0]}; } $INC{'TraceBuffer.pm'} = __FILE__; 1;; }

      Its only half of it, if user updates the entry, the "tracebuffer" doesn't know about it ... you'd have to involve https://metacpan.org/pod/Glib::Object::Subclass for that portion