Fix of #7170. Delayed notification is not moved until push will succeed.
This commit is contained in:
parent
79d9fd154e
commit
8bf4408731
@ -2068,9 +2068,11 @@ bool NotificationManager::update_notifications(GLCanvas3D& canvas)
|
|||||||
if ((*it).remaining_time > 0)
|
if ((*it).remaining_time > 0)
|
||||||
(*it).remaining_time -= time_since_render;
|
(*it).remaining_time -= time_since_render;
|
||||||
if ((*it).remaining_time <= 0) {
|
if ((*it).remaining_time <= 0) {
|
||||||
if ((*it).condition_callback()) { // push notification, erase it from waiting list (frame is scheduled by push)
|
if ((*it).notification && (*it).condition_callback()) { // push notification, erase it from waiting list (frame is scheduled by push)
|
||||||
(*it).notification->reset_timer();
|
(*it).notification->reset_timer();
|
||||||
if (push_notification_data(std::move((*it).notification), 0)) {
|
// if activate_existing returns false, we expect push to return true.
|
||||||
|
if(!this->activate_existing((*it).notification.get()) || (*it).delay_interval == 0) {
|
||||||
|
push_notification_data(std::move((*it).notification), 0);
|
||||||
it = m_waiting_notifications.erase(it);
|
it = m_waiting_notifications.erase(it);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -2107,11 +2109,13 @@ bool NotificationManager::activate_existing(const NotificationManager::PopNotifi
|
|||||||
const std::string &new_text = notification->get_data().text1;
|
const std::string &new_text = notification->get_data().text1;
|
||||||
for (auto it = m_pop_notifications.begin(); it != m_pop_notifications.end(); ++it) {
|
for (auto it = m_pop_notifications.begin(); it != m_pop_notifications.end(); ++it) {
|
||||||
if ((*it)->get_type() == new_type && !(*it)->is_finished()) {
|
if ((*it)->get_type() == new_type && !(*it)->is_finished()) {
|
||||||
|
// multiple of one type allowed, but must have different text
|
||||||
if (std::find(m_multiple_types.begin(), m_multiple_types.end(), new_type) != m_multiple_types.end()) {
|
if (std::find(m_multiple_types.begin(), m_multiple_types.end(), new_type) != m_multiple_types.end()) {
|
||||||
// If found same type and same text, return true - update will be performed on the old notif
|
// If found same type and same text, return true - update will be performed on the old notif
|
||||||
if ((*it)->compare_text(new_text) == false) {
|
if ((*it)->compare_text(new_text) == false) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
// multiple of one type allowed, but must have different text nad ObjectID
|
||||||
} else if (new_type == NotificationType::SlicingWarning) {
|
} else if (new_type == NotificationType::SlicingWarning) {
|
||||||
auto w1 = dynamic_cast<const ObjectIDNotification*>(notification);
|
auto w1 = dynamic_cast<const ObjectIDNotification*>(notification);
|
||||||
auto w2 = dynamic_cast<const ObjectIDNotification*>(it->get());
|
auto w2 = dynamic_cast<const ObjectIDNotification*>(it->get());
|
||||||
|
@ -706,6 +706,7 @@ private:
|
|||||||
// Otherwise another delay interval waiting. Timestamp is 0.
|
// Otherwise another delay interval waiting. Timestamp is 0.
|
||||||
// Note that notification object is constructed when being added to the waiting list, but there are no updates called on it and its timer is reset at regular push.
|
// Note that notification object is constructed when being added to the waiting list, but there are no updates called on it and its timer is reset at regular push.
|
||||||
// Also note that no control of same notification is done during push_delayed_notification_data but if waiting notif fails to push, it continues waiting.
|
// Also note that no control of same notification is done during push_delayed_notification_data but if waiting notif fails to push, it continues waiting.
|
||||||
|
// If delay_interval is 0, notification is pushed only after initial_delay no matter the result.
|
||||||
void push_delayed_notification_data(std::unique_ptr<NotificationManager::PopNotification> notification, std::function<bool(void)> condition_callback, int64_t initial_delay, int64_t delay_interval);
|
void push_delayed_notification_data(std::unique_ptr<NotificationManager::PopNotification> notification, std::function<bool(void)> condition_callback, int64_t initial_delay, int64_t delay_interval);
|
||||||
//finds older notification of same type and moves it to the end of queue. returns true if found
|
//finds older notification of same type and moves it to the end of queue. returns true if found
|
||||||
bool activate_existing(const NotificationManager::PopNotification* notification);
|
bool activate_existing(const NotificationManager::PopNotification* notification);
|
||||||
|
@ -4030,7 +4030,7 @@ void Plater::priv::on_export_began(wxCommandEvent& evt)
|
|||||||
{
|
{
|
||||||
if (show_warning_dialog)
|
if (show_warning_dialog)
|
||||||
warnings_dialog();
|
warnings_dialog();
|
||||||
notification_manager->push_delayed_notification(NotificationType::ExportOngoing, [](){return true;}, 1000, 1000);
|
notification_manager->push_delayed_notification(NotificationType::ExportOngoing, [](){return true;}, 1000, 0);
|
||||||
}
|
}
|
||||||
void Plater::priv::on_slicing_began()
|
void Plater::priv::on_slicing_began()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user