diff -rc okular.orig/aboutdata.h okular/aboutdata.h
*** okular.orig/aboutdata.h	2009-09-06 15:53:13.000000000 -0400
--- okular/aboutdata.h	2009-09-06 15:58:31.000000000 -0400
***************
*** 27,33 ****
                "(C) 2004-2005 Enrico Ros\n"
                "(C) 2005 Piotr Szymanski\n"
                "(C) 2004-2009 Albert Astals Cid\n"
!               "(C) 2006-2009 Pino Toscano"),
          KLocalizedString(),
          "http://okular.kde.org"
      );
--- 27,34 ----
                "(C) 2004-2005 Enrico Ros\n"
                "(C) 2005 Piotr Szymanski\n"
                "(C) 2004-2009 Albert Astals Cid\n"
!               "(C) 2006-2009 Pino Toscano\n"
!               "(C) 2006-2009 Bob Tennent"),
          KLocalizedString(),
          "http://okular.kde.org"
      );
***************
*** 37,42 ****
--- 38,44 ----
      about.addAuthor(ki18n("Albert Astals Cid"), ki18n("Former maintainer"), "aacid@kde.org");
      about.addAuthor(ki18n("Piotr Szymanski"), ki18n("Created Okular from KPDF codebase"), "djurban@pld-dc.org");
      about.addAuthor(ki18n("Enrico Ros"), ki18n("KPDF developer"), "eros.kde@email.it");
+     about.addAuthor(ki18n("Bob Tennent"), ki18n("prerex developer"), "rdtennent@gmail.com");
      about.addCredit(ki18n("Eugene Trounev"), ki18n("Annotations artwork"), "eugene.trounev@gmail.com");
  
      return about;
Only in okular: aboutdata.h.orig
Only in okular: aboutdata.h.rej
diff -rc okular.orig/core/document.cpp okular/core/document.cpp
*** okular.orig/core/document.cpp	2009-09-06 15:53:13.000000000 -0400
--- okular/core/document.cpp	2009-09-06 16:01:33.000000000 -0400
***************
*** 47,52 ****
--- 47,54 ----
  #include <ktoolinvocation.h>
  #include <kzip.h>
  
+ #include <qclipboard.h>
+ 
  // local includes
  #include "action.h"
  #include "annotations.h"
***************
*** 2902,2907 ****
--- 2904,2920 ----
              const BrowseAction * browse = static_cast< const BrowseAction * >( action );
              QString lilySource;
              int lilyRow = 0, lilyCol = 0;
+                if ( browse->url().startsWith( "coord:")   )
+                { // for prerex: load coordinates of clicked box into the clipboard
+                  QString message = browse->url();
+                  QClipboard *cb = QApplication::clipboard();
+                  message.remove("coord: ");
+                  cb->setText(message, QClipboard::Selection );
+                }
+                else if ( browse->url().startsWith("anchor:") ) // ignore it
+                { }
+                else
+ 
              // if the url is a mailto one, invoke mailer
              if ( browse->url().startsWith( "mailto:", Qt::CaseInsensitive ) )
                  KToolInvocation::invokeMailer( browse->url() );
Only in okular/core: document.cpp.orig
Only in okular/core: document.cpp.rej
diff -rc okular.orig/core/page.cpp okular/core/page.cpp
*** okular.orig/core/page.cpp	2009-09-06 15:53:13.000000000 -0400
--- okular/core/page.cpp	2009-09-06 15:53:43.000000000 -0400
***************
*** 20,25 ****
--- 20,27 ----
  
  #include <kdebug.h>
  
+ #include <kmessagebox.h>
+ 
  // local includes
  #include "action.h"
  #include "annotations.h"
***************
*** 34,39 ****
--- 36,42 ----
  #include "rotationjob_p.h"
  #include "textpage.h"
  #include "textpage_p.h"
+ #include <stdlib.h>
  
  #include <limits>
  
***************
*** 386,391 ****
--- 389,482 ----
      return res;
  }
  
+   // computes the factor that scales from pixel coordinates to chart coordinates
+   const QPoint Page::scaleToChart (int xclick, int yclick, int widthPage, int heightPage)  const
+   {   
+       //   Copyright (c) 2006  R. D. Tennent   
+       //   School of Computing, Queen's University, rdt@cs.queensu.ca 
+       //
+       // There are *three* coordinate systems involved here:
+       //
+       //    + chart coordinates, to which okular has no direct access 
+       //
+       //    + pixel coordinates, for example, as registered by a mouse click
+       //
+       //    + normalized page coordinates in [0,1] range used internally
+       //      by okular
+       //
+       //  Implementation:
+       //
+       //  Find the two "anchor: xci,yci" links, determine their
+       //  "normalized" locations on the page, unnormalize to get the pixel
+       //  coordinates (x1, y1) and (x2, y2) of their centre points, and
+       //  then scale the mouse-click coordinates accordingly to get the
+       //  corresponding chart coordinates (xc, yc).
+       //
+       QPoint clickChart = QPoint(); // what we're trying to determine
+       bool first = false, second = false;
+       int x1=0, y1=0, x2=0, y2=0;  // pixel coordinates of centre points of two anchor links
+       int xc1=0, yc1=0, xc2=0, yc2=0;  // chart coordinates of anchors, as determined by their URIs
+       int xc=0, yc=0;  // rounded chart coordinates of mouse-click location
+   
+       QLinkedList< ObjectRect * >::const_iterator it = m_rects.begin(), end = m_rects.end();
+       for ( ; it != end; ++it )
+         if ((*it)->objectType() == ObjectRect::Action) 
+         {
+            const BrowseAction * action = static_cast< const BrowseAction * >( (*it)->object() );
+            if (action)
+            {
+              const BrowseAction * browse = dynamic_cast< const BrowseAction * >( action );
+              if (browse)
+              {
+                QString thisURL = browse->url();
+                if (thisURL.startsWith( "anchor:" )  )
+                {
+                   int comma; 
+                   QString xs;
+                   QRect unnormalized = (*it)->boundingRect(widthPage, heightPage);
+                   thisURL.remove(0,7);  // remove "anchor:"
+                   comma = thisURL.indexOf(','); 
+                   xs  = thisURL.left(comma);  // x coordinate as a string
+                   thisURL.remove(0, comma+1); // y coordinate as a string
+                   if (!first) 
+                   {  
+                      QPoint p1;  // centre of first anchor
+                      xc1 = xs.toInt();
+                      yc1 = thisURL.toInt();
+                      p1 = unnormalized.center();
+                      x1 = p1.x(); y1 = p1.y();
+                      first = true;
+                   }
+                   else 
+                   {
+                      QPoint p2; // centre of second anchor
+                      xc2 = xs.toInt();
+                      yc2 = thisURL.toInt();
+                      p2 = unnormalized.center();
+                      x2 = p2.x(); y2 = p2.y();
+                      second = true;
+                      break;
+                   }
+                }
+              }
+            }
+         }
+       if (!second) return QPoint(-1, -1);
+   //   KMessageBox::information(0, QString()
+   //   + " x1= " + QString::number(x1)  
+   //   + " y1= " + QString::number(y1)  
+   //   + " x2= " + QString::number(x2)  
+   //   + " y2= " + QString::number(y1)  
+   //   + " xclick= " + QString::number(xclick)  
+   //   + " yclick= " + QString::number(yclick)  
+   //   );
+       xc = (int)( 0.25L + (xc1 + xc2)/2.0L - ((x1 + x2)/2.0L - xclick) * (xc2 - xc1) / (x2 - x1) ) ;
+       yc = (int)( 0.75L + (yc1 + yc2)/2.0L - ((y1 + y2)/2.0L - yclick) * (yc2 - yc1) / (y2 - y1) );
+       clickChart = QPoint(xc, yc);
+       return clickChart;
+   }
+   
+ 
  const PageTransition * Page::transition() const
  {
      return d->m_transition;
Only in okular/core: page.cpp.orig
diff -rc okular.orig/core/page.h okular/core/page.h
*** okular.orig/core/page.h	2009-09-06 15:53:13.000000000 -0400
--- okular/core/page.h	2009-09-06 15:53:43.000000000 -0400
***************
*** 333,338 ****
--- 333,343 ----
           */
          void deleteAnnotations();
  
+         /** computes the factor that scales from pixel coordinates to chart coordinates:  
+          */
+         const QPoint scaleToChart(int xclick, int yclick, int widthPage, int heightPage) const;
+ 
+ 
      private:
          PagePrivate* const d;
          /// @cond PRIVATE
Only in okular/core: page.h.orig
diff -rc okular.orig/shell/shell.cpp okular/shell/shell.cpp
*** okular.orig/shell/shell.cpp	2009-09-06 15:53:13.000000000 -0400
--- okular/shell/shell.cpp	2009-09-06 16:05:09.000000000 -0400
***************
*** 43,48 ****
--- 43,50 ----
  #include <ktogglefullscreenaction.h>
  #include <kactioncollection.h>
  
+ #include <kstatusbar.h>
+ 
  // local includes
  #include "kdocumentviewer.h"
  
***************
*** 110,117 ****
      // tell the KParts::MainWindow that this is indeed the main widget
      setCentralWidget(m_part->widget());
      // and integrate the part's GUI with the shell's
-     setupGUI(Keys | ToolBar | Save);
      createGUI(m_part);
      m_doc = qobject_cast<KDocumentViewer*>(m_part);
    }
  
