don't focus splash screens and toolbars and menus when you click on them. or enter them.

This commit is contained in:
Dana Jansens 2007-05-08 22:29:39 +00:00
parent 9782122339
commit b0f43a1159
4 changed files with 29 additions and 9 deletions

View file

@ -1199,10 +1199,7 @@ void action_execute(union ActionData *data)
void action_activate(union ActionData *data)
{
if (data->client.any.c) {
/* similar to the openbox dock for dockapps, don't let user actions
give focus to 3rd-party docks (panels) either (unless they ask for
it themselves). */
if (data->client.any.c->type != OB_CLIENT_TYPE_DOCK) {
if (!data->any.button || client_mouse_focusable(data->client.any.c)) {
/* if using focus_delay, stop the timer now so that focus doesn't
go moving on us */
event_halt_focus_delay();
@ -1220,10 +1217,7 @@ void action_activate(union ActionData *data)
void action_focus(union ActionData *data)
{
if (data->client.any.c) {
/* similar to the openbox dock for dockapps, don't let user actions
give focus to 3rd-party docks (panels) either (unless they ask for
it themselves). */
if (data->client.any.c->type != OB_CLIENT_TYPE_DOCK) {
if (!data->any.button || client_mouse_focusable(data->client.any.c)) {
/* if using focus_delay, stop the timer now so that focus doesn't
go moving on us */
event_halt_focus_delay();

View file

@ -2394,6 +2394,22 @@ gboolean client_helper(ObClient *self)
self->type == OB_CLIENT_TYPE_TOOLBAR);
}
gboolean client_mouse_focusable(ObClient *self)
{
return !(self->type == OB_CLIENT_TYPE_MENU ||
self->type == OB_CLIENT_TYPE_TOOLBAR ||
self->type == OB_CLIENT_TYPE_SPLASH ||
self->type == OB_CLIENT_TYPE_DOCK);
}
gboolean client_enter_focusable(ObClient *self)
{
/* you can focus desktops but it shouldn't on enter */
return (client_mouse_focusable(self) &&
self->type != OB_CLIENT_TYPE_DESKTOP);
}
static void client_apply_startup_state(ObClient *self, gint x, gint y)
{
gboolean pos = FALSE; /* has the window's position been configured? */

View file

@ -338,6 +338,16 @@ gboolean client_normal(ObClient *self);
(utilty, menu, etc) */
gboolean client_helper(ObClient *self);
/*! Return if the client is a type which should be given focus from mouse
actions like button presses. This doesn't count for focus cycling, different
rules apply to that. */
gboolean client_mouse_focusable(ObClient *self);
/*! Return if the client is a type which should be given focus from the
mouse entering the window. This doesn't count for focus cycling, different
rules apply to that. */
gboolean client_enter_focusable(ObClient *self);
/* Returns if the window is focused */
gboolean client_focused(ObClient *self);

View file

@ -676,7 +676,7 @@ void event_enter_client(ObClient *client)
{
g_assert(config_focus_follow);
if (client_normal(client) && client_can_focus(client)) {
if (client_enter_focusable(client) && client_can_focus(client)) {
if (config_focus_delay) {
ObFocusDelayData *data;