mirror of
https://github.com/0intro/wmii
synced 2025-03-14 02:33:15 +03:00
changed UTF8 stuff somewhat
This commit is contained in:
parent
970e0d1fe5
commit
01db208f43
@ -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);
|
||||
|
@ -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 *
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user