X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmoveresize.c;h=cb0d21018f0252123ea4e63ea175431930436975;hb=bb97a20777e74d681e5f1912f5b243f19253600b;hp=6dcadd66cbf3c0d26f42567e6dfcef7723af592d;hpb=aeac3b735bf4caf7c014c58c1271b2cbe5aedd80;p=chaz%2Fopenbox diff --git a/openbox/moveresize.c b/openbox/moveresize.c index 6dcadd66..cb0d2101 100644 --- a/openbox/moveresize.c +++ b/openbox/moveresize.c @@ -112,7 +112,7 @@ static void popup_coords(ObClient *c, const gchar *format, gint a, gint b) c->frame->area.x + c->frame->area.width / 2, c->frame->area.y + c->frame->area.height / 2); else /* Fixed */ { - Rect const *area = screen_physical_area_active(); + const Rect *area = screen_physical_area_active(); gint gravity, x, y; x = config_resize_popup_fixed.x.pos; @@ -388,7 +388,7 @@ static void do_resize(void) ce.xclient.window = moveresize_client->window; ce.xclient.format = 32; ce.xclient.data.l[0] = OBT_PROP_ATOM(NET_WM_SYNC_REQUEST); - ce.xclient.data.l[1] = event_curtime; + ce.xclient.data.l[1] = event_time(); ce.xclient.data.l[2] = XSyncValueLow32(val); ce.xclient.data.l[3] = XSyncValueHigh32(val); ce.xclient.data.l[4] = 0l; @@ -529,6 +529,34 @@ static void calc_resize(gboolean keyboard, gint keydist, gint *dw, gint *dh, *dh = nh - oh; } +static void edge_warp_move_ptr(void) +{ + gint x, y; + const Rect* a; + + screen_pointer_pos(&x, &y); + a = screen_physical_area_all_monitors(); + + switch (edge_warp_dir) { + case OB_DIRECTION_NORTH: + y = a->height - 1; + break; + case OB_DIRECTION_EAST: + x = a->x; + break; + case OB_DIRECTION_SOUTH: + y = a->y; + break; + case OB_DIRECTION_WEST: + x = a->width - 1; + break; + default: + g_assert_not_reached(); + } + + XWarpPointer(obt_display, 0, obt_root(ob_screen), 0, 0, 0, 0, x, y); +} + static gboolean edge_warp_delay_func(gpointer data) { guint d; @@ -537,7 +565,10 @@ static gboolean edge_warp_delay_func(gpointer data) after that */ if (edge_warp_odd) { d = screen_find_desktop(screen_desktop, edge_warp_dir, TRUE, FALSE); - if (d != screen_desktop) screen_set_desktop(d, TRUE); + if (d != screen_desktop) { + if (config_mouse_screenedgewarp) edge_warp_move_ptr(); + screen_set_desktop(d, TRUE); + } } edge_warp_odd = !edge_warp_odd; @@ -554,7 +585,7 @@ static void do_edge_warp(gint x, gint y) dir = -1; for (i = 0; i < screen_num_monitors; ++i) { - Rect const *a = screen_physical_area_monitor(i); + const Rect *a = screen_physical_area_monitor(i); if (x == RECT_LEFT(*a)) dir = OB_DIRECTION_WEST; if (x == RECT_RIGHT(*a)) dir = OB_DIRECTION_EAST; if (y == RECT_TOP(*a)) dir = OB_DIRECTION_NORTH; @@ -916,7 +947,7 @@ gboolean moveresize_event(XEvent *e) if (sym == XK_Escape) { moveresize_end(TRUE); used = TRUE; - } else if (sym == XK_Return) { + } else if (sym == XK_Return || sym == XK_KP_Enter) { moveresize_end(FALSE); used = TRUE; } else if (sym == XK_Right || sym == XK_Left ||