Hello community, here is the log from the commit of package xviewer for openSUSE:Factory checked in at 2020-12-13 17:30:26 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xviewer (Old) and /work/SRC/openSUSE:Factory/.xviewer.new.2328 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xviewer" Sun Dec 13 17:30:26 2020 rev:19 rq:855395 version:2.8.0 Changes: -------- --- /work/SRC/openSUSE:Factory/xviewer/xviewer.changes 2020-08-21 19:20:41.912932880 +0200 +++ /work/SRC/openSUSE:Factory/.xviewer.new.2328/xviewer.changes 2020-12-13 17:30:55.488421656 +0100 @@ -1,0 +2,13 @@ +Tue Dec 8 19:22:56 UTC 2020 - andy great <[email protected]> + +- Update to version 2.8.0. + * Configure Mouse Wheel + * Make the mouse preferences tab look a bit more consistent with + the other tabs and other apps. + * Stop Centering Window + * Delete Dialog Focus + * Delete Dialog Focus + * Add favorites to the file menu. + * l10n: Update POT + +------------------------------------------------------------------- Old: ---- xviewer-2.6.2.tar.gz New: ---- xviewer-2.8.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xviewer.spec ++++++ --- /var/tmp/diff_new_pack.lWOEI3/_old 2020-12-13 17:30:56.076422253 +0100 +++ /var/tmp/diff_new_pack.lWOEI3/_new 2020-12-13 17:30:56.076422253 +0100 @@ -17,7 +17,7 @@ Name: xviewer -Version: 2.6.2 +Version: 2.8.0 Release: 0 Summary: Fast and functional graphics viewer License: GPL-2.0-or-later AND LGPL-2.1-or-later @@ -28,6 +28,7 @@ BuildRequires: gnome-common BuildRequires: hicolor-icon-theme BuildRequires: libjpeg-devel +BuildRequires: libxapp-devel BuildRequires: pkgconfig BuildRequires: update-desktop-files BuildRequires: yelp-tools ++++++ xviewer-2.6.2.tar.gz -> xviewer-2.8.0.tar.gz ++++++ ++++ 2448 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xviewer-2.6.2/configure.ac new/xviewer-2.8.0/configure.ac --- old/xviewer-2.6.2/configure.ac 2020-06-24 13:49:13.000000000 +0200 +++ new/xviewer-2.8.0/configure.ac 2020-11-30 12:22:18.000000000 +0100 @@ -1,8 +1,8 @@ AC_PREREQ(2.59) m4_define(xviewer_major_version, 2) -m4_define(xviewer_minor_version, 6) -m4_define(xviewer_micro_version, 2) +m4_define(xviewer_minor_version, 8) +m4_define(xviewer_micro_version, 0) m4_define(xviewer_version, xviewer_major_version.xviewer_minor_version.xviewer_micro_version) AC_INIT([xviewer], xviewer_version, [https://github.com/linuxmint/xviewer/issues], [xviewer]) @@ -94,6 +94,7 @@ EXEMPI_REQUIRED=1.99.5 LIBPEAS_REQUIRED=0.7.4 LIBPEAS_GTK_REQUIRED=0.7.4 +XAPP_REQUIRED=1.9.0 XVIEWER_MODULES="gtk+-3.0 >= $GTK_REQUIRED \ glib-2.0 >= $GLIB_REQUIRED \ @@ -104,7 +105,8 @@ gtk+-unix-print-3.0 >= $GTK_PRINT_REQUIRED \ shared-mime-info >= $SHARED_MIME_INFO_REQUIRED \ libpeas-1.0 >= $LIBPEAS_REQUIRED \ - libpeas-gtk-1.0 >= $LIBPEAS_GTK_REQUIRED" + libpeas-gtk-1.0 >= $LIBPEAS_GTK_REQUIRED \ + xapp >= $XAPP_REQUIRED" # Introspection GOBJECT_INTROSPECTION_CHECK([0.9.3]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xviewer-2.6.2/data/org.x.viewer.gschema.xml.in new/xviewer-2.8.0/data/org.x.viewer.gschema.xml.in --- old/xviewer-2.6.2/data/org.x.viewer.gschema.xml.in 2020-06-24 13:49:13.000000000 +0200 +++ new/xviewer-2.8.0/data/org.x.viewer.gschema.xml.in 2020-11-30 12:22:18.000000000 +0100 @@ -37,6 +37,62 @@ <summary>Scroll wheel zoom</summary> <description>Whether the scroll wheel should be used for zooming.</description> </key> + <key name="scroll-action" type="i"> + <default>0</default> + <summary>Mouse scroll wheel action</summary> + <description>Action for mouse scroll wheel. Values are 0 = zoom, + 1 = Vertical pan, 2 = horizontal pan, 3 = next/prev image, + 4 = rotate 90 deg CW or CCW, 5 = no action</description> + </key> + <key name="shift-scroll-action" type="i"> + <default>2</default> + <summary>Mouse scroll wheel + shift action</summary> + <description>Action for mouse scroll wheel. Values are 0 = zoom, + 1 = Vertical pan, 2 = horizontal pan, 3 = next/prev image, + 4 = rotate 90 deg CW or CCW, 5 = no action</description> + </key> + <key name="control-scroll-action" type="i"> + <default>1</default> + <summary>Mouse scroll wheel + ctrl action</summary> + <description>Action for mouse scroll wheel. Values are 0 = zoom, + 1 = Vertical pan, 2 = horizontal pan, 3 = next/prev image, + 4 = rotate 90 deg CW or CCW, 5 = no action</description> + </key> + <key name="shift-control-scroll-action" type="i"> + <default>2</default> + <summary>Mouse scroll wheel + shift action</summary> + <description>Action for mouse scroll wheel. Values are 0 = zoom, + 1 = Vertical pan, 2 = horizontal pan, 3 = next/prev image, + 4 = rotate 90 deg CW or CCW, 5 = no action</description> + </key> + <key name="tilt-action" type="i"> + <default>0</default> + <summary>Mouse scroll wheel action</summary> + <description>Action for mouse scroll wheel. Values are 0 = zoom, + 1 = Vertical pan, 2 = horizontal pan, 3 = next/prev image, + 4 = rotate 90 deg CW or CCW, 5 = no action</description> + </key> + <key name="shift-tilt-action" type="i"> + <default>1</default> + <summary>Mouse scroll wheel + shift action</summary> + <description>Action for mouse scroll wheel. Values are 0 = zoom, + 1 = Vertical pan, 2 = horizontal pan, 3 = next/prev image, + 4 = rotate 90 deg CW or CCW, 5 = no action</description> + </key> + <key name="control-tilt-action" type="i"> + <default>2</default> + <summary>Mouse scroll wheel + ctrl action</summary> + <description>Action for mouse scroll wheel. Values are 0 = zoom, + 1 = Vertical pan, 2 = horizontal pan, 3 = next/prev image, + 4 = rotate 90 deg CW or CCW, 5 = no action</description> + </key> + <key name="shift-control-tilt-action" type="i"> + <default>1</default> + <summary>Mouse scroll wheel + shift action</summary> + <description>Action for mouse scroll wheel. Values are 0 = zoom, + 1 = Vertical pan, 2 = horizontal pan, 3 = next/prev image, + 4 = rotate 90 deg CW or CCW, 5 = no action</description> + </key> <key name="zoom-multiplier" type="d"> <default>0.05</default> <summary>Zoom multiplier</summary> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xviewer-2.6.2/data/xviewer-preferences-dialog.ui new/xviewer-2.8.0/data/xviewer-preferences-dialog.ui --- old/xviewer-2.6.2/data/xviewer-preferences-dialog.ui 2020-06-24 13:49:13.000000000 +0200 +++ new/xviewer-2.8.0/data/xviewer-preferences-dialog.ui 2020-11-30 12:22:18.000000000 +0100 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.18.3 --> +<!-- Generated with glade 3.22.2 --> <interface> <requires lib="gtk+" version="3.10"/> <requires lib="libpeas-gtk" version="1.0"/> @@ -15,6 +15,9 @@ <property name="border_width">5</property> <property name="title" translatable="yes">Preferences</property> <property name="type_hint">dialog</property> + <child type="titlebar"> + <placeholder/> + </child> <child internal-child="vbox"> <object class="GtkBox" id="dialog-vbox1"> <property name="can_focus">False</property> @@ -84,8 +87,8 @@ <object class="GtkLabel" id="label6"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes">Image Enhancements</property> + <property name="xalign">0</property> <attributes> <attribute name="weight" value="bold"/> </attributes> @@ -180,8 +183,8 @@ <object class="GtkLabel" id="label1"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes">Background</property> + <property name="xalign">0</property> <attributes> <attribute name="weight" value="bold"/> </attributes> @@ -257,8 +260,8 @@ <object class="GtkLabel" id="label8"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes">Transparent Parts</property> + <property name="xalign">0</property> <attributes> <attribute name="weight" value="bold"/> </attributes> @@ -403,8 +406,8 @@ <object class="GtkLabel" id="label13"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes">Image Zoom</property> + <property name="xalign">0</property> <attributes> <attribute name="weight" value="bold"/> </attributes> @@ -442,8 +445,8 @@ <object class="GtkLabel" id="label15"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes">Sequence</property> + <property name="xalign">0</property> <attributes> <attribute name="weight" value="bold"/> </attributes> @@ -474,9 +477,9 @@ <object class="GtkLabel" id="label36"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes" comments="I18N: This sentence will be displayed above a horizonzal scale to select a number of seconds in xviewer's preferences dialog.">_Time between images:</property> <property name="use_underline">True</property> + <property name="xalign">0</property> </object> <packing> <property name="expand">False</property> @@ -563,6 +566,345 @@ </packing> </child> <child> + <object class="GtkBox" id="Box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="labelM2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Scroll-wheel:</property> + <property name="xalign">0</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkGrid" id="Grid1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">16</property> + <property name="row_spacing">6</property> + <property name="column_homogeneous">True</property> + <child> + <object class="GtkLabel" id="labelM4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Scroll</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="ScrollTextComboBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="active">0</property> + <property name="active_id">0</property> + <items> + <item id="0" translatable="yes">Zoom</item> + <item id="1" translatable="yes">Vetical Pan</item> + <item id="2" translatable="yes">Horizontal Pan</item> + <item id="3" translatable="yes">Next/Previous Image</item> + <item id="4" translatable="yes">Rotate 90 degrees</item> + <item id="5" translatable="yes">No Action</item> + </items> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="ScrollShiftTextComboBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="active">0</property> + <property name="active_id">0</property> + <items> + <item id="0" translatable="yes">Zoom</item> + <item id="1" translatable="yes">Vetical Pan</item> + <item id="2" translatable="yes">Horizontal Pan</item> + <item id="3" translatable="yes">Next/Previous Image</item> + <item id="4" translatable="yes">Rotate 90 degrees</item> + <item id="5" translatable="yes">No Action</item> + </items> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="ScrollCtrlTextComboBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="active">0</property> + <property name="active_id">0</property> + <items> + <item id="0" translatable="yes">Zoom</item> + <item id="1" translatable="yes">Vetical Pan</item> + <item id="2" translatable="yes">Horizontal Pan</item> + <item id="3" translatable="yes">Next/Previous Image</item> + <item id="4" translatable="yes">Rotate 90 degrees</item> + <item id="5" translatable="yes">No Action</item> + </items> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">2</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="ScrollShiftCtrlTextComboBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="active">0</property> + <property name="active_id">0</property> + <items> + <item id="0" translatable="yes">Zoom</item> + <item id="1" translatable="yes">Vetical Pan</item> + <item id="2" translatable="yes">Horizontal Pan</item> + <item id="3" translatable="yes">Next/Previous Image</item> + <item id="4" translatable="yes">Rotate 90 degrees</item> + <item id="5" translatable="yes">No Action</item> + </items> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="labelM13"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Shift+Scroll</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="labelM15"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Control+Scroll</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="labelM16"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Shift+Control+Scroll</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">3</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="labelM3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Tilt-wheel:</property> + <property name="xalign">0</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkGrid" id="Grid2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">16</property> + <property name="row_spacing">6</property> + <property name="column_homogeneous">True</property> + <child> + <object class="GtkComboBoxText" id="TiltTextComboBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="active">0</property> + <property name="active_id">0</property> + <items> + <item id="0" translatable="yes">Zoom</item> + <item id="1" translatable="yes">Vetical Pan</item> + <item id="2" translatable="yes">Horizontal Pan</item> + <item id="3" translatable="yes">Next/Previous Image</item> + <item id="4" translatable="yes">Rotate 90 degrees</item> + <item id="5" translatable="yes">No Action</item> + </items> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="TiltShiftTextComboBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="active">0</property> + <property name="active_id">0</property> + <items> + <item id="0" translatable="yes">Zoom</item> + <item id="1" translatable="yes">Vetical Pan</item> + <item id="2" translatable="yes">Horizontal Pan</item> + <item id="3" translatable="yes">Next/Previous Image</item> + <item id="4" translatable="yes">Rotate 90 degrees</item> + <item id="5" translatable="yes">No Action</item> + </items> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="TiltCtrlTextComboBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="active">0</property> + <property name="active_id">0</property> + <items> + <item id="0" translatable="yes">Zoom</item> + <item id="1" translatable="yes">Vetical Pan</item> + <item id="2" translatable="yes">Horizontal Pan</item> + <item id="3" translatable="yes">Next/Previous Image</item> + <item id="4" translatable="yes">Rotate 90 degrees</item> + <item id="5" translatable="yes">No Action</item> + </items> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">2</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="TiltShiftCtrlTextComboBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="active">0</property> + <property name="active_id">0</property> + <items> + <item id="0" translatable="yes">Zoom</item> + <item id="1" translatable="yes">Vetical Pan</item> + <item id="2" translatable="yes">Horizontal Pan</item> + <item id="3" translatable="yes">Next/Previous Image</item> + <item id="4" translatable="yes">Rotate 90 degrees</item> + <item id="5" translatable="yes">No Action</item> + </items> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="labelM17"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Tilt</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="labelM18"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Shift+Tilt</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="labelM19"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Control+Tilt</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="labelM"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Shift+Control+Tilt</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">3</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">4</property> + </packing> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="labelM1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Mouse</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> <object class="GtkBox" id="plugin_manager_container"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -582,7 +924,7 @@ </child> </object> <packing> - <property name="position">2</property> + <property name="position">3</property> </packing> </child> <child type="tab"> @@ -592,7 +934,7 @@ <property name="label" translatable="yes">Plugins</property> </object> <packing> - <property name="position">2</property> + <property name="position">3</property> <property name="tab_fill">False</property> </packing> </child> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xviewer-2.6.2/data/xviewer-ui.xml new/xviewer-2.8.0/data/xviewer-ui.xml --- old/xviewer-2.6.2/data/xviewer-ui.xml 2020-06-24 13:49:13.000000000 +0200 +++ new/xviewer-2.8.0/data/xviewer-ui.xml 2020-11-30 12:22:18.000000000 +0100 @@ -16,7 +16,14 @@ <separator/> <menuitem action="ImageProperties"/> <separator/> - <placeholder name="RecentDocuments"/> + <menu name="XAppFavorites" action="XAppFavorites"> + <placeholder name="XAppFavoritesPlaceholder"> + </placeholder> + </menu> + <menu name="RecentDocuments" action="RecentDocuments"> + <placeholder name="RecentDocumentsPlaceholder"> + </placeholder> + </menu> <separator/> <menuitem action="ImageClose"/> </menu> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xviewer-2.6.2/debian/changelog new/xviewer-2.8.0/debian/changelog --- old/xviewer-2.6.2/debian/changelog 2020-06-24 13:49:13.000000000 +0200 +++ new/xviewer-2.8.0/debian/changelog 2020-11-30 12:22:18.000000000 +0100 @@ -1,3 +1,24 @@ +xviewer (2.8.0) ulyssa; urgency=medium + + [ programmer-ceds ] + * Configure Mouse Wheel (#111) + + [ Michael Webster ] + * Make the mouse preferences tab look a bit more consistent with the other tabs and other apps. + + [ programmer-ceds ] + * Stop Centering Window + * Delete Dialog Focus + * Delete Dialog Focus + + [ Michael Webster ] + * Add favorites to the file menu. + + [ Clement Lefebvre ] + * l10n: Update POT + + -- Clement Lefebvre <[email protected]> Mon, 30 Nov 2020 11:21:50 +0000 + xviewer (2.6.2) ulyana; urgency=medium * CI: Update targets diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xviewer-2.6.2/debian/control new/xviewer-2.8.0/debian/control --- old/xviewer-2.6.2/debian/control 2020-06-24 13:49:13.000000000 +0200 +++ new/xviewer-2.8.0/debian/control 2020-11-30 12:22:18.000000000 +0100 @@ -27,6 +27,7 @@ librsvg2-dev (>= 2.36.2), libxml2-dev (>= 2.0), libatk1.0-dev (>= 1.32.0-2~), + libxapp-dev (>= 1.9.0), gobject-introspection (>= 0.9.12-4~), libgirepository1.0-dev (>= 0.9.12) Build-Depends-Indep: libgdk-pixbuf2.0-doc, libglib2.0-doc, libgtk-3-doc @@ -39,7 +40,7 @@ shared-mime-info (>= 0.20), gsettings-desktop-schemas (>= 2.91.92), gir1.2-peas-1.0, - xapps-common (>= 1.8.4) + xapps-common (>= 1.9.0) Recommends: librsvg2-common, yelp Description: Image viewer diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xviewer-2.6.2/doc/reference/version.xml new/xviewer-2.8.0/doc/reference/version.xml --- old/xviewer-2.6.2/doc/reference/version.xml 2020-06-24 13:49:13.000000000 +0200 +++ new/xviewer-2.8.0/doc/reference/version.xml 2020-11-30 12:22:18.000000000 +0100 @@ -1 +1 @@ -2.4.3 +2.6.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xviewer-2.6.2/src/xviewer-config-keys.h new/xviewer-2.8.0/src/xviewer-config-keys.h --- old/xviewer-2.6.2/src/xviewer-config-keys.h 2020-06-24 13:49:13.000000000 +0200 +++ new/xviewer-2.8.0/src/xviewer-config-keys.h 2020-11-30 12:22:18.000000000 +0100 @@ -42,6 +42,16 @@ #define XVIEWER_CONF_VIEW_INTERPOLATE "interpolate" #define XVIEWER_CONF_VIEW_EXTRAPOLATE "extrapolate" #define XVIEWER_CONF_VIEW_SCROLL_WHEEL_ZOOM "scroll-wheel-zoom" + +#define XVIEWER_CONF_VIEW_SCROLL_ACTION "scroll-action" +#define XVIEWER_CONF_VIEW_SCROLL_SHIFT_ACTION "shift-scroll-action" +#define XVIEWER_CONF_VIEW_SCROLL_CTRL_ACTION "control-scroll-action" +#define XVIEWER_CONF_VIEW_SCROLL_SHIFT_CTRL_ACTION "shift-control-scroll-action" +#define XVIEWER_CONF_VIEW_TILT_ACTION "tilt-action" +#define XVIEWER_CONF_VIEW_TILT_SHIFT_ACTION "shift-tilt-action" +#define XVIEWER_CONF_VIEW_TILT_CTRL_ACTION "control-tilt-action" +#define XVIEWER_CONF_VIEW_TILT_SHIFT_CTRL_ACTION "shift-control-tilt-action" + #define XVIEWER_CONF_VIEW_ZOOM_MULTIPLIER "zoom-multiplier" #define XVIEWER_CONF_VIEW_AUTOROTATE "autorotate" #define XVIEWER_CONF_VIEW_TRANSPARENCY "transparency" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xviewer-2.6.2/src/xviewer-preferences-dialog.c new/xviewer-2.8.0/src/xviewer-preferences-dialog.c --- old/xviewer-2.6.2/src/xviewer-preferences-dialog.c 2020-06-24 13:49:13.000000000 +0200 +++ new/xviewer-2.8.0/src/xviewer-preferences-dialog.c 2020-11-30 12:22:18.000000000 +0100 @@ -58,6 +58,15 @@ GtkWidget *seconds_scale; GtkWidget *plugin_manager; + + GtkWidget *ScrollTextComboBox; + GtkWidget *ScrollShiftTextComboBox; + GtkWidget *ScrollCtrlTextComboBox; + GtkWidget *ScrollShiftCtrlTextComboBox; + GtkWidget *TiltTextComboBox; + GtkWidget *TiltShiftTextComboBox; + GtkWidget *TiltCtrlTextComboBox; + GtkWidget *TiltShiftCtrlTextComboBox; }; static GObject *instance = NULL; @@ -190,6 +199,31 @@ gtk_widget_class_bind_template_child_private (widget_class, XviewerPreferencesDialog, plugin_manager); + + gtk_widget_class_bind_template_child_private (widget_class, + XviewerPreferencesDialog, + ScrollTextComboBox); + gtk_widget_class_bind_template_child_private (widget_class, + XviewerPreferencesDialog, + ScrollShiftTextComboBox); + gtk_widget_class_bind_template_child_private (widget_class, + XviewerPreferencesDialog, + ScrollCtrlTextComboBox); + gtk_widget_class_bind_template_child_private (widget_class, + XviewerPreferencesDialog, + ScrollShiftCtrlTextComboBox); + gtk_widget_class_bind_template_child_private (widget_class, + XviewerPreferencesDialog, + TiltTextComboBox); + gtk_widget_class_bind_template_child_private (widget_class, + XviewerPreferencesDialog, + TiltShiftTextComboBox); + gtk_widget_class_bind_template_child_private (widget_class, + XviewerPreferencesDialog, + TiltCtrlTextComboBox); + gtk_widget_class_bind_template_child_private (widget_class, + XviewerPreferencesDialog, + TiltShiftCtrlTextComboBox); } static void @@ -230,6 +264,32 @@ pd_string_to_rgba_mapping, pd_rgba_to_string_mapping, NULL, NULL); + + g_settings_bind (priv->view_settings, XVIEWER_CONF_VIEW_SCROLL_ACTION, + priv->ScrollTextComboBox, "active", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (priv->view_settings, XVIEWER_CONF_VIEW_SCROLL_SHIFT_ACTION, + priv->ScrollShiftTextComboBox, "active", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (priv->view_settings, XVIEWER_CONF_VIEW_SCROLL_CTRL_ACTION, + priv->ScrollCtrlTextComboBox, "active", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (priv->view_settings, XVIEWER_CONF_VIEW_SCROLL_SHIFT_CTRL_ACTION, + priv->ScrollShiftCtrlTextComboBox, "active", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (priv->view_settings, XVIEWER_CONF_VIEW_TILT_ACTION, + priv->TiltTextComboBox, "active", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (priv->view_settings, XVIEWER_CONF_VIEW_TILT_SHIFT_ACTION, + priv->TiltShiftTextComboBox, "active", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (priv->view_settings, XVIEWER_CONF_VIEW_TILT_CTRL_ACTION, + priv->TiltCtrlTextComboBox, "active", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (priv->view_settings, XVIEWER_CONF_VIEW_TILT_SHIFT_CTRL_ACTION, + priv->TiltShiftCtrlTextComboBox, "active", + G_SETTINGS_BIND_DEFAULT); + g_object_set_data (G_OBJECT (priv->color_radio), RADIO_VALUE, GINT_TO_POINTER (XVIEWER_TRANSP_COLOR)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xviewer-2.6.2/src/xviewer-scroll-view.c new/xviewer-2.8.0/src/xviewer-scroll-view.c --- old/xviewer-2.6.2/src/xviewer-scroll-view.c 2020-06-24 13:49:13.000000000 +0200 +++ new/xviewer-2.8.0/src/xviewer-scroll-view.c 2020-11-30 12:22:18.000000000 +0100 @@ -3,6 +3,7 @@ #endif #include <stdlib.h> +#include <fcntl.h> #include <math.h> #include <gdk-pixbuf/gdk-pixbuf.h> #include <gdk/gdkkeysyms.h> @@ -14,6 +15,7 @@ #include "xviewer-enum-types.h" #include "xviewer-scroll-view.h" #include "xviewer-debug.h" + #if 0 #include "uta.h" #endif @@ -122,6 +124,8 @@ GdkPixbuf *pixbuf; cairo_surface_t *surface; + GSettings *view_settings; + /* zoom mode, either ZOOM_MODE_FIT or ZOOM_MODE_FREE */ XviewerZoomMode zoom_mode; @@ -1663,7 +1667,7 @@ if ((gdk_pixbuf_get_width (priv->pixbuf) <= allocation.width) && (gdk_pixbuf_get_height (priv->pixbuf) <= allocation.height)) - zoom = 1.0; // the 1:1 image fits in the window + zoom = 1.0; /* the 1:1 image fits in the window */ else { if (DOUBLE_EQUAL(priv->zoom, 1.0)) @@ -1672,8 +1676,8 @@ zoom = 1.0; } - // the following two statements are necessary otherwise if the 1:1 image - // is dragged the alignment is thrown out + /* the following two statements are necessary otherwise if the 1:1 image + is dragged the alignment is thrown out */ if (DOUBLE_EQUAL(priv->zoom,zoom_for_fit)) { priv->xofs = 0; @@ -1795,11 +1799,7 @@ return TRUE; } -/* Scroll event handler for the image view. We zoom with an event without - * modifiers rather than scroll; we use the Shift modifier to scroll. - * Rationale: images are not primarily vertical, and in XVIEWER you scan scroll by - * dragging the image with button 1 anyways. - */ +/* Scroll event handler for the image view */ static gboolean xviewer_scroll_view_scroll_event (GtkWidget *widget, GdkEventScroll *event, gpointer data) { @@ -1807,63 +1807,216 @@ XviewerScrollViewPrivate *priv; double zoom_factor; int xofs, yofs; + int button_combination; /* 0 = scroll, 1 = scroll + shift, 2 = scroll + ctrl, 3 = scroll + shift + ctrl + 4..7 as 0..3 but for tilt wheel */ + int action; /* 0 = zoom, 1 = vertical pan, 2 = horizontal pan, 3 = next/prev image */ + static guint32 mouse_wheel_time = 0; /* used to debounce the mouse wheel (scroll and tilt) + when used for next/previous image or rotate image */ + + view = XVIEWER_SCROLL_VIEW (data); priv = view->priv; + priv->view_settings = g_settings_new (XVIEWER_CONF_VIEW); + /* Compute zoom factor and scrolling offsets; we'll only use either of them */ /* same as in gtkscrolledwindow.c */ xofs = gtk_adjustment_get_page_increment (priv->hadj) / 2; yofs = gtk_adjustment_get_page_increment (priv->vadj) / 2; switch (event->direction) { - case GDK_SCROLL_UP: - zoom_factor = priv->zoom_multiplier; - xofs = 0; - yofs = -yofs; - break; + case GDK_SCROLL_UP: + button_combination = 0; /* scroll wheel */ + break; + + case GDK_SCROLL_LEFT: + button_combination = 4; /* tilt wheel */ + break; + + case GDK_SCROLL_DOWN: + button_combination = 0; /* scroll wheel */ + break; + + case GDK_SCROLL_RIGHT: + button_combination = 4; /* tilt wheel */ + break; + + default: + g_assert_not_reached (); + return FALSE; + } + + if (event->state & GDK_SHIFT_MASK) + button_combination++; + + if (event->state & GDK_CONTROL_MASK) + button_combination += 2; + + switch (button_combination) + { + case 0: + action = g_settings_get_int(priv->view_settings, + XVIEWER_CONF_VIEW_SCROLL_ACTION); + break; + case 1: + action = g_settings_get_int(priv->view_settings, + XVIEWER_CONF_VIEW_SCROLL_SHIFT_ACTION); + break; + case 2: + action = g_settings_get_int(priv->view_settings, + XVIEWER_CONF_VIEW_SCROLL_CTRL_ACTION); + break; + case 3: + action = g_settings_get_int(priv->view_settings, + XVIEWER_CONF_VIEW_SCROLL_SHIFT_CTRL_ACTION); + break; + case 4: + action = g_settings_get_int(priv->view_settings, + XVIEWER_CONF_VIEW_TILT_ACTION); + break; + case 5: + action = g_settings_get_int(priv->view_settings, + XVIEWER_CONF_VIEW_TILT_SHIFT_ACTION); + break; + case 6: + action = g_settings_get_int(priv->view_settings, + XVIEWER_CONF_VIEW_TILT_CTRL_ACTION); + break; + case 7: + action = g_settings_get_int(priv->view_settings, + XVIEWER_CONF_VIEW_TILT_SHIFT_CTRL_ACTION); + break; + } - case GDK_SCROLL_LEFT: - zoom_factor = 1.0 / priv->zoom_multiplier; - xofs = -xofs; - yofs = 0; - break; + switch (action) + { + case 0: /* zoom */ + if ((event->direction == GDK_SCROLL_UP) || (event->direction == GDK_SCROLL_RIGHT)) + zoom_factor = priv->zoom_multiplier; + else + zoom_factor = 1.0 / priv->zoom_multiplier; + set_zoom (view, priv->zoom * zoom_factor, TRUE, event->x, event->y); + break; + + case 1: /* vertical pan */ + xofs = 0; + if ((event->direction == GDK_SCROLL_UP) || (event->direction == GDK_SCROLL_RIGHT)) + yofs = -yofs; + else + yofs = yofs; + scroll_by (view, xofs, yofs); + break; - case GDK_SCROLL_DOWN: - zoom_factor = 1.0 / priv->zoom_multiplier; - xofs = 0; - yofs = yofs; - break; + case 2: /* horizontal pan */ + yofs = 0; + if ((event->direction == GDK_SCROLL_DOWN) || (event->direction == GDK_SCROLL_RIGHT)) + xofs = xofs; + else + xofs = -xofs; + scroll_by (view, xofs, yofs); + break; - case GDK_SCROLL_RIGHT: - zoom_factor = priv->zoom_multiplier; - xofs = xofs; - yofs = 0; - break; + case 3: /* move to next/prev image */ + { + GdkEventButton button_event; + + button_event.type = GDK_BUTTON_PRESS; + button_event.window = gtk_widget_get_window(widget); + button_event.send_event = TRUE; + button_event.time = g_get_monotonic_time() / 1000; + button_event.x = 0.0; /* coordinate parameters are irrelevant for this button press */ + button_event.y = 0.0; + button_event.axes = NULL; + button_event.state = 0; + if ((event->direction == GDK_SCROLL_UP) || (event->direction == GDK_SCROLL_LEFT)) + button_event.button = 8; + else + button_event.button = 9; - default: - g_assert_not_reached (); - return FALSE; - } + button_event.device = event->device; + button_event.x_root = 0.0; + button_event.y_root = 0.0; - if (priv->scroll_wheel_zoom) { - if (event->state & GDK_SHIFT_MASK) - scroll_by (view, yofs, xofs); - else if (event->state & GDK_CONTROL_MASK) - scroll_by (view, xofs, yofs); - else - set_zoom (view, priv->zoom * zoom_factor, - TRUE, event->x, event->y); - } else { - if (event->state & GDK_SHIFT_MASK) - scroll_by (view, yofs, xofs); - else if (event->state & GDK_CONTROL_MASK) - set_zoom (view, priv->zoom * zoom_factor, - TRUE, event->x, event->y); - else - scroll_by (view, xofs, yofs); + + if (button_event.time - mouse_wheel_time > 400) /* 400 msec debounce of mouse wheel */ + { + gtk_main_do_event((GdkEvent *)&button_event); + + mouse_wheel_time = button_event.time; + } + + break; + } + + case 4: /* Rotate image 90 CW or CCW */ + { + GdkKeymapKey* keys; + gint n_keys; + guint keyval; + guint state; + GdkEventKey key_event; + + keyval = GDK_KEY_R; + + if ((event->direction == GDK_SCROLL_UP) || (event->direction == GDK_SCROLL_LEFT)) + state = GDK_CONTROL_MASK + GDK_SHIFT_MASK; + else + state = GDK_CONTROL_MASK; + + gdk_keymap_get_entries_for_keyval(gdk_keymap_get_for_display (gtk_widget_get_display(widget)), + keyval, + &keys, + &n_keys); + + + + key_event.type = GDK_KEY_PRESS; + key_event.window = gtk_widget_get_window(widget); + key_event.send_event = TRUE; + key_event.time = g_get_monotonic_time() / 1000; + key_event.state = state; + key_event.keyval = keyval; + key_event.length = 0; + key_event.string = NULL; + key_event.hardware_keycode = keys[0].keycode; + key_event.group = keys[0].group; + key_event.is_modifier = FALSE; + + if (key_event.time - mouse_wheel_time > 400) /* 400 msec debounce of mouse wheel */ + { + int old_stderr, new_stderr; + /* When generating a mouse button event the event structure contains the device + ID for the mouse (see case 3 above) and no Gdk-Warning is generated. The Key + event structure has no device ID member and Gdk reports a warning that: + + "Event with type 8 not holding a GdkDevice. It is most likely synthesized + outside Gdk/GTK+" + + The following code therefore temporarily suppresses stderr to avoid showing + this warning when (given the Gdk implementation) it is expected - and untidy! */ + + fflush(stderr); + old_stderr = dup(2); + new_stderr = open("/dev/null", O_WRONLY); + dup2(new_stderr, 2); + close(new_stderr); + + gtk_main_do_event((GdkEvent *)&key_event); + + fflush(stderr); /* restore normal stderr output */ + dup2(old_stderr, 2); + close(old_stderr); + + mouse_wheel_time = key_event.time; + } + break; } + + /* case 5 = no action */ + } + return TRUE; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xviewer-2.6.2/src/xviewer-window.c new/xviewer-2.8.0/src/xviewer-window.c --- old/xviewer-2.6.2/src/xviewer-window.c 2020-06-24 13:49:13.000000000 +0200 +++ new/xviewer-2.8.0/src/xviewer-window.c 2020-11-30 12:22:18.000000000 +0100 @@ -66,6 +66,7 @@ #include <gdk/gdkkeysyms.h> #include <gio/gdesktopappinfo.h> #include <gtk/gtk.h> +#include <libxapp/xapp-favorites.h> #include <libpeas/peas-extension-set.h> #include <libpeas/peas-activatable.h> @@ -147,6 +148,7 @@ GtkActionGroup *actions_image; GtkActionGroup *actions_gallery; GtkActionGroup *actions_recent; + GtkActionGroup *actions_favorites; GtkWidget *fullscreen_popup; GSource *fullscreen_timeout_source; @@ -157,7 +159,8 @@ guint fullscreen_idle_inhibit_cookie; - guint recent_menu_id; + guint recent_menu_id; + guint favorites_menu_id; XviewerJob *load_job; XviewerJob *transform_job; @@ -911,6 +914,7 @@ { XviewerWindowPrivate *priv; GFile *file; + gboolean is_maximized; g_return_if_fail (XVIEWER_IS_WINDOW (window)); g_return_if_fail (XVIEWER_IS_IMAGE (image)); @@ -947,10 +951,17 @@ file, (GDestroyNotify) g_object_unref); + is_maximized = gtk_window_is_maximized (GTK_WINDOW (window)); if (g_settings_get_boolean (window->priv->window_settings, XVIEWER_CONF_WINDOW_MAXIMIZED)) - gtk_window_maximize (GTK_WINDOW (window)); + { + if (!is_maximized) + gtk_window_maximize (GTK_WINDOW (window)); + } else - gtk_window_unmaximize (GTK_WINDOW (window)); + { + if (is_maximized) + gtk_window_unmaximize (GTK_WINDOW (window)); + } xviewer_window_update_openwith_menu (window, image); } @@ -1644,16 +1655,14 @@ } static void -xviewer_window_open_recent_cb (GtkAction *action, XviewerWindow *window) +xviewer_window_open_by_uri (GtkAction *action, XviewerWindow *window) { - GtkRecentInfo *info; const gchar *uri; GSList *list = NULL; - info = g_object_get_data (G_OBJECT (action), "gtk-recent-info"); - g_return_if_fail (info != NULL); + uri = g_object_get_data (G_OBJECT (action), "xviewer-doc-uri"); + g_return_if_fail (uri != NULL); - uri = gtk_recent_info_get_uri (info); list = g_slist_prepend (list, g_strdup (uri)); xviewer_application_open_uri_list (XVIEWER_APP, @@ -1662,8 +1671,7 @@ 0, NULL); - g_slist_foreach (list, (GFunc) g_free, NULL); - g_slist_free (list); + g_slist_free_full (list, (GDestroyNotify) g_free); } static void @@ -2303,6 +2311,7 @@ { XviewerWindowPrivate *priv; GtkWidget *menubar; + gboolean is_maximized; xviewer_debug (DEBUG_WINDOW); @@ -2354,10 +2363,18 @@ xviewer_window_update_fullscreen_action (window); } + is_maximized = gtk_window_is_maximized (GTK_WINDOW (window)); if (g_settings_get_boolean (window->priv->window_settings, XVIEWER_CONF_WINDOW_MAXIMIZED)) - gtk_window_maximize (GTK_WINDOW (window)); + { + if (!is_maximized) + gtk_window_maximize (GTK_WINDOW (window)); + } else - gtk_window_unmaximize (GTK_WINDOW (window)); + { + if (is_maximized) + gtk_window_unmaximize (GTK_WINDOW (window)); + } + xviewer_scroll_view_show_cursor (XVIEWER_SCROLL_VIEW (priv->view)); @@ -3395,6 +3412,7 @@ gchar *prompt; guint n_images; gint response; + GtkWidget *delete_button; /* assume agreement, if the user doesn't want to be asked and deletion is available */ if (dont_ask_again_force_delete) @@ -3432,10 +3450,12 @@ /* add buttons to the dialog */ if (n_images == 1) { gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Cancel"), GTK_RESPONSE_CANCEL); - gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Delete"), GTK_RESPONSE_OK); + delete_button = gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Delete"), GTK_RESPONSE_OK); + gtk_style_context_add_class (gtk_widget_get_style_context (delete_button), GTK_STYLE_CLASS_DESTRUCTIVE_ACTION); } else { gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Cancel"), GTK_RESPONSE_CANCEL); - gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Yes") , GTK_RESPONSE_OK); + delete_button = gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Yes") , GTK_RESPONSE_OK); + gtk_style_context_add_class (gtk_widget_get_style_context (delete_button), GTK_STYLE_CLASS_DESTRUCTIVE_ACTION); } /* add 'dont ask again' button */ @@ -3450,6 +3470,7 @@ TRUE, 0); + gtk_widget_grab_focus (delete_button); /* show dialog and get user response */ gtk_widget_show_all (dialog); response = gtk_dialog_run (GTK_DIALOG (dialog)); @@ -4119,7 +4140,9 @@ { "View", NULL, N_("_View") }, { "Go", NULL, N_("_Go") }, { "Tools", NULL, N_("_Tools") }, - { "Help", NULL, N_("_Help") }, + { "Help", NULL, N_("_Help") }, + { "XAppFavorites", NULL, N_("_Favorites") }, + { "RecentDocuments", NULL, N_("_Recents") }, { "ImageOpen", "document-open-symbolic", N_("_Open…"), "<control>O", N_("Open a file"), @@ -4592,7 +4615,7 @@ for (li = actions; li != NULL; li = li->next) { g_signal_handlers_disconnect_by_func (GTK_ACTION (li->data), - G_CALLBACK(xviewer_window_open_recent_cb), + G_CALLBACK(xviewer_window_open_by_uri), window); gtk_action_group_remove_action (priv->actions_recent, @@ -4642,14 +4665,14 @@ action = gtk_action_new (action_name, label, tip, NULL); gtk_action_set_always_show_image (action, TRUE); - g_object_set_data_full (G_OBJECT (action), "gtk-recent-info", - gtk_recent_info_ref (info), - (GDestroyNotify) gtk_recent_info_unref); + g_object_set_data_full (G_OBJECT (action), "xviewer-doc-uri", + g_strdup (gtk_recent_info_get_uri (info)), + (GDestroyNotify) g_free); g_object_set (G_OBJECT (action), "icon-name", "image-x-generic", NULL); g_signal_connect (action, "activate", - G_CALLBACK (xviewer_window_open_recent_cb), + G_CALLBACK (xviewer_window_open_by_uri), window); gtk_action_group_add_action (priv->actions_recent, action); @@ -4657,7 +4680,7 @@ g_object_unref (action); gtk_ui_manager_add_ui (priv->ui_mgr, priv->recent_menu_id, - "/MainMenu/Image/RecentDocuments", + "/MainMenu/Image/RecentDocuments/RecentDocumentsPlaceholder", action_name, action_name, GTK_UI_MANAGER_AUTO, FALSE); @@ -4676,6 +4699,120 @@ xviewer_window_update_recent_files_menu (window); } +// This should be generated in the build and shared between the desktop file and here +const gchar *supported_mimetypes[] = { + "image/bmp", + "image/gif", + "image/jpeg", + "image/jpg", + "image/pjpeg", + "image/png", + "image/tiff", + "image/x-bmp", + "image/x-gray", + "image/x-icb", + "image/x-ico", + "image/x-png", + "image/x-portable-anymap", + "image/x-portable-bitmap", + "image/x-portable-graymap", + "image/x-portable-pixmap", + "image/x-xbitmap", + "image/x-xpixmap", + "image/x-pcx", + "image/svg+xml", + "image/svg+xml-compressed", + "image/vnd.wap.wbmp" +}; + +static void +xviewer_window_update_favorites_menu (XviewerWindow *window) +{ + XviewerWindowPrivate *priv; + GList *actions = NULL, *li = NULL, *items = NULL; + gint count; + priv = window->priv; + + if (priv->favorites_menu_id != 0) + gtk_ui_manager_remove_ui (priv->ui_mgr, priv->favorites_menu_id); + + actions = gtk_action_group_list_actions (priv->actions_favorites); + + for (li = actions; li != NULL; li = li->next) { + g_signal_handlers_disconnect_by_func (GTK_ACTION (li->data), + G_CALLBACK(xviewer_window_open_by_uri), + window); + + gtk_action_group_remove_action (priv->actions_favorites, + GTK_ACTION (li->data)); + } + + g_list_free (actions); + + priv->favorites_menu_id = gtk_ui_manager_new_merge_id (priv->ui_mgr); + + items = xapp_favorites_get_favorites (xapp_favorites_get_default (), + supported_mimetypes); + count = 1; + + for (li = items; li != NULL; li = li->next) { + gchar *action_name; + gchar *label; + gchar *tip; + gchar **display_name; + gchar *label_filename; + GtkAction *action; + XAppFavoriteInfo *info = li->data; + + action_name = g_strdup_printf ("favorite-%d", count); + display_name = g_strsplit (info->display_name, "_", -1); + label_filename = g_strjoinv ("__", display_name); + label = g_strdup_printf ("%s_%d. %s", + (is_rtl ? "\xE2\x80\x8F" : ""), count, label_filename); + g_free (label_filename); + g_strfreev (display_name); + + tip = g_uri_unescape_string (info->uri, NULL); + + action = gtk_action_new (action_name, label, tip, NULL); + gtk_action_set_always_show_image (action, TRUE); + + g_object_set_data_full (G_OBJECT (action), "xviewer-doc-uri", + g_strdup (info->uri), + (GDestroyNotify) g_free); + + g_object_set (G_OBJECT (action), "icon-name", "image-x-generic", NULL); + + g_signal_connect (action, "activate", + G_CALLBACK (xviewer_window_open_by_uri), + window); + + gtk_action_group_add_action (priv->actions_favorites, action); + + g_object_unref (action); + + gtk_ui_manager_add_ui (priv->ui_mgr, priv->favorites_menu_id, + "/MainMenu/Image/XAppFavorites/XAppFavoritesPlaceholder", + action_name, action_name, + GTK_UI_MANAGER_AUTO, FALSE); + + g_free (action_name); + g_free (label); + g_free (tip); + + count++; + } + + g_list_foreach (items, (GFunc) xapp_favorite_info_free, NULL); + g_list_free (items); +} + +static void +xviewer_window_favorites_changed_cb (GtkRecentManager *manager, XviewerWindow *window) +{ + xviewer_window_update_favorites_menu (window); +} + static void xviewer_window_drag_data_received (GtkWidget *widget, GdkDragContext *context, @@ -5050,6 +5187,18 @@ gtk_ui_manager_insert_action_group (priv->ui_mgr, priv->actions_recent, 0); + priv->actions_favorites = gtk_action_group_new ("XAppFavoriteActions"); + gtk_action_group_set_translation_domain (priv->actions_favorites, + GETTEXT_PACKAGE); + + g_signal_connect (xapp_favorites_get_default (), "changed", + G_CALLBACK (xviewer_window_favorites_changed_cb), + window); + + xviewer_window_update_favorites_menu (window); + + gtk_ui_manager_insert_action_group (priv->ui_mgr, priv->actions_favorites, 0); + priv->cbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (priv->box), priv->cbox, TRUE, TRUE, 0); gtk_widget_show (priv->cbox); @@ -5280,7 +5429,8 @@ xviewer_window_get_display_profile (GTK_WIDGET (window)); #endif - window->priv->recent_menu_id = 0; + window->priv->recent_menu_id = 0; + window->priv->favorites_menu_id = 0; window->priv->gallery_position = 0; window->priv->gallery_resizable = FALSE; @@ -5371,6 +5521,11 @@ priv->actions_recent = NULL; } + if (priv->actions_favorites != NULL) { + g_object_unref (priv->actions_favorites); + priv->actions_favorites = NULL; + } + if (priv->actions_open_with != NULL) { g_object_unref (priv->actions_open_with); priv->actions_open_with = NULL; @@ -5392,6 +5547,12 @@ priv->recent_menu_id = 0; + g_signal_handlers_disconnect_by_func (xapp_favorites_get_default (), + G_CALLBACK (xviewer_window_favorites_changed_cb), + window); + + priv->favorites_menu_id = 0; + xviewer_window_clear_load_job (window); xviewer_window_clear_transform_job (window); _______________________________________________ openSUSE Commits mailing list -- [email protected] To unsubscribe, email [email protected] List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette List Archives: https://lists.opensuse.org/archives/list/[email protected]
