Additional commands for multi-page files
authorColin Clark <colin.clark@cclark.uk>
Tue, 6 Aug 2019 11:28:47 +0000 (12:28 +0100)
committerColin Clark <colin.clark@cclark.uk>
Tue, 6 Aug 2019 11:28:47 +0000 (12:28 +0100)
Control-Home and Control-End for first and last page of a multi-page
file.

12 files changed:
doc/docbook/GuideMainWindowMenus.xml
doc/docbook/GuideReferenceKeyboardShortcuts.xml
src/filedata.c
src/filedata.h
src/icons/Makefile.am
src/icons/icon_next_page.png [deleted file]
src/icons/icon_previous_page.png [deleted file]
src/layout_util.c
src/pixbuf_util.c
src/pixbuf_util.h
src/preferences.c
src/toolbar.c

index 0c58c5c..3f1f93b 100644 (file)
   </section>\r
   <section id="Gomenu">\r
     <title>Go menu</title>\r
+    <para>The Page commands are for files which contain multiple images e.g. .tiff files</para>\r
     <variablelist>\r
       <varlistentry>\r
         <term>\r
           </menuchoice>\r
         </term>\r
         <listitem>\r
-          <para>Goes tothe first image.</para>\r
+          <para>Goes to the first image.</para>\r
         </listitem>\r
       </varlistentry>\r
       <varlistentry>\r
           </para>\r
         </listitem>\r
       </varlistentry>\r
+      <varlistentry>\r
+        <term>\r
+          <menuchoice>\r
+            <shortcut>\r
+              <keycombo>\r
+                <keycap>Ctrl</keycap>\r
+                <keycap>Home</keycap>\r
+              </keycombo>\r
+            </shortcut>\r
+            <guimenu>First Page</guimenu>\r
+          </menuchoice>\r
+        </term>\r
+        <listitem>\r
+          <para>Goes to the first page.</para>\r
+        </listitem>\r
+      </varlistentry>\r
+      <varlistentry>\r
+        <term>\r
+          <menuchoice>\r
+            <shortcut>\r
+              <keycombo>\r
+                <keycap>Ctrl</keycap>\r
+                <keycap>End</keycap>\r
+              </keycombo>\r
+            </shortcut>\r
+            <guimenu>Last Page</guimenu>\r
+          </menuchoice>\r
+        </term>\r
+        <listitem>\r
+          <para>Goes to the last page.</para>\r
+        </listitem>\r
+      </varlistentry>\r
+      <varlistentry>\r
+        <term>\r
+          <menuchoice>\r
+            <shortcut>\r
+              <keycombo>\r
+                <keycap>Ctrl</keycap>\r
+                <keycap>PageUp</keycap>\r
+              </keycombo>\r
+            </shortcut>\r
+            <guimenu>Previous Page</guimenu>\r
+          </menuchoice>\r
+        </term>\r
+        <listitem>\r
+          <para>Goes to the previous page.</para>\r
+        </listitem>\r
+      </varlistentry>\r
+      <varlistentry>\r
+        <term>\r
+          <menuchoice>\r
+            <shortcut>\r
+              <keycombo>\r
+                <keycap>Ctrl</keycap>\r
+                <keycap>PageDown</keycap>\r
+              </keycombo>\r
+            </shortcut>\r
+            <guimenu>Next Page</guimenu>\r
+          </menuchoice>\r
+        </term>\r
+        <listitem>\r
+          <para>Goes to the next page.</para>\r
+        </listitem>\r
+      </varlistentry>\r
     </variablelist>\r
     <para />\r
   </section>\r
index 7b5993d..0a55378 100644 (file)
             <entry colsep="0" />\r
             <entry colsep="0" />\r
           </row>\r
+          <row>\r
+            <entry colsep="0">\r
+              <emphasis role="strong">For files with multiple pages e.g. tiff files</emphasis>\r
+            </entry>\r
+            <entry colsep="0" />\r
+            <entry colsep="0" />\r
+          </row>\r
+          <row>\r
+            <entry>\r
+              <code>\r
+                Ctrl +\r
+                <keycap>Home</keycap>\r
+              </code>\r
+            </entry>\r
+            <entry />\r
+            <entry>Go to first page</entry>\r
+          </row>\r
+          <row>\r
+            <entry>\r
+              <code>\r
+                Ctrl +\r
+                <keycap>End</keycap>\r
+              </code>\r
+            </entry>\r
+            <entry />\r
+            <entry>Go to last page</entry>\r
+          </row>\r
+          <row>\r
+            <entry>\r
+              <code>\r
+                Ctrl +\r
+                <keycap>PageUp</keycap>\r
+              </code>\r
+            </entry>\r
+            <entry />\r
+            <entry>Go to previous page</entry>\r
+          </row>\r
+          <row>\r
+            <entry>\r
+              <code>\r
+                Ctrl +\r
+                <keycap>PageDown</keycap>\r
+              </code>\r
+            </entry>\r
+            <entry />\r
+            <entry>Go to next page</entry>\r
+          </row>\r
           <row>\r
             <entry colsep="0">\r
               <emphasis role="strong">File Menu</emphasis>\r
           </row>\r
           <row>\r
             <entry>\r
