<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.freedesktop.poppler">
    <title>gmane.comp.freedesktop.poppler</title>
    <link>http://blog.gmane.org/gmane.comp.freedesktop.poppler</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7139"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7138"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7134"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7133"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7130"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7129"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7123"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7122"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7121"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7120"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7116"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7115"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7114"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7113"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7111"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7110"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7107"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7105"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7101"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7099"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7139">
    <title>qt4: Keep page rotation into account when normalizingannotation coords</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7139</link>
    <description>&lt;pre&gt;qt4: Keep page rotation into account when normalizing annotation coords

If the page is rotated by 90 or 270 degrees, width and height need to be 
swapped ( just like in Page::pageSizeF() ).

Fabio
_______________________________________________
poppler mailing list
poppler&amp;lt; at &amp;gt;lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/poppler
&lt;/pre&gt;</description>
    <dc:creator>Fabio D'Urso</dc:creator>
    <dc:date>2012-05-24T21:48:59</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7138">
    <title>poppler/Annot.cc poppler/Annot.h poppler/Page.ccpoppler/Page.h qt4/src</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7138</link>
    <description>&lt;pre&gt; poppler/Annot.cc              |   40 ++++++++++++++++++++++++++++++++++------
 poppler/Annot.h               |   13 +++++++++----
 poppler/Page.cc               |    7 ++++---
 poppler/Page.h                |    2 +-
 qt4/src/poppler-annotation.cc |    8 --------
 5 files changed, 48 insertions(+), 22 deletions(-)

New commits:
commit ba6406222f828e354323223fc4bdb01c1726fb49
Author: Fabio D'Urso &amp;lt;fabiodurso&amp;lt; at &amp;gt;hotmail.it&amp;gt;
Date:   Mon May 21 18:16:06 2012 +0200

    Added Annot::removeReferencedObjects + Always set annotations' page field
    
    - Now Page::removeAnnot calls Annot::removeReferencedObjects, which takes care of
      removing referenced objects (such as the annot popup and the appearance streams).
    - Previously, Annot's page field was set only if the annotation dictionary
      contained /P

diff --git a/poppler/Annot.cc b/poppler/Annot.cc
index 8e1e760..9778bd2 100644
--- a/poppler/Annot.cc
+++ b/poppler/Annot.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1185,6 +1185,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void Annot::initialize(PDFDoc *docA, Dict *dict) {
   }
   obj1.free();
 
+  // Note: This value is overwritten by Annots ctor
   if (dict-&amp;gt;lookupNF("P", &amp;amp;obj1)-&amp;gt;isRef()) {
     Ref ref = obj1.getRef();
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1416,13 +1417,22 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void Annot::setColor(AnnotColor *new_color) {
   }
 }
 
