]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
missing a g_slice_free
[chaz/openbox] / openbox / event.c
index 44a90f9bbd3267493af3339cc76d75d51c5a5efc..14aa696bb119689bca9f110947b1c13fe857b682 100644 (file)
@@ -811,7 +811,7 @@ void event_enter_client(ObClient *client)
 
             obt_main_loop_timeout_remove(ob_main_loop, focus_delay_func);
 
-            data = g_new(ObFocusDelayData, 1);
+            data = g_slice_new(ObFocusDelayData);
             data->client = client;
             data->time = event_curtime;
             data->serial = event_curserial;
@@ -846,7 +846,7 @@ void event_leave_client(ObClient *client)
 
             obt_main_loop_timeout_remove(ob_main_loop, unfocus_delay_func);
 
-            data = g_new(ObFocusDelayData, 1);
+            data = g_slice_new(ObFocusDelayData);
             data->client = client;
             data->time = event_curtime;
             data->serial = event_curserial;
@@ -1357,11 +1357,23 @@ static void event_handle_client(ObClient *client, XEvent *e)
                        (e->xclient.data.l[0] == 2 ? "user" : "INVALID"))));
             /* XXX make use of data.l[2] !? */
             if (e->xclient.data.l[0] == 1 || e->xclient.data.l[0] == 2) {
-                event_curtime = e->xclient.data.l[1];
+                /* we can not trust the timestamp from applications.
+                   e.g. chromium passes a very old timestamp.  openbox thinks
+                   the window will get focus and calls XSetInputFocus with the
+                   (old) timestamp, which doesn't end up moving focus at all.
+                   but the window is raised, not hilited, etc, as if it was
+                   really going to get focus.
+
+                   so do not use this timestamp in event_curtime, as this would
+                   be used in XSetInputFocus.
+                */
+                /*event_curtime = e->xclient.data.l[1];*/
                 if (e->xclient.data.l[1] == 0)
                     ob_debug_type(OB_DEBUG_APP_BUGS,
                                   "_NET_ACTIVE_WINDOW message for window %s is"
                                   " missing a timestamp", client->title);
+
+                event_curtime = event_get_server_time();
             } else
                 ob_debug_type(OB_DEBUG_APP_BUGS,
                               "_NET_ACTIVE_WINDOW message for window %s is "
@@ -1997,7 +2009,7 @@ static gboolean event_handle_user_input(ObClient *client, XEvent *e)
 
 static void focus_delay_dest(gpointer data)
 {
-    g_free(data);
+    g_slice_free(ObFocusDelayData, data);
 }
 
 static gboolean focus_delay_cmp(gconstpointer d1, gconstpointer d2)
@@ -2059,7 +2071,7 @@ static void event_ignore_enter_range(gulong start, gulong end)
     g_assert(start != 0);
     g_assert(end != 0);
 
-    r = g_new(ObSerialRange, 1);
+    r = g_slice_new(ObSerialRange);
     r->start = start;
     r->end = end;
     ignore_serials = g_slist_prepend(ignore_serials, r);
@@ -2094,7 +2106,7 @@ static gboolean is_enter_focus_event_ignored(gulong serial)
         if ((glong)(serial - r->end) > 0) {
             /* past the end */
             ignore_serials = g_slist_delete_link(ignore_serials, it);
-            g_free(r);
+            g_slice_free(ObSerialRange, r);
         }
         else if ((glong)(serial - r->start) >= 0)
             return TRUE;
This page took 0.027432 seconds and 4 git commands to generate.