Thanks! Is exactly that I wanted :)
On Tue, May 27, 2008 at 3:43 AM, muppet <[EMAIL PROTECTED]> wrote:
>
> On May 25, 2008, at 2:40 PM, anguila wrote:
>
> How can I paste the clipboard (with Control + V) over a gtktreeview widget
>> (list) ?
>> Any idea?
>>
>
> So far as i know, you create a key binding (e.g. with a menu item), and
> then in the handler for that command, pull data from the clipboard and do
> the appropriate list insertions.
>
> Instead of spamming the message with lots of boilerplate code to set up the
> accelerators and all that, here's a bunch of GtkBuilder XML. The
> interesting part is the on_paste() callback, near the end, which just grabs
> the clipboard contents as plain text, splits by whitespace, and inserts each
> item as its own line. In a real app, you'd do more appropriate parsing and
> marshaling and whatnot.
>
>
> #!/usr/bin/env perl
>
> use strict;
> use warnings;
> use Glib ':constants';
> use Gtk2 -init;
> use Gtk2::SimpleList;
>
> #
> # Gtk2::Builder is cool. Now we can express the shortcuts and menu items
> # and all that as data instead of as tedious code.
> #
> my $interface = '<interface>
> <object class="GtkUIManager" id="uimanager">
> <child>
> <object class="GtkActionGroup" id="actions">
> <child>
> <object class="GtkAction" id="file-menu">
> <property name="label">_File</property>
> </object>
> </child>
> <child>
> <object class="GtkAction" id="quit">
> <property name="stock-id">gtk-quit</property>
> <signal name="activate" handler="on_quit" />
> </object>
> </child>
> <child>
> <object class="GtkAction" id="paste">
> <property name="stock-id">gtk-paste</property>
> <signal name="activate" handler="on_paste" />
> </object>
> </child>
> <child>
> <object class="GtkAction" id="clear">
> <property name="stock-id">gtk-delete</property>
> <signal name="activate" handler="on_clear" />
> </object>
> </child>
> </object>
> </child>
> <ui>
> <menubar name="menubar">
> <menu action="file-menu">
> <menuitem action="paste"/>
> <menuitem action="clear"/>
> <menuitem action="quit"/>
> </menu>
> </menubar>
> </ui>
> </object>
> <object class="GtkWindow" id="window">
> <property name="default-width">250</property>
> <property name="default-height">500</property>
> <signal name="destroy" handler="on_window_destroy" />
> <child>
> <object class="GtkVBox" id="vbox">
> <child>
> <object class="GtkMenu" constructor="uimanager" id="menubar" />
> <packing>
> <property name="expand">false</property>
> </packing>
> </child>
> <child>
> <object class="GtkScrolledWindow" id="scroller">
> <property name="hscrollbar-policy">automatic</property>
> <property name="vscrollbar-policy">automatic</property>
> <child>
> <object class="GtkTreeView" id="treeview">
> <property name="headers-visible">false</property>
> </object>
> </child>
> </object>
> </child>
> </object>
> </child>
> </object>
> </interface>';
>
>
> my $builder = Gtk2::Builder->new ();
> $builder->add_from_string ($interface);
> $builder->connect_signals ();
>
> my $slist = Gtk2::SimpleList->new_from_treeview (
> $builder->get_object ('treeview'),
> Words => 'text',
> );
>
>
> $builder->get_object ('window')->show_all;
>
> Gtk2->main;
>
>
> sub on_window_destroy { Gtk2->main_quit }
> sub on_quit { $builder->get_object ('window')->destroy; }
>
> #
> # Here's the interesting part.
> #
> sub on_paste {
> my $clipboard = Gtk2::Clipboard->get_for_display
> ($builder->get_object ('window')->get_display (),
> Gtk2::Gdk->SELECTION_PRIMARY);
>
> my $text = $clipboard->wait_for_text ();
>
> foreach (split /\s+/, $text) {
> push @{ $slist->{data} }, $_ if length;
> }
> }
>
> sub on_clear {
> @{ $slist->{data} } = ();
> }
>
> __END__
>
>
> --
> Zella, carrying a kite in a long plastic box: It's like book!
> Yvonne, carrying the wooden kite string spool: It's like a wood!
>
>
_______________________________________________
gtk-perl-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-perl-list