<?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://permalink.gmane.org/gmane.comp.freedesktop.poppler/7132"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7131"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7130"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7129"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7128"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7127"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7126"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7125"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7124"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7123"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7122"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7121"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7120"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7119"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7118"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7117"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7116"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7115"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7114"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7113"/>
      </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://permalink.gmane.org/gmane.comp.freedesktop.poppler/7132">
    <title>Re: [PATCH] [CMake] Fix automagic lcms dependencies</title>
    <link>http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7132</link>
    <description>&lt;pre&gt;
That's... correct.
I could fix it to match expected behaviour, but I may have a better idea, how 
about doing it the same way --enable-cms is handled:
- if -DENABLE_CMS=lcms1 then only look for liblcms1
- if -DENABLE_CMS=lcms2 then only look for liblcms2
- otherwise look for lcms2, if not found, then try lcms1 as fallback

&lt;/pre&gt;</description>
    <dc:creator>Maciej Mrozowski</dc:creator>
    <dc:date>2012-05-23T19:39:27</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7131">
    <title>Re: Annotation creation using Poppler</title>
    <link>http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7131</link>
    <description>&lt;pre&gt;El Dimecres, 23 de maig de 2012, a les 19:59:13, Albert Astals Cid va 
escriure:

Actually since it was private noone could have a "handle" to it, so it's not a 
problem if the signature is changed since noone is listening, so i've pushed 
to 0.20 too.

Albert

&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-23T18:25:46</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7130">
    <title>Branch 'poppler-0.20' - qt4/src</title>
    <link>http://permalink.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://permalink.gmane.org/gmane.comp.freedesktop.poppler/7129">
    <title>qt4/src</title>
    <link>http://permalink.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://permalink.gmane.org/gmane.comp.freedesktop.poppler/7128">
    <title>Re: [PATCH] Annotation removal improvements</title>
    <link>http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7128</link>
    <description>&lt;pre&gt;El Dimarts, 22 de maig de 2012, a les 00:44:26, Fabio D'Urso va escriure:

Carlos, does this work for you?

We'd be commiting this to master only right? No sense in commiting to 0.20 
branch.

Albert

&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-23T18:01:08</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7127">
    <title>Re: Annotation creation using Poppler</title>
    <link>http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7127</link>
    <description>&lt;pre&gt;El Divendres, 18 de maig de 2012, a les 17:03:28, Fabio D'Urso va escriure:

Pushed, since this changes the ABI in MSVC it'll have to wait until poppler 
0.22

Albert

&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-23T17:59:13</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7126">
    <title>Re: [PATCH] Fix automagic lcms dependencies</title>
    <link>http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7126</link>
    <description>&lt;pre&gt;El Dilluns, 21 de maig de 2012, a les 01:11:34, Maciej Mrozowski va escriure:

Don't have a strong opinion on this, anyone from the "i like autoconf" camp 
can look at the implementation?

Albert
&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-23T17:49:40</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7125">
    <title>Re: [PATCH] [CMake] Fix automagic lcms dependencies</title>
    <link>http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7125</link>
    <description>&lt;pre&gt;El Divendres, 18 de maig de 2012, a les 01:56:03, Maciej Mrozowski va 
escriure:

This doesn't work if you do not have lcms2 installed but have lcms installed 
right?

Because it'll go throught the first 

