summaryrefslogtreecommitdiff
path: root/openbox/popup.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-05-02 00:35:22 +0000
committerDana Jansens <danakj@orodu.net>2007-05-02 00:35:22 +0000
commit66d6e1120ec4e66433ecec673258856def164070 (patch)
treec8737ad9ab52c9883b572c6ced2d2dbecefe2e6f /openbox/popup.c
parenta223fa20579fec9ba731e426b0a28ce983862b6c (diff)
small change to the render API. RrMinsize became RrMinSize. added RrMinWidth and RrMinHeight.
make focus/desktop popups wider based on the screen size with the old size as a minimum. left-align the desktop dialog.. i think better dialogs would be nice. and to make them hide or something when you switch desktops while switching windows etc.
Diffstat (limited to 'openbox/popup.c')
-rw-r--r--openbox/popup.c54
1 files changed, 40 insertions, 14 deletions
diff --git a/openbox/popup.c b/openbox/popup.c
index 9af23be0..392aa9d1 100644
--- a/openbox/popup.c
+++ b/openbox/popup.c
@@ -75,25 +75,52 @@ void popup_position(ObPopup *self, gint gravity, gint x, gint y)
self->y = y;
}
-void popup_size(ObPopup *self, gint w, gint h)
+void popup_width(ObPopup *self, gint w)
{
self->w = w;
- self->h = h;
}
-void popup_size_to_string(ObPopup *self, gchar *text)
+void popup_height(ObPopup *self, gint h)
{
- gint textw, texth;
- gint iconw;
+ gint texth;
- self->a_text->texture[0].data.text.string = text;
- RrMinsize(self->a_text, &textw, &texth);
- /*XXX textw += ob_rr_theme->bevel * 2;*/
- texth += ob_rr_theme->paddingy * 2;
+ /* don't let the height be smaller than the text */
+ texth = RrMinHeight(self->a_text) + ob_rr_theme->paddingy * 2;
+ self->h = MAX(h, texth);
+}
- self->h = texth + ob_rr_theme->paddingy * 2;
- iconw = (self->hasicon ? texth : 0);
+void popup_width_to_string(ObPopup *self, gchar *text, gint max)
+{
+ gint textw, iconw;
+
+ self->a_text->texture[0].data.text.string = text;
+ textw = RrMinWidth(self->a_text);
+ if (self->hasicon) {
+ gint texth = RrMinHeight(self->a_text) + ob_rr_theme->paddingy * 2;
+ iconw = texth;
+ } else
+ iconw = 0;
self->w = textw + iconw + ob_rr_theme->paddingx * (self->hasicon ? 3 : 2);
+ /* cap it at "max" */
+ if (max > 0)
+ self->w = MIN(self->w, max);
+}
+
+void popup_height_to_string(ObPopup *self, gchar *text)
+{
+ self->h = RrMinHeight(self->a_text) + ob_rr_theme->paddingy * 2;
+}
+
+void popup_width_to_strings(ObPopup *self, gchar **strings, gint max)
+{
+ gint i, maxw;
+
+ maxw = 0;
+ for (i = 0; strings[i] != NULL; ++i) {
+ popup_width_to_string(self, strings[i], max);
+ maxw = MAX(maxw, self->w);
+ }
+ self->w = maxw;
}
void popup_set_text_align(ObPopup *self, RrJustify align)
@@ -122,9 +149,8 @@ void popup_show(ObPopup *self, gchar *text)
/* set up the textures */
self->a_text->texture[0].data.text.string = text;
- /* measure the shit out */
- RrMinsize(self->a_text, &textw, &texth);
- /*XXX textw += ob_rr_theme->padding * 2;*/
+ /* measure the text out */
+ RrMinSize(self->a_text, &textw, &texth);
texth += ob_rr_theme->paddingy * 2;
/* set the sizes up and reget the text sizes from the calculated