1
=== modified file 'src/snap.cpp'
2
Index: compiz-plugins-main-0.9.6/snap/src/snap.cpp
3
===================================================================
4
--- compiz-plugins-main-0.9.6.orig/snap/src/snap.cpp 2011-10-12 10:51:43.636001732 +0200
5
+++ compiz-plugins-main-0.9.6/snap/src/snap.cpp 2011-10-12 10:51:43.680001950 +0200
7
* Wrapper functions to avoid infinite notify loops
10
-SnapWindow::move (int dx, int dy)
11
+SnapWindow::move (int dx, int dy, bool sync)
14
window->move (dx, dy, true);
15
- screen->warpPointer (dx, dy);
16
+ /* warp the pointer in the case of
19
+ window->syncPosition ();
28
+ move (min, 0, false);
32
+ move (-min, 0, false);
36
+ move (0, min, false);
40
+ move (0, -min, false);
45
* Call the previous function for each of the 4 sides of the window
48
-SnapWindow::moveCheckEdges ()
49
+SnapWindow::moveCheckEdges (int snapDirection)
51
CompRect input (window->borderRect ());
52
moveCheckNearestEdge (input.left (), input.top (), input.bottom (),
53
- true, RightEdge, HorizontalSnap);
54
+ true, RightEdge, HorizontalSnap & snapDirection);
55
moveCheckNearestEdge (input.right (), input.top (), input.bottom (),
56
- false, LeftEdge, HorizontalSnap);
57
+ false, LeftEdge, HorizontalSnap & snapDirection);
58
moveCheckNearestEdge (input.top (), input.left (), input.right (),
59
- true, BottomEdge, VerticalSnap);
60
+ true, BottomEdge, VerticalSnap & snapDirection);
61
moveCheckNearestEdge (input.bottom (), input.left (), input.right (),
62
- false, TopEdge, VerticalSnap);
63
+ false, TopEdge, VerticalSnap & snapDirection);
66
// Edges checking functions (resize) -------------------------------------------
71
+SnapWindow::stateChangeNotify (unsigned int lastState)
73
+ if (window->state () & CompWindowStateMaximizedHorzMask)
75
+ snapGeometry.setWidth (0);
76
+ snapGeometry.setX (0);
77
+ snapDirection &= VerticalSnap;
80
+ if (window->state () & CompWindowStateMaximizedVertMask)
82
+ snapGeometry.setHeight (0);
83
+ snapGeometry.setY (0);
84
+ snapDirection &= HorizontalSnap;
87
+ window->stateChangeNotify (lastState);
91
SnapWindow::moveNotify (int dx, int dy, bool immediate)
93
+ unsigned int allowedSnapDirection = VerticalSnap | HorizontalSnap;
96
window->moveNotify (dx, dy, immediate);
98
// we have to avoid snapping but there's still some buffered moving
99
if (!ss->snapping && (m_dx || m_dy))
102
+ move (m_dx, m_dy, false);
107
// don't snap maximized windows
108
if (window->state () & CompWindowStateMaximizedHorzMask)
110
+ allowedSnapDirection &= ~(VerticalSnap);
114
if (window->state () & CompWindowStateMaximizedVertMask)
116
+ allowedSnapDirection &= ~(HorizontalSnap);
120
// avoiding snap, nothing buffered
124
+ dx = snapGeometry.x () - window->geometry ().x ();
125
+ dy = snapGeometry.y () - window->geometry ().y ();
127
// apply edge resistance
128
if (ss->optionGetSnapTypeMask () & SnapTypeEdgeResistanceMask)
130
@@ -707,16 +740,15 @@
131
// by buffered dx - dx
132
if (!snapGeometry.isEmpty () && snapDirection & HorizontalSnap)
136
if (m_dx < ss->optionGetResistanceDistance ()
137
&& m_dx > -ss->optionGetResistanceDistance ())
139
- dx = snapGeometry.x () - window->geometry ().x ();
141
+ move (dx, 0, false);
145
- move (m_dx - dx, 0);
146
+ move (m_dx - dx, 0, true);
148
snapDirection &= VerticalSnap;
150
@@ -724,16 +756,15 @@
151
// Same for vertical snapping and dy
152
if (!snapGeometry.isEmpty () && snapDirection & VerticalSnap)
156
if (m_dy < ss->optionGetResistanceDistance ()
157
&& m_dy > -ss->optionGetResistanceDistance ())
159
- dy = snapGeometry.y () - window->geometry ().y ();
161
+ move (0, dy, false);
165
- move (0, m_dy - dy);
166
+ move (0, m_dy - dy, true);
168
snapDirection &= HorizontalSnap;
171
// If we don't already snap vertically and horizontally,
172
// check edges status
173
if (snapDirection != (VerticalSnap | HorizontalSnap))
175
+ moveCheckEdges (allowedSnapDirection);
179
Index: compiz-plugins-main-0.9.6/snap/src/snap.h
180
===================================================================
181
--- compiz-plugins-main-0.9.6.orig/snap/src/snap.h 2011-10-12 10:51:43.528001206 +0200
182
+++ compiz-plugins-main-0.9.6/snap/src/snap.h 2011-10-12 10:51:43.680001950 +0200
184
void resizeNotify (int dx, int dy, int dwidth, int dheight);
185
void moveNotify (int dx, int dy, bool immediate);
186
void grabNotify (int x, int y, unsigned int state, unsigned int mask);
187
+ void stateChangeNotify (unsigned int lastState);
188
void ungrabNotify ();
195
- void move (int dx, int dy);
196
+ void move (int dx, int dy, bool sync);
197
void resize (int dx, int dy, int dwidth, int dheight);
199
void addEdge (Window id, int position, int start, int end,
201
void moveCheckNearestEdge (int position, int start, int end,
202
bool before, EdgeType type,
204
- void moveCheckEdges ();
205
+ void moveCheckEdges (int snapDirection);
206
void resizeCheckNearestEdge (int position, int start, int end,
207
bool before, EdgeType type,