if(ENABLE_LCMS2)  (because i don't have a clue if i have it or not)
and then fail at 
find_package(LCMS2)
and then don't look for LCMS1, no?

Albert
&lt;/pre&gt;</description>
    <dc:creator>Albert Astals Cid</dc:creator>
    <dc:date>2012-05-23T17:46:33</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7124">
    <title>[PATCH] Annotation removal improvements</title>
    <link>http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7124</link>
    <description>&lt;pre&gt;
The attached patch defines a virtual Annot::removeReferencedObjects method
that each annotation type can reimplement. The base implementation takes
care of removing the appearance stream. The AnnotMarkup implementation
takes care of removing the popup too.


This patch implements the following behavior:
 - When parsing existing annotations, /P is ignored and the in-memory
   page field is always set to the page which the annotation was read
   from (without setting or changing the actual /P value).
 - When adding a new annotation to a given page, /P is set accordingly.

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-21T22:44:26</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7123">
    <title>Branch 'poppler-0.20' - utils/pdfseparate.1</title>
    <link>http://permalink.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://permalink.gmane.org/gmane.comp.freedesktop.poppler/7122">
    <title>utils/pdfseparate.1</title>
    <link>http://permalink.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://permalink.gmane.org/gmane.comp.freedesktop.poppler/7121">
    <title>cmake/modules glib/demo test/CMakeLists.txt</title>
    <link>http://permalink.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://permalink.gmane.org/gmane.comp.freedesktop.poppler/7120">
    <title>glib/CMakeLists.txt</title>
    <link>http://permalink.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://permalink.gmane.org/gmane.comp.freedesktop.poppler/7119">
    <title>[PATCH] Fix automagic lcms dependencies</title>
    <link>http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7119</link>
    <description>&lt;pre&gt;
Also updated configure.ac:
--enable-cms=[auto/lcms1/lcms2] with similar behaviour.

&lt;/pre&gt;</description>
    <dc:creator>Maciej Mrozowski</dc:creator>
    <dc:date>2012-05-20T23:11:34</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7118">
    <title>Re: [PATCHES] New annotation features,removal of objects from xref and arrays</title>
    <link>http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7118</link>
    <description>&lt;pre&gt;No, popups can't be shared.

Correct. As I told you in IRC, I didn't implement code to remove other 
objects, because removing the appearance is enough for the annotation types 
that can be modified via qt4.
Note that appearance stream removal itself is not finished yet. Currently, it 
leaks unreferenced objects in the xref and invalid refs in the AP name tree 
(see TODO comment in AnnotAppearance::removeStream).

As we discussed on chat, I like the idea of adding a virtual method to let 
each annotation type "cleanup". It will be useful when we add removal support 
for annotation types that reference indirect objects (sounds, attachments...).
However, I don't like the Page* argument passed to that method. I'm posting 
the diff here too.

I have some doubts about setting /P if the annotation has no /P or a wrong 
value, because that would mean that annotations are automatically modified as 
soon as the document is loaded. If we decide to go that way, we'll also need 
to be careful not to touch the last-changed timestamp.

What about storing the Page pointer itself in a dedicated field, regardless of 
the /P value?

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-20T17:04:45</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7117">
    <title>Re: [PATCHES] New annotation features,removal of objects from xref and arrays</title>
    <link>http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7117</link>
    <description>&lt;pre&gt;Excerpts from Fabio D'Urso's message of sáb mar 24 18:44:22 +0100 2012:

Why doesn't Page::removeAnnot() also remove the appearances? I've
noticed that the qt4 implementation removes the popup and appearances
manually. Appearance streams are only removed if there aren't any
other annots referencing them, but is it possible to share the same
popup by several markup annotations? What happens with all other
objects referenced by annotations? I guess they are all left in the
document, should we remove them too? like the appearances?
Maybe we could add a Annot::removeAnnotFromPage (or something like
that) so that every annotation can implement it to remove the objects
it references and not referenced by others.

Regards, 
&lt;/pre&gt;</description>
    <dc:creator>Carlos Garcia Campos</dc:creator>
    <dc:date>2012-05-20T10:27:52</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7116">
    <title>glib/demo</title>
    <link>http://permalink.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://permalink.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://permalink.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://permalink.gmane.org/gmane.comp.freedesktop.poppler/7114">
    <title>glib/demo</title>
    <link>http://permalink.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://permalink.gmane.org/gmane.comp.freedesktop.poppler/7113">
    <title>configure.ac glib/demo test/gtk-test.cc</title>
    <link>http://permalink.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://permalink.gmane.org/gmane.comp.freedesktop.poppler/7112">
    <title>Re: Annotation creation using Poppler</title>
    <link>http://permalink.gmane.org/gmane.comp.freedesktop.poppler/7112</link>
    <description>&lt;pre&gt;Correct. Note that only a subset of what we promise to do is implemented 
(setters for some properties, notably timestamps and popup window, are noops).

It's one of the two possible ways. The other one is to use the constructor of 
the annotation type you want to create (eg new InkAnnotation) and use setters 
to set the properties.

It's a undocumented format to describe the annotations. You can some get 
examples calling AnnotationUtils::storeAnnotation on existing annotations.
If you have Okular installed, it's also the same format Okular uses to store 
user-created annotations internally (in ~/.kde/share/apps/okular/docdata/).

No full examples yet. In general, it goes like this:
 Document* document = Document::load(inputfilename);
 Page* pdfPage = document-&amp;gt;page(pagenum); // 0-based
 InkAnnotation *ann = new InkAnnotation();
 // Set its properties here ...
 pdfPage-&amp;gt;addAnnotation(ann);
 // ... or here (they both work)
 PDFConverter *conv = document-&amp;gt;pdfConverter();
 conv-&amp;gt;setOutputFileName(outputfilename);
 conv-&amp;gt;setPDFOptions(conv-&amp;gt;pdfOptions() | PDFConverter::WithChanges);
 conv-&amp;gt;convert();

Supported annotation types are: Text, Line, Geom, Ink, Stamp, Highlight.
Note that StampAnnotations are stored to file, but they're not rendered by 
poppler at the moment.

*IMPORTANT*:
Oops! I forgot to make TextAnnotation ctor public. I'm attaching a patch.

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-18T15:03:28</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>

