#include "openbox.h"
+#include "slit.h"
#include "client.h"
#include "xerror.h"
#include "prop.h"
static void event_process(XEvent *e);
static void event_handle_root(XEvent *e);
+static void event_handle_slit(Slit *s, XEvent *e);
+static void event_handle_slitapp(SlitApp *app, XEvent *e);
static void event_handle_client(Client *c, XEvent *e);
static void event_handle_menu(Menu *menu, XEvent *e);
XNextEvent(ob_display, &e);
event_process(&e);
- had_event = TRUE;
+ had_event = TRUE;
}
if (!had_event) {
#endif
/* is the focused window getting a FocusOut/In back to
itself? */
- if (fe.xfocus.window == e->xfocus.window) {
+ if (fe.xfocus.window == e->xfocus.window &&
+ !event_ignore(&fe, client)) {
#ifdef DEBUG_FOCUS
g_message("focused window got an Out/In back to "
"itself IGNORED both");
static void event_process(XEvent *e)
{
Window window;
- Client *client;
+ Client *client = NULL;
+ Slit *slit = NULL;
+ SlitApp *slitapp = NULL;
Menu *menu = NULL;
window = event_get_window(e);
if (!(client = g_hash_table_lookup(client_map, &window)))
- menu = g_hash_table_lookup(menu_map, &window);
+ if (!(slitapp = g_hash_table_lookup(slit_app_map, &window)))
+ if (!(slit = g_hash_table_lookup(slit_map, &window)))
+ menu = g_hash_table_lookup(menu_map, &window);
+
event_set_lasttime(e);
event_hack_mods(e);
if (event_ignore(e, client))
return;
} else if (client)
event_handle_client(client, e);
+ else if (slitapp)
+ event_handle_slitapp(slitapp, e);
+ else if (slit)
+ event_handle_slit(slit, e);
else if (window == ob_root)
event_handle_root(e);
else if (e->type == MapRequest)
g_message("EVENT %d", e->type);
switch (e->type) {
case ButtonPress:
+ g_message("BUTTON PRESS");
if (e->xbutton.button == 3)
menu_hide(menu);
break;
case ButtonRelease:
+ g_message("BUTTON RELEASED");
if (!menu->shown) break;
/* grab_pointer_window(FALSE, None, menu->frame);*/
e->xbutton.y < (signed)(h+b)) {
menu_entry_fire(entry);
}
- }
+
break;
case EnterNotify:
case LeaveNotify:
g_message("enter/leave");
entry = menu_find_entry(menu, e->xcrossing.window);
if (entry) {
- entry->hilite = e->type == EnterNotify;
+ if (menu->mouseover)
+ menu->mouseover(entry, e->type == EnterNotify);
+ else
+ menu_control_mouseover(entry, e->type == EnterNotify);
+
menu_entry_render(entry);
}
break;
+ }
+ }
+}
+
+static void event_handle_slit(Slit *s, XEvent *e)
+{
+ switch (e->type) {
+ case ButtonPress:
+ stacking_raise(SLIT_AS_WINDOW(s));
+ case EnterNotify:
+ slit_hide(s, FALSE);
+ break;
+ case LeaveNotify:
+ slit_hide(s, TRUE);
+ break;
+ }
+}
+
+static void event_handle_slitapp(SlitApp *app, XEvent *e)
+{
+ switch (e->type) {
+ case MotionNotify:
+ slit_app_drag(app, &e->xmotion);
+ break;
+ case UnmapNotify:
+ if (app->ignore_unmaps) {
+ app->ignore_unmaps--;
+ break;
+ }
+ slit_remove(app, TRUE);
+ break;
+ case DestroyNotify:
+ slit_remove(app, FALSE);
+ break;
+ case ReparentNotify:
+ slit_remove(app, FALSE);
+ break;
+ case ConfigureNotify:
+ slit_app_configure(app, e->xconfigure.width, e->xconfigure.height);
+ break;
}
}