summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openbox/action.c8
-rw-r--r--openbox/client.c4
-rw-r--r--openbox/client.h5
3 files changed, 12 insertions, 5 deletions
diff --git a/openbox/action.c b/openbox/action.c
index 4ff6bdb9..4839088c 100644
--- a/openbox/action.c
+++ b/openbox/action.c
@@ -1199,7 +1199,9 @@ void action_execute(union ActionData *data)
void action_activate(union ActionData *data)
{
if (data->client.any.c) {
- if (!data->any.button || client_mouse_focusable(data->client.any.c)) {
+ if (!data->any.button || client_mouse_focusable(data->client.any.c) ||
+ data->any.context != OB_FRAME_CONTEXT_CLIENT)
+ {
/* if using focus_delay, stop the timer now so that focus doesn't
go moving on us */
event_halt_focus_delay();
@@ -1217,7 +1219,9 @@ void action_activate(union ActionData *data)
void action_focus(union ActionData *data)
{
if (data->client.any.c) {
- if (!data->any.button || client_mouse_focusable(data->client.any.c)) {
+ if (!data->any.button || client_mouse_focusable(data->client.any.c) ||
+ data->any.context != OB_FRAME_CONTEXT_CLIENT)
+ {
/* if using focus_delay, stop the timer now so that focus doesn't
go moving on us */
event_halt_focus_delay();
diff --git a/openbox/client.c b/openbox/client.c
index d50388e7..0084588c 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -2814,7 +2814,9 @@ static void client_iconify_recursive(ObClient *self,
self->window);
if (iconic) {
- if (self->functions & OB_CLIENT_FUNC_ICONIFY) {
+ /* don't let non-normal windows iconify along with their parents
+ or whatever */
+ if (client_normal(self)) {
self->iconic = iconic;
/* update the focus lists.. iconic windows go to the bottom of
diff --git a/openbox/client.h b/openbox/client.h
index 5c5fdb90..654945b9 100644
--- a/openbox/client.h
+++ b/openbox/client.h
@@ -339,8 +339,9 @@ gboolean client_normal(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. */
+ presses on the *client* window. This doesn't affect clicking on the
+ decorations. 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