X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fevent.c;h=3476f6277540da8a07930ae3a68cd27b41699161;hb=0e9cfd7c77d8608a4be29f43413575d9553bf21c;hp=4591009e5b303dc56840163758017b18fc9fe788;hpb=a01ece1353465ef471becdad3e448c32a4516f43;p=chaz%2Fopenbox diff --git a/openbox/event.c b/openbox/event.c index 4591009e..3476f627 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -86,6 +86,7 @@ static void event_process(const XEvent *e, gpointer data); static void event_handle_root(XEvent *e); static gboolean event_handle_menu_input(XEvent *e); static void event_handle_menu(ObMenuFrame *frame, XEvent *e); +static void event_handle_prompt(ObPrompt *p, XEvent *e); static void event_handle_dock(ObDock *s, XEvent *e); static void event_handle_dockapp(ObDockApp *app, XEvent *e); static void event_handle_client(ObClient *c, XEvent *e); @@ -483,6 +484,8 @@ static void event_process(const XEvent *ec, gpointer data) break; case OB_WINDOW_CLASS_CLIENT: client = WINDOW_AS_CLIENT(obwin); + /* events on clients can be events on prompt windows too */ + prompt = client->prompt; break; case OB_WINDOW_CLASS_MENUFRAME: menu = WINDOW_AS_MENUFRAME(obwin); @@ -709,7 +712,9 @@ static void event_process(const XEvent *ec, gpointer data) } #endif - if (e->type == ButtonPress || e->type == ButtonRelease) { + if (prompt) + event_handle_prompt(prompt, e); + else if (e->type == ButtonPress || e->type == ButtonRelease) { /* If the button press was on some non-root window, or was physically on the root window, then process it */ if (window != obt_root(ob_screen) || @@ -1677,6 +1682,20 @@ static ObMenuFrame* find_active_or_last_menu(void) return ret; } +static void event_handle_prompt(ObPrompt *p, XEvent *e) +{ + switch (e->type) { + case ButtonPress: + case ButtonRelease: + case MotionNotify: + prompt_mouse_event(p, e); + break; + case KeyPress: + prompt_key_event(p, e); + break; + } +} + static gboolean event_handle_menu_input(XEvent *ev) { gboolean ret = FALSE;