--- libwnck/window.c +++ libwnck/window.c @@ -1165,6 +1165,20 @@ window->priv->xwindow); } +void +wnck_window_move (WnckWindow *window, int x, int y) +{ + g_return_if_fail (WNCK_IS_WINDOW (window)); + + _wnck_move_resize (WNCK_SCREEN_XSCREEN (window->priv->screen), + window->priv->xwindow, + TRUE, + FALSE, + x, y, + 0, 0); +} + + /** * wnck_window_get_workspace: * @window: a #WnckWindow --- libwnck/window.h +++ libwnck/window.h @@ -217,6 +217,7 @@ void wnck_window_unstick (WnckWindow *window); void wnck_window_keyboard_move (WnckWindow *window); void wnck_window_keyboard_size (WnckWindow *window); +void wnck_window_move (WnckWindow *window, int x, int y); WnckWorkspace* wnck_window_get_workspace (WnckWindow *window); void wnck_window_move_to_workspace (WnckWindow *window, --- libwnck/xutils.c +++ libwnck/xutils.c @@ -919,6 +919,38 @@ } void +_wnck_move_resize (Screen *screen, + Window xwindow, + gboolean move, + gboolean resize, + int x, + int y, + unsigned int width, + unsigned int height) +{ + XEvent xev; + + xev.xclient.type = ClientMessage; + xev.xclient.serial = 0; + xev.xclient.send_event = True; + xev.xclient.display = gdk_display; + xev.xclient.window = xwindow; + xev.xclient.message_type = _wnck_atom_get ("_NET_MOVERESIZE_WINDOW"); + xev.xclient.format = 32; + xev.xclient.data.l[0] = ((move) ? 3 << 7 : 0) | ((resize) ? 3 << 9 : 0); + xev.xclient.data.l[1] = x; + xev.xclient.data.l[2] = y; + xev.xclient.data.l[3] = width; + xev.xclient.data.l[4] = height; + + XSendEvent (gdk_display, + RootWindowOfScreen (screen), + False, + SubstructureRedirectMask | SubstructureNotifyMask, + &xev); +} + +void _wnck_change_state (Screen *screen, Window xwindow, gboolean add, --- libwnck/xutils.h +++ libwnck/xutils.h @@ -126,6 +126,15 @@ void _wnck_keyboard_size (Screen *screen, Window xwindow); +void _wnck_move_resize (Screen *screen, + Window xwindow, + gboolean move, + gboolean resize, + int x, + int y, + unsigned int width, + unsigned int height); + void _wnck_toggle_showing_desktop (Screen *screen, gboolean show);