Package: ruby-gtk2
Version: 1.0.0-1
Severity: normal

Was debugging a demo with a liststore an found that liststores don't
work in the Debian package but do work in in perfectly when the package
is removed and gem installed.

Attaching the demo which fails.


-- System Information:
Debian Release: wheezy/sid
  APT prefers stable
  APT policy: (900, 'stable'), (500, 'testing'), (410, 'unstable'), (200, 
'experimental'), (111, 'oldstable'), (107, 'natty-updates'), (107, 'natty')
Architecture: amd64 (x86_64)

Kernel: Linux 3.0.0-rc3-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL 
set to en_US.UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages ruby-gtk2 depends on:
ii  libatk1.0-0           2.0.1-2            ATK accessibility toolkit
ii  libc6                 2.13-10            Embedded GNU C Library: Shared lib
ii  libcairo2             1.10.2-6.1         The Cairo 2D vector graphics libra
ii  libfontconfig1        2.8.0-2.1          generic font configuration library
ii  libfreetype6          2.4.2-2.1+squeeze1 FreeType 2 font engine, shared lib
ii  libgdk-pixbuf2.0-0    2.23.5-3           GDK Pixbuf library
ii  libglib2.0-0          2.28.6-1           The GLib library of C routines
ii  libgtk2.0-0           2.24.5-4cmb1       GTK+ graphical user interface libr
ii  libpango1.0-0         1.28.4-1           Layout and rendering of internatio
ii  libruby1.8            1.8.7.352-2        Libraries necessary to run Ruby 1.
ii  libruby1.9.1          1.9.2.290-2        Libraries necessary to run Ruby 1.
ii  libx11-6              2:1.3.3-4          X11 client-side library
ii  ruby-atk              1.0.0-1            ATK bindings for the Ruby language
ii  ruby-gdk-pixbuf2      1.0.0-1            Gdk-Pixbuf 2 bindings for the Ruby
ii  ruby-pango            1.0.0-1            Pango bindings for the Ruby langua

ruby-gtk2 recommends no packages.

ruby-gtk2 suggests no packages.

-- no debconf information
#!/usr/bin/env ruby

require 'gtk2'

class Array
   def mapm_rev receiver, method
      self.map{|item| receiver.send method, item }
   end
   def mapm method, *args
      self.map{|item| item.send method, *args}
   end
end

def echo *strings
   STDERR.puts strings.join(' ')
end

class Gtk::TreeSelection

   def can_select? path
      !@exclude or (@other_selected != path)
   end

   def selection_changed changed # This is kind of evil. In glade the user_data is the object on which
      # the signal callback is called. It is set to the *other* unchanged selection which then can note
      # the item that was selected and either deselect it or disable it as appropriate.
      echo "sel", *([(selected[0] rescue nil), (changed.selected[0] rescue nil)].mapm :inspect)
      # This handles the override case
      unselect_iter selected if !@exclude and selected and changed.selected and (selected.path == changed.selected.path)
      # And this the exclude case
      self.other_selected = changed.selected
   end

   def other_selected_iter
      return nil unless @other_selected
      tree_view.model.get_iter @other_selected
   end

   def other_selected_text
      iter = other_selected_iter
      other_selected_iter[0] if iter
   end

   def vis_enable_row value
      echo 'en', *([other_selected_text, value].mapm :inspect)
      other_selected_iter[@index] = value if @other_selected
   end

   def other_selected= iter
      echo 'sav', *([other_selected_text, (iter[0] rescue nil)].mapm :inspect)
      path = iter.path if iter
      if path != @other_selected then
         vis_enable_row true if @exclude
         @other_selected = path
         vis_enable_row false if @exclude
      end
   end

   def exclude= value
      echo 'exc', @index, value
      vis_enable_row !value #if @exclude != value # Would issue uninitialized variable warnings
      @exclude = value
   end

   def index= value # Kind of initialization of the exclusion mechanism
      @index = value
      @other_selected = nil
   end
   attr_reader :exclude, :index
end


class Dialog < Gtk::Window

   def selections_do
      (1..2).each{|n|
         yield @builder["treeview-selection#{n}"], n
      }
   end

   def initialize(path_or_data, root = nil, domain = nil, localedir = nil, flag = nil)
      super(Gtk::Window::TOPLEVEL)
      @window = nil
      gtkversion = [2, 16, 0] # 2.12 should have most recent features. Set to later if needed.

      available = Gtk.check_version? *gtkversion
      if available
         label = Gtk::Label.new("If you can see this message there was an error loading interface description #{path_or_data.inspect}.")
      else
         label = Gtk::Label.new("You need GTK+ >= #{gtkversion.join '.'} to run this application.")
      end
      add(label)
      return unless available

      @builder = Gtk::Builder.new
      @builder << path_or_data
      @builder.connect_signals {|name| method(name)}
      store = @builder['liststore']
      (1...20).each{|n| i=store.insert(n) ; i[1] = i[2] = true ; i[0] = "Item %i" % (n % 10)}
      selections_do{|sel, n|
         sel.index = n
         sel.exclude = false
         sel.set_select_function{|selection, model, path, path_currentry_selected|
            selection.can_select? path
         }
      }
      @window = @builder['window1']
   end

   def selection_changed changed
      changed.tree_view.columns[0].title = (changed.selected[0] rescue nil)
   end

   def exclude_toggled button
      selections_do{|sel, n| sel.exclude = button.active? }
   end

   def app_quit
      Gtk.main_quit
   end

   def show
      @window = self unless @window
      @window.show_all
      @window.signal_connect("destroy") { Gtk.main_quit }
   end
end


Dialog.new('twin_tree_view.glade', nil, "Twin Tre View Demo").show
Gtk.main

Attachment: twin_tree_view.glade
Description: XML document

Reply via email to