Mercurial > geeqie.yaz
comparison src/utilops.c @ 1560:dd0a89cdb021
differentiate between "Cancel" and "Discard changes"
author | nadvornik |
---|---|
date | Thu, 23 Apr 2009 20:48:03 +0000 |
parents | 597ed9e9979c |
children | d986a7727442 |
comparison
equal
deleted
inserted
replaced
1559:597ed9e9979c | 1560:dd0a89cdb021 |
---|---|
250 typedef enum { | 250 typedef enum { |
251 UTILITY_PHASE_START = 0, | 251 UTILITY_PHASE_START = 0, |
252 UTILITY_PHASE_ENTERING, | 252 UTILITY_PHASE_ENTERING, |
253 UTILITY_PHASE_CHECKED, | 253 UTILITY_PHASE_CHECKED, |
254 UTILITY_PHASE_DONE, | 254 UTILITY_PHASE_DONE, |
255 UTILITY_PHASE_CANCEL | 255 UTILITY_PHASE_CANCEL, |
256 UTILITY_PHASE_DISCARD | |
256 } UtilityPhase; | 257 } UtilityPhase; |
257 | 258 |
258 enum { | 259 enum { |
259 UTILITY_RENAME = 0, | 260 UTILITY_RENAME = 0, |
260 UTILITY_RENAME_AUTO, | 261 UTILITY_RENAME_AUTO, |
317 gchar *external_command; | 318 gchar *external_command; |
318 gpointer resume_data; | 319 gpointer resume_data; |
319 | 320 |
320 FileUtilDoneFunc done_func; | 321 FileUtilDoneFunc done_func; |
321 void (*details_func)(FileData *fd, GtkWidget *parent); | 322 void (*details_func)(FileData *fd, GtkWidget *parent); |
323 gboolean (*finalize_func)(FileData *fd); | |
324 gboolean (*discard_func)(FileData *fd); | |
322 gpointer done_data; | 325 gpointer done_data; |
323 }; | 326 }; |
324 | 327 |
325 enum { | 328 enum { |
326 UTILITY_COLUMN_FD = 0, | 329 UTILITY_COLUMN_FD = 0, |
558 file_data_apply_ci(fd); | 561 file_data_apply_ci(fd); |
559 } | 562 } |
560 | 563 |
561 ud->flist = g_list_remove(ud->flist, fd); | 564 ud->flist = g_list_remove(ud->flist, fd); |
562 | 565 |
563 /* FIXME: put it here for now */ | 566 if (ud->finalize_func) |
564 if (ud->type == UTILITY_TYPE_WRITE_METADATA) | 567 { |
565 { | 568 ud->finalize_func(fd); |
566 metadata_write_queue_remove(fd); | |
567 } | 569 } |
568 | 570 |
569 if (ud->with_sidecars) | 571 if (ud->with_sidecars) |
570 file_data_sc_free_ci(fd); | 572 file_data_sc_free_ci(fd); |
571 else | 573 else |
989 | 991 |
990 ud->phase = UTILITY_PHASE_CANCEL; | 992 ud->phase = UTILITY_PHASE_CANCEL; |
991 file_util_dialog_run(ud); | 993 file_util_dialog_run(ud); |
992 } | 994 } |
993 | 995 |
996 static void file_util_discard_cb(GenericDialog *gd, gpointer data) | |
997 { | |
998 UtilityData *ud = data; | |
999 | |
1000 generic_dialog_close(gd); | |
1001 | |
1002 ud->gd = NULL; | |
1003 | |
1004 ud->phase = UTILITY_PHASE_DISCARD; | |
1005 file_util_dialog_run(ud); | |
1006 } | |
1007 | |
994 static void file_util_ok_cb(GenericDialog *gd, gpointer data) | 1008 static void file_util_ok_cb(GenericDialog *gd, gpointer data) |
995 { | 1009 { |
996 UtilityData *ud = data; | 1010 UtilityData *ud = data; |
997 | 1011 |
998 generic_dialog_close(gd); | 1012 generic_dialog_close(gd); |
1317 stock_id = GTK_STOCK_OK; | 1331 stock_id = GTK_STOCK_OK; |
1318 } | 1332 } |
1319 | 1333 |
1320 ud->gd = file_util_gen_dlg(ud->messages.title, "dlg_confirm", | 1334 ud->gd = file_util_gen_dlg(ud->messages.title, "dlg_confirm", |
1321 ud->parent, FALSE, file_util_cancel_cb, ud); | 1335 ud->parent, FALSE, file_util_cancel_cb, ud); |
1336 if (ud->discard_func) generic_dialog_add_button(ud->gd, GTK_STOCK_REVERT_TO_SAVED, _("Discard changes"), file_util_discard_cb, FALSE); | |
1322 if (ud->details_func) generic_dialog_add_button(ud->gd, GTK_STOCK_INFO, _("File details"), file_util_details_cb, FALSE); | 1337 if (ud->details_func) generic_dialog_add_button(ud->gd, GTK_STOCK_INFO, _("File details"), file_util_details_cb, FALSE); |
1323 | 1338 |
1324 generic_dialog_add_button(ud->gd, stock_id, NULL, file_util_ok_cb, TRUE); | 1339 generic_dialog_add_button(ud->gd, stock_id, NULL, file_util_ok_cb, TRUE); |
1325 | 1340 |
1326 if (ud->dir_fd) | 1341 if (ud->dir_fd) |
1429 ud->gd = file_util_gen_dlg(ud->messages.title, "dlg_confirm", | 1444 ud->gd = file_util_gen_dlg(ud->messages.title, "dlg_confirm", |
1430 ud->parent, FALSE, file_util_cancel_cb, ud); | 1445 ud->parent, FALSE, file_util_cancel_cb, ud); |
1431 | 1446 |
1432 box = generic_dialog_add_message(ud->gd, NULL, ud->messages.question, NULL); | 1447 box = generic_dialog_add_message(ud->gd, NULL, ud->messages.question, NULL); |
1433 | 1448 |
1449 if (ud->discard_func) generic_dialog_add_button(ud->gd, GTK_STOCK_REVERT_TO_SAVED, _("Discard changes"), file_util_discard_cb, FALSE); | |
1434 if (ud->details_func) generic_dialog_add_button(ud->gd, GTK_STOCK_INFO, _("File details"), file_util_details_cb, FALSE); | 1450 if (ud->details_func) generic_dialog_add_button(ud->gd, GTK_STOCK_INFO, _("File details"), file_util_details_cb, FALSE); |
1435 | 1451 |
1436 generic_dialog_add_button(ud->gd, GTK_STOCK_OK, ud->messages.title, file_util_ok_cb, TRUE); | 1452 generic_dialog_add_button(ud->gd, GTK_STOCK_OK, ud->messages.title, file_util_ok_cb, TRUE); |
1437 | 1453 |
1438 box = pref_group_new(box, TRUE, ud->messages.desc_flist, GTK_ORIENTATION_HORIZONTAL); | 1454 box = pref_group_new(box, TRUE, ud->messages.desc_flist, GTK_ORIENTATION_HORIZONTAL); |
1546 // gtk_combo_box_set_active(GTK_COMBO_BOX(ud->combo_type), 0); /* callback will take care of the rest */ | 1562 // gtk_combo_box_set_active(GTK_COMBO_BOX(ud->combo_type), 0); /* callback will take care of the rest */ |
1547 | 1563 |
1548 file_util_dialog_list_select(ud->listview, 0); | 1564 file_util_dialog_list_select(ud->listview, 0); |
1549 } | 1565 } |
1550 | 1566 |
1567 static void file_util_finalize_all(UtilityData *ud) | |
1568 { | |
1569 GList *work = ud->flist; | |
1570 | |
1571 if (ud->phase == UTILITY_PHASE_CANCEL) return; | |
1572 if (ud->phase == UTILITY_PHASE_DONE && !ud->finalize_func) return; | |
1573 if (ud->phase == UTILITY_PHASE_DISCARD && !ud->discard_func) return; | |
1574 | |
1575 while (work) | |
1576 { | |
1577 FileData *fd = work->data; | |
1578 work = work->next; | |
1579 if (ud->phase == UTILITY_PHASE_DONE) ud->finalize_func(fd); | |
1580 else if (ud->phase == UTILITY_PHASE_DISCARD) ud->discard_func(fd); | |
1581 } | |
1582 } | |
1551 | 1583 |
1552 void file_util_dialog_run(UtilityData *ud) | 1584 void file_util_dialog_run(UtilityData *ud) |
1553 { | 1585 { |
1554 switch (ud->phase) | 1586 switch (ud->phase) |
1555 { | 1587 { |
1588 case UTILITY_PHASE_CHECKED: | 1620 case UTILITY_PHASE_CHECKED: |
1589 file_util_perform_ci(ud); | 1621 file_util_perform_ci(ud); |
1590 break; | 1622 break; |
1591 case UTILITY_PHASE_CANCEL: | 1623 case UTILITY_PHASE_CANCEL: |
1592 case UTILITY_PHASE_DONE: | 1624 case UTILITY_PHASE_DONE: |
1593 | 1625 case UTILITY_PHASE_DISCARD: |
1594 /* FIXME: put it here for now */ | 1626 |
1595 if (ud->type == UTILITY_TYPE_WRITE_METADATA) | 1627 file_util_finalize_all(ud); |
1596 { | |
1597 metadata_write_queue_remove_list(ud->flist); | |
1598 } | |
1599 | 1628 |
1600 if (ud->done_func) | 1629 if (ud->done_func) |
1601 ud->done_func((ud->phase == UTILITY_PHASE_DONE), ud->dest_path, ud->done_data); | 1630 ud->done_func((ud->phase == UTILITY_PHASE_DONE), ud->dest_path, ud->done_data); |
1602 | 1631 |
1603 if (ud->with_sidecars) | 1632 if (ud->with_sidecars) |
1774 | 1803 |
1775 ud->done_func = done_func; | 1804 ud->done_func = done_func; |
1776 ud->done_data = done_data; | 1805 ud->done_data = done_data; |
1777 | 1806 |
1778 ud->details_func = file_util_write_metadata_details_dialog; | 1807 ud->details_func = file_util_write_metadata_details_dialog; |
1808 ud->finalize_func = metadata_write_queue_remove; | |
1809 ud->discard_func = metadata_write_queue_remove; | |
1779 | 1810 |
1780 ud->messages.title = _("Write metadata"); | 1811 ud->messages.title = _("Write metadata"); |
1781 ud->messages.question = _("Write metadata?"); | 1812 ud->messages.question = _("Write metadata?"); |
1782 ud->messages.desc_flist = _("This will write the changed metadata into the following files"); | 1813 ud->messages.desc_flist = _("This will write the changed metadata into the following files"); |
1783 ud->messages.desc_source_fd = ""; | 1814 ud->messages.desc_source_fd = ""; |