changeset 2600:c6a11c0bade8

Bug fix #509: Increase number of marks to 10 https://github.com/BestImageViewer/geeqie/issues/509
author Tomasz Golinski <tomaszg@math.uwb.edu.pl>
date Sat, 16 Sep 2017 20:18:35 +0100
parents 93d065140133
children 5d2e634fd54f
files src/bar_keywords.c src/cellrenderericon.c src/cellrenderericon.h src/image-overlay.c src/layout_util.c src/metadata.c src/typedefs.h src/view_file/view_file_icon.c src/view_file/view_file_list.c
diffstat 9 files changed, 37 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/src/bar_keywords.c	Sat Sep 16 20:12:22 2017 +0100
+++ b/src/bar_keywords.c	Sat Sep 16 20:18:35 2017 +0100
@@ -1292,7 +1292,7 @@
 		submenu = gtk_menu_new();
 		for (i = 0; i < FILEDATA_MARKS_SIZE; i++)
 			{
-			text = g_strdup_printf(_("Mark %d"), i + 1);
+			text = g_strdup_printf(_("Mark %d"), 1 + (i < 9 ? i : -1));
 			item = menu_item_add(submenu, text, G_CALLBACK(bar_pane_keywords_connect_mark_cb), pkd);
 			g_object_set_data(G_OBJECT(item), "mark", GINT_TO_POINTER(i + 1));
 			g_free(text);
--- a/src/cellrenderericon.c	Sat Sep 16 20:12:22 2017 +0100
+++ b/src/cellrenderericon.c	Sat Sep 16 20:18:35 2017 +0100
@@ -25,9 +25,6 @@
 
 #define FIXED_ICON_SIZE_MAX 512
 
-#define TOGGLE_WIDTH 13
-#define TOGGLE_SPACING 18
-
 
 static void gqv_cell_renderer_icon_get_property(GObject		*object,
 						guint		param_id,
--- a/src/cellrenderericon.h	Sat Sep 16 20:12:22 2017 +0100
+++ b/src/cellrenderericon.h	Sat Sep 16 20:18:35 2017 +0100
@@ -24,6 +24,9 @@
 extern "C" {
 #endif /* __cplusplus */
 
+#define TOGGLE_WIDTH 13
+#define TOGGLE_SPACING 16
+
 
 #define GQV_TYPE_CELL_RENDERER_ICON		(gqv_cell_renderer_icon_get_type())
 #define GQV_CELL_RENDERER_ICON(obj)		(G_TYPE_CHECK_INSTANCE_CAST ((obj), GQV_TYPE_CELL_RENDERER_ICON, GQvCellRendererIcon))
--- a/src/image-overlay.c	Sat Sep 16 20:12:22 2017 +0100
+++ b/src/image-overlay.c	Sat Sep 16 20:18:35 2017 +0100
@@ -650,7 +650,7 @@
 
 			for (mark = 0; mark < FILEDATA_MARKS_SIZE; mark++)
 				{
-				g_string_append_printf(buf, file_data_get_mark(fd, mark) ? " <span background='#FF00FF'>%c</span>" : " %c", '1' + mark);
+				g_string_append_printf(buf, file_data_get_mark(fd, mark) ? " <span background='#FF00FF'>%c</span>" : " %c", '1' + (mark < 9 ? mark : -1) );
 				}
 
 			if (*text)
--- a/src/layout_util.c	Sat Sep 16 20:12:22 2017 +0100
+++ b/src/layout_util.c	Sat Sep 16 20:18:35 2017 +0100
@@ -2220,7 +2220,7 @@
 
 	gtk_action_group_add_actions(lw->action_group, &entry, 1, lw);
 	action = gtk_action_group_get_action(lw->action_group, name);
-	g_object_set_data(G_OBJECT(action), "mark_num", GINT_TO_POINTER(mark));
+	g_object_set_data(G_OBJECT(action), "mark_num", GINT_TO_POINTER(mark > 0 ? mark : 10));
 }
 
 static void layout_actions_setup_marks(LayoutWindow *lw)
@@ -2234,17 +2234,19 @@
 
 	for (mark = 1; mark <= FILEDATA_MARKS_SIZE; mark++)
 		{
-		layout_actions_setup_mark(lw, mark, "Mark%d",		_("Mark _%d"), NULL, NULL, NULL);
-		layout_actions_setup_mark(lw, mark, "SetMark%d",	_("_Set mark %d"),			NULL,		_("Set mark %d"), G_CALLBACK(layout_menu_set_mark_sel_cb));
-		layout_actions_setup_mark(lw, mark, "ResetMark%d",	_("_Reset mark %d"),			NULL,		_("Reset mark %d"), G_CALLBACK(layout_menu_res_mark_sel_cb));
-		layout_actions_setup_mark(lw, mark, "ToggleMark%d",	_("_Toggle mark %d"),			"%d",		_("Toggle mark %d"), G_CALLBACK(layout_menu_toggle_mark_sel_cb));
-		layout_actions_setup_mark(lw, mark, "ToggleMark%dAlt1",	_("_Toggle mark %d"),			"KP_%d",	_("Toggle mark %d"), G_CALLBACK(layout_menu_toggle_mark_sel_cb));
-		layout_actions_setup_mark(lw, mark, "SelectMark%d",	_("Se_lect mark %d"),			"<control>%d",	_("Select mark %d"), G_CALLBACK(layout_menu_sel_mark_cb));
-		layout_actions_setup_mark(lw, mark, "SelectMark%dAlt1",	_("_Select mark %d"),			"<control>KP_%d", _("Select mark %d"), G_CALLBACK(layout_menu_sel_mark_cb));
-		layout_actions_setup_mark(lw, mark, "AddMark%d",	_("_Add mark %d"),			NULL,		_("Add mark %d"), G_CALLBACK(layout_menu_sel_mark_or_cb));
-		layout_actions_setup_mark(lw, mark, "IntMark%d",	_("_Intersection with mark %d"),	NULL,		_("Intersection with mark %d"), G_CALLBACK(layout_menu_sel_mark_and_cb));
-		layout_actions_setup_mark(lw, mark, "UnselMark%d",	_("_Unselect mark %d"),			NULL,		_("Unselect mark %d"), G_CALLBACK(layout_menu_sel_mark_minus_cb));
-		layout_actions_setup_mark(lw, mark, "FilterMark%d",	_("_Filter mark %d"),			NULL,		_("Filter mark %d"), G_CALLBACK(layout_menu_mark_filter_toggle_cb));
+		gint i = (mark < 10 ? mark : 0);
+
+		layout_actions_setup_mark(lw, i, "Mark%d",		_("Mark _%d"), NULL, NULL, NULL);
+		layout_actions_setup_mark(lw, i, "SetMark%d",	_("_Set mark %d"),			NULL,		_("Set mark %d"), G_CALLBACK(layout_menu_set_mark_sel_cb));
+		layout_actions_setup_mark(lw, i, "ResetMark%d",	_("_Reset mark %d"),			NULL,		_("Reset mark %d"), G_CALLBACK(layout_menu_res_mark_sel_cb));
+		layout_actions_setup_mark(lw, i, "ToggleMark%d",	_("_Toggle mark %d"),			"%d",		_("Toggle mark %d"), G_CALLBACK(layout_menu_toggle_mark_sel_cb));
+		layout_actions_setup_mark(lw, i, "ToggleMark%dAlt1",	_("_Toggle mark %d"),			"KP_%d",	_("Toggle mark %d"), G_CALLBACK(layout_menu_toggle_mark_sel_cb));
+		layout_actions_setup_mark(lw, i, "SelectMark%d",	_("Se_lect mark %d"),			"<control>%d",	_("Select mark %d"), G_CALLBACK(layout_menu_sel_mark_cb));
+		layout_actions_setup_mark(lw, i, "SelectMark%dAlt1",	_("_Select mark %d"),			"<control>KP_%d", _("Select mark %d"), G_CALLBACK(layout_menu_sel_mark_cb));
+		layout_actions_setup_mark(lw, i, "AddMark%d",	_("_Add mark %d"),			NULL,		_("Add mark %d"), G_CALLBACK(layout_menu_sel_mark_or_cb));
+		layout_actions_setup_mark(lw, i, "IntMark%d",	_("_Intersection with mark %d"),	NULL,		_("Intersection with mark %d"), G_CALLBACK(layout_menu_sel_mark_and_cb));
+		layout_actions_setup_mark(lw, i, "UnselMark%d",	_("_Unselect mark %d"),			NULL,		_("Unselect mark %d"), G_CALLBACK(layout_menu_sel_mark_minus_cb));
+		layout_actions_setup_mark(lw, i, "FilterMark%d",	_("_Filter mark %d"),			NULL,		_("Filter mark %d"), G_CALLBACK(layout_menu_mark_filter_toggle_cb));
 
 		g_string_append_printf(desc,
 				"      <menu action='Mark%d'>"
@@ -2259,7 +2261,7 @@
 				"        <separator/>"
 				"        <menuitem action='FilterMark%d'/>"
 				"      </menu>",
-				mark, mark, mark, mark, mark, mark, mark, mark, mark);
+				i, i, i, i, i, i, i, i, i);
 		}
 
 	g_string_append(desc,
@@ -2267,10 +2269,12 @@
 				"  </menubar>");
 	for (mark = 1; mark <= FILEDATA_MARKS_SIZE; mark++)
 		{
+		gint i = (mark < 10 ? mark : 0);
+
 		g_string_append_printf(desc,
 				"<accelerator action='ToggleMark%dAlt1'/>"
 				"<accelerator action='SelectMark%dAlt1'/>",
-				mark, mark);
+				i, i);
 		}
 	g_string_append(desc,   "</ui>" );
 
