Bug fix #509: Increase number of marks to 10
authorTomasz Golinski <tomaszg@math.uwb.edu.pl>
Sat, 16 Sep 2017 19:18:35 +0000 (20:18 +0100)
committerColin Clark <colin.clark@cclark.uk>
Sat, 16 Sep 2017 19:18:35 +0000 (20:18 +0100)
https://github.com/BestImageViewer/geeqie/issues/509

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

index e4974fb..b59a089 100644 (file)
@@ -1292,7 +1292,7 @@ static void bar_pane_keywords_menu_popup(GtkWidget *widget, PaneKeywordsData *pk
                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);
index 5f42e1c..7820209 100644 (file)
@@ -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,
index 57f3cf7..62611ea 100644 (file)
@@ -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))
index 7afe1a4..4f8afe3 100644 (file)
@@ -650,7 +650,7 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
 
                        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)
index c8a83f9..9c320bb 100644 (file)
@@ -2220,7 +2220,7 @@ static void layout_actions_setup_mark(LayoutWindow *lw, gint mark, gchar *name_t
 
        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 @@ static void layout_actions_setup_marks(LayoutWindow *lw)
 
        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 @@ static void layout_actions_setup_marks(LayoutWindow *lw)
                                "        <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 @@ static void layout_actions_setup_marks(LayoutWindow *lw)
                                "  </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>" );
 
index 45dc37a..86a2cd2 100644 (file)
@@ -1092,7 +1092,7 @@ void meta_data_connect_mark_with_keyword(GtkTreeModel *keyword_tree, GtkTreeIter
                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 @@ GtkTreeIter *keyword_add_from_config(GtkTreeStore *keyword_tree, GtkTreeIter *pa
 
                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);
index 7cf066a..9327e35 100644 (file)
@@ -529,7 +529,7 @@ struct _ImageWindow
        gboolean mouse_wheel_mode;
 };
 
-#define FILEDATA_MARKS_SIZE 6
+#define FILEDATA_MARKS_SIZE 10
 
 struct _FileDataChangeInfo {
        FileDataChangeType type;
index b612e7d..eea06b2 100644 (file)
@@ -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 @@ static gint vficon_get_icon_width(ViewFile *vf)
        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;
 }
index b56a025..c89e6cb 100644 (file)
@@ -854,7 +854,11 @@ static void vflist_setup_iter(ViewFile *vf, GtkTreeStore *store, GtkTreeIter *it
                                        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