Time event_lasttime = 0;
-/*! A list of all possible combinations of keyboard lock masks */
-static unsigned int mask_list[8];
/*! The value of the mask for the NumLock modifier */
-static unsigned int NumLockMask;
+unsigned int NumLockMask;
/*! The value of the mask for the ScrollLock modifier */
-static unsigned int ScrollLockMask;
+unsigned int ScrollLockMask;
/*! The key codes for the modifier keys */
static XModifierKeymap *modmap;
/*! Table of the constant modifier masks */
ScrollLockMask = mask_table[cnt / modmap->max_keypermod];
}
}
-
- mask_list[0] = 0;
- mask_list[1] = LockMask;
- mask_list[2] = NumLockMask;
- mask_list[3] = LockMask | NumLockMask;
- mask_list[4] = ScrollLockMask;
- mask_list[5] = ScrollLockMask | LockMask;
- mask_list[6] = ScrollLockMask | NumLockMask;
- mask_list[7] = ScrollLockMask | LockMask | NumLockMask;
}
void event_shutdown()
case EnterNotify:
case LeaveNotify:
event_lasttime = e->xcrossing.time;
+ /* XXX this caused problems before... but i don't remember why. hah.
+ so back it is. if problems arise again, then try filtering on the
+ detail instead of the mode. */
+ if (e->xcrossing.mode != NotifyNormal) return;
break;
}
switch (e->type) {
case FocusIn:
- client->focused = TRUE;
- engine_frame_adjust_focus(client->frame);
+ if (focus_client != client)
+ focus_set_client(client);
/* focus state can affect the stacking layer */
client_calc_layer(client);
- if (focus_client != client)
- focus_set_client(client);
+ engine_frame_adjust_focus(client->frame);
break;
case FocusOut:
- client->focused = FALSE;
- engine_frame_adjust_focus(client->frame);
+ if (focus_client == client)
+ focus_set_client(NULL);
/* focus state can affect the stacking layer */
client_calc_layer(client);
- if (focus_client == client)
- focus_set_client(NULL);
+ engine_frame_adjust_focus(client->frame);
break;
case ConfigureRequest:
g_message("ConfigureRequest for window %lx", client->window);
/* we shouldn't be able to get this unless we're iconic */
g_assert(client->iconic);
- /*HOOKFIRECLIENT(requestactivate, client);XXX*/
+ if (screen_showing_desktop)
+ screen_show_desktop(FALSE);
+ client_iconify(client, FALSE, TRUE);
+ if (!client->frame->visible)
+ /* if its not visible still, then don't mess with it */
+ break;
+ if (client->shaded)
+ client_shade(client, FALSE);
+ client_focus(client);
+ stacking_raise(client);
break;
case ClientMessage:
/* validate cuz we query stuff off the client here */
else if (!client->frame->visible)
/* if its not visible for other reasons, then don't mess
with it */
- return;
- /*HOOKFIRECLIENT(requestactivate, client);XXX*/
+ break;
+ if (client->shaded)
+ client_shade(client, FALSE);
+ client_focus(client);
+ stacking_raise(client);
}
break;
case PropertyNotify: