2012-01-20 25 views
36

Khi tôi tạo hộp thoại tùy chỉnh trong GTK (cả hai, GTK2 hoặc GTK3) và đặt nó là phương thức, tất cả đầu vào cho các cửa sổ khác của ứng dụng của tôi bị bỏ qua. Điều này làm việc gần như luôn luôn, nhưng nó không thành công trong điều kiện nhất định.Đôi khi các hộp thoại phương thức GTK không phải là phương thức --- lỗi hoặc tính năng?

Khi tôi thêm ScrolledWindow chứa TreeView vào hộp thoại của tôi, nó vẫn hoạt động như được cho là. Nhưng nếu tôi điền vào các TreeView với các mục cho đến khi ScrolledWindow bắt đầu hiển thị thanh cuộn của nó --- các phương thức đột nhiên bị mất và tôi có thể bấm vào các cửa sổ khác của tôi!

Đây là ví dụ cơ bản nhất mà tôi có thể thiết lập. Nó được viết bằng Vala, nhưng bạn sẽ nhận được các ý tưởng:

class MyDialog: Gtk.Dialog { 

    public MyDialog() { 
     this.modal = true; 

     var data = new Gtk.ListStore(1, typeof(string)); 

     // increase this number -- the dialog is not modal anymore! 
     for (int i=0; i<2; ++i) { 
      Gtk.TreeIter current; 
      data.append(out current); 
      data.set(current, 0, "Lorem Ipsum"); 
     } 

     var render = new Gtk.CellRendererText(); 

     var column = new Gtk.TreeViewColumn(); 
      column.pack_start(render, true); 
      column.add_attribute(render, "text", 0); 

     var treeview = new Gtk.TreeView.with_model(data); 
      treeview.append_column(column); 
      treeview.show(); 

     var scroll = new Gtk.ScrolledWindow(null, null); 
      scroll.set_size_request(100, 100); 
      scroll.add(treeview); 
      scroll.show(); 

     (this.get_content_area() as Gtk.Box).add(scroll); 
    } 
} 

int main (string[] args) { 
    Gtk.init (ref args); 

    var window = new Gtk.Window(); 

    window.set_default_size(350, 170); 
    window.destroy.connect(Gtk.main_quit); 

    var button = new Gtk.Button.with_label("Click me!"); 
    button.clicked.connect(() => { 
     var dialog = new MyDialog(); 
     dialog.set_transient_for(window); 
     dialog.run(); 
     dialog.destroy(); 
    }); 

    window.add(button); 
    window.show_all(); 

    Gtk.main(); 
    return 0; 
} 

Biên dịch nó với:

valac --pkg gtk+-3.0 main.vala 

Am tôi thiếu cái gì? Hành vi này có muốn không? hay nó là một con bọ nhỉ? Nếu vậy, có cách giải quyết nào không?

EDIT: Tôi đã nghiên cứu thêm một chút: Vấn đề biến mất khi các thanh cuộn lớp phủ từ Ubuntu được gỡ cài đặt. Vì vậy, nó chưa được giải quyết, nhưng tôi biết nơi tôi phải báo cáo điều này ...

+0

Có thể là lỗi. Bạn nên báo cáo nó trên bugzilla.gnome.org. – ptomato

+0

Tôi phát hiện ra một báo cáo lỗi liên quan tại [Launchpad] (https://bugs.launchpad.net/ubuntu/+source/overlay-scrollbar/+bug/903302) Hãy xem khi nào nó được sửa ... – Simme

+3

Có vẻ như đó là một lỗi của Ubuntu. Luôn luôn ghét những 'tính năng' này –

Trả lời

1

Chắc chắn là một lỗi. Đăng báo cáo lỗi và/hoặc nâng cấp GTK + lib của bạn.

Các vấn đề liên quan