Gtk2-Ex-Dragger

 view release on metacpan or  search on metacpan

devel/run.pl  view on Meta::CPAN

Gtk2->main;
exit 0;


__END__


=head1 BUGS

There's no C<notify> signal if the C<widget> property becomes C<undef> due
to weakening.

lib/Gtk2/Ex/Dragger.pm  view on Meta::CPAN


  } elsif ($pname eq 'widget') {
    my $widget = $newval;
    if (! $newval
        || ($oldval && $newval != $oldval)) {
      # ENHANCE-ME: might be able to switch to an active grab on the new
      # widget and continue
      $self->stop;
    }
    if ($widget) {
      Scalar::Util::weaken ($self->{'widget'});
    }
    $self->{'wevents'} = $widget && Gtk2::Ex::WidgetEvents->new
      ($widget, ['button-press-mask',
                 'button-motion-mask',
                 'button-release-mask']);
    _widget_signals($self);

  } elsif ($pname =~ /([hv])(adjustment|inverted)/) {
    my $axis = $self->{$1};
    my $field = $2;

lib/Gtk2/Ex/Dragger.pm  view on Meta::CPAN

# so $floor+$frac == $x
#
sub _floor_and_frac {
  my ($x) = @_;
  my $f = POSIX::floor ($x);
  return ($f, $x - $f);
}

sub _ref_weak {
  my ($self) = @_;
  Scalar::Util::weaken ($self);
  return \$self;
}


#------------------------------------------------------------------------------

1;
__END__

=for stopwords Gtk2-Ex-Dragger Dragger scrollbars WidgetCursor natively viewport dragger scrollbar timestamp Gdk ungrab Viewport TextView pixmap Ryde WidgetEvents boolean enum UpdatePolicy mozilla

t/Dragger.t  view on Meta::CPAN

  is (Gtk2::Ex::Dragger->VERSION,  $want_version, 'VERSION class method');
  ok (eval { Gtk2::Ex::Dragger->VERSION($want_version); 1 },
      "VERSION class check $want_version");

  my $check_version = $want_version + 1000;
  ok (! eval { Gtk2::Ex::Dragger->VERSION($check_version); 1 },
      "VERSION class check $check_version");
}

#------------------------------------------------------------------------------
# gc weaken

{
  my $widget = Gtk2::DrawingArea->new;
  my $adj = Gtk2::Adjustment->new (100, -100, 1000, 10, 100, 800);
  my $dragger = Gtk2::Ex::Dragger->new (widget => $widget,
                                        hadjustment => $adj);

  ok ($dragger->VERSION >= $want_version, 'VERSION object method');
  ok (eval { $dragger->VERSION($want_version); 1 },
      "VERSION object check $want_version");
  my $check_version = $want_version + 1000;
  ok (! eval { $dragger->VERSION($check_version); 1 },
      "VERSION object check $check_version");

  require Scalar::Util;
  Scalar::Util::weaken ($dragger);
  is ($dragger, undef, 'garbage collect when weakened');
}

{
  my $widget = Gtk2::DrawingArea->new;
  my $adj = Gtk2::Adjustment->new (100, -100, 1000, 10, 100, 800);
  my $dragger = Gtk2::Ex::Dragger->new (widget => $widget,
                                        hadjustment => $adj);

  Scalar::Util::weaken ($widget);
  is ($widget, undef, 'attached widget garbage collect when weakened');
}

#------------------------------------------------------------------------------
# cursor properties

# return true if two Glib::Boxed objects $b1 and $b2 point to the same
# underlying C object
sub glib_boxed_equal {
  my ($b1, $b2) = @_;
  my $pspec = Glib::ParamSpec->boxed ('equal', 'equal', 'blurb', ref($b1),

t/MyTestHelpers.pm  view on Meta::CPAN

                         join(' ',
                              map {"$_=$obj->{$_}"} keys %$obj));
  }
  if (eval { require Devel::FindRef }) {
    MyTestHelpers::diag (Devel::FindRef::track($obj, 8));
  } else {
    MyTestHelpers::diag ("Devel::FindRef not available -- ", $@);
  }
}

sub test_weaken_show_leaks {
  my ($leaks) = @_;
  $leaks || return;

  my $unfreed = $leaks->unfreed_proberefs;
  my $unfreed_count = scalar(@$unfreed);
  MyTestHelpers::diag ("Test-Weaken leaks $unfreed_count objects");
  MyTestHelpers::dump ($leaks);

  my $proberef;
  foreach $proberef (@$unfreed) {



( run in 0.753 second using v1.01-cache-2.11-cpan-65fba6d93b7 )