changed UTF8 stuff somewhat

This commit is contained in:
Anselm R. Garbe 2006-04-24 16:03:37 +02:00
parent 970e0d1fe5
commit 01db208f43
5 changed files with 63 additions and 46 deletions

View File

@ -226,15 +226,21 @@ place_client(Area *a, Client *c)
void
attach_to_area(Area *a, Client *c)
{
unsigned int aidx = idx_of_area(a);
Frame *f = create_frame(a, c);
unsigned int h = 0, aidx = idx_of_area(a);
Frame *f;
c->floating = !aidx;
if(aidx) { /* column */
if(aidx && a->frame.size) {
h = a->rect.height / a->frame.size;
if(a->frame.size > 1)
f->rect.height = a->rect.height / (a->frame.size - 1);
arrange_column(a, False);
scale_column(a, a->rect.height - h);
}
f = create_frame(a, c);
f->rect.height = h;
if(aidx) /* column */
arrange_column(a, False);
else { /* floating */
place_client(a, c);
resize_client(c, &f->rect, False);

View File

@ -22,29 +22,25 @@ static void
update_client_name(Client *c)
{
XTextProperty name;
c->name[0] = 0;
XGetTextProperty(dpy, c->win, &name, net_atom[NetWMName]);
if(!name.value || !name.nitems)
XGetTextProperty(dpy, c->win, &name, XA_WM_NAME);
if(name.value && name.nitems) {
if(name.encoding == XA_STRING)
cext_strlcpy(c->name, (char *)name.value, sizeof(c->name));
else {
int n;
char **list = nil;
name.nitems = strlen((char *)name.value);
if(Xutf8TextPropertyToTextList(dpy, &name, &list, &n) == Success
&& n > 0 && *list)
{
cext_strlcpy(c->name, *list, sizeof(c->name));
XFreeStringList(list);
}
else
c->name[0] = 0;
if(name.value && name.nitems && name.encoding == UTF8_STRING && name.format == 8) {
int n;
char **list = nil;
if(Xutf8TextPropertyToTextList(dpy, &name, &list, &n) == Success
&& n > 0 && *list)
{
cext_strlcpy(c->name, *list, sizeof(c->name));
XFreeStringList(list);
}
XFree(name.value);
return;
}
if(XGetWMName(dpy, c->win, &name) && name.value) {
cext_strlcpy(c->name, (char *)name.value, sizeof(c->name));
XFree(name.value);
}
else
c->name[0] = 0;
}
Client *

View File

@ -104,12 +104,40 @@ relax_column(Area *a)
}
void
arrange_column(Area *a, Bool dirty)
scale_column(Area *a, float h)
{
unsigned int i, yoff = a->rect.y, h, dy = 0;
float scale = 1.0;
unsigned int i, yoff = a->rect.y;
unsigned int min_height = 2 * height_of_bar();
int hdiff = 0;
float scale, dy = 0;
if(!a->frame.size)
return;
for(i = 0; i < a->frame.size; i++)
dy += a->frame.data[i]->rect.height;
scale = h / dy;
for(i = 0; i < a->frame.size; i++) {
Frame *f = a->frame.data[i];
f->rect.x = a->rect.x;
f->rect.y = yoff;
f->rect.width = a->rect.width;
f->rect.height *= scale;
if(f->rect.height < min_height)
f->rect.height = min_height;
else if((hdiff = yoff + f->rect.height - h + (a->frame.size - i) * min_height) > 0)
f->rect.height -= hdiff;
if(i == a->frame.size - 1)
f->rect.height = a->rect.height - yoff;
yoff += f->rect.height;
resize_client(f->client, &f->rect, True);
}
}
void
arrange_column(Area *a, Bool dirty)
{
unsigned int i, yoff = a->rect.y, h;
if(!a->frame.size)
return;
@ -117,30 +145,13 @@ arrange_column(Area *a, Bool dirty)
switch(a->mode) {
case Coldefault:
h = a->rect.height / a->frame.size;
if(h < (2 * height_of_bar()))
if(h < 2 * height_of_bar()) /* min height */
goto Fallthrough;
if(dirty) {
for(i = 0; i < a->frame.size; i++)
a->frame.data[i]->rect.height = h;
}
for(i = 0; i < a->frame.size; i++)
dy += a->frame.data[i]->rect.height;
scale = (float)a->rect.height / (float)dy;
for(i = 0; i < a->frame.size; i++) {
Frame *f = a->frame.data[i];
f->rect.x = a->rect.x;
f->rect.y = yoff;
f->rect.width = a->rect.width;
f->rect.height *= scale;
if(f->rect.height < min_height)
f->rect.height = min_height;
else if((hdiff = f->rect.y + f->rect.height - a->rect.height + (a->frame.size - i) * min_height) > 0)
f->rect.height -= hdiff;
if(i == a->frame.size - 1)
f->rect.height = a->rect.height - f->rect.y + a->rect.y;
yoff += f->rect.height;
resize_client(f->client, &f->rect, True);
}
scale_column(a, a->rect.height);
break;
case Colstack:
h = a->rect.height - (a->frame.size - 1) * height_of_bar();

View File

@ -127,6 +127,8 @@ init_atoms()
XChangeProperty(dpy, root, net_atom[NetSupported],
XA_ATOM, 32, PropModeReplace, (unsigned char *)net_atom, NetLast);
UTF8_STRING = XInternAtom(dpy, "UTF8_STRING", False);
}
static void

View File

@ -190,6 +190,7 @@ Qid root_qid;
Default def;
Atom wm_atom[WMLast];
Atom net_atom[NetLast];
Atom UTF8_STRING;
Cursor cursor[CurLast];
unsigned int valid_mask;
unsigned int num_lock_mask;
@ -242,6 +243,7 @@ void draw_clients();
/* column.c */
void arrange_column(Area *a, Bool dirty);
void scale_column(Area *a, float h);
void resize_column(Client *c, XRectangle *r, XPoint *pt);
int column_mode_of_str(char *arg);
char *str_of_column_mode(int mode);