]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
key input works for ObPrompt windows now
[chaz/openbox] / openbox / event.c
index 73797496c8ecdef60d3a793ae5d51276a67ab124..3476f6277540da8a07930ae3a68cd27b41699161 100644 (file)
@@ -29,6 +29,7 @@
 #include "frame.h"
 #include "grab.h"
 #include "menu.h"
+#include "prompt.h"
 #include "menuframe.h"
 #include "keyboard.h"
 #include "mouse.h"
@@ -85,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);
@@ -466,6 +468,7 @@ static void event_process(const XEvent *ec, gpointer data)
     ObDockApp *dockapp = NULL;
     ObWindow *obwin = NULL;
     ObMenuFrame *menu = NULL;
+    ObPrompt *prompt = NULL;
 
     /* make a copy we can mangle */
     ee = *ec;
@@ -481,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);
@@ -488,6 +493,9 @@ static void event_process(const XEvent *ec, gpointer data)
         case OB_WINDOW_CLASS_INTERNAL:
             /* we don't do anything with events directly on these windows */
             break;
+        case OB_WINDOW_CLASS_PROMPT:
+            prompt = WINDOW_AS_PROMPT(obwin);
+            break;
         }
     }
     else
@@ -704,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) ||
@@ -1672,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;
This page took 0.021321 seconds and 4 git commands to generate.