char *filename;
cairo_surface_t *image;
int fullscreen;
+ int *image_counter;
};
static void
window_set_fullscreen(window, image->fullscreen);
}
+static void
+close_handler(struct window *window, void *data)
+{
+ struct image *image = data;
+
+ *image->image_counter -= 1;
+
+ if (*image->image_counter == 0)
+ display_exit(image->display);
+
+ widget_destroy(image->widget);
+ window_destroy(image->window);
+
+ free(image);
+}
+
static struct image *
-image_create(struct display *display, const char *filename)
+image_create(struct display *display, const char *filename,
+ int *image_counter)
{
struct image *image;
char *b, *copy, title[512];;
image->widget = frame_create(image->window, image);
window_set_title(image->window, title);
image->display = display;
+ image->image_counter = image_counter;
+ *image_counter += 1;
window_set_user_data(image->window, image);
widget_set_redraw_handler(image->widget, redraw_handler);
window_set_keyboard_focus_handler(image->window,
keyboard_focus_handler);
window_set_fullscreen_handler(image->window, fullscreen_handler);
+ window_set_close_handler(image->window, close_handler);
widget_schedule_resize(image->widget, 500, 400);
{
struct display *d;
int i;
+ int image_counter = 0;
d = display_create(argc, argv);
if (d == NULL) {
}
for (i = 1; i < argc; i++)
- image_create (d, argv[i]);
+ image_create(d, argv[i], &image_counter);
- display_run(d);
+ if (image_counter > 0)
+ display_run(d);
return 0;
}