@@ -2401,9 +2401,7 @@ void leave(dt_view_t *self)
2401
2401
dt_image_update_final_size (dev -> image_storage .id );
2402
2402
// possibly dump new xmp data
2403
2403
const dt_history_hash_t hash_status = dt_history_hash_get_status (dev -> image_storage .id );
2404
-
2405
2404
const gboolean fresh = (hash_status == DT_HISTORY_HASH_BASIC ) || (hash_status == DT_HISTORY_HASH_AUTO );
2406
- const dt_imageio_write_xmp_t xmp_mode = dt_image_get_xmp_mode ();
2407
2405
if (!fresh )
2408
2406
dt_control_save_xmp (dev -> image_storage .id );
2409
2407
dt_history_hash_set_mipmap (dev -> image_storage .id );
@@ -2542,6 +2540,27 @@ void mouse_enter(dt_view_t *self)
2542
2540
dt_masks_events_mouse_enter (dev -> gui_module );
2543
2541
}
2544
2542
2543
+ #define DRAWING_TIMEOUT 80
2544
+
2545
+ static int _delayed_history_commit (gpointer data )
2546
+ {
2547
+ dt_develop_t * dev = (dt_develop_t * )data ;
2548
+ dev -> drawing_timeout = 0 ;
2549
+ dt_dev_add_history_item (dev , dev -> gui_module , FALSE);
2550
+ dt_dev_masks_list_update (dev );
2551
+ return G_SOURCE_REMOVE ;
2552
+ }
2553
+
2554
+ static void _do_delayed_history_commit (dt_develop_t * dev )
2555
+ {
2556
+ if (dev -> drawing_timeout )
2557
+ {
2558
+ g_source_remove (dev -> drawing_timeout );
2559
+ dev -> drawing_timeout = 0 ;
2560
+ }
2561
+ dev -> drawing_timeout = g_timeout_add (DRAWING_TIMEOUT , _delayed_history_commit , dev );
2562
+ }
2563
+
2545
2564
#define COORDINATES_ADAPT \
2546
2565
dt_develop_t *dev = (dt_develop_t *)self->data; \
2547
2566
const int32_t tb = dev->border_size; \
@@ -2616,8 +2635,7 @@ void mouse_moved(dt_view_t *self, double x, double y, double pressure, int which
2616
2635
if (dev -> form_visible && dt_masks_events_mouse_moved (dev -> gui_module , x , y , pressure , which ))
2617
2636
{
2618
2637
dt_control_queue_redraw_center ();
2619
- dt_dev_add_history_item (dev , dev -> gui_module , FALSE);
2620
- dt_dev_masks_list_update (dev );
2638
+ _do_delayed_history_commit (dev );
2621
2639
return ;
2622
2640
}
2623
2641
@@ -2684,8 +2702,7 @@ int button_released(dt_view_t *self, double x, double y, int which, uint32_t sta
2684
2702
// Change on mask parameters and image output.
2685
2703
// FIXME: use invalidate_top in the future
2686
2704
dt_control_queue_redraw_center ();
2687
- dt_dev_add_history_item (dev , dev -> gui_module , FALSE);
2688
- dt_dev_masks_list_change (dev );
2705
+ _do_delayed_history_commit (dev );
2689
2706
return 1 ;
2690
2707
}
2691
2708
@@ -2892,6 +2909,8 @@ int button_pressed(dt_view_t *self, double x, double y, double pressure, int whi
2892
2909
// masks
2893
2910
if (dev -> form_visible && dt_masks_events_button_pressed (dev -> gui_module , x , y , pressure , which , type , state ))
2894
2911
{
2912
+ dt_control_queue_redraw_center ();
2913
+ _do_delayed_history_commit (dev );
2895
2914
return 1 ;
2896
2915
}
2897
2916
// module
@@ -2923,8 +2942,7 @@ void scrolled(dt_view_t *self, double x, double y, int up, int state)
2923
2942
// Scroll on masks changes their size, therefore mask parameters and image output.
2924
2943
// FIXME: use invalidate_top in the future
2925
2944
dt_control_queue_redraw_center ();
2926
- dt_dev_add_history_item (dev , dev -> gui_module , FALSE);
2927
- dt_dev_masks_list_update (dev );
2945
+ _do_delayed_history_commit (dev );
2928
2946
return ;
2929
2947
}
2930
2948
0 commit comments