-void Annot::setPage(Ref *pageRef, int pageIndex)
-{
+void Annot::setPage(int pageIndex, GBool updateP) {
+  Page *pageobj = doc-&amp;gt;getPage(pageIndex);
   Object obj1;
 
-  obj1.initRef(pageRef-&amp;gt;num, pageRef-&amp;gt;gen);
-  update("P", &amp;amp;obj1);
-  page = pageIndex;
+  if (pageobj) {
+    Ref pageRef = pageobj-&amp;gt;getRef();
+    obj1.initRef(pageRef.num, pageRef.gen);
+    page = pageIndex;
+  } else {
+    obj1.initNull();
+    page = 0;
+  }
+
+  if (updateP) {
+    update("P", &amp;amp;obj1);
+  }
 }
 
 void Annot::setAppearanceState(const char *state) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1484,6 +1494,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void Annot::readArrayNum(Object *pdfArray, int key, double *value) {
   valueObject.free();
 }
 
+void Annot::removeReferencedObjects() {
+  // Remove appearance streams (if any)
+  invalidateAppearance();
+}
+
 void Annot::incRefCnt() {
   refCnt++;
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1934,6 +1949,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void AnnotMarkup::setDate(GooString *new_date) {
   update ("CreationDate", &amp;amp;obj1);
 }
 
+void AnnotMarkup::removeReferencedObjects() {
+  Page *pageobj = doc-&amp;gt;getPage(page);
+  assert(pageobj != NULL); // We're called when removing an annot from a page
+
+  // Remove popup
+  if (popup) {
+    pageobj-&amp;gt;removeAnnot(popup);
+  }
+
+  Annot::removeReferencedObjects();
+}
+
 //------------------------------------------------------------------------
 // AnnotText
 //------------------------------------------------------------------------
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -6400,7 +6427,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; Annot3D::Activation::Activation(Dict *dict) {
 // Annots
 //------------------------------------------------------------------------
 
-Annots::Annots(PDFDoc *docA, Object *annotsObj) {
+Annots::Annots(PDFDoc *docA, int page, Object *annotsObj) {
   Annot *annot;
   Object obj1;
   int i;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -6421,6 +6448,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; Annots::Annots(PDFDoc *docA, Object *annotsObj) {
         annot = createAnnot (obj1.getDict(), &amp;amp;obj2);
         if (annot) {
           if (annot-&amp;gt;isOk()) {
+            annot-&amp;gt;setPage(page, gFalse); // Don't change /P
             appendAnnot(annot);
           }
           annot-&amp;gt;decRefCnt();
diff --git a/poppler/Annot.h b/poppler/Annot.h
index 04a1301..0d20cc7 100644
--- a/poppler/Annot.h
+++ b/poppler/Annot.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -43,6 +43,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class Gfx;
 class CharCodeToUnicode;
 class GfxFont;
 class GfxResources;
+class Page;
 class PDFDoc;
 class Form;
 class FormWidget;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -471,6 +472,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; private:
 //------------------------------------------------------------------------
 
 class Annot {
+  friend class Annots;
+  friend class Page;
 public:
   enum AnnotFlag {
     flagUnknown        = 0x0000,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -551,8 +554,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public:
   // new_color. 
   void setColor(AnnotColor *new_color);
 
-  void setPage(Ref *pageRef, int pageIndex);
-
   void setAppearanceState(const char *state);
 
   // Delete appearance streams and reset appearance state
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -587,10 +588,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; private:
   // write vStr[i:j[ in appearBuf
 
   void initialize (PDFDoc *docA, Dict *dict);
+  void setPage (int new_page, GBool updateP); // Called by Page::addAnnot and Annots ctor
 
 
 protected:
   virtual ~Annot();
+  virtual void removeReferencedObjects(); // Called by Page::removeAnnot
   void setColor(AnnotColor *color, GBool fill);
   void drawCircle(double cx, double cy, double r, GBool fill);
   void drawCircleTopLeft(double cx, double cy, double r);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -699,6 +702,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public:
   void setDate(GooString *new_date);
 
 protected:
+  virtual void removeReferencedObjects();
+
   GooString *label;             // T            (Default autor)
   AnnotPopup *popup;            // Popup
   double opacity;               // CA           (Default 1.0)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1365,8 +1370,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; private:
 class Annots {
 public:
 
-  // Build a list of Annot objects.
-  Annots(PDFDoc *docA, Object *annotsObj);
+  // Build a list of Annot objects and call setPage on them
+  Annots(PDFDoc *docA, int page, Object *annotsObj);
 
   ~Annots();
 
diff --git a/poppler/Page.cc b/poppler/Page.cc
index eccc198..87bc3a4 100644
--- a/poppler/Page.cc
+++ b/poppler/Page.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -348,7 +348,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; Page::~Page() {
 Annots *Page::getAnnots() {
   if (!annots) {
     Object obj;
-    annots = new Annots(doc, getAnnots(&amp;amp;obj));
+    annots = new Annots(doc, num, getAnnots(&amp;amp;obj));
     obj.free();
   }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -391,8 +391,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void Page::addAnnot(Annot *annot) {
   }
 
   annots-&amp;gt;appendAnnot(annot);
-
-  annot-&amp;gt;setPage(&amp;amp;pageRef, num);
+  annot-&amp;gt;setPage(num, gTrue);
 }
 
 void Page::removeAnnot(Annot *annot) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -428,6 +427,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void Page::removeAnnot(Annot *annot) {
     }
   }
   annArray.free();
+  annot-&amp;gt;removeReferencedObjects(); // Note: Might recurse in removeAnnot again
+  annot-&amp;gt;setPage(0, gFalse);
 }
 
 Links *Page::getLinks() {
diff --git a/poppler/Page.h b/poppler/Page.h
index e2e666c..78cedc4 100644
--- a/poppler/Page.h
+++ b/poppler/Page.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -164,6 +164,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public:
   Dict *getPieceInfo() { return attrs-&amp;gt;getPieceInfo(); }
   Dict *getSeparationInfo() { return attrs-&amp;gt;getSeparationInfo(); }
   PDFDoc *getDoc() { return doc; }
+  Ref getRef() { return pageRef; }
 
   // Get resource dictionary.
   Dict *getResourceDict() { return attrs-&amp;gt;getResourceDict(); }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -173,7 +174,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public:
   // Add a new annotation to the page
   void addAnnot(Annot *annot);
   // Remove an existing annotation from the page
-  // Note: Caller is responsible for deleting popup and appearance streams too
   void removeAnnot(Annot *annot);
 
   // Return a list of links.
diff --git a/qt4/src/poppler-annotation.cc b/qt4/src/poppler-annotation.cc
index 4d7cd84..59db52d 100644
--- a/qt4/src/poppler-annotation.cc
+++ b/qt4/src/poppler-annotation.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -510,14 +510,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void AnnotationPrivate::removeAnnotationFromPage(::Page *pdfPage, const Annotati
         return;
     }
 
-    // Remove popup window
-    AnnotMarkup *markupann = dynamic_cast&amp;lt;AnnotMarkup*&amp;gt;(ann-&amp;gt;d_ptr-&amp;gt;pdfAnnot);
-    if (markupann &amp;amp;&amp;amp; markupann-&amp;gt;getPopup())
-        pdfPage-&amp;gt;removeAnnot(markupann-&amp;gt;getPopup());
-
-    // Remove appearance streams (if any)
-    ann-&amp;gt;d_ptr-&amp;gt;pdfAnnot-&amp;gt;invalidateAppearance();
-
     // Remove annotation
     pdfPage-&amp;gt;removeAnnot(ann-&amp;gt;d_ptr-&amp;gt;pdfAnnot);
&lt;/pre&gt;</description>
    <dc:creator>Carlos Garcia Campos</dc:creator>
    <dc:date>2012-05-24T17:49:31</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7134">
    <title>Branch 'poppler-0.20' - 3 commits -glib/poppler-document.cc poppler/FontInfo.ccpoppler/GlobalParams.cc poppler/GlobalParamsWin.cc</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7134</link>
    <description>&lt;pre&gt; glib/poppler-document.cc   |    4 +--
 poppler/FontInfo.cc        |    1 
 poppler/GlobalParams.cc    |   58 ++++++++++++++++++++++++---------------------
 poppler/GlobalParamsWin.cc |    5 +++
 4 files changed, 39 insertions(+), 29 deletions(-)

New commits:
commit 9904b8f10abf068a7816bd90976ccbb320387645
Author: Adrian Johnson &amp;lt;ajohnson&amp;lt; at &amp;gt;redneon.com&amp;gt;
Date:   Thu May 24 18:24:48 2012 +0930

    glib docs: fix typo

diff --git a/glib/poppler-document.cc b/glib/poppler-document.cc
index 2b01c29..24badd9 100644
--- a/glib/poppler-document.cc
+++ b/glib/poppler-document.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1721,7 +1721,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; poppler_fonts_iter_get_name (PopplerFontsIter *iter)
  * The name of the substitute font of the font associated with &amp;lt; at &amp;gt;iter or %NULL if
  * the font is embedded
  *
- * Returns: the name of the substitute font or %NULL y font is emebedded
+ * Returns: the name of the substitute font or %NULL if font is embedded
  *
  * Since: 0.20
  */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1748,7 +1748,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; poppler_fonts_iter_get_substitute_name (PopplerFontsIter *iter)
  * The filename of the font associated with &amp;lt; at &amp;gt;iter or %NULL if
  * the font is embedded
  *
- * Returns: the filename of the font or %NULL y font is emebedded
+ * Returns: the filename of the font or %NULL if font is embedded
  */
 const char *
 poppler_fonts_iter_get_file_name (PopplerFontsIter *iter)
commit 028f580056f99719cfb8af7bbe8184ceac02cb16
Author: Adrian Johnson &amp;lt;ajohnson&amp;lt; at &amp;gt;redneon.com&amp;gt;
Date:   Sun May 13 21:36:36 2012 +0930

    add sustitute font name to GlobalParamsWin32 to fix compilation

diff --git a/poppler/GlobalParamsWin.cc b/poppler/GlobalParamsWin.cc
index d8065e0..b8c3d0c 100644
--- a/poppler/GlobalParamsWin.cc
+++ b/poppler/GlobalParamsWin.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -313,6 +313,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; SysFontInfo *SysFontList::makeWindowsFont(char *name, int fontNum,
   char c;
   int i;
   SysFontType type;
+  GooString substituteName;
 
   n = strlen(name);
   bold = italic = oblique = fixedWidth = gFalse;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -380,7 +381,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; SysFontInfo *SysFontList::makeWindowsFont(char *name, int fontNum,
   }
 
   return new SysFontInfo(s, bold, italic, oblique, fixedWidth,
-                         new GooString(path), type, fontNum);
+                         new GooString(path), type, fontNum, substituteName.copy());
 }
 
 static GooString* replaceSuffix(GooString *path,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -570,6 +571,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
     path = fi-&amp;gt;path-&amp;gt;copy();
     *type = fi-&amp;gt;type;
     *fontNum = fi-&amp;gt;fontNum;
+    if (substituteFontName)
+      substituteFontName.Set(fi-&amp;gt;substituteName-&amp;gt;getCString());
   } else {
     GooString *substFontName = new GooString(findSubstituteName(font, fontFiles,
                                                                 substFiles,
commit 1916d000a86336213ffd6e9bd44ce873e8955895
Author: Adrian Johnson &amp;lt;ajohnson&amp;lt; at &amp;gt;redneon.com&amp;gt;
Date:   Sat May 12 16:31:38 2012 +0930

    Include substitute font name in system font cache
    
    Bug 49826

diff --git a/poppler/FontInfo.cc b/poppler/FontInfo.cc
index 4f30f05..35d5f5f 100644
--- a/poppler/FontInfo.cc
+++ b/poppler/FontInfo.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -224,6 +224,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; FontInfo::FontInfo(FontInfo&amp;amp; f) {
   name = f.name ? f.name-&amp;gt;copy() : NULL;
   file = f.file ? f.file-&amp;gt;copy() : NULL;
   encoding = f.encoding ? f.encoding-&amp;gt;copy() : NULL;
+  substituteName = f.substituteName ? f.substituteName-&amp;gt;copy() : NULL;
   type = f.type;
   emb = f.emb;
   subset = f.subset;
diff --git a/poppler/GlobalParams.cc b/poppler/GlobalParams.cc
index 64d6133..76394ca 100644
--- a/poppler/GlobalParams.cc
+++ b/poppler/GlobalParams.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -214,9 +214,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public:
   GooString *path;
   SysFontType type;
   int fontNum;// for TrueType collections
+  GooString *substituteName;
 
   SysFontInfo(GooString *nameA, GBool boldA, GBool italicA, GBool obliqueA, GBool fixedWidthA,
-      GooString *pathA, SysFontType typeA, int fontNumA);
+      GooString *pathA, SysFontType typeA, int fontNumA, GooString *substituteNameA);
   ~SysFontInfo();
   GBool match(SysFontInfo *fi);
   GBool match(GooString *nameA, GBool boldA, GBool italicA, GBool obliqueA, GBool fixedWidthA);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -224,7 +225,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public:
 };
 
 SysFontInfo::SysFontInfo(GooString *nameA, GBool boldA, GBool italicA, GBool obliqueA, GBool fixedWidthA,
- GooString *pathA, SysFontType typeA, int fontNumA) {
+ GooString *pathA, SysFontType typeA, int fontNumA, GooString *substituteNameA) {
   name = nameA;
   bold = boldA;
   italic = italicA;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -233,11 +234,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; SysFontInfo::SysFontInfo(GooString *nameA, GBool boldA, GBool italicA, GBool obl
   path = pathA;
   type = typeA;
   fontNum = fontNumA;
+  substituteName = substituteNameA;
 }
 
 SysFontInfo::~SysFontInfo() {
   delete name;
   delete path;
+  delete substituteName;
 }
 
 GBool SysFontInfo::match(SysFontInfo *fi) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1184,6 +1187,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
   FcPattern *p=0;
   GooString *path = NULL;
   GooString *fontName = font-&amp;gt;getName();
+  GooString substituteName;
   if (!fontName) return NULL;
   lockGlobalParams;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1191,6 +1195,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
     path = fi-&amp;gt;path-&amp;gt;copy();
     *type = fi-&amp;gt;type;
     *fontNum = fi-&amp;gt;fontNum;
+    substituteName.Set(fi-&amp;gt;substituteName-&amp;gt;getCString());
   } else {
     FcChar8* s;
     char * ext;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1235,28 +1240,26 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
   }
 }
 FcChar8* s2;
-if (substituteFontName) {
-  res = FcPatternGetString(set-&amp;gt;fonts[i], FC_FULLNAME, 0, &amp;amp;s2);
-  if (res == FcResultMatch &amp;amp;&amp;amp; s2) {
-    substituteFontName-&amp;gt;Set((char*)s2);
-  } else {
-    // fontconfig does not extract fullname for some fonts
-    // create the fullname from family and style
-    res = FcPatternGetString(set-&amp;gt;fonts[i], FC_FAMILY, 0, &amp;amp;s2);
-    if (res == FcResultMatch &amp;amp;&amp;amp; s2) {
-      substituteFontName-&amp;gt;Set((char*)s2);
-      res = FcPatternGetString(set-&amp;gt;fonts[i], FC_STYLE, 0, &amp;amp;s2);
-      if (res == FcResultMatch &amp;amp;&amp;amp; s2) {
-GooString *style = new GooString((char*)s2);
-if (style-&amp;gt;cmp("Regular") != 0) {
-  substituteFontName-&amp;gt;append(" ");
-  substituteFontName-&amp;gt;append(style);
-}
-delete style;
-      }
-    }
-  }
-}
+        res = FcPatternGetString(set-&amp;gt;fonts[i], FC_FULLNAME, 0, &amp;amp;s2);
+        if (res == FcResultMatch &amp;amp;&amp;amp; s2) {
+          substituteName.Set((char*)s2);
+        } else {
+          // fontconfig does not extract fullname for some fonts
+          // create the fullname from family and style
+          res = FcPatternGetString(set-&amp;gt;fonts[i], FC_FAMILY, 0, &amp;amp;s2);
+          if (res == FcResultMatch &amp;amp;&amp;amp; s2) {
+            substituteName.Set((char*)s2);
+            res = FcPatternGetString(set-&amp;gt;fonts[i], FC_STYLE, 0, &amp;amp;s2);
+            if (res == FcResultMatch &amp;amp;&amp;amp; s2) {
+              GooString *style = new GooString((char*)s2);
+              if (style-&amp;gt;cmp("Regular") != 0) {
+                substituteName.append(" ");
+                substituteName.append(style);
+              }
+              delete style;
+            }
+          }
+        }
 ext = strrchr((char*)s,'.');
 if (!ext)
   continue;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1281,7 +1284,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
   *type = (!strncasecmp(ext,".ttc",4)) ? sysFontTTC : sysFontTTF;
   FcPatternGetInteger(set-&amp;gt;fonts[i], FC_INDEX, 0, fontNum);
   fi = new SysFontInfo(fontName-&amp;gt;copy(), bold, italic, oblique, font-&amp;gt;isFixedWidth(),
-       new GooString((char*)s), *type, *fontNum);
+       new GooString((char*)s), *type, *fontNum, substituteName.copy());
   sysFonts-&amp;gt;addFcFont(fi);
   path = new GooString((char*)s);
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1306,7 +1309,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
   *type = (!strncasecmp(ext,".pfa",4)) ? sysFontPFA : sysFontPFB;
   FcPatternGetInteger(set-&amp;gt;fonts[i], FC_INDEX, 0, fontNum);
   fi = new SysFontInfo(fontName-&amp;gt;copy(), bold, italic, oblique, font-&amp;gt;isFixedWidth(),
-       new GooString((char*)s), *type, *fontNum);
+       new GooString((char*)s), *type, *fontNum, substituteName.copy());
   sysFonts-&amp;gt;addFcFont(fi);
   path = new GooString((char*)s);
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1329,6 +1332,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
     *type = fi-&amp;gt;type;
     *fontNum = fi-&amp;gt;fontNum;
   }
+  if (substituteFontName) {
+    substituteFontName-&amp;gt;Set(substituteName.getCString());
+  }
 fin:
   if (p)
     FcPatternDestroy(p);
&lt;/pre&gt;</description>
    <dc:creator>Adrian Johnson</dc:creator>
    <dc:date>2012-05-24T09:01:24</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7133">
    <title>3 commits - glib/poppler-document.cc poppler/FontInfo.ccpoppler/GlobalParams.cc poppler/GlobalParamsWin.cc</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7133</link>
    <description>&lt;pre&gt; glib/poppler-document.cc   |    4 +--
 poppler/FontInfo.cc        |    1 
 poppler/GlobalParams.cc    |   58 ++++++++++++++++++++++++---------------------
 poppler/GlobalParamsWin.cc |    5 +++
 4 files changed, 39 insertions(+), 29 deletions(-)

New commits:
commit b47d38e2ccd8563394df89765e277bde95730052
Author: Adrian Johnson &amp;lt;ajohnson&amp;lt; at &amp;gt;redneon.com&amp;gt;
Date:   Thu May 24 18:24:48 2012 +0930

    glib docs: fix typo

diff --git a/glib/poppler-document.cc b/glib/poppler-document.cc
index d404fcd..e626a2a 100644
--- a/glib/poppler-document.cc
+++ b/glib/poppler-document.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1834,7 +1834,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; poppler_fonts_iter_get_name (PopplerFontsIter *iter)
  * The name of the substitute font of the font associated with &amp;lt; at &amp;gt;iter or %NULL if
  * the font is embedded
  *
- * Returns: the name of the substitute font or %NULL y font is emebedded
+ * Returns: the name of the substitute font or %NULL if font is embedded
  *
  * Since: 0.20
  */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1861,7 +1861,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; poppler_fonts_iter_get_substitute_name (PopplerFontsIter *iter)
  * The filename of the font associated with &amp;lt; at &amp;gt;iter or %NULL if
  * the font is embedded
  *
- * Returns: the filename of the font or %NULL y font is emebedded
+ * Returns: the filename of the font or %NULL if font is embedded
  */
 const char *
 poppler_fonts_iter_get_file_name (PopplerFontsIter *iter)
commit 14a29dbff585cbe55247431a346c2ac3e12473fe
Author: Adrian Johnson &amp;lt;ajohnson&amp;lt; at &amp;gt;redneon.com&amp;gt;
Date:   Sun May 13 21:36:36 2012 +0930

    add sustitute font name to GlobalParamsWin32 to fix compilation

diff --git a/poppler/GlobalParamsWin.cc b/poppler/GlobalParamsWin.cc
index d8065e0..b8c3d0c 100644
--- a/poppler/GlobalParamsWin.cc
+++ b/poppler/GlobalParamsWin.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -313,6 +313,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; SysFontInfo *SysFontList::makeWindowsFont(char *name, int fontNum,
   char c;
   int i;
   SysFontType type;
+  GooString substituteName;
 
   n = strlen(name);
   bold = italic = oblique = fixedWidth = gFalse;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -380,7 +381,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; SysFontInfo *SysFontList::makeWindowsFont(char *name, int fontNum,
   }
 
   return new SysFontInfo(s, bold, italic, oblique, fixedWidth,
-                         new GooString(path), type, fontNum);
+                         new GooString(path), type, fontNum, substituteName.copy());
 }
 
 static GooString* replaceSuffix(GooString *path,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -570,6 +571,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
     path = fi-&amp;gt;path-&amp;gt;copy();
     *type = fi-&amp;gt;type;
     *fontNum = fi-&amp;gt;fontNum;
+    if (substituteFontName)
+      substituteFontName.Set(fi-&amp;gt;substituteName-&amp;gt;getCString());
   } else {
     GooString *substFontName = new GooString(findSubstituteName(font, fontFiles,
                                                                 substFiles,
commit 7436b2c8a853f5121eb7dd13168ab997f1cf7d80
Author: Adrian Johnson &amp;lt;ajohnson&amp;lt; at &amp;gt;redneon.com&amp;gt;
Date:   Sat May 12 16:31:38 2012 +0930

    Include substitute font name in system font cache
    
    Bug 49826

diff --git a/poppler/FontInfo.cc b/poppler/FontInfo.cc
index 4f30f05..35d5f5f 100644
--- a/poppler/FontInfo.cc
+++ b/poppler/FontInfo.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -224,6 +224,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; FontInfo::FontInfo(FontInfo&amp;amp; f) {
   name = f.name ? f.name-&amp;gt;copy() : NULL;
   file = f.file ? f.file-&amp;gt;copy() : NULL;
   encoding = f.encoding ? f.encoding-&amp;gt;copy() : NULL;
+  substituteName = f.substituteName ? f.substituteName-&amp;gt;copy() : NULL;
   type = f.type;
   emb = f.emb;
   subset = f.subset;
diff --git a/poppler/GlobalParams.cc b/poppler/GlobalParams.cc
index 13053ac..098e4a4 100644
--- a/poppler/GlobalParams.cc
+++ b/poppler/GlobalParams.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -214,9 +214,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public:
   GooString *path;
   SysFontType type;
   int fontNum;// for TrueType collections
+  GooString *substituteName;
 
   SysFontInfo(GooString *nameA, GBool boldA, GBool italicA, GBool obliqueA, GBool fixedWidthA,
-      GooString *pathA, SysFontType typeA, int fontNumA);
+      GooString *pathA, SysFontType typeA, int fontNumA, GooString *substituteNameA);
   ~SysFontInfo();
   GBool match(SysFontInfo *fi);
   GBool match(GooString *nameA, GBool boldA, GBool italicA, GBool obliqueA, GBool fixedWidthA);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -224,7 +225,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public:
 };
 
 SysFontInfo::SysFontInfo(GooString *nameA, GBool boldA, GBool italicA, GBool obliqueA, GBool fixedWidthA,
- GooString *pathA, SysFontType typeA, int fontNumA) {
+ GooString *pathA, SysFontType typeA, int fontNumA, GooString *substituteNameA) {
   name = nameA;
   bold = boldA;
   italic = italicA;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -233,11 +234,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; SysFontInfo::SysFontInfo(GooString *nameA, GBool boldA, GBool italicA, GBool obl
   path = pathA;
   type = typeA;
   fontNum = fontNumA;
+  substituteName = substituteNameA;
 }
 
 SysFontInfo::~SysFontInfo() {
   delete name;
   delete path;
+  delete substituteName;
 }
 
 GBool SysFontInfo::match(SysFontInfo *fi) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1163,6 +1166,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
   FcPattern *p=0;
   GooString *path = NULL;
   GooString *fontName = font-&amp;gt;getName();
+  GooString substituteName;
   if (!fontName) return NULL;
   lockGlobalParams;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1170,6 +1174,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
     path = fi-&amp;gt;path-&amp;gt;copy();
     *type = fi-&amp;gt;type;
     *fontNum = fi-&amp;gt;fontNum;
+    substituteName.Set(fi-&amp;gt;substituteName-&amp;gt;getCString());
   } else {
     FcChar8* s;
     char * ext;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1214,28 +1219,26 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
   }
 }
 FcChar8* s2;
-if (substituteFontName) {
-  res = FcPatternGetString(set-&amp;gt;fonts[i], FC_FULLNAME, 0, &amp;amp;s2);
-  if (res == FcResultMatch &amp;amp;&amp;amp; s2) {
-    substituteFontName-&amp;gt;Set((char*)s2);
-  } else {
-    // fontconfig does not extract fullname for some fonts
-    // create the fullname from family and style
-    res = FcPatternGetString(set-&amp;gt;fonts[i], FC_FAMILY, 0, &amp;amp;s2);
-    if (res == FcResultMatch &amp;amp;&amp;amp; s2) {
-      substituteFontName-&amp;gt;Set((char*)s2);
-      res = FcPatternGetString(set-&amp;gt;fonts[i], FC_STYLE, 0, &amp;amp;s2);
-      if (res == FcResultMatch &amp;amp;&amp;amp; s2) {
-GooString *style = new GooString((char*)s2);
-if (style-&amp;gt;cmp("Regular") != 0) {
-  substituteFontName-&amp;gt;append(" ");
-  substituteFontName-&amp;gt;append(style);
-}
-delete style;
-      }
-    }
-  }
-}
+        res = FcPatternGetString(set-&amp;gt;fonts[i], FC_FULLNAME, 0, &amp;amp;s2);
+        if (res == FcResultMatch &amp;amp;&amp;amp; s2) {
+          substituteName.Set((char*)s2);
+        } else {
+          // fontconfig does not extract fullname for some fonts
+          // create the fullname from family and style
+          res = FcPatternGetString(set-&amp;gt;fonts[i], FC_FAMILY, 0, &amp;amp;s2);
+          if (res == FcResultMatch &amp;amp;&amp;amp; s2) {
+            substituteName.Set((char*)s2);
+            res = FcPatternGetString(set-&amp;gt;fonts[i], FC_STYLE, 0, &amp;amp;s2);
+            if (res == FcResultMatch &amp;amp;&amp;amp; s2) {
+              GooString *style = new GooString((char*)s2);
+              if (style-&amp;gt;cmp("Regular") != 0) {
+                substituteName.append(" ");
+                substituteName.append(style);
+              }
+              delete style;
+            }
+          }
+        }
 ext = strrchr((char*)s,'.');
 if (!ext)
   continue;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1260,7 +1263,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
   *type = (!strncasecmp(ext,".ttc",4)) ? sysFontTTC : sysFontTTF;
   FcPatternGetInteger(set-&amp;gt;fonts[i], FC_INDEX, 0, fontNum);
   fi = new SysFontInfo(fontName-&amp;gt;copy(), bold, italic, oblique, font-&amp;gt;isFixedWidth(),
-       new GooString((char*)s), *type, *fontNum);
+       new GooString((char*)s), *type, *fontNum, substituteName.copy());
   sysFonts-&amp;gt;addFcFont(fi);
   path = new GooString((char*)s);
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1285,7 +1288,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
   *type = (!strncasecmp(ext,".pfa",4)) ? sysFontPFA : sysFontPFB;
   FcPatternGetInteger(set-&amp;gt;fonts[i], FC_INDEX, 0, fontNum);
   fi = new SysFontInfo(fontName-&amp;gt;copy(), bold, italic, oblique, font-&amp;gt;isFixedWidth(),
-       new GooString((char*)s), *type, *fontNum);
+       new GooString((char*)s), *type, *fontNum, substituteName.copy());
   sysFonts-&amp;gt;addFcFont(fi);
   path = new GooString((char*)s);
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1308,6 +1311,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *GlobalParams::findSystemFontFile(GfxFont *font,
     *type = fi-&amp;gt;type;
     *fontNum = fi-&amp;gt;fontNum;
   }
+  if (substituteFontName) {
+    substituteFontName-&amp;gt;Set(substituteName.getCString());
+  }
 fin:
   if (p)
     FcPatternDestroy(p);
&lt;/pre&gt;</description>
    <dc:creator>Adrian Johnson</dc:creator>
    <dc:date>2012-05-24T08:56:51</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7130">
    <title>Branch 'poppler-0.20' - qt4/src</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7130</link>
    <description>&lt;pre&gt; qt4/src/poppler-annotation.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 1c6e84555572a6bf3a2e3fbe9a54b40f11c122ad
Author: Fabio D'Urso &amp;lt;fabiodurso&amp;lt; at &amp;gt;hotmail.it&amp;gt;
Date:   Fri May 18 16:22:46 2012 +0200

    qt4: Make TextAnnotation ctor public

diff --git a/qt4/src/poppler-annotation.h b/qt4/src/poppler-annotation.h
index b897603..e511ec0 100644
--- a/qt4/src/poppler-annotation.h
+++ b/qt4/src/poppler-annotation.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -302,6 +302,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class POPPLER_QT4_EXPORT TextAnnotation : public Annotation
     enum TextType { Linked, InPlace };
     enum InplaceIntent { Unknown, Callout, TypeWriter };
 
+    TextAnnotation( TextType type );
     virtual ~TextAnnotation();
     virtual SubType subType() const;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -360,7 +361,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class POPPLER_QT4_EXPORT TextAnnotation : public Annotation
     void setInplaceIntent( InplaceIntent intent );
 
   private:
-    TextAnnotation( TextType type );
     TextAnnotation( const QDomNode &amp;amp;node );
     TextAnnotation( TextAnnotationPrivate &amp;amp;dd );
     virtual void store( QDomNode &amp;amp;parentNode, QDomDocument &amp;amp;document ) const;
&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-23T18:25:03</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7129">
    <title>qt4/src</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7129</link>
    <description>&lt;pre&gt; qt4/src/poppler-annotation.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit fe28614e7aab6e029f4b420353b67a7eea24de36
Author: Fabio D'Urso &amp;lt;fabiodurso&amp;lt; at &amp;gt;hotmail.it&amp;gt;
Date:   Fri May 18 16:22:46 2012 +0200

    qt4: Make TextAnnotation ctor public

diff --git a/qt4/src/poppler-annotation.h b/qt4/src/poppler-annotation.h
index b897603..e511ec0 100644
--- a/qt4/src/poppler-annotation.h
+++ b/qt4/src/poppler-annotation.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -302,6 +302,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class POPPLER_QT4_EXPORT TextAnnotation : public Annotation
     enum TextType { Linked, InPlace };
     enum InplaceIntent { Unknown, Callout, TypeWriter };
 
+    TextAnnotation( TextType type );
     virtual ~TextAnnotation();
     virtual SubType subType() const;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -360,7 +361,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class POPPLER_QT4_EXPORT TextAnnotation : public Annotation
     void setInplaceIntent( InplaceIntent intent );
 
   private:
-    TextAnnotation( TextType type );
     TextAnnotation( const QDomNode &amp;amp;node );
     TextAnnotation( TextAnnotationPrivate &amp;amp;dd );
     virtual void store( QDomNode &amp;amp;parentNode, QDomDocument &amp;amp;document ) const;
&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-23T18:02:52</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7123">
    <title>Branch 'poppler-0.20' - utils/pdfseparate.1</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7123</link>
    <description>&lt;pre&gt; utils/pdfseparate.1 |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

New commits:
commit 8e504bf2543621973fdaddbd29055ce435540146
Author: Ville SkyttÃ¤ &amp;lt;ville.skytta&amp;lt; at &amp;gt;iki.fi&amp;gt;
Date:   Wed May 16 23:49:01 2012 +0300

    pdfseparate.1: Syntax fixes.

diff --git a/utils/pdfseparate.1 b/utils/pdfseparate.1
index 1eca9d2..077faec 100644
--- a/utils/pdfseparate.1
+++ b/utils/pdfseparate.1
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -13,10 +13,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; extract single pages from a Portable Document Format (PDF).
 pdfseparate reads the PDF file
 .IR PDF-file ,
 extracts one or more pages, and writes one PDF file for each page to
-.IR PDF-page-pattern,
+.IR PDF-page-pattern ,
 PDF-page-pattern should contain
-.B %d
-. %d is replaced by the page number.
+.BR %d .
+%d is replaced by the page number.
 .TP
 The PDF-file should not be encrypted.
 .SH OPTIONS
_______________________________________________
poppler mailing list
poppler&amp;lt; at &amp;gt;lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/poppler
&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-21T21:05:22</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7122">
    <title>utils/pdfseparate.1</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7122</link>
    <description>&lt;pre&gt; utils/pdfseparate.1 |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

New commits:
commit 918456372548810c9efbf0533fa155034dd081f2
Author: Ville SkyttÃ¤ &amp;lt;ville.skytta&amp;lt; at &amp;gt;iki.fi&amp;gt;
Date:   Wed May 16 23:49:01 2012 +0300

    pdfseparate.1: Syntax fixes.

diff --git a/utils/pdfseparate.1 b/utils/pdfseparate.1
index 1eca9d2..077faec 100644
--- a/utils/pdfseparate.1
+++ b/utils/pdfseparate.1
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -13,10 +13,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; extract single pages from a Portable Document Format (PDF).
 pdfseparate reads the PDF file
 .IR PDF-file ,
 extracts one or more pages, and writes one PDF file for each page to
-.IR PDF-page-pattern,
+.IR PDF-page-pattern ,
 PDF-page-pattern should contain
-.B %d
-. %d is replaced by the page number.
+.BR %d .
+%d is replaced by the page number.
 .TP
 The PDF-file should not be encrypted.
 .SH OPTIONS
_______________________________________________
poppler mailing list
poppler&amp;lt; at &amp;gt;lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/poppler
&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-21T21:03:58</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7121">
    <title>cmake/modules glib/demo test/CMakeLists.txt</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7121</link>
    <description>&lt;pre&gt; cmake/modules/FindGTK.cmake |    8 ++++----
 glib/demo/CMakeLists.txt    |    6 +++---
 test/CMakeLists.txt         |    6 +++---
 3 files changed, 10 insertions(+), 10 deletions(-)

New commits:
commit 892e486addcbcad619613c7be1ca692a0d36d6e5
Author: Albert Astals Cid &amp;lt;aacid&amp;lt; at &amp;gt;kde.org&amp;gt;
Date:   Mon May 21 20:28:42 2012 +0200

    Compile++

diff --git a/cmake/modules/FindGTK.cmake b/cmake/modules/FindGTK.cmake
index 4d66bd3..1a32483 100644
--- a/cmake/modules/FindGTK.cmake
+++ b/cmake/modules/FindGTK.cmake
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2,8 +2,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 # Once done this will define
 #
 #  GTK_FOUND - system has GTK
-#  GTK2_CFLAGS - the GTK CFlags
-#  GTK2_LIBRARIES - Link these to use GTK
+#  GTK3_CFLAGS - the GTK CFlags
+#  GTK3_LIBRARIES - Link these to use GTK
 #
 # Copyright 2008-2010 Pino Toscano, &amp;lt;pino&amp;lt; at &amp;gt;kde.org&amp;gt;
 #
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -15,8 +15,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; include(FindPackageHandleStandardArgs)
 if (NOT WIN32)
   find_package(PkgConfig REQUIRED)
 
-  pkg_check_modules(GTK2 "gtk+-2.0&amp;gt;=2.14" "gdk-pixbuf-2.0" "gthread-2.0" "gio-2.0")
+  pkg_check_modules(GTK3 "gtk+-3.0&amp;gt;=3.0" "gdk-pixbuf-2.0" "gthread-2.0" "gio-2.0")
 
-  find_package_handle_standard_args(GTK DEFAULT_MSG GTK2_LIBRARIES GTK2_CFLAGS)
+  find_package_handle_standard_args(GTK DEFAULT_MSG GTK3_LIBRARIES GTK3_CFLAGS)
 
 endif(NOT WIN32)
diff --git a/glib/demo/CMakeLists.txt b/glib/demo/CMakeLists.txt
index 286fbd7..316371e 100644
--- a/glib/demo/CMakeLists.txt
+++ b/glib/demo/CMakeLists.txt
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,8 +1,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 include_directories(
-  ${GTK2_INCLUDE_DIRS}
+  ${GTK3_INCLUDE_DIRS}
 )
 
-add_definitions(${GTK2_CFLAGS_OTHER})
+add_definitions(${GTK3_CFLAGS_OTHER})
 
 set(poppler_glib_demo_SRCS
   main.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -25,4 +25,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; set(poppler_glib_demo_SRCS
   selections.c
 )
 poppler_add_test(poppler-glib-demo BUILD_GTK_TESTS ${poppler_glib_demo_SRCS})
-target_link_libraries(poppler-glib-demo poppler-glib ${GTK2_LIBRARIES})
+target_link_libraries(poppler-glib-demo poppler-glib ${GTK3_LIBRARIES})
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index cff715c..178b15e 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -17,7 +17,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; endif (ENABLE_SPLASH)
 
 if (GTK_FOUND)
 
-  add_definitions(${GTK2_CFLAGS})
+  add_definitions(${GTK3_CFLAGS})
 
   include_directories(
     ${CMAKE_SOURCE_DIR}/glib
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -28,7 +28,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; if (GTK_FOUND)
     gtk-test.cc
   )
   poppler_add_test(gtk-test BUILD_GTK_TESTS ${gtk_splash_test_SRCS})
-  target_link_libraries(gtk-test poppler-glib ${GTK2_LIBRARIES})
+  target_link_libraries(gtk-test poppler-glib ${GTK3_LIBRARIES})
 
   if (HAVE_CAIRO)
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -36,7 +36,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; if (GTK_FOUND)
       pdf-inspector.cc
     )
     poppler_add_test(pdf-inspector BUILD_GTK_TESTS ${pdf_inspector_SRCS})
-    target_link_libraries(pdf-inspector poppler-glib ${GTK2_LIBRARIES})
+    target_link_libraries(pdf-inspector poppler-glib ${GTK3_LIBRARIES})
 
   endif (HAVE_CAIRO)
&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-21T18:28:58</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7120">
    <title>glib/CMakeLists.txt</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7120</link>
    <description>&lt;pre&gt; glib/CMakeLists.txt |    2 ++
 1 file changed, 2 insertions(+)

New commits:
commit 794e89ed41d03997778fc4c59b7f1ba557b5e6b7
Author: Albert Astals Cid &amp;lt;aacid&amp;lt; at &amp;gt;kde.org&amp;gt;
Date:   Mon May 21 20:18:42 2012 +0200

    Compile

diff --git a/glib/CMakeLists.txt b/glib/CMakeLists.txt
index 92e23bd..9831fe7 100644
--- a/glib/CMakeLists.txt
+++ b/glib/CMakeLists.txt
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -69,6 +69,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; set(poppler_glib_SRCS
   poppler-movie.cc
   poppler-media.cc
   poppler.cc
+  poppler-cached-file-loader.cc
+  poppler-input-stream.cc
 )
 set(poppler_glib_generated_SRCS
   ${CMAKE_CURRENT_BINARY_DIR}/poppler-enums.c
&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-21T18:18:55</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7116">
    <title>glib/demo</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7116</link>
    <description>&lt;pre&gt; glib/demo/text.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 78e6c9905a52c0cd4bfc1e56874f50689f04a1c6
Author: Carlos Garcia Campos &amp;lt;carlosgc&amp;lt; at &amp;gt;gnome.org&amp;gt;
Date:   Sun May 20 12:11:27 2012 +0200

    glib-demo: Make text characters list fill and expand in text demo

diff --git a/glib/demo/text.c b/glib/demo/text.c
index 0d3781e..b05581d 100644
--- a/glib/demo/text.c
+++ b/glib/demo/text.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -398,7 +398,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_text_create_widget (PopplerDocument *document)
 gtk_container_add (GTK_CONTAINER (swindow), treeview);
 gtk_widget_show (treeview);
 
-gtk_container_add (GTK_CONTAINER (vbox2), swindow);
+        gtk_box_pack_start (GTK_BOX (vbox2), swindow, TRUE, TRUE, 0);
         gtk_widget_show (swindow);
 
         /* Text attributes */
&lt;/pre&gt;</description>
    <dc:creator>Carlos Garcia Campos</dc:creator>
    <dc:date>2012-05-20T10:12:13</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7115">
    <title>3 commits - glib/demo glib/poppler-annot.ccglib/poppler-page.cc glib/poppler-page.h glib/reference</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7115</link>
    <description>&lt;pre&gt; glib/demo/annots.c                  |   48 +++++++++++++++++++++++++++-----
 glib/poppler-annot.cc               |   53 ++++++++++++++----------------------
 glib/poppler-page.cc                |   19 ++++++++++++
 glib/poppler-page.h                 |    2 +
 glib/reference/poppler-sections.txt |    1 
 5 files changed, 85 insertions(+), 38 deletions(-)

New commits:
commit 610eb24426d9b36ac7da40a2fceb3dbeeec19a5c
Author: Carlos Garcia Campos &amp;lt;carlosgc&amp;lt; at &amp;gt;gnome.org&amp;gt;
Date:   Sun May 20 12:08:09 2012 +0200

    glib-demo: Add a button to remove annots from the annot view

diff --git a/glib/demo/annots.c b/glib/demo/annots.c
index 290847a..e0b5d91 100644
--- a/glib/demo/annots.c
+++ b/glib/demo/annots.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -40,6 +40,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef struct {
     PopplerDocument *doc;
     PopplerPage     *page;
 
+    GtkWidget       *tree_view;
     GtkListStore    *model;
     GtkWidget       *annot_view;
     GtkWidget       *timer_label;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -281,6 +282,28 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; get_free_text_callout_line (PopplerAnnotFreeText *poppler_annot)
 }
 
 static void
+pgd_annots_remove_annot (GtkWidget     *button,
+                         PgdAnnotsDemo *demo)
+{
+    GtkTreeSelection *selection;
+    GtkTreeModel *model;
+    GtkTreeIter   iter;
+
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (demo-&amp;gt;tree_view));
+
+    if (gtk_tree_selection_get_selected (selection, &amp;amp;model, &amp;amp;iter)) {
+        PopplerAnnot *annot;
+
+        gtk_tree_model_get (model, &amp;amp;iter,
+                            ANNOTS_COLUMN, &amp;amp;annot,
+                           -1);
+        poppler_page_remove_annot (demo-&amp;gt;page, annot);
+        g_object_unref (annot);
+        gtk_list_store_remove (GTK_LIST_STORE (model), &amp;amp;iter);
+    }
+}
+
+static void
 pgd_annot_view_set_annot_markup (GtkWidget          *table,
                                  PopplerAnnotMarkup *markup,
                                  gint               *row)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -452,24 +475,25 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annot_view_set_annot_screen (GtkWidget          *table,
 }
 
 static void
-pgd_annot_view_set_annot (GtkWidget    *annot_view,
-                          PopplerAnnot *annot)
+pgd_annot_view_set_annot (PgdAnnotsDemo *demo,
+                          PopplerAnnot  *annot)
 {
     GtkWidget  *alignment;
     GtkWidget  *table;
+    GtkWidget  *button;
     GEnumValue *enum_value;
     gint        row = 0;
     gchar      *text, *warning;
     time_t      timet;
 
-    alignment = gtk_bin_get_child (GTK_BIN (annot_view));
+    alignment = gtk_bin_get_child (GTK_BIN (demo-&amp;gt;annot_view));
     if (alignment) {
-        gtk_container_remove (GTK_CONTAINER (annot_view), alignment);
+        gtk_container_remove (GTK_CONTAINER (demo-&amp;gt;annot_view), alignment);
     }
 
     alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
     gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 5, 5, 12, 5);
-    gtk_container_add (GTK_CONTAINER (annot_view), alignment);
+    gtk_container_add (GTK_CONTAINER (demo-&amp;gt;annot_view), alignment);
     gtk_widget_show (alignment);
 
     if (!annot)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -527,6 +551,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annot_view_set_annot (GtkWidget    *annot_view,
           break;
     }
 
+    button = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (pgd_annots_remove_annot),
+                      (gpointer) demo);
+    gtk_grid_attach (GTK_GRID (table), button, 0, row, 2, 1);
+    gtk_widget_show (button);
+
     gtk_container_add (GTK_CONTAINER (alignment), table);
     gtk_widget_show (table);
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -540,7 +571,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annots_get_annots (GtkWidget     *button,
     GTimer      *timer;
 
     gtk_list_store_clear (demo-&amp;gt;model);
-    pgd_annot_view_set_annot (demo-&amp;gt;annot_view, NULL);
+    pgd_annot_view_set_annot (demo, NULL);
 
     if (demo-&amp;gt;page) {
         g_object_unref (demo-&amp;gt;page);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -632,8 +663,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annots_selection_changed (GtkTreeSelection *treeselection,
         gtk_tree_model_get (model, &amp;amp;iter,
                             ANNOTS_COLUMN, &amp;amp;annot,
                            -1);
-        pgd_annot_view_set_annot (demo-&amp;gt;annot_view, annot);
+        pgd_annot_view_set_annot (demo, annot);
         g_object_unref (annot);
+    } else {
+        pgd_annot_view_set_annot (demo, NULL);
     }
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -825,6 +858,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annots_create_widget (PopplerDocument *document)
       G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
       G_TYPE_OBJECT);
     treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (demo-&amp;gt;model));
+    demo-&amp;gt;tree_view = treeview;
 
     renderer = gtk_cell_renderer_text_new ();
     gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
commit 11a3093e093319e88f14af0ab6c15009104d17ee
Author: Carlos Garcia Campos &amp;lt;carlosgc&amp;lt; at &amp;gt;gnome.org&amp;gt;
Date:   Sun May 20 11:22:49 2012 +0200

    glib: Add poppler_page_remove_annot()
    
    https://bugs.freedesktop.org/show_bug.cgi?id=40473

diff --git a/glib/poppler-page.cc b/glib/poppler-page.cc
index 156e2d7..90f9a62 100644
--- a/glib/poppler-page.cc
+++ b/glib/poppler-page.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1431,6 +1431,25 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; poppler_page_add_annot (PopplerPage  *page,
   page-&amp;gt;page-&amp;gt;addAnnot (annot-&amp;gt;annot);
 }
 
+/**
+ * poppler_page_remove_annot:
+ * &amp;lt; at &amp;gt;page: a #PopplerPage
+ * &amp;lt; at &amp;gt;annot: a #PopplerAnnot to remove
+ *
+ * Removes annotation &amp;lt; at &amp;gt;annot from &amp;lt; at &amp;gt;page
+ *
+ * Since: 0.22
+ */
+void
+poppler_page_remove_annot (PopplerPage  *page,
+                           PopplerAnnot *annot)
+{
+  g_return_if_fail (POPPLER_IS_PAGE (page));
+  g_return_if_fail (POPPLER_IS_ANNOT (annot));
+
+  page-&amp;gt;page-&amp;gt;removeAnnot (annot-&amp;gt;annot);
+}
+
 /* PopplerRectangle type */
 
 POPPLER_DEFINE_BOXED_TYPE (PopplerRectangle, poppler_rectangle,
diff --git a/glib/poppler-page.h b/glib/poppler-page.h
index 7b36843..6064ac5 100644
--- a/glib/poppler-page.h
+++ b/glib/poppler-page.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -89,6 +89,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GList                 *poppler_page_get_annot_mapping    (PopplerPage        *pa
 void                   poppler_page_free_annot_mapping   (GList              *list);
 void                   poppler_page_add_annot            (PopplerPage        *page,
   PopplerAnnot       *annot);
+void                   poppler_page_remove_annot         (PopplerPage        *page,
+                                                          PopplerAnnot       *annot);
 void       poppler_page_get_crop_box  (PopplerPage        *page,
   PopplerRectangle   *rect);
 gboolean               poppler_page_get_text_layout      (PopplerPage        *page,
diff --git a/glib/reference/poppler-sections.txt b/glib/reference/poppler-sections.txt
index 6efef6a..76abf4c 100644
--- a/glib/reference/poppler-sections.txt
+++ b/glib/reference/poppler-sections.txt
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -47,6 +47,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; poppler_page_free_form_field_mapping
 poppler_page_get_annot_mapping
 poppler_page_free_annot_mapping
 poppler_page_add_annot
+poppler_page_remove_annot
 poppler_rectangle_new
 poppler_rectangle_copy
 poppler_rectangle_free
commit 0dd157ae7f19cd91ea425a607b968f08addc3a40
Author: Carlos Garcia Campos &amp;lt;carlosgc&amp;lt; at &amp;gt;gnome.org&amp;gt;
Date:   Sun May 20 10:37:47 2012 +0200

    glib: Take a reference of the core annotation when creating a PopplerAnnot
    
    This way if the annotation is removed from the page, the core annotation
    object is not destroyed. Also, a new PopplerAnnot that is never added to
    a page doesn't leak the core annotation anymore.

diff --git a/glib/poppler-annot.cc b/glib/poppler-annot.cc
index 2a544f1..728e64b 100644
--- a/glib/poppler-annot.cc
+++ b/glib/poppler-annot.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -114,12 +114,27 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; G_DEFINE_TYPE (PopplerAnnotFileAttachment, poppler_annot_file_attachment, POPPLE
 G_DEFINE_TYPE (PopplerAnnotMovie, poppler_annot_movie, POPPLER_TYPE_ANNOT)
 G_DEFINE_TYPE (PopplerAnnotScreen, poppler_annot_screen, POPPLER_TYPE_ANNOT)
 
+static PopplerAnnot *
+_poppler_create_annot (GType annot_type, Annot *annot)
+{
+  PopplerAnnot *poppler_annot;
+
+  poppler_annot = POPPLER_ANNOT (g_object_new (annot_type, NULL));
+  poppler_annot-&amp;gt;annot = annot;
+  annot-&amp;gt;incRefCnt();
+
+  return poppler_annot;
+}
+
 static void
 poppler_annot_finalize (GObject *object)
 {
   PopplerAnnot *poppler_annot = POPPLER_ANNOT (object);
 
-  poppler_annot-&amp;gt;annot = NULL;
+  if (poppler_annot-&amp;gt;annot) {
+    poppler_annot-&amp;gt;annot-&amp;gt;decRefCnt();
+    poppler_annot-&amp;gt;annot = NULL;
+  }
 
   G_OBJECT_CLASS (poppler_annot_parent_class)-&amp;gt;finalize (object);
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -140,12 +155,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; poppler_annot_class_init (PopplerAnnotClass *klass)
 PopplerAnnot *
 _poppler_annot_new (Annot *annot)
 {
-  PopplerAnnot *poppler_annot;
-
-  poppler_annot = POPPLER_ANNOT (g_object_new (POPPLER_TYPE_ANNOT, NULL));
-  poppler_annot-&amp;gt;annot = annot;
-
-  return poppler_annot;
+  return _poppler_create_annot (POPPLER_TYPE_ANNOT, annot);
 }
 
 static void
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -171,12 +181,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; poppler_annot_text_class_init (PopplerAnnotTextClass *klass)
 PopplerAnnot *
 _poppler_annot_text_new (Annot *annot)
 {
-  PopplerAnnot *poppler_annot;
-
-  poppler_annot = POPPLER_ANNOT (g_object_new (POPPLER_TYPE_ANNOT_TEXT, NULL));
-  poppler_annot-&amp;gt;annot = annot;
-
-  return poppler_annot;
+  return _poppler_create_annot (POPPLER_TYPE_ANNOT_TEXT, annot);
 }
 
 /**
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -218,12 +223,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; poppler_annot_free_text_class_init (PopplerAnnotFreeTextClass *klass)
 PopplerAnnot *
 _poppler_annot_free_text_new (Annot *annot)
 {
-  PopplerAnnot *poppler_annot;
-
-  poppler_annot = POPPLER_ANNOT (g_object_new (POPPLER_TYPE_ANNOT_FREE_TEXT, NULL));
-  poppler_annot-&amp;gt;annot = annot;
-
-  return poppler_annot;
+  return _poppler_create_annot (POPPLER_TYPE_ANNOT_FREE_TEXT, annot);
 }
 
 static void
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -239,12 +239,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; poppler_annot_file_attachment_class_init (PopplerAnnotFileAttachmentClass *klass
 PopplerAnnot *
 _poppler_annot_file_attachment_new (Annot *annot)
 {
-  PopplerAnnot *poppler_annot;
-
-  poppler_annot = POPPLER_ANNOT (g_object_new (POPPLER_TYPE_ANNOT_FILE_ATTACHMENT, NULL));
-  poppler_annot-&amp;gt;annot = annot;
-
-  return poppler_annot;
+  return _poppler_create_annot (POPPLER_TYPE_ANNOT_FILE_ATTACHMENT, annot);
 }
 
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -280,9 +275,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; _poppler_annot_movie_new (Annot *annot)
   PopplerAnnot *poppler_annot;
   AnnotMovie   *annot_movie;
 
-  poppler_annot = POPPLER_ANNOT (g_object_new (POPPLER_TYPE_ANNOT_MOVIE, NULL));
-  poppler_annot-&amp;gt;annot = annot;
-
+  poppler_annot = _poppler_create_annot (POPPLER_TYPE_ANNOT_MOVIE, annot);
   annot_movie = static_cast&amp;lt;AnnotMovie *&amp;gt;(poppler_annot-&amp;gt;annot);
   POPPLER_ANNOT_MOVIE (poppler_annot)-&amp;gt;movie = _poppler_movie_new (annot_movie-&amp;gt;getMovie());
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -322,9 +315,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; _poppler_annot_screen_new (Annot *annot)
   AnnotScreen  *annot_screen;
   LinkAction   *action;
 
-  poppler_annot = POPPLER_ANNOT (g_object_new (POPPLER_TYPE_ANNOT_SCREEN, NULL));
-  poppler_annot-&amp;gt;annot = annot;
-
+  poppler_annot = _poppler_create_annot (POPPLER_TYPE_ANNOT_SCREEN, annot);
   annot_screen = static_cast&amp;lt;AnnotScreen *&amp;gt;(poppler_annot-&amp;gt;annot);
   action = annot_screen-&amp;gt;getAction();
   if (action)
&lt;/pre&gt;</description>
    <dc:creator>Carlos Garcia Campos</dc:creator>
    <dc:date>2012-05-20T10:09:18</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7114">
    <title>glib/demo</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7114</link>
    <description>&lt;pre&gt; glib/demo/selections.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit f818b842f54d6860920b39778228e8b247b4e761
Author: Carlos Garcia Campos &amp;lt;carlosgc&amp;lt; at &amp;gt;gnome.org&amp;gt;
Date:   Sat May 19 12:32:33 2012 +0200

    glib-demo: Fix runtime warning

diff --git a/glib/demo/selections.c b/glib/demo/selections.c
index b3095fe..4ec5d6b 100644
--- a/glib/demo/selections.c
+++ b/glib/demo/selections.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -77,7 +77,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_clear_selections (PgdSelectionsDemo *demo)
 cairo_region_destroy (demo-&amp;gt;selected_region);
 demo-&amp;gt;selected_region = NULL;
 }
-gtk_widget_set_sensitive(demo-&amp;gt;copy_button, FALSE);
 }
 
 static void
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -394,6 +393,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_render (GtkButton         *button,
 
 pgd_selections_clear_selections (demo);
 pgd_selections_update_selection_region (demo);
+        gtk_widget_set_sensitive (demo-&amp;gt;copy_button, FALSE);
 
 if (demo-&amp;gt;surface)
 cairo_surface_destroy (demo-&amp;gt;surface);
&lt;/pre&gt;</description>
    <dc:creator>Carlos Garcia Campos</dc:creator>
    <dc:date>2012-05-19T10:33:22</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7113">
    <title>configure.ac glib/demo test/gtk-test.cc</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7113</link>
    <description>&lt;pre&gt; configure.ac            |    4 
 glib/demo/annots.c      |   74 ++++++-------
 glib/demo/attachments.c |    4 
 glib/demo/find.c        |    4 
 glib/demo/fonts.c       |    4 
 glib/demo/forms.c       |   64 +++++------
 glib/demo/images.c      |   21 +--
 glib/demo/info.cc       |   67 +++++-------
 glib/demo/layers.c      |   22 +---
 glib/demo/links.c       |    6 -
 glib/demo/main.c        |   31 +----
 glib/demo/outline.c     |    2 
 glib/demo/page.c        |   23 ++--
 glib/demo/print.c       |   14 --
 glib/demo/render.c      |  263 +++++++++++++-----------------------------------
 glib/demo/selections.c  |   77 +++++---------
 glib/demo/text.c        |   22 ++--
 glib/demo/transitions.c |    4 
 glib/demo/utils.c       |  101 +++++++++---------
 glib/demo/utils.h       |    6 -
 test/gtk-test.cc        |   48 +++++---
 21 files changed, 350 insertions(+), 511 deletions(-)

New commits:
commit a24e326425e198eeb70c4d9205bb7a0a3a9db297
Author: Carlos Garcia Campos &amp;lt;carlosgc&amp;lt; at &amp;gt;gnome.org&amp;gt;
Date:   Sat May 19 12:09:45 2012 +0200

    gtk-tests: Port to GTK+ 3.0

diff --git a/configure.ac b/configure.ac
index abd6e5f..f9919d9 100644
--- a/configure.ac
+++ b/configure.ac
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -644,9 +644,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; AC_ARG_ENABLE(gtk-test,
               enable_gtk_test=$enableval,
               enable_gtk_test="try")
 if test x$enable_gtk_test = xyes; then
-  PKG_CHECK_MODULES(GTK_TEST, gtk+-2.0 &amp;gt;= 2.14 gdk-pixbuf-2.0 gthread-2.0)
+  PKG_CHECK_MODULES(GTK_TEST, gtk+-3.0 &amp;gt;= 3.0 gdk-pixbuf-2.0)
 elif test x$enable_gtk_test = xtry; then
-  PKG_CHECK_MODULES(GTK_TEST, gtk+-2.0 &amp;gt;= 2.14 gdk-pixbuf-2.0 gthread-2.0,
+  PKG_CHECK_MODULES(GTK_TEST, gtk+-3.0 &amp;gt;= 3.0 gdk-pixbuf-2.0,
                     [enable_gtk_test="yes"],
                     [enable_gtk_test="no"])
 fi
diff --git a/glib/demo/annots.c b/glib/demo/annots.c
index 7075028..290847a 100644
--- a/glib/demo/annots.c
+++ b/glib/demo/annots.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -289,35 +289,35 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annot_view_set_annot_markup (GtkWidget          *table,
     PopplerRectangle rect;
 
     text = poppler_annot_markup_get_label (markup);
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Label:&amp;lt;/b&amp;gt;", text, row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Label:&amp;lt;/b&amp;gt;", text, row);
     g_free (text);
 
     if (poppler_annot_markup_has_popup (markup)) {
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Popup is open:&amp;lt;/b&amp;gt;",
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Popup is open:&amp;lt;/b&amp;gt;",
     poppler_annot_markup_get_popup_is_open (markup) ? "Yes" : "No", row);
 
     poppler_annot_markup_get_popup_rectangle (markup, &amp;amp;rect);
     text = g_strdup_printf ("X1: %.2f, Y1: %.2f, X2: %.2f, Y2: %.2f",
     rect.x1, rect.y1, rect.x2, rect.y2);
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Popup Rectangle:&amp;lt;/b&amp;gt;", text, row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Popup Rectangle:&amp;lt;/b&amp;gt;", text, row);
     g_free (text);
     }
 
     text = g_strdup_printf ("%f", poppler_annot_markup_get_opacity (markup));
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Opacity:&amp;lt;/b&amp;gt;", text, row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Opacity:&amp;lt;/b&amp;gt;", text, row);
     g_free (text);
 
     text = get_markup_date (markup);
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Date:&amp;lt;/b&amp;gt;", text, row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Date:&amp;lt;/b&amp;gt;", text, row);
     g_free (text);
 
     text = poppler_annot_markup_get_subject (markup);
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Subject:&amp;lt;/b&amp;gt;", text, row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Subject:&amp;lt;/b&amp;gt;", text, row);
     g_free (text);
 
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Reply To:&amp;lt;/b&amp;gt;", get_markup_reply_to (markup), row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Reply To:&amp;lt;/b&amp;gt;", get_markup_reply_to (markup), row);
 
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;External Data:&amp;lt;/b&amp;gt;", get_markup_external_data (markup), row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;External Data:&amp;lt;/b&amp;gt;", get_markup_external_data (markup), row);
 }
 
 static void
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -327,14 +327,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annot_view_set_annot_text (GtkWidget        *table,
 {
     gchar *text;
 
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Is open:&amp;lt;/b&amp;gt;",
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Is open:&amp;lt;/b&amp;gt;",
                             poppler_annot_text_get_is_open (annot) ? "Yes" : "No", row);
 
     text = poppler_annot_text_get_icon (annot);
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Icon:&amp;lt;/b&amp;gt;", text, row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Icon:&amp;lt;/b&amp;gt;", text, row);
     g_free (text);
 
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;State:&amp;lt;/b&amp;gt;", get_text_state (annot), row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;State:&amp;lt;/b&amp;gt;", get_text_state (annot), row);
 }
 
 static void
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -344,10 +344,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annot_view_set_annot_free_text (GtkWidget            *table,
 {
     gchar *text;
 
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Quadding:&amp;lt;/b&amp;gt;", get_free_text_quadding (annot), row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Quadding:&amp;lt;/b&amp;gt;", get_free_text_quadding (annot), row);
 
     text = get_free_text_callout_line (annot);
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Callout:&amp;lt;/b&amp;gt;", text, row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Callout:&amp;lt;/b&amp;gt;", text, row);
     g_free (text);
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -408,14 +408,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annot_view_set_annot_file_attachment (GtkWidget                  *table,
     gchar *text;
 
     text = poppler_annot_file_attachment_get_name (annot);
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Attachment Name:&amp;lt;/b&amp;gt;", text, row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Attachment Name:&amp;lt;/b&amp;gt;", text, row);
     g_free (text);
 
     button = gtk_button_new_with_label ("Save Attachment");
     g_signal_connect (G_OBJECT (button), "clicked",
       G_CALLBACK (pgd_annot_save_file_attachment_button_clicked),
       (gpointer)annot);
-    pgd_table_add_property_with_custom_widget (GTK_TABLE (table), "&amp;lt;b&amp;gt;File Attachment:&amp;lt;/b&amp;gt;", button, row);
+    pgd_table_add_property_with_custom_widget (GTK_GRID (table), "&amp;lt;b&amp;gt;File Attachment:&amp;lt;/b&amp;gt;", button, row);
     gtk_widget_show (button);
 
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -429,12 +429,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annot_view_set_annot_movie (GtkWidget         *table,
     gchar *text;
 
     text = poppler_annot_movie_get_title (annot);
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Movie Title:&amp;lt;/b&amp;gt;", text, row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Movie Title:&amp;lt;/b&amp;gt;", text, row);
     g_free (text);
 
     movie_view = pgd_movie_view_new ();
     pgd_movie_view_set_movie (movie_view, poppler_annot_movie_get_movie (annot));
-    pgd_table_add_property_with_custom_widget (GTK_TABLE (table), "&amp;lt;b&amp;gt;Movie:&amp;lt;/b&amp;gt;", movie_view, row);
+    pgd_table_add_property_with_custom_widget (GTK_GRID (table), "&amp;lt;b&amp;gt;Movie:&amp;lt;/b&amp;gt;", movie_view, row);
     gtk_widget_show (movie_view);
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -447,7 +447,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annot_view_set_annot_screen (GtkWidget          *table,
 
     action_view = pgd_action_view_new (NULL);
     pgd_action_view_set_action (action_view, poppler_annot_screen_get_action (annot));
-    pgd_table_add_property_with_custom_widget (GTK_TABLE (table), "&amp;lt;b&amp;gt;Action:&amp;lt;/b&amp;gt;", action_view, row);
+    pgd_table_add_property_with_custom_widget (GTK_GRID (table), "&amp;lt;b&amp;gt;Action:&amp;lt;/b&amp;gt;", action_view, row);
     gtk_widget_show (action_view);
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -475,16 +475,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annot_view_set_annot (GtkWidget    *annot_view,
     if (!annot)
         return;
 
-    table = gtk_table_new (10, 2, FALSE);
-    gtk_table_set_col_spacings (GTK_TABLE (table), 6);
-    gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+    table = gtk_grid_new ();
+    gtk_grid_set_column_spacing (GTK_GRID (table), 6);
+    gtk_grid_set_row_spacing (GTK_GRID (table), 6);
 
     text = poppler_annot_get_contents (annot);
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Contents:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Contents:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
     g_free (text);
 
     text = poppler_annot_get_name (annot);
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Name:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Name:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
     g_free (text);
 
     text = poppler_annot_get_modified (annot);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -492,15 +492,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annot_view_set_annot (GtkWidget    *annot_view,
     g_free (text);
     text = pgd_format_date (timet);
     }
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Modified:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Modified:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
     g_free (text);
 
     text = g_strdup_printf ("%d", poppler_annot_get_flags (annot));
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Flags:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Flags:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
     g_free (text);
 
     text = g_strdup_printf ("%d", poppler_annot_get_page_index (annot));
-    pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Page:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+    pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Page:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
     g_free (text);
 
     if (POPPLER_IS_ANNOT_MARKUP (annot))
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -666,22 +666,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annots_add_annot (GtkWidget     *button,
 
     vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
 
-#if GTK_CHECK_VERSION (2, 24, 0)
     type_selector = gtk_combo_box_text_new ();
     gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (type_selector), "POPPLER_ANNOT_UNKNOWN");
     gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (type_selector), "POPPLER_ANNOT_TEXT");
-#else
-    type_selector = gtk_combo_box_new_text ();
-    gtk_combo_box_append_text (GTK_COMBO_BOX (type_selector), "POPPLER_ANNOT_UNKNOWN");
-    gtk_combo_box_append_text (GTK_COMBO_BOX (type_selector), "POPPLER_ANNOT_TEXT");
-#endif
     gtk_combo_box_set_active (GTK_COMBO_BOX (type_selector), 1);
     gtk_box_pack_start (GTK_BOX (vbox), type_selector, TRUE, TRUE, 0);
     gtk_widget_show (type_selector);
 
-    hbox = gtk_hbox_new (FALSE, 6);
+    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
-    rect_hbox = gtk_hbox_new (FALSE, 6);
+    rect_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
     label = gtk_label_new ("x1:");
     gtk_box_pack_start (GTK_BOX (rect_hbox), label, TRUE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -694,7 +688,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annots_add_annot (GtkWidget     *button,
     gtk_box_pack_start (GTK_BOX (hbox), rect_hbox, FALSE, TRUE, 0);
     gtk_widget_show (rect_hbox);
 
-    rect_hbox = gtk_hbox_new (FALSE, 6);
+    rect_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
     label = gtk_label_new ("x2:");
     gtk_box_pack_start (GTK_BOX (rect_hbox), label, TRUE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -707,7 +701,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annots_add_annot (GtkWidget     *button,
     gtk_box_pack_start (GTK_BOX (hbox), rect_hbox, FALSE, TRUE, 0);
     gtk_widget_show (rect_hbox);
 
-    rect_hbox = gtk_hbox_new (FALSE, 6);
+    rect_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
     label = gtk_label_new ("y1:");
     gtk_box_pack_start (GTK_BOX (rect_hbox), label, TRUE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -720,7 +714,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annots_add_annot (GtkWidget     *button,
     gtk_box_pack_start (GTK_BOX (hbox), rect_hbox, FALSE, TRUE, 0);
     gtk_widget_show (rect_hbox);
 
-    rect_hbox = gtk_hbox_new (FALSE, 6);
+    rect_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
     label = gtk_label_new ("y2:");
     gtk_box_pack_start (GTK_BOX (rect_hbox), label, TRUE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -771,9 +765,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annots_create_widget (PopplerDocument *document)
 
     n_pages = poppler_document_get_n_pages (document);
 
-    vbox = gtk_vbox_new (FALSE, 12);
+    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
 
-    hbox = gtk_hbox_new (FALSE, 6);
+    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
     label = gtk_label_new ("Page:");
     gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -815,7 +809,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_annots_create_widget (PopplerDocument *document)
     gtk_box_pack_start (GTK_BOX (vbox), demo-&amp;gt;timer_label, FALSE, TRUE, 0);
     gtk_widget_show (demo-&amp;gt;timer_label);
 
-    hpaned = gtk_hpaned_new ();
+    hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
 
     demo-&amp;gt;annot_view = pgd_annot_view_new ();
 
diff --git a/glib/demo/attachments.c b/glib/demo/attachments.c
index 63565dd..1b74274 100644
--- a/glib/demo/attachments.c
+++ b/glib/demo/attachments.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -280,7 +280,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_attachments_create_widget (PopplerDocument *document)
 GtkWidget    *hbox, *button;
 gboolean      has_attachments;
 
-vbox = gtk_vbox_new (FALSE, 12);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
 
 swindow = gtk_scrolled_window_new (NULL, NULL);
 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -327,7 +327,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_attachments_create_widget (PopplerDocument *document)
 if (!has_attachments)
 return vbox;
 
-hbox = gtk_hbutton_box_new ();
+hbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
 gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_SPREAD);
 
 button = gtk_button_new_with_label ("Save");
diff --git a/glib/demo/find.c b/glib/demo/find.c
index 632e610..0fdce85 100644
--- a/glib/demo/find.c
+++ b/glib/demo/find.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -190,9 +190,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_find_create_widget (PopplerDocument *document)
 
 demo-&amp;gt;n_pages = poppler_document_get_n_pages (document);
 
-vbox = gtk_vbox_new (FALSE, 12);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
 
-hbox = gtk_hbox_new (FALSE, 6);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 demo-&amp;gt;entry = gtk_entry_new ();
 gtk_box_pack_start (GTK_BOX (hbox), demo-&amp;gt;entry, FALSE, TRUE, 0);
diff --git a/glib/demo/fonts.c b/glib/demo/fonts.c
index 24eb87c..d0ffa3d 100644
--- a/glib/demo/fonts.c
+++ b/glib/demo/fonts.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -228,9 +228,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_fonts_create_widget (PopplerDocument *document)
 
 demo-&amp;gt;doc = g_object_ref (document);
 
-vbox = gtk_vbox_new (FALSE, 12);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
 
-hbox = gtk_hbox_new (FALSE, 6);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 demo-&amp;gt;progress = gtk_progress_bar_new ();
 gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (demo-&amp;gt;progress),
diff --git a/glib/demo/forms.c b/glib/demo/forms.c
index 3a74ef5..9dfe3cd 100644
--- a/glib/demo/forms.c
+++ b/glib/demo/forms.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -79,7 +79,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_form_field_view_new (void)
 }
 
 static void
-pgd_form_field_view_add_choice_items (GtkTable         *table,
+pgd_form_field_view_add_choice_items (GtkGrid          *table,
       PopplerFormField *field,
       gint             *selected,
       gint             *row)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -92,8 +92,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_form_field_view_add_choice_items (GtkTable         *table,
 label = gtk_label_new (NULL);
 g_object_set (G_OBJECT (label), "xalign", 0.0, NULL);
 gtk_label_set_markup (GTK_LABEL (label), "&amp;lt;b&amp;gt;Items:&amp;lt;/b&amp;gt;");
-gtk_table_attach (GTK_TABLE (table), label, 0, 1, *row, *row + 1,
-  GTK_FILL, GTK_FILL, 0, 0);
+gtk_grid_attach (GTK_GRID (table), label, 0, *row, 1, 1);
 gtk_widget_show (label);
 
 swindow = gtk_scrolled_window_new (NULL, NULL);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -120,8 +119,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_form_field_view_add_choice_items (GtkTable         *table,
 gtk_container_add (GTK_CONTAINER (swindow), textview);
 gtk_widget_show (textview);
 
-gtk_table_attach (GTK_TABLE (table), swindow, 1, 2, *row, *row + 1,
-  GTK_FILL, GTK_FILL, 0, 0);
+gtk_grid_attach (GTK_GRID (table), swindow, 1, *row, 1, 1);
 gtk_widget_show (swindow); 
 
 *row += 1;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -151,23 +149,23 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_form_field_view_set_field (GtkWidget        *field_view,
 if (!field)
 return;
 
-table = gtk_table_new (13, 2, FALSE);
-gtk_table_set_col_spacings (GTK_TABLE (table), 6);
-gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+table = gtk_grid_new ();
+gtk_grid_set_column_spacing (GTK_GRID (table), 6);
+gtk_grid_set_row_spacing (GTK_GRID (table), 6);
 
 text = poppler_form_field_get_name (field);
 if (text) {
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Name:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Name:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
 g_free (text);
 }
 text = poppler_form_field_get_partial_name (field);
 if (text) {
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Partial Name:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Partial Name:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
 g_free (text);
 }
 text = poppler_form_field_get_mapping_name (field);
 if (text) {
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Mapping Name:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Mapping Name:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
 g_free (text);
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -177,7 +175,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_form_field_view_set_field (GtkWidget        *field_view,
 
                 action_view = pgd_action_view_new (NULL);
                 pgd_action_view_set_action (action_view, action);
-                pgd_table_add_property_with_custom_widget (GTK_TABLE (table), "&amp;lt;b&amp;gt;Action:&amp;lt;/b&amp;gt;", action_view, &amp;amp;row);
+                pgd_table_add_property_with_custom_widget (GTK_GRID (table), "&amp;lt;b&amp;gt;Action:&amp;lt;/b&amp;gt;", action_view, &amp;amp;row);
                 gtk_widget_show (action_view);
         }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -185,30 +183,30 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_form_field_view_set_field (GtkWidget        *field_view,
 case POPPLER_FORM_FIELD_BUTTON:
 enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (POPPLER_TYPE_FORM_BUTTON_TYPE),
        poppler_form_field_button_get_button_type (field));
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Button Type:&amp;lt;/b&amp;gt;", enum_value-&amp;gt;value_name, &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Button State:&amp;lt;/b&amp;gt;",
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Button Type:&amp;lt;/b&amp;gt;", enum_value-&amp;gt;value_name, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Button State:&amp;lt;/b&amp;gt;",
 poppler_form_field_button_get_state (field) ? "Active" : "Inactive", &amp;amp;row);
 break;
 case POPPLER_FORM_FIELD_TEXT:
 enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (POPPLER_TYPE_FORM_TEXT_TYPE),
        poppler_form_field_text_get_text_type (field));
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Text Type:&amp;lt;/b&amp;gt;", enum_value-&amp;gt;value_name, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Text Type:&amp;lt;/b&amp;gt;", enum_value-&amp;gt;value_name, &amp;amp;row);
 
 text = poppler_form_field_text_get_text (field);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Contents:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Contents:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
 g_free (text);
 
 text = g_strdup_printf ("%d", poppler_form_field_text_get_max_len (field));
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Max Length:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Max Length:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
 g_free (text);
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Do spellcheck:&amp;lt;/b&amp;gt;",
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Do spellcheck:&amp;lt;/b&amp;gt;",
 poppler_form_field_text_do_spell_check (field) ? "Yes" : "No", &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Do scroll:&amp;lt;/b&amp;gt;",
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Do scroll:&amp;lt;/b&amp;gt;",
 poppler_form_field_text_do_scroll (field) ? "Yes" : "No", &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Rich Text:&amp;lt;/b&amp;gt;",
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Rich Text:&amp;lt;/b&amp;gt;",
 poppler_form_field_text_is_rich_text (field) ? "Yes" : "No", &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Pasword type:&amp;lt;/b&amp;gt;",
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Pasword type:&amp;lt;/b&amp;gt;",
 poppler_form_field_text_is_password (field) ? "Yes" : "No", &amp;amp;row);
 break;
 case POPPLER_FORM_FIELD_CHOICE: {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -217,32 +215,32 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_form_field_view_set_field (GtkWidget        *field_view,
 
 enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (POPPLER_TYPE_FORM_CHOICE_TYPE),
        poppler_form_field_choice_get_choice_type (field));
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Choice Type:&amp;lt;/b&amp;gt;", enum_value-&amp;gt;value_name, &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Editable:&amp;lt;/b&amp;gt;",
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Choice Type:&amp;lt;/b&amp;gt;", enum_value-&amp;gt;value_name, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Editable:&amp;lt;/b&amp;gt;",
 poppler_form_field_choice_is_editable (field) ? "Yes" : "No", &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Multiple Selection:&amp;lt;/b&amp;gt;",
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Multiple Selection:&amp;lt;/b&amp;gt;",
 poppler_form_field_choice_can_select_multiple (field) ? "Yes" : "No", &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Do spellcheck:&amp;lt;/b&amp;gt;",
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Do spellcheck:&amp;lt;/b&amp;gt;",
 poppler_form_field_choice_do_spell_check (field) ? "Yes" : "No", &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Commit on Change:&amp;lt;/b&amp;gt;",
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Commit on Change:&amp;lt;/b&amp;gt;",
 poppler_form_field_choice_commit_on_change (field) ? "Yes" : "No", &amp;amp;row);
 
 text = g_strdup_printf ("%d", poppler_form_field_choice_get_n_items (field));
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Number of items:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Number of items:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
 g_free (text);
 
-pgd_form_field_view_add_choice_items (GTK_TABLE (table), field, &amp;amp;selected, &amp;amp;row);
+pgd_form_field_view_add_choice_items (GTK_GRID (table), field, &amp;amp;selected, &amp;amp;row);
 
 if (selected &amp;gt;= 0 &amp;amp;&amp;amp; poppler_form_field_choice_get_n_items (field) &amp;gt; selected) {
 item = poppler_form_field_choice_get_item (field, selected);
 text = g_strdup_printf ("%d (%s)", selected, item);
 g_free (item);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Selected item:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Selected item:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
 g_free (text);
 }
 
 text = poppler_form_field_choice_get_text (field);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Contents:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Contents:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
 g_free (text);
 }
 break;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -390,9 +388,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_forms_create_widget (PopplerDocument *document)
 
 n_pages = poppler_document_get_n_pages (document);
 
-vbox = gtk_vbox_new (FALSE, 12);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
 
-hbox = gtk_hbox_new (FALSE, 6);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("Page:");
 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -427,7 +425,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_forms_create_widget (PopplerDocument *document)
 gtk_box_pack_start (GTK_BOX (vbox), demo-&amp;gt;timer_label, FALSE, TRUE, 0);
 gtk_widget_show (demo-&amp;gt;timer_label);
 
-hpaned = gtk_hpaned_new ();
+hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
 
 demo-&amp;gt;field_view = pgd_form_field_view_new ();
 
diff --git a/glib/demo/images.c b/glib/demo/images.c
index 6e987d2..3623fd7 100644
--- a/glib/demo/images.c
+++ b/glib/demo/images.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -61,11 +61,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_images_free (PgdImagesDemo *demo)
 }
 
 static gboolean
-pgd_image_view_drawing_area_expose (GtkWidget      *area,
-    GdkEventExpose *event,
-    GtkWidget      *image_view)
+pgd_image_view_drawing_area_draw (GtkWidget *area,
+                                  cairo_t   *cr,
+                                  GtkWidget *image_view)
 {
-cairo_t         *cr;
 cairo_surface_t *image;
 
 image = g_object_get_data (G_OBJECT (image_view), "image-surface");
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -75,11 +74,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_image_view_drawing_area_expose (GtkWidget      *area,
 gtk_widget_set_size_request (area,
      cairo_image_surface_get_width (image),
      cairo_image_surface_get_height (image));
-
-cr = gdk_cairo_create (gtk_widget_get_window (area));
+
 cairo_set_source_surface (cr, image, 0, 0);
 cairo_paint (cr);
-cairo_destroy (cr);
 
 return TRUE;
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -93,8 +90,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_image_view_new ()
 swindow = gtk_scrolled_window_new (NULL, NULL);
 
 darea = gtk_drawing_area_new ();
-g_signal_connect (G_OBJECT (darea), "expose_event",
-  G_CALLBACK (pgd_image_view_drawing_area_expose),
+g_signal_connect (G_OBJECT (darea), "draw",
+  G_CALLBACK (pgd_image_view_drawing_area_draw),
   (gpointer)swindow);
 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -229,9 +226,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_images_create_widget (PopplerDocument *document)
 
 n_pages = poppler_document_get_n_pages (document);
 
-vbox = gtk_vbox_new (FALSE, 12);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
 
-hbox = gtk_hbox_new (FALSE, 6);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("Page:");
 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -266,7 +263,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_images_create_widget (PopplerDocument *document)
 gtk_box_pack_start (GTK_BOX (vbox), demo-&amp;gt;timer_label, FALSE, TRUE, 0);
 gtk_widget_show (demo-&amp;gt;timer_label);
 
-hpaned = gtk_hpaned_new ();
+hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
 
 demo-&amp;gt;image_view = pgd_image_view_new ();
 
diff --git a/glib/demo/info.cc b/glib/demo/info.cc
index e05cc15..590ddc7 100644
--- a/glib/demo/info.cc
+++ b/glib/demo/info.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -23,7 +23,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include "utils.h"
 
 static void
-pgd_info_add_permissions (GtkTable           *table,
+pgd_info_add_permissions (GtkGrid            *table,
   PopplerPermissions  permissions,
   gint               *row)
 {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -33,12 +33,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_info_add_permissions (GtkTable           *table,
 label = gtk_label_new (NULL);
 g_object_set (G_OBJECT (label), "xalign", 0.0, NULL);
 gtk_label_set_markup (GTK_LABEL (label), "&amp;lt;b&amp;gt;Permissions:&amp;lt;/b&amp;gt;");
-gtk_table_attach (GTK_TABLE (table), label, 0, 1, *row, *row + 1,
-  GTK_FILL, GTK_FILL, 0, 0);
+gtk_grid_attach (GTK_GRID (table), label, 0, *row, 1, 1);
 gtk_widget_show (label);
 
-        vbox = gtk_vbox_new (FALSE, 0);
-hbox = gtk_hbox_new (FALSE, 6);
+        vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 checkbox = gtk_check_button_new_with_label ("Print");
 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox),
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -73,7 +72,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_info_add_permissions (GtkTable           *table,
         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
         gtk_widget_show (hbox);
 
-        hbox = gtk_hbox_new (FALSE, 6);
+        hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
         checkbox = gtk_check_button_new_with_label ("Extract contents");
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox),
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -96,15 +95,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_info_add_permissions (GtkTable           *table,
         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
         gtk_widget_show (hbox);
 
-gtk_table_attach (GTK_TABLE (table), vbox, 1, 2, *row, *row + 1,
-  GTK_FILL, GTK_FILL, 0, 0);
+gtk_grid_attach (GTK_GRID (table), vbox, 1, *row, 1, 1);
 gtk_widget_show (vbox);
 
 *row += 1;
 }
 
 static void
-pgd_info_add_metadata (GtkTable    *table,
+pgd_info_add_metadata (GtkGrid     *table,
        const gchar *metadata,
        gint        *row)
 {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -115,8 +113,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_info_add_metadata (GtkTable    *table,
 label = gtk_label_new (NULL);
 g_object_set (G_OBJECT (label), "xalign", 0.0, NULL);
 gtk_label_set_markup (GTK_LABEL (label), "&amp;lt;b&amp;gt;Metadata:&amp;lt;/b&amp;gt;");
-gtk_table_attach (GTK_TABLE (table), label, 0, 1, *row, *row + 1,
-  GTK_FILL, GTK_FILL, 0, 0);
+gtk_grid_attach (GTK_GRID (table), label, 0, *row, 1, 1);
 gtk_widget_show (label);
 
 swindow = gtk_scrolled_window_new (NULL, NULL);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -132,10 +129,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_info_add_metadata (GtkTable    *table,
 
 gtk_container_add (GTK_CONTAINER (swindow), textview);
 gtk_widget_show (textview);
-
-gtk_table_attach (GTK_TABLE (table), swindow, 1, 2, *row, *row + 1,
-  (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
-  (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0);
+
+gtk_grid_attach (GTK_GRID (table), swindow, 1, *row, 1, 1);
+        gtk_widget_set_hexpand (swindow, TRUE);
+        gtk_widget_set_vexpand (swindow, TRUE);
 gtk_widget_show (swindow); 
 
 *row += 1;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -181,7 +178,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_info_create_widget (PopplerDocument *document)
       "metadata", &amp;amp;metadata,
       NULL);
 
-vbox = gtk_vbox_new (FALSE, 12);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
 
 backend = poppler_get_backend ();
 enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (POPPLER_TYPE_BACKEND), backend);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -205,61 +202,61 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_info_create_widget (PopplerDocument *document)
 gtk_container_add (GTK_CONTAINER (frame), alignment);
 gtk_widget_show (alignment);
 
-table = gtk_table_new (14, 2, FALSE);
-gtk_table_set_col_spacings (GTK_TABLE (table), 6);
-gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+table = gtk_grid_new ();
+gtk_grid_set_column_spacing (GTK_GRID (table), 6);
+gtk_grid_set_row_spacing (GTK_GRID (table), 6);
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Format:&amp;lt;/b&amp;gt;", format, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Format:&amp;lt;/b&amp;gt;", format, &amp;amp;row);
 g_free (format);
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Title:&amp;lt;/b&amp;gt;", title, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Title:&amp;lt;/b&amp;gt;", title, &amp;amp;row);
 g_free (title);
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Author:&amp;lt;/b&amp;gt;", author, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Author:&amp;lt;/b&amp;gt;", author, &amp;amp;row);
 g_free (author);
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Subject:&amp;lt;/b&amp;gt;", subject, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Subject:&amp;lt;/b&amp;gt;", subject, &amp;amp;row);
 g_free (subject);
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Keywords:&amp;lt;/b&amp;gt;", keywords, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Keywords:&amp;lt;/b&amp;gt;", keywords, &amp;amp;row);
 g_free (keywords);
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Creator:&amp;lt;/b&amp;gt;", creator, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Creator:&amp;lt;/b&amp;gt;", creator, &amp;amp;row);
 g_free (creator);
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Producer:&amp;lt;/b&amp;gt;", producer, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Producer:&amp;lt;/b&amp;gt;", producer, &amp;amp;row);
 g_free (producer);
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Linearized:&amp;lt;/b&amp;gt;", linearized ? "Yes" : "No", &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Linearized:&amp;lt;/b&amp;gt;", linearized ? "Yes" : "No", &amp;amp;row);
 
 str = pgd_format_date (creation_date);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Creation Date:&amp;lt;/b&amp;gt;", str, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Creation Date:&amp;lt;/b&amp;gt;", str, &amp;amp;row);
 g_free (str);
 
 str = pgd_format_date (mod_date);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Modification Date:&amp;lt;/b&amp;gt;", str, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Modification Date:&amp;lt;/b&amp;gt;", str, &amp;amp;row);
 g_free (str);
 
 enum_value = g_enum_get_value ((GEnumClass *) g_type_class_peek (POPPLER_TYPE_PAGE_MODE), mode);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Page Mode:&amp;lt;/b&amp;gt;", enum_value-&amp;gt;value_name, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Page Mode:&amp;lt;/b&amp;gt;", enum_value-&amp;gt;value_name, &amp;amp;row);
 
 enum_value = g_enum_get_value ((GEnumClass *) g_type_class_peek (POPPLER_TYPE_PAGE_LAYOUT), layout);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Page Layout:&amp;lt;/b&amp;gt;", enum_value-&amp;gt;value_name, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Page Layout:&amp;lt;/b&amp;gt;", enum_value-&amp;gt;value_name, &amp;amp;row);
 
 if (poppler_document_get_id (document, &amp;amp;perm_id, &amp;amp;up_id)) {
 str = g_strndup (perm_id, 32);
 g_free (perm_id);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Permanent ID:&amp;lt;/b&amp;gt;", str, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Permanent ID:&amp;lt;/b&amp;gt;", str, &amp;amp;row);
 g_free (str);
 str = g_strndup (up_id, 32);
 g_free (up_id);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Update ID:&amp;lt;/b&amp;gt;", str, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Update ID:&amp;lt;/b&amp;gt;", str, &amp;amp;row);
 g_free (str);
 }
 
-pgd_info_add_permissions (GTK_TABLE (table), permissions, &amp;amp;row);
+pgd_info_add_permissions (GTK_GRID (table), permissions, &amp;amp;row);
 
-pgd_info_add_metadata (GTK_TABLE (table), metadata, &amp;amp;row);
+pgd_info_add_metadata (GTK_GRID (table), metadata, &amp;amp;row);
 g_free (metadata);
 
 /* TODO: view_prefs */
diff --git a/glib/demo/layers.c b/glib/demo/layers.c
index fc0ba35..c55de42 100644
--- a/glib/demo/layers.c
+++ b/glib/demo/layers.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -181,24 +181,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_layers_render_page (PgdLayersDemo *demo)
 }
 
 static gboolean
-pgd_layers_viewer_drawing_area_expose (GtkWidget      *area,
-       GdkEventExpose *event,
-       PgdLayersDemo  *demo)
+pgd_layers_viewer_drawing_area_draw (GtkWidget     *area,
+                                     cairo_t       *cr,
+                                     PgdLayersDemo *demo)
 {
-cairo_t *cr;
-
 if (!demo-&amp;gt;surface) {
 demo-&amp;gt;surface = pgd_layers_render_page (demo);
 if (!demo-&amp;gt;surface)
 return FALSE;
 }
 
-gdk_window_clear (gtk_widget_get_window (area));
-
-cr = gdk_cairo_create (gtk_widget_get_window (area));
 cairo_set_source_surface (cr, demo-&amp;gt;surface, 0, 0);
 cairo_paint (cr);
-cairo_destroy (cr);
 
 return TRUE;
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -238,9 +232,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_layers_create_viewer (PgdLayersDemo *demo)
 guint      n_pages;
 gchar     *str;
 
-vbox = gtk_vbox_new (FALSE, 6);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
 
-hbox = gtk_hbox_new (FALSE, 6);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("Page:");
 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -264,8 +258,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_layers_create_viewer (PgdLayersDemo *demo)
 gtk_widget_show (hbox);
 
 demo-&amp;gt;darea = gtk_drawing_area_new ();
-g_signal_connect (G_OBJECT (demo-&amp;gt;darea), "expose_event",
-  G_CALLBACK (pgd_layers_viewer_drawing_area_expose),
+g_signal_connect (G_OBJECT (demo-&amp;gt;darea), "draw",
+  G_CALLBACK (pgd_layers_viewer_drawing_area_draw),
   (gpointer)demo);
 
 swindow = gtk_scrolled_window_new (NULL, NULL);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -385,7 +379,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_layers_create_widget (PopplerDocument *document)
 demo = g_new0 (PgdLayersDemo, 1);
 demo-&amp;gt;doc = g_object_ref (document);
 
-hpaned = gtk_hpaned_new ();
+hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
 
 viewer = pgd_layers_create_viewer (demo);
 
diff --git a/glib/demo/links.c b/glib/demo/links.c
index 6cb4a5d..3670436 100644
--- a/glib/demo/links.c
+++ b/glib/demo/links.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -178,9 +178,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_links_create_widget (PopplerDocument *document)
 
 n_pages = poppler_document_get_n_pages (document);
 
-vbox = gtk_vbox_new (FALSE, 12);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
 
-hbox = gtk_hbox_new (FALSE, 6);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("Page:");
 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -215,7 +215,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_links_create_widget (PopplerDocument *document)
 gtk_box_pack_start (GTK_BOX (vbox), demo-&amp;gt;timer_label, FALSE, TRUE, 0);
 gtk_widget_show (demo-&amp;gt;timer_label);
 
-hpaned = gtk_hpaned_new ();
+hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
 
 demo-&amp;gt;action_view = pgd_action_view_new (document);
 
diff --git a/glib/demo/main.c b/glib/demo/main.c
index d8ed142..2523800 100644
--- a/glib/demo/main.c
+++ b/glib/demo/main.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -180,9 +180,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_demo_get_auth_dialog (GFile *uri_file)
 action_area = gtk_dialog_get_action_area (dialog);
 
 /* Set the dialog up with HIG properties */
-#if !GTK_CHECK_VERSION (2, 22, 0)
-gtk_dialog_set_has_separator (dialog, FALSE);
-#endif
 gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
 gtk_box_set_spacing (GTK_BOX (content_area), 2); /* 2 * 5 + 2 = 12 */
 gtk_container_set_border_width (GTK_CONTAINER (action_area), 5);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -206,7 +203,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_demo_get_auth_dialog (GFile *uri_file)
  -1);
 
 /* Build contents */
-hbox = gtk_hbox_new (FALSE, 12);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
 gtk_box_pack_start (GTK_BOX (content_area), hbox, TRUE, TRUE, 0);
 gtk_widget_show (hbox);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -218,7 +215,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_demo_get_auth_dialog (GFile *uri_file)
 gtk_box_pack_start (GTK_BOX (hbox), icon, FALSE, FALSE, 0);
 gtk_widget_show (icon);
 
-main_vbox = gtk_vbox_new (FALSE, 18);
+main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 18);
 gtk_box_pack_start (GTK_BOX (hbox), main_vbox, TRUE, TRUE, 0);
 gtk_widget_show (main_vbox);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -238,7 +235,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_demo_get_auth_dialog (GFile *uri_file)
     FALSE, FALSE, 0);
 gtk_widget_show (label);
 
-vbox = gtk_vbox_new (FALSE, 6);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
 gtk_box_pack_start (GTK_BOX (main_vbox), vbox, FALSE, FALSE, 0);
 gtk_widget_show (vbox);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -252,9 +249,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_demo_get_auth_dialog (GFile *uri_file)
     FALSE, FALSE, 0);
 gtk_widget_show (entry_container);
 
-table = gtk_table_new (1, 2, FALSE);
-gtk_table_set_col_spacings (GTK_TABLE (table), 12);
-gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+table = gtk_grid_new ();
+gtk_grid_set_column_spacing (GTK_GRID (table), 12);
+gtk_grid_set_row_spacing (GTK_GRID (table), 6);
 gtk_container_add (GTK_CONTAINER (entry_container), table);
 gtk_widget_show (table);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -270,13 +267,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_demo_get_auth_dialog (GFile *uri_file)
   G_CALLBACK (pgd_demo_auth_dialog_entry_activated),
   dialog);
 
-gtk_table_attach (GTK_TABLE (table), label,
-  0, 1, 0, 1,
-  GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+gtk_grid_attach (GTK_GRID (table), label, 0, 0, 1, 1);
 gtk_widget_show (label);
 
-gtk_table_attach_defaults (GTK_TABLE (table), password_entry,
-   1, 2, 0, 1);
+        gtk_grid_attach (GTK_GRID (table), password_entry, 1, 0, 1, 1);
+        gtk_widget_set_hexpand (password_entry, TRUE);
 gtk_widget_show (password_entry);
 
 gtk_label_set_mnemonic_widget (GTK_LABEL (label), password_entry);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -303,12 +298,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; gint main (gint argc, gchar **argv)
 return 1;
 }
 
-/* Threading is always enabled starting from GLib 2.24.0 */
-#if !GLIB_CHECK_VERSION (2, 24, 0)
-if (!g_thread_supported ())
-g_thread_init (NULL);
-#endif
-
 gtk_init (&amp;amp;argc, &amp;amp;argv);
 
 file = g_file_new_for_commandline_arg (argv[1]);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -368,7 +357,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; gint main (gint argc, gchar **argv)
 g_closure_unref (closure);
 gtk_window_add_accel_group (GTK_WINDOW(win), gtk_accel);
 
-hbox = gtk_hbox_new (FALSE, 6);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 treeview = pgd_demo_list_create ();
 gtk_box_pack_start (GTK_BOX (hbox), treeview, FALSE, TRUE, 0);
diff --git a/glib/demo/outline.c b/glib/demo/outline.c
index 5dc7189..55874cc 100644
--- a/glib/demo/outline.c
+++ b/glib/demo/outline.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -161,7 +161,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_outline_create_widget (PopplerDocument *document)
 GtkTreeSelection *selection;
 GtkWidget        *hpaned, *action;
 
-hpaned = gtk_hpaned_new ();
+hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
 
 action = pgd_action_view_new (document);
 
diff --git a/glib/demo/page.c b/glib/demo/page.c
index 7ab008c..ddf7789 100644
--- a/glib/demo/page.c
+++ b/glib/demo/page.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -229,9 +229,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_page_create_widget (PopplerDocument *document)
 
 n_pages = poppler_document_get_n_pages (document);
 
-vbox = gtk_vbox_new (FALSE, 12);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
 
-hbox = gtk_hbox_new (FALSE, 6);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("Page:");
 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -260,7 +260,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_page_create_widget (PopplerDocument *document)
 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
 gtk_widget_show (hbox);
 
-hbox = gtk_hbox_new (FALSE, 6);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 frame = gtk_frame_new (NULL);
 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -274,18 +274,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_page_create_widget (PopplerDocument *document)
 gtk_container_add (GTK_CONTAINER (frame), alignment);
 gtk_widget_show (alignment);
 
-table = gtk_table_new (3, 2, FALSE);
+table = gtk_grid_new ();
+gtk_grid_set_column_spacing (GTK_GRID (table), 6);
+gtk_grid_set_row_spacing (GTK_GRID (table), 6);
 
-gtk_table_set_col_spacings (GTK_TABLE (table), 6);
-gtk_table_set_row_spacings (GTK_TABLE (table), 6);
-
-pgd_table_add_property_with_value_widget (GTK_TABLE (table), "&amp;lt;b&amp;gt;Page Index:&amp;lt;/b&amp;gt;",
+pgd_table_add_property_with_value_widget (GTK_GRID (table), "&amp;lt;b&amp;gt;Page Index:&amp;lt;/b&amp;gt;",
   &amp;amp;(demo-&amp;gt;index), NULL, &amp;amp;row);
-pgd_table_add_property_with_value_widget (GTK_TABLE (table), "&amp;lt;b&amp;gt;Page Label:&amp;lt;/b&amp;gt;",
+pgd_table_add_property_with_value_widget (GTK_GRID (table), "&amp;lt;b&amp;gt;Page Label:&amp;lt;/b&amp;gt;",
   &amp;amp;(demo-&amp;gt;label), NULL, &amp;amp;row);
-pgd_table_add_property_with_value_widget (GTK_TABLE (table), "&amp;lt;b&amp;gt;Page Size:&amp;lt;/b&amp;gt;",
+pgd_table_add_property_with_value_widget (GTK_GRID (table), "&amp;lt;b&amp;gt;Page Size:&amp;lt;/b&amp;gt;",
   &amp;amp;(demo-&amp;gt;size), NULL, &amp;amp;row);
-pgd_table_add_property_with_value_widget (GTK_TABLE (table), "&amp;lt;b&amp;gt;Page Duration:&amp;lt;/b&amp;gt;",
+pgd_table_add_property_with_value_widget (GTK_GRID (table), "&amp;lt;b&amp;gt;Page Duration:&amp;lt;/b&amp;gt;",
   &amp;amp;(demo-&amp;gt;duration), NULL, &amp;amp;row);
 
 gtk_container_add (GTK_CONTAINER (alignment), table);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -307,7 +306,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_page_create_widget (PopplerDocument *document)
 gtk_container_add (GTK_CONTAINER (frame), alignment);
 gtk_widget_show (alignment);
 
-thumnail_box = gtk_vbox_new (FALSE, 6);
+thumnail_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
 
 demo-&amp;gt;thumbnail = gtk_image_new ();
 gtk_box_pack_start (GTK_BOX (thumnail_box), demo-&amp;gt;thumbnail, TRUE, TRUE, 0);
diff --git a/glib/demo/print.c b/glib/demo/print.c
index 17bbe0e..8147036 100644
--- a/glib/demo/print.c
+++ b/glib/demo/print.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -114,24 +114,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_print_create_custom_widget (GtkPrintOperation *op,
                                                            PGD_PRINT_OPTIONS,
                                                            PRINT_DOCUMENT_MARKUPS);
 
-        hbox = gtk_hbox_new (FALSE, 0);
+        hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
         gtk_container_set_border_width (GTK_CONTAINER (hbox), 12);
 
         label = gtk_label_new ("Print: ");
         gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
         gtk_widget_show (label);
 
-#if GTK_CHECK_VERSION (2, 24, 0)
         combo = gtk_combo_box_text_new ();
         gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "Document");
         gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "Document and markup");
         gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "Document and stamps");
-#else
-        combo = gtk_combo_box_new_text ();
-        gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Document");
-        gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Document and markup");
-        gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Document and stamps");
-#endif
+
         demo-&amp;gt;options_combo = combo;
         gtk_combo_box_set_active (GTK_COMBO_BOX (combo), options);
         gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -210,9 +204,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_print_create_widget (PopplerDocument *document)
 
 demo-&amp;gt;doc = g_object_ref (document);
 
-vbox = gtk_vbox_new (FALSE, 12);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
 
-hbox = gtk_hbox_new (FALSE, 6);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 button = gtk_button_new_with_label ("Print...");
 g_signal_connect (G_OBJECT (button), "clicked",
diff --git a/glib/demo/render.c b/glib/demo/render.c
index bb7afbd..48e9210 100644
--- a/glib/demo/render.c
+++ b/glib/demo/render.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -23,16 +23,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 #include "render.h"
 
-typedef enum {
-PGD_RENDER_CAIRO,
-PGD_RENDER_PIXBUF
-} PgdRenderMode;
-
 typedef struct {
 PopplerDocument *doc;
 
 /* Properties */
-PgdRenderMode    mode;
 gint             page;
 gdouble          scale;
 gint             rotate;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -48,7 +42,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef struct {
 GtkWidget       *timer_label;
 
 cairo_surface_t *surface;
-GdkPixbuf       *pixbuf;
 } PgdRenderDemo;
 
 static void
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -61,53 +54,25 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_free (PgdRenderDemo *demo)
 g_object_unref (demo-&amp;gt;doc);
 demo-&amp;gt;doc = NULL;
 }
-
+
 if (demo-&amp;gt;surface) {
 cairo_surface_destroy (demo-&amp;gt;surface);
 demo-&amp;gt;surface = NULL;
 }
 
-if (demo-&amp;gt;pixbuf) {
-g_object_unref (demo-&amp;gt;pixbuf);
-demo-&amp;gt;pixbuf = NULL;
-}
-
 g_free (demo);
 }
 
 static gboolean
-pgd_render_drawing_area_expose (GtkWidget      *area,
-GdkEventExpose *event,
-PgdRenderDemo  *demo)
+pgd_render_drawing_area_draw (GtkWidget     *area,
+                              cairo_t       *cr,
+                              PgdRenderDemo *demo)
 {
-if (demo-&amp;gt;mode == PGD_RENDER_CAIRO &amp;amp;&amp;amp; !demo-&amp;gt;surface)
+if (!demo-&amp;gt;surface)
 return FALSE;
 
-if (demo-&amp;gt;mode == PGD_RENDER_PIXBUF &amp;amp;&amp;amp; !demo-&amp;gt;pixbuf)
-return FALSE;
-
-gdk_window_clear (gtk_widget_get_window (area));
-
-if (demo-&amp;gt;mode == PGD_RENDER_CAIRO) {
-cairo_t *cr;
-
-cr = gdk_cairo_create (gtk_widget_get_window (area));
-cairo_set_source_surface (cr, demo-&amp;gt;surface, 0, 0);
-cairo_paint (cr);
-cairo_destroy (cr);
-} else if (demo-&amp;gt;mode == PGD_RENDER_PIXBUF) {
-gdk_draw_pixbuf (gtk_widget_get_window (area),
- gtk_widget_get_style(area)-&amp;gt;fg_gc[GTK_STATE_NORMAL],
- demo-&amp;gt;pixbuf,
- 0, 0,
- 0, 0,
- gdk_pixbuf_get_width (demo-&amp;gt;pixbuf),
- gdk_pixbuf_get_height (demo-&amp;gt;pixbuf),
- GDK_RGB_DITHER_NORMAL,
- 0, 0);
-} else {
-g_assert_not_reached ();
-}
+        cairo_set_source_surface (cr, demo-&amp;gt;surface, 0, 0);
+        cairo_paint (cr);
 
 return TRUE;
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -122,6 +87,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_start (GtkButton     *button,
 gint         x, y;
 gchar       *str;
 GTimer      *timer;
+        cairo_t     *cr;
 
 page = poppler_document_get_page (demo-&amp;gt;doc, demo-&amp;gt;page);
 if (!page)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -131,10 +97,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_start (GtkButton     *button,
 cairo_surface_destroy (demo-&amp;gt;surface);
 demo-&amp;gt;surface = NULL;
 
-if (demo-&amp;gt;pixbuf)
-g_object_unref (demo-&amp;gt;pixbuf);
-demo-&amp;gt;pixbuf = NULL;
-
 poppler_page_get_size (page, &amp;amp;page_width, &amp;amp;page_height);
 
 if (demo-&amp;gt;rotate == 0 || demo-&amp;gt;rotate == 180) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -149,90 +111,58 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_start (GtkButton     *button,
 y = demo-&amp;gt;slice.x * demo-&amp;gt;scale;
 }
 
-if (demo-&amp;gt;mode == PGD_RENDER_CAIRO) {
-cairo_t *cr;
-
-timer = g_timer_new ();
-demo-&amp;gt;surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
-    width, height);
-cr = cairo_create (demo-&amp;gt;surface);
-
-cairo_save (cr);
-switch (demo-&amp;gt;rotate) {
-case 90:
-cairo_translate (cr, x + width, -y);
-break;
-case 180:
-cairo_translate (cr, x + width, y + height);
-break;
-case 270:
-cairo_translate (cr, -x, y + height);
-break;
-default:
-cairo_translate (cr, -x, -y);
-}
-
-if (demo-&amp;gt;scale != 1.0)
-cairo_scale (cr, demo-&amp;gt;scale, demo-&amp;gt;scale);
-
-if (demo-&amp;gt;rotate != 0)
-cairo_rotate (cr, demo-&amp;gt;rotate * G_PI / 180.0);
-
-if (demo-&amp;gt;printing)
-poppler_page_render_for_printing (page, cr);
-else
-poppler_page_render (page, cr);
-cairo_restore (cr);
-
-cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
-cairo_set_source_rgb (cr, 1., 1., 1.);
-cairo_paint (cr);
-
-g_timer_stop (timer);
-
-cairo_destroy (cr);
-} else if (demo-&amp;gt;mode == PGD_RENDER_PIXBUF) {
-#ifdef POPPLER_WITH_GDK
-timer = g_timer_new ();
-demo-&amp;gt;pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
-       FALSE, 8, width, height);
-gdk_pixbuf_fill (demo-&amp;gt;pixbuf, 0xffffff);
-if (demo-&amp;gt;printing) {
-poppler_page_render_to_pixbuf_for_printing (page,
-    x, y,
-    width,
-    height,
-    demo-&amp;gt;scale,
-    demo-&amp;gt;rotate,
-    demo-&amp;gt;pixbuf);
-} else {
-poppler_page_render_to_pixbuf (page,
-       x, y,
-       width,
-       height,
-       demo-&amp;gt;scale,
-       demo-&amp;gt;rotate,
-       demo-&amp;gt;pixbuf);
-}
-g_timer_stop (timer);
-#endif /* POPPLER_WITH_GDK */
-} else {
-g_assert_not_reached ();
-}
-
+        timer = g_timer_new ();
+        demo-&amp;gt;surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                                    width, height);
+        cr = cairo_create (demo-&amp;gt;surface);
+
+        cairo_save (cr);
+        switch (demo-&amp;gt;rotate) {
+        case 90:
+                cairo_translate (cr, x + width, -y);
+                break;
+        case 180:
+                cairo_translate (cr, x + width, y + height);
+                break;
+        case 270:
+                cairo_translate (cr, -x, y + height);
+                break;
+        default:
+                cairo_translate (cr, -x, -y);
+        }
+
+        if (demo-&amp;gt;scale != 1.0)
+                cairo_scale (cr, demo-&amp;gt;scale, demo-&amp;gt;scale);
+
+        if (demo-&amp;gt;rotate != 0)
+                cairo_rotate (cr, demo-&amp;gt;rotate * G_PI / 180.0);
+
+        if (demo-&amp;gt;printing)
+                poppler_page_render_for_printing (page, cr);
+        else
+                poppler_page_render (page, cr);
+        cairo_restore (cr);
+
+        cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
+        cairo_set_source_rgb (cr, 1., 1., 1.);
+        cairo_paint (cr);
+
+        g_timer_stop (timer);
+
+        cairo_destroy (cr);
 g_object_unref (page);
-
+
 str = g_strdup_printf ("&amp;lt;i&amp;gt;Page rendered in %.4f seconds&amp;lt;/i&amp;gt;",
        g_timer_elapsed (timer, NULL));
 gtk_label_set_markup (GTK_LABEL (demo-&amp;gt;timer_label), str);
 g_free (str);
-
+
 g_timer_destroy (timer);
-
+
 gtk_widget_set_size_request (demo-&amp;gt;darea, width, height);
 gtk_widget_queue_draw (demo-&amp;gt;darea);
 }
-
+
 static void
 pgd_render_slice_selector_setup (PgdRenderDemo *demo)
 {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -288,13 +218,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_printing_selector_changed (GtkToggleButton *tooglebutton,
 }
 
 static void
-pgd_render_mode_selector_changed (GtkComboBox   *combobox,
-  PgdRenderDemo *demo)
-{
-demo-&amp;gt;mode = gtk_combo_box_get_active (combobox);
-}
-
-static void
 pgd_render_slice_selector_value_changed (GtkSpinButton *spinbutton,
  PgdRenderDemo *demo)
 {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -312,7 +235,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_properties_selector_create (PgdRenderDemo *demo)
 GtkWidget *page_hbox, *page_selector;
 GtkWidget *scale_hbox, *scale_selector;
 GtkWidget *rotate_hbox, *rotate_selector;
-GtkWidget *mode_hbox, *mode_selector;
 GtkWidget *printing_selector;
 GtkWidget *slice_hbox, *slice_selector;
 GtkWidget *button;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -321,18 +243,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_properties_selector_create (PgdRenderDemo *demo)
 
 n_pages = poppler_document_get_n_pages (demo-&amp;gt;doc);
 
-vbox = gtk_vbox_new (FALSE, 6);
-
-hbox = gtk_hbox_new (FALSE, 12);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
+
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
 gtk_widget_show (hbox);
 
-page_hbox = gtk_hbox_new (FALSE, 6);
+page_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("Page:");
 gtk_box_pack_start (GTK_BOX (page_hbox), label, TRUE, TRUE, 0);
 gtk_widget_show (label);
-
+
 page_selector = gtk_spin_button_new_with_range (1, n_pages, 1);
 g_signal_connect (G_OBJECT (page_selector), "value-changed",
   G_CALLBACK (pgd_render_page_selector_value_changed),
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -349,12 +271,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_properties_selector_create (PgdRenderDemo *demo)
 gtk_box_pack_start (GTK_BOX (hbox), page_hbox, FALSE, TRUE, 0);
 gtk_widget_show (page_hbox);
 
-scale_hbox = gtk_hbox_new (FALSE, 6);
-
+scale_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+
 label = gtk_label_new ("Scale:");
 gtk_box_pack_start (GTK_BOX (scale_hbox), label, TRUE, TRUE, 0);
 gtk_widget_show (label);
-
+
 scale_selector = gtk_spin_button_new_with_range (0, 10.0, 0.1);
 gtk_spin_button_set_value (GTK_SPIN_BUTTON (scale_selector), 1.0);
 g_signal_connect (G_OBJECT (scale_selector), "value-changed",
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -366,25 +288,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_properties_selector_create (PgdRenderDemo *demo)
 gtk_box_pack_start (GTK_BOX (hbox), scale_hbox, FALSE, TRUE, 0);
 gtk_widget_show (scale_hbox);
 
-rotate_hbox = gtk_hbox_new (FALSE, 6);
+rotate_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("Rotate:");
 gtk_box_pack_start (GTK_BOX (rotate_hbox), label, TRUE, TRUE, 0);
 gtk_widget_show (label);
 
-#if GTK_CHECK_VERSION (2, 24, 0)
 rotate_selector = gtk_combo_box_text_new ();
 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (rotate_selector), "0");
 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (rotate_selector), "90");
 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (rotate_selector), "180");
 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (rotate_selector), "270");
-#else
-rotate_selector = gtk_combo_box_new_text ();
-gtk_combo_box_append_text (GTK_COMBO_BOX (rotate_selector), "0");
-gtk_combo_box_append_text (GTK_COMBO_BOX (rotate_selector), "90");
-gtk_combo_box_append_text (GTK_COMBO_BOX (rotate_selector), "180");
-gtk_combo_box_append_text (GTK_COMBO_BOX (rotate_selector), "270");
-#endif
 gtk_combo_box_set_active (GTK_COMBO_BOX (rotate_selector), 0);
 g_signal_connect (G_OBJECT (rotate_selector), "changed",
   G_CALLBACK (pgd_render_rotate_selector_changed),
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -395,35 +309,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_properties_selector_create (PgdRenderDemo *demo)
 gtk_box_pack_start (GTK_BOX (hbox), rotate_hbox, FALSE, TRUE, 0);
 gtk_widget_show (rotate_hbox);
 
-mode_hbox = gtk_hbox_new (FALSE, 6);
-
-label = gtk_label_new ("Mode:");
-gtk_box_pack_start (GTK_BOX (mode_hbox), label, TRUE, TRUE, 0);
-gtk_widget_show (label);
-
-#if GTK_CHECK_VERSION (2, 24, 0)
-mode_selector = gtk_combo_box_text_new ();
-gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (mode_selector), "cairo");
-#ifdef POPPLER_WITH_GDK
-gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (mode_selector), "pixbuf");
-#endif
-#else // ! GTK_CHECK_VERSION (2, 24, 0)
-mode_selector = gtk_combo_box_new_text ();
-gtk_combo_box_append_text (GTK_COMBO_BOX (mode_selector), "cairo");
-#ifdef POPPLER_WITH_GDK
-gtk_combo_box_append_text (GTK_COMBO_BOX (mode_selector), "pixbuf");
-#endif
-#endif // GTK_CHECK_VERSION (2, 24, 0)
-gtk_combo_box_set_active (GTK_COMBO_BOX (mode_selector), 0);
-g_signal_connect (G_OBJECT (mode_selector), "changed",
-  G_CALLBACK (pgd_render_mode_selector_changed),
-  (gpointer)demo);
-gtk_box_pack_start (GTK_BOX (mode_hbox), mode_selector, TRUE, TRUE, 0);
-gtk_widget_show (mode_selector);
-
-gtk_box_pack_start (GTK_BOX (hbox), mode_hbox, FALSE, TRUE, 0);
-gtk_widget_show (mode_hbox);
-
 printing_selector = gtk_check_button_new_with_label ("Printing");
 g_signal_connect (printing_selector, "toggled",
   G_CALLBACK (pgd_render_printing_selector_changed),
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -431,11 +316,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_properties_selector_create (PgdRenderDemo *demo)
 gtk_box_pack_start (GTK_BOX (hbox), printing_selector, FALSE, TRUE, 0);
 gtk_widget_show (printing_selector);
 
-hbox = gtk_hbox_new (FALSE, 12);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
 gtk_widget_show (hbox);
 
-slice_hbox = gtk_hbox_new (FALSE, 6);
+slice_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("x:");
 gtk_box_pack_start (GTK_BOX (slice_hbox), label, TRUE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -451,8 +336,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_properties_selector_create (PgdRenderDemo *demo)
 gtk_box_pack_start (GTK_BOX (hbox), slice_hbox, FALSE, TRUE, 0);
 gtk_widget_show (slice_hbox);
 
-slice_hbox = gtk_hbox_new (FALSE, 6);
-
+slice_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+
 label = gtk_label_new ("y:");
 gtk_box_pack_start (GTK_BOX (slice_hbox), label, TRUE, TRUE, 0);
 gtk_widget_show (label);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -466,9 +351,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_properties_selector_create (PgdRenderDemo *demo)
 
 gtk_box_pack_start (GTK_BOX (hbox), slice_hbox, FALSE, TRUE, 0);
 gtk_widget_show (slice_hbox);
-
-slice_hbox = gtk_hbox_new (FALSE, 6);
-
+
+slice_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+
 label = gtk_label_new ("width:");
 gtk_box_pack_start (GTK_BOX (slice_hbox), label, TRUE, TRUE, 0);
 gtk_widget_show (label);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -482,9 +367,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_properties_selector_create (PgdRenderDemo *demo)
 
 gtk_box_pack_start (GTK_BOX (hbox), slice_hbox, FALSE, TRUE, 0);
 gtk_widget_show (slice_hbox);
-
-slice_hbox = gtk_hbox_new (FALSE, 6);
-
+
+slice_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+
 label = gtk_label_new ("height:");
 gtk_box_pack_start (GTK_BOX (slice_hbox), label, TRUE, TRUE, 0);
 gtk_widget_show (label);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -528,17 +413,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_render_create_widget (PopplerDocument *document)
 demo-&amp;gt;doc = g_object_ref (document);
 demo-&amp;gt;scale = 1.0;
 
-vbox = gtk_vbox_new (FALSE, 6);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
 
 hbox = pgd_render_properties_selector_create (demo);
 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 6);
 gtk_widget_show (hbox);
 
 demo-&amp;gt;darea = gtk_drawing_area_new ();
-g_signal_connect (G_OBJECT (demo-&amp;gt;darea), "expose_event",
-  G_CALLBACK (pgd_render_drawing_area_expose),
+g_signal_connect (G_OBJECT (demo-&amp;gt;darea), "draw",
+  G_CALLBACK (pgd_render_drawing_area_draw),
   (gpointer)demo);
-
+
 demo-&amp;gt;swindow = gtk_scrolled_window_new (NULL, NULL);
 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (demo-&amp;gt;swindow),
 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
diff --git a/glib/demo/selections.c b/glib/demo/selections.c
index bfd9070..b3095fe 100644
--- a/glib/demo/selections.c
+++ b/glib/demo/selections.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -172,7 +172,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_update_cursor (PgdSelectionsDemo *demo,
 gdk_window_set_cursor (window, cursor);
 gdk_flush ();
 if (cursor)
-gdk_cursor_unref (cursor);
+g_object_unref (cursor);
 }
 
 static gboolean
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -220,19 +220,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_render_selections (PgdSelectionsDemo *demo)
 }
 
 static gboolean
-pgd_selections_drawing_area_expose (GtkWidget         *area,
-    GdkEventExpose    *event,
-    PgdSelectionsDemo *demo)
+pgd_selections_drawing_area_draw (GtkWidget         *area,
+                                  cairo_t           *cr,
+                                  PgdSelectionsDemo *demo)
 {
-cairo_t *cr;
-
 if (!demo-&amp;gt;surface)
 return FALSE;
 
-gdk_window_clear (gtk_widget_get_window (area));
-
-cr = gdk_cairo_create (gtk_widget_get_window (area));
-
 cairo_save (cr);
 cairo_set_source_surface (cr, demo-&amp;gt;surface, 0, 0);
 cairo_paint (cr);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -243,8 +237,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_drawing_area_expose (GtkWidget         *area,
 cairo_paint (cr);
 }
 
-cairo_destroy (cr);
-
 return TRUE;
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -335,7 +327,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void
 pgd_selections_drawing_area_realize (GtkWidget         *area,
      PgdSelectionsDemo *demo)
 {
-GtkStyle *style = gtk_widget_get_style (area);
+GtkStyleContext *style_context = gtk_widget_get_style_context (area);
+        GdkRGBA rgba;
 
 gtk_widget_add_events (area,
        GDK_POINTER_MOTION_HINT_MASK |
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -344,10 +337,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_drawing_area_realize (GtkWidget         *area,
        GDK_BUTTON_RELEASE_MASK);
 g_object_set (area, "has-tooltip", TRUE, NULL);
 
-gtk_color_button_set_color (GTK_COLOR_BUTTON (demo-&amp;gt;fg_color_button),
-    &amp;amp;style-&amp;gt;text[GTK_STATE_SELECTED]);
-gtk_color_button_set_color (GTK_COLOR_BUTTON (demo-&amp;gt;bg_color_button),
-    &amp;amp;style-&amp;gt;base[GTK_STATE_SELECTED]);
+        gtk_style_context_get_color (style_context, GTK_STATE_FLAG_SELECTED, &amp;amp;rgba);
+        gtk_color_button_set_rgba (GTK_COLOR_BUTTON (demo-&amp;gt;fg_color_button), &amp;amp;rgba);
+        gtk_style_context_get_background_color (style_context, GTK_STATE_FLAG_SELECTED, &amp;amp;rgba);
+        gtk_color_button_set_rgba (GTK_COLOR_BUTTON (demo-&amp;gt;bg_color_button), &amp;amp;rgba);
 }
 
 static gboolean
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -463,12 +456,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_fg_color_changed (GtkColorButton    *button,
  GParamSpec        *pspec,
  PgdSelectionsDemo *demo)
 {
-GdkColor color;
+GdkRGBA color;
 
-gtk_color_button_get_color (GTK_COLOR_BUTTON (button), &amp;amp;color);
-demo-&amp;gt;glyph_color.red = color.red;
-demo-&amp;gt;glyph_color.green = color.green;
-demo-&amp;gt;glyph_color.blue = color.blue;
+gtk_color_button_get_rgba (GTK_COLOR_BUTTON (button), &amp;amp;color);
+demo-&amp;gt;glyph_color.red = CLAMP ((guint) (color.red * 65535), 0, 65535);
+demo-&amp;gt;glyph_color.green = CLAMP ((guint) (color.green * 65535), 0, 65535);
+demo-&amp;gt;glyph_color.blue = CLAMP ((guint) (color.blue * 65535), 0, 65535);
 }
 
 static void
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -476,12 +469,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_bg_color_changed (GtkColorButton    *button,
  GParamSpec        *pspec,
  PgdSelectionsDemo *demo)
 {
-GdkColor color;
+GdkRGBA color;
 
-gtk_color_button_get_color (GTK_COLOR_BUTTON (button), &amp;amp;color);
-demo-&amp;gt;background_color.red = color.red;
-demo-&amp;gt;background_color.green = color.green;
-demo-&amp;gt;background_color.blue = color.blue;
+gtk_color_button_get_rgba (GTK_COLOR_BUTTON (button), &amp;amp;color);
+demo-&amp;gt;background_color.red = CLAMP ((guint) (color.red * 65535), 0, 65535);
+demo-&amp;gt;background_color.green = CLAMP ((guint) (color.green * 65535), 0, 65535);
+demo-&amp;gt;background_color.blue = CLAMP ((guint) (color.blue * 65535), 0, 65535);
 }
 
 GtkWidget *
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -499,13 +492,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_properties_selector_create (PgdSelectionsDemo *demo)
 
 n_pages = poppler_document_get_n_pages (demo-&amp;gt;doc);
 
-vbox = gtk_vbox_new (FALSE, 6);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
 
-hbox = gtk_hbox_new (FALSE, 12);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
 gtk_widget_show (hbox);
 
-page_hbox = gtk_hbox_new (FALSE, 6);
+page_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("Page:");
 gtk_box_pack_start (GTK_BOX (page_hbox), label, TRUE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -527,7 +520,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_properties_selector_create (PgdSelectionsDemo *demo)
 gtk_box_pack_start (GTK_BOX (hbox), page_hbox, FALSE, TRUE, 0);
 gtk_widget_show (page_hbox);
 
-scale_hbox = gtk_hbox_new (FALSE, 6);
+scale_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("Scale:");
 gtk_box_pack_start (GTK_BOX (scale_hbox), label, TRUE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -544,25 +537,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_properties_selector_create (PgdSelectionsDemo *demo)
 gtk_box_pack_start (GTK_BOX (hbox), scale_hbox, FALSE, TRUE, 0);
 gtk_widget_show (scale_hbox);
 
-rotate_hbox = gtk_hbox_new (FALSE, 6);
+rotate_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("Rotate:");
 gtk_box_pack_start (GTK_BOX (rotate_hbox), label, TRUE, TRUE, 0);
 gtk_widget_show (label);
 
-#if GTK_CHECK_VERSION (2, 24, 0)
 rotate_selector = gtk_combo_box_text_new ();
 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (rotate_selector), "0");
 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (rotate_selector), "90");
 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (rotate_selector), "180");
 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (rotate_selector), "270");
-#else
-rotate_selector = gtk_combo_box_new_text ();
-gtk_combo_box_append_text (GTK_COMBO_BOX (rotate_selector), "0");
-gtk_combo_box_append_text (GTK_COMBO_BOX (rotate_selector), "90");
-gtk_combo_box_append_text (GTK_COMBO_BOX (rotate_selector), "180");
-gtk_combo_box_append_text (GTK_COMBO_BOX (rotate_selector), "270");
-#endif
 gtk_combo_box_set_active (GTK_COMBO_BOX (rotate_selector), 0);
 #if 0
 g_signal_connect (G_OBJECT (rotate_selector), "changed",
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -575,11 +560,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_properties_selector_create (PgdSelectionsDemo *demo)
 gtk_box_pack_start (GTK_BOX (hbox), rotate_hbox, FALSE, TRUE, 0);
 gtk_widget_show (rotate_hbox);
 
-hbox = gtk_hbox_new (FALSE, 12);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
 gtk_widget_show (hbox);
 
-color_hbox = gtk_hbox_new (FALSE, 6);
+color_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("Foreground Color:");
 gtk_box_pack_start (GTK_BOX (color_hbox), label, TRUE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -595,7 +580,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_properties_selector_create (PgdSelectionsDemo *demo)
 gtk_box_pack_start (GTK_BOX (hbox), color_hbox, FALSE, TRUE, 0);
 gtk_widget_show (color_hbox);
 
-color_hbox = gtk_hbox_new (FALSE, 6);
+color_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("Background Color:");
 gtk_box_pack_start (GTK_BOX (color_hbox), label, TRUE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -643,7 +628,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_create_widget (PopplerDocument *document)
 
 pgd_selections_clear_selections (demo);
 
-vbox = gtk_vbox_new (FALSE, 6);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
 
 hbox = pgd_selections_properties_selector_create (demo);
 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 6);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -653,8 +638,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_selections_create_widget (PopplerDocument *document)
 g_signal_connect (demo-&amp;gt;darea, "realize",
   G_CALLBACK (pgd_selections_drawing_area_realize),
   (gpointer)demo);
-g_signal_connect (demo-&amp;gt;darea, "expose_event",
-  G_CALLBACK (pgd_selections_drawing_area_expose),
+g_signal_connect (demo-&amp;gt;darea, "draw",
+  G_CALLBACK (pgd_selections_drawing_area_draw),
   (gpointer)demo);
 g_signal_connect (demo-&amp;gt;darea, "button_press_event",
   G_CALLBACK (pgd_selections_drawing_area_button_press),
diff --git a/glib/demo/text.c b/glib/demo/text.c
index 3a7b2cd..0d3781e 100644
--- a/glib/demo/text.c
+++ b/glib/demo/text.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -303,11 +303,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_text_create_widget (PopplerDocument *document)
 
 n_pages = poppler_document_get_n_pages (document);
 
-vbox = gtk_vbox_new (FALSE, 12);
-vbox2 = gtk_vbox_new (FALSE, 12);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
+vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
 textinfo = gtk_label_new ("TextInfo");
 
-hbox = gtk_hbox_new (FALSE, 6);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 label = gtk_label_new ("Page:");
 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -342,7 +342,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_text_create_widget (PopplerDocument *document)
 gtk_box_pack_start (GTK_BOX (vbox), demo-&amp;gt;timer_label, FALSE, TRUE, 0);
 gtk_widget_show (demo-&amp;gt;timer_label);
 
-hpaned = gtk_hpaned_new ();
+hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
 gtk_paned_set_position (GTK_PANED (hpaned), 300);
 
 swindow = gtk_scrolled_window_new (NULL, NULL);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -414,18 +414,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_text_create_widget (PopplerDocument *document)
         gtk_container_add (GTK_CONTAINER (frame), alignment);
         gtk_widget_show (alignment);
 
-        table = gtk_table_new (4, 2, FALSE);
-        gtk_table_set_col_spacings (GTK_TABLE (table), 6);
-        gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+        table = gtk_grid_new ();
+        gtk_grid_set_column_spacing (GTK_GRID (table), 6);
+        gtk_grid_set_row_spacing (GTK_GRID (table), 6);
 
         demo-&amp;gt;font_name = gtk_label_new (NULL);
-        pgd_table_add_property_with_custom_widget (GTK_TABLE (table), "&amp;lt;b&amp;gt;Font Name:&amp;lt;/b&amp;gt;", demo-&amp;gt;font_name, &amp;amp;row);
+        pgd_table_add_property_with_custom_widget (GTK_GRID (table), "&amp;lt;b&amp;gt;Font Name:&amp;lt;/b&amp;gt;", demo-&amp;gt;font_name, &amp;amp;row);
         demo-&amp;gt;font_size = gtk_label_new (NULL);
-        pgd_table_add_property_with_custom_widget (GTK_TABLE (table), "&amp;lt;b&amp;gt;Font Size:&amp;lt;/b&amp;gt;", demo-&amp;gt;font_size, &amp;amp;row);
+        pgd_table_add_property_with_custom_widget (GTK_GRID (table), "&amp;lt;b&amp;gt;Font Size:&amp;lt;/b&amp;gt;", demo-&amp;gt;font_size, &amp;amp;row);
         demo-&amp;gt;is_underlined = gtk_label_new (NULL);
-        pgd_table_add_property_with_custom_widget (GTK_TABLE (table), "&amp;lt;b&amp;gt;Underlined:&amp;lt;/b&amp;gt;", demo-&amp;gt;is_underlined, &amp;amp;row);
+        pgd_table_add_property_with_custom_widget (GTK_GRID (table), "&amp;lt;b&amp;gt;Underlined:&amp;lt;/b&amp;gt;", demo-&amp;gt;is_underlined, &amp;amp;row);
         demo-&amp;gt;text_color = gtk_image_new ();
-        pgd_table_add_property_with_custom_widget (GTK_TABLE (table), "&amp;lt;b&amp;gt;Color:&amp;lt;/b&amp;gt;", demo-&amp;gt;text_color, &amp;amp;row);
+        pgd_table_add_property_with_custom_widget (GTK_GRID (table), "&amp;lt;b&amp;gt;Color:&amp;lt;/b&amp;gt;", demo-&amp;gt;text_color, &amp;amp;row);
 
         gtk_container_add (GTK_CONTAINER (alignment), table);
         gtk_widget_show (table);
diff --git a/glib/demo/transitions.c b/glib/demo/transitions.c
index b6188b5..e6e2ab4 100644
--- a/glib/demo/transitions.c
+++ b/glib/demo/transitions.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -275,9 +275,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_transitions_create_widget (PopplerDocument *document)
 
 demo-&amp;gt;doc = g_object_ref (document);
 
-vbox = gtk_vbox_new (FALSE, 12);
+vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
 
-hbox = gtk_hbox_new (FALSE, 6);
+hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
 demo-&amp;gt;progress = gtk_progress_bar_new ();
 gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (demo-&amp;gt;progress),
diff --git a/glib/demo/utils.c b/glib/demo/utils.c
index 625596c..f1d47c8 100644
--- a/glib/demo/utils.c
+++ b/glib/demo/utils.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -24,7 +24,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include "utils.h"
 
 void
-pgd_table_add_property_with_custom_widget (GtkTable    *table,
+pgd_table_add_property_with_custom_widget (GtkGrid     *table,
    const gchar *markup,
    GtkWidget   *widget,
    gint        *row)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -34,19 +34,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_table_add_property_with_custom_widget (GtkTable    *table,
 label = gtk_label_new (NULL);
 g_object_set (G_OBJECT (label), "xalign", 0.0, NULL);
 gtk_label_set_markup (GTK_LABEL (label), markup);
-gtk_table_attach (GTK_TABLE (table), label, 0, 1, *row, *row + 1,
-  GTK_FILL, GTK_FILL, 0, 0);
+gtk_grid_attach (GTK_GRID (table), label, 0, *row, 1, 1);
 gtk_widget_show (label);
 
-gtk_table_attach (GTK_TABLE (table), widget, 1, 2, *row, *row + 1,
-  GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+gtk_grid_attach (GTK_GRID (table), widget, 1, *row, 1, 1);
+        gtk_widget_set_hexpand (widget, TRUE);
 gtk_widget_show (widget);
 
 *row += 1;
 }
 
 void
-pgd_table_add_property_with_value_widget (GtkTable    *table,
+pgd_table_add_property_with_value_widget (GtkGrid     *table,
   const gchar *markup,
   GtkWidget  **value_widget,
   const gchar *value,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -64,7 +63,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_table_add_property_with_value_widget (GtkTable    *table,
 }
 
 void
-pgd_table_add_property (GtkTable    *table,
+pgd_table_add_property (GtkGrid     *table,
 const gchar *markup,
 const gchar *value,
 gint        *row)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -93,7 +92,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_action_view_new (PopplerDocument *document)
 
 static void
 pgd_action_view_add_destination (GtkWidget   *action_view,
- GtkTable    *table,
+ GtkGrid     *table,
  PopplerDest *dest,
  gboolean     remote,
  gint        *row)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -165,13 +164,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_action_view_add_destination (GtkWidget   *action_view,
 alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 5, 5, 12, 5);
 
-new_table = gtk_table_new (8, 2, FALSE);
-gtk_table_set_col_spacings (GTK_TABLE (new_table), 6);
-gtk_table_set_row_spacings (GTK_TABLE (new_table), 6);
-gtk_table_attach_defaults (table, alignment, 0, 2, *row, *row + 1);
+new_table = gtk_grid_new ();
+gtk_grid_set_column_spacing (GTK_GRID (new_table), 6);
+gtk_grid_set_row_spacing (GTK_GRID (new_table), 6);
+gtk_grid_attach (GTK_GRID(table), alignment, 0, *row, 1, 1);
 gtk_widget_show (alignment);
 
-pgd_action_view_add_destination (action_view, GTK_TABLE (new_table),
+pgd_action_view_add_destination (action_view, GTK_GRID (new_table),
  new_dest, FALSE, &amp;amp;new_row);
 poppler_dest_free (new_dest);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -329,68 +328,68 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_action_view_set_action (GtkWidget     *action_view,
 if (!action)
 return;
 
-table = gtk_table_new (10, 2, FALSE);
-gtk_table_set_col_spacings (GTK_TABLE (table), 6);
-gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+table = gtk_grid_new ();
+gtk_grid_set_column_spacing (GTK_GRID (table), 6);
+gtk_grid_set_row_spacing (GTK_GRID (table), 6);
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Title:&amp;lt;/b&amp;gt;", action-&amp;gt;any.title, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Title:&amp;lt;/b&amp;gt;", action-&amp;gt;any.title, &amp;amp;row);
 
 switch (action-&amp;gt;type) {
 case POPPLER_ACTION_UNKNOWN:
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "Unknown", &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "Unknown", &amp;amp;row);
 break;
 case POPPLER_ACTION_NONE:
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "None", &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "None", &amp;amp;row);
 break;
 case POPPLER_ACTION_GOTO_DEST:
-pgd_action_view_add_destination (action_view, GTK_TABLE (table), action-&amp;gt;goto_dest.dest, FALSE, &amp;amp;row);
+pgd_action_view_add_destination (action_view, GTK_GRID (table), action-&amp;gt;goto_dest.dest, FALSE, &amp;amp;row);
 break;
 case POPPLER_ACTION_GOTO_REMOTE:
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "Remote Destination", &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Filename:&amp;lt;/b&amp;gt;", action-&amp;gt;goto_remote.file_name, &amp;amp;row);
-pgd_action_view_add_destination (action_view, GTK_TABLE (table), action-&amp;gt;goto_remote.dest, TRUE, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "Remote Destination", &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Filename:&amp;lt;/b&amp;gt;", action-&amp;gt;goto_remote.file_name, &amp;amp;row);
+pgd_action_view_add_destination (action_view, GTK_GRID (table), action-&amp;gt;goto_remote.dest, TRUE, &amp;amp;row);
 break;
 case POPPLER_ACTION_LAUNCH:
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "Launch", &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Filename:&amp;lt;/b&amp;gt;", action-&amp;gt;launch.file_name, &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Params:&amp;lt;/b&amp;gt;", action-&amp;gt;launch.params, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "Launch", &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Filename:&amp;lt;/b&amp;gt;", action-&amp;gt;launch.file_name, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Params:&amp;lt;/b&amp;gt;", action-&amp;gt;launch.params, &amp;amp;row);
 break;
 case POPPLER_ACTION_URI:
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "External URI", &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;URI&amp;lt;/b&amp;gt;", action-&amp;gt;uri.uri, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "External URI", &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;URI&amp;lt;/b&amp;gt;", action-&amp;gt;uri.uri, &amp;amp;row);
 break;
 case POPPLER_ACTION_NAMED:
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "Named Action", &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Name:&amp;lt;/b&amp;gt;", action-&amp;gt;named.named_dest, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "Named Action", &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Name:&amp;lt;/b&amp;gt;", action-&amp;gt;named.named_dest, &amp;amp;row);
 break;
 case POPPLER_ACTION_MOVIE: {
 GtkWidget *movie_view = pgd_movie_view_new ();
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "Movie", &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Operation:&amp;lt;/b&amp;gt;", get_movie_op (action-&amp;gt;movie.operation), &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "Movie", &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Operation:&amp;lt;/b&amp;gt;", get_movie_op (action-&amp;gt;movie.operation), &amp;amp;row);
 pgd_movie_view_set_movie (movie_view, action-&amp;gt;movie.movie);
-pgd_table_add_property_with_custom_widget (GTK_TABLE (table), "&amp;lt;b&amp;gt;Movie:&amp;lt;/b&amp;gt;", movie_view, &amp;amp;row);
+pgd_table_add_property_with_custom_widget (GTK_GRID (table), "&amp;lt;b&amp;gt;Movie:&amp;lt;/b&amp;gt;", movie_view, &amp;amp;row);
 }
 break;
 case POPPLER_ACTION_RENDITION: {
 gchar *text;
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "Rendition", &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "Rendition", &amp;amp;row);
 text = g_strdup_printf ("%d", action-&amp;gt;rendition.op);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Operation:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Operation:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
 g_free (text);
 if (action-&amp;gt;rendition.media) {
 gboolean   embedded = poppler_media_is_embedded (action-&amp;gt;rendition.media);
 GtkWidget *button;
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Embedded:&amp;lt;/b&amp;gt;", embedded ? "Yes": "No", &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Embedded:&amp;lt;/b&amp;gt;", embedded ? "Yes": "No", &amp;amp;row);
 if (embedded) {
 const gchar *mime_type = poppler_media_get_mime_type (action-&amp;gt;rendition.media);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Mime type:&amp;lt;/b&amp;gt;",
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Mime type:&amp;lt;/b&amp;gt;",
 mime_type ? mime_type : "",
 &amp;amp;row);
 } else {
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Filename:&amp;lt;/b&amp;gt;",
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Filename:&amp;lt;/b&amp;gt;",
 poppler_media_get_filename (action-&amp;gt;rendition.media),
 &amp;amp;row);
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -399,7 +398,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_action_view_set_action (GtkWidget     *action_view,
 g_signal_connect (button, "clicked",
   G_CALLBACK (pgd_action_view_play_rendition),
   action-&amp;gt;rendition.media);
-pgd_table_add_property_with_custom_widget (GTK_TABLE (table), NULL, button, &amp;amp;row);
+pgd_table_add_property_with_custom_widget (GTK_GRID (table), NULL, button, &amp;amp;row);
 gtk_widget_show (button);
 }
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -408,7 +407,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_action_view_set_action (GtkWidget     *action_view,
 GList     *l;
 GtkWidget *button;
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "OCGState", &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "OCGState", &amp;amp;row);
 
 for (l = action-&amp;gt;ocg_state.state_list; l; l = g_list_next (l)) {
 PopplerActionLayer *action_layer = (PopplerActionLayer *)l-&amp;gt;data;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -426,7 +425,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_action_view_set_action (GtkWidget     *action_view,
 text = g_strdup_printf ("%d layers Toggle", n_layers);
 break;
 }
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Action:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Action:&amp;lt;/b&amp;gt;", text, &amp;amp;row);
 g_free (text);
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -434,7 +433,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_action_view_set_action (GtkWidget     *action_view,
 g_signal_connect (button, "clicked",
   G_CALLBACK (pgd_action_view_do_action_layer),
   action-&amp;gt;ocg_state.state_list);
-pgd_table_add_property_with_custom_widget (GTK_TABLE (table), NULL, button, &amp;amp;row);
+pgd_table_add_property_with_custom_widget (GTK_GRID (table), NULL, button, &amp;amp;row);
 gtk_widget_show (button);
 }
 break;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -443,7 +442,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_action_view_set_action (GtkWidget     *action_view,
                 GtkWidget     *textview;
                 GtkWidget     *swindow;
 
-                pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "JavaScript", &amp;amp;row);
+                pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Type:&amp;lt;/b&amp;gt;", "JavaScript", &amp;amp;row);
 
                 buffer = gtk_text_buffer_new (NULL);
                 if (action-&amp;gt;javascript.script)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -459,7 +458,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_action_view_set_action (GtkWidget     *action_view,
                 gtk_container_add (GTK_CONTAINER (swindow), textview);
                 gtk_widget_show (textview);
 
-                pgd_table_add_property_with_custom_widget (GTK_TABLE (table), NULL, swindow, &amp;amp;row);
+                pgd_table_add_property_with_custom_widget (GTK_GRID (table), NULL, swindow, &amp;amp;row);
                 gtk_widget_show (swindow);
         }
                 break;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -565,19 +564,19 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pgd_movie_view_set_movie (GtkWidget    *movie_view,
 if (!movie)
 return;
 
-table = gtk_table_new (10, 2, FALSE);
-gtk_table_set_col_spacings (GTK_TABLE (table), 6);
-gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+table = gtk_grid_new ();
+gtk_grid_set_column_spacing (GTK_GRID (table), 6);
+gtk_grid_set_row_spacing (GTK_GRID (table), 6);
 
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Filename:&amp;lt;/b&amp;gt;", poppler_movie_get_filename (movie), &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Need Poster:&amp;lt;/b&amp;gt;", poppler_movie_need_poster (movie) ? "Yes" : "No", &amp;amp;row);
-pgd_table_add_property (GTK_TABLE (table), "&amp;lt;b&amp;gt;Show Controls:&amp;lt;/b&amp;gt;", poppler_movie_show_controls (movie) ? "Yes" : "No", &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Filename:&amp;lt;/b&amp;gt;", poppler_movie_get_filename (movie), &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Need Poster:&amp;lt;/b&amp;gt;", poppler_movie_need_poster (movie) ? "Yes" : "No", &amp;amp;row);
+pgd_table_add_property (GTK_GRID (table), "&amp;lt;b&amp;gt;Show Controls:&amp;lt;/b&amp;gt;", poppler_movie_show_controls (movie) ? "Yes" : "No", &amp;amp;row);
 
 button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PLAY);
 g_signal_connect (button, "clicked",
   G_CALLBACK (pgd_movie_view_play_movie),
   movie);
-pgd_table_add_property_with_custom_widget (GTK_TABLE (table), NULL, button, &amp;amp;row);
+pgd_table_add_property_with_custom_widget (GTK_GRID (table), NULL, button, &amp;amp;row);
 gtk_widget_show (button);
 
 gtk_container_add (GTK_CONTAINER (alignment), table);
diff --git a/glib/demo/utils.h b/glib/demo/utils.h
index 452f3fa..026cfb4 100644
--- a/glib/demo/utils.h
+++ b/glib/demo/utils.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -24,16 +24,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 G_BEGIN_DECLS
 
-void       pgd_table_add_property                    (GtkTable        *table,
+void       pgd_table_add_property                    (GtkGrid         *table,
       const gchar     *markup,
       const gchar     *value,
       gint            *row);
-void       pgd_table_add_property_with_value_widget  (GtkTable        *table,
+void       pgd_table_add_property_with_value_widget  (GtkGrid         *table,
       const gchar     *markup,
       GtkWidget      **value_widget,
       const gchar     *value,
       gint            *row);
-void       pgd_table_add_property_with_custom_widget (GtkTable       *table,
+void       pgd_table_add_property_with_custom_widget (GtkGrid        *table,
       const gchar    *markup,
       GtkWidget      *widget,
       gint           *row);
diff --git a/test/gtk-test.cc b/test/gtk-test.cc
index dd339fb..a5759d7 100644
--- a/test/gtk-test.cc
+++ b/test/gtk-test.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -156,16 +156,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void GDKSplashOutputDev::redraw(int srcX, int srcY,
 }
 
 static gboolean
-drawing_area_expose (GtkWidget      *drawing_area,
-                     GdkEventExpose *event,
-                     View           *view)
+drawing_area_draw (GtkWidget *drawing_area,
+                   cairo_t   *cr,
+                   View      *view)
 {
-  cairo_t *cr;
   GdkRectangle document;
+  GdkRectangle clip;
   GdkRectangle draw;
 
-  gdk_window_clear (drawing_area-&amp;gt;window);
-
   document.x = 0;
   document.y = 0;
   if (cairo_output) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -176,8 +174,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; drawing_area_expose (GtkWidget      *drawing_area,
     document.height = view-&amp;gt;out-&amp;gt;getBitmapHeight();
   }
 
-  cr = gdk_cairo_create (drawing_area-&amp;gt;window);
-  if (!gdk_rectangle_intersect (&amp;amp;document, &amp;amp;event-&amp;gt;area, &amp;amp;draw))
+  if (!gdk_cairo_get_clip_rectangle (cr, &amp;amp;clip))
+    return FALSE;
+
+  if (!gdk_rectangle_intersect (&amp;amp;document, &amp;amp;clip, &amp;amp;draw))
     return FALSE;
 
   if (cairo_output) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -190,8 +190,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; drawing_area_expose (GtkWidget      *drawing_area,
                        draw.width, draw.height);
   }
 
-  cairo_destroy (cr);
-
   return TRUE;
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -281,6 +279,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; view_new (PopplerDocument *doc)
   GtkWidget *sw;
   GtkWidget *vbox, *hbox;
   guint n_pages;
+  PopplerPage *page;
 
   view = g_slice_new0 (View);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -291,7 +290,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; view_new (PopplerDocument *doc)
                     G_CALLBACK (destroy_window_callback),
                     view);
 
-  vbox = gtk_vbox_new (FALSE, 5);
+  page = poppler_document_get_page (doc, 0);
+  if (page) {
+    double width, height;
+
+    poppler_page_get_size (page, &amp;amp;width, &amp;amp;height);
+    gtk_window_set_default_size (GTK_WINDOW (window), (gint)width, (gint)height);
+    g_object_unref (page);
+  }
+
+  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
 
   view-&amp;gt;drawing_area = gtk_drawing_area_new ();
   sw = gtk_scrolled_window_new (NULL, NULL);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -305,7 +313,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; view_new (PopplerDocument *doc)
   gtk_box_pack_end (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
   gtk_widget_show (sw);
 
-  hbox = gtk_hbox_new (FALSE, 5);
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 
   n_pages = poppler_document_get_n_pages (doc);
   view-&amp;gt;spin_button = gtk_spin_button_new_with_range  (0, n_pages - 1, 1);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -333,8 +341,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; view_new (PopplerDocument *doc)
   }
 
   g_signal_connect (view-&amp;gt;drawing_area,
-                    "expose_event",
-                    G_CALLBACK (drawing_area_expose),
+                    "draw",
+                    G_CALLBACK (drawing_area_draw),
                     view);
 
   return view;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -366,27 +374,27 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; main (int argc, char *argv [])
   for (int i = 0; file_arguments[i]; i++) {
     View            *view;
     GFile           *file;
-    gchar           *uri;
     PopplerDocument *doc;
     GError          *error = NULL;
 
     file = g_file_new_for_commandline_arg (file_arguments[i]);
-    uri = g_file_get_uri (file);
-    g_object_unref (file);
-
-    doc = poppler_document_new_from_file (uri, NULL, &amp;amp;error);
+    doc = poppler_document_new_from_gfile (file, NULL, NULL, &amp;amp;error);
     if (!doc) {
+      gchar *uri;
+
+      uri = g_file_get_uri (file);
       g_printerr ("Error opening document %s: %s\n", uri, error-&amp;gt;message);
       g_error_free (error);
       g_free (uri);
+      g_object_unref (file);
 
       continue;
     }
+    g_object_unref (file);
 
     view = view_new (doc);
     view_list = g_list_prepend (view_list, view);
     view_set_page (view, CLAMP (page, 0, poppler_document_get_n_pages (doc) - 1));
-    g_free (uri);
   }
 
   gtk_main ();
&lt;/pre&gt;</description>
    <dc:creator>Carlos Garcia Campos</dc:creator>
    <dc:date>2012-05-19T10:13:14</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7111">
    <title>Annotation creation using Poppler</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7111</link>
    <description>&lt;pre&gt;Hello,

I noticed that version 0.20 of Poppler has introduced the possibility of 
adding, modifying and removing annotations from PDF documents. These 
features seem to be available through the qt4 interface library as well.

First of all I would like to thank the community of Poppler developers 
for introducing these features.

I have read the qt4 interface documentation and I found that annotation 
creation seems to be possible by calling the static method 
Poppler::AnnotationUtils::createAnnotation(const QDomElement 
&amp;amp;annElement), which returns a pointer to an Annotation.

I was wondering what is that QDomElement &amp;amp; that has to be given as an 
input to the method.
Is there some documentation around describing how to work with 
annotations using the qt4 interface?
Or maybe, does anybody have a simple example on how to create 
annotations in a PDF using the qt4 interface?

Thanks in advance,
Francesco.
&lt;/pre&gt;</description>
    <dc:creator>Francesco Gabbanini</dc:creator>
    <dc:date>2012-05-18T13:34:53</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7110">
    <title>[PATCH] [CMake] Fix automagic lcms dependencies</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7110</link>
    <description>&lt;pre&gt;Hello,

When both libcms1 and libcms2 are present, liblcms2 is automatically selected 
with no way to override the choice. Patch adds the choice by the means of 
ENABLE_LCMS2 option.

&lt;/pre&gt;</description>
    <dc:creator>Maciej Mrozowski</dc:creator>
    <dc:date>2012-05-17T23:56:03</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7107">
    <title>Branch 'poppler-0.20' - splash/SplashBitmap.cc</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7107</link>
    <description>&lt;pre&gt; splash/SplashBitmap.cc |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

New commits:
commit 9f7d919e68a26bb7dd809986d8394fe20b750bd0
Author: Anthony Wesley &amp;lt;awesley&amp;lt; at &amp;gt;smartnetworks.com.au&amp;gt;
Date:   Thu May 17 19:54:47 2012 +0200

    Fix logic on SplashBitmap::writeImgFile

diff --git a/splash/SplashBitmap.cc b/splash/SplashBitmap.cc
index f252318..e4f27fc 100644
--- a/splash/SplashBitmap.cc
+++ b/splash/SplashBitmap.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -20,6 +20,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 // Copyright (C) 2010 Christian Feuersänger &amp;lt;cfeuersaenger&amp;lt; at &amp;gt;googlemail.com&amp;gt;
 // Copyright (C) 2010 William Bader &amp;lt;williambader&amp;lt; at &amp;gt;hotmail.com&amp;gt;
 // Copyright (C) 2011, 2012 Thomas Freitag &amp;lt;Thomas.Freitag&amp;lt; at &amp;gt;alfa.de&amp;gt;
+// Copyright (C) 2012 Anthony Wesley &amp;lt;awesley&amp;lt; at &amp;gt;smartnetworks.com.au&amp;gt;
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -519,7 +520,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; SplashError SplashBitmap::writeImgFile(ImgWriter *writer, FILE *f, int hDPI, int
     break;
   }
   
-  if (writer-&amp;gt;close()) {
+  if (!writer-&amp;gt;close()) {
     return splashErrGeneric;
   }
 
_______________________________________________
poppler mailing list
poppler&amp;lt; at &amp;gt;lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/poppler
&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-17T17:56:42</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7105">
    <title>splash/SplashBitmap.cc</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7105</link>
    <description>&lt;pre&gt; splash/SplashBitmap.cc |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

New commits:
commit 87093d1250807f660042295747a012032f84c034
Author: Anthony Wesley &amp;lt;awesley&amp;lt; at &amp;gt;smartnetworks.com.au&amp;gt;
Date:   Thu May 17 19:54:47 2012 +0200

    Fix logic on SplashBitmap::writeImgFile

diff --git a/splash/SplashBitmap.cc b/splash/SplashBitmap.cc
index f252318..e4f27fc 100644
--- a/splash/SplashBitmap.cc
+++ b/splash/SplashBitmap.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -20,6 +20,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 // Copyright (C) 2010 Christian Feuersänger &amp;lt;cfeuersaenger&amp;lt; at &amp;gt;googlemail.com&amp;gt;
 // Copyright (C) 2010 William Bader &amp;lt;williambader&amp;lt; at &amp;gt;hotmail.com&amp;gt;
 // Copyright (C) 2011, 2012 Thomas Freitag &amp;lt;Thomas.Freitag&amp;lt; at &amp;gt;alfa.de&amp;gt;
+// Copyright (C) 2012 Anthony Wesley &amp;lt;awesley&amp;lt; at &amp;gt;smartnetworks.com.au&amp;gt;
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -519,7 +520,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; SplashError SplashBitmap::writeImgFile(ImgWriter *writer, FILE *f, int hDPI, int
     break;
   }
   
-  if (writer-&amp;gt;close()) {
+  if (!writer-&amp;gt;close()) {
     return splashErrGeneric;
   }
 
_______________________________________________
poppler mailing list
poppler&amp;lt; at &amp;gt;lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/poppler
&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-17T17:55:25</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7101">
    <title>Bogus memory allocation size</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7101</link>
    <description>&lt;pre&gt;Hi Folks,

I have another file that's getting the:

   "Bogus memory allocation size" 

error.  I thought this was going to make it in for the 0.20.0 release, but perhaps this one is different?  Fails on OSX Lion, and ubuntu-9 (AWS 64bit) off poppler HEAD and 0.20.0.

I'd be happy to forward the file along to anyone interested. 

Cheers,
Ralph
&lt;/pre&gt;</description>
    <dc:creator>Ralph</dc:creator>
    <dc:date>2012-05-17T16:21:39</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7099">
    <title>pdftohtml and HTML output</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7099</link>
    <description>&lt;pre&gt;Hi,

I've recently upgraded to Popper v0.18.4 from an older version v0.40 
which did not have the -nodrm switch.

The HTML generated by the older version used SPAN tags inside DIVs with 
positional information - for eaxmple:
&amp;lt;DIV style="position:absolute;top:1207;left:431"&amp;gt;&amp;lt;nobr&amp;gt;&amp;lt;span 
class="ft00"&amp;gt;Page 1&amp;lt;/span&amp;gt;&amp;lt;/nobr&amp;gt;&amp;lt;/DIV&amp;gt;

However I have noticed that the 0.18.4 creates HTML now uses paragraph 
&amp;lt;P&amp;gt; tags and often separates the text with spaces instead of separating 
it out positionally - for example:
&amp;lt;P style="position:absolute;top:270px;left:54px;white-space:nowrap" 
class="ft01"&amp;gt;&amp;amp;#160;0214488062 &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; DSL Fast 
&amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; 
&amp;amp;#160; &amp;amp;#160; &amp;amp;#160; 04 May 12 - 03 Jun 12 &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; 
&amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; 
&amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; &amp;amp;#160; R133.33&amp;lt;/P&amp;gt;

I need accurate positional information of each piece of text, so &amp;lt;P&amp;gt; 
with spaces is not suitable, therefore I need to revert to a version 
that generates HTML with &amp;lt;DIVS&amp;gt; and &amp;lt;SPANS&amp;gt;, but which still includes 
the -nodrm switch.

Can anyone advise which version of Poppler utils might be suitable?

Thanks!

Regards
Toby Hewlett
&lt;/pre&gt;</description>
    <dc:creator>Toby Hewlett</dc:creator>
    <dc:date>2012-05-17T15:44:57</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.freedesktop.poppler/7096">
    <title>Branch 'poppler-0.20' - utils/HtmlFonts.ccutils/HtmlFonts.h utils/HtmlOutputDev.cc</title>
    <link>http://comments.gmane.org/gmane.comp.freedesktop.poppler/7096</link>
    <description>&lt;pre&gt; utils/HtmlFonts.cc     |   24 ++++++++++++++++++------
 utils/HtmlFonts.h      |    3 ++-
 utils/HtmlOutputDev.cc |    4 +---
 3 files changed, 21 insertions(+), 10 deletions(-)

New commits:
commit 7e7997e12faccf4c0513811b324a2fd0fa960a96
Author: Igor Slepchin &amp;lt;igor.slepchin&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Tue May 15 23:16:27 2012 +0200

    Determine if font is bold or italic based on FontDescriptor.
    
    Bug #49758

diff --git a/utils/HtmlFonts.cc b/utils/HtmlFonts.cc
index 7205a1d..be02c5f 100644
--- a/utils/HtmlFonts.cc
+++ b/utils/HtmlFonts.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -23,6 +23,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 // Copyright (C) 2010 OSSD CDAC Mumbai by Leena Chourey (leenac&amp;lt; at &amp;gt;cdacmumbai.in) and Onkar Potdar (onkar&amp;lt; at &amp;gt;cdacmumbai.in)
 // Copyright (C) 2011 Joshua Richardson &amp;lt;jric&amp;lt; at &amp;gt;chegg.com&amp;gt;
 // Copyright (C) 2011 Stephen Reichling &amp;lt;sreichling&amp;lt; at &amp;gt;chegg.com&amp;gt;
+// Copyright (C) 2012 Igor Slepchin &amp;lt;igor.slepchin&amp;lt; at &amp;gt;gmail.com&amp;gt;
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -33,6 +34,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include "HtmlUtils.h"
 #include "GlobalParams.h"
 #include "UnicodeMap.h"
+#include "GfxFont.h"
 #include &amp;lt;stdio.h&amp;gt;
 
  struct Fonts{
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -101,10 +103,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GooString *HtmlFontColor::toString() const{
   return tmp;
 } 
 
-HtmlFont::HtmlFont(GooString* ftname,int _size, GfxRGB rgb){
+HtmlFont::HtmlFont(GfxFont *font, int _size, GfxRGB rgb){
   //if (col) color=HtmlFontColor(col); 
   //else color=HtmlFontColor();
   color=HtmlFontColor(rgb);
+  GooString* ftname=font-&amp;gt;getName();
+  if (!ftname) ftname = getDefaultFont();
 
   GooString *fontname = NULL;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -124,12 +128,20 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HtmlFont::HtmlFont(GooString* ftname,int _size, GfxRGB rgb){
   bold = gFalse;
   rotOrSkewed = gFalse;
 
+  if (font-&amp;gt;isBold() || font-&amp;gt;getWeight() &amp;gt;= GfxFont::W700) bold=gTrue;
+  if (font-&amp;gt;isItalic()) italic=gTrue;
+
   if (fontname){
-    if (strstr(fontname-&amp;gt;lowerCase()-&amp;gt;getCString(),"bold"))  bold=gTrue;
-    
-    if (strstr(fontname-&amp;gt;lowerCase()-&amp;gt;getCString(),"italic")||
-strstr(fontname-&amp;gt;lowerCase()-&amp;gt;getCString(),"oblique"))  italic=gTrue;
-    
+    if (!bold &amp;amp;&amp;amp; strstr(fontname-&amp;gt;lowerCase()-&amp;gt;getCString(),"bold")) {
+bold=gTrue;
+    }
+
+    if (!italic &amp;amp;&amp;amp;
+(strstr(fontname-&amp;gt;lowerCase()-&amp;gt;getCString(),"italic")||
+ strstr(fontname-&amp;gt;lowerCase()-&amp;gt;getCString(),"oblique"))) {
+italic=gTrue;
+    }
+
     int i=0;
     while (strcmp(ftname-&amp;gt;getCString(),fonts[i].Fontname)&amp;amp;&amp;amp;(i&amp;lt;font_num)) 
 {
diff --git a/utils/HtmlFonts.h b/utils/HtmlFonts.h
index 3e3b028..22368b2 100644
--- a/utils/HtmlFonts.h
+++ b/utils/HtmlFonts.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -21,6 +21,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 // Copyright (C) 2010 Albert Astals Cid &amp;lt;aacid&amp;lt; at &amp;gt;kde.org&amp;gt;
 // Copyright (C) 2011 Steven Murdoch &amp;lt;Steven.Murdoch&amp;lt; at &amp;gt;cl.cam.ac.uk&amp;gt;
 // Copyright (C) 2011 Joshua Richardson &amp;lt;jric&amp;lt; at &amp;gt;chegg.com&amp;gt;
+// Copyright (C) 2012 Igor Slepchin &amp;lt;igor.slepchin&amp;lt; at &amp;gt;gmail.com&amp;gt;
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -72,7 +73,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class HtmlFont{
 public:  
 
    HtmlFont(){FontName=NULL; rotOrSkewed = gFalse;}
-   HtmlFont(GooString* fontname,int _size, GfxRGB rgb);
+   HtmlFont(GfxFont *font,int _size, GfxRGB rgb);
    HtmlFont(const HtmlFont&amp;amp; x);
    HtmlFont&amp;amp; operator=(const HtmlFont&amp;amp; x);
    HtmlFontColor getColor() const {return color;}
diff --git a/utils/HtmlOutputDev.cc b/utils/HtmlOutputDev.cc
index 2f07988..1d1b628 100644
--- a/utils/HtmlOutputDev.cc
+++ b/utils/HtmlOutputDev.cc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -174,9 +174,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HtmlString::HtmlString(GfxState *state, double fontSize, HtmlFontAccu* _fonts) :
     yMax = y - descent * fontSize;
     GfxRGB rgb;
     state-&amp;gt;getFillRGB(&amp;amp;rgb);
-    GooString *name = state-&amp;gt;getFont()-&amp;gt;getName();
-    if (!name) name = HtmlFont::getDefaultFont(); //new GooString("default");
-    HtmlFont hfont=HtmlFont(name, static_cast&amp;lt;int&amp;gt;(fontSize-1), rgb);
+    HtmlFont hfont=HtmlFont(font, static_cast&amp;lt;int&amp;gt;(fontSize-1), rgb);
     if (isMatRotOrSkew(state-&amp;gt;getTextMat())) {
       double normalizedMatrix[4];
       memcpy(normalizedMatrix, state-&amp;gt;getTextMat(), sizeof(normalizedMatrix));
&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-15T21:18:17</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.freedesktop.poppler">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.freedesktop.poppler</link>
  </textinput>
</rdf:RDF>

