add center option to placement section
This commit is contained in:
parent
774b32f14e
commit
e048751f91
5 changed files with 16 additions and 2 deletions
|
@ -32,6 +32,9 @@
|
|||
<placement>
|
||||
<policy>Smart</policy>
|
||||
<!-- 'Smart' or 'UnderMouse' -->
|
||||
<center>yes</center>
|
||||
<!-- whether to place windows in the center of the free area found or
|
||||
the top left corner -->
|
||||
</placement>
|
||||
|
||||
<theme>
|
||||
|
|
|
@ -53,6 +53,7 @@
|
|||
<xsd:documentation>defines how new windows are placed</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:element name="policy" type="ob:placementpolicy"/>
|
||||
<xsd:element name="center" type="ob:bool"/>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="theme">
|
||||
<xsd:element minOccurs="0" name="name" type="xsd:string"/>
|
||||
|
|
|
@ -36,6 +36,7 @@ gboolean config_focus_last;
|
|||
gboolean config_focus_under_mouse;
|
||||
|
||||
ObPlacePolicy config_place_policy;
|
||||
gboolean config_place_center;
|
||||
|
||||
gchar *config_theme;
|
||||
gboolean config_theme_keepborder;
|
||||
|
@ -495,6 +496,8 @@ static void parse_placement(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
|
|||
if ((n = parse_find_node("policy", node)))
|
||||
if (parse_contains("UnderMouse", doc, n))
|
||||
config_place_policy = OB_PLACE_POLICY_MOUSE;
|
||||
if ((n = parse_find_node("center", node)))
|
||||
config_place_center = parse_bool(doc, n);
|
||||
}
|
||||
|
||||
static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
|
||||
|
@ -869,6 +872,7 @@ void config_startup(ObParseInst *i)
|
|||
parse_register(i, "focus", parse_focus, NULL);
|
||||
|
||||
config_place_policy = OB_PLACE_POLICY_SMART;
|
||||
config_place_center = TRUE;
|
||||
|
||||
parse_register(i, "placement", parse_placement, NULL);
|
||||
|
||||
|
|
|
@ -76,6 +76,8 @@ extern gboolean config_focus_last;
|
|||
extern gboolean config_focus_under_mouse;
|
||||
|
||||
extern ObPlacePolicy config_place_policy;
|
||||
/*! Place windows in the center of the free area */
|
||||
extern gboolean config_place_center;
|
||||
|
||||
/*! When true windows' contents are refreshed while they are resized; otherwise
|
||||
they are not updated until the resize is complete */
|
||||
|
|
|
@ -326,8 +326,12 @@ static gboolean place_nooverlap(ObClient *c, gint *x, gint *y)
|
|||
Rect *r = maxit->data;
|
||||
|
||||
/* center it in the area */
|
||||
*x = r->x + (r->width - c->frame->area.width) / 2;
|
||||
*y = r->y + (r->height - c->frame->area.height) / 2;
|
||||
*x = r->x;
|
||||
*y = r->y;
|
||||
if (config_place_center) {
|
||||
*x += (r->width - c->frame->area.width) / 2;
|
||||
*y += (r->height - c->frame->area.height) / 2;
|
||||
}
|
||||
ret = TRUE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue