X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=bf7723365fdde511c1fa1e39ccbd68ba951f191c;hb=ca8924a5a004816cf7db39bcf4851312ef93a2dc;hp=3ba8ba3ba7587d42b060ca588e6a31cb856b3f3c;hpb=f9cf8fcea8af71268fdf3e063a96f2e3d25226d8;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 3ba8ba3b..bf772336 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -348,7 +348,7 @@ void client_manage(Window window) !self->iconic && /* this means focus=true for window is same as config_focus_new=true */ ((config_focus_new || (settings && settings->focus == 1)) || - client_search_focus_parent(self)) && + client_search_focus_tree_full(self)) && /* this checks for focus=false for the window */ (!settings || settings->focus != 0) && /* note the check against Type_Normal/Dialog, not client_normal(self), @@ -377,7 +377,17 @@ void client_manage(Window window) (!self->positioned ? "no" : (self->positioned == PPosition ? "program specified" : (self->positioned == USPosition ? "user specified" : - "BADNESS !?"))), self->area.x, self->area.y); + (self->positioned == PPosition | USPosition ? + "program + user specified" : + "BADNESS !?")))), self->area.x, self->area.y); + + ob_debug("Sized: %s @ %d %d\n", + (!self->sized ? "no" : + (self->sized == PSize ? "program specified" : + (self->sized == USSize ? "user specified" : + (self->sized == PSize | USSize ? + "program + user specified" : + "BADNESS !?")))), self->area.width, self->area.height); transient = place_client(self, &placex, &placey, settings); @@ -385,7 +395,7 @@ void client_manage(Window window) the visible screen area on its monitor. the monitor is chosen by place_client! */ - if (!(self->positioned & USPosition)) { + if (!(self->sized & USSize)) { /* make a copy to modify */ Rect a = *screen_area_monitor(self->desktop, client_monitor(self)); @@ -474,8 +484,8 @@ void client_manage(Window window) "Not focusing the window because its on another " "desktop\n"); } - /* If something is focused, and it's not our parent... */ - else if (focus_client && client_search_focus_parent(self) == NULL) + /* If something is focused, and it's not our relative... */ + else if (focus_client && client_search_focus_tree_full(self) == NULL) { /* If time stamp is old, don't steal focus */ if (self->user_time && last_time && @@ -509,6 +519,14 @@ void client_manage(Window window) "Not focusing the window because a globally " "active client has focus\n"); } + /* Don't move focus if it's not going to go to this window + anyway */ + else if (client_focus_target(self) != self) { + activate = FALSE; + ob_debug_type(OB_DEBUG_FOCUS, + "Not focusing the window because another window " + "would get the focus anyway\n"); + } } if (!activate) { @@ -589,6 +607,10 @@ ObClient *client_fake_manage(Window window) self->frame = frame_new(self); frame_adjust_area(self->frame, FALSE, TRUE, TRUE); + ob_debug("gave extents left %d right %d top %d bottom %d\n", + self->frame->size.left, self->frame->size.right, + self->frame->size.top, self->frame->size.bottom); + /* free the ObAppSettings shallow copy */ g_free(settings); @@ -853,6 +875,7 @@ static void client_restore_session_state(ObClient *self) RECT_SET_POINT(self->area, self->session->x, self->session->y); self->positioned = USPosition; + self->sized = USSize; if (self->session->w > 0) self->area.width = self->session->w; if (self->session->h > 0) @@ -1603,6 +1626,7 @@ void client_update_normal_hints(ObClient *self) if (!client_normal(self)) */ self->positioned = (size.flags & (PPosition|USPosition)); + self->sized = (size.flags & (PSize|USSize)); if (size.flags & PWinGravity) self->gravity = size.win_gravity; @@ -1985,8 +2009,14 @@ void client_update_title(ObClient *self) PROP_GETS(self->window, wm_icon_name, utf8, &data))) data = g_strdup(self->title); - PROP_SETS(self->window, net_wm_visible_icon_name, data); - self->icon_title = data; + if (self->client_machine) { + visible = g_strdup_printf("%s (%s)", data, self->client_machine); + g_free(data); + } else + visible = data; + + PROP_SETS(self->window, net_wm_visible_icon_name, visible); + self->icon_title = visible; } void client_update_strut(ObClient *self) @@ -2327,7 +2357,6 @@ static void client_change_wm_state(ObClient *self) state[0] = self->wmstate; state[1] = None; PROP_SETA32(self->window, wm_state, wm_state, state, 2); - ob_debug("setting wm_state %d\n", self->wmstate); } } @@ -2511,8 +2540,7 @@ gboolean client_hide(ObClient *self) actions should not rely on being able to move focus during an interactive grab. */ - if (keyboard_interactively_grabbed()) - keyboard_interactive_cancel(); + event_cancel_all_key_grabs(); } frame_hide(self->frame); @@ -2996,9 +3024,8 @@ static void client_iconify_recursive(ObClient *self, self->iconic = iconic; /* update the focus lists.. iconic windows go to the bottom of - the list, put the new iconic window at the 'top of the - bottom'. */ - focus_order_to_top(self); + the list */ + focus_order_to_bottom(self); changed = TRUE; } @@ -3498,8 +3525,7 @@ gboolean client_focus(ObClient *self) actions should not rely on being able to move focus during an interactive grab. */ - if (keyboard_interactively_grabbed()) - keyboard_interactive_cancel(); + event_cancel_all_key_grabs(); xerror_set_ignore(TRUE); xerror_occured = FALSE;