changeset 2793:2feed80bcd34

Collections changes Implement a file class for Collections Include an icon for collections (temporary icon until someone creates an appropriate one) Double-click on a .gqv icon in the files pane opens the collection window Option in Preferences/Behavior to open collection windows on top N.B. current users have to manually edit the Collections entry in Preferences/Files to change the collections class from metadata to collection
author Colin Clark <colin.clark@cclark.uk>
date Sat, 07 Jul 2018 19:50:31 +0100
parents dc7c069a2745
children 780a9b685335
files doc/docbook/GuideOptionsBehavior.xml doc/docbook/GuideOptionsFiltering.xml src/collect.c src/filefilter.c src/icons/Makefile.am src/icons/collection.png src/image.c src/options.c src/options.h src/pixbuf_util.c src/pixbuf_util.h src/preferences.c src/rcfile.c src/typedefs.h src/view_file/view_file_icon.c src/view_file/view_file_list.c web/help/GuideOptionsBehavior.html web/help/GuideOptionsFiltering.html
diffstat 18 files changed, 82 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/doc/docbook/GuideOptionsBehavior.xml	Fri Jul 06 19:46:54 2018 +0100
+++ b/doc/docbook/GuideOptionsBehavior.xml	Sat Jul 07 19:50:31 2018 +0100
@@ -134,6 +134,22 @@
       </varlistentry>
       <varlistentry>
         <term>
+          <guilabel>Use "With Rename" as default for Copy/Move dialogs</guilabel>
+        </term>
+        <listitem>
+          <para>Move the "With Rename" button to the default position.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>
+          <guilabel>Open Collections on top</guilabel>
+        </term>
+        <listitem>
+          <para>Open collection windows with "Always on Top" set.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>
           <guilabel>Recent folder list maximum size</guilabel>
         </term>
         <listitem>
--- a/doc/docbook/GuideOptionsFiltering.xml	Fri Jul 06 19:46:54 2018 +0100
+++ b/doc/docbook/GuideOptionsFiltering.xml	Sat Jul 07 19:50:31 2018 +0100
@@ -152,12 +152,14 @@
           <listitem>
             This may be used to define sets of file types, for use in the
             <emphasis>Grouping</emphasis>
-            function described above. The drop-down list has 4 entries:
+            function described above. The drop-down list has 6 entries:
             <itemizedlist>
               <listitem>Unknown</listitem>
               <listitem>Image</listitem>
               <listitem>RAW Image</listitem>
               <listitem>Metadata</listitem>
+              <listitem>Video</listitem>
+              <listitem>Collection</listitem>
             </itemizedlist>
           </listitem>
         </varlistentry>
--- a/src/collect.c	Fri Jul 06 19:46:54 2018 +0100
+++ b/src/collect.c	Sat Jul 07 19:50:31 2018 +0100
@@ -1288,6 +1288,10 @@
 	gtk_window_set_geometry_hints(GTK_WINDOW(cw->window), NULL, &geometry,
 				      GDK_HINT_MIN_SIZE | GDK_HINT_BASE_SIZE);
 
+	if (options->collections_on_top)
+		{
+		gtk_window_set_keep_above(GTK_WINDOW(cw->window), TRUE);
+		}
 
 	if (options->save_window_positions && path && collection_load_only_geometry(cw->cd, path))
 		{
--- a/src/filefilter.c	Fri Jul 06 19:46:54 2018 +0100
+++ b/src/filefilter.c	Sat Jul 07 19:50:31 2018 +0100
@@ -254,7 +254,7 @@
 	/* non-image files that might be desirable to show */
 	filter_add_if_missing("xmp", "XMP sidecar", ".xmp", FORMAT_CLASS_META, TRUE, FALSE, TRUE);
 	filter_add_if_missing("meta", "GQview legacy metadata", GQ_CACHE_EXT_METADATA, FORMAT_CLASS_META, TRUE, FALSE, TRUE);
-	filter_add_if_missing("gqv", GQ_APPNAME " image collection", GQ_COLLECTION_EXT, FORMAT_CLASS_META, FALSE, FALSE, TRUE);
+	filter_add_if_missing("gqv", GQ_APPNAME " image collection", GQ_COLLECTION_EXT, FORMAT_CLASS_COLLECTION, FALSE, FALSE, TRUE);
 	filter_add_if_missing("ufraw", "UFRaw ID file", ".ufraw", FORMAT_CLASS_META, FALSE, FALSE, TRUE);
 	filter_add_if_missing("pto", "Panorama script file", ".pto", FORMAT_CLASS_META, FALSE, FALSE, TRUE);
 
@@ -469,6 +469,7 @@
 	if (filter_file_class(name, FORMAT_CLASS_RAWIMAGE)) return FORMAT_CLASS_RAWIMAGE;
 	if (filter_file_class(name, FORMAT_CLASS_META)) return FORMAT_CLASS_META;
 	if (filter_file_class(name, FORMAT_CLASS_VIDEO)) return FORMAT_CLASS_VIDEO;
+	if (filter_file_class(name, FORMAT_CLASS_COLLECTION)) return FORMAT_CLASS_COLLECTION;
 	return FORMAT_CLASS_UNKNOWN;
 }
 
--- a/src/icons/Makefile.am	Fri Jul 06 19:46:54 2018 +0100
+++ b/src/icons/Makefile.am	Sat Jul 07 19:50:31 2018 +0100
@@ -15,6 +15,7 @@
 	sheet_metadata.png	\
 	sheet_unknown.png	\
 	sheet_video.png	\
+	collection.png	\
 	icon_float.png		\
 	icon_thumb.png		\
 	icon_book.png		\
@@ -36,6 +37,7 @@
 	icon_metadata		$(srcdir)/sheet_metadata.png	\
 	icon_unknown		$(srcdir)/sheet_unknown.png	\
 	icon_video		$(srcdir)/sheet_video.png	\
+	icon_collection	$(srcdir)/collection.png	\
 	icon_book		$(srcdir)/icon_book.png		\
 	icon_config		$(srcdir)/icon_config.png	\
 	icon_tools		$(srcdir)/icon_tools.png	\
Binary file src/icons/collection.png has changed
--- a/src/image.c	Fri Jul 06 19:46:54 2018 +0100
+++ b/src/image.c	Sat Jul 07 19:50:31 2018 +0100
@@ -697,6 +697,8 @@
 				break;
 			case FORMAT_CLASS_VIDEO:
 				pixbuf = pixbuf_inline(PIXBUF_INLINE_VIDEO);
+			case FORMAT_CLASS_COLLECTION:
+				pixbuf = pixbuf_inline(PIXBUF_INLINE_COLLECTION);
 				break;
 			default:
 				pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN);
--- a/src/options.c	Fri Jul 06 19:46:54 2018 +0100
+++ b/src/options.c	Sat Jul 07 19:50:31 2018 +0100
@@ -83,6 +83,7 @@
 
 	options->marks_save = TRUE;
 	options->with_rename = FALSE;
+	options->collections_on_top = FALSE;
 
 	memset(&options->image.border_color, 0, sizeof(options->image.border_color));
 	memset(&options->image.alpha_color_1, 0, sizeof(options->image.alpha_color_1));
--- a/src/options.h	Fri Jul 06 19:46:54 2018 +0100
+++ b/src/options.h	Sat Jul 07 19:50:31 2018 +0100
@@ -66,6 +66,7 @@
 	gchar *marks_tooltips[FILEDATA_MARKS_SIZE];
 
 	gboolean with_rename;
+	gboolean collections_on_top;
 
 	gchar *help_search_engine;
 
--- a/src/pixbuf_util.c	Fri Jul 06 19:46:54 2018 +0100
+++ b/src/pixbuf_util.c	Sat Jul 07 19:50:31 2018 +0100
@@ -111,6 +111,7 @@
 	{ PIXBUF_INLINE_METADATA,	icon_metadata },
 	{ PIXBUF_INLINE_UNKNOWN,	icon_unknown },
 	{ PIXBUF_INLINE_VIDEO,		icon_video },
+	{ PIXBUF_INLINE_COLLECTION,	icon_collection },
 	{ PIXBUF_INLINE_ICON,		gqview_icon },
 	{ PIXBUF_INLINE_LOGO,		geeqie_logo },
 	{ PIXBUF_INLINE_ICON_FLOAT,	icon_float },
