Mercurial > geeqie
comparison src/image.c @ 1012:fe82830ab8fd
converted image loader to a GObject and use signals for notification
author | nadvornik |
---|---|
date | Fri, 29 Aug 2008 20:53:53 +0000 |
parents | 4fe8f9656107 |
children | b0db0bd74dba |
comparison
equal
deleted
inserted
replaced
1011:616b14da08c2 | 1012:fe82830ab8fd |
---|---|
449 | 449 |
450 DEBUG_1("%s read ahead started for :%s", get_exec_time(), imd->read_ahead_fd->path); | 450 DEBUG_1("%s read ahead started for :%s", get_exec_time(), imd->read_ahead_fd->path); |
451 | 451 |
452 imd->read_ahead_il = image_loader_new(imd->read_ahead_fd); | 452 imd->read_ahead_il = image_loader_new(imd->read_ahead_fd); |
453 | 453 |
454 image_loader_set_error_func(imd->read_ahead_il, image_read_ahead_error_cb, imd); | 454 g_signal_connect (G_OBJECT(imd->read_ahead_il), "error", (GCallback)image_read_ahead_error_cb, imd); |
455 if (!image_loader_start(imd->read_ahead_il, image_read_ahead_done_cb, imd)) | 455 g_signal_connect (G_OBJECT(imd->read_ahead_il), "error", (GCallback)image_read_ahead_done_cb, imd); |
456 | |
457 if (!image_loader_start(imd->read_ahead_il)) | |
456 { | 458 { |
457 image_read_ahead_cancel(imd); | 459 image_read_ahead_cancel(imd); |
458 image_complete_util(imd, TRUE); | 460 image_complete_util(imd, TRUE); |
459 } | 461 } |
460 } | 462 } |
616 { | 618 { |
617 imd->il = imd->read_ahead_il; | 619 imd->il = imd->read_ahead_il; |
618 imd->read_ahead_il = NULL; | 620 imd->read_ahead_il = NULL; |
619 | 621 |
620 /* override the old signals */ | 622 /* override the old signals */ |
621 image_loader_set_area_ready_func(imd->il, image_load_area_cb, imd); | 623 g_signal_handlers_disconnect_matched(G_OBJECT(imd->il), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, imd); |
622 image_loader_set_error_func(imd->il, image_load_error_cb, imd); | 624 g_signal_connect (G_OBJECT(imd->il), "area_ready", (GCallback)image_load_area_cb, imd); |
623 image_loader_set_done_func(imd->il, image_load_done_cb, imd); | 625 g_signal_connect (G_OBJECT(imd->il), "error", (GCallback)image_load_error_cb, imd); |
626 g_signal_connect (G_OBJECT(imd->il), "done", (GCallback)image_load_done_cb, imd); | |
624 image_loader_set_buffer_size(imd->il, IMAGE_LOAD_BUFFER_COUNT); | 627 image_loader_set_buffer_size(imd->il, IMAGE_LOAD_BUFFER_COUNT); |
625 | 628 |
626 #ifdef IMAGE_THROTTLE_LARGER_IMAGES | 629 #ifdef IMAGE_THROTTLE_LARGER_IMAGES |
627 image_load_buffer_throttle(imd->il); | 630 image_load_buffer_throttle(imd->il); |
628 #endif | 631 #endif |
686 | 689 |
687 g_object_set(G_OBJECT(imd->pr), "loading", TRUE, NULL); | 690 g_object_set(G_OBJECT(imd->pr), "loading", TRUE, NULL); |
688 | 691 |
689 imd->il = image_loader_new(fd); | 692 imd->il = image_loader_new(fd); |
690 | 693 |
691 image_loader_set_area_ready_func(imd->il, image_load_area_cb, imd); | 694 g_signal_connect (G_OBJECT(imd->il), "area_ready", (GCallback)image_load_area_cb, imd); |
692 image_loader_set_error_func(imd->il, image_load_error_cb, imd); | 695 g_signal_connect (G_OBJECT(imd->il), "error", (GCallback)image_load_error_cb, imd); |
696 g_signal_connect (G_OBJECT(imd->il), "done", (GCallback)image_load_done_cb, imd); | |
693 image_loader_set_buffer_size(imd->il, IMAGE_LOAD_BUFFER_COUNT); | 697 image_loader_set_buffer_size(imd->il, IMAGE_LOAD_BUFFER_COUNT); |
694 | 698 |
695 if (!image_loader_start(imd->il, image_load_done_cb, imd)) | 699 if (!image_loader_start(imd->il)) |
696 { | 700 { |
697 DEBUG_1("image start error"); | 701 DEBUG_1("image start error"); |
698 | 702 |
699 g_object_set(G_OBJECT(imd->pr), "loading", FALSE, NULL); | 703 g_object_set(G_OBJECT(imd->pr), "loading", FALSE, NULL); |
700 | 704 |
1096 | 1100 |
1097 if (info) *info = NULL; | 1101 if (info) *info = NULL; |
1098 return NULL; | 1102 return NULL; |
1099 } | 1103 } |
1100 | 1104 |
1101 static void image_loader_sync_data(ImageLoader *il, gpointer data) | 1105 static void image_loader_sync_read_ahead_data(ImageLoader *il, gpointer old_data, gpointer data) |
1102 { | 1106 { |
1103 /* change data for the callbacks directly */ | 1107 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_read_ahead_error_cb, old_data)) |
1104 | 1108 g_signal_connect (G_OBJECT(il), "error", (GCallback)image_read_ahead_error_cb, data); |
1105 il->data_area_ready = data; | 1109 |
1106 il->data_error = data; | 1110 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_read_ahead_done_cb, old_data)) |
1107 il->data_done = data; | 1111 g_signal_connect (G_OBJECT(il), "done", (GCallback)image_read_ahead_done_cb, data); |
1108 il->data_percent = data; | 1112 } |
1113 | |
1114 static void image_loader_sync_data(ImageLoader *il, gpointer old_data, gpointer data) | |
1115 { | |
1116 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_load_area_cb, old_data)) | |
1117 g_signal_connect (G_OBJECT(il), "area_ready", (GCallback)image_load_area_cb, data); | |
1118 | |
1119 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_load_error_cb, old_data)) | |
1120 g_signal_connect (G_OBJECT(il), "error", (GCallback)image_load_error_cb, data); | |
1121 | |
1122 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_load_done_cb, old_data)) | |
1123 g_signal_connect (G_OBJECT(il), "done", (GCallback)image_load_done_cb, data); | |
1109 } | 1124 } |
1110 | 1125 |
1111 /* this is more like a move function | 1126 /* this is more like a move function |
1112 * it moves most data from source to imd | 1127 * it moves most data from source to imd |
1113 */ | 1128 */ |
1129 if (source->il) | 1144 if (source->il) |
1130 { | 1145 { |
1131 imd->il = source->il; | 1146 imd->il = source->il; |
1132 source->il = NULL; | 1147 source->il = NULL; |
1133 | 1148 |
1134 image_loader_sync_data(imd->il, imd); | 1149 image_loader_sync_data(imd->il, source, imd); |
1135 | 1150 |
1136 imd->delay_alter_type = source->delay_alter_type; | 1151 imd->delay_alter_type = source->delay_alter_type; |
1137 source->delay_alter_type = ALTER_NONE; | 1152 source->delay_alter_type = ALTER_NONE; |
1138 } | 1153 } |
1139 | 1154 |
1156 } | 1171 } |
1157 | 1172 |
1158 image_loader_free(imd->read_ahead_il); | 1173 image_loader_free(imd->read_ahead_il); |
1159 imd->read_ahead_il = source->read_ahead_il; | 1174 imd->read_ahead_il = source->read_ahead_il; |
1160 source->read_ahead_il = NULL; | 1175 source->read_ahead_il = NULL; |
1161 if (imd->read_ahead_il) image_loader_sync_data(imd->read_ahead_il, imd); | 1176 if (imd->read_ahead_il) image_loader_sync_read_ahead_data(imd->read_ahead_il, source, imd); |
1162 | 1177 |
1163 file_data_unref(imd->read_ahead_fd); | 1178 file_data_unref(imd->read_ahead_fd); |
1164 imd->read_ahead_fd = source->read_ahead_fd; | 1179 imd->read_ahead_fd = source->read_ahead_fd; |
1165 source->read_ahead_fd = NULL; | 1180 source->read_ahead_fd = NULL; |
1166 | 1181 |