summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark McLoughlin <mark@skynet.ie>2004-04-14 14:55:03 +0000
committerMark McLoughlin <markmc@src.gnome.org>2004-04-14 14:55:03 +0000
commit568532707466721e18a8cc7ef238d81b5eebf37d (patch)
tree939391856d0b23213e8924fe686a172c3fa62fdc
parentc95175a0c4605d3aa6564c4268e2fa7b072f5a29 (diff)
downloadlibwnck-568532707466721e18a8cc7ef238d81b5eebf37d.tar.gz
Patch from Kim Woelders in bug #122086.
2004-04-14 Mark McLoughlin <mark@skynet.ie> Patch from Kim Woelders in bug #122086. * libwnck/pager.c: (wnck_pager_button_release): only switch workspaces if actually clicking on a different workspace and move to viewport co-ordinates (0, 0) rather then where the mouse actually clicks.
-rw-r--r--ChangeLog9
-rw-r--r--libwnck/pager.c46
2 files changed, 37 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index fd344a6..683ea57 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2004-04-14 Mark McLoughlin <mark@skynet.ie>
+
+ Patch from Kim Woelders in bug #122086.
+
+ * libwnck/pager.c: (wnck_pager_button_release): only switch
+ workspaces if actually clicking on a different workspace
+ and move to viewport co-ordinates (0, 0) rather then where
+ the mouse actually clicks.
+
2004-04-10 Guntupalli Karunakar <karunakar@freedomink.org>
* configure.in: Added "gu" (Gujarati) to ALL_LINGUAS.
diff --git a/libwnck/pager.c b/libwnck/pager.c
index db61895..7359604 100644
--- a/libwnck/pager.c
+++ b/libwnck/pager.c
@@ -1146,25 +1146,35 @@ wnck_pager_button_release (GtkWidget *widget,
{
i = workspace_at_point (pager, event->x, event->y, &viewport_x, &viewport_y);
- if (i >= 0)
- {
- space = wnck_screen_get_workspace (pager->priv->screen, i);
-
- if (space)
- {
- wnck_workspace_activate (space);
-
- /* EWMH only lets us move the viewport for the active workspace,
- * but we just go ahead and hackily assume that the activate
- * just above takes effect prior to moving the viewport
- */
- wnck_screen_move_viewport (pager->priv->screen,
- viewport_x, viewport_y);
+ if (i >= 0 && (space = wnck_screen_get_workspace (pager->priv->screen, i)))
+ {
+ int screen_width, screen_height;
+
+ /* Don't switch the desktop if we're already there */
+ if (space != wnck_screen_get_active_workspace (pager->priv->screen))
+ wnck_workspace_activate (space);
+
+ /* EWMH only lets us move the viewport for the active workspace,
+ * but we just go ahead and hackily assume that the activate
+ * just above takes effect prior to moving the viewport
+ */
+
+ /* Transform the pointer location to viewport origin, assuming
+ * that we want the nearest "regular" viewport containing the
+ * pointer.
+ */
+ screen_width = wnck_screen_get_width (pager->priv->screen);
+ screen_height = wnck_screen_get_height (pager->priv->screen);
+ viewport_x = (viewport_x / screen_width) * screen_width;
+ viewport_y = (viewport_y / screen_height) * screen_height;
- if (pager->priv->drag_window)
- wnck_window_activate (pager->priv->drag_window);
- }
- }
+ if (wnck_workspace_get_viewport_x (space) != viewport_x ||
+ wnck_workspace_get_viewport_y (space) != viewport_y)
+ wnck_screen_move_viewport (pager->priv->screen, viewport_x, viewport_y);
+
+ if (pager->priv->drag_window)
+ wnck_window_activate (pager->priv->drag_window);
+ }
if (pager->priv->drag_window)
wnck_pager_clear_drag (pager);