summarylogtreecommitdiffstats
path: root/fix-shinyswitcher-scrolling.patch
blob: 69dcae9c143b4aa52ca02b5b584e0d528df1ec09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
=== modified file 'applets/maintained/shiny-switcher/shinyswitcherapplet.c'
--- applets/maintained/shiny-switcher/shinyswitcherapplet.c	2010-09-12 16:15:07 +0000
+++ applets/maintained/shiny-switcher/shinyswitcherapplet.c	2010-11-02 13:52:43 +0000
@@ -769,7 +769,7 @@
 
 
 static gboolean 
-_scroll_event(GtkWidget *widget, GdkEventMotion *event, AwnShinySwitcher *shinyswitcher)
+_scroll_event(GtkWidget *widget, GdkEventScroll *event, AwnShinySwitcher *shinyswitcher)
 {
   AwnShinySwitcherPrivate * priv = GET_PRIVATE (shinyswitcher);
   WnckWorkspace *cur_space = wnck_screen_get_active_workspace(priv->wnck_screen);
@@ -779,7 +779,7 @@
   {
     if (event->type == GDK_SCROLL)
     {
-      WnckMotionDirection direction1, direction2;
+      WnckMotionDirection left, right, up, down;
 
       switch (priv->mousewheel)
       {
@@ -787,8 +787,10 @@
         case 1:
 
         case 3:
-          direction1 =  WNCK_MOTION_LEFT;
-          direction2 =  WNCK_MOTION_RIGHT;
+          left =  WNCK_MOTION_LEFT;
+          right =  WNCK_MOTION_RIGHT;
+          up = WNCK_MOTION_UP;
+          down = WNCK_MOTION_DOWN;
           break;
 
         case 2:
@@ -796,22 +798,52 @@
         case 4:
 
         default:
-          direction1 =  WNCK_MOTION_RIGHT;
-          direction2 =  WNCK_MOTION_LEFT;
-
+          left =  WNCK_MOTION_RIGHT;
+          right =  WNCK_MOTION_LEFT;
+          up = WNCK_MOTION_DOWN;
+          down = WNCK_MOTION_UP;
       }
 
-      if (event->state & GDK_SHIFT_MASK)
+      if ( (event->direction == GDK_SCROLL_UP) ||
+            (event->direction == GDK_SCROLL_LEFT) )
       {
-        new_space = wnck_workspace_get_neighbor(cur_space, WNCK_MOTION_RIGHT);
+        new_space = wnck_workspace_get_neighbor(cur_space, left);
+        if (new_space == NULL)
+        {
+          new_space = wnck_workspace_get_neighbor(cur_space, up);
+          if (new_space)
+          {
+            for (cur_space = new_space; cur_space; )
+            {
+              cur_space = wnck_workspace_get_neighbor(cur_space, right);
+              if (cur_space)
+              {
+                new_space = cur_space;
+              }
+            }
+          }
+        }
       }
       else
       {
-        new_space = wnck_workspace_get_neighbor(cur_space, WNCK_MOTION_LEFT);
-
+        new_space = wnck_workspace_get_neighbor(cur_space, right);
+        if (!new_space)
+        {
+          new_space = wnck_workspace_get_neighbor(cur_space, down);
+          if (new_space)
+          {
+            for (cur_space = new_space; cur_space; )
+            {
+              cur_space = wnck_workspace_get_neighbor(cur_space, left);
+              if (cur_space)
+              {
+                new_space = cur_space;
+              }
+            }
+          }
+        }
       }
     }
-
     if (new_space)
     {
       wnck_workspace_activate(new_space, event->time); /* FIXME */