diff options
author | Mark McLoughlin <mark@skynet.ie> | 2004-04-14 14:55:03 +0000 |
---|---|---|
committer | Mark McLoughlin <markmc@src.gnome.org> | 2004-04-14 14:55:03 +0000 |
commit | 568532707466721e18a8cc7ef238d81b5eebf37d (patch) | |
tree | 939391856d0b23213e8924fe686a172c3fa62fdc | |
parent | c95175a0c4605d3aa6564c4268e2fa7b072f5a29 (diff) | |
download | libwnck-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-- | ChangeLog | 9 | ||||
-rw-r--r-- | libwnck/pager.c | 46 |
2 files changed, 37 insertions, 18 deletions
@@ -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); |