{"id":733,"date":"2014-07-30T17:37:53","date_gmt":"2014-07-30T15:37:53","guid":{"rendered":"http:\/\/blogs.igalia.com\/carlosgc\/?p=733"},"modified":"2014-07-30T17:44:44","modified_gmt":"2014-07-30T15:44:44","slug":"evince-hackfest","status":"publish","type":"post","link":"https:\/\/blogs.igalia.com\/carlosgc\/2014\/07\/30\/evince-hackfest\/","title":{"rendered":"Evince Hackfest"},"content":{"rendered":"<p>The <a href=\"https:\/\/wiki.gnome.org\/Apps\/Evince\">Evince<\/a> <a href=\"https:\/\/wiki.gnome.org\/Hackfests\/Evince2014\">hackfest<\/a> took place last week from 23rd to 25th July in <a href=\"http:\/\/en.wikipedia.org\/wiki\/Strasbourg\">Strasbourg<\/a>. Yes, 3 days only, but very productive in my opinion, I&#8217;ll summarize all the cool stuff we worked on.<\/p>\n<h2>HiDPI<\/h2>\n<p>This work was initially started by <a href=\"http:\/\/blog.fishsoup.net\/\">Owen<\/a>, and then <a href=\"http:\/\/calcifer.org\/notes\/\">Germ\u00e1n<\/a> kept the <a href=\"https:\/\/bugzilla.gnome.org\/show_bug.cgi?id=723431\">patches<\/a> up to date with evince git master. I reviewed all the pending patches and updated the thumbnails one and the result is that evince doesn&#8217;t look blurry on HiDPI screens any more.<\/p>\n<div id=\"attachment_736\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-hidpi.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-736\" class=\"size-medium wp-image-736\" alt=\"Evince running with GDK_SCALE=2\" src=\"http:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-hidpi-300x159.png\" width=\"300\" height=\"159\" srcset=\"https:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-hidpi-300x159.png 300w, https:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-hidpi-1024x545.png 1024w, https:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-hidpi.png 1920w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-736\" class=\"wp-caption-text\">Evince running with GDK_SCALE=2<\/p><\/div>\n<h2>Recent View<\/h2>\n<p>This was a GSoC project of 2013, but the patch provided by the student was never in an &#8220;upstreamable&#8221; state. Again Germ\u00e1n, who always loved this feature, took care of the <a href=\"https:\/\/bugzilla.gnome.org\/show_bug.cgi?id=633501\">patch<\/a> addressing my review comments. At the beginning of the hackfest most of the work has already been done, we only needed a few more review iterations during the hackfest to finally <a href=\"https:\/\/git.gnome.org\/browse\/evince\/commit\/?id=7c8a23c554eb898ceaceb3967db4d599e33f5d79\">push this feature to master<\/a>. The idea is to show the list of recent documents as an icon view with thumbnails and documents metadata. This view is loaded when evince is launched without any document replacing the useless empty window we had before. It also replaces the recent documents submenu in the gear menu.<\/p>\n<p><a href=\"http:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-recent-view.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-739\" alt=\"Evince Recent View\" src=\"http:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-recent-view-300x300.png\" width=\"300\" height=\"300\" srcset=\"https:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-recent-view-300x300.png 300w, https:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-recent-view-150x150.png 150w, https:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-recent-view.png 547w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<h2>UI improvements<\/h2>\n<p>The move to the header bar recently made the toolbar <a href=\"https:\/\/bugzilla.gnome.org\/show_bug.cgi?id=732289\">look a bit cluttered<\/a>, mainly because the title might use a lot of space. We discussed several ideas to improve the header bar and implemented some of them:<\/p>\n<ul>\n<li><a href=\"https:\/\/wiki.gnome.org\/JoseAliste\">Jos\u00e9 Aliste<\/a> <a href=\"https:\/\/git.gnome.org\/browse\/evince\/commit\/?id=5486942bbeb307eb01575b4f7a024f1999f74d30\">removed the next\/previous buttons<\/a> from the header bar and moved them to the view menu, together with the other navigation actions (go to first\/last page) that were in the gear menu.<\/li>\n<li>I tried to reduce the amount of space used by some of the widgets. The page selector widget <a href=\"https:\/\/git.gnome.org\/browse\/evince\/commit\/?id=32e759ddb9161fed0bdf6f81b356499177ff6527\">was using too much space<\/a> when the document contains page labels, due to the parentheses. The zoom selector widget tried to behave similar to a combo box, so that the size of the entry depended on the size of the drop down menu. This made the widget use more space than required for the entry contents, and it depended on the current locale. So, I <a href=\"https:\/\/git.gnome.org\/browse\/evince\/commit\/?id=738a3df86f23b1e6ff98d17510a48139bcf5d0b9\">replaced the drop down menu with a GtkPopover<\/a> and <a href=\"https:\/\/git.gnome.org\/browse\/evince\/commit\/?id=35c693730221bf990e2245dff2f36399c3d599fa\">made the entry size depend on its contents<\/a> instead of the menu.<\/li>\n<li>Since there are a lot of documents with very confusing titles, Evince shows also the file name in the window title using the pattern &lt;title&gt;\u2014&lt;filename&gt;. For those cases, Jos\u00e9 Aliste <a href=\"https:\/\/git.gnome.org\/browse\/evince\/commit\/?id=c69501361e978c3a437d44c0a80cea7932654497\">split the window title into title and subtitle of the header bar<\/a>.<\/li>\n<\/ul>\n<p><a href=\"http:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-headerbar.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-742\" alt=\"Evince header bar improvements\" src=\"http:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-headerbar-300x192.png\" width=\"300\" height=\"192\" srcset=\"https:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-headerbar-300x192.png 300w, https:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-headerbar.png 845w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Jos\u00e9 Aliste also started to work on the sidebar, <a href=\"https:\/\/bugzilla.gnome.org\/show_bug.cgi?id=733714\">reworking it to use a GtkStack instead of a GtkNotebook<\/a>, simplifying the code a lot and playing with the idea of adding also a button to the toolbar like Preview (the mac document viewer) does.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/wiki.gnome.org\/JuanjoMarin\">Juanjo Mar\u00edn<\/a> also wrote a <a href=\"https:\/\/bugzilla.gnome.org\/show_bug.cgi?id=733632\">patch to change the default zoom mode<\/a> to &#8220;Automatic&#8221;, since several people commented that the current &#8220;Fit Width&#8221; mode doesn&#8217;t look good in screens with higher resolutions. The patch is still waiting review.<\/p>\n<h2>Annotations<\/h2>\n<p><a href=\"http:\/\/gisellemnr.blogspot.com\">Giselle<\/a> and Anuj, our GSoc students this year, worked on their projects to improve the annotations support in both Evince and poppler.<\/p>\n<ul>\n<ul>\n<li>Anuj wrote <a href=\"https:\/\/bugs.freedesktop.org\/show_bug.cgi?id=81665\">some patches<\/a> to add support for Free Text annotations to poppler glib API. After a couple of review iterations and discussions about the API, the patches are now in bugzilla waiting for a final review (I hope to find the time soon)<\/li>\n<li>Giselle was focused on <a href=\"https:\/\/github.com\/gisellemnr\/evince\/commits\/text_markup\">adding support for highlight annotations<\/a> to Evince, since poppler already has all the required API for this. The <a href=\"https:\/\/bugzilla.gnome.org\/show_bug.cgi?id=583377\">patches<\/a> are not yet ready, but they look really promising.<\/li>\n<\/ul>\n<\/ul>\n<p style=\"text-align: center;\"><video width=\"600\" height=\"340\" preload=\"auto\" controls=\"controls\"><source src=\"http:\/\/people.igalia.com\/cgarcia\/evince-highlight-annots.webm\" type=\"video\/webm\" \/><\/video><\/p>\n<p>&nbsp;<\/p>\n<h2>Caret navigation and accessibility<\/h2>\n<p><a href=\"https:\/\/wiki.gnome.org\/JoanmarieDiggs\">Joanie<\/a> and <a href=\"http:\/\/blogs.igalia.com\/apinheiro\/\">API<\/a> continued <a href=\"https:\/\/git.gnome.org\/browse\/evince\/commit\/?id=8246fa2bf0bbcd1114686b4695c75cdfcedf7aba\">improving<\/a> the evince a11y support and <a href=\"https:\/\/bugzilla.gnome.org\/show_bug.cgi?id=733747\">fixing<\/a> some remaining <a href=\"https:\/\/bugzilla.gnome.org\/show_bug.cgi?id=733748\">issues<\/a> from the <a href=\"http:\/\/www.gnome.org\/news\/2013\/02\/call-for-bids-for-gnome-accessibility-work\/\">FoG project<\/a>. <a href=\"https:\/\/blogs.igalia.com\/apuentes\/\">Ant\u00eda<\/a> fought with the caret navigation implementation again to implement some <a href=\"https:\/\/git.gnome.org\/browse\/evince\/commit\/?id=dd62504bb3febbc52d223a27171951a920625024\">missing key bindings<\/a> and <a href=\"https:\/\/bugzilla.gnome.org\/show_bug.cgi?id=704631\">fixing other issues<\/a>.<\/p>\n<h2>Comics backend<\/h2>\n<p>Juanjo Mar\u00edn focused on the comics backend, working on a patch to use libarchive to uncompress the documents instead of spawning external command line tools.<\/p>\n<h2>Gestures<\/h2>\n<p>I started to review the <a href=\"https:\/\/git.gnome.org\/browse\/evince\/log\/?h=gestures\">gestures branch<\/a> during the hackfest, patches looked clean and simple, but since I was not familiarized with the new GTK+ touch API and I didn&#8217;t have a touch screen to try it out either, I decided to wait after the hackfest and see it in action in garnacho&#8217;s laptop during <a href=\"https:\/\/www.guadec.org\/\">GUADEC<\/a>. <a href=\"http:\/\/blogs.gnome.org\/carlosg\/\">Carlos<\/a> explained to me how the touch API works in GTK+ and I could check it actually works great. The code doesn&#8217;t affect the normal use with the mouse, so the branch will be merged in master soon.<\/p>\n<div id=\"attachment_752\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-haskfest-dinner.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-752\" class=\"size-medium wp-image-752\" alt=\"Evince hackfest dinner\" src=\"http:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-haskfest-dinner-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"https:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-haskfest-dinner-300x225.jpg 300w, https:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-haskfest-dinner-1024x768.jpg 1024w, https:\/\/blogs.igalia.com\/carlosgc\/files\/2014\/07\/evince-haskfest-dinner.jpg 1600w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-752\" class=\"wp-caption-text\">And of course not everything was hacking<\/p><\/div>\n<h2>THANKS!<\/h2>\n<p>Many thanks to <a href=\"https:\/\/wiki.gnome.org\/AlexandreFranke\">Alexandre Franke<\/a> for the local organization, everything worked perfectly. Of course thanks to the <a href=\"http:\/\/www.gnome.org\/foundation\/\">GNOME Foundation<\/a> for sponsoring the GSoC students, Giselle and Anuj, and <a href=\"http:\/\/www.igalia.com\/\">Igalia<\/a> for sponsoring all the <a href=\"http:\/\/www.igalia.com\/igalia-247\/\">Igalians<\/a> attending the hackfest. Thanks also to <a href=\"http:\/\/www.epitech.eu\/\">Epitech<\/a> for allowing us to do the hackfest there before the GUADEC.<\/p>\n<p><a href=\"https:\/\/www.igalia.com\"><img loading=\"lazy\" decoding=\"async\" alt=\"Igalia S.L.\" src=\"https:\/\/wiki.gnome.org\/Hackfests\/WebKitGTK2013?action=AttachFile&amp;do=get&amp;target=logoigalia.png\" width=\"180\" height=\"64\" \/><\/a> <a href=\"https:\/\/foundation.gnome.org\"><img loading=\"lazy\" decoding=\"async\" alt=\"GNOME Foundation\" src=\"https:\/\/wiki.gnome.org\/Hackfests\/WebKitGTK2013?action=AttachFile&amp;do=get&amp;target=gnome.png\" width=\"199\" height=\"76\" \/><\/a><a href=\"http:\/\/www.epitech.eu\/\"><img loading=\"lazy\" decoding=\"async\" alt=\"EPITECH\" src=\"https:\/\/www.guadec.org\/wp-content\/uploads\/2014\/07\/sponsor-epitech.jpg\" width=\"199\" height=\"76\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Evince hackfest took place last week from 23rd to 25th July in Strasbourg. Yes, 3 days only, but very productive in my opinion, I&#8217;ll summarize all the cool stuff we worked on. HiDPI This work was initially started by &hellip; <a href=\"https:\/\/blogs.igalia.com\/carlosgc\/2014\/07\/30\/evince-hackfest\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,6,7],"tags":[12,17,18],"class_list":["post-733","post","type-post","status-publish","format-standard","hentry","category-free-software","category-gnome","category-igalia","tag-evince","tag-pdf","tag-poppler"],"_links":{"self":[{"href":"https:\/\/blogs.igalia.com\/carlosgc\/wp-json\/wp\/v2\/posts\/733","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.igalia.com\/carlosgc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.igalia.com\/carlosgc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/carlosgc\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/carlosgc\/wp-json\/wp\/v2\/comments?post=733"}],"version-history":[{"count":21,"href":"https:\/\/blogs.igalia.com\/carlosgc\/wp-json\/wp\/v2\/posts\/733\/revisions"}],"predecessor-version":[{"id":760,"href":"https:\/\/blogs.igalia.com\/carlosgc\/wp-json\/wp\/v2\/posts\/733\/revisions\/760"}],"wp:attachment":[{"href":"https:\/\/blogs.igalia.com\/carlosgc\/wp-json\/wp\/v2\/media?parent=733"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.igalia.com\/carlosgc\/wp-json\/wp\/v2\/categories?post=733"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.igalia.com\/carlosgc\/wp-json\/wp\/v2\/tags?post=733"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}