]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
hide after iconifying
[chaz/openbox] / openbox / event.c
index ff21918be9c162d049d1a437b93e39f7eb38c791..a4090b0c4d5a210d5cd0dd9b1b194e8803de2511 100644 (file)
@@ -43,7 +43,6 @@
 #include "translate.h"
 
 #include <X11/Xlib.h>
-#include <X11/keysym.h>
 #include <X11/Xatom.h>
 #include <glib.h>
 
@@ -504,6 +503,7 @@ static void event_process(const XEvent *ec, gpointer data)
             frame_adjust_focus(client->frame, TRUE);
             focus_set_client(client);
             client_calc_layer(client);
+            client_bring_helper_windows(client);
         }
     } else if (e->type == FocusOut) {
         gboolean nomove = FALSE;
@@ -676,7 +676,7 @@ void event_enter_client(ObClient *client)
 {
     g_assert(config_focus_follow);
 
-    if (client_normal(client) && client_can_focus(client)) {
+    if (client_enter_focusable(client) && client_can_focus(client)) {
         if (config_focus_delay) {
             ObFocusDelayData *data;
 
@@ -709,8 +709,15 @@ static void event_handle_client(ObClient *client, XEvent *e)
     case ButtonPress:
     case ButtonRelease:
         /* Wheel buttons don't draw because they are an instant click, so it
-           is a waste of resources to go drawing it. */
-        if (!(e->xbutton.button == 4 || e->xbutton.button == 5)) {
+           is a waste of resources to go drawing it.
+           if the user is doing an intereactive thing, or has a menu open then
+           the mouse is grabbed (possibly) and if we get these events we don't
+           want to deal with them
+        */
+        if (!(e->xbutton.button == 4 || e->xbutton.button == 5) &&
+            !keyboard_interactively_grabbed() &&
+            !menu_frame_visible)
+        {
             con = frame_context(client, e->xbutton.window);
             con = mouse_button_frame_context(con, e->xbutton.button);
             switch (con) {
@@ -1039,9 +1046,10 @@ static void event_handle_client(ObClient *client, XEvent *e)
                        (e->xclient.data.l[0] == 2 ? "user" : "INVALID"))));
             /* XXX make use of data.l[2] !? */
             event_curtime = e->xclient.data.l[1];
-            ob_debug_type(OB_DEBUG_APP_BUGS,
-                          "_NET_ACTIVE_WINDOW message for window %s is "
-                          "missing a timestamp\n", client->title);
+            if (event_curtime == 0)
+                ob_debug_type(OB_DEBUG_APP_BUGS,
+                              "_NET_ACTIVE_WINDOW message for window %s is "
+                              "missing a timestamp\n", client->title);
             client_activate(client, FALSE,
                             (e->xclient.data.l[0] == 0 ||
                              e->xclient.data.l[0] == 2));
@@ -1167,10 +1175,6 @@ static void event_handle_client(ObClient *client, XEvent *e)
                    msgtype == prop_atoms.net_wm_icon_name ||
                    msgtype == prop_atoms.wm_icon_name) {
             client_update_title(client);
-        } else if (msgtype == prop_atoms.wm_command) {
-            client_update_command(client);
-        } else if (msgtype == prop_atoms.wm_class) {
-            client_update_class(client);
         } else if (msgtype == prop_atoms.wm_protocols) {
             client_update_protocols(client);
             client_setup_decor_and_functions(client);
@@ -1192,9 +1196,6 @@ static void event_handle_client(ObClient *client, XEvent *e)
             client_update_sync_request_counter(client);
         }
 #endif
-        else if (msgtype == prop_atoms.sm_client_id) {
-            client_update_sm_client_id(client);
-        }
     case ColormapNotify:
         client_update_colormap(client, e->xcolormap.colormap);
         break;
This page took 0.02639 seconds and 4 git commands to generate.