don't focus splash screens and toolbars and menus when you click on them. or enter them.
This commit is contained in:
parent
9782122339
commit
b0f43a1159
4 changed files with 29 additions and 9 deletions
|
@ -1199,10 +1199,7 @@ void action_execute(union ActionData *data)
|
||||||
void action_activate(union ActionData *data)
|
void action_activate(union ActionData *data)
|
||||||
{
|
{
|
||||||
if (data->client.any.c) {
|
if (data->client.any.c) {
|
||||||
/* similar to the openbox dock for dockapps, don't let user actions
|
if (!data->any.button || client_mouse_focusable(data->client.any.c)) {
|
||||||
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 using focus_delay, stop the timer now so that focus doesn't
|
/* if using focus_delay, stop the timer now so that focus doesn't
|
||||||
go moving on us */
|
go moving on us */
|
||||||
event_halt_focus_delay();
|
event_halt_focus_delay();
|
||||||
|
@ -1220,10 +1217,7 @@ void action_activate(union ActionData *data)
|
||||||
void action_focus(union ActionData *data)
|
void action_focus(union ActionData *data)
|
||||||
{
|
{
|
||||||
if (data->client.any.c) {
|
if (data->client.any.c) {
|
||||||
/* similar to the openbox dock for dockapps, don't let user actions
|
if (!data->any.button || client_mouse_focusable(data->client.any.c)) {
|
||||||
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 using focus_delay, stop the timer now so that focus doesn't
|
/* if using focus_delay, stop the timer now so that focus doesn't
|
||||||
go moving on us */
|
go moving on us */
|
||||||
event_halt_focus_delay();
|
event_halt_focus_delay();
|
||||||
|
|
|
@ -2394,6 +2394,22 @@ gboolean client_helper(ObClient *self)
|
||||||
self->type == OB_CLIENT_TYPE_TOOLBAR);
|
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)
|
static void client_apply_startup_state(ObClient *self, gint x, gint y)
|
||||||
{
|
{
|
||||||
gboolean pos = FALSE; /* has the window's position been configured? */
|
gboolean pos = FALSE; /* has the window's position been configured? */
|
||||||
|
|
|
@ -338,6 +338,16 @@ gboolean client_normal(ObClient *self);
|
||||||
(utilty, menu, etc) */
|
(utilty, menu, etc) */
|
||||||
gboolean client_helper(ObClient *self);
|
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 */
|
/* Returns if the window is focused */
|
||||||
gboolean client_focused(ObClient *self);
|
gboolean client_focused(ObClient *self);
|
||||||
|
|
||||||
|
|
|
@ -676,7 +676,7 @@ void event_enter_client(ObClient *client)
|
||||||
{
|
{
|
||||||
g_assert(config_focus_follow);
|
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) {
|
if (config_focus_delay) {
|
||||||
ObFocusDelayData *data;
|
ObFocusDelayData *data;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue