gboolean transient = FALSE;
Rect place, *monitor;
Time launch_time, map_time;
+ guint32 user_time;
ob_debug("Managing window: 0x%lx", window);
ob_debug("Window type: %d", self->type);
ob_debug("Window group: 0x%x", self->group?self->group->leader:0);
+ ob_debug("Window name: %s class: %s", 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
/* tell startup notification that this app started */
launch_time = sn_app_started(self->startup_id, self->class, self->name);
+ if (!OBT_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);
/* 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))
return FALSE;
}
-void client_reconfigure(ObClient *self, gboolean force)
-{
- int x, y, w, h, lw, lh;
-
- x = self->area.x;
- y = self->area.y;
- w = self->area.width;
- h = self->area.height;
- client_try_configure(self, &x, &y, &w, &h, &lw, &lh, FALSE);
- client_find_onscreen(self, &x, &y, w, h, FALSE);
- client_configure(self, x, y, w, h, FALSE, TRUE, force);
-}
-
void client_move_onscreen(ObClient *self, gboolean rude)
{
gint x = self->area.x;
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,