]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
fix focus when starting up, especially when replacing another instance of openbox
[chaz/openbox] / openbox / event.c
index 9905d973819660fe9455df638b1560282ef72172..8daa42811dbbae1b223030cb369fde46a04ffa46 100644 (file)
@@ -98,13 +98,13 @@ static gboolean focus_delay_func(gpointer data);
 static gboolean unfocus_delay_func(gpointer data);
 static void focus_delay_client_dest(ObClient *client, gpointer data);
 
-Time event_last_user_time;
+Time event_last_user_time = CurrentTime;
 
 /*! The time of the current X event (if it had a timestamp) */
-static Time event_curtime;
+static Time event_curtime = CurrentTime;
 /*! The source time that started the current X event (user-provided, so not
   to be trusted) */
-static Time event_sourcetime;
+static Time event_sourcetime = CurrentTime;
 
 /*! The serial of the current X event */
 static gulong event_curserial;
@@ -146,10 +146,6 @@ void event_startup(gboolean reconfig)
 #endif
 
     client_add_destroy_notify(focus_delay_client_dest, NULL);
-
-    event_curtime = CurrentTime;
-    event_sourcetime = CurrentTime;
-    event_last_user_time = CurrentTime;
 }
 
 void event_shutdown(gboolean reconfig)
@@ -709,6 +705,9 @@ static void event_process(const XEvent *ec, gpointer data)
         {
             used = event_handle_user_input(client, e);
 
+            if (prompt && !used)
+                used = event_handle_prompt(prompt, e);
+
             if (e->type == ButtonPress) {
                 pressed = e->xbutton.button;
                 pressed_win = e->xbutton.subwindow;
@@ -1659,6 +1658,12 @@ static void event_handle_client(ObClient *client, XEvent *e)
         }
 #ifdef SYNC
         else if (msgtype == OBT_PROP_ATOM(NET_WM_SYNC_REQUEST_COUNTER)) {
+            /* if they are resizing right now this would cause weird behaviour.
+               if one day a user reports clients stop resizing, then handle
+               this better by resetting a new XSync alarm and stuff on the
+               new counter, but I expect it will never happen */
+            if (moveresize_client == client)
+                moveresize_end(FALSE);
             client_update_sync_request_counter(client);
         }
 #endif
@@ -1853,7 +1858,8 @@ static gboolean event_handle_menu_input(XEvent *ev)
 
             else if (sym == XK_Right) {
                 /* Right goes to the selected submenu */
-                if (frame->selected->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU)
+                if (frame->selected &&
+                    frame->selected->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU)
                 {
                     /* make sure it is visible */
                     menu_frame_select(frame, frame->selected, TRUE);
@@ -2200,7 +2206,7 @@ gboolean event_time_after(guint32 t1, guint32 t2)
 gboolean find_timestamp(XEvent *e, gpointer data)
 {
     const Time t = event_get_timestamp(e);
-    if (t != CurrentTime) {
+    if (t > event_curtime) {
         event_curtime = t;
         return TRUE;
     }
@@ -2208,10 +2214,8 @@ gboolean find_timestamp(XEvent *e, gpointer data)
         return FALSE;
 }
 
-Time event_time(void)
+static Time next_time(void)
 {
-    if (event_curtime) return event_curtime;
-
     /* Some events don't come with timestamps :(
        ...but we can get one anyways >:) */
 
@@ -2230,7 +2234,19 @@ Time event_time(void)
     return event_curtime;
 }
 
+Time event_time(void)
+{
+    if (event_curtime) return event_curtime;
+
+    return next_time();
+}
+
 Time event_source_time(void)
 {
     return event_sourcetime;
 }
+
+void event_reset_time(void)
+{
+    next_time();
+}
This page took 0.02328 seconds and 4 git commands to generate.