-              <code>\r
-                Shift + Delete\r
-              </code>\r
+              <code>Shift + Delete</code>\r
             </entry>\r
             <entry />\r
             <entry>Permanently delete selected images.</entry>\r
index 2a2a645..e258052 100644 (file)
@@ -3397,6 +3397,23 @@ void marks_clear_all()
        g_hash_table_foreach(file_data_pool, marks_clear, NULL);
 }
 
+void file_data_set_page_num(FileData *fd, gint page_num)
+{
+       if (fd->page_total > 1 && page_num < 0)
+               {
+               fd->page_num = fd->page_total - 1;
+               }
+       else if (fd->page_total > 1 && page_num <= fd->page_total)
+               {
+               fd->page_num = page_num - 1;
+               }
+       else
+               {
+               fd->page_num = 0;
+               }
+       file_data_send_notification(fd, NOTIFY_REREAD);
+}
+
 void file_data_inc_page_num(FileData *fd)
 {
        if (fd->page_total > 0 && fd->page_num < fd->page_total - 1)
index 201c120..4664ded 100644 (file)
@@ -176,5 +176,6 @@ void read_rating_data(FileData *file);
 void file_data_inc_page_num(FileData *fd);
 void file_data_dec_page_num(FileData *fd);
 void file_data_set_page_total(FileData *fd, gint page_total);
+void file_data_set_page_num(FileData *fd, gint page_num);
 #endif
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index df90eea..2ecc437 100644 (file)
@@ -50,9 +50,7 @@ ICONS_INLINE = \
        icon_trash.png \
        icon_heic.png \
        icon_grayscale.png \
-       icon_exposure.png \
-       icon_next_page.png \
-       icon_previous_page.png
+       icon_exposure.png
 
 ICONS_INLINE_PAIRS = \
        folder_closed           $(srcdir)/folder_closed.png     \
@@ -101,9 +99,7 @@ ICONS_INLINE_PAIRS = \
        icon_trash      $(srcdir)/icon_trash.png \
        icon_heic       $(srcdir)/icon_heic.png \
        icon_grayscale  $(srcdir)/icon_grayscale.png \
-       icon_exposure   $(srcdir)/icon_exposure.png \
-       icon_next_page  $(srcdir)/icon_next_page.png \
-       icon_previous_page      $(srcdir)/icon_previous_page.png
+       icon_exposure   $(srcdir)/icon_exposure.png
 
 icons_inline.h: $(ICONS_INLINE) Makefile.in
        @sh -ec "echo '/* Auto generated file, do not edit */'; echo; \
diff --git a/src/icons/icon_next_page.png b/src/icons/icon_next_page.png
deleted file mode 100644 (file)
index e3b023b..0000000
Binary files a/src/icons/icon_next_page.png and /dev/null differ
diff --git a/src/icons/icon_previous_page.png b/src/icons/icon_previous_page.png
deleted file mode 100644 (file)
index f3fcdf9..0000000
Binary files a/src/icons/icon_previous_page.png and /dev/null differ
index a74ca0e..c818bde 100644 (file)
@@ -1541,6 +1541,22 @@ static void layout_menu_image_next_cb(GtkAction *action, gpointer data)
        layout_image_next(lw);
 }
 
+static void layout_menu_page_first_cb(GtkAction *action, gpointer data)
+{
+       LayoutWindow *lw = data;
+       FileData *fd = layout_image_get_fd(lw);
+
+       file_data_set_page_num(fd, 1);
+}
+
+static void layout_menu_page_last_cb(GtkAction *action, gpointer data)
+{
+       LayoutWindow *lw = data;
+       FileData *fd = layout_image_get_fd(lw);
+
+       file_data_set_page_num(fd, -1);
+}
+
 static void layout_menu_page_next_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
