summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Magnusson <mikachu@gmail.com>2013-08-11 14:33:46 +0200
committerDana Jansens <danakj@orodu.net>2013-08-11 13:07:49 -0400
commitb2b5df767cc54539f75fc1263fe21f8a0ab1d797 (patch)
tree06e705da11df2bb5bf78858c576945be85b47998
parent937ba3c7e791111bd94153866545dd9bb8334c7f (diff)
Allow specifying only one of width and height in per-app settings size
Fixes bug 5819.
-rw-r--r--openbox/config.c34
-rw-r--r--openbox/config.h1
-rw-r--r--openbox/place.c34
3 files changed, 35 insertions, 34 deletions
diff --git a/openbox/config.c b/openbox/config.c
index 49fc29bc..8e1bcf89 100644
--- a/openbox/config.c
+++ b/openbox/config.c
@@ -154,13 +154,10 @@ void config_app_settings_copy_non_defaults(const ObAppSettings *src,
/* monitor is copied above */
}
- if (src->size_given) {
- dst->size_given = TRUE;
- dst->width_num = src->width_num;
- dst->width_denom = src->width_denom;
- dst->height_num = src->height_num;
- dst->height_denom = src->height_denom;
- }
+ dst->width_num = src->width_num;
+ dst->width_denom = src->width_denom;
+ dst->height_num = src->height_num;
+ dst->height_denom = src->height_denom;
}
void config_parse_relative_number(gchar *s, gint *num, gint *denom)
@@ -212,7 +209,6 @@ static void parse_single_per_app_settings(xmlNodePtr app,
{
xmlNodePtr n, c;
gboolean x_pos_given = FALSE;
- gboolean width_given = FALSE;
if ((n = obt_xml_find_node(app->children, "decor")))
if (!obt_xml_node_contains(n, "default"))
@@ -263,20 +259,22 @@ static void parse_single_per_app_settings(xmlNodePtr app,
config_parse_relative_number(s,
&settings->width_num,
&settings->width_denom);
- if (settings->width_num > 0 && settings->width_denom >= 0)
- width_given = TRUE;
+ if (settings->width_num <= 0 || settings->width_denom < 0)
+ settings->width_num = settings->width_denom = 0;
g_free(s);
}
}
- if (width_given && (c = obt_xml_find_node(n->children, "height"))) {
- gchar *s = obt_xml_node_string(c);
- config_parse_relative_number(s,
- &settings->height_num,
- &settings->height_denom);
- if (settings->height_num > 0 && settings->height_denom >= 0)
- settings->size_given = TRUE;
- g_free(s);
+ if ((c = obt_xml_find_node(n->children, "height"))) {
+ if (!obt_xml_node_contains(c, "default")) {
+ gchar *s = obt_xml_node_string(c);
+ config_parse_relative_number(s,
+ &settings->height_num,
+ &settings->height_denom);
+ if (settings->height_num <= 0 || settings->height_denom < 0)
+ settings->height_num = settings->height_denom = 0;
+ g_free(s);
+ }
}
}
diff --git a/openbox/config.h b/openbox/config.h
index 87662ab9..ce1ff885 100644
--- a/openbox/config.h
+++ b/openbox/config.h
@@ -51,7 +51,6 @@ struct _ObAppSettings
gint width_denom;
gint height_num;
gint height_denom;
- gboolean size_given;
guint desktop;
gint shade;
diff --git a/openbox/place.c b/openbox/place.c
index d2d66e02..7d5c8694 100644
--- a/openbox/place.c
+++ b/openbox/place.c
@@ -322,28 +322,32 @@ static void place_per_app_setting_size(ObClient *client, Rect *screen,
gint *w, gint *h,
ObAppSettings *settings)
{
- if (!settings || !settings->size_given)
+ if (!settings)
return;
- ob_debug("sizing by per-app settings");
-
- g_assert(settings->width_num > 0);
+ g_assert(settings->width_num >= 0);
g_assert(settings->width_denom >= 0);
- g_assert(settings->height_num > 0);
+ g_assert(settings->height_num >= 0);
g_assert(settings->height_denom >= 0);
- if (!settings->width_denom)
- *w = settings->width_num;
- else {
- *w = screen->width * settings->width_num / settings->width_denom;
- *w = MIN(*w, screen->width);
+ if (settings->width_num) {
+ ob_debug("setting width by per-app settings");
+ if (!settings->width_denom)
+ *w = settings->width_num;
+ else {
+ *w = screen->width * settings->width_num / settings->width_denom;
+ *w = MIN(*w, screen->width);
+ }
}
- if (!settings->height_denom)
- *h = settings->height_num;
- else {
- *h = screen->height * settings->height_num / settings->height_denom;
- *h = MIN(*h, screen->height);
+ if (settings->height_num) {
+ ob_debug("setting height by per-app settings");
+ if (!settings->height_denom)
+ *h = settings->height_num;
+ else {
+ *h = screen->height * settings->height_num / settings->height_denom;
+ *h = MIN(*h, screen->height);
+ }
}
}