--- a/src/metadata.c	Sat Sep 16 20:12:22 2017 +0100
+++ b/src/metadata.c	Sat Sep 16 20:18:35 2017 +0100
@@ -1092,7 +1092,7 @@
 		path = keyword_tree_get_path(keyword_tree, kw_iter);
 		file_data_register_mark_func(mark, meta_data_get_keyword_mark, meta_data_set_keyword_mark, path, (GDestroyNotify)string_list_free);
 
-		mark_str = g_strdup_printf("%d", mark + 1);
+		mark_str = g_strdup_printf("%d", (mark < 9 ? mark : -1) + 1);
 		gtk_tree_store_set(GTK_TREE_STORE(keyword_tree), kw_iter, KEYWORD_COLUMN_MARK, mark_str, -1);
 		g_free(mark_str);
 		}
@@ -1839,8 +1839,11 @@
 
 		if (mark_str)
 			{
+			gint i = (gint)atoi(mark_str);
+			if (i == 0) i = 10;
+
 			meta_data_connect_mark_with_keyword(GTK_TREE_MODEL(keyword_tree),
-											&iter, (gint)atoi(mark_str) - 1);
+											&iter, i - 1);
 			}
 
 		g_free(name);
--- a/src/typedefs.h	Sat Sep 16 20:12:22 2017 +0100
+++ b/src/typedefs.h	Sat Sep 16 20:18:35 2017 +0100
@@ -529,7 +529,7 @@
 	gboolean mouse_wheel_mode;
 };
 