@@ -1906,8 +1922,10 @@ static GtkActionEntry menu_entries[] = {
   { "NextImage",       GTK_STOCK_GO_DOWN,      N_("_Next Image"),                      "space",                N_("Next Image"),                       CB(layout_menu_image_next_cb) },
   { "NextImageAlt1",   GTK_STOCK_GO_DOWN,      N_("_Next Image"),                      "Page_Down",            N_("Next Image"),                       CB(layout_menu_image_next_cb) },
 
-  { "NextPage",        PIXBUF_INLINE_ICON_NEXT_PAGE,   N_("_Next Page"),                       "<control>Page_Down",   N_("Next Page"),        CB(layout_menu_page_next_cb) },
-  { "PrevPage",        PIXBUF_INLINE_ICON_PREVIOUS_PAGE,       N_("_Previous Page"),   "<control>Page_Up",             N_("Previous Page"),    CB(layout_menu_page_previous_cb) },
+  { "FirstPage",       GTK_STOCK_MEDIA_PREVIOUS,       N_("_First Page"),      "<control>Home",        N_( "First Page"),      CB(layout_menu_page_first_cb) },
+  { "LastPage",        GTK_STOCK_MEDIA_NEXT,   N_("_Last Page"),       "<control>End",         N_("Last Page"),        CB(layout_menu_page_last_cb) },
+  { "NextPage",        GTK_STOCK_MEDIA_FORWARD,        N_("_Next Page"),                       "<control>Page_Down",   N_("Next Page"),        CB(layout_menu_page_next_cb) },
+  { "PrevPage",        GTK_STOCK_MEDIA_REWIND, N_("_Previous Page"),   "<control>Page_Up",             N_("Previous Page"),    CB(layout_menu_page_previous_cb) },
 
 
   { "NextImageAlt2",   GTK_STOCK_GO_DOWN,      N_("_Next Image"),                      "KP_Page_Down",         N_("Next Image"),                       CB(layout_menu_image_next_cb) },
@@ -2142,6 +2160,8 @@ static const gchar *menu_ui_description =
 "      <menuitem action='Up'/>"
 "      <menuitem action='Home'/>"
 "      <separator/>"
+"      <menuitem action='FirstPage'/>"
+"      <menuitem action='LastPage'/>"
 "      <menuitem action='NextPage'/>"
 "      <menuitem action='PrevPage'/>"
 "    </menu>"
index 4243537..2a6f79d 100644 (file)
@@ -149,8 +149,6 @@ static PixbufInline inline_pixbuf_data[] = {
        { PIXBUF_INLINE_ICON_HEIF,      icon_heic },
        { PIXBUF_INLINE_ICON_GRAYSCALE, icon_grayscale },
        { PIXBUF_INLINE_ICON_EXPOSURE,  icon_exposure },
-       { PIXBUF_INLINE_ICON_NEXT_PAGE, icon_next_page },
-       { PIXBUF_INLINE_ICON_PREVIOUS_PAGE,     icon_previous_page },
        { NULL, NULL }
 };
 
index 5bd748e..bcec3ae 100644 (file)
@@ -77,8 +77,6 @@ gboolean pixbuf_scale_aspect(gint req_w, gint req_h, gint old_w, gint old_h, gin
 #define PIXBUF_INLINE_ICON_HEIF        "icon_heic"
 #define PIXBUF_INLINE_ICON_GRAYSCALE   "icon_grayscale"
 #define PIXBUF_INLINE_ICON_EXPOSURE            "icon_exposure"
-#define PIXBUF_INLINE_ICON_NEXT_PAGE   "icon_next_page"
-#define PIXBUF_INLINE_ICON_PREVIOUS_PAGE       "icon_previous_page"
 
 #define PIXBUF_INLINE_ICON_CW  "icon_rotate_clockwise"
 #define PIXBUF_INLINE_ICON_CCW "icon_rotate_counter_clockwise"
index 70a612d..41304ba 100644 (file)
@@ -654,8 +654,10 @@ static const UseableMouseItems useable_mouse_items[] = {
        {"Forward",     N_("Forward"), GTK_STOCK_GO_FORWARD},
        {"Home",        N_("Home"), GTK_STOCK_HOME},
        {"Up",  N_("Up"), GTK_STOCK_GO_UP},
-       {"NextPage",    N_("Next Page"), PIXBUF_INLINE_ICON_NEXT_PAGE},
-       {"PrevPage",    N_("Previous Page"), PIXBUF_INLINE_ICON_PREVIOUS_PAGE},
+       {"FirstPage",   N_("First page"), GTK_STOCK_MEDIA_PREVIOUS},
+       {"LastPage",    N_("Last Page"), GTK_STOCK_MEDIA_NEXT},
+       {"NextPage",    N_("Next page"), GTK_STOCK_MEDIA_FORWARD},
+       {"PrevPage",    N_("Previous Page"), GTK_STOCK_MEDIA_REWIND},
        {"NewWindow",   N_("New _window"), GTK_STOCK_NEW},
        {"NewCollection",       N_("New collection"), GTK_STOCK_INDEX},
        {"OpenCollection",      N_("Open collection"), GTK_STOCK_OPEN},
index f4bc115..4a484a9 100644 (file)
@@ -79,8 +79,10 @@ static const UseableToolbarItems useable_toolbar_items[] = {
        {"Forward",     N_("Forward"), GTK_STOCK_GO_FORWARD},
        {"Home",        N_("Home"), GTK_STOCK_HOME},
        {"Up",  N_("Up"), GTK_STOCK_GO_UP},
-       {"NextPage",    N_("Next page"), PIXBUF_INLINE_ICON_NEXT_PAGE},
-       {"PrevPage",    N_("Previous Page"), PIXBUF_INLINE_ICON_PREVIOUS_PAGE},
+       {"FirstPage",   N_("First page"), GTK_STOCK_MEDIA_PREVIOUS},
+       {"LastPage",    N_("Last Page"), GTK_STOCK_MEDIA_NEXT},
+       {"NextPage",    N_("Next page"), GTK_STOCK_MEDIA_FORWARD},
+       {"PrevPage",    N_("Previous Page"), GTK_STOCK_MEDIA_REWIND},
        {"NewWindow",   N_("New _window"), GTK_STOCK_NEW},
        {"NewCollection",       N_("New collection"), GTK_STOCK_INDEX},
        {"OpenCollection",      N_("Open collection"), GTK_STOCK_OPEN},