2016-04-07 25 views
3

X11 ekranları arasında hareket edebildiğim bir uygulamam var, ancak başladığım yerden başka bir ekranda olduğumda, açılır menüyü açmaya çalışmak çökmeye neden oluyor. Menubardaki menüler iyi çalışıyor, sadece pop-up değil. Alternatif X11 ekranında bir açılır menü açılırken Gtk3 çökmesi

(popuptest.pl:17147): Gdk-ERROR **: The program 'popuptest.pl' received an X Window System error. 
This probably reflects a bug in the program. 
The error was 'BadWindow (invalid Window parameter)'. 
    (Details: serial 355 error_code 3 request_code 131 minor_code 51) 
    (Note to programmers: normally, X errors are reported asynchronously; 
    that is, you will receive the error a while after causing it. 
    To debug your program, run it with the GDK_SYNCHRONIZE environment 
    variable to change this behavior. You can then get a meaningful 
    backtrace from your debugger if you break on the gdk_x_error() function.) 
Trace/breakpoint trap (core dumped) 

Sorunu yeniden üreten bir basit bir test durumu oluşturuldu:

  1. ikincil ekran başlatın (yani başka bir makine, Xvnc :1 vs.) 2 ekran için
  2. başlatın bir izleyici (örneğin vncviewer :1)
  3. çalıştırın sağ butonuna tıklayın ve doğru olarak
  4. açılır menü çalışmaları görmek
  5. aşağıdaki kod pencere diğer ekran diğer ekranında
  6. geçer böylece butona
  7. Sol tıklama, sağ butonuna tıklayın ve çökme

Numune kodunu izlemek:

#!/usr/bin/perl -w 
use strict; 
use Glib qw/TRUE FALSE/; 
use Gtk3 -init; 
my $win = Gtk3::Window->new; 
$win->signal_connect(destroy => sub {Gtk3::main_quit}); 
my $btn = Gtk3::Button->new_with_label("move to :1"); 
$btn->signal_connect(clicked => sub { 
     $win->set_screen(Gtk3::Gdk::Display::open(":1")->get_screen(0)); 
}); 
my $menu; 
$btn->signal_connect('button-press-event' => sub { 
     my ($widget, $event) = @_; 
     return FALSE unless $event->button == 3; 
     $menu = Gtk3::Menu->new; 
     $menu->attach(Gtk3::MenuItem->new_with_label(''.localtime), 0, 1, 0, 1); 
     $menu->show_all; 
     $menu->popup(undef, undef, undef, undef, $event->button, $event->time); 
     return TRUE; 
}); 
$win->add($btn); 
$win->show_all; 
Gtk3->main; 

Sürümleri:

  • OS: CentOS 7.1 (Linux 3.10.0-229.el7.x86_64)
  • Perl: 5.16.3
  • Gtk3: 3.8.8
  • X11: 1.15.0
+0

Bunu başka bir dilde denemişse, çalışıp çalışmadığını bilmek isterim. – TheAmigo

cevap

1

xorg Gtk bu sürümünde bir hata gibi görünüyor.

Gtk 3.18 ile bir sistem üzerinde test edebildim ve iyi çalışıyor. En azından Perl kodunda bir hata olmadığını biliyorum.

İlgili konular