@@ -254,6 +255,9 @@
 		case FORMAT_CLASS_VIDEO:
 			pixbuf = pixbuf_inline(PIXBUF_INLINE_VIDEO);
 			break;
+		case FORMAT_CLASS_COLLECTION:
+			pixbuf = pixbuf_inline(PIXBUF_INLINE_COLLECTION);
+			break;
 		default:
 			pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN);
 		}
--- a/src/pixbuf_util.h	Fri Jul 06 19:46:54 2018 +0100
+++ b/src/pixbuf_util.h	Sat Jul 07 19:50:31 2018 +0100
@@ -43,6 +43,7 @@
 #define PIXBUF_INLINE_METADATA		"metadata"
 #define PIXBUF_INLINE_UNKNOWN		"unknown"
 #define PIXBUF_INLINE_VIDEO			"video"
+#define PIXBUF_INLINE_COLLECTION	"collection"
 #define PIXBUF_INLINE_ICON		"icon"
 #define PIXBUF_INLINE_LOGO		"logo"
 
--- a/src/preferences.c	Fri Jul 06 19:46:54 2018 +0100
+++ b/src/preferences.c	Sat Jul 07 19:50:31 2018 +0100
@@ -109,7 +109,8 @@
 	N_("Image"),
 	N_("RAW Image"),
 	N_("Metadata"),
-	N_("Video")
+	N_("Video"),
+	N_("Collection")
 	};
 
 /* config memory values */
@@ -410,6 +411,7 @@
 
 	options->marks_save = c_options->marks_save;
 	options->with_rename = c_options->with_rename;
+	options->collections_on_top = c_options->collections_on_top;
 	config_entry_to_option(help_search_engine_entry, &options->help_search_engine, NULL);
 
 	options->read_metadata_in_idle = c_options->read_metadata_in_idle;
@@ -2544,6 +2546,7 @@
 	GtkWidget *table;
 	GtkWidget *marks;
 	GtkWidget *with_rename;
+	GtkWidget *collections_on_top;
 
 	vbox = scrolled_notebook_page(notebook, _("Behavior"));
 
@@ -2605,6 +2608,10 @@
 				options->with_rename, &c_options->with_rename);
 	gtk_widget_set_tooltip_text(with_rename,"Change the default button for Copy/Move dialogs");
 
+	collections_on_top = pref_checkbox_new_int(group, _("Open collections on top"),
+				options->collections_on_top, &c_options->collections_on_top);
+	gtk_widget_set_tooltip_text(collections_on_top,"Open collections window on top");
+
 	pref_spin_new_int(group, _("Recent folder list maximum size"), NULL,
 			  1, 50, 1, options->open_recent_list_maxsize, &c_options->open_recent_list_maxsize);
 
--- a/src/rcfile.c	Fri Jul 06 19:46:54 2018 +0100
+++ b/src/rcfile.c	Sat Jul 07 19:50:31 2018 +0100
@@ -348,6 +348,7 @@
 	WRITE_NL(); WRITE_CHAR(*options, help_search_engine);
 
 	WRITE_NL(); WRITE_BOOL(*options, with_rename);
+	WRITE_NL(); WRITE_BOOL(*options, collections_on_top);
 
 	/* File operations Options */
 	WRITE_NL(); WRITE_BOOL(*options, file_ops.enable_in_place_rename);
@@ -681,6 +682,8 @@
 		if (READ_BOOL(*options, marks_save)) continue;
 		if (READ_CHAR(*options, help_search_engine)) continue;
 
+		if (READ_BOOL(*options, collections_on_top)) continue;
+
 		/* Properties dialog options */
 		if (READ_CHAR(*options, properties.tabs_order)) continue;
 
--- a/src/typedefs.h	Fri Jul 06 19:46:54 2018 +0100
+++ b/src/typedefs.h	Sat Jul 07 19:50:31 2018 +0100
@@ -143,6 +143,7 @@
 	FORMAT_CLASS_RAWIMAGE,
 	FORMAT_CLASS_META,
 	FORMAT_CLASS_VIDEO,
