switch (((XkbAnyEvent*)e)->xkb_type) {
case XkbBellNotify:
window = ((XkbBellNotifyEvent*)e)->window;
+ break;
default:
window = None;
}
else if (e->type == MappingNotify) {
/* keyboard layout changes for modifier mapping changes. reload the
modifier map, and rebind all the key bindings as appropriate */
- ob_debug("Keyboard map changed. Reloading keyboard bindings.");
- ob_set_state(OB_STATE_RECONFIGURING);
- obt_keyboard_reload();
- keyboard_rebind();
- ob_set_state(OB_STATE_RUNNING);
+ if (config_keyboard_rebind_on_mapping_notify) {
+ ob_debug("Keyboard map changed. Reloading keyboard bindings.");
+ ob_set_state(OB_STATE_RECONFIGURING);
+ obt_keyboard_reload();
+ keyboard_rebind();
+ ob_set_state(OB_STATE_RUNNING);
+ }
}
else if (e->type == ClientMessage) {
/* This is for _NET_WM_REQUEST_FRAME_EXTENTS messages. They come for
if (d > 0 && d <= 1000)
screen_set_num_desktops(d);
} else if (msgtype == OBT_PROP_ATOM(NET_SHOWING_DESKTOP)) {
- screen_show_desktop(e->xclient.data.l[0] != 0, NULL);
+ ObScreenShowDestopMode show_mode;
+ if (e->xclient.data.l[0] != 0)
+ show_mode = SCREEN_SHOW_DESKTOP_UNTIL_WINDOW;
+ else
+ show_mode = SCREEN_SHOW_DESKTOP_NO;
+ screen_show_desktop(show_mode, NULL);
} else if (msgtype == OBT_PROP_ATOM(OB_CONTROL)) {
ob_debug("OB_CONTROL: %d", e->xclient.data.l[0]);
if (e->xclient.data.l[0] == 1)
}
if (e->xconfigurerequest.value_mask & CWStackMode) {
- ObClient *sibling = NULL;
+ ObWindow *sibling = NULL;
gulong ignore_start;
gboolean ok = TRUE;
if (win && WINDOW_IS_CLIENT(win) &&
WINDOW_AS_CLIENT(win) != client)
{
- sibling = WINDOW_AS_CLIENT(win);
+ sibling = win;
+ }
+ else if (win && WINDOW_IS_DOCK(win))
+ {
+ sibling = win;
}
else
/* an invalid sibling was specified so don't restack at
"invalid source indication %ld",
client->title, e->xclient.data.l[0]);
} else {
- ObClient *sibling = NULL;
+ ObWindow *sibling = NULL;
if (e->xclient.data.l[1]) {
ObWindow *win = window_find(e->xclient.data.l[1]);
if (WINDOW_IS_CLIENT(win) &&
WINDOW_AS_CLIENT(win) != client)
{
- sibling = WINDOW_AS_CLIENT(win);
+ sibling = win;
+ }
+ if (WINDOW_IS_DOCK(win))
+ {
+ sibling = win;
}
if (sibling == NULL)
ob_debug_type(OB_DEBUG_APP_BUGS,
switch (ev->type) {
case MotionNotify:
- // We need to catch MotionNotify in addition to EnterNotify because
- // it is possible for the menu to be opened under the mouse cursor, and
- // moving the mouse should select the item.
+ /* We need to catch MotionNotify in addition to EnterNotify because
+ it is possible for the menu to be opened under the mouse cursor, and
+ moving the mouse should select the item. */
if ((e = g_hash_table_lookup(menu_frame_map, &ev->xmotion.window))) {
if (e->ignore_enters)
--e->ignore_enters;
}
break;
case LeaveNotify:
- /*ignore leaves when we're already in the window */
+ /* ignore leaves when we're already in the window */
if (ev->xcrossing.detail == NotifyInferior)
break;
if (client_focus(d->client) && config_focus_raise)
stacking_raise(CLIENT_AS_WINDOW(d->client));
event_curtime = old;
+
return FALSE; /* no repeat */
}
event_curserial = d->serial;
focus_nothing();
event_curtime = old;
+
return FALSE; /* no repeat */
}