--- 112,122 ----
      // tell the KParts::MainWindow that this is indeed the main widget
      setCentralWidget(m_part->widget());
      // and integrate the part's GUI with the shell's
      createGUI(m_part);
+     m_statusBar = statusBar();
+     m_statusBar->showMessage("This is prerex-enabled okular.");
+     setupGUI(Keys | ToolBar | Save);
+     createStandardStatusBarAction();
      m_doc = qobject_cast<KDocumentViewer*>(m_part);
    }
  
Only in okular/shell: shell.cpp.orig
Only in okular/shell: shell.cpp.rej
diff -rc okular.orig/shell/shell.h okular/shell/shell.h
*** okular.orig/shell/shell.h	2009-09-06 15:53:13.000000000 -0400
--- okular/shell/shell.h	2009-09-06 15:53:43.000000000 -0400
***************
*** 102,107 ****
--- 102,108 ----
    KToggleAction* m_showMenuBarAction;
    bool m_menuBarWasShown, m_toolBarWasShown;
    KUrl m_openUrl;
+   KStatusBar *m_statusBar;
  };
  
  #endif
Only in okular/shell: shell.h.orig
diff -rc okular.orig/ui/pageview.cpp okular/ui/pageview.cpp
*** okular.orig/ui/pageview.cpp	2009-09-06 15:53:13.000000000 -0400
--- okular/ui/pageview.cpp	2009-09-06 15:53:43.000000000 -0400
***************
*** 1696,1704 ****
                  }
                  if ( !d->mouseAnn )
                  {
!                 d->mouseGrabPos = d->mouseOnRect ? QPoint() : d->mousePressPos;
!                 if ( !d->mouseOnRect )
!                     setCursor( Qt::SizeAllCursor );
                  }
              }
              else if ( rightButton )
--- 1696,1733 ----
                  }
                  if ( !d->mouseAnn )
                  {
!                   d->mouseGrabPos = d->mouseOnRect ? QPoint() : d->mousePressPos;
!                   if ( !d->mouseOnRect )
!                     { 
!                       QPoint click = QPoint(e->x(), e->y());
!                       //  need to compute chart coordinates from pixel coordinates
!                       //  first, find the relevant page:
!                       PageViewItem * pageItem = pickItemOnPoint( click.x(), click.y() );
!                       if ( pageItem )
!                       {   // load chart coordinates of clicked point into clipboard
!                           QString message;
!                           QClipboard *cb = QApplication::clipboard();
!                           QPoint clickChart = pageItem->page()->
!                             scaleToChart(
!                                click.x() - pageItem->croppedGeometry().left(), 
!                                click.y() - pageItem->croppedGeometry().top(), 
!                                pageItem->croppedWidth(), 
!                                pageItem->croppedHeight()
!                             );
!                           if (clickChart.x() == -1  && clickChart.y() == -1) 
!                           { // no anchors
!                             setCursor( Qt::SizeAllCursor );
!                             break;
!                           }
!                           setCursor( Qt::CrossCursor );
!                           message = "";
!                           message.append(QString::number(clickChart.x()));
!                           message.append(',');
!                           message.append(QString::number(clickChart.y()));
!      // message = QString::number(pageItem->width());
!                           cb->setText(message, QClipboard::Selection );
!                       }
!                     }
                  }
              }
              else if ( rightButton )
***************
*** 1820,1825 ****
--- 1849,1864 ----
                      // handle click over a link
                      const Okular::Action * action = static_cast< const Okular::Action * >( rect->object() );
                      d->document->processAction( action );
+                     if (action)
+                    {
+                      const Okular::BrowseAction * browse = static_cast< const Okular::BrowseAction * >( action );
+                      if (browse)
+                      {  // for coord URIs with prerex, change cursor to cross to signal click success
+                        QString thisURL = browse->url();
+                         if ( thisURL.startsWith( "coord:" ) ) 
+                           setCursor( Qt::CrossCursor );
+                      }
+                    }
                  }
                  else if ( e->modifiers() == Qt::ShiftModifier )
                  {
Only in okular/ui: pageview.cpp.orig
