|
Link Here
|
| 1149 |
|
1149 |
|
| 1150 |
if (space) |
1150 |
if (space) |
| 1151 |
{ |
1151 |
{ |
| 1152 |
wnck_workspace_activate (space); |
1152 |
#define MOVE_VIEWPORT_IN_SCREEN_SIZE_STEPS 1 |
|
|
1153 |
#if MOVE_VIEWPORT_IN_SCREEN_SIZE_STEPS |
| 1154 |
int screen_width, screen_height; |
| 1155 |
#else /* MOVE_VIEWPORT_CENTERED_ON_PONTER */ |
| 1156 |
int screen_width, screen_height, max_x, max_y; |
| 1157 |
#endif |
| 1158 |
|
| 1159 |
/* Don't switch the desktop if we're already there */ |
| 1160 |
if (space != wnck_screen_get_active_workspace (pager->priv->screen)) |
| 1161 |
wnck_workspace_activate (space); |
| 1153 |
|
1162 |
|
| 1154 |
/* EWMH only lets us move the viewport for the active workspace, |
1163 |
/* EWMH only lets us move the viewport for the active workspace, |
| 1155 |
* but we just go ahead and hackily assume that the activate |
1164 |
* but we just go ahead and hackily assume that the activate |
| 1156 |
* just above takes effect prior to moving the viewport |
1165 |
* just above takes effect prior to moving the viewport |
| 1157 |
*/ |
1166 |
*/ |
| 1158 |
wnck_screen_move_viewport (pager->priv->screen, |
1167 |
screen_width = wnck_screen_get_width (pager->priv->screen); |
| 1159 |
viewport_x, viewport_y); |
1168 |
screen_height = wnck_screen_get_height (pager->priv->screen); |
|
|
1169 |
#if MOVE_VIEWPORT_IN_SCREEN_SIZE_STEPS |
| 1170 |
/* Transform the pointer location to viewport origin, assuming |
| 1171 |
* that we want the nearest "regular" viewport containing the |
| 1172 |
* pointer. |
| 1173 |
*/ |
| 1174 |
viewport_x = (viewport_x / screen_width) * screen_width; |
| 1175 |
viewport_y = (viewport_y / screen_height) * screen_height; |
| 1176 |
#else /* MOVE_VIEWPORT_CENTERED_ON_PONTER */ |
| 1177 |
/* Transform the pointer location to viewport origin, assuming |
| 1178 |
* that we want the pointer centered in the viewport. |
| 1179 |
* Keep the viewport entirely on the desktop. |
| 1180 |
*/ |
| 1181 |
max_x = wnck_workspace_get_width (space) - screen_width; |
| 1182 |
max_y = wnck_workspace_get_height (space) - screen_height; |
| 1183 |
viewport_x -= screen_width / 2; |
| 1184 |
if (viewport_x < 0) |
| 1185 |
viewport_x = 0; |
| 1186 |
else if (viewport_x > max_x) |
| 1187 |
viewport_x = max_x; |
| 1188 |
viewport_y -= screen_height / 2; |
| 1189 |
if (viewport_y < 0) |
| 1190 |
viewport_y = 0; |
| 1191 |
else if (viewport_y > max_y) |
| 1192 |
viewport_y = max_y; |
| 1193 |
#endif |
| 1194 |
|
| 1195 |
if (wnck_workspace_get_viewport_x(space) != viewport_x || |
| 1196 |
wnck_workspace_get_viewport_y(space) != viewport_y) |
| 1197 |
wnck_screen_move_viewport (pager->priv->screen, |
| 1198 |
viewport_x, viewport_y); |
| 1160 |
|
1199 |
|
| 1161 |
if (pager->priv->drag_window) |
1200 |
if (pager->priv->drag_window) |
| 1162 |
wnck_window_activate (pager->priv->drag_window); |
1201 |
wnck_window_activate (pager->priv->drag_window); |