[SF#841] Fix wrong state change on task button when hovered.
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Sat, 24 Dec 2016 14:40:29 +0000 (16:40 +0200)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Sat, 24 Dec 2016 14:40:29 +0000 (16:40 +0200)
It shouldn't receive selected state until window has urgency.

ChangeLog
plugins/task-button.c

index f4e4f61..2f662bc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,8 @@
 * Fixed battery selection if battery detached but another is available.
 * Fixed battery percentage calculations if charge isn't available but
     energy is, it appears broken in 0.9.0.
+* Fixed wrong state change on task button when hovered, it shouldn't
+    receive selected state until window has urgency.
 
 0.9.1
 -------------------------------------------------------------------------
index 6f10277..33cc1e2 100644 (file)
@@ -100,7 +100,8 @@ struct _TaskButton
     unsigned int set_bold :1;   /* flat buttons only: TRUE if set bold */
     unsigned int visible :1;    /* TRUE if any window shown on current desktop */
     unsigned int same_name :1;  /* TRUE if all visible windows have the same name */
-    unsigned int entered_state          :1; /* True if cursor is inside taskbar button */
+    unsigned int entered_state :1; /* TRUE if cursor is inside taskbar button */
+    unsigned int has_flash :1;  /* used by task_button_set_flash_state() */
 };
 
 enum {
@@ -1803,9 +1804,15 @@ void task_button_set_flash_state(TaskButton *button, gboolean state)
         state = button->entered_state;
     if (button->flags.flat_button)
         task_draw_label(button, state, FALSE); /* we have to redraw bold text state */
-    else
+    else if (has_flash)
         gtk_widget_set_state(GTK_WIDGET(button),
                              state ? GTK_STATE_SELECTED : GTK_STATE_NORMAL);
+    else if (!button->entered_state && button->has_flash)
+        /* if flash state just disappeared and button isn't hovered then
+           update the state, otherwise it will be updated on mouse leave */
+        gtk_widget_set_state(GTK_WIDGET(button),
+                             button->last_focused == NULL ? GTK_STATE_NORMAL : GTK_STATE_ACTIVE);
+    button->has_flash = has_flash;
 }
 
 /* adds task only if it's the same class */