+	FORMAT_CLASS_COLLECTION,
 	FILE_FORMAT_CLASSES
 } FileFormatClass;
 
--- a/src/view_file/view_file_icon.c	Fri Jul 06 19:46:54 2018 +0100
+++ b/src/view_file/view_file_icon.c	Sat Jul 07 19:50:31 2018 +0100
@@ -1367,8 +1367,15 @@
 
 			if (bevent->type == GDK_2BUTTON_PRESS && vf->layout)
 				{
-				vficon_selection_remove(vf, VFICON(vf)->click_fd, SELECTION_PRELIGHT, &iter);
-				layout_image_full_screen_start(vf->layout);
+				if (VFICON(vf)->click_fd->format_class == FORMAT_CLASS_COLLECTION)
+					{
+					collection_window_new(VFICON(vf)->click_fd->path);
+					}
+				else
+					{
+					vficon_selection_remove(vf, VFICON(vf)->click_fd, SELECTION_PRELIGHT, &iter);
+					layout_image_full_screen_start(vf->layout);
+					}
 				}
 			break;
 		case MOUSE_BUTTON_RIGHT:
--- a/src/view_file/view_file_list.c	Fri Jul 06 19:46:54 2018 +0100
+++ b/src/view_file/view_file_list.c	Sat Jul 07 19:50:31 2018 +0100
@@ -24,6 +24,7 @@
 
 #include "bar.h"
 #include "cache_maint.h"
+#include "collect.h"
 #include "dnd.h"
 #include "editors.h"
 #include "img-view.h"
@@ -39,6 +40,7 @@
 #include "uri_utils.h"
 #include "view_file.h"
 
+
 #include <gdk/gdkkeysyms.h> /* for keyboard values */
 
 /* Index to tree store */
@@ -644,7 +646,14 @@
 
 	if (bevent->button == MOUSE_BUTTON_LEFT && bevent->type == GDK_2BUTTON_PRESS)
 		{
-		if (vf->layout) layout_image_full_screen_start(vf->layout);
+		if (VFLIST(vf)->click_fd->format_class == FORMAT_CLASS_COLLECTION)
+			{
+			collection_window_new(VFLIST(vf)->click_fd->path);
+			}
+		else
+			{
+			if (vf->layout) layout_image_full_screen_start(vf->layout);
+			}
 		}
 
 	return FALSE;
--- a/web/help/GuideOptionsBehavior.html	Fri Jul 06 19:46:54 2018 +0100
+++ b/web/help/GuideOptionsBehavior.html	Sat Jul 07 19:50:31 2018 +0100
@@ -580,6 +580,18 @@
           <p class="para block block-first">Save all marks that have been set. Note that marks that are linked to a keyword will always be saved irrespective of this setting.</p>
         </dd>
 <dt class="term">
+          <span class="guilabel">Use "With Rename" as default for Copy/Move dialogs</span>
+        </dt>
+<dd>
+          <p class="para block block-first">Move the "With Rename" button to the default position.</p>
+        </dd>
+<dt class="term">
+          <span class="guilabel">Open Collections on top</span>
+        </dt>
+<dd>
+          <p class="para block block-first">Open collection windows with "Always on Top" set.</p>
+        </dd>
+<dt class="term">
           <span class="guilabel">Recent folder list maximum size</span>
         </dt>
 <dd>
--- a/web/help/GuideOptionsFiltering.html	Fri Jul 06 19:46:54 2018 +0100
+++ b/web/help/GuideOptionsFiltering.html	Sat Jul 07 19:50:31 2018 +0100
@@ -593,12 +593,14 @@
 <dd>
             This may be used to define sets of file types, for use in the
             <span class="emphasis">Grouping</span>
-            function described above. The drop-down list has 4 entries:
+            function described above. The drop-down list has 6 entries:
             <div class="block list itemizedlist"><ul class="itemizedlist">
 <li class="li-first">Unknown</li>
 <li>Image</li>
 <li>RAW Image</li>
 <li>Metadata</li>
+<li>Video</li>
+<li>Collection</li>
 </ul></div>
           </dd>
 <dt class="term">