summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2009-12-08 11:32:40 -0500
committerDana Jansens <danakj@orodu.net>2009-12-08 13:56:37 -0500
commit07126124c9242a5a20883c3145464730e50afe94 (patch)
tree89124d70c3b3cb7d3df85618a8f273fb5f731df0
parent11ecb7d2199d06b2929ba7e5d3c92c021038a0cc (diff)
Fix client_activate() to work for internal Openbox menus
client_activate() is a helpful way to focus a window on another desktop, but only Openbox is allowed to do such things, user messages cannot.
-rw-r--r--openbox/client.c7
-rw-r--r--openbox/client.h6
-rw-r--r--openbox/client_list_combined_menu.c2
-rw-r--r--openbox/client_list_menu.c2
-rw-r--r--openbox/event.c2
5 files changed, 10 insertions, 9 deletions
diff --git a/openbox/client.c b/openbox/client.c
index 91693f99..ecb4aafe 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -3929,14 +3929,15 @@ static void client_present(ObClient *self, gboolean here, gboolean raise,
}
/* this function exists to map to the net_active_window message in the ewmh */
-void client_activate(ObClient *self, gboolean here, gboolean raise,
+void client_activate(ObClient *self, gboolean desktop, gboolean raise,
gboolean unshade, gboolean user)
{
- if ((user && (self->desktop == DESKTOP_ALL ||
+ if ((user && (desktop ||
+ self->desktop == DESKTOP_ALL ||
self->desktop == screen_desktop)) ||
client_can_steal_focus(self, event_curtime, CurrentTime))
{
- client_present(self, here, raise, unshade);
+ client_present(self, FALSE, raise, unshade);
}
else
client_hilite(self, TRUE);
diff --git a/openbox/client.h b/openbox/client.h
index 832405cf..15ae2220 100644
--- a/openbox/client.h
+++ b/openbox/client.h
@@ -575,14 +575,14 @@ gboolean client_focus(ObClient *self);
/*! Activates the client for use, focusing, uniconifying it, etc. To be used
when the user deliberately selects a window for use.
- @param here If true, then the client is brought to the current desktop;
- otherwise, the desktop is changed to where the client lives.
+ @param desktop If true, and the window is on another desktop, it will still
+ be activated.
@param raise If true, the client is brought to the front.
@param unshade If true, the client is unshaded (if it is shaded)
@param user If true, then a user action is what requested the activation;
otherwise, it means an application requested it on its own
*/
-void client_activate(ObClient *self, gboolean here, gboolean raise,
+void client_activate(ObClient *self, gboolean desktop, gboolean raise,
gboolean unshade, gboolean user);
/*! Bring all of its helper windows to its desktop. These are the utility and
diff --git a/openbox/client_list_combined_menu.c b/openbox/client_list_combined_menu.c
index a04d07d6..ad23cd48 100644
--- a/openbox/client_list_combined_menu.c
+++ b/openbox/client_list_combined_menu.c
@@ -114,7 +114,7 @@ static void menu_execute(ObMenuEntry *self, ObMenuFrame *f,
else {
ObClient *t = self->data.normal.data;
if (t) { /* it's set to NULL if its destroyed */
- client_activate(t, FALSE, TRUE, TRUE, TRUE);
+ client_activate(t, TRUE, TRUE, TRUE, TRUE);
/* if the window is omnipresent then we need to go to its
desktop */
if (t->desktop == DESKTOP_ALL)
diff --git a/openbox/client_list_menu.c b/openbox/client_list_menu.c
index 4ec6e785..ca4534ba 100644
--- a/openbox/client_list_menu.c
+++ b/openbox/client_list_menu.c
@@ -101,7 +101,7 @@ static void desk_menu_execute(ObMenuEntry *self, ObMenuFrame *f,
{
ObClient *t = self->data.normal.data;
if (t) { /* it's set to NULL if its destroyed */
- client_activate(t, FALSE, TRUE, TRUE, TRUE);
+ client_activate(t, TRUE, TRUE, TRUE, TRUE);
/* if the window is omnipresent then we need to go to its
desktop */
if (t->desktop == DESKTOP_ALL)
diff --git a/openbox/event.c b/openbox/event.c
index 93c5fa21..e07d6a31 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -1332,7 +1332,7 @@ static void event_handle_client(ObClient *client, XEvent *e)
ob_debug_type(OB_DEBUG_APP_BUGS,
"_NET_ACTIVE_WINDOW message for window %s is "
"missing source indication\n", client->title);
- client_activate(client, TRUE, TRUE, TRUE,
+ client_activate(client, FALSE, TRUE, TRUE,
(e->xclient.data.l[0] == 0 ||
e->xclient.data.l[0] == 2));
} else if (msgtype == prop_atoms.net_wm_moveresize) {