mirror of
https://gitlab.freedesktop.org/plymouth/plymouth.git
synced 2026-05-08 15:58:20 +02:00
[trigger] add new ignore_next_pull method
It can be cumbersome to wait for multiple operations to finish before pulling a trigger. In those cases, one option would be to have a separate trigger for each operation, and then wait until every trigger is pulled before pulling the main trigger. This commit instead allows a trigger to get pulled more than once before it actually fires. By calling ignore_next_pull once for each suboperaton, and immediately pulling the trigger, it won't fire until the last operation finishes.
This commit is contained in:
parent
1a516d3635
commit
dfa457ba50
2 changed files with 16 additions and 0 deletions
|
|
@ -41,6 +41,7 @@ struct _ply_trigger
|
|||
ply_list_t *closures;
|
||||
|
||||
ply_trigger_t **free_address;
|
||||
int ignore_count;
|
||||
};
|
||||
|
||||
ply_trigger_t *
|
||||
|
|
@ -51,6 +52,7 @@ ply_trigger_new (ply_trigger_t **free_address)
|
|||
trigger = calloc (1, sizeof (ply_trigger_t));
|
||||
trigger->free_address = free_address;
|
||||
trigger->closures = ply_list_new ();
|
||||
trigger->ignore_count = 0;
|
||||
|
||||
return trigger;
|
||||
}
|
||||
|
|
@ -131,6 +133,12 @@ ply_trigger_remove_handler (ply_trigger_t *trigger,
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
ply_trigger_ignore_next_pull (ply_trigger_t *trigger)
|
||||
{
|
||||
trigger->ignore_count++;
|
||||
}
|
||||
|
||||
void
|
||||
ply_trigger_pull (ply_trigger_t *trigger,
|
||||
const void *data)
|
||||
|
|
@ -138,6 +146,13 @@ ply_trigger_pull (ply_trigger_t *trigger,
|
|||
ply_list_node_t *node;
|
||||
|
||||
assert (trigger != NULL);
|
||||
assert (trigger->ignore_count >= 0);
|
||||
|
||||
if (trigger->ignore_count > 0)
|
||||
{
|
||||
trigger->ignore_count--;
|
||||
return;
|
||||
}
|
||||
|
||||
node = ply_list_get_first_node (trigger->closures);
|
||||
while (node != NULL)
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ void ply_trigger_remove_handler (ply_trigger_t *trigger,
|
|||
void *user_data);
|
||||
void ply_trigger_free (ply_trigger_t *trigger);
|
||||
|
||||
void ply_trigger_ignore_next_pull (ply_trigger_t *trigger);
|
||||
void ply_trigger_pull (ply_trigger_t *trigger,
|
||||
const void *data);
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue