summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-10-02 04:06:40 +0000
committerDana Jansens <danakj@orodu.net>2003-10-02 04:06:40 +0000
commit9bd60fd92b8ff09630b35973947493a23015c621 (patch)
treeab013e0203f4b24b0de69c2c7cc79c705524b116 /openbox
parent4ea5a21fe1e5b95becb36194adb3add9858d5f23 (diff)
dont queue up interative end actions
Diffstat (limited to 'openbox')
-rw-r--r--openbox/action.c6
-rw-r--r--openbox/event.c38
-rw-r--r--openbox/grab.c4
-rw-r--r--openbox/openbox.c2
4 files changed, 37 insertions, 13 deletions
diff --git a/openbox/action.c b/openbox/action.c
index 5f60019e..babb8f82 100644
--- a/openbox/action.c
+++ b/openbox/action.c
@@ -949,7 +949,11 @@ void action_run_list(GSList *acts, ObClient *c, ObFrameContext context,
keyboard_interactive_grab(state, a->data.any.c, a);
}
- ob_main_loop_queue_action(ob_main_loop, a);
+ /* closing interactive actions are not queued */
+ if (!done)
+ ob_main_loop_queue_action(ob_main_loop, a);
+ else
+ a->func(&a->data);
}
}
}
diff --git a/openbox/event.c b/openbox/event.c
index f68517d1..cc726474 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -393,21 +393,21 @@ static void event_process(const XEvent *ec, gpointer data)
/* deal with it in the kernel */
if (group)
- event_handle_group(group, e);
+ event_handle_group(group, e);
else if (client)
- event_handle_client(client, e);
+ event_handle_client(client, e);
else if (dockapp)
- event_handle_dockapp(dockapp, e);
+ event_handle_dockapp(dockapp, e);
else if (dock)
- event_handle_dock(dock, e);
+ event_handle_dock(dock, e);
else if (window == RootWindow(ob_display, ob_screen))
- event_handle_root(e);
+ event_handle_root(e);
else if (e->type == MapRequest)
- client_manage(window);
+ client_manage(window);
else if (e->type == ConfigureRequest) {
- /* unhandled configure requests must be used to configure the
- window directly */
- XWindowChanges xwc;
+ /* unhandled configure requests must be used to configure the
+ window directly */
+ XWindowChanges xwc;
xwc.x = e->xconfigurerequest.x;
xwc.y = e->xconfigurerequest.y;
@@ -531,6 +531,7 @@ void event_enter_client(ObClient *client)
config_focus_delay,
focus_delay_func,
client, NULL);
+ ob_debug("added focus timeout\n");
} else
focus_delay_func(client);
}
@@ -679,10 +680,11 @@ static void event_handle_client(ObClient *client, XEvent *e)
} else {
#ifdef DEBUG_FOCUS
ob_debug("%sNotify mode %d detail %d on %lx, "
- "focusing window\n",
+ "focusing window: %d\n",
(e->type == EnterNotify ? "Enter" : "Leave"),
e->xcrossing.mode,
- e->xcrossing.detail, client?client->window:0);
+ e->xcrossing.detail, (client?client->window:0),
+ !nofocus);
#endif
if (!nofocus && config_focus_follow)
event_enter_client(client);
@@ -1175,6 +1177,7 @@ static gboolean focus_delay_func(gpointer data)
{
ObClient *c = data;
+ ob_debug("focus timeout %d\n", focus_client != c);
if (focus_client != c) {
client_focus(c);
if (config_focus_raise)
@@ -1195,12 +1198,23 @@ void event_ignore_queued_enters()
XSync(ob_display, FALSE);
+ ob_debug("Trying to ignore\n");
+
/* count the events */
while (TRUE) {
e = g_new(XEvent, 1);
if (XCheckTypedEvent(ob_display, EnterNotify, e)) {
+ ObWindow *win;
+
+ win = g_hash_table_lookup(window_map, &e->xany.window);
+ if (win && WINDOW_IS_CLIENT(win)) {
+ ob_debug("skipping enter event on 0x%lx\n", e->xany.window);
+ ++ignore_enter_focus;
+ } else
+ ob_debug("NOT skipping enter event on 0x%lx\n",
+ e->xany.window);
+
saved = g_slist_append(saved, e);
- ++ignore_enter_focus;
} else {
g_free(e);
break;
diff --git a/openbox/grab.c b/openbox/grab.c
index e2784a2d..31d8494a 100644
--- a/openbox/grab.c
+++ b/openbox/grab.c
@@ -77,6 +77,7 @@ gboolean grab_pointer(gboolean grab, ObCursor cur)
False, GRAB_PTR_MASK, GrabModeAsync,
GrabModeAsync, FALSE,
ob_cursor(cur), event_lasttime) == Success;
+ ob_debug("GRABBING\n");
if (!ret)
--pgrabs;
} else
@@ -84,6 +85,9 @@ gboolean grab_pointer(gboolean grab, ObCursor cur)
} else if (pgrabs > 0) {
if (--pgrabs == 0) {
XUngrabPointer(ob_display, event_lasttime);
+
+ ob_debug("UNGRABBING\n");
+ event_ignore_queued_enters();
}
ret = TRUE;
}
diff --git a/openbox/openbox.c b/openbox/openbox.c
index 06e804ff..39c02035 100644
--- a/openbox/openbox.c
+++ b/openbox/openbox.c
@@ -100,6 +100,8 @@ int main(int argc, char **argv)
textdomain(PACKAGE_NAME);
g_set_prgname(argv[0]);
+
+ chdir(g_get_home_dir());
parse_paths_startup();