diff options
author | Jaxsun McCarthy Huggan | 2016-06-02 22:52:31 +0000 |
---|---|---|
committer | Jaxsun McCarthy Huggan | 2016-06-02 22:52:31 +0000 |
commit | 923d661b26e60c4b72261df798a9632e2c5e0e78 (patch) | |
tree | 333c507ff90fdcd3f1e4616eade2862cea433859 | |
parent | 7ebe840367437541244ec57906d28629c4db9c1d (diff) | |
download | org.eclipse.mylyn.tasks-923d661b26e60c4b72261df798a9632e2c5e0e78.tar.gz org.eclipse.mylyn.tasks-923d661b26e60c4b72261df798a9632e2c5e0e78.tar.xz org.eclipse.mylyn.tasks-923d661b26e60c4b72261df798a9632e2c5e0e78.zip |
494596: Fix issues with TaskListToolTip and TaskListNotifier
* TaskListToolTip now retrieves the incoming text from the ITask
* TaskListNotifier now records incoming text for manual task
synchronizations
* TaskListNotifier delays notifications until a proper diff can be
computed
Change-Id: I30ba21255d309832422e6f929a4af9e83ffcd4ea
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=494596
2 files changed, 31 insertions, 18 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/notifications/TaskListNotifier.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/notifications/TaskListNotifier.java index d90e08cea..a33b1ee97 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/notifications/TaskListNotifier.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/notifications/TaskListNotifier.java @@ -28,6 +28,7 @@ import org.eclipse.mylyn.internal.tasks.core.data.SynchronizationManger; import org.eclipse.mylyn.internal.tasks.core.data.TaskDataDiff; import org.eclipse.mylyn.internal.tasks.core.data.TaskDataManager; import org.eclipse.mylyn.internal.tasks.core.data.TaskDataManagerEvent; +import org.eclipse.mylyn.internal.tasks.core.sync.SynchronizeTasksJob; import org.eclipse.mylyn.internal.tasks.ui.ITaskListNotificationProvider; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.internal.tasks.ui.views.PresentationFilter; @@ -93,25 +94,16 @@ public class TaskListNotifier implements ITaskDataManagerListener, ITaskListNoti @Override public void taskDataUpdated(TaskDataManagerEvent event) { - if (event.getToken() != null && event.getTaskDataChanged()) { - // always compute the incoming message as it may be used outside of the notification + // Events from SynchronizeQueryJobs end up with incorrect diffs + // Only notify for the subsequent SynchronizeTasksJobs + if (event.getTaskChanged() && event.getData() instanceof SynchronizeTasksJob) { + + // Always record the notification text, it may be read outside of the notification + // The text does not need a token to be recorded, and manually synchronized tasks will not have an associated token recordNotificationText(event); - if (isEnabled()) { - if (PresentationFilter.getInstance().isInVisibleQuery(event.getTask())) { - AbstractRepositoryConnectorUi connectorUi = TasksUi - .getRepositoryConnectorUi(event.getTaskData().getConnectorKind()); - if (!connectorUi.hasCustomNotifications()) { - TaskListNotification notification = getNotification(event.getTask(), event.getToken()); - if (notification != null) { - synchronized (notificationQueue) { - if (enabled) { - notificationQueue.add(notification); - } - } - } - } - } + if (shouldDisplayNotification(event)) { + queueNotification(event); } } } @@ -134,6 +126,27 @@ public class TaskListNotifier implements ITaskDataManagerListener, ITaskListNoti return null; } + private boolean shouldDisplayNotification(TaskDataManagerEvent event) { + return event.getToken() != null && isEnabled() + && PresentationFilter.getInstance().isInVisibleQuery(event.getTask()); + } + + private void queueNotification(TaskDataManagerEvent event) { + AbstractRepositoryConnectorUi connectorUi = TasksUi + .getRepositoryConnectorUi(event.getTaskData().getConnectorKind()); + + if (!connectorUi.hasCustomNotifications()) { + TaskListNotification notification = getNotification(event.getTask(), event.getToken()); + if (notification != null) { + synchronized (notificationQueue) { + if (enabled) { + notificationQueue.add(notification); + } + } + } + } + } + public Set<AbstractUiNotification> getNotifications() { synchronized (notificationQueue) { if (notificationQueue.isEmpty()) { diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListToolTip.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListToolTip.java index be1cecf01..f09627bc3 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListToolTip.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListToolTip.java @@ -322,7 +322,7 @@ public class TaskListToolTip extends GradientToolTip { if (element instanceof ITask) { ITask task = (ITask) element; if (task.getSynchronizationState().isIncoming()) { - task.getAttribute(TaskListNotifier.KEY_INCOMING_NOTIFICATION_TEXT); + text = task.getAttribute(TaskListNotifier.KEY_INCOMING_NOTIFICATION_TEXT); if (Strings.isNullOrEmpty(text)) { TaskListNotifier notifier = new TaskListNotifier(TasksUiPlugin.getTaskDataManager(), TasksUiPlugin.getDefault().getSynchronizationManger()); |