<focus>
<focusNew>yes</focusNew>
<followMouse>no</followMouse>
+ <focusLast>no</focusLast>
<focusDelay>0</focusDelay>
<raiseOnFocus>no</raiseOnFocus>
</focus>
<desktops>
<number>4</number>
+ <firstdesk>1</firstdesk>
<names>
<name>one</name>
<name>two</name>
</xs:annotation>
<xs:sequence>
<xs:element name="focusNew" type="ob:yesorno"/>
+ <xs:element name="focusLast" type="ob:yesorno"/>
<xs:element name="followMouse" type="ob:yesorno"/>
<xs:element name="focusDelay" type="xs:integer"/>
<xs:element name="raiseOnFocus" type="ob:yesorno"/>
</xs:sequence>
</xs:complexType>
</xs:element>
+ <xs:element name="firstdesk" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="resize">
gboolean config_focus_follow;
guint config_focus_delay;
gboolean config_focus_raise;
+gboolean config_focus_last;
ObPlacePolicy config_place_policy;
config_focus_delay = parse_int(doc, n) * 1000;
if ((n = parse_find_node("raiseOnFocus", node)))
config_focus_raise = parse_bool(doc, n);
+ if ((n = parse_find_node("focusLast", node)))
+ config_focus_last = parse_bool(doc, n);
}
static void parse_placement(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
config_focus_follow = FALSE;
config_focus_delay = 0;
config_focus_raise = FALSE;
+ config_focus_last = FALSE;
parse_register(i, "focus", parse_focus, NULL);
/*! If windows should automatically be raised when they are focused in
focus follows mouse */
extern gboolean config_focus_raise;
+/*! Focus the last focused window, not under the mouse, in follow mouse mode */
+extern gboolean config_focus_last;
extern ObPlacePolicy config_place_policy;
}
static Window createWindow(Window parent, gulong mask,
- XSetWindowAttributes *attrib)
+ XSetWindowAttributes *attrib)
{
return XCreateWindow(ob_display, parent, 0, 0, 1, 1, 0,
- RrDepth(ob_rr_inst), InputOutput,
+ RrDepth(ob_rr_inst), InputOutput,
RrVisual(ob_rr_inst), mask, attrib);
}
if (old->transient_for) {
gboolean trans = FALSE;
- if (!config_focus_follow)
+ if (!config_focus_follow || config_focus_last)
trans = TRUE;
else {
if ((target = client_under_pointer()) &&
}
}
- if (config_focus_follow) {
+ if (config_focus_follow && !config_focus_last) {
if ((target = client_under_pointer()))
if (client_normal(target) && client_can_focus(target))
return target;