} else if (msgtype == prop_atoms.net_showing_desktop) {
screen_show_desktop(e->xclient.data.l[0] != 0);
} else if (msgtype == prop_atoms.ob_control) {
- if ((Atom)e->xclient.data.l[0] == 1)
- action_run_string("reconfigure", NULL);
- else if ((Atom)e->xclient.data.l[0] == 2)
- action_run_string("restart", NULL);
+ if (e->xclient.data.l[0] == 1)
+ ob_reconfigure();
+ else if (e->xclient.data.l[0] == 2)
+ ob_restart();
}
break;
case PropertyNotify:
client->frame->size.left + client->frame->size.right;
gint fh = h +
client->frame->size.top + client->frame->size.bottom;
+ /* make this rude for size-only changes but not for position
+ changes.. */
+ gboolean moving = ((e->xconfigurerequest.value_mask & CWX) ||
+ (e->xconfigurerequest.value_mask & CWY));
+
client_find_onscreen(client, &newx, &newy, fw, fh,
- FALSE);
+ !moving);
if (e->xconfigurerequest.value_mask & CWX)
x = newx;
if (e->xconfigurerequest.value_mask & CWY)
switch (e->xconfigurerequest.detail) {
case Below:
case BottomIf:
- client_lower(client);
+ /* Apps are so rude. And this is totally disconnected from
+ activation/focus. Bleh. */
+ /*client_lower(client);*/
break;
case Above:
case TopIf:
default:
- client_raise(client);
+ /* Apps are so rude. And this is totally disconnected from
+ activation/focus. Bleh. */
+ /*client_raise(client);*/
break;
}
}
it can happen now when the window is on
another desktop, but we still don't
want it! */
- client_activate(client, FALSE, TRUE);
+ client_activate(client, FALSE, TRUE, CurrentTime);
break;
case ClientMessage:
/* validate cuz we query stuff off the client here */
/* XXX make use of data.l[1] and [2] ! */
client_activate(client, FALSE,
(e->xclient.data.l[0] == 0 ||
- e->xclient.data.l[0] == 2));
+ e->xclient.data.l[0] == 2),
+ e->xclient.data.l[1]);
} else if (msgtype == prop_atoms.net_wm_moveresize) {
- ob_debug("net_wm_moveresize for 0x%lx\n", client->window);
+ ob_debug("net_wm_moveresize for 0x%lx direction %d\n",
+ client->window, e->xclient.data.l[2]);
if ((Atom)e->xclient.data.l[2] ==
prop_atoms.net_wm_moveresize_size_topleft ||
(Atom)e->xclient.data.l[2] ==
e->xclient.data.l[1], e->xclient.data.l[3],
e->xclient.data.l[2]);
}
+ else if ((Atom)e->xclient.data.l[2] ==
+ prop_atoms.net_wm_moveresize_cancel)
+ moveresize_end(TRUE);
} else if (msgtype == prop_atoms.net_moveresize_window) {
gint oldg = client->gravity;
gint tmpg, x, y, w, h;
b == prop_atoms.wm_icon_name)) {
continue;
}
- if ((a == prop_atoms.net_wm_icon ||
- a == prop_atoms.kwm_win_icon)
- &&
- (b == prop_atoms.net_wm_icon ||
- b == prop_atoms.kwm_win_icon))
+ if (a == prop_atoms.net_wm_icon &&
+ b == prop_atoms.net_wm_icon)
continue;
XPutBackEvent(ob_display, &ce);
else if (msgtype == prop_atoms.net_wm_strut) {
client_update_strut(client);
}
- else if (msgtype == prop_atoms.net_wm_icon ||
- msgtype == prop_atoms.kwm_win_icon) {
+ else if (msgtype == prop_atoms.net_wm_icon) {
client_update_icons(client);
}
+ else if (msgtype == prop_atoms.net_wm_user_time) {
+ client_update_user_time(client, TRUE);
+ }
else if (msgtype == prop_atoms.sm_client_id) {
client_update_sm_client_id(client);
}
if (menu_can_hide) {
if ((e = menu_entry_frame_under(ev->xbutton.x_root,
ev->xbutton.y_root)))
- menu_entry_frame_execute(e, ev->xbutton.state);
+ menu_entry_frame_execute(e, ev->xbutton.state,
+ ev->xbutton.time);
else
menu_frame_hide_all();
}
else if (ev->xkey.keycode == ob_keycode(OB_KEY_RETURN)) {
ObMenuFrame *f;
if ((f = find_active_menu()))
- menu_entry_frame_execute(f->selected, ev->xkey.state);
+ menu_entry_frame_execute(f->selected, ev->xkey.state,
+ ev->xkey.time);
} else if (ev->xkey.keycode == ob_keycode(OB_KEY_LEFT)) {
ObMenuFrame *f;
if ((f = find_active_or_last_menu()) && f->parent)