X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=39a034683876823f7d76a98346f008d0db106a36;hb=59eb52b7c6ccbe83742e5eb8b40b5e32bb6600cc;hp=0bb1d11d8a2702bebcff8f8dd850640a7b55194b;hpb=07f5240d8c6d4fc6d70d396c4205a42f87ee7a95;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 0bb1d11d..39a03468 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -108,7 +108,6 @@ static void client_call_notifies(ObClient *self, GSList *list); static void client_ping_event(ObClient *self, gboolean dead); static void client_prompt_kill(ObClient *self); - void client_startup(gboolean reconfig) { if ((client_default_icon = RrImageCacheFind(ob_rr_icons, @@ -248,6 +247,7 @@ void client_manage(Window window, ObPrompt *prompt) gboolean transient = FALSE; Rect place, *monitor; Time launch_time, map_time; + gint user_time; grab_server(TRUE); @@ -313,6 +313,7 @@ void client_manage(Window window, ObPrompt *prompt) ob_debug("Window type: %d\n", self->type); ob_debug("Window group: 0x%x\n", self->group?self->group->leader:0); + ob_debug("Window name: %s class: %s\n", self->name, self->class); /* now we have all of the window's information so we can set this up. do this before creating the frame, so it can tell that we are still @@ -344,6 +345,9 @@ void client_manage(Window window, ObPrompt *prompt) /* tell startup notification that this app started */ launch_time = sn_app_started(self->startup_id, self->class, self->name); + if (!PROP_GET32(self->window, net_wm_user_time, cardinal, &user_time)) + user_time = map_time; + /* do this after we have a frame.. it uses the frame to help determine the WM_STATE to apply. */ client_change_state(self); @@ -360,6 +364,8 @@ void client_manage(Window window, ObPrompt *prompt) /* this means focus=true for window is same as config_focus_new=true */ ((config_focus_new || (settings && settings->focus == 1)) || client_search_focus_tree_full(self)) && + /* NET_WM_USER_TIME 0 when mapping means don't focus */ + (user_time != 0) && /* this checks for focus=false for the window */ (!settings || settings->focus != 0) && focus_valid_target(self, FALSE, FALSE, TRUE, FALSE, FALSE)) @@ -494,8 +500,8 @@ void client_manage(Window window, ObPrompt *prompt) activate ? "yes" : "no"); if (activate) { gboolean raise = FALSE; - gboolean relative_focused = FALSE; - gboolean parent_focused = FALSE; + gboolean relative_focused; + gboolean parent_focused; parent_focused = (focus_client != NULL && client_search_focus_parent(self)); @@ -503,7 +509,6 @@ void client_manage(Window window, ObPrompt *prompt) (client_search_focus_tree_full(self) != NULL || client_search_focus_group_full(self) != NULL)); - /* This is focus stealing prevention */ ob_debug_type(OB_DEBUG_FOCUS, "Want to focus new window 0x%x at time %u " @@ -658,7 +663,6 @@ void client_manage(Window window, ObPrompt *prompt) return; } - ObClient *client_fake_manage(Window window) { ObClient *self; @@ -1381,7 +1385,6 @@ static void client_update_transient_tree(ObClient *self, transient windows as their children. * * */ - /* No change has occured */ if (oldgroup == newgroup && oldgtran == newgtran && @@ -2194,7 +2197,6 @@ void client_update_icons(ObClient *self) (gint*)&w, (gint*)&h, &data); xerror_set_ignore(FALSE); - if (xicon) { if (w > 0 && h > 0) { /* is this icon in the cache yet? */ @@ -2686,7 +2688,6 @@ gboolean client_enter_focusable(ObClient *self) self->type != OB_CLIENT_TYPE_DESKTOP); } - static void client_apply_startup_state(ObClient *self, gint x, gint y, gint w, gint h) { @@ -2996,7 +2997,6 @@ void client_try_configure(ObClient *self, gint *x, gint *y, gint *w, gint *h, g_assert(*h > 0); } - void client_configure(ObClient *self, gint x, gint y, gint w, gint h, gboolean user, gboolean final, gboolean force_reply) { @@ -3904,12 +3904,15 @@ static void client_present(ObClient *self, gboolean here, gboolean raise, client_focus(self); } -/* this function exists to map to the client_activate message in the ewmh, - the user arg is unused because nobody uses it correctly anyway. */ +/* this function exists to map to the net_active_window message in the ewmh */ void client_activate(ObClient *self, gboolean here, gboolean raise, gboolean unshade, gboolean user) { - client_present(self, here, raise, unshade); + if (user || (self->desktop == DESKTOP_ALL || + self->desktop == screen_desktop)) + client_present(self, here, raise, unshade); + else + client_hilite(self, TRUE); } static void client_bring_windows_recursive(ObClient *self,