Index: trac/Timeline.py
===================================================================
--- trac/Timeline.py	(revision 1011)
+++ trac/Timeline.py	(working copy)
@@ -35,7 +35,7 @@
     template_rss_name = 'timeline_rss.cs'
 
     def get_info (self, start, stop, maxrows, tickets,
-                  changeset, wiki, milestone):
+                  changeset, wiki, milestone, foruser=''):
         cursor = self.db.cursor ()
 
         tickets = tickets and self.perm.has_permission(perm.TICKET_VIEW)
@@ -46,6 +46,11 @@
         if tickets == changeset == wiki == milestone == 0:
             return []
 
+        filter_by_user = 0
+        if foruser:
+            filter_by_user = 1
+            if foruser == '(empty)': foruser = ''
+
         CHANGESET = 1
         NEW_TICKET = 2
         CLOSED_TICKET = 3
@@ -104,6 +109,8 @@
             row = cursor.fetchone()
             if not row:
                 break
+            if filter_by_user and row['author'] != foruser:
+                continue
             t = time.localtime(int(row['time']))
             gmt = time.gmtime(int(row['time']))
             item = {'time': time.strftime('%X', t),
@@ -192,6 +199,7 @@
 
         _from = self.args.get('from', '')
         _daysback = self.args.get('daysback', '')
+        foruser = self.args.get('user', '')
 
         # Parse the from date and adjust the timestamp to the last second of the day
         try:
@@ -207,6 +215,7 @@
         self.req.hdf.setValue('timeline.from',
                               time.strftime('%x', time.localtime(_from)))
         self.req.hdf.setValue('timeline.daysback', str(daysback))
+        self.req.hdf.setValue('timeline.user', foruser)
 
         stop  = _from
         start = stop - daysback * 86400
@@ -229,7 +238,7 @@
             self.req.hdf.setValue('timeline.milestone', 'checked')
 
         info = self.get_info (start, stop, maxrows, ticket,
-                              changeset, wiki, milestone)
+                              changeset, wiki, milestone, foruser)
         util.add_dictlist_to_hdf(info, self.req.hdf, 'timeline.items')
         self.req.hdf.setValue('title', 'Timeline')
 
Index: templates/timeline.cs
===================================================================
--- templates/timeline.cs	(revision 1011)
+++ templates/timeline.cs	(working copy)
@@ -40,6 +40,11 @@
       if:timeline.milestone ?>checked="checked"<?cs /if ?> />
     <label for="milestone">Milestones</label>
    </div><?cs /if ?>
+   <div>
+   <label for="user">View changes by</label>
+   <input type="text" size="10" id="user" name="user"
+       value="<?cs var:timeline.user ?>" /> (empty for all users)
+   </div>
   </fieldset>
   <div class="buttons">
    <input type="submit" value="Update" />

