[gnome-shell] Add scroll-wheel support to the calendar



commit 061a2cfbfb92fa34806a9ff5c91fe707b0eb0e32
Author: Owen W. Taylor <otaylor fishsoup net>
Date:   Thu Oct 1 15:18:20 2009 -0400

    Add scroll-wheel support to the calendar
    
    Make the calendar reactive and handle scroll events to change the month.
    (GtkCalendar and hence the old gnome-panel calendar supported this and
    it is apparently a handy way to flip through months.)
    
    The padding is moved from the CalenderPopup to the Calendar so that the
    scroll region extends all the way to the edge of the popup.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=596432

 data/theme/gnome-shell.css |    3 +++
 js/ui/calendar.js          |   20 +++++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletions(-)
---
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index ae59609..dc66b95 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -116,6 +116,9 @@ StScrollBar StButton#vhandle:hover
     background: rgba(0,0,0,0.9);
     border: 1px solid rgba(128,128,128,0.45);
     color: white;
+}
+
+#calendarPopup .calendar {
     padding: 10px;
 }
 
diff --git a/js/ui/calendar.js b/js/ui/calendar.js
index 633af04..de7f402 100644
--- a/js/ui/calendar.js
+++ b/js/ui/calendar.js
@@ -1,5 +1,6 @@
 /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
 
+const Clutter = imports.gi.Clutter;
 const Lang = imports.lang;
 const St = imports.gi.St;
 
@@ -51,7 +52,11 @@ Calendar.prototype = {
         this.date = new Date();
 
         this.actor = new St.Table({ homogeneous: false,
-                                    style_class: "calendar" });
+                                    style_class: "calendar",
+                                    reactive: true });
+
+        this.actor.connect('scroll-event',
+                           Lang.bind(this, this._onScroll));
 
         // Top line of the calendar '<| September 2009 |>'
         this._topBox = new St.BoxLayout();
@@ -93,6 +98,19 @@ Calendar.prototype = {
         }
     },
 
+    _onScroll : function(actor, event) {
+        switch (event.get_scroll_direction()) {
+        case Clutter.ScrollDirection.UP:
+        case Clutter.ScrollDirection.LEFT:
+            this._prevMonth();
+            break;
+        case Clutter.ScrollDirection.DOWN:
+        case Clutter.ScrollDirection.RIGHT:
+            this._nextMonth();
+            break;
+        }
+    },
+
     _prevMonth: function() {
         if (this.date.getMonth() == 0) {
             this.date.setMonth(11);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]