@@ -3620,9 +3620,16 @@ dt_iop_module_t *dt_iop_get_module_by_op_priority(GList *modules,
36203620 return mod_ret ;
36213621}
36223622
3623+ typedef enum instance_filter_mode_t
3624+ {
3625+ FILTER_NEUTRAL ,
3626+ FILTER_PREFER ,
3627+ FILTER_REQUIRE ,
3628+ } instance_filter_mode_t ;
3629+
36233630dt_iop_module_t * _find_preferred_instance (const dt_iop_module_so_t * module ,
36243631 const gboolean prefer_expanded ,
3625- const gboolean prefer_enabled ,
3632+ const instance_filter_mode_t enabled_mode ,
36263633 const gboolean prefer_unmasked ,
36273634 const gboolean prefer_first )
36283635{
@@ -3637,6 +3644,10 @@ dt_iop_module_t *_find_preferred_instance(const dt_iop_module_so_t *module,
36373644
36383645 if (mod -> so == module && mod -> iop_order != INT_MAX )
36393646 {
3647+ if (enabled_mode == FILTER_REQUIRE && !mod -> enabled ) continue ;
3648+
3649+ const gboolean prefer_enabled = enabled_mode == FILTER_PREFER ;
3650+
36403651 const gboolean no_mask = mod -> blend_params -> mask_mode == DEVELOP_MASK_DISABLED
36413652 || mod -> blend_params -> mask_mode == DEVELOP_MASK_ENABLED ;
36423653 const int score = (mod -> expanded && prefer_expanded ? 8 : 0 )
@@ -3688,11 +3699,20 @@ dt_iop_module_t *dt_iop_get_module_preferred_instance(const dt_iop_module_so_t *
36883699 else
36893700 return _find_preferred_instance (module ,
36903701 dt_conf_get_bool ("accel/prefer_expanded" ),
3691- dt_conf_get_bool ("accel/prefer_enabled" ),
3702+ dt_conf_get_bool ("accel/prefer_enabled" ) ? FILTER_PREFER : FILTER_NEUTRAL ,
36923703 dt_conf_get_bool ("accel/prefer_unmasked" ),
36933704 dt_conf_is_equal ("accel/select_order" , "first instance" ));
36943705}
36953706
3707+ dt_iop_module_t * dt_iop_get_module_enabled_preferring_unmasked_first_instance (const dt_iop_module_so_t * module )
3708+ {
3709+ return _find_preferred_instance (module ,
3710+ FALSE,
3711+ FILTER_REQUIRE ,
3712+ TRUE,
3713+ TRUE);
3714+ }
3715+
36963716/** adds keyboard accels to the first module in the pipe to handle
36973717 * where there are multiple instances */
36983718void dt_iop_connect_accels_multi (dt_iop_module_so_t * module )
@@ -3707,7 +3727,7 @@ void dt_iop_connect_accels_multi(dt_iop_module_so_t *module)
37073727
37083728 if (!strcmp (module -> op , "exposure" ))
37093729 darktable .develop -> proxy .exposure .module =
3710- _find_preferred_instance (module , FALSE, TRUE , TRUE, TRUE);
3730+ _find_preferred_instance (module , FALSE, FILTER_PREFER , TRUE, TRUE);
37113731}
37123732
37133733void dt_iop_connect_accels_all (void )
0 commit comments