Index: taskbar.kcfg
===================================================================
--- taskbar.kcfg	(revision 548422)
+++ taskbar.kcfg	(working copy)
@@ -117,6 +117,11 @@
     </group>
 
     <group name="Appearance">
+        <entry key="AttentionBlinkIterations" type="Int">
+            <default>4</default>
+            <label>The number of times to blink a taskbar button when a window asks for attention. Setting this to 1000 or greater causes the button to blink forever.</label>
+            <min>0</min>
+        </entry>
         <entry key="DrawButtons" type="Bool" >
             <default>false</default>
             <label>Draw taskbar entries "flat" and not as a button</label>
Index: taskcontainer.cpp
===================================================================
--- taskcontainer.cpp	(revision 548422)
+++ taskcontainer.cpp	(working copy)
@@ -268,10 +268,20 @@
 void TaskContainer::attentionTimerFired()
 {
     assert( attentionState != -1 );
-    if( attentionState < ATTENTION_BLINK_TIMEOUT )
+    if (attentionState < TaskBarSettings::attentionBlinkIterations()*2)
+    {
         ++attentionState;
+    }
+    else if (TaskBarSettings::attentionBlinkIterations() < 1000)
+    {
+        attentionTimer.stop();
+    }
     else
-        attentionTimer.stop();
+    {
+        // we have a "forever" blinker (attentionBlinkIterations > 999) and have reached
+        // the upper limit. so we need to decrement the attentionState to make it blink
+        --attentionState;
+    }
     update();
 }
 
@@ -499,7 +509,7 @@
 
         if (task->demandsAttention())
         {
-            demandsAttention = attentionState == ATTENTION_BLINK_TIMEOUT ||
+            demandsAttention = attentionState == TaskBarSettings::attentionBlinkIterations() ||
                                attentionState % 2 == 0;
         }
     }
