c->frame->area.x + c->frame->area.width / 2,
c->frame->area.y + c->frame->area.height / 2);
else /* Fixed */ {
- Rect *area = screen_physical_area_active();
+ const Rect *area = screen_physical_area_active();
gint gravity, x, y;
x = config_resize_popup_fixed.x.pos;
}
popup_position(popup, gravity, x, y);
-
- g_free(area);
}
popup_show(popup, text);
g_free(text);
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;
*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;
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;
dir = -1;
for (i = 0; i < screen_num_monitors; ++i) {
- Rect *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;
{
dir = -1;
}
- g_free(a);
}
if (dir != edge_warp_dir) {
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 ||