#include <X11/Xatom.h>
#include <glib.h>
-#ifdef USE_LIBSN
-# include <libsn/sn.h>
-#endif
-
#ifdef HAVE_SYS_SELECT_H
# include <sys/select.h>
#endif
};
static int mask_table_size;
+static ObClient *focus_delay_client;
+
#ifdef USE_SM
static void ice_handler(int fd, gpointer conn)
{
}
#endif
-#ifdef USE_LIBSN
-static void sn_handler(const XEvent *e, gpointer display)
+void event_startup(gboolean reconfig)
{
- XEvent ec;
- ec = *e;
- sn_display_process_event(display, &ec);
-}
-#endif
-
+ if (reconfig) return;
-void event_startup()
-{
mask_table_size = sizeof(mask_table) / sizeof(mask_table[0]);
/* get lock masks that are defined by the display (not constant) */
IceAddConnectionWatch(ice_watch, NULL);
#endif
-#ifdef USE_LIBSN
- ob_main_loop_x_add(ob_main_loop, sn_handler, ob_sn_display, NULL);
-#endif
-
client_add_destructor(focus_delay_client_dest);
}
-void event_shutdown()
+void event_shutdown(gboolean reconfig)
{
+ if (reconfig) return;
+
client_remove_destructor(focus_delay_client_dest);
XFreeModifiermap(modmap);
}
case OB_FRAME_CONTEXT_FRAME:
/* XXX if doing a 'reconfigure' make sure you kill this timer,
maybe all timers.. */
- if (config_focus_delay)
- ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func);
+ if (config_focus_delay && client == focus_delay_client) {
+ ob_main_loop_timeout_remove_data(ob_main_loop,
+ focus_delay_func,
+ focus_delay_client);
+ focus_delay_client = NULL;
+ }
default:
break;
}
ob_main_loop_timeout_add(ob_main_loop,
config_focus_delay,
focus_delay_func,
- client,
- NULL);
+ client, NULL);
+ focus_delay_client = client;
} else
client_focus(client);
}
static gboolean focus_delay_func(gpointer data)
{
- ObClient *c = data;
- client_focus(c);
+ client_focus(focus_delay_client);
return FALSE; /* no repeat */
}
static void focus_delay_client_dest(gpointer data)
{
- ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func);
+ ObClient *c = data;
+ if (c == focus_delay_client) {
+ ob_main_loop_timeout_remove_data(ob_main_loop, focus_delay_func,
+ focus_delay_client);
+ focus_delay_client = NULL;
+ }
}