summaryrefslogtreecommitdiff
path: root/openbox/focus.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-03-11 04:44:15 +0000
committerDana Jansens <danakj@orodu.net>2007-03-11 04:44:15 +0000
commit19b480058e869a588ea20be5e29017ae2052e967 (patch)
treeab22ac84def19d7b715505674f132e191e1fbff6 /openbox/focus.c
parent9d6e3907650f4bc05ebf147aeec92573d7b88758 (diff)
wow... this is a big commit...
all related to _NET_WM_USER_TIME and focus stealing prevention a) add launcher startup notification. this means when you run something from the openbox menu or a key/mouse binding, that startup notification will go on in openbox and other applications like your panel or something b) add the _NET_WM_USER_TIME property for windows c) use the _NET_WM_USER_TIME data and startup notification to prevent focus stealing. d) cookie party !! ! all are invited. e) oh yeah, and pass around timestamps for a lot more things. like, when you run an action, send the timestamp for the event that is running the action. this is important for startup notification. this also affects menus. f) yes.. cookies.. would it be a good idea to disable focus stealing prevention if a window takes too long to load? i mean.. maybe after a certain length of time, a user can't be expected to not do anything in any other windows, but would they still want the new application to focus then? HMM. open question i guess..
Diffstat (limited to 'openbox/focus.c')
-rw-r--r--openbox/focus.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/openbox/focus.c b/openbox/focus.c
index e21e8b5b..2d6804bc 100644
--- a/openbox/focus.c
+++ b/openbox/focus.c
@@ -56,9 +56,11 @@ static ObIconPopup *focus_cycle_popup;
static void focus_cycle_destructor(ObClient *client, gpointer data)
{
- /* end cycling if the target disappears */
+ /* end cycling if the target disappears. CurrentTime is fine, time won't
+ be used
+ */
if (focus_cycle_target == client)
- focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);
+ focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, CurrentTime);
}
static Window createWindow(Window parent, gulong mask,
@@ -185,9 +187,11 @@ void focus_set_client(ObClient *client)
XSync(ob_display, FALSE);
}
- /* in the middle of cycling..? kill it. */
+ /* in the middle of cycling..? kill it. CurrentTime is fine, time won't
+ be used.
+ */
if (focus_cycle_target)
- focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);
+ focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, CurrentTime);
old = focus_client;
focus_client = client;
@@ -547,7 +551,7 @@ static gboolean valid_focus_target(ObClient *ft)
}
void focus_cycle(gboolean forward, gboolean linear, gboolean interactive,
- gboolean dialog, gboolean done, gboolean cancel)
+ gboolean dialog, gboolean done, gboolean cancel, Time time)
{
static ObClient *first = NULL;
static ObClient *t = NULL;
@@ -608,7 +612,7 @@ void focus_cycle(gboolean forward, gboolean linear, gboolean interactive,
done_cycle:
if (done && focus_cycle_target)
- client_activate(focus_cycle_target, FALSE, TRUE);
+ client_activate(focus_cycle_target, FALSE, TRUE, time);
t = NULL;
first = NULL;
@@ -625,7 +629,8 @@ done_cycle:
}
void focus_directional_cycle(ObDirection dir, gboolean interactive,
- gboolean dialog, gboolean done, gboolean cancel)
+ gboolean dialog, gboolean done, gboolean cancel,
+ Time time)
{
static ObClient *first = NULL;
ObClient *ft = NULL;
@@ -670,7 +675,7 @@ void focus_directional_cycle(ObDirection dir, gboolean interactive,
done_cycle:
if (done && focus_cycle_target)
- client_activate(focus_cycle_target, FALSE, TRUE);
+ client_activate(focus_cycle_target, FALSE, TRUE, time);
first = NULL;
focus_cycle_target = NULL;