Hello community,

here is the log from the commit of package perl-Glib-Object-Introspection for 
openSUSE:Factory checked in at 2015-12-06 07:42:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Glib-Object-Introspection (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Glib-Object-Introspection.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Glib-Object-Introspection"

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/perl-Glib-Object-Introspection/perl-Glib-Object-Introspection.changes
    2015-10-20 00:04:42.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Glib-Object-Introspection.new/perl-Glib-Object-Introspection.changes
       2015-12-06 07:42:42.000000000 +0100
@@ -1,0 +2,6 @@
+Fri Dec  4 10:29:26 UTC 2015 - [email protected]
+
+- Update to 0.033:
+  * perli11ndoc: Add a path bar to the results display.
+
+-------------------------------------------------------------------

Old:
----
  Glib-Object-Introspection-0.032.tar.gz

New:
----
  Glib-Object-Introspection-0.033.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Glib-Object-Introspection.spec ++++++
--- /var/tmp/diff_new_pack.2Tvxwy/_old  2015-12-06 07:42:43.000000000 +0100
+++ /var/tmp/diff_new_pack.2Tvxwy/_new  2015-12-06 07:42:43.000000000 +0100
@@ -18,7 +18,7 @@
 
 %define cpan_name Glib-Object-Introspection
 Name:           perl-Glib-Object-Introspection
-Version:        0.032
+Version:        0.033
 Release:        0
 Summary:        GObject Introspection bindings for Perl
 License:        LGPL-2.1+

++++++ Glib-Object-Introspection-0.032.tar.gz -> 
Glib-Object-Introspection-0.033.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Glib-Object-Introspection-0.032/META.json 
new/Glib-Object-Introspection-0.033/META.json
--- old/Glib-Object-Introspection-0.032/META.json       2015-09-29 
07:10:34.000000000 +0200
+++ new/Glib-Object-Introspection-0.033/META.json       2015-11-30 
17:01:28.000000000 +0100
@@ -66,5 +66,5 @@
       "x_IRC" : "irc://irc.gimp.org/#gtk-perl",
       "x_MailingList" : "https://mail.gnome.org/mailman/listinfo/gtk-perl-list";
    },
-   "version" : "0.032"
+   "version" : "0.033"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Glib-Object-Introspection-0.032/META.yml 
new/Glib-Object-Introspection-0.033/META.yml
--- old/Glib-Object-Introspection-0.032/META.yml        2015-09-29 
07:10:34.000000000 +0200
+++ new/Glib-Object-Introspection-0.033/META.yml        2015-11-30 
17:01:27.000000000 +0100
@@ -36,4 +36,4 @@
   homepage: http://gtk2-perl.sourceforge.net
   license: http://www.gnu.org/licenses/lgpl-2.1.html
   repository: git://git.gnome.org/perl-Glib-Object-Introspection
-version: '0.032'
+version: '0.033'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Glib-Object-Introspection-0.032/NEWS 
new/Glib-Object-Introspection-0.033/NEWS
--- old/Glib-Object-Introspection-0.032/NEWS    2015-09-29 07:09:15.000000000 
+0200
+++ new/Glib-Object-Introspection-0.033/NEWS    2015-11-30 17:00:34.000000000 
+0100
@@ -1,3 +1,8 @@
+Overview of changes in Glib::Object::Introspection 0.033
+========================================================
+
+* perli11ndoc: Add a path bar to the results display 
+
 Overview of changes in Glib::Object::Introspection 0.032
 ========================================================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Glib-Object-Introspection-0.032/bin/perli11ndoc 
new/Glib-Object-Introspection-0.033/bin/perli11ndoc
--- old/Glib-Object-Introspection-0.032/bin/perli11ndoc 2015-09-22 
17:06:02.000000000 +0200
+++ new/Glib-Object-Introspection-0.033/bin/perli11ndoc 2015-11-22 
03:31:05.000000000 +0100
@@ -195,6 +195,20 @@
   return ($package, $name, $full_name);
 }
 
+sub find_node_by_path {
+  my ($self, $path) = @_;
+
+  my $match_list = $self->{xpc}->find ($path, $self->{namespace});
+  if ($match_list->size < 1) {
+    die "Cannot find a matching element for the path $path\n";
+  }
+  if ($match_list->size > 1) {
+    die "Found more than one matching element for the path $path\n";
+  }
+
+  return $match_list->pop;
+}
+
 sub find_parameters_and_return_value {
   my ($self, $element) = @_;
 
@@ -370,17 +384,14 @@
 
 sub format_node_by_path {
   my ($self, $path) = @_;
+  my $node = $self->find_node_by_path ($path);
+  return $self->format_node ($node);
+}
 
-  my $match_list = $self->{xpc}->find ($path, $self->{namespace});
-  if ($match_list->size < 1) {
-    die "Cannot find a matching element for the path $path\n";
-  }
-  if ($match_list->size > 1) {
-    die "Found more than one matching element for the path $path\n";
-  }
-
-  my $match = $match_list->pop;
-  return $self->format_node ($match);
+sub format_node_name_by_path {
+  my ($self, $path) = @_;
+  my $node = $self->find_node_by_path ($path);
+  return $self->format_full_element_name ($node);
 }
 
 sub format_node {
@@ -1149,6 +1160,7 @@
   $self->setup_file_menu (@girs);
   $self->setup_gir_view;
   $self->setup_search_entry;
+  $self->setup_path_bar;
   $self->setup_result_view;
 
   my $gir_view_window = Gtk3::ScrolledWindow->new;
@@ -1163,14 +1175,18 @@
   $side_box->pack_start ($self->{search_entry}, FALSE, FALSE, 0);
   $side_box->set (margin => 2);
 
+  my $result_box = Gtk3::Box->new ('vertical', 0);
+  $result_box->pack_start ($self->{path_bar}, FALSE, FALSE, 0);
+  $result_box->pack_start ($result_view_window, TRUE, TRUE, 0);
+
   my $paned = Gtk3::Paned->new ('horizontal');
   $paned->pack1 ($side_box, TRUE, TRUE);
-  $paned->pack2 ($result_view_window, TRUE, TRUE);
+  $paned->pack2 ($result_box, TRUE, TRUE);
   $paned->set_position (300);
 
   $window->add ($paned);
   $window->signal_connect (delete_event => sub { $self->quit; });
-  $window->set_default_geometry (800, 800);
+  $window->set_default_geometry (900, 800);
 
   my $accel_group = Gtk3::AccelGroup->new;
   $accel_group->connect (Gtk3::Gdk::KEY_q (), qw/control-mask/, [], sub {
@@ -1199,6 +1215,7 @@
     $model->foreach (sub {
       my (undef, undef, $iter) = @_;
       $model->set ($iter, GIR_VIEW_COL_IS_VISIBLE, TRUE);
+      return FALSE; # continue
     });
 
     # Scroll to selected element.
@@ -1347,7 +1364,8 @@
   });
 
   $gir_view->get_selection->signal_connect (changed => sub {
-    $self->update_result_view unless 
$self->{suppress_gir_view_selection_changes};
+    $self->update_results_from_selection
+      unless $self->{suppress_gir_view_selection_changes};
   });
 
   $self->{gir_model} = $gir_model;
@@ -1355,6 +1373,16 @@
   $self->{gir_view} = $gir_view;
 }
 
+sub setup_path_bar {
+  my ($self) = @_;
+  my $path_bar = PathBar->new (orientation => 'horizontal', spacing => 2);
+  $path_bar->set_update_func (sub {
+    my ($name, $path) = @_;
+    $self->update_results ($path);
+  });
+  $self->{path_bar} = $path_bar;
+}
+
 sub setup_search_entry {
   my ($self) = @_;
 
@@ -1429,7 +1457,7 @@
   $self->display_results ($self->{parser}->format_namespace);
 }
 
-sub update_result_view {
+sub update_results_from_selection {
   my ($self) = @_;
   my $selection = $self->{gir_view}->get_selection;
   my ($model, $iter) = $selection->get_selected;
@@ -1437,7 +1465,27 @@
     $self->display_results ($self->{parser}->format_namespace);
   } elsif (!$model->get ($iter, GIR_VIEW_COL_IS_CATEGORY)) {
     my $path = $model->get ($iter, GIR_VIEW_COL_PATH);
-    $self->display_results ($self->{parser}->format_node_by_path ($path));
+    my $name = $self->{parser}->format_node_name_by_path ($path);
+    $self->{path_bar}->append ($name, $path); # indirectly calls update_results
+  }
+}
+
+sub update_results {
+  my ($self, $path) = @_;
+  $self->display_results ($self->{parser}->format_node_by_path ($path));
+
+  # If display and selection are out-of-sync, clear the selection.
+  my $selection = $self->{gir_view}->get_selection;
+  my ($model, $iter) = $selection->get_selected;
+  if (defined $iter) {
+    my $sel_path = $model->get ($iter, GIR_VIEW_COL_PATH);
+    if ($sel_path ne $path) {
+      $self->{suppress_gir_view_selection_changes} = TRUE;
+      {
+        $selection->unselect_all;
+      }
+      $self->{suppress_gir_view_selection_changes} = FALSE;
+    }
   }
 }
 
@@ -1445,3 +1493,207 @@
   my ($self) = @_;
   Gtk3::main_quit ();
 }