-#define FILEDATA_MARKS_SIZE 6
+#define FILEDATA_MARKS_SIZE 10
 
 struct _FileDataChangeInfo {
 	FileDataChangeType type;
--- a/src/view_file/view_file_icon.c	Sat Sep 16 20:12:22 2017 +0100
+++ b/src/view_file/view_file_icon.c	Sat Sep 16 20:18:35 2017 +0100
@@ -48,7 +48,8 @@
 
 /* between these, the icon width is increased by thumb_max_width / 2 */
 #define THUMB_MIN_ICON_WIDTH 128
-#define THUMB_MAX_ICON_WIDTH 150
+#define THUMB_MAX_ICON_WIDTH 160
+#define THUMB_MIN_ICON_WIDTH_WITH_MARKS TOGGLE_SPACING * FILEDATA_MARKS_SIZE
 
 #define VFICON_MAX_COLUMNS 32
 #define THUMB_BORDER_PADDING 2
@@ -196,6 +197,7 @@
 	width = options->thumbnails.max_width + options->thumbnails.max_width / 2;
 	if (width < THUMB_MIN_ICON_WIDTH) width = THUMB_MIN_ICON_WIDTH;
 	if (width > THUMB_MAX_ICON_WIDTH) width = options->thumbnails.max_width;
+	if (vf->marks_enabled && width < THUMB_MIN_ICON_WIDTH_WITH_MARKS) width = THUMB_MIN_ICON_WIDTH_WITH_MARKS;
 
 	return width;
 }
--- a/src/view_file/view_file_list.c	Sat Sep 16 20:12:22 2017 +0100
+++ b/src/view_file/view_file_list.c	Sat Sep 16 20:18:35 2017 +0100
@@ -854,7 +854,11 @@
 					FILE_COLUMN_MARKS + 3, file_data_get_mark(fd, 3),
 					FILE_COLUMN_MARKS + 4, file_data_get_mark(fd, 4),
 					FILE_COLUMN_MARKS + 5, file_data_get_mark(fd, 5),
-#if FILEDATA_MARKS_SIZE != 6
+					FILE_COLUMN_MARKS + 6, file_data_get_mark(fd, 6),
+					FILE_COLUMN_MARKS + 7, file_data_get_mark(fd, 7),
+					FILE_COLUMN_MARKS + 8, file_data_get_mark(fd, 8),
+					FILE_COLUMN_MARKS + 9, file_data_get_mark(fd, 9),
+#if FILEDATA_MARKS_SIZE != 10
 #error this needs to be updated
 #endif
 #endif