comparison src/view_file_icon.c @ 574:3da75054d4e1

Drop ViewFileIcon, use ViewFile and ViewFileInfoIcon instead.
author zas_
date Sun, 04 May 2008 18:45:06 +0000
parents 2996f1bbc305
children b941403a4cd9
comparison
equal deleted inserted replaced
573:2996f1bbc305 574:3da75054d4e1
66 SelectionType selected; 66 SelectionType selected;
67 gint row; 67 gint row;
68 FileData *fd; 68 FileData *fd;
69 }; 69 };
70 70
71 static gint vficon_index_by_id(ViewFileIcon *vfi, IconData *in_id); 71 static gint vficon_index_by_id(ViewFile *vf, IconData *in_id);
72 72
73 static IconData *vficon_icon_data(ViewFileIcon *vfi, FileData *fd) 73 static IconData *vficon_icon_data(ViewFile *vf, FileData *fd)
74 { 74 {
75 IconData *id = NULL; 75 IconData *id = NULL;
76 GList *work; 76 GList *work;
77 77
78 if (!fd) return NULL; 78 if (!fd) return NULL;
79 work = vfi->list; 79 work = vf->list;
80 while (work && !id) 80 while (work && !id)
81 { 81 {
82 IconData *chk = work->data; 82 IconData *chk = work->data;
83 work = work->next; 83 work = work->next;
84 if (chk->fd == fd) id = chk; 84 if (chk->fd == fd) id = chk;
147 { 147 {
148 return filelist_insert_sort_full(list, id, method, ascend, (GCompareFunc) iconlist_sort_file_cb); 148 return filelist_insert_sort_full(list, id, method, ascend, (GCompareFunc) iconlist_sort_file_cb);
149 } 149 }
150 150
151 151
152 static void vficon_toggle_filenames(ViewFileIcon *vfi); 152 static void vficon_toggle_filenames(ViewFile *vf);
153 static void vficon_selection_remove(ViewFileIcon *vfi, IconData *id, SelectionType mask, GtkTreeIter *iter); 153 static void vficon_selection_remove(ViewFile *vf, IconData *id, SelectionType mask, GtkTreeIter *iter);
154 static void vficon_move_focus(ViewFileIcon *vfi, gint row, gint col, gint relative); 154 static void vficon_move_focus(ViewFile *vf, gint row, gint col, gint relative);
155 static void vficon_set_focus(ViewFileIcon *vfi, IconData *id); 155 static void vficon_set_focus(ViewFile *vf, IconData *id);
156 static void vficon_thumb_update(ViewFileIcon *vfi); 156 static void vficon_thumb_update(ViewFile *vf);
157 static void vficon_populate_at_new_size(ViewFileIcon *vfi, gint w, gint h, gint force); 157 static void vficon_populate_at_new_size(ViewFile *vf, gint w, gint h, gint force);
158 158
159 159
160 /* 160 /*
161 *----------------------------------------------------------------------------- 161 *-----------------------------------------------------------------------------
162 * pop-up menu 162 * pop-up menu
163 *----------------------------------------------------------------------------- 163 *-----------------------------------------------------------------------------
164 */ 164 */
165 165
166 static GList *vficon_pop_menu_file_list(ViewFileIcon *vfi) 166 static GList *vficon_pop_menu_file_list(ViewFile *vf)
167 { 167 {
168 if (!vfi->click_id) return NULL; 168 if (!VFICON_INFO(vf, click_id)) return NULL;
169 169
170 if (vfi->click_id->selected & SELECTION_SELECTED) 170 if (VFICON_INFO(vf, click_id)->selected & SELECTION_SELECTED)
171 { 171 {
172 return vficon_selection_get_list(vfi); 172 return vficon_selection_get_list(vf);
173 } 173 }
174 174
175 return g_list_append(NULL, file_data_ref(vfi->click_id->fd)); 175 return g_list_append(NULL, file_data_ref(VFICON_INFO(vf, click_id)->fd));
176 } 176 }
177 177
178 static void vficon_pop_menu_edit_cb(GtkWidget *widget, gpointer data) 178 static void vficon_pop_menu_edit_cb(GtkWidget *widget, gpointer data)
179 { 179 {
180 ViewFileIcon *vfi; 180 ViewFile *vf;
181 gint n; 181 gint n;
182 GList *list; 182 GList *list;
183 183
184 vfi = submenu_item_get_data(widget); 184 vf = submenu_item_get_data(widget);
185 n = GPOINTER_TO_INT(data); 185 n = GPOINTER_TO_INT(data);
186 186
187 if (!vfi) return; 187 if (!vf) return;
188 188
189 list = vficon_pop_menu_file_list(vfi); 189 list = vficon_pop_menu_file_list(vf);
190 start_editor_from_filelist(n, list); 190 start_editor_from_filelist(n, list);
191 filelist_free(list); 191 filelist_free(list);
192 } 192 }
193 193
194 static void vficon_pop_menu_info_cb(GtkWidget *widget, gpointer data) 194 static void vficon_pop_menu_info_cb(GtkWidget *widget, gpointer data)
195 { 195 {
196 ViewFileIcon *vfi = data; 196 ViewFile *vf = data;
197 197
198 info_window_new(NULL, vficon_pop_menu_file_list(vfi), NULL); 198 info_window_new(NULL, vficon_pop_menu_file_list(vf), NULL);
199 } 199 }
200 200
201 static void vficon_pop_menu_view_cb(GtkWidget *widget, gpointer data) 201 static void vficon_pop_menu_view_cb(GtkWidget *widget, gpointer data)
202 { 202 {
203 ViewFileIcon *vfi = data; 203 ViewFile *vf = data;
204 204
205 if (!vfi->click_id) return; 205 if (!VFICON_INFO(vf, click_id)) return;
206 206
207 if (vfi->click_id->selected & SELECTION_SELECTED) 207 if (VFICON_INFO(vf, click_id)->selected & SELECTION_SELECTED)
208 { 208 {
209 GList *list; 209 GList *list;
210 210
211 list = vficon_selection_get_list(vfi); 211 list = vficon_selection_get_list(vf);
212 view_window_new_from_list(list); 212 view_window_new_from_list(list);
213 filelist_free(list); 213 filelist_free(list);
214 } 214 }
215 else 215 else
216 { 216 {
217 view_window_new(vfi->click_id->fd); 217 view_window_new(VFICON_INFO(vf, click_id)->fd);
218 } 218 }
219 } 219 }
220 220
221 static void vficon_pop_menu_copy_cb(GtkWidget *widget, gpointer data) 221 static void vficon_pop_menu_copy_cb(GtkWidget *widget, gpointer data)
222 { 222 {
223 ViewFileIcon *vfi = data; 223 ViewFile *vf = data;
224 224
225 file_util_copy(NULL, vficon_pop_menu_file_list(vfi), NULL, vfi->listview); 225 file_util_copy(NULL, vficon_pop_menu_file_list(vf), NULL, vf->listview);
226 } 226 }
227 227
228 static void vficon_pop_menu_move_cb(GtkWidget *widget, gpointer data) 228 static void vficon_pop_menu_move_cb(GtkWidget *widget, gpointer data)
229 { 229 {
230 ViewFileIcon *vfi = data; 230 ViewFile *vf = data;
231 231
232 file_util_move(NULL, vficon_pop_menu_file_list(vfi), NULL, vfi->listview); 232 file_util_move(NULL, vficon_pop_menu_file_list(vf), NULL, vf->listview);
233 } 233 }
234 234
235 static void vficon_pop_menu_rename_cb(GtkWidget *widget, gpointer data) 235 static void vficon_pop_menu_rename_cb(GtkWidget *widget, gpointer data)
236 { 236 {
237 ViewFileIcon *vfi = data; 237 ViewFile *vf = data;
238 238
239 file_util_rename(NULL, vficon_pop_menu_file_list(vfi), vfi->listview); 239 file_util_rename(NULL, vficon_pop_menu_file_list(vf), vf->listview);
240 } 240 }
241 241
242 static void vficon_pop_menu_delete_cb(GtkWidget *widget, gpointer data) 242 static void vficon_pop_menu_delete_cb(GtkWidget *widget, gpointer data)
243 { 243 {
244 ViewFileIcon *vfi = data; 244 ViewFile *vf = data;
245 245
246 file_util_delete(NULL, vficon_pop_menu_file_list(vfi), vfi->listview); 246 file_util_delete(NULL, vficon_pop_menu_file_list(vf), vf->listview);
247 } 247 }
248 248
249 static void vficon_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data) 249 static void vficon_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data)
250 { 250 {
251 ViewFileIcon *vfi = data; 251 ViewFile *vf = data;
252 252
253 file_util_copy_path_list_to_clipboard(vficon_pop_menu_file_list(vfi)); 253 file_util_copy_path_list_to_clipboard(vficon_pop_menu_file_list(vf));
254 } 254 }
255 255
256 static void vficon_pop_menu_sort_cb(GtkWidget *widget, gpointer data) 256 static void vficon_pop_menu_sort_cb(GtkWidget *widget, gpointer data)
257 { 257 {
258 ViewFileIcon *vfi; 258 ViewFile *vf;
259 SortType type; 259 SortType type;
260 260
261 if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) return; 261 if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) return;
262 262
263 vfi = submenu_item_get_data(widget); 263 vf = submenu_item_get_data(widget);
264 if (!vfi) return; 264 if (!vf) return;
265 265
266 type = (SortType)GPOINTER_TO_INT(data); 266 type = (SortType)GPOINTER_TO_INT(data);
267 267
268 if (vfi->layout) 268 if (vf->layout)
269 { 269 {
270 layout_sort_set(vfi->layout, type, vfi->sort_ascend); 270 layout_sort_set(vf->layout, type, vf->sort_ascend);
271 } 271 }
272 else 272 else
273 { 273 {
274 vficon_sort_set(vfi, type, vfi->sort_ascend); 274 vficon_sort_set(vf, type, vf->sort_ascend);
275 } 275 }
276 } 276 }
277 277
278 static void vficon_pop_menu_sort_ascend_cb(GtkWidget *widget, gpointer data) 278 static void vficon_pop_menu_sort_ascend_cb(GtkWidget *widget, gpointer data)
279 { 279 {
280 ViewFileIcon *vfi = data; 280 ViewFile *vf = data;
281 281
282 if (vfi->layout) 282 if (vf->layout)
283 { 283 {
284 layout_sort_set(vfi->layout, vfi->sort_method, !vfi->sort_ascend); 284 layout_sort_set(vf->layout, vf->sort_method, !vf->sort_ascend);
285 } 285 }
286 else 286 else
287 { 287 {
288 vficon_sort_set(vfi, vfi->sort_method, !vfi->sort_ascend); 288 vficon_sort_set(vf, vf->sort_method, !vf->sort_ascend);
289 } 289 }
290 } 290 }
291 291
292 static void vficon_pop_menu_list_cb(GtkWidget *widget, gpointer data) 292 static void vficon_pop_menu_list_cb(GtkWidget *widget, gpointer data)
293 { 293 {
294 ViewFileIcon *vfi = data; 294 ViewFile *vf = data;
295 295
296 if (vfi->layout) layout_views_set(vfi->layout, vfi->layout->dir_view_type, FALSE); 296 if (vf->layout) layout_views_set(vf->layout, vf->layout->dir_view_type, FALSE);
297 } 297 }
298 298
299 static void vficon_pop_menu_show_names_cb(GtkWidget *widget, gpointer data) 299 static void vficon_pop_menu_show_names_cb(GtkWidget *widget, gpointer data)
300 { 300 {
301 ViewFileIcon *vfi = data; 301 ViewFile *vf = data;
302 302
303 vficon_toggle_filenames(vfi); 303 vficon_toggle_filenames(vf);
304 } 304 }
305 305
306 static void vficon_pop_menu_refresh_cb(GtkWidget *widget, gpointer data) 306 static void vficon_pop_menu_refresh_cb(GtkWidget *widget, gpointer data)
307 { 307 {
308 ViewFileIcon *vfi = data; 308 ViewFile *vf = data;
309 309
310 vficon_refresh(vfi); 310 vficon_refresh(vf);
311 } 311 }
312 312
313 static void vficon_popup_destroy_cb(GtkWidget *widget, gpointer data) 313 static void vficon_popup_destroy_cb(GtkWidget *widget, gpointer data)
314 { 314 {
315 ViewFileIcon *vfi = data; 315 ViewFile *vf = data;
316 vficon_selection_remove(vfi, vfi->click_id, SELECTION_PRELIGHT, NULL); 316 vficon_selection_remove(vf, VFICON_INFO(vf, click_id), SELECTION_PRELIGHT, NULL);
317 vfi->click_id = NULL; 317 VFICON_INFO(vf, click_id) = NULL;
318 vfi->popup = NULL; 318 vf->popup = NULL;
319 } 319 }
320 320
321 static GtkWidget *vficon_pop_menu(ViewFileIcon *vfi, gint active) 321 static GtkWidget *vficon_pop_menu(ViewFile *vf, gint active)
322 { 322 {
323 GtkWidget *menu; 323 GtkWidget *menu;
324 GtkWidget *item; 324 GtkWidget *item;
325 GtkWidget *submenu; 325 GtkWidget *submenu;
326 326
327 menu = popup_menu_short_lived(); 327 menu = popup_menu_short_lived();
328 328
329 g_signal_connect(G_OBJECT(menu), "destroy", 329 g_signal_connect(G_OBJECT(menu), "destroy",
330 G_CALLBACK(vficon_popup_destroy_cb), vfi); 330 G_CALLBACK(vficon_popup_destroy_cb), vf);
331 331
332 submenu_add_edit(menu, &item, G_CALLBACK(vficon_pop_menu_edit_cb), vfi); 332 submenu_add_edit(menu, &item, G_CALLBACK(vficon_pop_menu_edit_cb), vf);
333 gtk_widget_set_sensitive(item, active); 333 gtk_widget_set_sensitive(item, active);
334 334
335 menu_item_add_stock_sensitive(menu, _("_Properties"), GTK_STOCK_PROPERTIES, active, 335 menu_item_add_stock_sensitive(menu, _("_Properties"), GTK_STOCK_PROPERTIES, active,
336 G_CALLBACK(vficon_pop_menu_info_cb), vfi); 336 G_CALLBACK(vficon_pop_menu_info_cb), vf);
337 337
338 menu_item_add_stock_sensitive(menu, _("View in _new window"), GTK_STOCK_NEW, active, 338 menu_item_add_stock_sensitive(menu, _("View in _new window"), GTK_STOCK_NEW, active,
339 G_CALLBACK(vficon_pop_menu_view_cb), vfi); 339 G_CALLBACK(vficon_pop_menu_view_cb), vf);
340 menu_item_add_divider(menu); 340 menu_item_add_divider(menu);
341 341
342 menu_item_add_stock_sensitive(menu, _("_Copy..."), GTK_STOCK_COPY, active, 342 menu_item_add_stock_sensitive(menu, _("_Copy..."), GTK_STOCK_COPY, active,
343 G_CALLBACK(vficon_pop_menu_copy_cb), vfi); 343 G_CALLBACK(vficon_pop_menu_copy_cb), vf);
344 menu_item_add_sensitive(menu, _("_Move..."), active, 344 menu_item_add_sensitive(menu, _("_Move..."), active,
345 G_CALLBACK(vficon_pop_menu_move_cb), vfi); 345 G_CALLBACK(vficon_pop_menu_move_cb), vf);
346 menu_item_add_sensitive(menu, _("_Rename..."), active, 346 menu_item_add_sensitive(menu, _("_Rename..."), active,
347 G_CALLBACK(vficon_pop_menu_rename_cb), vfi); 347 G_CALLBACK(vficon_pop_menu_rename_cb), vf);
348 menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, active, 348 menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, active,
349 G_CALLBACK(vficon_pop_menu_delete_cb), vfi); 349 G_CALLBACK(vficon_pop_menu_delete_cb), vf);
350 if (options->show_copy_path) 350 if (options->show_copy_path)
351 menu_item_add_sensitive(menu, _("_Copy path"), active, 351 menu_item_add_sensitive(menu, _("_Copy path"), active,
352 G_CALLBACK(vficon_pop_menu_copy_path_cb), vfi); 352 G_CALLBACK(vficon_pop_menu_copy_path_cb), vf);
353 menu_item_add_divider(menu); 353 menu_item_add_divider(menu);
354 354
355 submenu = submenu_add_sort(NULL, G_CALLBACK(vficon_pop_menu_sort_cb), vfi, 355 submenu = submenu_add_sort(NULL, G_CALLBACK(vficon_pop_menu_sort_cb), vf,
356 FALSE, FALSE, TRUE, vfi->sort_method); 356 FALSE, FALSE, TRUE, vf->sort_method);
357 menu_item_add_divider(submenu); 357 menu_item_add_divider(submenu);
358 menu_item_add_check(submenu, _("Ascending"), vfi->sort_ascend, 358 menu_item_add_check(submenu, _("Ascending"), vf->sort_ascend,
359 G_CALLBACK(vficon_pop_menu_sort_ascend_cb), vfi); 359 G_CALLBACK(vficon_pop_menu_sort_ascend_cb), vf);
360 360
361 item = menu_item_add(menu, _("_Sort"), NULL, NULL); 361 item = menu_item_add(menu, _("_Sort"), NULL, NULL);
362 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); 362 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
363 363
364 menu_item_add_check(menu, _("View as _icons"), TRUE, 364 menu_item_add_check(menu, _("View as _icons"), TRUE,
365 G_CALLBACK(vficon_pop_menu_list_cb), vfi); 365 G_CALLBACK(vficon_pop_menu_list_cb), vf);
366 menu_item_add_check(menu, _("Show filename _text"), vfi->show_text, 366 menu_item_add_check(menu, _("Show filename _text"), VFICON_INFO(vf, show_text),
367 G_CALLBACK(vficon_pop_menu_show_names_cb), vfi); 367 G_CALLBACK(vficon_pop_menu_show_names_cb), vf);
368 menu_item_add_stock(menu, _("Re_fresh"), GTK_STOCK_REFRESH, G_CALLBACK(vficon_pop_menu_refresh_cb), vfi); 368 menu_item_add_stock(menu, _("Re_fresh"), GTK_STOCK_REFRESH, G_CALLBACK(vficon_pop_menu_refresh_cb), vf);
369 369
370 return menu; 370 return menu;
371 } 371 }
372 372
373 /* 373 /*
374 *------------------------------------------------------------------- 374 *-------------------------------------------------------------------
375 * signals 375 * signals
376 *------------------------------------------------------------------- 376 *-------------------------------------------------------------------
377 */ 377 */
378 378
379 static void vficon_send_update(ViewFileIcon *vfi) 379 static void vficon_send_update(ViewFile *vf)
380 { 380 {
381 if (vfi->func_status) vfi->func_status(vfi, vfi->data_status); 381 if (vf->func_status) vf->func_status(vf, vf->data_status);
382 } 382 }
383 383
384 static void vficon_send_layout_select(ViewFileIcon *vfi, IconData *id) 384 static void vficon_send_layout_select(ViewFile *vf, IconData *id)
385 { 385 {
386 FileData *read_ahead_fd = NULL; 386 FileData *read_ahead_fd = NULL;
387 FileData *sel_fd; 387 FileData *sel_fd;
388 FileData *cur_fd; 388 FileData *cur_fd;
389 389
390 if (!vfi->layout || !id || !id->fd) return; 390 if (!vf->layout || !id || !id->fd) return;
391 391
392 sel_fd = id->fd; 392 sel_fd = id->fd;
393 393
394 cur_fd = layout_image_get_fd(vfi->layout); 394 cur_fd = layout_image_get_fd(vf->layout);
395 if (sel_fd == cur_fd) return; /* no change */ 395 if (sel_fd == cur_fd) return; /* no change */
396 396
397 if (options->image.enable_read_ahead) 397 if (options->image.enable_read_ahead)
398 { 398 {
399 gint row; 399 gint row;
400 400
401 row = g_list_index(vfi->list, id); 401 row = g_list_index(vf->list, id);
402 if (row > vficon_index_by_fd(vfi, cur_fd) && 402 if (row > vficon_index_by_fd(vf, cur_fd) &&
403 row + 1 < vficon_count(vfi, NULL)) 403 row + 1 < vficon_count(vf, NULL))
404 { 404 {
405 read_ahead_fd = vficon_index_get_data(vfi, row + 1); 405 read_ahead_fd = vficon_index_get_data(vf, row + 1);
406 } 406 }
407 else if (row > 0) 407 else if (row > 0)
408 { 408 {
409 read_ahead_fd = vficon_index_get_data(vfi, row - 1); 409 read_ahead_fd = vficon_index_get_data(vf, row - 1);
410 } 410 }
411 } 411 }
412 412
413 layout_image_set_with_ahead(vfi->layout, sel_fd, read_ahead_fd); 413 layout_image_set_with_ahead(vf->layout, sel_fd, read_ahead_fd);
414 } 414 }
415 415
416 static void vficon_toggle_filenames(ViewFileIcon *vfi) 416 static void vficon_toggle_filenames(ViewFile *vf)
417 { 417 {
418 vfi->show_text = !vfi->show_text; 418 VFICON_INFO(vf, show_text) = !VFICON_INFO(vf, show_text);
419 options->show_icon_names = vfi->show_text; 419 options->show_icon_names = VFICON_INFO(vf, show_text);
420 420
421 vficon_populate_at_new_size(vfi, vfi->listview->allocation.width, vfi->listview->allocation.height, TRUE); 421 vficon_populate_at_new_size(vf, vf->listview->allocation.width, vf->listview->allocation.height, TRUE);
422 } 422 }
423 423
424 static gint vficon_get_icon_width(ViewFileIcon *vfi) 424 static gint vficon_get_icon_width(ViewFile *vf)
425 { 425 {
426 gint width; 426 gint width;
427 427
428 if (!vfi->show_text) return options->thumbnails.max_width; 428 if (!VFICON_INFO(vf, show_text)) return options->thumbnails.max_width;
429 429
430 width = options->thumbnails.max_width + options->thumbnails.max_width / 2; 430 width = options->thumbnails.max_width + options->thumbnails.max_width / 2;
431 if (width < THUMB_MIN_ICON_WIDTH) width = THUMB_MIN_ICON_WIDTH; 431 if (width < THUMB_MIN_ICON_WIDTH) width = THUMB_MIN_ICON_WIDTH;
432 if (width > THUMB_MAX_ICON_WIDTH) width = options->thumbnails.max_width; 432 if (width > THUMB_MAX_ICON_WIDTH) width = options->thumbnails.max_width;
433 433
438 *------------------------------------------------------------------- 438 *-------------------------------------------------------------------
439 * misc utils 439 * misc utils
440 *------------------------------------------------------------------- 440 *-------------------------------------------------------------------
441 */ 441 */
442 442
443 static gint vficon_find_position(ViewFileIcon *vfi, IconData *id, gint *row, gint *col) 443 static gint vficon_find_position(ViewFile *vf, IconData *id, gint *row, gint *col)
444 { 444 {
445 gint n; 445 gint n;
446 446
447 n = g_list_index(vfi->list, id); 447 n = g_list_index(vf->list, id);
448 448
449 if (n < 0) return FALSE; 449 if (n < 0) return FALSE;
450 450
451 *row = n / vfi->columns; 451 *row = n / VFICON_INFO(vf, columns);
452 *col = n - (*row * vfi->columns); 452 *col = n - (*row * VFICON_INFO(vf, columns));
453 453
454 return TRUE; 454 return TRUE;
455 } 455 }
456 456
457 static gint vficon_find_iter(ViewFileIcon *vfi, IconData *id, GtkTreeIter *iter, gint *column) 457 static gint vficon_find_iter(ViewFile *vf, IconData *id, GtkTreeIter *iter, gint *column)
458 { 458 {
459 GtkTreeModel *store; 459 GtkTreeModel *store;
460 gint row, col; 460 gint row, col;
461 461
462 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); 462 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
463 if (!vficon_find_position(vfi, id, &row, &col)) return FALSE; 463 if (!vficon_find_position(vf, id, &row, &col)) return FALSE;
464 if (!gtk_tree_model_iter_nth_child(store, iter, NULL, row)) return FALSE; 464 if (!gtk_tree_model_iter_nth_child(store, iter, NULL, row)) return FALSE;
465 if (column) *column = col; 465 if (column) *column = col;
466 466
467 return TRUE; 467 return TRUE;
468 } 468 }
469 469
470 static IconData *vficon_find_data(ViewFileIcon *vfi, gint row, gint col, GtkTreeIter *iter) 470 static IconData *vficon_find_data(ViewFile *vf, gint row, gint col, GtkTreeIter *iter)
471 { 471 {
472 GtkTreeModel *store; 472 GtkTreeModel *store;
473 GtkTreeIter p; 473 GtkTreeIter p;
474 474
475 if (row < 0 || col < 0) return NULL; 475 if (row < 0 || col < 0) return NULL;
476 476
477 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); 477 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
478 if (gtk_tree_model_iter_nth_child(store, &p, NULL, row)) 478 if (gtk_tree_model_iter_nth_child(store, &p, NULL, row))
479 { 479 {
480 GList *list; 480 GList *list;
481 481
482 gtk_tree_model_get(store, &p, FILE_COLUMN_POINTER, &list, -1); 482 gtk_tree_model_get(store, &p, FILE_COLUMN_POINTER, &list, -1);
488 } 488 }
489 489
490 return NULL; 490 return NULL;
491 } 491 }
492 492
493 static IconData *vficon_find_data_by_coord(ViewFileIcon *vfi, gint x, gint y, GtkTreeIter *iter) 493 static IconData *vficon_find_data_by_coord(ViewFile *vf, gint x, gint y, GtkTreeIter *iter)
494 { 494 {
495 GtkTreePath *tpath; 495 GtkTreePath *tpath;
496 GtkTreeViewColumn *column; 496 GtkTreeViewColumn *column;
497 497
498 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vfi->listview), x, y, 498 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), x, y,
499 &tpath, &column, NULL, NULL)) 499 &tpath, &column, NULL, NULL))
500 { 500 {
501 GtkTreeModel *store; 501 GtkTreeModel *store;
502 GtkTreeIter row; 502 GtkTreeIter row;
503 GList *list; 503 GList *list;
504 gint n; 504 gint n;
505 505
506 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); 506 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
507 gtk_tree_model_get_iter(store, &row, tpath); 507 gtk_tree_model_get_iter(store, &row, tpath);
508 gtk_tree_path_free(tpath); 508 gtk_tree_path_free(tpath);
509 509
510 gtk_tree_model_get(store, &row, FILE_COLUMN_POINTER, &list, -1); 510 gtk_tree_model_get(store, &row, FILE_COLUMN_POINTER, &list, -1);
511 511
524 *------------------------------------------------------------------- 524 *-------------------------------------------------------------------
525 * tooltip type window 525 * tooltip type window
526 *------------------------------------------------------------------- 526 *-------------------------------------------------------------------
527 */ 527 */
528 528
529 static void tip_show(ViewFileIcon *vfi) 529 static void tip_show(ViewFile *vf)
530 { 530 {
531 GtkWidget *label; 531 GtkWidget *label;
532 gint x, y; 532 gint x, y;
533 533
534 if (vfi->tip_window) return; 534 if (VFICON_INFO(vf, tip_window)) return;
535 535
536 gdk_window_get_pointer(gtk_tree_view_get_bin_window(GTK_TREE_VIEW(vfi->listview)), &x, &y, NULL); 536 gdk_window_get_pointer(gtk_tree_view_get_bin_window(GTK_TREE_VIEW(vf->listview)), &x, &y, NULL);
537 537
538 vfi->tip_id = vficon_find_data_by_coord(vfi, x, y, NULL); 538 VFICON_INFO(vf, tip_id) = vficon_find_data_by_coord(vf, x, y, NULL);
539 if (!vfi->tip_id) return; 539 if (!VFICON_INFO(vf, tip_id)) return;
540 540
541 vfi->tip_window = gtk_window_new(GTK_WINDOW_POPUP); 541 VFICON_INFO(vf, tip_window) = gtk_window_new(GTK_WINDOW_POPUP);
542 gtk_window_set_resizable(GTK_WINDOW(vfi->tip_window), FALSE); 542 gtk_window_set_resizable(GTK_WINDOW(VFICON_INFO(vf, tip_window)), FALSE);
543 gtk_container_set_border_width(GTK_CONTAINER(vfi->tip_window), 2); 543 gtk_container_set_border_width(GTK_CONTAINER(VFICON_INFO(vf, tip_window)), 2);
544 544
545 label = gtk_label_new(vfi->tip_id->fd->name); 545 label = gtk_label_new(VFICON_INFO(vf, tip_id)->fd->name);
546 546
547 g_object_set_data(G_OBJECT(vfi->tip_window), "tip_label", label); 547 g_object_set_data(G_OBJECT(VFICON_INFO(vf, tip_window)), "tip_label", label);
548 gtk_container_add(GTK_CONTAINER(vfi->tip_window), label); 548 gtk_container_add(GTK_CONTAINER(VFICON_INFO(vf, tip_window)), label);
549 gtk_widget_show(label); 549 gtk_widget_show(label);
550 550
551 gdk_window_get_pointer(NULL, &x, &y, NULL); 551 gdk_window_get_pointer(NULL, &x, &y, NULL);
552 552
553 if (!GTK_WIDGET_REALIZED(vfi->tip_window)) gtk_widget_realize(vfi->tip_window); 553 if (!GTK_WIDGET_REALIZED(VFICON_INFO(vf, tip_window))) gtk_widget_realize(VFICON_INFO(vf, tip_window));
554 gtk_window_move(GTK_WINDOW(vfi->tip_window), x + 16, y + 16); 554 gtk_window_move(GTK_WINDOW(VFICON_INFO(vf, tip_window)), x + 16, y + 16);
555 gtk_widget_show(vfi->tip_window); 555 gtk_widget_show(VFICON_INFO(vf, tip_window));
556 } 556 }
557 557
558 static void tip_hide(ViewFileIcon *vfi) 558 static void tip_hide(ViewFile *vf)
559 { 559 {
560 if (vfi->tip_window) gtk_widget_destroy(vfi->tip_window); 560 if (VFICON_INFO(vf, tip_window)) gtk_widget_destroy(VFICON_INFO(vf, tip_window));
561 vfi->tip_window = NULL; 561 VFICON_INFO(vf, tip_window) = NULL;
562 } 562 }
563 563
564 static gint tip_schedule_cb(gpointer data) 564 static gint tip_schedule_cb(gpointer data)
565 { 565 {
566 ViewFileIcon *vfi = data; 566 ViewFile *vf = data;
567 GtkWidget *window; 567 GtkWidget *window;
568 568
569 if (vfi->tip_delay_id == -1) return FALSE; 569 if (VFICON_INFO(vf, tip_delay_id) == -1) return FALSE;
570 570
571 window = gtk_widget_get_toplevel(vfi->listview); 571 window = gtk_widget_get_toplevel(vf->listview);
572 572
573 if (GTK_WIDGET_SENSITIVE(window) && 573 if (GTK_WIDGET_SENSITIVE(window) &&
574 GTK_WINDOW(window)->has_focus) 574 GTK_WINDOW(window)->has_focus)
575 { 575 {
576 tip_show(vfi); 576 tip_show(vf);
577 } 577 }
578 578
579 vfi->tip_delay_id = -1; 579 VFICON_INFO(vf, tip_delay_id) = -1;
580 return FALSE; 580 return FALSE;
581 } 581 }
582 582
583 static void tip_schedule(ViewFileIcon *vfi) 583 static void tip_schedule(ViewFile *vf)
584 { 584 {
585 tip_hide(vfi); 585 tip_hide(vf);
586 586
587 if (vfi->tip_delay_id != -1) 587 if (VFICON_INFO(vf, tip_delay_id) != -1)
588 { 588 {
589 g_source_remove(vfi->tip_delay_id); 589 g_source_remove(VFICON_INFO(vf, tip_delay_id));
590 vfi->tip_delay_id = -1; 590 VFICON_INFO(vf, tip_delay_id) = -1;
591 } 591 }
592 592
593 if (!vfi->show_text) 593 if (!VFICON_INFO(vf, show_text))
594 { 594 {
595 vfi->tip_delay_id = g_timeout_add(VFICON_TIP_DELAY, tip_schedule_cb, vfi); 595 VFICON_INFO(vf, tip_delay_id) = g_timeout_add(VFICON_TIP_DELAY, tip_schedule_cb, vf);
596 } 596 }
597 } 597 }
598 598
599 static void tip_unschedule(ViewFileIcon *vfi) 599 static void tip_unschedule(ViewFile *vf)
600 { 600 {
601 tip_hide(vfi); 601 tip_hide(vf);
602 602
603 if (vfi->tip_delay_id != -1) g_source_remove(vfi->tip_delay_id); 603 if (VFICON_INFO(vf, tip_delay_id) != -1) g_source_remove(VFICON_INFO(vf, tip_delay_id));
604 vfi->tip_delay_id = -1; 604 VFICON_INFO(vf, tip_delay_id) = -1;
605 } 605 }
606 606
607 static void tip_update(ViewFileIcon *vfi, IconData *id) 607 static void tip_update(ViewFile *vf, IconData *id)
608 { 608 {
609 if (vfi->tip_window) 609 if (VFICON_INFO(vf, tip_window))
610 { 610 {
611 gint x, y; 611 gint x, y;
612 612
613 gdk_window_get_pointer(NULL, &x, &y, NULL); 613 gdk_window_get_pointer(NULL, &x, &y, NULL);
614 gtk_window_move(GTK_WINDOW(vfi->tip_window), x + 16, y + 16); 614 gtk_window_move(GTK_WINDOW(VFICON_INFO(vf, tip_window)), x + 16, y + 16);
615 615
616 if (id != vfi->tip_id) 616 if (id != VFICON_INFO(vf, tip_id))
617 { 617 {
618 GtkWidget *label; 618 GtkWidget *label;
619 619
620 vfi->tip_id = id; 620 VFICON_INFO(vf, tip_id) = id;
621 621
622 if (!vfi->tip_id) 622 if (!VFICON_INFO(vf, tip_id))
623 { 623 {
624 tip_hide(vfi); 624 tip_hide(vf);
625 tip_schedule(vfi); 625 tip_schedule(vf);
626 return; 626 return;
627 } 627 }
628 628
629 label = g_object_get_data(G_OBJECT(vfi->tip_window), "tip_label"); 629 label = g_object_get_data(G_OBJECT(VFICON_INFO(vf, tip_window)), "tip_label");
630 gtk_label_set_text(GTK_LABEL(label), vfi->tip_id->fd->name); 630 gtk_label_set_text(GTK_LABEL(label), VFICON_INFO(vf, tip_id)->fd->name);
631 } 631 }
632 } 632 }
633 else 633 else
634 { 634 {
635 tip_schedule(vfi); 635 tip_schedule(vf);
636 } 636 }
637 } 637 }
638 638
639 /* 639 /*
640 *------------------------------------------------------------------- 640 *-------------------------------------------------------------------
644 644
645 static void vficon_dnd_get(GtkWidget *widget, GdkDragContext *context, 645 static void vficon_dnd_get(GtkWidget *widget, GdkDragContext *context,
646 GtkSelectionData *selection_data, guint info, 646 GtkSelectionData *selection_data, guint info,
647 guint time, gpointer data) 647 guint time, gpointer data)
648 { 648 {
649 ViewFileIcon *vfi = data; 649 ViewFile *vf = data;
650 GList *list = NULL; 650 GList *list = NULL;
651 gchar *uri_text = NULL; 651 gchar *uri_text = NULL;
652 gint total; 652 gint total;
653 653
654 if (!vfi->click_id) return; 654 if (!VFICON_INFO(vf, click_id)) return;
655 655
656 if (vfi->click_id->selected & SELECTION_SELECTED) 656 if (VFICON_INFO(vf, click_id)->selected & SELECTION_SELECTED)
657 { 657 {
658 list = vficon_selection_get_list(vfi); 658 list = vficon_selection_get_list(vf);
659 } 659 }
660 else 660 else
661 { 661 {
662 list = g_list_append(NULL, file_data_ref(vfi->click_id->fd)); 662 list = g_list_append(NULL, file_data_ref(VFICON_INFO(vf, click_id)->fd));
663 } 663 }
664 664
665 if (!list) return; 665 if (!list) return;
666 uri_text = uri_text_from_filelist(list, &total, (info == TARGET_TEXT_PLAIN)); 666 uri_text = uri_text_from_filelist(list, &total, (info == TARGET_TEXT_PLAIN));
667 filelist_free(list); 667 filelist_free(list);
673 g_free(uri_text); 673 g_free(uri_text);
674 } 674 }
675 675
676 static void vficon_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data) 676 static void vficon_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data)
677 { 677 {
678 ViewFileIcon *vfi = data; 678 ViewFile *vf = data;
679 679
680 tip_unschedule(vfi); 680 tip_unschedule(vf);
681 681
682 if (vfi->click_id && vfi->click_id->fd->pixbuf) 682 if (VFICON_INFO(vf, click_id) && VFICON_INFO(vf, click_id)->fd->pixbuf)
683 { 683 {
684 gint items; 684 gint items;
685 685
686 if (vfi->click_id->selected & SELECTION_SELECTED) 686 if (VFICON_INFO(vf, click_id)->selected & SELECTION_SELECTED)
687 items = g_list_length(vfi->selection); 687 items = g_list_length(VFICON_INFO(vf, selection));
688 else 688 else
689 items = 1; 689 items = 1;
690 690
691 dnd_set_drag_icon(widget, context, vfi->click_id->fd->pixbuf, items); 691 dnd_set_drag_icon(widget, context, VFICON_INFO(vf, click_id)->fd->pixbuf, items);
692 } 692 }
693 } 693 }
694 694
695 static void vficon_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data) 695 static void vficon_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data)
696 { 696 {
697 ViewFileIcon *vfi = data; 697 ViewFile *vf = data;
698 698
699 vficon_selection_remove(vfi, vfi->click_id, SELECTION_PRELIGHT, NULL); 699 vficon_selection_remove(vf, VFICON_INFO(vf, click_id), SELECTION_PRELIGHT, NULL);
700 700
701 if (context->action == GDK_ACTION_MOVE) 701 if (context->action == GDK_ACTION_MOVE)
702 { 702 {
703 vficon_refresh(vfi); 703 vficon_refresh(vf);
704 } 704 }
705 705
706 tip_unschedule(vfi); 706 tip_unschedule(vf);
707 } 707 }
708 708
709 void vficon_dnd_init(ViewFileIcon *vfi) 709 void vficon_dnd_init(ViewFile *vf)
710 { 710 {
711 gtk_drag_source_set(vfi->listview, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, 711 gtk_drag_source_set(vf->listview, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
712 dnd_file_drag_types, dnd_file_drag_types_count, 712 dnd_file_drag_types, dnd_file_drag_types_count,
713 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); 713 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
714 g_signal_connect(G_OBJECT(vfi->listview), "drag_data_get", 714 g_signal_connect(G_OBJECT(vf->listview), "drag_data_get",
715 G_CALLBACK(vficon_dnd_get), vfi); 715 G_CALLBACK(vficon_dnd_get), vf);
716 g_signal_connect(G_OBJECT(vfi->listview), "drag_begin", 716 g_signal_connect(G_OBJECT(vf->listview), "drag_begin",
717 G_CALLBACK(vficon_dnd_begin), vfi); 717 G_CALLBACK(vficon_dnd_begin), vf);
718 g_signal_connect(G_OBJECT(vfi->listview), "drag_end", 718 g_signal_connect(G_OBJECT(vf->listview), "drag_end",
719 G_CALLBACK(vficon_dnd_end), vfi); 719 G_CALLBACK(vficon_dnd_end), vf);
720 } 720 }
721 721
722 /* 722 /*
723 *------------------------------------------------------------------- 723 *-------------------------------------------------------------------
724 * cell updates 724 * cell updates
725 *------------------------------------------------------------------- 725 *-------------------------------------------------------------------
726 */ 726 */
727 727
728 static void vficon_selection_set(ViewFileIcon *vfi, IconData *id, SelectionType value, GtkTreeIter *iter) 728 static void vficon_selection_set(ViewFile *vf, IconData *id, SelectionType value, GtkTreeIter *iter)
729 { 729 {
730 GtkTreeModel *store; 730 GtkTreeModel *store;
731 GList *list; 731 GList *list;
732 732
733 if (!id) return; 733 if (!id) return;
734 734
735 735
736 if (id->selected == value) return; 736 if (id->selected == value) return;
737 id->selected = value; 737 id->selected = value;
738 738
739 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); 739 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
740 if (iter) 740 if (iter)
741 { 741 {
742 gtk_tree_model_get(store, iter, FILE_COLUMN_POINTER, &list, -1); 742 gtk_tree_model_get(store, iter, FILE_COLUMN_POINTER, &list, -1);
743 if (list) gtk_list_store_set(GTK_LIST_STORE(store), iter, FILE_COLUMN_POINTER, list, -1); 743 if (list) gtk_list_store_set(GTK_LIST_STORE(store), iter, FILE_COLUMN_POINTER, list, -1);
744 } 744 }
745 else 745 else
746 { 746 {
747 GtkTreeIter row; 747 GtkTreeIter row;
748 748
749 if (vficon_find_iter(vfi, id, &row, NULL)) 749 if (vficon_find_iter(vf, id, &row, NULL))
750 { 750 {
751 gtk_tree_model_get(store, &row, FILE_COLUMN_POINTER, &list, -1); 751 gtk_tree_model_get(store, &row, FILE_COLUMN_POINTER, &list, -1);
752 if (list) gtk_list_store_set(GTK_LIST_STORE(store), &row, FILE_COLUMN_POINTER, list, -1); 752 if (list) gtk_list_store_set(GTK_LIST_STORE(store), &row, FILE_COLUMN_POINTER, list, -1);
753 } 753 }
754 } 754 }
755 } 755 }
756 756
757 static void vficon_selection_add(ViewFileIcon *vfi, IconData *id, SelectionType mask, GtkTreeIter *iter) 757 static void vficon_selection_add(ViewFile *vf, IconData *id, SelectionType mask, GtkTreeIter *iter)
758 { 758 {
759 if (!id) return; 759 if (!id) return;
760 760
761 vficon_selection_set(vfi, id, id->selected | mask, iter); 761 vficon_selection_set(vf, id, id->selected | mask, iter);
762 } 762 }
763 763
764 static void vficon_selection_remove(ViewFileIcon *vfi, IconData *id, SelectionType mask, GtkTreeIter *iter) 764 static void vficon_selection_remove(ViewFile *vf, IconData *id, SelectionType mask, GtkTreeIter *iter)
765 { 765 {
766 if (!id) return; 766 if (!id) return;
767 767
768 vficon_selection_set(vfi, id, id->selected & ~mask, iter); 768 vficon_selection_set(vf, id, id->selected & ~mask, iter);
769 } 769 }
770 770
771 /* 771 /*
772 *------------------------------------------------------------------- 772 *-------------------------------------------------------------------
773 * selections 773 * selections
774 *------------------------------------------------------------------- 774 *-------------------------------------------------------------------
775 */ 775 */
776 776
777 static void vficon_verify_selections(ViewFileIcon *vfi) 777 static void vficon_verify_selections(ViewFile *vf)
778 { 778 {
779 GList *work; 779 GList *work;
780 780
781 work = vfi->selection; 781 work = VFICON_INFO(vf, selection);
782 while (work) 782 while (work)
783 { 783 {
784 IconData *id = work->data; 784 IconData *id = work->data;
785 work = work->next; 785 work = work->next;
786 if (vficon_index_by_id(vfi, id) < 0) 786 if (vficon_index_by_id(vf, id) < 0)
787 { 787 {
788 vfi->selection = g_list_remove(vfi->selection, id); 788 VFICON_INFO(vf, selection) = g_list_remove(VFICON_INFO(vf, selection), id);
789 } 789 }
790 } 790 }
791 } 791 }
792 792
793 void vficon_select_all(ViewFileIcon *vfi) 793 void vficon_select_all(ViewFile *vf)
794 { 794 {
795 GList *work; 795 GList *work;
796 796
797 g_list_free(vfi->selection); 797 g_list_free(VFICON_INFO(vf, selection));
798 vfi->selection = NULL; 798 VFICON_INFO(vf, selection) = NULL;
799 799
800 work = vfi->list; 800 work = vf->list;
801 while (work) 801 while (work)
802 { 802 {
803 IconData *id = work->data; 803 IconData *id = work->data;
804 vfi->selection = g_list_append(vfi->selection, id); 804 VFICON_INFO(vf, selection) = g_list_append(VFICON_INFO(vf, selection), id);
805 vficon_selection_add(vfi, work->data, SELECTION_SELECTED, NULL); 805 vficon_selection_add(vf, work->data, SELECTION_SELECTED, NULL);
806 work = work->next; 806 work = work->next;
807 } 807 }
808 808
809 vficon_send_update(vfi); 809 vficon_send_update(vf);
810 } 810 }
811 811
812 void vficon_select_none(ViewFileIcon *vfi) 812 void vficon_select_none(ViewFile *vf)
813 { 813 {
814 GList *work; 814 GList *work;
815 815
816 work = vfi->selection; 816 work = VFICON_INFO(vf, selection);
817 while (work) 817 while (work)
818 { 818 {
819 vficon_selection_remove(vfi, work->data, SELECTION_SELECTED, NULL); 819 vficon_selection_remove(vf, work->data, SELECTION_SELECTED, NULL);
820 work = work->next; 820 work = work->next;
821 } 821 }
822 822
823 g_list_free(vfi->selection); 823 g_list_free(VFICON_INFO(vf, selection));
824 vfi->selection = NULL; 824 VFICON_INFO(vf, selection) = NULL;
825 825
826 vficon_send_update(vfi); 826 vficon_send_update(vf);
827 } 827 }
828 828
829 static void vficon_select(ViewFileIcon *vfi, IconData *id) 829 static void vficon_select(ViewFile *vf, IconData *id)
830 { 830 {
831 vfi->prev_selection = id; 831 VFICON_INFO(vf, prev_selection) = id;
832 832
833 if (!id || id->selected & SELECTION_SELECTED) return; 833 if (!id || id->selected & SELECTION_SELECTED) return;
834 834
835 vfi->selection = g_list_append(vfi->selection, id); 835 VFICON_INFO(vf, selection) = g_list_append(VFICON_INFO(vf, selection), id);
836 vficon_selection_add(vfi, id, SELECTION_SELECTED, NULL); 836 vficon_selection_add(vf, id, SELECTION_SELECTED, NULL);
837 837
838 vficon_send_update(vfi); 838 vficon_send_update(vf);
839 } 839 }
840 840
841 static void vficon_unselect(ViewFileIcon *vfi, IconData *id) 841 static void vficon_unselect(ViewFile *vf, IconData *id)
842 { 842 {
843 vfi->prev_selection = id; 843 VFICON_INFO(vf, prev_selection) = id;
844 844
845 if (!id || !(id->selected & SELECTION_SELECTED) ) return; 845 if (!id || !(id->selected & SELECTION_SELECTED) ) return;
846 846
847 vfi->selection = g_list_remove(vfi->selection, id); 847 VFICON_INFO(vf, selection) = g_list_remove(VFICON_INFO(vf, selection), id);
848 vficon_selection_remove(vfi, id, SELECTION_SELECTED, NULL); 848 vficon_selection_remove(vf, id, SELECTION_SELECTED, NULL);
849 849
850 vficon_send_update(vfi); 850 vficon_send_update(vf);
851 } 851 }
852 852
853 static void vficon_select_util(ViewFileIcon *vfi, IconData *id, gint select) 853 static void vficon_select_util(ViewFile *vf, IconData *id, gint select)
854 { 854 {
855 if (select) 855 if (select)
856 { 856 {
857 vficon_select(vfi, id); 857 vficon_select(vf, id);
858 } 858 }
859 else 859 else
860 { 860 {
861 vficon_unselect(vfi, id); 861 vficon_unselect(vf, id);
862 } 862 }
863 } 863 }
864 864
865 static void vficon_select_region_util(ViewFileIcon *vfi, IconData *start, IconData *end, gint select) 865 static void vficon_select_region_util(ViewFile *vf, IconData *start, IconData *end, gint select)
866 { 866 {
867 gint row1, col1; 867 gint row1, col1;
868 gint row2, col2; 868 gint row2, col2;
869 gint t; 869 gint t;
870 gint i, j; 870 gint i, j;
871 871
872 if (!vficon_find_position(vfi, start, &row1, &col1) || 872 if (!vficon_find_position(vf, start, &row1, &col1) ||
873 !vficon_find_position(vfi, end, &row2, &col2) ) return; 873 !vficon_find_position(vf, end, &row2, &col2) ) return;
874 874
875 vfi->prev_selection = end; 875 VFICON_INFO(vf, prev_selection) = end;
876 876
877 if (!options->collections.rectangular_selection) 877 if (!options->collections.rectangular_selection)
878 { 878 {
879 GList *work; 879 GList *work;
880 IconData *id; 880 IconData *id;
881 881
882 if (g_list_index(vfi->list, start) > g_list_index(vfi->list, end)) 882 if (g_list_index(vf->list, start) > g_list_index(vf->list, end))
883 { 883 {
884 id = start; 884 id = start;
885 start = end; 885 start = end;
886 end = id; 886 end = id;
887 } 887 }
888 888
889 work = g_list_find(vfi->list, start); 889 work = g_list_find(vf->list, start);
890 while (work) 890 while (work)
891 { 891 {
892 id = work->data; 892 id = work->data;
893 vficon_select_util(vfi, id, select); 893 vficon_select_util(vf, id, select);
894 894
895 if (work->data != end) 895 if (work->data != end)
896 work = work->next; 896 work = work->next;
897 else 897 else
898 work = NULL; 898 work = NULL;
917 917
918 for (i = row1; i <= row2; i++) 918 for (i = row1; i <= row2; i++)
919 { 919 {
920 for (j = col1; j <= col2; j++) 920 for (j = col1; j <= col2; j++)
921 { 921 {
922 IconData *id = vficon_find_data(vfi, i, j, NULL); 922 IconData *id = vficon_find_data(vf, i, j, NULL);
923 if (id) vficon_select_util(vfi, id, select); 923 if (id) vficon_select_util(vf, id, select);
924 } 924 }
925 } 925 }
926 } 926 }
927 927
928 gint vficon_index_is_selected(ViewFileIcon *vfi, gint row) 928 gint vficon_index_is_selected(ViewFile *vf, gint row)
929 { 929 {
930 IconData *id = g_list_nth_data(vfi->list, row); 930 IconData *id = g_list_nth_data(vf->list, row);
931 931
932 if (!id) return FALSE; 932 if (!id) return FALSE;
933 933
934 return (id->selected & SELECTION_SELECTED); 934 return (id->selected & SELECTION_SELECTED);
935 } 935 }
936 936
937 gint vficon_selection_count(ViewFileIcon *vfi, gint64 *bytes) 937 gint vficon_selection_count(ViewFile *vf, gint64 *bytes)
938 { 938 {
939 if (bytes) 939 if (bytes)
940 { 940 {
941 gint64 b = 0; 941 gint64 b = 0;
942 GList *work; 942 GList *work;
943 943
944 work = vfi->selection; 944 work = VFICON_INFO(vf, selection);
945 while (work) 945 while (work)
946 { 946 {
947 IconData *id = work->data; 947 IconData *id = work->data;
948 FileData *fd = id->fd; 948 FileData *fd = id->fd;
949 g_assert(fd->magick == 0x12345678); 949 g_assert(fd->magick == 0x12345678);
953 } 953 }
954 954
955 *bytes = b; 955 *bytes = b;
956 } 956 }
957 957
958 return g_list_length(vfi->selection); 958 return g_list_length(VFICON_INFO(vf, selection));
959 } 959 }
960 960
961 GList *vficon_selection_get_list(ViewFileIcon *vfi) 961 GList *vficon_selection_get_list(ViewFile *vf)
962 { 962 {
963 GList *list = NULL; 963 GList *list = NULL;
964 GList *work; 964 GList *work;
965 965
966 work = vfi->selection; 966 work = VFICON_INFO(vf, selection);
967 while (work) 967 while (work)
968 { 968 {
969 IconData *id = work->data; 969 IconData *id = work->data;
970 FileData *fd = id->fd; 970 FileData *fd = id->fd;
971 g_assert(fd->magick == 0x12345678); 971 g_assert(fd->magick == 0x12345678);
978 list = g_list_reverse(list); 978 list = g_list_reverse(list);
979 979
980 return list; 980 return list;
981 } 981 }
982 982
983 GList *vficon_selection_get_list_by_index(ViewFileIcon *vfi) 983 GList *vficon_selection_get_list_by_index(ViewFile *vf)
984 { 984 {
985 GList *list = NULL; 985 GList *list = NULL;
986 GList *work; 986 GList *work;
987 987
988 work = vfi->selection; 988 work = VFICON_INFO(vf, selection);
989 while (work) 989 while (work)
990 { 990 {
991 list = g_list_prepend(list, GINT_TO_POINTER(g_list_index(vfi->list, work->data))); 991 list = g_list_prepend(list, GINT_TO_POINTER(g_list_index(vf->list, work->data)));
992 work = work->next; 992 work = work->next;
993 } 993 }
994 994
995 return g_list_reverse(list); 995 return g_list_reverse(list);
996 } 996 }
997 997
998 static void vficon_select_by_id(ViewFileIcon *vfi, IconData *id) 998 static void vficon_select_by_id(ViewFile *vf, IconData *id)
999 { 999 {
1000 if (!id) return; 1000 if (!id) return;
1001 1001
1002 if (!(id->selected & SELECTION_SELECTED)) 1002 if (!(id->selected & SELECTION_SELECTED))
1003 { 1003 {
1004 vficon_select_none(vfi); 1004 vficon_select_none(vf);
1005 vficon_select(vfi, id); 1005 vficon_select(vf, id);
1006 } 1006 }
1007 1007
1008 vficon_set_focus(vfi, id); 1008 vficon_set_focus(vf, id);
1009 } 1009 }
1010 1010
1011 1011
1012 void vficon_select_by_path(ViewFileIcon *vfi, const gchar *path) 1012 void vficon_select_by_path(ViewFile *vf, const gchar *path)
1013 { 1013 {
1014 IconData *id = NULL; 1014 IconData *id = NULL;
1015 GList *work; 1015 GList *work;
1016 1016
1017 if (!path) return; 1017 if (!path) return;
1018 1018
1019 work = vfi->list; 1019 work = vf->list;
1020 while (work && !id) 1020 while (work && !id)
1021 { 1021 {
1022 IconData *chk = work->data; 1022 IconData *chk = work->data;
1023 work = work->next; 1023 work = work->next;
1024 if (strcmp(chk->fd->path, path) == 0) id = chk; 1024 if (strcmp(chk->fd->path, path) == 0) id = chk;
1025 } 1025 }
1026 vficon_select_by_id(vfi, id); 1026 vficon_select_by_id(vf, id);
1027 } 1027 }
1028 1028
1029 void vficon_select_by_fd(ViewFileIcon *vfi, FileData *fd) 1029 void vficon_select_by_fd(ViewFile *vf, FileData *fd)
1030 { 1030 {
1031 IconData *id = NULL; 1031 IconData *id = NULL;
1032 GList *work; 1032 GList *work;
1033 1033
1034 if (!fd) return; 1034 if (!fd) return;
1035 work = vfi->list; 1035 work = vf->list;
1036 while (work && !id) 1036 while (work && !id)
1037 { 1037 {
1038 IconData *chk = work->data; 1038 IconData *chk = work->data;
1039 work = work->next; 1039 work = work->next;
1040 if (chk->fd == fd) id = chk; 1040 if (chk->fd == fd) id = chk;
1041 } 1041 }
1042 vficon_select_by_id(vfi, id); 1042 vficon_select_by_id(vf, id);
1043 } 1043 }
1044 1044
1045 void vficon_mark_to_selection(ViewFileIcon *vfi, gint mark, MarkToSelectionMode mode) 1045 void vficon_mark_to_selection(ViewFile *vf, gint mark, MarkToSelectionMode mode)
1046 { 1046 {
1047 GList *work; 1047 GList *work;
1048 1048
1049 work = vfi->list; 1049 work = vf->list;
1050 while (work) 1050 while (work)
1051 { 1051 {
1052 IconData *id = work->data; 1052 IconData *id = work->data;
1053 FileData *fd = id->fd; 1053 FileData *fd = id->fd;
1054 gboolean mark_val, selected; 1054 gboolean mark_val, selected;
1068 break; 1068 break;
1069 case MTS_MODE_MINUS: selected = !mark_val & selected; 1069 case MTS_MODE_MINUS: selected = !mark_val & selected;
1070 break; 1070 break;
1071 } 1071 }
1072 1072
1073 vficon_select_util(vfi, id, selected); 1073 vficon_select_util(vf, id, selected);
1074 1074
1075 work = work->next; 1075 work = work->next;
1076 } 1076 }
1077 } 1077 }
1078 1078
1079 void vficon_selection_to_mark(ViewFileIcon *vfi, gint mark, SelectionToMarkMode mode) 1079 void vficon_selection_to_mark(ViewFile *vf, gint mark, SelectionToMarkMode mode)
1080 { 1080 {
1081 GList *slist; 1081 GList *slist;
1082 GList *work; 1082 GList *work;
1083 1083
1084 g_assert(mark >= 0 && mark < FILEDATA_MARKS_SIZE); 1084 g_assert(mark >= 0 && mark < FILEDATA_MARKS_SIZE);
1085 1085
1086 slist = vficon_selection_get_list(vfi); 1086 slist = vficon_selection_get_list(vf);
1087 work = slist; 1087 work = slist;
1088 while (work) 1088 while (work)
1089 { 1089 {
1090 FileData *fd = work->data; 1090 FileData *fd = work->data;
1091 1091
1109 *------------------------------------------------------------------- 1109 *-------------------------------------------------------------------
1110 * focus 1110 * focus
1111 *------------------------------------------------------------------- 1111 *-------------------------------------------------------------------
1112 */ 1112 */
1113 1113
1114 static void vficon_move_focus(ViewFileIcon *vfi, gint row, gint col, gint relative) 1114 static void vficon_move_focus(ViewFile *vf, gint row, gint col, gint relative)
1115 { 1115 {
1116 gint new_row; 1116 gint new_row;
1117 gint new_col; 1117 gint new_col;
1118 1118
1119 if (relative) 1119 if (relative)
1120 { 1120 {
1121 new_row = vfi->focus_row; 1121 new_row = VFICON_INFO(vf, focus_row);
1122 new_col = vfi->focus_column; 1122 new_col = VFICON_INFO(vf, focus_column);
1123 1123
1124 new_row += row; 1124 new_row += row;
1125 if (new_row < 0) new_row = 0; 1125 if (new_row < 0) new_row = 0;
1126 if (new_row >= vfi->rows) new_row = vfi->rows - 1; 1126 if (new_row >= VFICON_INFO(vf, rows)) new_row = VFICON_INFO(vf, rows) - 1;
1127 1127
1128 while (col != 0) 1128 while (col != 0)
1129 { 1129 {
1130 if (col < 0) 1130 if (col < 0)
1131 { 1131 {
1141 if (new_col < 0) 1141 if (new_col < 0)
1142 { 1142 {
1143 if (new_row > 0) 1143 if (new_row > 0)
1144 { 1144 {
1145 new_row--; 1145 new_row--;
1146 new_col = vfi->columns - 1; 1146 new_col = VFICON_INFO(vf, columns) - 1;
1147 } 1147 }
1148 else 1148 else
1149 { 1149 {
1150 new_col = 0; 1150 new_col = 0;
1151 } 1151 }
1152 } 1152 }
1153 if (new_col >= vfi->columns) 1153 if (new_col >= VFICON_INFO(vf, columns))
1154 { 1154 {
1155 if (new_row < vfi->rows - 1) 1155 if (new_row < VFICON_INFO(vf, rows) - 1)
1156 { 1156 {
1157 new_row++; 1157 new_row++;
1158 new_col = 0; 1158 new_col = 0;
1159 } 1159 }
1160 else 1160 else
1161 { 1161 {
1162 new_col = vfi->columns - 1; 1162 new_col = VFICON_INFO(vf, columns) - 1;
1163 } 1163 }
1164 } 1164 }
1165 } 1165 }
1166 } 1166 }
1167 else 1167 else
1168 { 1168 {
1169 new_row = row; 1169 new_row = row;
1170 new_col = col; 1170 new_col = col;
1171 1171
1172 if (new_row >= vfi->rows) 1172 if (new_row >= VFICON_INFO(vf, rows))
1173 { 1173 {
1174 if (vfi->rows > 0) 1174 if (VFICON_INFO(vf, rows) > 0)
1175 new_row = vfi->rows - 1; 1175 new_row = VFICON_INFO(vf, rows) - 1;
1176 else 1176 else
1177 new_row = 0; 1177 new_row = 0;
1178 new_col = vfi->columns - 1; 1178 new_col = VFICON_INFO(vf, columns) - 1;
1179 } 1179 }
1180 if (new_col >= vfi->columns) new_col = vfi->columns - 1; 1180 if (new_col >= VFICON_INFO(vf, columns)) new_col = VFICON_INFO(vf, columns) - 1;
1181 } 1181 }
1182 1182
1183 if (new_row == vfi->rows - 1) 1183 if (new_row == VFICON_INFO(vf, rows) - 1)
1184 { 1184 {
1185 gint l; 1185 gint l;
1186 1186
1187 /* if we moved beyond the last image, go to the last image */ 1187 /* if we moved beyond the last image, go to the last image */
1188 1188
1189 l = g_list_length(vfi->list); 1189 l = g_list_length(vf->list);
1190 if (vfi->rows > 1) l -= (vfi->rows - 1) * vfi->columns; 1190 if (VFICON_INFO(vf, rows) > 1) l -= (VFICON_INFO(vf, rows) - 1) * VFICON_INFO(vf, columns);
1191 if (new_col >= l) new_col = l - 1; 1191 if (new_col >= l) new_col = l - 1;
1192 } 1192 }
1193 1193
1194 vficon_set_focus(vfi, vficon_find_data(vfi, new_row, new_col, NULL)); 1194 vficon_set_focus(vf, vficon_find_data(vf, new_row, new_col, NULL));
1195 } 1195 }
1196 1196
1197 static void vficon_set_focus(ViewFileIcon *vfi, IconData *id) 1197 static void vficon_set_focus(ViewFile *vf, IconData *id)
1198 { 1198 {
1199 GtkTreeIter iter; 1199 GtkTreeIter iter;
1200 gint row, col; 1200 gint row, col;
1201 1201
1202 if (g_list_find(vfi->list, vfi->focus_id)) 1202 if (g_list_find(vf->list, VFICON_INFO(vf, focus_id)))
1203 { 1203 {
1204 if (id == vfi->focus_id) 1204 if (id == VFICON_INFO(vf, focus_id))
1205 { 1205 {
1206 /* ensure focus row col are correct */ 1206 /* ensure focus row col are correct */
1207 vficon_find_position(vfi, vfi->focus_id, &vfi->focus_row, &vfi->focus_column); 1207 vficon_find_position(vf, VFICON_INFO(vf, focus_id), &VFICON_INFO(vf, focus_row), &VFICON_INFO(vf, focus_column));
1208 return; 1208 return;
1209 } 1209 }
1210 vficon_selection_remove(vfi, vfi->focus_id, SELECTION_FOCUS, NULL); 1210 vficon_selection_remove(vf, VFICON_INFO(vf, focus_id), SELECTION_FOCUS, NULL);
1211 } 1211 }
1212 1212
1213 if (!vficon_find_position(vfi, id, &row, &col)) 1213 if (!vficon_find_position(vf, id, &row, &col))
1214 { 1214 {
1215 vfi->focus_id = NULL; 1215 VFICON_INFO(vf, focus_id) = NULL;
1216 vfi->focus_row = -1; 1216 VFICON_INFO(vf, focus_row) = -1;
1217 vfi->focus_column = -1; 1217 VFICON_INFO(vf, focus_column) = -1;
1218 return; 1218 return;
1219 } 1219 }
1220 1220
1221 vfi->focus_id = id; 1221 VFICON_INFO(vf, focus_id) = id;
1222 vfi->focus_row = row; 1222 VFICON_INFO(vf, focus_row) = row;
1223 vfi->focus_column = col; 1223 VFICON_INFO(vf, focus_column) = col;
1224 vficon_selection_add(vfi, vfi->focus_id, SELECTION_FOCUS, NULL); 1224 vficon_selection_add(vf, VFICON_INFO(vf, focus_id), SELECTION_FOCUS, NULL);
1225 1225
1226 if (vficon_find_iter(vfi, vfi->focus_id, &iter, NULL)) 1226 if (vficon_find_iter(vf, VFICON_INFO(vf, focus_id), &iter, NULL))
1227 { 1227 {
1228 GtkTreePath *tpath; 1228 GtkTreePath *tpath;
1229 GtkTreeViewColumn *column; 1229 GtkTreeViewColumn *column;
1230 GtkTreeModel *store; 1230 GtkTreeModel *store;
1231 1231
1232 tree_view_row_make_visible(GTK_TREE_VIEW(vfi->listview), &iter, FALSE); 1232 tree_view_row_make_visible(GTK_TREE_VIEW(vf->listview), &iter, FALSE);
1233 1233
1234 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); 1234 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
1235 tpath = gtk_tree_model_get_path(store, &iter); 1235 tpath = gtk_tree_model_get_path(store, &iter);
1236 /* focus is set to an extra column with 0 width to hide focus, we draw it ourself */ 1236 /* focus is set to an extra column with 0 width to hide focus, we draw it ourself */
1237 column = gtk_tree_view_get_column(GTK_TREE_VIEW(vfi->listview), VFICON_MAX_COLUMNS); 1237 column = gtk_tree_view_get_column(GTK_TREE_VIEW(vf->listview), VFICON_MAX_COLUMNS);
1238 gtk_tree_view_set_cursor(GTK_TREE_VIEW(vfi->listview), tpath, column, FALSE); 1238 gtk_tree_view_set_cursor(GTK_TREE_VIEW(vf->listview), tpath, column, FALSE);
1239 gtk_tree_path_free(tpath); 1239 gtk_tree_path_free(tpath);
1240 } 1240 }
1241 } 1241 }
1242 1242
1243 static void vficon_update_focus(ViewFileIcon *vfi) 1243 static void vficon_update_focus(ViewFile *vf)
1244 { 1244 {
1245 gint new_row = 0; 1245 gint new_row = 0;
1246 gint new_col = 0; 1246 gint new_col = 0;
1247 1247
1248 if (vfi->focus_id && vficon_find_position(vfi, vfi->focus_id, &new_row, &new_col)) 1248 if (VFICON_INFO(vf, focus_id) && vficon_find_position(vf, VFICON_INFO(vf, focus_id), &new_row, &new_col))
1249 { 1249 {
1250 /* first find the old focus, if it exists and is valid */ 1250 /* first find the old focus, if it exists and is valid */
1251 } 1251 }
1252 else 1252 else
1253 { 1253 {
1254 /* (try to) stay where we were */ 1254 /* (try to) stay where we were */
1255 new_row = vfi->focus_row; 1255 new_row = VFICON_INFO(vf, focus_row);
1256 new_col = vfi->focus_column; 1256 new_col = VFICON_INFO(vf, focus_column);
1257 } 1257 }
1258 1258
1259 vficon_move_focus(vfi, new_row, new_col, FALSE); 1259 vficon_move_focus(vf, new_row, new_col, FALSE);
1260 } 1260 }
1261 1261
1262 /* used to figure the page up/down distances */ 1262 /* used to figure the page up/down distances */
1263 static gint page_height(ViewFileIcon *vfi) 1263 static gint page_height(ViewFile *vf)
1264 { 1264 {
1265 GtkAdjustment *adj; 1265 GtkAdjustment *adj;
1266 gint page_size; 1266 gint page_size;
1267 gint row_height; 1267 gint row_height;
1268 gint ret; 1268 gint ret;
1269 1269
1270 adj = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(vfi->listview)); 1270 adj = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(vf->listview));
1271 page_size = (gint)adj->page_increment; 1271 page_size = (gint)adj->page_increment;
1272 1272
1273 row_height = options->thumbnails.max_height + THUMB_BORDER_PADDING * 2; 1273 row_height = options->thumbnails.max_height + THUMB_BORDER_PADDING * 2;
1274 if (vfi->show_text) row_height += options->thumbnails.max_height / 3; 1274 if (VFICON_INFO(vf, show_text)) row_height += options->thumbnails.max_height / 3;
1275 1275
1276 ret = page_size / row_height; 1276 ret = page_size / row_height;
1277 if (ret < 1) ret = 1; 1277 if (ret < 1) ret = 1;
1278 1278
1279 return ret; 1279 return ret;
1285 *------------------------------------------------------------------- 1285 *-------------------------------------------------------------------
1286 */ 1286 */
1287 1287
1288 static void vfi_menu_position_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data) 1288 static void vfi_menu_position_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data)
1289 { 1289 {
1290 ViewFileIcon *vfi = data; 1290 ViewFile *vf = data;
1291 GtkTreeModel *store; 1291 GtkTreeModel *store;
1292 GtkTreeIter iter; 1292 GtkTreeIter iter;
1293 gint column; 1293 gint column;
1294 GtkTreePath *tpath; 1294 GtkTreePath *tpath;
1295 gint cw, ch; 1295 gint cw, ch;
1296 1296
1297 if (!vficon_find_iter(vfi, vfi->click_id, &iter, &column)) return; 1297 if (!vficon_find_iter(vf, VFICON_INFO(vf, click_id), &iter, &column)) return;
1298 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); 1298 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
1299 tpath = gtk_tree_model_get_path(store, &iter); 1299 tpath = gtk_tree_model_get_path(store, &iter);
1300 tree_view_get_cell_clamped(GTK_TREE_VIEW(vfi->listview), tpath, column, FALSE, x, y, &cw, &ch); 1300 tree_view_get_cell_clamped(GTK_TREE_VIEW(vf->listview), tpath, column, FALSE, x, y, &cw, &ch);
1301 gtk_tree_path_free(tpath); 1301 gtk_tree_path_free(tpath);
1302 *y += ch; 1302 *y += ch;
1303 popup_menu_position_clamp(menu, x, y, 0); 1303 popup_menu_position_clamp(menu, x, y, 0);
1304 } 1304 }
1305 1305
1306 gint vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) 1306 gint vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
1307 { 1307 {
1308 ViewFileIcon *vfi = data; 1308 ViewFile *vf = data;
1309 gint focus_row = 0; 1309 gint focus_row = 0;
1310 gint focus_col = 0; 1310 gint focus_col = 0;
1311 IconData *id; 1311 IconData *id;
1312 gint stop_signal; 1312 gint stop_signal;
1313 1313
1325 break; 1325 break;
1326 case GDK_Down: case GDK_KP_Down: 1326 case GDK_Down: case GDK_KP_Down:
1327 focus_row = 1; 1327 focus_row = 1;
1328 break; 1328 break;
1329 case GDK_Page_Up: case GDK_KP_Page_Up: 1329 case GDK_Page_Up: case GDK_KP_Page_Up:
1330 focus_row = -page_height(vfi); 1330 focus_row = -page_height(vf);
1331 break; 1331 break;
1332 case GDK_Page_Down: case GDK_KP_Page_Down: 1332 case GDK_Page_Down: case GDK_KP_Page_Down:
1333 focus_row = page_height(vfi); 1333 focus_row = page_height(vf);
1334 break; 1334 break;
1335 case GDK_Home: case GDK_KP_Home: 1335 case GDK_Home: case GDK_KP_Home:
1336 focus_row = -vfi->focus_row; 1336 focus_row = -VFICON_INFO(vf, focus_row);
1337 focus_col = -vfi->focus_column; 1337 focus_col = -VFICON_INFO(vf, focus_column);
1338 break; 1338 break;
1339 case GDK_End: case GDK_KP_End: 1339 case GDK_End: case GDK_KP_End:
1340 focus_row = vfi->rows - 1 - vfi->focus_row; 1340 focus_row = VFICON_INFO(vf, rows) - 1 - VFICON_INFO(vf, focus_row);
1341 focus_col = vfi->columns - 1 - vfi->focus_column; 1341 focus_col = VFICON_INFO(vf, columns) - 1 - VFICON_INFO(vf, focus_column);
1342 break; 1342 break;
1343 case GDK_space: 1343 case GDK_space:
1344 id = vficon_find_data(vfi, vfi->focus_row, vfi->focus_column, NULL); 1344 id = vficon_find_data(vf, VFICON_INFO(vf, focus_row), VFICON_INFO(vf, focus_column), NULL);
1345 if (id) 1345 if (id)
1346 { 1346 {
1347 vfi->click_id = id; 1347 VFICON_INFO(vf, click_id) = id;
1348 if (event->state & GDK_CONTROL_MASK) 1348 if (event->state & GDK_CONTROL_MASK)
1349 { 1349 {
1350 gint selected; 1350 gint selected;
1351 1351
1352 selected = id->selected & SELECTION_SELECTED; 1352 selected = id->selected & SELECTION_SELECTED;
1353 if (selected) 1353 if (selected)
1354 { 1354 {
1355 vficon_unselect(vfi, id); 1355 vficon_unselect(vf, id);
1356 } 1356 }
1357 else 1357 else
1358 { 1358 {
1359 vficon_select(vfi, id); 1359 vficon_select(vf, id);
1360 vficon_send_layout_select(vfi, id); 1360 vficon_send_layout_select(vf, id);
1361 } 1361 }
1362 } 1362 }
1363 else 1363 else
1364 { 1364 {
1365 vficon_select_none(vfi); 1365 vficon_select_none(vf);
1366 vficon_select(vfi, id); 1366 vficon_select(vf, id);
1367 vficon_send_layout_select(vfi, id); 1367 vficon_send_layout_select(vf, id);
1368 } 1368 }
1369 } 1369 }
1370 break; 1370 break;
1371 case GDK_Menu: 1371 case GDK_Menu:
1372 id = vficon_find_data(vfi, vfi->focus_row, vfi->focus_column, NULL); 1372 id = vficon_find_data(vf, VFICON_INFO(vf, focus_row), VFICON_INFO(vf, focus_column), NULL);
1373 vfi->click_id = id; 1373 VFICON_INFO(vf, click_id) = id;
1374 1374
1375 vficon_selection_add(vfi, vfi->click_id, SELECTION_PRELIGHT, NULL); 1375 vficon_selection_add(vf, VFICON_INFO(vf, click_id), SELECTION_PRELIGHT, NULL);
1376 tip_unschedule(vfi); 1376 tip_unschedule(vf);
1377 1377
1378 vfi->popup = vficon_pop_menu(vfi, (id != NULL)); 1378 vf->popup = vficon_pop_menu(vf, (id != NULL));
1379 gtk_menu_popup(GTK_MENU(vfi->popup), NULL, NULL, vfi_menu_position_cb, vfi, 0, GDK_CURRENT_TIME); 1379 gtk_menu_popup(GTK_MENU(vf->popup), NULL, NULL, vfi_menu_position_cb, vf, 0, GDK_CURRENT_TIME);
1380 break; 1380 break;
1381 default: 1381 default:
1382 stop_signal = FALSE; 1382 stop_signal = FALSE;
1383 break; 1383 break;
1384 } 1384 }
1386 if (focus_row != 0 || focus_col != 0) 1386 if (focus_row != 0 || focus_col != 0)
1387 { 1387 {
1388 IconData *new_id; 1388 IconData *new_id;
1389 IconData *old_id; 1389 IconData *old_id;
1390 1390
1391 old_id = vficon_find_data(vfi, vfi->focus_row, vfi->focus_column, NULL); 1391 old_id = vficon_find_data(vf, VFICON_INFO(vf, focus_row), VFICON_INFO(vf, focus_column), NULL);
1392 vficon_move_focus(vfi, focus_row, focus_col, TRUE); 1392 vficon_move_focus(vf, focus_row, focus_col, TRUE);
1393 new_id = vficon_find_data(vfi, vfi->focus_row, vfi->focus_column, NULL); 1393 new_id = vficon_find_data(vf, VFICON_INFO(vf, focus_row), VFICON_INFO(vf, focus_column), NULL);
1394 1394
1395 if (new_id != old_id) 1395 if (new_id != old_id)
1396 { 1396 {
1397 if (event->state & GDK_SHIFT_MASK) 1397 if (event->state & GDK_SHIFT_MASK)
1398 { 1398 {
1399 if (!options->collections.rectangular_selection) 1399 if (!options->collections.rectangular_selection)
1400 { 1400 {
1401 vficon_select_region_util(vfi, old_id, new_id, FALSE); 1401 vficon_select_region_util(vf, old_id, new_id, FALSE);
1402 } 1402 }
1403 else 1403 else
1404 { 1404 {
1405 vficon_select_region_util(vfi, vfi->click_id, old_id, FALSE); 1405 vficon_select_region_util(vf, VFICON_INFO(vf, click_id), old_id, FALSE);
1406 } 1406 }
1407 vficon_select_region_util(vfi, vfi->click_id, new_id, TRUE); 1407 vficon_select_region_util(vf, VFICON_INFO(vf, click_id), new_id, TRUE);
1408 vficon_send_layout_select(vfi, new_id); 1408 vficon_send_layout_select(vf, new_id);
1409 } 1409 }
1410 else if (event->state & GDK_CONTROL_MASK) 1410 else if (event->state & GDK_CONTROL_MASK)
1411 { 1411 {
1412 vfi->click_id = new_id; 1412 VFICON_INFO(vf, click_id) = new_id;
1413 } 1413 }
1414 else 1414 else
1415 { 1415 {
1416 vfi->click_id = new_id; 1416 VFICON_INFO(vf, click_id) = new_id;
1417 vficon_select_none(vfi); 1417 vficon_select_none(vf);
1418 vficon_select(vfi, new_id); 1418 vficon_select(vf, new_id);
1419 vficon_send_layout_select(vfi, new_id); 1419 vficon_send_layout_select(vf, new_id);
1420 } 1420 }
1421 } 1421 }
1422 } 1422 }
1423 1423
1424 if (stop_signal) 1424 if (stop_signal)
1425 { 1425 {
1426 #if 0 1426 #if 0
1427 g_signal_stop_emission_by_name(GTK_OBJECT(widget), "key_press_event"); 1427 g_signal_stop_emission_by_name(GTK_OBJECT(widget), "key_press_event");
1428 #endif 1428 #endif
1429 tip_unschedule(vfi); 1429 tip_unschedule(vf);
1430 } 1430 }
1431 1431
1432 return stop_signal; 1432 return stop_signal;
1433 } 1433 }
1434 1434
1438 *------------------------------------------------------------------- 1438 *-------------------------------------------------------------------
1439 */ 1439 */
1440 1440
1441 static gint vficon_motion_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) 1441 static gint vficon_motion_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
1442 { 1442 {
1443 ViewFileIcon *vfi = data; 1443 ViewFile *vf = data;
1444 IconData *id; 1444 IconData *id;
1445 1445
1446 id = vficon_find_data_by_coord(vfi, (gint)bevent->x, (gint)bevent->y, NULL); 1446 id = vficon_find_data_by_coord(vf, (gint)bevent->x, (gint)bevent->y, NULL);
1447 tip_update(vfi, id); 1447 tip_update(vf, id);
1448 1448
1449 return FALSE; 1449 return FALSE;
1450 } 1450 }
1451 1451
1452 gint vficon_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) 1452 gint vficon_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
1453 { 1453 {
1454 ViewFileIcon *vfi = data; 1454 ViewFile *vf = data;
1455 GtkTreeIter iter; 1455 GtkTreeIter iter;
1456 IconData *id; 1456 IconData *id;
1457 1457
1458 tip_unschedule(vfi); 1458 tip_unschedule(vf);
1459 1459
1460 id = vficon_find_data_by_coord(vfi, (gint)bevent->x, (gint)bevent->y, &iter); 1460 id = vficon_find_data_by_coord(vf, (gint)bevent->x, (gint)bevent->y, &iter);
1461 1461
1462 vfi->click_id = id; 1462 VFICON_INFO(vf, click_id) = id;
1463 vficon_selection_add(vfi, vfi->click_id, SELECTION_PRELIGHT, &iter); 1463 vficon_selection_add(vf, VFICON_INFO(vf, click_id), SELECTION_PRELIGHT, &iter);
1464 1464
1465 switch (bevent->button) 1465 switch (bevent->button)
1466 { 1466 {
1467 case MOUSE_BUTTON_LEFT: 1467 case MOUSE_BUTTON_LEFT:
1468 if (!GTK_WIDGET_HAS_FOCUS(vfi->listview)) 1468 if (!GTK_WIDGET_HAS_FOCUS(vf->listview))
1469 { 1469 {
1470 gtk_widget_grab_focus(vfi->listview); 1470 gtk_widget_grab_focus(vf->listview);
1471 } 1471 }
1472 #if 0 1472 #if 0
1473 if (bevent->type == GDK_2BUTTON_PRESS && 1473 if (bevent->type == GDK_2BUTTON_PRESS &&
1474 vfi->layout) 1474 vf->layout)
1475 { 1475 {
1476 vficon_selection_remove(vfi, vfi->click_id, SELECTION_PRELIGHT, &iter); 1476 vficon_selection_remove(vf, VFICON_INFO(vf, click_id), SELECTION_PRELIGHT, &iter);
1477 layout_image_full_screen_start(vfi->layout); 1477 layout_image_full_screen_start(vf->layout);
1478 } 1478 }
1479 #endif 1479 #endif
1480 break; 1480 break;
1481 case MOUSE_BUTTON_RIGHT: 1481 case MOUSE_BUTTON_RIGHT:
1482 vfi->popup = vficon_pop_menu(vfi, (id != NULL)); 1482 vf->popup = vficon_pop_menu(vf, (id != NULL));
1483 gtk_menu_popup(GTK_MENU(vfi->popup), NULL, NULL, NULL, NULL, bevent->button, bevent->time); 1483 gtk_menu_popup(GTK_MENU(vf->popup), NULL, NULL, NULL, NULL, bevent->button, bevent->time);
1484 break; 1484 break;
1485 default: 1485 default:
1486 break; 1486 break;
1487 } 1487 }
1488 1488
1489 return TRUE; 1489 return TRUE;
1490 } 1490 }
1491 1491
1492 gint vficon_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) 1492 gint vficon_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
1493 { 1493 {
1494 ViewFileIcon *vfi = data; 1494 ViewFile *vf = data;
1495 GtkTreeIter iter; 1495 GtkTreeIter iter;
1496 IconData *id = NULL; 1496 IconData *id = NULL;
1497 gint was_selected = FALSE; 1497 gint was_selected = FALSE;
1498 1498
1499 tip_schedule(vfi); 1499 tip_schedule(vf);
1500 1500
1501 if ((gint)bevent->x != 0 || (gint) bevent->y != 0) 1501 if ((gint)bevent->x != 0 || (gint) bevent->y != 0)
1502 { 1502 {
1503 id = vficon_find_data_by_coord(vfi, (gint)bevent->x, (gint)bevent->y, &iter); 1503 id = vficon_find_data_by_coord(vf, (gint)bevent->x, (gint)bevent->y, &iter);
1504 } 1504 }
1505 1505
1506 if (vfi->click_id) 1506 if (VFICON_INFO(vf, click_id))
1507 { 1507 {
1508 vficon_selection_remove(vfi, vfi->click_id, SELECTION_PRELIGHT, NULL); 1508 vficon_selection_remove(vf, VFICON_INFO(vf, click_id), SELECTION_PRELIGHT, NULL);
1509 } 1509 }
1510 1510
1511 if (id) was_selected = (id->selected & SELECTION_SELECTED); 1511 if (id) was_selected = (id->selected & SELECTION_SELECTED);
1512 1512
1513 if (bevent->button == MOUSE_BUTTON_LEFT && 1513 if (bevent->button == MOUSE_BUTTON_LEFT &&
1514 id && vfi->click_id == id) 1514 id && VFICON_INFO(vf, click_id) == id)
1515 { 1515 {
1516 vficon_set_focus(vfi, id); 1516 vficon_set_focus(vf, id);
1517 1517
1518 if (bevent->state & GDK_CONTROL_MASK) 1518 if (bevent->state & GDK_CONTROL_MASK)
1519 { 1519 {
1520 gint select; 1520 gint select;
1521 1521
1522 select = !(id->selected & SELECTION_SELECTED); 1522 select = !(id->selected & SELECTION_SELECTED);
1523 if ((bevent->state & GDK_SHIFT_MASK) && vfi->prev_selection) 1523 if ((bevent->state & GDK_SHIFT_MASK) && VFICON_INFO(vf, prev_selection))
1524 { 1524 {
1525 vficon_select_region_util(vfi, vfi->prev_selection, id, select); 1525 vficon_select_region_util(vf, VFICON_INFO(vf, prev_selection), id, select);
1526 } 1526 }
1527 else 1527 else
1528 { 1528 {
1529 vficon_select_util(vfi, id, select); 1529 vficon_select_util(vf, id, select);
1530 } 1530 }
1531 } 1531 }
1532 else 1532 else
1533 { 1533 {
1534 vficon_select_none(vfi); 1534 vficon_select_none(vf);
1535 1535
1536 if ((bevent->state & GDK_SHIFT_MASK) && 1536 if ((bevent->state & GDK_SHIFT_MASK) &&
1537 vfi->prev_selection) 1537 VFICON_INFO(vf, prev_selection))
1538 { 1538 {
1539 vficon_select_region_util(vfi, vfi->prev_selection, id, TRUE); 1539 vficon_select_region_util(vf, VFICON_INFO(vf, prev_selection), id, TRUE);
1540 } 1540 }
1541 else 1541 else
1542 { 1542 {
1543 vficon_select_util(vfi, id, TRUE); 1543 vficon_select_util(vf, id, TRUE);
1544 was_selected = FALSE; 1544 was_selected = FALSE;
1545 } 1545 }
1546 } 1546 }
1547 } 1547 }
1548 else if (bevent->button == MOUSE_BUTTON_MIDDLE && 1548 else if (bevent->button == MOUSE_BUTTON_MIDDLE &&
1549 id && vfi->click_id == id) 1549 id && VFICON_INFO(vf, click_id) == id)
1550 { 1550 {
1551 vficon_select_util(vfi, id, !(id->selected & SELECTION_SELECTED)); 1551 vficon_select_util(vf, id, !(id->selected & SELECTION_SELECTED));
1552 } 1552 }
1553 1553
1554 if (id && !was_selected && 1554 if (id && !was_selected &&
1555 (id->selected & SELECTION_SELECTED)) 1555 (id->selected & SELECTION_SELECTED))
1556 { 1556 {
1557 vficon_send_layout_select(vfi, id); 1557 vficon_send_layout_select(vf, id);
1558 } 1558 }
1559 1559
1560 return TRUE; 1560 return TRUE;
1561 } 1561 }
1562 1562
1563 static gint vficon_leave_cb(GtkWidget *widget, GdkEventCrossing *event, gpointer data) 1563 static gint vficon_leave_cb(GtkWidget *widget, GdkEventCrossing *event, gpointer data)
1564 { 1564 {
1565 ViewFileIcon *vfi = data; 1565 ViewFile *vf = data;
1566 1566
1567 tip_unschedule(vfi); 1567 tip_unschedule(vf);
1568 return FALSE; 1568 return FALSE;
1569 } 1569 }
1570 1570
1571 /* 1571 /*
1572 *------------------------------------------------------------------- 1572 *-------------------------------------------------------------------
1582 g_list_free(list); 1582 g_list_free(list);
1583 1583
1584 return FALSE; 1584 return FALSE;
1585 } 1585 }
1586 1586
1587 static void vficon_clear_store(ViewFileIcon *vfi) 1587 static void vficon_clear_store(ViewFile *vf)
1588 { 1588 {
1589 GtkTreeModel *store; 1589 GtkTreeModel *store;
1590 1590
1591 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); 1591 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
1592 gtk_tree_model_foreach(store, vficon_destroy_node_cb, NULL); 1592 gtk_tree_model_foreach(store, vficon_destroy_node_cb, NULL);
1593 1593
1594 gtk_list_store_clear(GTK_LIST_STORE(store)); 1594 gtk_list_store_clear(GTK_LIST_STORE(store));
1595 } 1595 }
1596 1596
1597 static void vficon_set_thumb(ViewFileIcon *vfi, FileData *fd, GdkPixbuf *pb) 1597 static void vficon_set_thumb(ViewFile *vf, FileData *fd, GdkPixbuf *pb)
1598 { 1598 {
1599 GtkTreeModel *store; 1599 GtkTreeModel *store;
1600 GtkTreeIter iter; 1600 GtkTreeIter iter;
1601 GList *list; 1601 GList *list;
1602 1602
1603 if (!vficon_find_iter(vfi, vficon_icon_data(vfi, fd), &iter, NULL)) return; 1603 if (!vficon_find_iter(vf, vficon_icon_data(vf, fd), &iter, NULL)) return;
1604 1604
1605 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); 1605 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
1606 1606
1607 if (pb) g_object_ref(pb); 1607 if (pb) g_object_ref(pb);
1608 if (fd->pixbuf) g_object_unref(fd->pixbuf); 1608 if (fd->pixbuf) g_object_unref(fd->pixbuf);
1609 fd->pixbuf = pb; 1609 fd->pixbuf = pb;
1610 1610
1611 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); 1611 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1);
1612 gtk_list_store_set(GTK_LIST_STORE(store), &iter, FILE_COLUMN_POINTER, list, -1); 1612 gtk_list_store_set(GTK_LIST_STORE(store), &iter, FILE_COLUMN_POINTER, list, -1);
1613 } 1613 }
1614 1614
1615 static GList *vficon_add_row(ViewFileIcon *vfi, GtkTreeIter *iter) 1615 static GList *vficon_add_row(ViewFile *vf, GtkTreeIter *iter)
1616 { 1616 {
1617 GtkListStore *store; 1617 GtkListStore *store;
1618 GList *list = NULL; 1618 GList *list = NULL;
1619 gint i; 1619 gint i;
1620 1620
1621 for (i = 0; i < vfi->columns; i++) list = g_list_prepend(list, NULL); 1621 for (i = 0; i < VFICON_INFO(vf, columns); i++) list = g_list_prepend(list, NULL);
1622 1622
1623 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview))); 1623 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)));
1624 gtk_list_store_append(store, iter); 1624 gtk_list_store_append(store, iter);
1625 gtk_list_store_set(store, iter, FILE_COLUMN_POINTER, list, -1); 1625 gtk_list_store_set(store, iter, FILE_COLUMN_POINTER, list, -1);
1626 1626
1627 return list; 1627 return list;
1628 } 1628 }
1629 1629
1630 static void vficon_populate(ViewFileIcon *vfi, gint resize, gint keep_position) 1630 static void vficon_populate(ViewFile *vf, gint resize, gint keep_position)
1631 { 1631 {
1632 GtkTreeModel *store; 1632 GtkTreeModel *store;
1633 GtkTreePath *tpath; 1633 GtkTreePath *tpath;
1634 gint row; 1634 gint row;
1635 GList *work; 1635 GList *work;
1636 IconData *visible_id = NULL; 1636 IconData *visible_id = NULL;
1637 1637
1638 vficon_verify_selections(vfi); 1638 vficon_verify_selections(vf);
1639 1639
1640 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); 1640 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
1641 1641
1642 if (keep_position && GTK_WIDGET_REALIZED(vfi->listview) && 1642 if (keep_position && GTK_WIDGET_REALIZED(vf->listview) &&
1643 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vfi->listview), 0, 0, &tpath, NULL, NULL, NULL)) 1643 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), 0, 0, &tpath, NULL, NULL, NULL))
1644 { 1644 {
1645 GtkTreeIter iter; 1645 GtkTreeIter iter;
1646 GList *list; 1646 GList *list;
1647 1647
1648 gtk_tree_model_get_iter(store, &iter, tpath); 1648 gtk_tree_model_get_iter(store, &iter, tpath);
1650 1650
1651 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); 1651 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1);
1652 if (list) visible_id = list->data; 1652 if (list) visible_id = list->data;
1653 } 1653 }
1654 1654
1655 vficon_clear_store(vfi); 1655 vficon_clear_store(vf);
1656 1656
1657 if (resize) 1657 if (resize)
1658 { 1658 {
1659 gint i; 1659 gint i;
1660 gint thumb_width; 1660 gint thumb_width;
1661 1661
1662 thumb_width = vficon_get_icon_width(vfi); 1662 thumb_width = vficon_get_icon_width(vf);
1663 1663
1664 for (i = 0; i < VFICON_MAX_COLUMNS; i++) 1664 for (i = 0; i < VFICON_MAX_COLUMNS; i++)
1665 { 1665 {
1666 GtkTreeViewColumn *column; 1666 GtkTreeViewColumn *column;
1667 GtkCellRenderer *cell; 1667 GtkCellRenderer *cell;
1668 GList *list; 1668 GList *list;
1669 1669
1670 column = gtk_tree_view_get_column(GTK_TREE_VIEW(vfi->listview), i); 1670 column = gtk_tree_view_get_column(GTK_TREE_VIEW(vf->listview), i);
1671 gtk_tree_view_column_set_visible(column, (i < vfi->columns)); 1671 gtk_tree_view_column_set_visible(column, (i < VFICON_INFO(vf, columns)));
1672 gtk_tree_view_column_set_fixed_width(column, thumb_width + (THUMB_BORDER_PADDING * 6)); 1672 gtk_tree_view_column_set_fixed_width(column, thumb_width + (THUMB_BORDER_PADDING * 6));
1673 1673
1674 list = gtk_tree_view_column_get_cell_renderers(column); 1674 list = gtk_tree_view_column_get_cell_renderers(column);
1675 cell = (list) ? list->data : NULL; 1675 cell = (list) ? list->data : NULL;
1676 g_list_free(list); 1676 g_list_free(list);
1677 1677
1678 if (cell && GQV_IS_CELL_RENDERER_ICON(cell)) 1678 if (cell && GQV_IS_CELL_RENDERER_ICON(cell))
1679 { 1679 {
1680 g_object_set(G_OBJECT(cell), "fixed_width", thumb_width, 1680 g_object_set(G_OBJECT(cell), "fixed_width", thumb_width,
1681 "fixed_height", options->thumbnails.max_height, 1681 "fixed_height", options->thumbnails.max_height,
1682 "show_text", vfi->show_text, NULL); 1682 "show_text", VFICON_INFO(vf, show_text), NULL);
1683 } 1683 }
1684 } 1684 }
1685 if (GTK_WIDGET_REALIZED(vfi->listview)) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(vfi->listview)); 1685 if (GTK_WIDGET_REALIZED(vf->listview)) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(vf->listview));
1686 } 1686 }
1687 1687
1688 row = -1; 1688 row = -1;
1689 work = vfi->list; 1689 work = vf->list;
1690 while (work) 1690 while (work)
1691 { 1691 {
1692 GList *list; 1692 GList *list;
1693 GtkTreeIter iter; 1693 GtkTreeIter iter;
1694 1694
1695 row++; 1695 row++;
1696 1696
1697 list = vficon_add_row(vfi, &iter); 1697 list = vficon_add_row(vf, &iter);
1698 while (work && list) 1698 while (work && list)
1699 { 1699 {
1700 IconData *id; 1700 IconData *id;
1701 1701
1702 id = work->data; 1702 id = work->data;
1707 work = work->next; 1707 work = work->next;
1708 } 1708 }
1709 } 1709 }
1710 1710
1711 if (visible_id && 1711 if (visible_id &&
1712 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vfi->listview), 0, 0, &tpath, NULL, NULL, NULL)) 1712 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), 0, 0, &tpath, NULL, NULL, NULL))
1713 { 1713 {
1714 GtkTreeIter iter; 1714 GtkTreeIter iter;
1715 GList *list; 1715 GList *list;
1716 1716
1717 gtk_tree_model_get_iter(store, &iter, tpath); 1717 gtk_tree_model_get_iter(store, &iter, tpath);
1718 gtk_tree_path_free(tpath); 1718 gtk_tree_path_free(tpath);
1719 1719
1720 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); 1720 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1);
1721 if (g_list_find(list, visible_id) == NULL && 1721 if (g_list_find(list, visible_id) == NULL &&
1722 vficon_find_iter(vfi, visible_id, &iter, NULL)) 1722 vficon_find_iter(vf, visible_id, &iter, NULL))
1723 { 1723 {
1724 tree_view_row_make_visible(GTK_TREE_VIEW(vfi->listview), &iter, FALSE); 1724 tree_view_row_make_visible(GTK_TREE_VIEW(vf->listview), &iter, FALSE);
1725 } 1725 }
1726 } 1726 }
1727 1727
1728 vfi->rows = row + 1; 1728 VFICON_INFO(vf, rows) = row + 1;
1729 1729
1730 vficon_send_update(vfi); 1730 vficon_send_update(vf);
1731 vficon_thumb_update(vfi); 1731 vficon_thumb_update(vf);
1732 } 1732 }
1733 1733
1734 static void vficon_populate_at_new_size(ViewFileIcon *vfi, gint w, gint h, gint force) 1734 static void vficon_populate_at_new_size(ViewFile *vf, gint w, gint h, gint force)
1735 { 1735 {
1736 gint new_cols; 1736 gint new_cols;
1737 gint thumb_width; 1737 gint thumb_width;
1738 1738
1739 thumb_width = vficon_get_icon_width(vfi); 1739 thumb_width = vficon_get_icon_width(vf);
1740 1740
1741 new_cols = w / (thumb_width + (THUMB_BORDER_PADDING * 6)); 1741 new_cols = w / (thumb_width + (THUMB_BORDER_PADDING * 6));
1742 if (new_cols < 1) new_cols = 1; 1742 if (new_cols < 1) new_cols = 1;
1743 1743
1744 if (!force && new_cols == vfi->columns) return; 1744 if (!force && new_cols == VFICON_INFO(vf, columns)) return;
1745 1745
1746 vfi->columns = new_cols; 1746 VFICON_INFO(vf, columns) = new_cols;
1747 1747
1748 vficon_populate(vfi, TRUE, TRUE); 1748 vficon_populate(vf, TRUE, TRUE);
1749 1749
1750 DEBUG_1("col tab pop cols=%d rows=%d", vfi->columns, vfi->rows); 1750 DEBUG_1("col tab pop cols=%d rows=%d", VFICON_INFO(vf, columns), VFICON_INFO(vf, rows));
1751 } 1751 }
1752 1752
1753 static void vficon_sync(ViewFileIcon *vfi) 1753 static void vficon_sync(ViewFile *vf)
1754 { 1754 {
1755 GtkTreeModel *store; 1755 GtkTreeModel *store;
1756 GtkTreeIter iter; 1756 GtkTreeIter iter;
1757 GList *work; 1757 GList *work;
1758 gint r, c; 1758 gint r, c;
1759 1759
1760 if (vfi->rows == 0) return; 1760 if (VFICON_INFO(vf, rows) == 0) return;
1761 1761
1762 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); 1762 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
1763 1763
1764 r = -1; 1764 r = -1;
1765 c = 0; 1765 c = 0;
1766 1766
1767 work = vfi->list; 1767 work = vf->list;
1768 while (work) 1768 while (work)
1769 { 1769 {
1770 GList *list; 1770 GList *list;
1771 r++; 1771 r++;
1772 c = 0; 1772 c = 0;
1775 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); 1775 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1);
1776 gtk_list_store_set(GTK_LIST_STORE(store), &iter, FILE_COLUMN_POINTER, list, -1); 1776 gtk_list_store_set(GTK_LIST_STORE(store), &iter, FILE_COLUMN_POINTER, list, -1);
1777 } 1777 }
1778 else 1778 else
1779 { 1779 {
1780 list = vficon_add_row(vfi, &iter); 1780 list = vficon_add_row(vf, &iter);
1781 } 1781 }
1782 1782
1783 while (list) 1783 while (list)
1784 { 1784 {
1785 IconData *id; 1785 IconData *id;
1810 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); 1810 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1);
1811 gtk_list_store_remove(GTK_LIST_STORE(store), &iter); 1811 gtk_list_store_remove(GTK_LIST_STORE(store), &iter);
1812 g_list_free(list); 1812 g_list_free(list);
1813 } 1813 }
1814 1814
1815 vfi->rows = r; 1815 VFICON_INFO(vf, rows) = r;
1816 1816
1817 vficon_update_focus(vfi); 1817 vficon_update_focus(vf);
1818 } 1818 }
1819 1819
1820 static gint vficon_sync_idle_cb(gpointer data) 1820 static gint vficon_sync_idle_cb(gpointer data)
1821 { 1821 {
1822 ViewFileIcon *vfi = data; 1822 ViewFile *vf = data;
1823 1823
1824 if (vfi->sync_idle_id == -1) return FALSE; 1824 if (VFICON_INFO(vf, sync_idle_id) == -1) return FALSE;
1825 vfi->sync_idle_id = -1; 1825 VFICON_INFO(vf, sync_idle_id) = -1;
1826 1826
1827 vficon_sync(vfi); 1827 vficon_sync(vf);
1828 return FALSE; 1828 return FALSE;
1829 } 1829 }
1830 1830
1831 static void vficon_sync_idle(ViewFileIcon *vfi) 1831 static void vficon_sync_idle(ViewFile *vf)
1832 { 1832 {
1833 if (vfi->sync_idle_id == -1) 1833 if (VFICON_INFO(vf, sync_idle_id) == -1)
1834 { 1834 {
1835 /* high priority, the view needs to be resynced before a redraw 1835 /* high priority, the view needs to be resynced before a redraw
1836 * may contain invalid pointers at this time 1836 * may contain invalid pointers at this time
1837 */ 1837 */
1838 vfi->sync_idle_id = g_idle_add_full(G_PRIORITY_HIGH, vficon_sync_idle_cb, vfi, NULL); 1838 VFICON_INFO(vf, sync_idle_id) = g_idle_add_full(G_PRIORITY_HIGH, vficon_sync_idle_cb, vf, NULL);
1839 } 1839 }
1840 } 1840 }
1841 1841
1842 static void vficon_sized_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer data) 1842 static void vficon_sized_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer data)
1843 { 1843 {
1844 ViewFileIcon *vfi = data; 1844 ViewFile *vf = data;
1845 1845
1846 vficon_populate_at_new_size(vfi, allocation->width, allocation->height, FALSE); 1846 vficon_populate_at_new_size(vf, allocation->width, allocation->height, FALSE);
1847 } 1847 }
1848 1848
1849 /* 1849 /*
1850 *----------------------------------------------------------------------------- 1850 *-----------------------------------------------------------------------------
1851 * misc 1851 * misc
1852 *----------------------------------------------------------------------------- 1852 *-----------------------------------------------------------------------------
1853 */ 1853 */
1854 1854
1855 void vficon_sort_set(ViewFileIcon *vfi, SortType type, gint ascend) 1855 void vficon_sort_set(ViewFile *vf, SortType type, gint ascend)
1856 { 1856 {
1857 if (vfi->sort_method == type && vfi->sort_ascend == ascend) return; 1857 if (vf->sort_method == type && vf->sort_ascend == ascend) return;
1858 1858
1859 vfi->sort_method = type; 1859 vf->sort_method = type;
1860 vfi->sort_ascend = ascend; 1860 vf->sort_ascend = ascend;
1861 1861
1862 if (!vfi->list) return; 1862 if (!vf->list) return;
1863 1863
1864 vfi->list = iconlist_sort(vfi->list, vfi->sort_method, vfi->sort_ascend); 1864 vf->list = iconlist_sort(vf->list, vf->sort_method, vf->sort_ascend);
1865 vficon_sync(vfi); 1865 vficon_sync(vf);
1866 } 1866 }
1867 1867
1868 /* 1868 /*
1869 *----------------------------------------------------------------------------- 1869 *-----------------------------------------------------------------------------
1870 * thumb updates 1870 * thumb updates
1871 *----------------------------------------------------------------------------- 1871 *-----------------------------------------------------------------------------
1872 */ 1872 */
1873 1873
1874 static gint vficon_thumb_next(ViewFileIcon *vfi); 1874 static gint vficon_thumb_next(ViewFile *vf);
1875 1875
1876 static void vficon_thumb_status(ViewFileIcon *vfi, gdouble val, const gchar *text) 1876 static void vficon_thumb_status(ViewFile *vf, gdouble val, const gchar *text)
1877 { 1877 {
1878 if (vfi->func_thumb_status) 1878 if (vf->func_thumb_status)
1879 { 1879 {
1880 vfi->func_thumb_status(vfi, val, text, vfi->data_thumb_status); 1880 vf->func_thumb_status(vf, val, text, vf->data_thumb_status);
1881 } 1881 }
1882 } 1882 }
1883 1883
1884 static void vficon_thumb_cleanup(ViewFileIcon *vfi) 1884 static void vficon_thumb_cleanup(ViewFile *vf)
1885 { 1885 {
1886 vficon_thumb_status(vfi, 0.0, NULL); 1886 vficon_thumb_status(vf, 0.0, NULL);
1887 1887
1888 vfi->thumbs_count = 0; 1888 vf->thumbs_count = 0;
1889 vfi->thumbs_running = FALSE; 1889 vf->thumbs_running = FALSE;
1890 1890
1891 thumb_loader_free(vfi->thumbs_loader); 1891 thumb_loader_free(vf->thumbs_loader);
1892 vfi->thumbs_loader = NULL; 1892 vf->thumbs_loader = NULL;
1893 1893
1894 vfi->thumbs_filedata = NULL; 1894 vf->thumbs_filedata = NULL;
1895 } 1895 }
1896 1896
1897 static void vficon_thumb_stop(ViewFileIcon *vfi) 1897 static void vficon_thumb_stop(ViewFile *vf)
1898 { 1898 {
1899 if (vfi->thumbs_running) vficon_thumb_cleanup(vfi); 1899 if (vf->thumbs_running) vficon_thumb_cleanup(vf);
1900 } 1900 }
1901 1901
1902 static void vficon_thumb_do(ViewFileIcon *vfi, ThumbLoader *tl, FileData *fd) 1902 static void vficon_thumb_do(ViewFile *vf, ThumbLoader *tl, FileData *fd)
1903 { 1903 {
1904 GdkPixbuf *pixbuf; 1904 GdkPixbuf *pixbuf;
1905 1905
1906 if (!fd) return; 1906 if (!fd) return;
1907 1907
1908 pixbuf = thumb_loader_get_pixbuf(tl, TRUE); 1908 pixbuf = thumb_loader_get_pixbuf(tl, TRUE);
1909 vficon_set_thumb(vfi, fd, pixbuf); 1909 vficon_set_thumb(vf, fd, pixbuf);
1910 g_object_unref(pixbuf); 1910 g_object_unref(pixbuf);
1911 1911
1912 vficon_thumb_status(vfi, (gdouble)(vfi->thumbs_count) / g_list_length(vfi->list), _("Loading thumbs...")); 1912 vficon_thumb_status(vf, (gdouble)(vf->thumbs_count) / g_list_length(vf->list), _("Loading thumbs..."));
1913 } 1913 }
1914 1914
1915 static void vficon_thumb_error_cb(ThumbLoader *tl, gpointer data) 1915 static void vficon_thumb_error_cb(ThumbLoader *tl, gpointer data)
1916 { 1916 {
1917 ViewFileIcon *vfi = data; 1917 ViewFile *vf = data;
1918 1918
1919 if (vfi->thumbs_filedata && vfi->thumbs_loader == tl) 1919 if (vf->thumbs_filedata && vf->thumbs_loader == tl)
1920 { 1920 {
1921 vficon_thumb_do(vfi, tl, vfi->thumbs_filedata); 1921 vficon_thumb_do(vf, tl, vf->thumbs_filedata);
1922 } 1922 }
1923 1923
1924 while (vficon_thumb_next(vfi)); 1924 while (vficon_thumb_next(vf));
1925 } 1925 }
1926 1926
1927 static void vficon_thumb_done_cb(ThumbLoader *tl, gpointer data) 1927 static void vficon_thumb_done_cb(ThumbLoader *tl, gpointer data)
1928 { 1928 {
1929 ViewFileIcon *vfi = data; 1929 ViewFile *vf = data;
1930 1930
1931 if (vfi->thumbs_filedata && vfi->thumbs_loader == tl) 1931 if (vf->thumbs_filedata && vf->thumbs_loader == tl)
1932 { 1932 {
1933 vficon_thumb_do(vfi, tl, vfi->thumbs_filedata); 1933 vficon_thumb_do(vf, tl, vf->thumbs_filedata);
1934 } 1934 }
1935 1935
1936 while (vficon_thumb_next(vfi)); 1936 while (vficon_thumb_next(vf));
1937 } 1937 }
1938 1938
1939 static gint vficon_thumb_next(ViewFileIcon *vfi) 1939 static gint vficon_thumb_next(ViewFile *vf)
1940 { 1940 {
1941 GtkTreePath *tpath; 1941 GtkTreePath *tpath;
1942 FileData *fd = NULL; 1942 FileData *fd = NULL;
1943 1943
1944 if (!GTK_WIDGET_REALIZED(vfi->listview)) 1944 if (!GTK_WIDGET_REALIZED(vf->listview))
1945 { 1945 {
1946 vficon_thumb_status(vfi, 0.0, NULL); 1946 vficon_thumb_status(vf, 0.0, NULL);
1947 return FALSE; 1947 return FALSE;
1948 } 1948 }
1949 1949
1950 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vfi->listview), 0, 0, &tpath, NULL, NULL, NULL)) 1950 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), 0, 0, &tpath, NULL, NULL, NULL))
1951 { 1951 {
1952 GtkTreeModel *store; 1952 GtkTreeModel *store;
1953 GtkTreeIter iter; 1953 GtkTreeIter iter;
1954 gint valid = TRUE; 1954 gint valid = TRUE;
1955 1955
1956 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); 1956 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
1957 gtk_tree_model_get_iter(store, &iter, tpath); 1957 gtk_tree_model_get_iter(store, &iter, tpath);
1958 gtk_tree_path_free(tpath); 1958 gtk_tree_path_free(tpath);
1959 1959
1960 while (!fd && valid && tree_view_row_get_visibility(GTK_TREE_VIEW(vfi->listview), &iter, FALSE) == 0) 1960 while (!fd && valid && tree_view_row_get_visibility(GTK_TREE_VIEW(vf->listview), &iter, FALSE) == 0)
1961 { 1961 {
1962 GList *list; 1962 GList *list;
1963 1963
1964 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); 1964 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1);
1965 1965
1976 1976
1977 /* then find first undone */ 1977 /* then find first undone */
1978 1978
1979 if (!fd) 1979 if (!fd)
1980 { 1980 {
1981 GList *work = vfi->list; 1981 GList *work = vf->list;
1982 while (work && !fd) 1982 while (work && !fd)
1983 { 1983 {
1984 IconData *id = work->data; 1984 IconData *id = work->data;
1985 FileData *fd_p = id->fd; 1985 FileData *fd_p = id->fd;
1986 work = work->next; 1986 work = work->next;
1990 } 1990 }
1991 1991
1992 if (!fd) 1992 if (!fd)
1993 { 1993 {
1994 /* done */ 1994 /* done */
1995 vficon_thumb_cleanup(vfi); 1995 vficon_thumb_cleanup(vf);
1996 return FALSE; 1996 return FALSE;
1997 } 1997 }
1998 1998
1999 vfi->thumbs_count++; 1999 vf->thumbs_count++;
2000 2000
2001 vfi->thumbs_filedata = fd; 2001 vf->thumbs_filedata = fd;
2002 2002
2003 thumb_loader_free(vfi->thumbs_loader); 2003 thumb_loader_free(vf->thumbs_loader);
2004 2004
2005 vfi->thumbs_loader = thumb_loader_new(options->thumbnails.max_width, options->thumbnails.max_height); 2005 vf->thumbs_loader = thumb_loader_new(options->thumbnails.max_width, options->thumbnails.max_height);
2006 thumb_loader_set_callbacks(vfi->thumbs_loader, 2006 thumb_loader_set_callbacks(vf->thumbs_loader,
2007 vficon_thumb_done_cb, 2007 vficon_thumb_done_cb,
2008 vficon_thumb_error_cb, 2008 vficon_thumb_error_cb,
2009 NULL, 2009 NULL,
2010 vfi); 2010 vf);
2011 2011
2012 if (!thumb_loader_start(vfi->thumbs_loader, fd->path)) 2012 if (!thumb_loader_start(vf->thumbs_loader, fd->path))
2013 { 2013 {
2014 /* set icon to unknown, continue */ 2014 /* set icon to unknown, continue */
2015 DEBUG_1("thumb loader start failed %s", vfi->thumbs_loader->path); 2015 DEBUG_1("thumb loader start failed %s", vf->thumbs_loader->path);
2016 vficon_thumb_do(vfi, vfi->thumbs_loader, fd); 2016 vficon_thumb_do(vf, vf->thumbs_loader, fd);
2017 2017
2018 return TRUE; 2018 return TRUE;
2019 } 2019 }
2020 2020
2021 return FALSE; 2021 return FALSE;
2022 } 2022 }
2023 2023
2024 static void vficon_thumb_update(ViewFileIcon *vfi) 2024 static void vficon_thumb_update(ViewFile *vf)
2025 { 2025 {
2026 vficon_thumb_stop(vfi); 2026 vficon_thumb_stop(vf);
2027 2027
2028 vficon_thumb_status(vfi, 0.0, _("Loading thumbs...")); 2028 vficon_thumb_status(vf, 0.0, _("Loading thumbs..."));
2029 vfi->thumbs_running = TRUE; 2029 vf->thumbs_running = TRUE;
2030 2030
2031 while (vficon_thumb_next(vfi)); 2031 while (vficon_thumb_next(vf));
2032 } 2032 }
2033 2033
2034 /* 2034 /*
2035 *----------------------------------------------------------------------------- 2035 *-----------------------------------------------------------------------------
2036 * row stuff 2036 * row stuff
2037 *----------------------------------------------------------------------------- 2037 *-----------------------------------------------------------------------------
2038 */ 2038 */
2039 2039
2040 FileData *vficon_index_get_data(ViewFileIcon *vfi, gint row) 2040 FileData *vficon_index_get_data(ViewFile *vf, gint row)
2041 { 2041 {
2042 IconData *id; 2042 IconData *id;
2043 2043
2044 id = g_list_nth_data(vfi->list, row); 2044 id = g_list_nth_data(vf->list, row);
2045 return id ? id->fd : NULL; 2045 return id ? id->fd : NULL;
2046 } 2046 }
2047 2047
2048 gchar *vficon_index_get_path(ViewFileIcon *vfi, gint row) 2048 gchar *vficon_index_get_path(ViewFile *vf, gint row)
2049 { 2049 {
2050 FileData *fd; 2050 FileData *fd;
2051 IconData *id; 2051 IconData *id;
2052 2052
2053 id = g_list_nth_data(vfi->list, row); 2053 id = g_list_nth_data(vf->list, row);
2054 fd = id ? id->fd : NULL; 2054 fd = id ? id->fd : NULL;
2055 2055
2056 return (fd ? fd->path : NULL); 2056 return (fd ? fd->path : NULL);
2057 } 2057 }
2058 2058
2059 gint vficon_index_by_path(ViewFileIcon *vfi, const gchar *path) 2059 gint vficon_index_by_path(ViewFile *vf, const gchar *path)
2060 { 2060 {
2061 gint p = 0; 2061 gint p = 0;
2062 GList *work; 2062 GList *work;
2063 2063
2064 if (!path) return -1; 2064 if (!path) return -1;
2065 2065
2066 work = vfi->list; 2066 work = vf->list;
2067 while (work) 2067 while (work)
2068 { 2068 {
2069 IconData *id = work->data; 2069 IconData *id = work->data;
2070 FileData *fd = id->fd; 2070 FileData *fd = id->fd;
2071 if (strcmp(path, fd->path) == 0) return p; 2071 if (strcmp(path, fd->path) == 0) return p;
2074 } 2074 }
2075 2075
2076 return -1; 2076 return -1;
2077 } 2077 }
2078 2078
2079 gint vficon_index_by_fd(ViewFileIcon *vfi, FileData *in_fd) 2079 gint vficon_index_by_fd(ViewFile *vf, FileData *in_fd)
2080 { 2080 {
2081 gint p = 0; 2081 gint p = 0;
2082 GList *work; 2082 GList *work;
2083 2083
2084 if (!in_fd) return -1; 2084 if (!in_fd) return -1;
2085 2085
2086 work = vfi->list; 2086 work = vf->list;
2087 while (work) 2087 while (work)
2088 { 2088 {
2089 IconData *id = work->data; 2089 IconData *id = work->data;
2090 FileData *fd = id->fd; 2090 FileData *fd = id->fd;
2091 if (fd == in_fd) return p; 2091 if (fd == in_fd) return p;
2094 } 2094 }
2095 2095
2096 return -1; 2096 return -1;
2097 } 2097 }
2098 2098
2099 static gint vficon_index_by_id(ViewFileIcon *vfi, IconData *in_id) 2099 static gint vficon_index_by_id(ViewFile *vf, IconData *in_id)
2100 { 2100 {
2101 gint p = 0; 2101 gint p = 0;
2102 GList *work; 2102 GList *work;
2103 2103
2104 if (!in_id) return -1; 2104 if (!in_id) return -1;
2105 2105
2106 work = vfi->list; 2106 work = vf->list;
2107 while (work) 2107 while (work)
2108 { 2108 {
2109 IconData *id = work->data; 2109 IconData *id = work->data;
2110 if (id == in_id) return p; 2110 if (id == in_id) return p;
2111 work = work->next; 2111 work = work->next;
2113 } 2113 }
2114 2114
2115 return -1; 2115 return -1;
2116 } 2116 }
2117 2117
2118 gint vficon_count(ViewFileIcon *vfi, gint64 *bytes) 2118 gint vficon_count(ViewFile *vf, gint64 *bytes)
2119 { 2119 {
2120 if (bytes) 2120 if (bytes)
2121 { 2121 {
2122 gint64 b = 0; 2122 gint64 b = 0;
2123 GList *work; 2123 GList *work;
2124 2124
2125 work = vfi->list; 2125 work = vf->list;
2126 while (work) 2126 while (work)
2127 { 2127 {
2128 2128
2129 IconData *id = work->data; 2129 IconData *id = work->data;
2130 FileData *fd = id->fd; 2130 FileData *fd = id->fd;
2133 } 2133 }
2134 2134
2135 *bytes = b; 2135 *bytes = b;
2136 } 2136 }
2137 2137
2138 return g_list_length(vfi->list); 2138 return g_list_length(vf->list);
2139 } 2139 }
2140 2140
2141 GList *vficon_get_list(ViewFileIcon *vfi) 2141 GList *vficon_get_list(ViewFile *vf)
2142 { 2142 {
2143 GList *list = NULL; 2143 GList *list = NULL;
2144 GList *work; 2144 GList *work;
2145 2145
2146 work = vfi->list; 2146 work = vf->list;
2147 while (work) 2147 while (work)
2148 { 2148 {
2149 IconData *id = work->data; 2149 IconData *id = work->data;
2150 FileData *fd = id->fd; 2150 FileData *fd = id->fd;
2151 work = work->next; 2151 work = work->next;
2160 *----------------------------------------------------------------------------- 2160 *-----------------------------------------------------------------------------
2161 * 2161 *
2162 *----------------------------------------------------------------------------- 2162 *-----------------------------------------------------------------------------
2163 */ 2163 */
2164 2164
2165 static gint vficon_refresh_real(ViewFileIcon *vfi, gint keep_position) 2165 static gint vficon_refresh_real(ViewFile *vf, gint keep_position)
2166 { 2166 {
2167 gint ret = TRUE; 2167 gint ret = TRUE;
2168 GList *old_list; 2168 GList *old_list;
2169 GList *work; 2169 GList *work;
2170 IconData *focus_id; 2170 IconData *focus_id;
2171 2171
2172 focus_id = vfi->focus_id; 2172 focus_id = VFICON_INFO(vf, focus_id);
2173 2173
2174 old_list = vfi->list; 2174 old_list = vf->list;
2175 vfi->list = NULL; 2175 vf->list = NULL;
2176 2176
2177 if (vfi->path) 2177 if (vf->path)
2178 { 2178 {
2179 ret = iconlist_read(vfi->path, &vfi->list); 2179 ret = iconlist_read(vf->path, &vf->list);
2180 } 2180 }
2181 2181
2182 /* check for same files from old_list */ 2182 /* check for same files from old_list */
2183 work = old_list; 2183 work = old_list;
2184 while (work) 2184 while (work)
2189 GList *needle; 2189 GList *needle;
2190 2190
2191 id = work->data; 2191 id = work->data;
2192 fd = id->fd; 2192 fd = id->fd;
2193 2193
2194 needle = vfi->list; 2194 needle = vf->list;
2195 while (needle) 2195 while (needle)
2196 { 2196 {
2197 IconData *idn = needle->data; 2197 IconData *idn = needle->data;
2198 FileData *fdn = idn->fd; 2198 FileData *fdn = idn->fd;
2199 if (fdn == fd) 2199 if (fdn == fd)
2210 } 2210 }
2211 2211
2212 work = work->next; 2212 work = work->next;
2213 } 2213 }
2214 2214
2215 vfi->list = iconlist_sort(vfi->list, vfi->sort_method, vfi->sort_ascend); 2215 vf->list = iconlist_sort(vf->list, vf->sort_method, vf->sort_ascend);
2216 2216
2217 work = old_list; 2217 work = old_list;
2218 while (work) 2218 while (work)
2219 { 2219 {
2220 IconData *id = work->data; 2220 IconData *id = work->data;
2221 work = work->next; 2221 work = work->next;
2222 2222
2223 if (id == vfi->prev_selection) vfi->prev_selection = NULL; 2223 if (id == VFICON_INFO(vf, prev_selection)) VFICON_INFO(vf, prev_selection) = NULL;
2224 if (id == vfi->click_id) vfi->click_id = NULL; 2224 if (id == VFICON_INFO(vf, click_id)) VFICON_INFO(vf, click_id) = NULL;
2225 } 2225 }
2226 2226
2227 vficon_populate(vfi, TRUE, keep_position); 2227 vficon_populate(vf, TRUE, keep_position);
2228 2228
2229 /* attempt to keep focus on same icon when refreshing */ 2229 /* attempt to keep focus on same icon when refreshing */
2230 if (focus_id && g_list_find(vfi->list, focus_id)) 2230 if (focus_id && g_list_find(vf->list, focus_id))
2231 { 2231 {
2232 vficon_set_focus(vfi, focus_id); 2232 vficon_set_focus(vf, focus_id);
2233 } 2233 }
2234 2234
2235 iconlist_free(old_list); 2235 iconlist_free(old_list);
2236 2236
2237 return ret; 2237 return ret;
2238 } 2238 }
2239 2239
2240 gint vficon_refresh(ViewFileIcon *vfi) 2240 gint vficon_refresh(ViewFile *vf)
2241 { 2241 {
2242 return vficon_refresh_real(vfi, TRUE); 2242 return vficon_refresh_real(vf, TRUE);
2243 } 2243 }
2244 2244
2245 /* 2245 /*
2246 *----------------------------------------------------------------------------- 2246 *-----------------------------------------------------------------------------
2247 * draw, etc. 2247 * draw, etc.
2249 */ 2249 */
2250 2250
2251 typedef struct _ColumnData ColumnData; 2251 typedef struct _ColumnData ColumnData;
2252 struct _ColumnData 2252 struct _ColumnData
2253 { 2253 {
2254 ViewFileIcon *vfi; 2254 ViewFile *vf;
2255 gint number; 2255 gint number;
2256 }; 2256 };
2257 2257
2258 static void vficon_cell_data_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, 2258 static void vficon_cell_data_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
2259 GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) 2259 GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
2260 { 2260 {
2261 ColumnData *cd = data; 2261 ColumnData *cd = data;
2262 ViewFileIcon *vfi; 2262 ViewFile *vf;
2263 GtkStyle *style; 2263 GtkStyle *style;
2264 GList *list; 2264 GList *list;
2265 GdkColor color_fg; 2265 GdkColor color_fg;
2266 GdkColor color_bg; 2266 GdkColor color_bg;
2267 IconData *id; 2267 IconData *id;
2268 2268
2269 vfi = cd->vfi; 2269 vf = cd->vf;
2270 2270
2271 gtk_tree_model_get(tree_model, iter, FILE_COLUMN_POINTER, &list, -1); 2271 gtk_tree_model_get(tree_model, iter, FILE_COLUMN_POINTER, &list, -1);
2272 2272
2273 id = g_list_nth_data(list, cd->number); 2273 id = g_list_nth_data(list, cd->number);
2274 2274
2275 if (id) g_assert(id->fd->magick == 0x12345678); 2275 if (id) g_assert(id->fd->magick == 0x12345678);
2276 2276
2277 style = gtk_widget_get_style(vfi->listview); 2277 style = gtk_widget_get_style(vf->listview);
2278 if (id && id->selected & SELECTION_SELECTED) 2278 if (id && id->selected & SELECTION_SELECTED)
2279 { 2279 {
2280 memcpy(&color_fg, &style->text[GTK_STATE_SELECTED], sizeof(color_fg)); 2280 memcpy(&color_fg, &style->text[GTK_STATE_SELECTED], sizeof(color_fg));
2281 memcpy(&color_bg, &style->base[GTK_STATE_SELECTED], sizeof(color_bg)); 2281 memcpy(&color_bg, &style->base[GTK_STATE_SELECTED], sizeof(color_bg));
2282 } 2282 }
2302 "text", id->fd->name, 2302 "text", id->fd->name,
2303 "cell-background-gdk", &color_bg, 2303 "cell-background-gdk", &color_bg,
2304 "cell-background-set", TRUE, 2304 "cell-background-set", TRUE,
2305 "foreground-gdk", &color_fg, 2305 "foreground-gdk", &color_fg,
2306 "foreground-set", TRUE, 2306 "foreground-set", TRUE,
2307 "has-focus", (vfi->focus_id == id), NULL); 2307 "has-focus", (VFICON_INFO(vf, focus_id) == id), NULL);
2308 } 2308 }
2309 else 2309 else
2310 { 2310 {
2311 g_object_set(cell, "pixbuf", NULL, 2311 g_object_set(cell, "pixbuf", NULL,
2312 "text", NULL, 2312 "text", NULL,
2315 "has-focus", FALSE, NULL); 2315 "has-focus", FALSE, NULL);
2316 } 2316 }
2317 } 2317 }
2318 } 2318 }
2319 2319
2320 static void vficon_append_column(ViewFileIcon *vfi, gint n) 2320 static void vficon_append_column(ViewFile *vf, gint n)
2321 { 2321 {
2322 ColumnData *cd; 2322 ColumnData *cd;
2323 GtkTreeViewColumn *column; 2323 GtkTreeViewColumn *column;
2324 GtkCellRenderer *renderer; 2324 GtkCellRenderer *renderer;
2325 2325
2336 "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE, NULL); 2336 "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE, NULL);
2337 2337
2338 g_object_set_data(G_OBJECT(column), "column_number", GINT_TO_POINTER(n)); 2338 g_object_set_data(G_OBJECT(column), "column_number", GINT_TO_POINTER(n));
2339 2339
2340 cd = g_new0(ColumnData, 1); 2340 cd = g_new0(ColumnData, 1);
2341 cd->vfi = vfi; 2341 cd->vf = vf;
2342 cd->number = n; 2342 cd->number = n;
2343 gtk_tree_view_column_set_cell_data_func(column, renderer, vficon_cell_data_cb, cd, g_free); 2343 gtk_tree_view_column_set_cell_data_func(column, renderer, vficon_cell_data_cb, cd, g_free);
2344 2344
2345 gtk_tree_view_append_column(GTK_TREE_VIEW(vfi->listview), column); 2345 gtk_tree_view_append_column(GTK_TREE_VIEW(vf->listview), column);
2346 } 2346 }
2347 2347
2348 /* 2348 /*
2349 *----------------------------------------------------------------------------- 2349 *-----------------------------------------------------------------------------
2350 * base 2350 * base
2351 *----------------------------------------------------------------------------- 2351 *-----------------------------------------------------------------------------
2352 */ 2352 */
2353 2353
2354 gint vficon_set_path(ViewFileIcon *vfi, const gchar *path) 2354 gint vficon_set_path(ViewFile *vf, const gchar *path)
2355 { 2355 {
2356 gint ret; 2356 gint ret;
2357 2357
2358 if (!path) return FALSE; 2358 if (!path) return FALSE;
2359 if (vfi->path && strcmp(path, vfi->path) == 0) return TRUE; 2359 if (vf->path && strcmp(path, vf->path) == 0) return TRUE;
2360 2360
2361 g_free(vfi->path); 2361 g_free(vf->path);
2362 vfi->path = g_strdup(path); 2362 vf->path = g_strdup(path);
2363 2363
2364 g_list_free(vfi->selection); 2364 g_list_free(VFICON_INFO(vf, selection));
2365 vfi->selection = NULL; 2365 VFICON_INFO(vf, selection) = NULL;
2366 2366
2367 iconlist_free(vfi->list); 2367 iconlist_free(vf->list);
2368 vfi->list = NULL; 2368 vf->list = NULL;
2369 2369
2370 /* NOTE: populate will clear the store for us */ 2370 /* NOTE: populate will clear the store for us */
2371 ret = vficon_refresh_real(vfi, FALSE); 2371 ret = vficon_refresh_real(vf, FALSE);
2372 2372
2373 vfi->focus_id = NULL; 2373 VFICON_INFO(vf, focus_id) = NULL;
2374 vficon_move_focus(vfi, 0, 0, FALSE); 2374 vficon_move_focus(vf, 0, 0, FALSE);
2375 2375
2376 return ret; 2376 return ret;
2377 } 2377 }
2378 2378
2379 void vficon_destroy_cb(GtkWidget *widget, gpointer data) 2379 void vficon_destroy_cb(GtkWidget *widget, gpointer data)
2380 { 2380 {
2381 ViewFileIcon *vfi = data; 2381 ViewFile *vf = data;
2382 2382
2383 if (vfi->popup) 2383 if (VFICON_INFO(vf, sync_idle_id) != -1) g_source_remove(VFICON_INFO(vf, sync_idle_id));
2384 { 2384
2385 g_signal_handlers_disconnect_matched(G_OBJECT(vfi->popup), G_SIGNAL_MATCH_DATA, 2385 tip_unschedule(vf);
2386 0, 0, 0, NULL, vfi); 2386
2387 gtk_widget_destroy(vfi->popup); 2387 vficon_thumb_cleanup(vf);
2388 } 2388
2389 2389 iconlist_free(vf->list);
2390 if (vfi->sync_idle_id != -1) g_source_remove(vfi->sync_idle_id); 2390 g_list_free(VFICON_INFO(vf, selection));
2391 2391 }
2392 tip_unschedule(vfi); 2392
2393 2393 ViewFile *vficon_new(ViewFile *vf, const gchar *path)
2394 vficon_thumb_cleanup(vfi); 2394 {
2395
2396 g_free(vfi->path);
2397
2398 iconlist_free(vfi->list);
2399 g_list_free(vfi->selection);
2400 g_free(vfi);
2401 }
2402
2403 ViewFileIcon *vficon_new(const gchar *path)
2404 {
2405 ViewFileIcon *vfi;
2406 GtkListStore *store; 2395 GtkListStore *store;
2407 GtkTreeSelection *selection; 2396 GtkTreeSelection *selection;
2408 gint i; 2397 gint i;
2409 2398
2410 vfi = g_new0(ViewFileIcon, 1); 2399 vf->info = g_new0(ViewFileInfoIcon, 1);
2411 2400
2412 vfi->path = NULL; 2401 VFICON_INFO(vf, selection) = NULL;
2413 vfi->sort_method = SORT_NAME; 2402 VFICON_INFO(vf, prev_selection) = NULL;
2414 vfi->sort_ascend = TRUE; 2403
2415 2404 VFICON_INFO(vf, tip_window) = NULL;
2416 vfi->selection = NULL; 2405 VFICON_INFO(vf, tip_delay_id) = -1;
2417 vfi->prev_selection = NULL; 2406
2418 2407 VFICON_INFO(vf, focus_row) = 0;
2419 vfi->tip_window = NULL; 2408 VFICON_INFO(vf, focus_column) = 0;
2420 vfi->tip_delay_id = -1; 2409 VFICON_INFO(vf, focus_id) = NULL;
2421 2410
2422 vfi->focus_row = 0; 2411 VFICON_INFO(vf, show_text) = options->show_icon_names;
2423 vfi->focus_column = 0; 2412
2424 vfi->focus_id = NULL; 2413 VFICON_INFO(vf, sync_idle_id) = -1;
2425
2426 vfi->show_text = options->show_icon_names;
2427
2428 vfi->sync_idle_id = -1;
2429
2430 vfi->popup = NULL;
2431
2432 vfi->widget = gtk_scrolled_window_new(NULL, NULL);
2433 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(vfi->widget), GTK_SHADOW_IN);
2434 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(vfi->widget),
2435 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2436 g_signal_connect(G_OBJECT(vfi->widget), "destroy",
2437 G_CALLBACK(vficon_destroy_cb), vfi);
2438 2414
2439 store = gtk_list_store_new(1, G_TYPE_POINTER); 2415 store = gtk_list_store_new(1, G_TYPE_POINTER);
2440 vfi->listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); 2416 vf->listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
2441 g_object_unref(store); 2417 g_object_unref(store);
2442 2418
2443 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vfi->listview)); 2419 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview));
2444 gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_NONE); 2420 gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_NONE);
2445 2421
2446 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(vfi->listview), FALSE); 2422 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(vf->listview), FALSE);
2447 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(vfi->listview), FALSE); 2423 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(vf->listview), FALSE);
2448 2424
2449 for (i = 0; i < VFICON_MAX_COLUMNS; i++) 2425 for (i = 0; i < VFICON_MAX_COLUMNS; i++)
2450 { 2426 {
2451 vficon_append_column(vfi, i); 2427 vficon_append_column(vf, i);
2452 } 2428 }
2453 2429
2454 /* zero width column to hide tree view focus, we draw it ourselves */ 2430 /* zero width column to hide tree view focus, we draw it ourselves */
2455 vficon_append_column(vfi, i); 2431 vficon_append_column(vf, i);
2456 /* end column to fill white space */ 2432 /* end column to fill white space */
2457 vficon_append_column(vfi, i); 2433 vficon_append_column(vf, i);
2458 2434
2459 g_signal_connect(G_OBJECT(vfi->listview), "size_allocate", 2435 g_signal_connect(G_OBJECT(vf->listview), "size_allocate",
2460 G_CALLBACK(vficon_sized_cb), vfi); 2436 G_CALLBACK(vficon_sized_cb), vf);
2461 g_signal_connect(G_OBJECT(vfi->listview), "key_press_event", 2437
2462 G_CALLBACK(vficon_press_key_cb), vfi); 2438 gtk_widget_set_events(vf->listview, GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK |
2463
2464 gtk_container_add(GTK_CONTAINER(vfi->widget), vfi->listview);
2465 gtk_widget_show(vfi->listview);
2466
2467 vficon_dnd_init(vfi);
2468
2469 gtk_widget_set_events(vfi->listview, GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK |
2470 GDK_BUTTON_PRESS_MASK | GDK_LEAVE_NOTIFY_MASK); 2439 GDK_BUTTON_PRESS_MASK | GDK_LEAVE_NOTIFY_MASK);
2471 g_signal_connect(G_OBJECT(vfi->listview), "button_press_event", 2440
2472 G_CALLBACK(vficon_press_cb), vfi); 2441 g_signal_connect(G_OBJECT(vf->listview),"motion_notify_event",
2473 g_signal_connect(G_OBJECT(vfi->listview), "button_release_event", 2442 G_CALLBACK(vficon_motion_cb), vf);
2474 G_CALLBACK(vficon_release_cb), vfi); 2443 g_signal_connect(G_OBJECT(vf->listview), "leave_notify_event",
2475 g_signal_connect(G_OBJECT(vfi->listview),"motion_notify_event", 2444 G_CALLBACK(vficon_leave_cb), vf);
2476 G_CALLBACK(vficon_motion_cb), vfi); 2445
2477 g_signal_connect(G_OBJECT(vfi->listview), "leave_notify_event", 2446 /* force VFICON_INFO(vf, columns) to be at least 1 (sane) - this will be corrected in the size_cb */
2478 G_CALLBACK(vficon_leave_cb), vfi); 2447 vficon_populate_at_new_size(vf, 1, 1, FALSE);
2479 2448
2480 /* force vfi->columns to be at least 1 (sane) - this will be corrected in the size_cb */ 2449 return vf;
2481 vficon_populate_at_new_size(vfi, 1, 1, FALSE); 2450 }
2482 2451
2483 if (path) vficon_set_path(vfi, path); 2452 void vficon_set_status_func(ViewFile *vf,
2484 2453 void (*func)(ViewFile *vf, gpointer data), gpointer data)
2485 return vfi; 2454 {
2486 } 2455 vf->func_status = func;
2487 2456 vf->data_status = data;
2488 void vficon_set_status_func(ViewFileIcon *vfi, 2457 }
2489 void (*func)(ViewFileIcon *vfi, gpointer data), gpointer data) 2458
2490 { 2459 void vficon_set_thumb_status_func(ViewFile *vf,
2491 vfi->func_status = func; 2460 void (*func)(ViewFile *vf, gdouble val, const gchar *text, gpointer data),
2492 vfi->data_status = data;
2493 }
2494
2495 void vficon_set_thumb_status_func(ViewFileIcon *vfi,
2496 void (*func)(ViewFileIcon *vfi, gdouble val, const gchar *text, gpointer data),
2497 gpointer data) 2461 gpointer data)
2498 { 2462 {
2499 vfi->func_thumb_status = func; 2463 vf->func_thumb_status = func;
2500 vfi->data_thumb_status = data; 2464 vf->data_thumb_status = data;
2501 } 2465 }
2502 2466
2503 void vficon_set_layout(ViewFileIcon *vfi, LayoutWindow *layout) 2467 void vficon_set_layout(ViewFile *vf, LayoutWindow *layout)
2504 { 2468 {
2505 vfi->layout = layout; 2469 vf->layout = layout;
2506 } 2470 }
2507 2471
2508 /* 2472 /*
2509 *----------------------------------------------------------------------------- 2473 *-----------------------------------------------------------------------------
2510 * maintenance (for rename, move, remove) 2474 * maintenance (for rename, move, remove)
2511 *----------------------------------------------------------------------------- 2475 *-----------------------------------------------------------------------------
2512 */ 2476 */
2513 2477
2514 static gint vficon_maint_find_closest(ViewFileIcon *vfi, gint row, gint count, GList *ignore_list) 2478 static gint vficon_maint_find_closest(ViewFile *vf, gint row, gint count, GList *ignore_list)
2515 { 2479 {
2516 GList *list = NULL; 2480 GList *list = NULL;
2517 GList *work; 2481 GList *work;
2518 gint rev = row - 1; 2482 gint rev = row - 1;
2519 row ++; 2483
2484 row++;
2520 2485
2521 work = ignore_list; 2486 work = ignore_list;
2522 while (work) 2487 while (work)
2523 { 2488 {
2524 FileData *fd = work->data; 2489 FileData *fd = work->data;
2525 gint f = vficon_index_by_fd(vfi, work->data); 2490 gint f = vficon_index_by_fd(vf, work->data);
2526 g_assert(fd->magick == 0x12345678); 2491 g_assert(fd->magick == 0x12345678);
2527 if (f >= 0) list = g_list_prepend(list, GINT_TO_POINTER(f)); 2492 if (f >= 0) list = g_list_prepend(list, GINT_TO_POINTER(f));
2528 work = work->next; 2493 work = work->next;
2529 } 2494 }
2530 2495
2565 { 2530 {
2566 return row; 2531 return row;
2567 } 2532 }
2568 } 2533 }
2569 2534
2570 gint vficon_maint_renamed(ViewFileIcon *vfi, FileData *fd) 2535 gint vficon_maint_renamed(ViewFile *vf, FileData *fd)
2571 { 2536 {
2572 gint ret = FALSE; 2537 gint ret = FALSE;
2573 gint row; 2538 gint row;
2574 gchar *source_base; 2539 gchar *source_base;
2575 gchar *dest_base; 2540 gchar *dest_base;
2576 IconData *id = vficon_icon_data(vfi, fd); 2541 IconData *id = vficon_icon_data(vf, fd);
2577 2542
2578 if (!id) return FALSE; 2543 if (!id) return FALSE;
2579 2544
2580 row = vficon_index_by_id(vfi, id); 2545 row = vficon_index_by_id(vf, id);
2581 if (row < 0) return FALSE; 2546 if (row < 0) return FALSE;
2582 2547
2583 source_base = remove_level_from_path(fd->change->source); 2548 source_base = remove_level_from_path(fd->change->source);
2584 dest_base = remove_level_from_path(fd->change->dest); 2549 dest_base = remove_level_from_path(fd->change->dest);
2585 2550
2586 if (strcmp(source_base, dest_base) == 0) 2551 if (strcmp(source_base, dest_base) == 0)
2587 { 2552 {
2588 vfi->list = g_list_remove(vfi->list, id); 2553 vf->list = g_list_remove(vf->list, id);
2589 vfi->list = iconlist_insert_sort(vfi->list, id, vfi->sort_method, vfi->sort_ascend); 2554 vf->list = iconlist_insert_sort(vf->list, id, vf->sort_method, vf->sort_ascend);
2590 2555
2591 vficon_sync_idle(vfi); 2556 vficon_sync_idle(vf);
2592 ret = TRUE; 2557 ret = TRUE;
2593 } 2558 }
2594 else 2559 else
2595 { 2560 {
2596 ret = vficon_maint_removed(vfi, fd, NULL); 2561 ret = vficon_maint_removed(vf, fd, NULL);
2597 } 2562 }
2598 2563
2599 g_free(source_base); 2564 g_free(source_base);
2600 g_free(dest_base); 2565 g_free(dest_base);
2601 2566
2602 return ret; 2567 return ret;
2603 } 2568 }
2604 2569
2605 gint vficon_maint_removed(ViewFileIcon *vfi, FileData *fd, GList *ignore_list) 2570 gint vficon_maint_removed(ViewFile *vf, FileData *fd, GList *ignore_list)
2606 { 2571 {
2607 gint row; 2572 gint row;
2608 gint new_row = -1; 2573 gint new_row = -1;
2609 GtkTreeModel *store; 2574 GtkTreeModel *store;
2610 GtkTreeIter iter; 2575 GtkTreeIter iter;
2611 IconData *id = vficon_icon_data(vfi, fd); 2576 IconData *id = vficon_icon_data(vf, fd);
2612 2577
2613 if (!id) return FALSE; 2578 if (!id) return FALSE;
2614 2579
2615 row = g_list_index(vfi->list, id); 2580 row = g_list_index(vf->list, id);
2616 if (row < 0) return FALSE; 2581 if (row < 0) return FALSE;
2617 2582
2618 if ((id->selected & SELECTION_SELECTED) && 2583 if ((id->selected & SELECTION_SELECTED) &&
2619 layout_image_get_collection(vfi->layout, NULL) == NULL) 2584 layout_image_get_collection(vf->layout, NULL) == NULL)
2620 { 2585 {
2621 vficon_unselect(vfi, id); 2586 vficon_unselect(vf, id);
2622 2587
2623 if (!vfi->selection) 2588 if (!VFICON_INFO(vf, selection))
2624 { 2589 {
2625 gint n; 2590 gint n;
2626 2591
2627 n = vficon_count(vfi, NULL); 2592 n = vficon_count(vf, NULL);
2628 if (ignore_list) 2593 if (ignore_list)
2629 { 2594 {
2630 new_row = vficon_maint_find_closest(vfi, row, n, ignore_list); 2595 new_row = vficon_maint_find_closest(vf, row, n, ignore_list);
2631 DEBUG_1("row = %d, closest is %d", row, new_row); 2596 DEBUG_1("row = %d, closest is %d", row, new_row);
2632 } 2597 }
2633 else 2598 else
2634 { 2599 {
2635 if (row + 1 < n) 2600 if (row + 1 < n)
2644 } 2609 }
2645 else if (ignore_list) 2610 else if (ignore_list)
2646 { 2611 {
2647 GList *work; 2612 GList *work;
2648 2613
2649 work = vfi->selection; 2614 work = VFICON_INFO(vf, selection);
2650 while (work) 2615 while (work)
2651 { 2616 {
2652 IconData *ignore_id; 2617 IconData *ignore_id;
2653 FileData *ignore_fd; 2618 FileData *ignore_fd;
2654 GList *tmp; 2619 GList *tmp;
2671 match = TRUE; 2636 match = TRUE;
2672 } 2637 }
2673 } 2638 }
2674 if (!match) 2639 if (!match)
2675 { 2640 {
2676 new_row = g_list_index(vfi->list, ignore_id); 2641 new_row = g_list_index(vf->list, ignore_id);
2677 work = NULL; 2642 work = NULL;
2678 } 2643 }
2679 } 2644 }
2680 if (new_row == -1) 2645 if (new_row == -1)
2681 { 2646 {
2682 /* selection all ignored, use closest */ 2647 /* selection all ignored, use closest */
2683 new_row = vficon_maint_find_closest(vfi, row, vficon_count(vfi, NULL), ignore_list); 2648 new_row = vficon_maint_find_closest(vf, row, vficon_count(vf, NULL), ignore_list);
2684 } 2649 }
2685 } 2650 }
2686 else 2651 else
2687 { 2652 {
2688 new_row = g_list_index(vfi->list, vfi->selection->data); 2653 new_row = g_list_index(vf->list, VFICON_INFO(vf, selection)->data);
2689 } 2654 }
2690 if (new_row >= 0) 2655 if (new_row >= 0)
2691 { 2656 {
2692 IconData *idn = g_list_nth_data(vfi->list, new_row); 2657 IconData *idn = g_list_nth_data(vf->list, new_row);
2693 2658
2694 vficon_select(vfi, idn); 2659 vficon_select(vf, idn);
2695 vficon_send_layout_select(vfi, idn); 2660 vficon_send_layout_select(vf, idn);
2696 } 2661 }
2697 } 2662 }
2698 2663
2699 /* Thumb loader check */ 2664 /* Thumb loader check */
2700 if (fd == vfi->thumbs_filedata) vfi->thumbs_filedata = NULL; 2665 if (fd == vf->thumbs_filedata) vf->thumbs_filedata = NULL;
2701 if (vfi->thumbs_count > 0) vfi->thumbs_count--; 2666 if (vf->thumbs_count > 0) vf->thumbs_count--;
2702 2667
2703 if (vfi->prev_selection == id) vfi->prev_selection = NULL; 2668 if (VFICON_INFO(vf, prev_selection) == id) VFICON_INFO(vf, prev_selection) = NULL;
2704 if (vfi->click_id == id) vfi->click_id = NULL; 2669 if (VFICON_INFO(vf, click_id) == id) VFICON_INFO(vf, click_id) = NULL;
2705 2670
2706 /* remove pointer to this fd from grid */ 2671 /* remove pointer to this fd from grid */
2707 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); 2672 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
2708 if (id->row >= 0 && 2673 if (id->row >= 0 &&
2709 gtk_tree_model_iter_nth_child(store, &iter, NULL, id->row)) 2674 gtk_tree_model_iter_nth_child(store, &iter, NULL, id->row))
2710 { 2675 {
2711 GList *list; 2676 GList *list;
2712 2677
2713 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); 2678 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1);
2714 list = g_list_find(list, id); 2679 list = g_list_find(list, id);
2715 if (list) list->data = NULL; 2680 if (list) list->data = NULL;
2716 } 2681 }
2717 2682
2718 vfi->list = g_list_remove(vfi->list, id); 2683 vf->list = g_list_remove(vf->list, id);
2719 file_data_unref(fd); 2684 file_data_unref(fd);
2720 g_free(id); 2685 g_free(id);
2721 2686
2722 vficon_sync_idle(vfi); 2687 vficon_sync_idle(vf);
2723 vficon_send_update(vfi); 2688 vficon_send_update(vf);
2724 2689
2725 return TRUE; 2690 return TRUE;
2726 } 2691 }
2727 2692
2728 gint vficon_maint_moved(ViewFileIcon *vfi, FileData *fd, GList *ignore_list) 2693 gint vficon_maint_moved(ViewFile *vf, FileData *fd, GList *ignore_list)
2729 { 2694 {
2730 gint ret = FALSE; 2695 gint ret = FALSE;
2731 gchar *buf; 2696 gchar *buf;
2732 2697
2733 if (!fd->change->source || !vfi->path) return FALSE; 2698 if (!fd->change->source || !vf->path) return FALSE;
2734 2699
2735 buf = remove_level_from_path(fd->change->source); 2700 buf = remove_level_from_path(fd->change->source);
2736 2701
2737 if (strcmp(buf, vfi->path) == 0) 2702 if (strcmp(buf, vf->path) == 0)
2738 { 2703 {
2739 ret = vficon_maint_removed(vfi, fd, ignore_list); 2704 ret = vficon_maint_removed(vf, fd, ignore_list);
2740 } 2705 }
2741 2706
2742 g_free(buf); 2707 g_free(buf);
2743 2708
2744 return ret; 2709 return ret;