+
+package PathBar;
+
+# The BEGIN { eval } dance is to support not loading Gtk3 in text mode.
+BEGIN { eval 'use Glib::Object::Subclass qw/Gtk3::Box/;' }
+
+sub TRUE () {1}
+sub FALSE () {0}
+
+sub INIT_INSTANCE {
+  my ($self) = @_;
+
+  my $back_button = Gtk3::Button->new;
+  $back_button->set_image (
+    Gtk3::Image->new_from_icon_name ('go-previous-symbolic', 'button'));
+  $back_button->set_sensitive (FALSE);
+  $back_button->signal_connect (clicked => sub { $self->{path_label}->go_back 
});
+
+  my $forward_button = Gtk3::Button->new;
+  $forward_button->set_image (
+    Gtk3::Image->new_from_icon_name ('go-next-symbolic', 'button'));
+  $forward_button->set_sensitive (FALSE);
+  $forward_button->signal_connect (clicked => sub { 
$self->{path_label}->go_forward });
+
+  my $nav_box = Gtk3::Box->new ('horizontal', 2);
+  $nav_box->pack_start ($back_button, FALSE, FALSE, 0);
+  $nav_box->pack_start ($forward_button, FALSE, FALSE, 0);
+  $nav_box->get_style_context->add_class ('linked');
+
+  my $path_label = PathLabel->new;
+  $path_label->set_update_func (sub {
+    my ($name, $path) = @_;
+    $self->update_buttons;
+    if (defined $self->{update_func}) {
+      $self->{update_func}->($name, $path);
+    }
+  });
+
+  $self->pack_start ($nav_box, FALSE, FALSE, 0);
+  $self->pack_start (Gtk3::VSeparator->new, FALSE, FALSE, 0);
+  $self->pack_start ($path_label, TRUE, TRUE, 0);
+  $self->set (margin => 2);
+
+  $self->{back_button} = $back_button;
+  $self->{forward_button} = $forward_button;
+  $self->{path_label} = $path_label;
+
+  return $self;
+}
+
+sub append {
+  my ($self, $name, $path) = @_;
+  $self->{path_label}->append ($name, $path);
+}
+
+sub set_update_func {
+  my ($self, $func) = @_;
+  $self->{update_func} = $func;
+}
+
+sub update_buttons {
+  my ($self) = @_;
+  $self->{back_button}->set_sensitive ($self->{path_label}->can_go_back);
+  $self->{forward_button}->set_sensitive ($self->{path_label}->can_go_forward);
+}
+
+package PathLabel;
+
+# The BEGIN { eval } dance is to support not loading Gtk3 in text mode.
+BEGIN { eval 'use Glib::Object::Subclass qw/Gtk3::Label/;' }
+
+sub TRUE () {1}
+sub FALSE () {0}
+
+sub INIT_INSTANCE {
+  my ($self) = @_;
+
+  $self->signal_connect (activate_link => sub {
+    my (undef, $index) = @_;
+    $self->{current_child} = $index;
+    $self->update;
+    return TRUE; # handled
+  });
+  $self->set_track_visited_links (FALSE);
+
+  $self->{children} = [];
+  $self->{current_child} = undef;
+  $self->{natural_width} = 0;
+}
+
+sub append {
+  my ($self, $name, $path) = @_;
+  if (defined $self->{current_child} &&
+      $self->{current_child} < $#{$self->{children}}) {
+    splice @{$self->{children}}, $self->{current_child}+1;
+  }
+  push @{$self->{children}}, {name => $name, path => $path};
+  $self->{current_child} = $#{$self->{children}};
+  $self->update;
+}
+
+sub can_go_back {
+  my ($self) = @_;
+  return $self->{current_child} > 0;
+}
+
+sub can_go_forward {
+  my ($self) = @_;
+  return $self->{current_child} < $#{$self->{children}};
+}
+
+sub go_back {
+  my ($self) = @_;
+  return unless $self->{current_child} > 0;
+  $self->{current_child}--;
+  $self->update;
+}
+
+sub go_forward {
+  my ($self) = @_;
+  return unless $self->{current_child} < $#{$self->{children}};
+  $self->{current_child}++;
+  $self->update;
+}
+
+sub set_update_func {
+  my ($self, $func) = @_;
+  $self->{update_func} = $func;
+}
+
+sub update {
+  my ($self) = @_;
+  $self->set_markup ($self->_format_children);
+  if (defined $self->{update_func}) {
+    my $child = $self->{children}->[$self->{current_child}];
+    $self->{update_func}->($child->{name}, $child->{path});
+  }
+}
+
+sub GET_PREFERRED_WIDTH {
+  #say 'GET_PREFERRED_WIDTH';
+  my ($self) = @_;
+  (undef, $self->{natural_width}) = $self->SUPER::GET_PREFERRED_WIDTH;
+  return (0, 0);
+}
+
+sub SIZE_ALLOCATE {
+  #say 'SIZE_ALLOCATE';
+  my ($self, $allocation) = @_;
+  #print "$_ => $allocation->{$_}, " for sort keys %$allocation; print "\n";
+  if ($self->{natural_width} > $allocation->{width}) {
+    my @selected = ($self->{current_child});
+    while (1) {
+      my @candidates = @selected;
+      if ($selected[0] > 0) {
+        unshift @candidates, $selected[0]-1;
+      }
+      if ($selected[-1] < $#{$self->{children}}) {
+        push @candidates, $selected[-1]+1;
+      }
+      $self->set_markup ($self->_format_children (@candidates));
+      my ($ink_rect, $logical_rect) = $self->get_layout->get_extents;
+      my $text_width = $logical_rect->{width}/Pango::SCALE ();
+      if ($text_width > $allocation->{width}) {
+        last;
+      } else {
+        @selected = @candidates;
+      }
+    }
+    $self->set_markup ($self->_format_children (@selected));
+  }
+  $self->SUPER::SIZE_ALLOCATE ($allocation);
+}
+
+ # Use undef as an indicator for left-out children.
+sub _add_omission_markers {
+  my ($self, @indices) = @_;
+  if ($indices[0] > 0) {
+    unshift @indices, undef;
+  }
+  if ($indices[-1] < $#{$self->{children}}) {
+    push @indices, undef;
+  }
+  return @indices;
+}
+
+sub _format_child {
+  my ($self, $index) = @_;
+  return '…' unless defined $index;
+  my $name = $self->{children}->[$index]->{name};
+  my $markup = $index == $self->{current_child}
+    ? "<b>$name</b>"
+    : "<a href='$index'>$name</a>";
+  return $markup;
+}
+
+sub _format_children {
+  my ($self, @indices) = @_;
+  if (!@indices) {
+    @indices = 0..$#{$self->{children}};
+  }
+  @indices = $self->_add_omission_markers (@indices);
+  return join ' ▸ ', map { $self->_format_child ($_) } @indices;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Glib-Object-Introspection-0.032/lib/Glib/Object/Introspection.pm 
new/Glib-Object-Introspection-0.033/lib/Glib/Object/Introspection.pm
--- old/Glib-Object-Introspection-0.032/lib/Glib/Object/Introspection.pm        
2015-09-29 07:09:36.000000000 +0200
+++ new/Glib-Object-Introspection-0.033/lib/Glib/Object/Introspection.pm        
2015-11-30 16:59:38.000000000 +0100
@@ -19,7 +19,7 @@
 use warnings;
 use Glib;
 
-our $VERSION = '0.032';
+our $VERSION = '0.033';
 
 use Carp;
 $Carp::Internal{(__PACKAGE__)}++;


Reply via email to