in reply to Tk::Clipboard and the X Windows Clipboard

Oh, and I should mention that I tried it using the $widget->SelectionOption() methods as well:

#!/usr/bin/perl use warnings; use strict; use Tk; my $mw = MainWindow->new(); $mw->SelectionHandle( -selection => 'CLIPBOARD', sub { return 'clip' } + ); $mw->SelectionOwn( -selection => 'CLIPBOARD' );

It gives the same error (in xclipboard). :-( Whereas the following works just fine:

#!/usr/bin/perl use warnings; use strict; use Tk; my $mw = MainWindow->new(); $mw->SelectionHandle( -selection => 'PRIMARY', sub { return 'clip' } ) +; $mw->SelectionOwn( -selection => 'PRIMARY' );

Update: Hrm. Upon further testing, I find that the 'PRIMARY' selection was not actually working between applications. It owns the selection ok (ie, whatever was selected before, is no longer), and I can insert the selection properly within my own application but it does not show up in other applications.

Upon further further testing, I find that it all works just fine if I have a MainLoop in my program. Now all I have to do is find a way to get it to execute a single loop and then exit. I thought there was an easy way to do that but I cannot seem to find it. I can always resort to some chicanery involving $mw->after() ...

Does anyone know a function that will execute a single Perl/Tk event loop, and then return?

bbfu
Seasons don't fear The Reaper.
Nor do the wind, the sun, and the rain.
We can be like they are.

  • Comment on (bbfu) (neither $widget-SelectionHandle()) Re: Tk::Clipboard and the X Windows Clipboard
  • Select or Download Code

Replies are listed 'Best First'.
Re: (bbfu) (neither $widget-SelectionHandle()) Re: Tk::Clipboard and the X Windows Clipboard
by traveler (Parson) on Oct 29, 2001 at 22:08 UTC
    DoOneEvent() processes one event. See this article. Most Perl/Tk programs have a MainLoop, though, so the GUI can run.

    HTH, --traveler

      Thanks. That article is exactly what I was looking for. Actually, though, for this particular application, I don't want a GUI. I'm creating a command-line utility to manipulate the X windows selection/clipboard. Tk was just the only thing I could see right off that let me do that.

      Thanks for your help. :-)

      bbfu
      Seasons don't fear The Reaper.
      Nor do the wind, the sun, and the rain.
      We can be like they are.

      Blah. I can't get it to work with DoOneEvent(), $mw->update(), or even $mw->idletasks(). :-(

      The problem, as far as I can tell, is that it is not based on how many events are executed (though they need to be executed, otherwise the callback is never called) but, rather, on how long the program remains active. With the following code, it almost never works with $ARGV[0] = 1, sometimes works with 2, pretty much always works with 3, and is (presumably) guaranteed with 5 and above.

      #!/usr/bin/perl use warnings; use strict; use Tk; my $mw = MainWindow->new(); $mw->withdraw(); $mw->clipboardClear(); $mw->clipboardAppend('clip'); $mw->after($ARGV[0], [$mw, 'destroy']); MainLoop;

      I don't suppose you have any ideas on how I could go about this in a way that doesn't seem so... well, kludgey?

      bbfu
      Seasons don't fear The Reaper.
      Nor do the wind, the sun, and the rain.
      We can be like they are.

        Only thing I can think is to find examples.

        Here I give some I found which seem to have something somewhat related...

        Sorry, have to catch a train now. :)

        I had three ideas: 1) try the Xt calls directly (I cannot find a module that lets you get to Xt directly, so this may not be easy), 2) try setting the clipboard value, then testing to see if it is available. If it is, then exit. (I have no idea if this will work or not). 3) Switch to gtk and see if you can do it easily from gtk. gtk plays well with perl...

        HTH, --john