Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 I am solicitating your opinion on a possible unblock for the package liferea in case I would upload the third release candidate of upstream. I hadn't considered packaging that for Debian because it was released after the Stretch freeze, but I was tricked into asking you this in (normal) bug 860742¹, which was already fixed upstream. In the discussion in that bug, it turned out that this third release candidate actual fixes a data-loss bug (not yet filed in the BTS) and "the other changes look low risk". Because I already included a rather large commit that now is included in the upstream package, I provide you with a diff between the PATCHED source trees (including the debian directory), which I created with the following command. I excluded the translation files because there were a lot of changes there only due to line number changes: diff -U3 --exclude=.pc --exclude=.git --exclude="*.po" --recursive liferea_copy liferea > /tmp/liferea_1.12~rc3-1.tree.diff The png files that are removed/new are actually renames, where git tells me: diff --git a/pixmaps/flag.png b/pixmaps/emblem-important.png similarity index 100% rename from pixmaps/flag.png rename to pixmaps/emblem-important.png diff --git a/pixmaps/vfolder.png b/pixmaps/folder-saved-search.png similarity index 100% rename from pixmaps/vfolder.png rename to pixmaps/folder-saved-search.png diff --git a/pixmaps/directory.png b/pixmaps/folder.png similarity index 100% rename from pixmaps/directory.png rename to pixmaps/folder.png diff --git a/pixmaps/attachment.png b/pixmaps/mail-attachment.png similarity index 100% rename from pixmaps/attachment.png rename to pixmaps/mail-attachment.png Thanks for considering. (Of course, the alternative is to just cherry-pick the fix for the data-loss issue, which is upstream #208: All "Unread" search folder items marked read at once) ¹ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=860742 unblock liferea/1.12~rc3-1 - -- System Information: Debian Release: 9.0 APT prefers testing-debug APT policy: (500, 'testing-debug'), (500, 'testing'), (200, 'experimental'), (200, 'testing'), (50, 'experimental'), (50, 'testing'), (1, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 4.9.0-2-amd64 (SMP w/2 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) -----BEGIN PGP SIGNATURE----- iQEzBAEBCAAdFiEEWLZtSHNr6TsFLeZynFyZ6wW9dQoFAlj6ZRYACgkQnFyZ6wW9 dQotTAf+KlgDvXqp0l7ITtl2Qs5ZlKm4ChrYtD9yOMH2f4zI+LHoIdfLkHw7zLWA MlYoXvLIIVcisLDwg00oNh7zIIPQGXR+OSsM/jCsQS0WoZRg3w73F145QhHOYWfQ GXuse0dMaqMq6uxfM7fIAsfy1JqTZWONfHpFa7jSSyQ5OvPL9/VQOQTwTbFuAXDB PPz0arOybgTFSY0lEBZJLhENEb+riJ309VwgvU+aTUdBNPoizWyLrG7ql8vBpY9A bp+BXAjzR28Woc3VsZHoAzeYPx1GsDX4ktB6TNqRo6vqC7S9DBnIW9ytod2F6DuK Jk/gxy1oURGPwHMrgQR43DkIMBUh7A== =2ca5 -----END PGP SIGNATURE-----
diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/AUTHORS liferea/AUTHORS --- liferea_copy/AUTHORS 2017-04-21 11:45:45.557518685 +0200 +++ liferea/AUTHORS 2017-04-20 22:14:05.991686035 +0200 @@ -108,7 +108,7 @@ Japanese Takeshi Hamasaki <hmat...@users.sourceforge.jp> Japanese IWAI, Masaharu <iwaim....@gmail.com> French Vincent Lefèvre <vinc...@vinc17.org> -French Guillaume Bernard <transl...@filorin.fr> +French Guillaume Bernard <cont...@guillaume-bernard.fr> Swedish Daniel Nylander <p...@danielnylander.se> Swedish Andreas Ronnquist <gusnan.mailingli...@openmailbox.org> Turkish Mehmet Atif Ergun <mehmetaer...@gmail.com> diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/ChangeLog liferea/ChangeLog --- liferea_copy/ChangeLog 2017-04-21 11:45:45.557518685 +0200 +++ liferea/ChangeLog 2017-04-20 22:14:05.991686035 +0200 @@ -1,6 +1,31 @@ Open problems before 1.12 release * Article skimming currently broken + * Tray icon needs to be auto-disabled along with a popup + informing users who previously had it enabled + +2017-03-26 Lars Windolf <lars.wind...@gmx.de> + + Version 1.12-rc3 + + * Fixes #459: Fixes GtkDoc warnings + (Leiaz) + * Fixes #415: Filter commands are not asynchronous + (Rich Coe) + * Fixes #363: Missing space above internal browser address bar + (reported by nekohayo, patch by Mikel Olasagasti) + * Fixes #208: All "Unread" search folder items marked read at once + (Leiaz) + * Fixes #251: Liferea does not always use theme icons when it is launched + on system startup (reported by GreenLunar, fix by Leiaz) + + * Updated Finnish translation (Jorma Karvonen) + * Updated Latvian translation (Rihards Prieditis) + * Updated Albanian translation (Bensik Bleta) + * Updated Hungarian translation (Balázs Úr) + * Updated Brazlian translation (Rafael Ferreira) + * Updated French translation (Guillaume Bernard) + 2016-11-11 Lars Windolf <lars.wind...@gmx.de> diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/configure.ac liferea/configure.ac --- liferea_copy/configure.ac 2017-04-21 11:45:45.557518685 +0200 +++ liferea/configure.ac 2017-04-20 22:14:05.991686035 +0200 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([liferea],[1.12-rc2],[liferea-de...@lists.sourceforge.net]) +AC_INIT([liferea],[1.12-rc3],[liferea-de...@lists.sourceforge.net]) AC_CANONICAL_HOST AC_CONFIG_SRCDIR([src/feedlist.c]) diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/debian/changelog liferea/debian/changelog --- liferea_copy/debian/changelog 2017-04-21 11:45:45.561518683 +0200 +++ liferea/debian/changelog 2017-04-20 22:14:05.991686035 +0200 @@ -1,3 +1,12 @@ +liferea (1.12~rc3-1) unstable; urgency=medium + + * New upstream release + - Lets the 'Update Monitor' dialog expand (Closes: #860742) + * Drop 0001-Removing-GtkDoc-warnings.patch as that came from upstream + commits for this release + + -- Paul Gevers <elb...@debian.org> Thu, 20 Apr 2017 19:43:39 +0200 + liferea (1.12~rc2-2) unstable; urgency=medium * Install dbus service file (Closes: #849808), appdata and convert files Only in liferea_copy/debian/patches: 0001-Removing-GtkDoc-warnings.patch diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/debian/patches/series liferea/debian/patches/series --- liferea_copy/debian/patches/series 2017-04-21 11:45:45.561518683 +0200 +++ liferea/debian/patches/series 2017-04-20 22:14:05.991686035 +0200 @@ -1,4 +1,3 @@ debian-example-feeds.patch www-browser.patch drop_tests_from_build.patch -0001-Removing-GtkDoc-warnings.patch diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/doc/html/headlines_en.html liferea/doc/html/headlines_en.html --- liferea_copy/doc/html/headlines_en.html 2017-04-21 11:45:45.561518683 +0200 +++ liferea/doc/html/headlines_en.html 2017-04-20 22:14:05.995686034 +0200 @@ -79,7 +79,7 @@ <p> You can change between these modes in the "View" menu. This - is a per-feed settting so you can view each feed in the mode + is a per-feed setting so you can view each feed in the mode that fits best. The default viewing mode is "Normal View". </p> diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/doc/html/onlineservices_en.html liferea/doc/html/onlineservices_en.html --- liferea_copy/doc/html/onlineservices_en.html 2017-04-21 11:45:45.561518683 +0200 +++ liferea/doc/html/onlineservices_en.html 2017-04-20 22:14:05.995686034 +0200 @@ -102,7 +102,7 @@ version 1.5.3.</p> <p>TinyTinyRSS must be installed on your own server, which requires server - adminstration knowledge. Once installed, TinyTinyRSS behaves as any other + administration knowledge. Once installed, TinyTinyRSS behaves as any other online service.</p> <!-- navigation footer start --> diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/doc/html/preferences_de.html liferea/doc/html/preferences_de.html --- liferea_copy/doc/html/preferences_de.html 2017-04-21 11:45:45.561518683 +0200 +++ liferea/doc/html/preferences_de.html 2017-04-20 22:14:05.995686034 +0200 @@ -181,7 +181,7 @@ GNOME-Proxy-Einstellungen automatisch übernehmen.<br> <br> Zur Zeit erlaubt Liferea keine Angabe von Rechnern, für - die die Proxy-Einstellungen ignoriert werden soll. + die Proxy-Einstellungen ignoriert werden soll. </li> </ul> diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/doc/html/searching_en.html liferea/doc/html/searching_en.html --- liferea_copy/doc/html/searching_en.html 2017-04-21 11:45:45.561518683 +0200 +++ liferea/doc/html/searching_en.html 2017-04-20 22:14:05.995686034 +0200 @@ -138,7 +138,7 @@ <tr><td style="background:#bfb"> <b>Podcast included</b> </td><td> - <b>Adds</b> all items that contain an enclosure to the search search folder. + <b>Adds</b> all items that contain an enclosure to the search folder. </td></tr> <!-- ----------------------------------------- --> <tr><td style="background:#fbb"> diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/doc/html/subscriptions_en.html liferea/doc/html/subscriptions_en.html --- liferea_copy/doc/html/subscriptions_en.html 2017-04-21 11:45:45.561518683 +0200 +++ liferea/doc/html/subscriptions_en.html 2017-04-20 22:14:05.995686034 +0200 @@ -118,7 +118,7 @@ </p> <p>The "General" pane allows you to set feed title and update - interval. The feed name is is the feed's name shown in the feed + interval. The feed name is the feed's name shown in the feed list. Multiple feeds can have the same name.</p> <a name="updateInterval"> @@ -147,7 +147,7 @@ the global update interval. Then you should select the user defined interval option and enter the interval value you want. <em>When specifying an update interval, you should consider the - web traffic you will cause with an inappropiate update + web traffic you will cause with an inappropriate update interval. Don't update more often than the feed's content is updated.</em></dd> @@ -204,7 +204,7 @@ <p> This tab allows you to disable the use of the global proxy setting and to enable HTTP authentication when downloading the feed. Enable the checkbox - and enter appropriate user and password values to use pasword-protected feeds. + and enter appropriate user and password values to use password-protected feeds. Usually you won't need to use these settings because you will be asked username and password when subscribing to the feed that requires authentication. </p> diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/glade/about.ui liferea/glade/about.ui --- liferea_copy/glade/about.ui 2017-04-21 11:45:45.565518682 +0200 +++ liferea/glade/about.ui 2017-04-20 22:14:05.995686034 +0200 @@ -120,6 +120,7 @@ Trần Ngọc Quân Pauli Virtanen Jorma Karvonen +Guillaume Bernard </property> <property name="logo_icon_name">liferea</property> <child internal-child="vbox"> Only in liferea/glade: liferea.css diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/glade/Makefile.am liferea/glade/Makefile.am --- liferea_copy/glade/Makefile.am 2017-04-21 11:45:45.565518682 +0200 +++ liferea/glade/Makefile.am 2017-04-20 22:14:05.995686034 +0200 @@ -22,7 +22,8 @@ simple_subscription.ui \ theoldreader_source.ui \ ttrss_source.ui \ - update_monitor.ui + update_monitor.ui \ + liferea.css EXTRA_DIST = \ $(glade_DATA) diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/glade/simple_search.ui liferea/glade/simple_search.ui --- liferea_copy/glade/simple_search.ui 2017-04-21 11:45:45.565518682 +0200 +++ liferea/glade/simple_search.ui 2017-04-20 22:14:05.995686034 +0200 @@ -1,64 +1,24 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.20.0 --> <interface> - <requires lib="gtk+" version="2.18"/> - <!-- interface-naming-policy toplevel-contextual --> + <requires lib="gtk+" version="3.14"/> <object class="GtkDialog" id="simple_search"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="border_width">5</property> <property name="title" translatable="yes">Search All Feeds</property> <property name="resizable">False</property> <property name="type_hint">dialog</property> <child internal-child="vbox"> - <object class="GtkVBox" id="dialog-vbox17"> + <object class="GtkBox" id="dialog-vbox17"> <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> <property name="spacing">2</property> - <child> - <object class="GtkVBox" id="vbox2614"> - <property name="visible">True</property> - <property name="border_width">5</property> - <property name="spacing">12</property> - <child> - <object class="GtkHBox" id="hbox92227"> - <property name="visible">True</property> - <property name="spacing">12</property> - <child> - <object class="GtkLabel" id="label222"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Search for:</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">searchentry</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="searchentry"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="tooltip_text" translatable="yes">Enter a search string Liferea should find either in a items title or in its content.</property> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> - </object> - <packing> - <property name="padding">6</property> - <property name="position">1</property> - </packing> - </child> <child internal-child="action_area"> - <object class="GtkHButtonBox" id="dialog-action_area17"> + <object class="GtkButtonBox" id="dialog-action_area17"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="closebutton2"> @@ -68,7 +28,7 @@ <property name="can_default">True</property> <property name="receives_default">False</property> <property name="use_stock">True</property> - <signal name="clicked" handler="gtk_widget_destroy" object="simple_search"/> + <signal name="clicked" handler="gtk_widget_destroy" object="simple_search" swapped="yes"/> </object> <packing> <property name="expand">False</property> @@ -111,10 +71,51 @@ </object> <packing> <property name="expand">False</property> + <property name="fill">False</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> + <child> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="border_width">5</property> + <property name="row_spacing">12</property> + <property name="column_spacing">12</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">_Search for:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">searchentry</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="searchentry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip_text" translatable="yes">Enter a search string Liferea should find either in a items title or in its content.</property> + <property name="hexpand">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> </object> </child> <action-widgets> @@ -122,5 +123,8 @@ <action-widget response="2">advancedbtn</action-widget> <action-widget response="1">searchstartbtn</action-widget> </action-widgets> + <child> + <placeholder/> + </child> </object> </interface> diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/glade/update_monitor.ui liferea/glade/update_monitor.ui --- liferea_copy/glade/update_monitor.ui 2017-04-21 11:45:45.565518682 +0200 +++ liferea/glade/update_monitor.ui 2017-04-20 22:14:05.995686034 +0200 @@ -1,166 +1,152 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.20.0 --> <interface> - <requires lib="gtk+" version="2.18"/> - <!-- interface-naming-policy toplevel-contextual --> + <requires lib="gtk+" version="3.14"/> <object class="GtkDialog" id="update_monitor"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="title" translatable="yes">Update Monitor</property> <property name="default_width">400</property> <property name="default_height">300</property> <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <child internal-child="vbox"> - <object class="GtkVBox" id="dialog-vbox18"> + <object class="GtkBox" id="dialog-vbox18"> <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child internal-child="action_area"> + <object class="GtkButtonBox" id="dialog-action_area18"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="layout_style">end</property> + <child> + <object class="GtkButton" id="button4"> + <property name="label" translatable="yes">Cancel All</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <signal name="clicked" handler="on_cancel_all_requests_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button5"> + <property name="label">gtk-close</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + <signal name="clicked" handler="on_close_update_monitor_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> <child> - <object class="GtkTable" id="table9"> + <object class="GtkGrid"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="border_width">6</property> - <property name="n_rows">2</property> - <property name="n_columns">2</property> - <property name="column_spacing">6</property> <property name="row_spacing">6</property> + <property name="column_spacing">6</property> <child> <object class="GtkScrolledWindow" id="scrolledwindow9"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="hscrollbar_policy">automatic</property> - <property name="vscrollbar_policy">automatic</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> <property name="shadow_type">in</property> <child> <object class="GtkTreeView" id="left"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="headers_visible">False</property> + <child internal-child="selection"> + <object class="GtkTreeSelection"/> + </child> </object> </child> </object> <packing> + <property name="left_attach">0</property> <property name="top_attach">1</property> - <property name="bottom_attach">2</property> </packing> </child> <child> <object class="GtkScrolledWindow" id="scrolledwindow10"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="hscrollbar_policy">automatic</property> - <property name="vscrollbar_policy">automatic</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> <property name="shadow_type">in</property> <child> <object class="GtkTreeView" id="right"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="headers_visible">False</property> + <child internal-child="selection"> + <object class="GtkTreeSelection"/> + </child> </object> </child> </object> <packing> <property name="left_attach">1</property> - <property name="right_attach">2</property> <property name="top_attach">1</property> - <property name="bottom_attach">2</property> </packing> </child> <child> - <object class="GtkLabel" id="label229"> + <object class="GtkLabel"> <property name="visible">True</property> - <property name="xalign">0</property> + <property name="can_focus">False</property> <property name="label" translatable="yes">Pending Requests</property> + <property name="xalign">0</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="top_attach">0</property> </packing> </child> <child> - <object class="GtkLabel" id="label228"> + <object class="GtkLabel"> <property name="visible">True</property> - <property name="xalign">0</property> + <property name="can_focus">False</property> <property name="label" translatable="yes">Downloading Now</property> + <property name="xalign">0</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="left_attach">0</property> + <property name="top_attach">0</property> </packing> </child> </object> <packing> - <property name="position">2</property> - </packing> - </child> - <child internal-child="action_area"> - <object class="GtkHButtonBox" id="dialog-action_area18"> - <property name="visible">True</property> - <property name="layout_style">end</property> - <child> - <object class="GtkButton" id="button4"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="receives_default">False</property> - <signal name="clicked" handler="on_cancel_all_requests_clicked"/> - <child> - <object class="GtkAlignment" id="alignment36"> - <property name="visible">True</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <child> - <object class="GtkHBox" id="hbox92233"> - <property name="visible">True</property> - <property name="spacing">2</property> - <child> - <object class="GtkLabel" id="label227"> - <property name="visible">True</property> - <property name="label" translatable="yes">Cancel _All</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="button5"> - <property name="label">gtk-close</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - <signal name="clicked" handler="on_close_update_monitor_clicked"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="pack_type">end</property> - <property name="position">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> </packing> </child> </object> @@ -169,5 +155,8 @@ <action-widget response="0">button4</action-widget> <action-widget response="-7">button5</action-widget> </action-widgets> + <child> + <placeholder/> + </child> </object> </interface> diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/opml/feedlist_fr.opml liferea/opml/feedlist_fr.opml --- liferea_copy/opml/feedlist_fr.opml 2017-04-21 11:45:51.969516365 +0200 +++ liferea/opml/feedlist_fr.opml 2017-04-21 11:45:10.485531371 +0200 @@ -12,7 +12,7 @@ <outline text="MozillaZine-Fr" htmlUrl="http://www.mozillazine-fr.org/" xmlUrl="http://mozillazine-fr.org/contenu.xml" /> <outline text="LinuxFR" htmlUrl="http://linuxfr.org/" xmlUrl="http://linuxfr.org/news.atom" /> <outline text="Le Monde.fr" htmlUrl="http://www.lemonde.fr/" xmlUrl="http://www.lemonde.fr/rss/sequence/0,2-3208,1-0,0.xml" /> - <outline text="Le Nouvel Observateur" htmlUrl="http://permanent.nouvelobs.com/" xmlUrl="http://permanent.nouvelobs.com/rss_permanent.xml" /> + <outline text="Le Nouvel Observateur" htmlUrl="https://tempsreel.nouvelobs.com/" xmlUrl="https://tempsreel.nouvelobs.com/rss.xml" /> </outline> <!-- lets keep this default English block in sync over all feed lists! --> Only in liferea_copy/pixmaps: attachment.png Only in liferea_copy/pixmaps: directory.png Only in liferea/pixmaps: emblem-important.png Only in liferea_copy/pixmaps: flag.png Only in liferea/pixmaps: folder.png Only in liferea/pixmaps: folder-saved-search.png Only in liferea/pixmaps: mail-attachment.png diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/pixmaps/Makefile.am liferea/pixmaps/Makefile.am --- liferea_copy/pixmaps/Makefile.am 2017-04-21 11:45:45.565518682 +0200 +++ liferea/pixmaps/Makefile.am 2017-04-20 22:14:05.995686034 +0200 @@ -1,15 +1,15 @@ SUBDIRS = 16x16 22x22 24x24 32x32 48x48 scalable EXTRA_DIST = \ - attachment.png \ + mail-attachment.png \ available.png \ available_offline.png \ default.png \ - directory.png \ + folder.png \ empty.png \ empty_offline.png \ - flag.png \ + emblem-important.png \ unread.png \ - vfolder.png \ + folder-saved-search.png \ fl_opml.png \ newsbin.png Only in liferea_copy/pixmaps: vfolder.png diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/feedlist.h liferea/src/feedlist.h --- liferea_copy/src/feedlist.h 2017-04-21 11:45:52.121516310 +0200 +++ liferea/src/feedlist.h 2017-04-20 22:14:06.055686038 +0200 @@ -77,7 +77,7 @@ /** * feedlist_get_unread_item_count: * - * Query overall number of of unread items. + * Query overall number of unread items. * * Returns: overall number of unread items. */ diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/liferea_application.c liferea/src/liferea_application.c --- liferea_copy/src/liferea_application.c 2017-04-21 11:45:45.625518660 +0200 +++ liferea/src/liferea_application.c 2017-04-20 22:14:06.059686038 +0200 @@ -107,6 +107,11 @@ static void on_app_activate (GtkApplication *gtk_app, gpointer user_data) { + gchar *css_filename; + GFile *css_file; + GtkCssProvider *provider; + GError *error = NULL; + GList *list; LifereaApplication *app = LIFEREA_APPLICATION (gtk_app); @@ -117,6 +122,28 @@ } else { liferea_shell_create (gtk_app, app->initialStateOption); } + + css_filename = g_build_filename (PACKAGE_DATA_DIR, PACKAGE, "liferea.css", NULL); + css_file = g_file_new_for_path (css_filename); + provider = gtk_css_provider_new (); + + gtk_css_provider_load_from_file(provider, css_file, &error); + + if (G_UNLIKELY (!gtk_css_provider_load_from_file(provider, + css_file, + &error))) + { + g_critical ("Could not load CSS data: %s", error->message); + g_clear_error (&error); + } else { + gtk_style_context_add_provider_for_screen ( + gdk_screen_get_default(), + GTK_STYLE_PROVIDER (provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + } + g_object_unref (provider); + g_object_unref (css_file); + g_free (css_filename); } /* Callback to the startup signal emitted only by the primary instance upon registration. */ diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/net.c liferea/src/net.c --- liferea_copy/src/net.c 2017-04-21 11:45:45.625518660 +0200 +++ liferea/src/net.c 2017-04-20 22:14:06.059686038 +0200 @@ -109,13 +109,13 @@ /* Downloads a feed specified in the request structure, returns the downloaded data or NULL in the request structure. - If the the webserver reports a permanent redirection, the + If the webserver reports a permanent redirection, the feed url will be modified and the old URL 'll be freed. The request structure will also contain the HTTP status and the last modified string. */ void -network_process_request (const updateJobPtr const job) +network_process_request (const updateJobPtr job) { SoupMessage *msg; SoupDate *date; @@ -259,14 +259,15 @@ soup_uri_set_port (uri, port); soup_uri_set_user (uri, user); soup_uri_set_password (uri, password); + soup_uri_set_path (uri, "/"); if (SOUP_URI_IS_VALID (uri)) { /* Sets proxy-uri, this unsets proxy-resolver. */ g_object_set (G_OBJECT (session), SOUP_SESSION_PROXY_URI, uri, NULL); - soup_uri_free (uri); } + soup_uri_free (uri); break; } } diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/node.c liferea/src/node.c --- liferea_copy/src/node.c 2017-04-21 11:45:52.129516308 +0200 +++ liferea/src/node.c 2017-04-20 22:14:06.059686038 +0200 @@ -407,11 +407,8 @@ /* Load pixbuf for all widget based rendering */ if (node->icon) g_object_unref (node->icon); - if (node->largeIcon) - g_object_unref (node->largeIcon); - node->icon = favicon_load_from_cache (node->id, 16); - node->largeIcon = favicon_load_from_cache (node->id, 32); + node->icon = favicon_load_from_cache (node->id, 32); /* Create filename for HTML rendering */ g_free (node->iconFile); @@ -432,12 +429,6 @@ return node->icon; } -gpointer -node_get_large_icon (nodePtr node) -{ - return node->largeIcon; -} - const gchar * node_get_favicon_file (nodePtr node) { diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/node.h liferea/src/node.h --- liferea_copy/src/node.h 2017-04-21 11:45:52.129516308 +0200 +++ liferea/src/node.h 2017-04-20 22:14:06.059686038 +0200 @@ -56,11 +56,10 @@ guint popupCount; /*<< number of items to be notified */ guint newCount; /*<< number of recently downloaded items */ - gchar *title; /*<< the label of the node in the feed list */ - gpointer icon; /*<< 16x16 favicon GdkPixBuf (or NULL) */ - gpointer largeIcon; /*<< 32x32 favicon GdkPixBuf (or NULL) */ - gboolean available; /*<< availability of this node (usually the last downloading state) */ - gboolean expanded; /*<< expansion state (for nodes with childs) */ + gchar *title; /**< the label of the node in the feed list */ + gpointer icon; /**< favicon GdkPixBuf (or NULL) */ + gboolean available; /**< availability of this node (usually the last downloading state) */ + gboolean expanded; /**< expansion state (for nodes with childs) */ /* item list state properties of this node */ nodeViewType viewMode; /*<< Viewing mode for this node (one of NODE_VIEW_MODE_*) */ diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/node_type.h liferea/src/node_type.h --- liferea_copy/src/node_type.h 2017-04-21 11:45:45.625518660 +0200 +++ liferea/src/node_type.h 2017-04-20 22:14:06.059686038 +0200 @@ -53,7 +53,7 @@ typedef struct nodeType { gulong capabilities; /**< bitmask of node type capabilities */ const gchar *id; /**< type id (used for type attribute in OPML export) */ - const GdkPixbuf *icon; /**< default icon for nodes of this type (if no favicon available) */ + const GIcon *icon; /**< default icon for nodes of this type (if no favicon available) */ /* For method documentation see the wrappers defined below! All methods are mandatory for each node type. */ diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/ui/feed_list_view.c liferea/src/ui/feed_list_view.c --- liferea_copy/src/ui/feed_list_view.c 2017-04-21 11:45:45.629518659 +0200 +++ liferea/src/ui/feed_list_view.c 2017-04-20 22:14:06.063686038 +0200 @@ -254,7 +254,7 @@ /* Set up store */ feedstore = gtk_tree_store_new (FS_LEN, G_TYPE_STRING, - GDK_TYPE_PIXBUF, + G_TYPE_ICON, G_TYPE_POINTER, G_TYPE_UINT, G_TYPE_STRING); @@ -284,7 +284,7 @@ gtk_tree_view_column_pack_start (column, titleRenderer, TRUE); gtk_tree_view_column_pack_end (column2, countRenderer, FALSE); - gtk_tree_view_column_add_attribute (column, iconRenderer, "pixbuf", FS_ICON); + gtk_tree_view_column_add_attribute (column, iconRenderer, "gicon", FS_ICON); gtk_tree_view_column_add_attribute (column, titleRenderer, "markup", FS_LABEL); gtk_tree_view_column_add_attribute (column2, countRenderer, "markup", FS_COUNT); diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/ui/icons.c liferea/src/ui/icons.c --- liferea_copy/src/ui/icons.c 2017-04-21 11:45:52.133516306 +0200 +++ liferea/src/ui/icons.c 2017-04-20 22:14:06.063686038 +0200 @@ -26,7 +26,7 @@ #include "common.h" -static GdkPixbuf *icons[MAX_ICONS]; /*<< list of icon assignments */ +static GIcon *icons[MAX_ICONS]; /**< list of icon assignments */ static gchar * icon_find_pixmap_file (const gchar *filename) @@ -65,84 +65,44 @@ return pixbuf; } -static GdkPixbuf * -icon_get_from_theme (GtkIconTheme *icon_theme, const gchar *name, gint size) -{ - GError *error = NULL; - GdkPixbuf *pixbuf; - - pixbuf = gtk_icon_theme_load_icon (icon_theme, - name, /* icon name */ - size, /* size */ - 0, /* flags */ - &error); - if (!pixbuf) { - g_warning ("Couldn't load icon: %s", error->message); - g_error_free (error); - } - return pixbuf; -} - void icons_load (void) { GtkIconTheme *icon_theme; gint i; - - /* first try to load icons from theme */ - static const gchar *iconThemeNames[] = { - NULL, /* ICON_UNREAD */ + gchar *path; + + path = g_build_filename (PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "pixmaps", NULL); + icon_theme = gtk_icon_theme_get_default (); + + gtk_icon_theme_append_search_path (icon_theme, path); + + static const gchar *iconNames[] = { + "unread", /* ICON_UNREAD */ "emblem-important", /* ICON_FLAG */ - NULL, /* ICON_AVAILABLE */ - NULL, /* ICON_AVAILABLE_OFFLINE */ + "available", /* ICON_AVAILABLE */ + "available_offline", /* ICON_AVAILABLE_OFFLINE */ "dialog-error", /* ICON_UNAVAILABLE */ - NULL, /* ICON_DEFAULT */ + "default", /* ICON_DEFAULT */ "folder", /* ICON_FOLDER */ "folder-saved-search", /* ICON_VFOLDER */ - NULL, /* ICON_NEWSBIN */ - NULL, /* ICON_EMPTY */ - NULL, /* ICON_EMPTY_OFFLINE */ + "newsbin", /* ICON_NEWSBIN */ + "empty", /* ICON_EMPTY */ + "empty_offline", /* ICON_EMPTY_OFFLINE */ "gtk-connect", /* ICON_ONLINE */ "gtk-disconnect", /* ICON_OFFLINE */ "mail-attachment", /* ICON_ENCLOSURE */ NULL }; - icon_theme = gtk_icon_theme_get_default (); - for (i = 0; i < MAX_ICONS; i++) - if (iconThemeNames[i]) - icons[i] = icon_get_from_theme (icon_theme, iconThemeNames[i], 16); - - /* and then load own default icons */ - static const gchar *iconNames[] = { - "unread.png", /* ICON_UNREAD */ - "flag.png", /* ICON_FLAG */ - "available.png", /* ICON_AVAILABLE */ - "available_offline.png", /* ICON_AVAILABLE_OFFLINE */ - NULL, /* ICON_UNAVAILABLE */ - "default.png", /* ICON_DEFAULT */ - "directory.png", /* ICON_FOLDER */ - "vfolder.png", /* ICON_VFOLDER */ - "newsbin.png", /* ICON_NEWSBIN */ - "empty.png", /* ICON_EMPTY */ - "empty_offline.png", /* ICON_EMPTY_OFFLINE */ - "online.png", /* ICON_ONLINE */ - "offline.png", /* ICON_OFFLINE */ - "attachment.png", /* ICON_ENCLOSURE */ - NULL - }; - for (i = 0; i < MAX_ICONS; i++) - if (!icons[i]) - icons[i] = icon_create_from_file (iconNames[i]); + icons[i] = g_themed_icon_new (iconNames[i]); } -const GdkPixbuf * +const GIcon * icon_get (lifereaIcon icon) { g_assert (NULL != *icons); return icons[icon]; } - - diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/ui/icons.h liferea/src/ui/icons.h --- liferea_copy/src/ui/icons.h 2017-04-21 11:45:52.133516306 +0200 +++ liferea/src/ui/icons.h 2017-04-20 22:14:06.063686038 +0200 @@ -54,23 +54,23 @@ /** * icon_get: - * @icon: the icon + * Returns a GIcon for the requested item. * - * Returns a GdkPixbuf for the requested item. + * @icon: the icon * - * Returns: (transfer none): GdkPixbuf + * Returns: (transfer none): GIcon */ -const GdkPixbuf * icon_get (lifereaIcon icon); +const GIcon * icon_get (lifereaIcon icon); /** * icon_create_from_file: - * @file name: the name of the file + * @filename: the name of the file * * Takes a file name relative to "pixmaps" directory and tries to load the * image into a GdkPixbuf. Can be used to load icons not in lifereaIcon * on demand. * - * Returns: (transfer none): a new pixbuf or NULL + * Returns: (transfer full): a new pixbuf or NULL */ GdkPixbuf * icon_create_from_file (const gchar *filename); diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/ui/item_list_view.c liferea/src/ui/item_list_view.c --- liferea_copy/src/ui/item_list_view.c 2017-04-21 11:45:52.133516306 +0200 +++ liferea/src/ui/item_list_view.c 2017-04-20 22:14:06.063686038 +0200 @@ -291,11 +291,11 @@ G_TYPE_UINT64, /* IS_TIME */ G_TYPE_STRING, /* IS_TIME_STR */ G_TYPE_STRING, /* IS_LABEL */ - GDK_TYPE_PIXBUF, /* IS_STATEICON */ + G_TYPE_ICON, /* IS_STATEICON */ G_TYPE_ULONG, /* IS_NR */ G_TYPE_POINTER, /* IS_PARENT */ - GDK_TYPE_PIXBUF, /* IS_FAVICON */ - GDK_TYPE_PIXBUF, /* IS_ENCICON */ + G_TYPE_ICON, /* IS_FAVICON */ + G_TYPE_ICON, /* IS_ENCICON */ G_TYPE_BOOLEAN, /* IS_ENCLOSURE */ G_TYPE_POINTER, /* IS_SOURCE */ G_TYPE_UINT, /* IS_STATE */ @@ -311,12 +311,17 @@ GtkTreeModel *model; itemPtr item = NULL; - if (gtk_tree_selection_get_selected (selection, &model, &iter)) - item = item_load (item_list_view_iter_to_id (ITEM_LIST_VIEW (user_data), &iter)); - - liferea_shell_update_item_menu (NULL != item); - if (item) - itemlist_selection_changed (item); + if (gtk_tree_selection_get_selected (selection, &model, &iter)) { + gulong id = item_list_view_iter_to_id (ITEM_LIST_VIEW (user_data), &iter); + if (id != itemlist_get_selected_id ()) { + item = item_load (id); + liferea_shell_update_item_menu (NULL != item); + if (item) + itemlist_selection_changed (item); + } + } else { + liferea_shell_update_item_menu (FALSE); + } } static void @@ -463,7 +468,7 @@ GtkTreeStore *itemstore; GtkTreeIter iter; gchar *title, *time_str; - const GdkPixbuf *state_icon; + const GIcon *state_icon; if (!item_list_view_id_to_iter (ilv, item->id, &iter)) return; @@ -754,7 +759,7 @@ item_list_view_set_tree_store (ilv, item_list_view_create_tree_store ()); renderer = gtk_cell_renderer_pixbuf_new (); - column = gtk_tree_view_column_new_with_attributes ("", renderer, "pixbuf", IS_STATEICON, NULL); + column = gtk_tree_view_column_new_with_attributes ("", renderer, "gicon", IS_STATEICON, NULL); gtk_tree_view_append_column (ilv->priv->treeview, column); ilv->priv->stateColumn = column; gtk_tree_view_column_set_sort_column_id (column, IS_STATE); @@ -762,7 +767,7 @@ gtk_tree_view_column_set_visible (column, FALSE); renderer = gtk_cell_renderer_pixbuf_new (); - column = gtk_tree_view_column_new_with_attributes ("", renderer, "pixbuf", IS_ENCICON, NULL); + column = gtk_tree_view_column_new_with_attributes ("", renderer, "gicon", IS_ENCICON, NULL); gtk_tree_view_append_column (ilv->priv->treeview, column); ilv->priv->enclosureColumn = column; @@ -780,7 +785,13 @@ } renderer = gtk_cell_renderer_pixbuf_new (); - column = gtk_tree_view_column_new_with_attributes ("", renderer, "pixbuf", IS_FAVICON, NULL); + column = gtk_tree_view_column_new_with_attributes ("", renderer, "gicon", IS_FAVICON, NULL); + if (wide) { + g_object_set (renderer, "stock-size", GTK_ICON_SIZE_DND, NULL); + } else { + g_object_set (renderer, "stock-size", GTK_ICON_SIZE_SMALL_TOOLBAR, NULL); + } + gtk_tree_view_column_set_sort_column_id (column, IS_SOURCE); gtk_tree_view_append_column (ilv->priv->treeview, column); ilv->priv->faviconColumn = column; @@ -847,7 +858,7 @@ IS_TIME, (guint64)item->time, IS_NR, item->id, IS_PARENT, node, - IS_FAVICON, ilv->priv->wideView?node_get_large_icon (node):node_get_icon (node), + IS_FAVICON, node_get_icon (node), IS_ENCICON, item->hasEnclosure?icon_get (ICON_ENCLOSURE):NULL, IS_ENCLOSURE, item->hasEnclosure, IS_SOURCE, node, diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/ui/liferea_htmlview.c liferea/src/ui/liferea_htmlview.c --- liferea_copy/src/ui/liferea_htmlview.c 2017-04-21 11:45:45.633518657 +0200 +++ liferea/src/ui/liferea_htmlview.c 2017-04-20 22:14:06.067686038 +0200 @@ -393,7 +393,7 @@ void liferea_htmlview_location_changed (LifereaHtmlView *htmlview, const gchar *location) { - if (g_strcmp0 (location, "file:///")) { + if (g_strcmp0 (location, "file:///") && g_strcmp0 (location, "file://")) { /* A URI different from the locally generated html base url is being loaded. */ htmlview->priv->internal = FALSE; } diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/ui/popup_menu.c liferea/src/ui/popup_menu.c --- liferea_copy/src/ui/popup_menu.c 2017-04-21 11:45:45.633518657 +0200 +++ liferea/src/ui/popup_menu.c 2017-04-20 22:14:06.067686038 +0200 @@ -336,7 +336,7 @@ if (writeableFeedlist) { gtk_menu_shell_append (GTK_MENU_SHELL (menu), gtk_separator_menu_item_new ()); ui_popup_add_menuitem (menu, _("_Delete"), ui_popup_delete, node, 0); - ui_popup_add_menuitem (menu, _("_Preferences"), ui_popup_properties, node, 0); + ui_popup_add_menuitem (menu, _("_Properties"), ui_popup_properties, node, 0); } if (IS_NODE_SOURCE (node) && NODE_SOURCE_TYPE (node)->capabilities & NODE_SOURCE_CAPABILITY_CONVERT_TO_LOCAL) { diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/ui/search_dialog.c liferea/src/ui/search_dialog.c --- liferea_copy/src/ui/search_dialog.c 2017-04-21 11:45:45.633518657 +0200 +++ liferea/src/ui/search_dialog.c 2017-04-20 22:14:06.067686038 +0200 @@ -163,7 +163,7 @@ return search; sd = SEARCH_DIALOG (g_object_new (SEARCH_DIALOG_TYPE, NULL)); - sd->priv->dialog = liferea_dialog_new ("search_dialog"); + sd->priv->dialog = liferea_dialog_new ("search"); if (query) itemset_add_rule (sd->priv->vfolder->itemset, "exact", query, TRUE); diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/ui/ui_update.c liferea/src/ui/ui_update.c --- liferea_copy/src/ui/ui_update.c 2017-04-21 11:45:45.633518657 +0200 +++ liferea/src/ui/ui_update.c 2017-04-20 22:14:06.067686038 +0200 @@ -52,16 +52,20 @@ static void ui_update_merge_request(nodePtr node, GtkTreeStore *store, GHashTable *hash) { GtkTreeIter *iter; + gchar *title; if(NULL != (iter = (GtkTreeIter *)g_hash_table_lookup(hash, (gpointer)node->id))) return; iter = g_new0(GtkTreeIter, 1); gtk_tree_store_append(store, iter, NULL); - gtk_tree_store_set(store, iter, UM_REQUEST_TITLE, node_get_title(node), + title = g_markup_escape_text (node_get_title (node), -1); + gtk_tree_store_set(store, iter, UM_REQUEST_TITLE, title, UM_FAVICON, node_get_icon(node), -1); g_hash_table_insert(hash, (gpointer)node->id, (gpointer)iter); + + g_free (title); } static void @@ -144,7 +148,7 @@ /* Set up left store and view */ view = GTK_TREE_VIEW(liferea_dialog_lookup(umdialog, "left")); - um1store = gtk_tree_store_new(UM_LEN, GDK_TYPE_PIXBUF, G_TYPE_STRING); + um1store = gtk_tree_store_new(UM_LEN, G_TYPE_ICON, G_TYPE_STRING); gtk_tree_view_set_model(view, GTK_TREE_MODEL(um1store)); textRenderer = gtk_cell_renderer_text_new(); @@ -153,13 +157,13 @@ gtk_tree_view_column_pack_start(column, iconRenderer, FALSE); gtk_tree_view_column_pack_start(column, textRenderer, TRUE); - gtk_tree_view_column_add_attribute(column, iconRenderer, "pixbuf", UM_FAVICON); + gtk_tree_view_column_add_attribute(column, iconRenderer, "gicon", UM_FAVICON); gtk_tree_view_column_add_attribute(column, textRenderer, "markup", UM_REQUEST_TITLE); gtk_tree_view_append_column(view, column); /* Set up right store and view */ view = GTK_TREE_VIEW(liferea_dialog_lookup(umdialog, "right")); - um2store = gtk_tree_store_new(UM_LEN, GDK_TYPE_PIXBUF, G_TYPE_STRING); + um2store = gtk_tree_store_new(UM_LEN, G_TYPE_ICON, G_TYPE_STRING); gtk_tree_view_set_model(view, GTK_TREE_MODEL(um2store)); textRenderer = gtk_cell_renderer_text_new(); @@ -168,7 +172,7 @@ gtk_tree_view_column_pack_start(column, iconRenderer, FALSE); gtk_tree_view_column_pack_start(column, textRenderer, TRUE); - gtk_tree_view_column_add_attribute(column, iconRenderer, "pixbuf", UM_FAVICON); + gtk_tree_view_column_add_attribute(column, iconRenderer, "gicon", UM_FAVICON); gtk_tree_view_column_add_attribute(column, textRenderer, "markup", UM_REQUEST_TITLE); gtk_tree_view_append_column(view, column); diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/update.c liferea/src/update.c --- liferea_copy/src/update.c 2017-04-21 11:45:45.633518657 +0200 +++ liferea/src/update.c 2017-04-20 22:14:06.071686039 +0200 @@ -579,6 +579,21 @@ return FALSE; } +static void +update_apply_filter_async(GTask *task, gpointer src, gpointer tdata, GCancellable *ccan) +{ + updateJobPtr job = tdata; + update_apply_filter(job); + g_task_return_int(task, 0); +} + +static void +update_apply_filter_finish(GObject *src, GAsyncResult *result, gpointer user_data) +{ + updateJobPtr job = user_data; + g_idle_add(update_process_result_idle_cb, job); +} + void update_process_finished_job (updateJobPtr job) { @@ -596,8 +611,13 @@ } /* Finally execute the postfilter */ - if (job->result->data && job->request->filtercmd) - update_apply_filter (job); + if (job->result->data && job->request->filtercmd) { + GTask *task = g_task_new(NULL, NULL, update_apply_filter_finish, job); + g_task_set_task_data(task, job, NULL); + g_task_run_in_thread(task, update_apply_filter_async); + g_object_unref(task); + return; + } g_idle_add (update_process_result_idle_cb, job); } diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/src/webkit/webkit.c liferea/src/webkit/webkit.c --- liferea_copy/src/webkit/webkit.c 2017-04-21 11:45:45.633518657 +0200 +++ liferea/src/webkit/webkit.c 2017-04-20 22:14:06.071686039 +0200 @@ -575,12 +575,54 @@ static void liferea_webkit_set_proxy (ProxyDetectMode mode, const gchar *host, guint port, const gchar *user, const gchar *pwd) { - /* - * FIXME - * Webkit2 uses global proxy settings : - * https://bugs.webkit.org/show_bug.cgi?id=128674 - * https://bugs.webkit.org/show_bug.cgi?id=113663 - */ +#if WEBKIT_CHECK_VERSION (2, 15, 3) + WebKitNetworkProxySettings *proxy_settings = NULL; + gchar *proxy_uri = NULL; + gchar *user_pass = NULL, *host_port = NULL; + + switch (mode) { + case PROXY_DETECT_MODE_AUTO: + webkit_web_context_set_network_proxy_settings (webkit_web_context_get_default (), WEBKIT_NETWORK_PROXY_MODE_DEFAULT, NULL); + break; + case PROXY_DETECT_MODE_NONE: + webkit_web_context_set_network_proxy_settings (webkit_web_context_get_default (), WEBKIT_NETWORK_PROXY_MODE_NO_PROXY, NULL); + break; + case PROXY_DETECT_MODE_MANUAL: + /* Construct user:password part of the URI if specified. */ + if (user) { + user_pass = g_uri_escape_string (user, NULL, TRUE); + if (pwd) { + gchar *enc_user = user_pass; + gchar *enc_pass = g_uri_escape_string (pwd, NULL, TRUE); + user_pass = g_strdup_printf ("%s:%s", enc_user, enc_pass); + g_free (enc_user); + g_free (enc_pass); + } + } + + /* Construct the host:port part of the URI. */ + if (port) { + host_port = g_strdup_printf ("%s:%d", host, port); + } else { + host_port = g_strdup (host); + } + + /* Construct proxy URI. */ + if (user) { + proxy_uri = g_strdup_printf("http://%s@%s", user_pass, host_port); + } else { + proxy_uri = g_strdup_printf("http://%s", host_port); + } + + g_free (user_pass); + g_free (host_port); + proxy_settings = webkit_network_proxy_settings_new (proxy_uri, NULL); + g_free (proxy_uri); + webkit_web_context_set_network_proxy_settings (webkit_web_context_get_default (), WEBKIT_NETWORK_PROXY_MODE_CUSTOM, proxy_settings); + webkit_network_proxy_settings_free (proxy_settings); + break; + } +#endif } static struct @@ -594,7 +636,7 @@ .hasSelection = NULL, /* Was only useful for the context menu, can be removed */ .copySelection = liferea_webkit_copy_selection, /* Same. */ .scrollPagedown = liferea_webkit_scroll_pagedown, - .setProxy = NULL, // FIXME: readd later + .setProxy = liferea_webkit_set_proxy, .setOffLine = NULL // FIXME: blocked on https://bugs.webkit.org/show_bug.cgi?id=18893 }; diff -U3 '--exclude=.pc' '--exclude=.git' '--exclude=*.po' --recursive liferea_copy/.travis.yml liferea/.travis.yml --- liferea_copy/.travis.yml 2017-04-21 11:45:45.557518685 +0200 +++ liferea/.travis.yml 2017-04-20 22:14:05.987686034 +0200 @@ -1,14 +1,24 @@ language: c +sudo: false script: - ./autogen.sh - ./configure && make - - sudo make install compiler: - clang - gcc -before_install: - - sudo apt-get update -qq - - sudo apt-get install -y intltool libxml2-dev libxslt1-dev libgtk-3-dev libwebkit2gtk-4.0-dev libpeas-dev libsqlite3-dev libjson-glib-dev libgirepository1.0-dev gsettings-desktop-schemas-dev +addons: + apt: + packages: + - intltool + - libxml2-dev + - libxslt1-dev + - libgtk-3-dev + - libwebkit2gtk-4.0-dev + - libpeas-dev + - libsqlite3-dev + - libjson-glib-dev + - libgirepository1.0-dev + - gsettings-desktop-schemas-dev