self->item_width = 180;
self->item_height = 170;
+ self->last_cursor_index = -1;
+
gtk_widget_set_focusable(GTK_WIDGET(self), TRUE);
// event handler
int label_x_offset = (item_width - label_alloc.width) / 2;
size_t selection_count = 0;
+ ssize_t selection_index = -1;
int x = 0;
int y = 0;
gtk_snapshot_append_node(snapshot, highlight_clip_node);
} else {
view->items[i].isselected = 1;
+ selection_index = i;
selection_count++;
}
} else if (view->update_selection == 1) {
if(view->update_selection) {
view->selection_count = selection_count;
printf("selection_count: %d\n", (int)selection_count);
+ if(selection_count == 1) {
+ view->last_cursor_index = selection_index;
+ }
}
}
// find first selection
ssize_t selx = -1;
ssize_t sely = -1;
- for(size_t i=0;i<view->numitems;i++) {
- if(view->items[i].isselected) {
- if(selx == -1) {
- selx = i % view->current_items_per_line;
- sely = i / view->current_items_per_line;
- break;
+ size_t selection_index = 0;
+ if(view->last_cursor_index >= -1) {
+ // get last position of item cursor
+ selection_index = view->last_cursor_index;
+ } else {
+ // find selection
+ for(size_t i=0;i<view->numitems;i++) {
+ if(view->items[i].isselected) {
+ if(selx == -1) {
+ selection_index = i;
+ break;
+ }
}
}
}
+ selx = selection_index % view->current_items_per_line;
+ sely = selection_index / view->current_items_per_line;
+
selx += x;
sely += y;
if(selx >= view->current_items_per_line) {
return TRUE;
}
- size_t selected_index = sely * view->current_items_per_line + selx;
- if(selected_index < view->numitems) {
+ size_t new_selected_index = sely * view->current_items_per_line + selx;
+ if(new_selected_index < view->numitems) {
// unselect all
for(size_t i=0;i<view->numitems;i++) {
view->items[i].isselected = FALSE;
}
- view->items[selected_index].isselected = TRUE;
+ view->items[new_selected_index].isselected = TRUE;
+ view->last_cursor_index = new_selected_index;
view->selection_count = 1;
}
}
gtk_widget_unparent(view->items[i].image);
gtk_widget_unparent(view->items[i].label);
}
+ view->selection_count = 0;
+ view->last_cursor_index = -1;
}