mirror of
https://github.com/0intro/wmii
synced 2024-11-22 05:42:05 +03:00
Some preliminary changes to make managed mode more cohesive.
This commit is contained in:
parent
54f2e140d8
commit
ca77b0cd99
@ -513,7 +513,7 @@ apply_sizehints(Client *c, XRectangle *r, Bool floating, Bool frame, BlitzAlign
|
|||||||
s = &c->size;
|
s = &c->size;
|
||||||
orig = *r;
|
orig = *r;
|
||||||
if(frame)
|
if(frame)
|
||||||
frame2client(r);
|
frame2client(c->sel, r);
|
||||||
bw = 0;
|
bw = 0;
|
||||||
bh = 0;
|
bh = 0;
|
||||||
|
|
||||||
@ -564,7 +564,7 @@ apply_sizehints(Client *c, XRectangle *r, Bool floating, Bool frame, BlitzAlign
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(frame)
|
if(frame)
|
||||||
client2frame(r);
|
client2frame(c->sel, r);
|
||||||
|
|
||||||
if(!(s->flags & PMinSize) || !floating) {
|
if(!(s->flags & PMinSize) || !floating) {
|
||||||
if(r->width > orig.width)
|
if(r->width > orig.width)
|
||||||
|
@ -80,10 +80,15 @@ buttonpress(XEvent *e) {
|
|||||||
if(frame_to_top(f))
|
if(frame_to_top(f))
|
||||||
restack_view(f->view);
|
restack_view(f->view);
|
||||||
|
|
||||||
if(ptinrect(ev->x, ev->y, &f->grabbox))
|
if(ingrabbox(f, ev->x, ev->y))
|
||||||
|
do_mouse_resize(f->client, False,
|
||||||
|
quadrant(&f->rect, ev->x_root, ev->y_root) & (EAST|WEST));
|
||||||
|
else if(ptinrect(ev->x, ev->y, &f->grabbox))
|
||||||
do_mouse_resize(f->client, True, CENTER);
|
do_mouse_resize(f->client, True, CENTER);
|
||||||
else if(!ev->subwindow && !ptinrect(ev->x, ev->y, &f->titlebar))
|
else if(f->area->floating)
|
||||||
do_mouse_resize(f->client, False, quadrant(&f->rect, ev->x_root, ev->y_root));
|
if(!ev->subwindow && !ptinrect(ev->x, ev->y, &f->titlebar))
|
||||||
|
do_mouse_resize(f->client, False,
|
||||||
|
quadrant(&f->rect, ev->x_root, ev->y_root));
|
||||||
|
|
||||||
if(f->client != selclient())
|
if(f->client != selclient())
|
||||||
focus(f->client, True);
|
focus(f->client, True);
|
||||||
|
@ -91,8 +91,9 @@ Bool frame_to_top(Frame *f);
|
|||||||
void set_frame_cursor(Frame *f, int x, int y);
|
void set_frame_cursor(Frame *f, int x, int y);
|
||||||
void swap_frames(Frame *fa, Frame *fb);
|
void swap_frames(Frame *fa, Frame *fb);
|
||||||
int frame_delta_h();
|
int frame_delta_h();
|
||||||
void frame2client(XRectangle *r);
|
void frame2client(Frame *f, XRectangle *r);
|
||||||
void client2frame(XRectangle *r);
|
void client2frame(Frame *f, XRectangle *r);
|
||||||
|
int ingrabbox(Frame *f, int x, int y);
|
||||||
void draw_frame(Frame *f);
|
void draw_frame(Frame *f);
|
||||||
void draw_frames();
|
void draw_frames();
|
||||||
void update_frame_widget_colors(Frame *f);
|
void update_frame_widget_colors(Frame *f);
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
/* Copyright ©2006-2007 Kris Maglione <fbsdaemon@gmail.com>
|
/* Copyright ©2006-2007 Kris Maglione <fbsdaemon@gmail.com>
|
||||||
* See LICENSE file for license details.
|
* See LICENSE file for license details.
|
||||||
*/
|
*/
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <util.h>
|
#include <util.h>
|
||||||
#include "dat.h"
|
#include "dat.h"
|
||||||
#include "fns.h"
|
#include "fns.h"
|
||||||
@ -72,15 +74,25 @@ insert_frame(Frame *pos, Frame *f, Bool before) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
frame2client(XRectangle *r) {
|
frame2client(Frame *f, XRectangle *r) {
|
||||||
r->width = max(r->width - def.border * 2, 1);
|
if(f->area->floating) {
|
||||||
r->height = max(r->height - frame_delta_h(), 1);
|
r->width = max(r->width - def.border * 2, 1);
|
||||||
|
r->height = max(r->height - frame_delta_h(), 1);
|
||||||
|
}else {
|
||||||
|
r->width = max(r->width - 2, 1);
|
||||||
|
r->height = max(r->height - labelh(&def.font) - 1, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
client2frame(XRectangle *r) {
|
client2frame(Frame *f, XRectangle *r) {
|
||||||
r->width += def.border * 2;
|
if(f->area->floating) {
|
||||||
r->height += frame_delta_h();
|
r->width += def.border * 2;
|
||||||
|
r->height += frame_delta_h();
|
||||||
|
}else {
|
||||||
|
r->width += 2;
|
||||||
|
r->height +=labelh(&def.font) + 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -98,7 +110,7 @@ resize_frame(Frame *f, XRectangle *r) {
|
|||||||
if(f->area->floating)
|
if(f->area->floating)
|
||||||
f->rect = f->crect;
|
f->rect = f->crect;
|
||||||
|
|
||||||
frame2client(&f->crect);
|
frame2client(f, &f->crect);
|
||||||
|
|
||||||
if(f->crect.height < labelh(&def.font))
|
if(f->crect.height < labelh(&def.font))
|
||||||
f->collapsed = True;
|
f->collapsed = True;
|
||||||
@ -126,7 +138,7 @@ resize_frame(Frame *f, XRectangle *r) {
|
|||||||
f->rect = f->crect;
|
f->rect = f->crect;
|
||||||
f->rect.x = -def.border;
|
f->rect.x = -def.border;
|
||||||
f->rect.y = -labelh(&def.font);
|
f->rect.y = -labelh(&def.font);
|
||||||
client2frame(&f->rect);
|
client2frame(f, &f->rect);
|
||||||
}else
|
}else
|
||||||
check_frame_constraints(&f->rect);
|
check_frame_constraints(&f->rect);
|
||||||
}
|
}
|
||||||
@ -137,14 +149,16 @@ set_frame_cursor(Frame *f, int x, int y) {
|
|||||||
XRectangle r;
|
XRectangle r;
|
||||||
Cursor cur;
|
Cursor cur;
|
||||||
|
|
||||||
if(!ptinrect(x, y, &f->titlebar)
|
if(f->area->floating
|
||||||
&&!ptinrect(x, y, &f->crect)) {
|
&& !ptinrect(x, y, &f->titlebar)
|
||||||
|
&& !ptinrect(x, y, &f->crect)
|
||||||
|
&& !ingrabbox(f, x, y)) {
|
||||||
r = f->rect;
|
r = f->rect;
|
||||||
r.x = 0;
|
r.x = 0;
|
||||||
r.y = 0;
|
r.y = 0;
|
||||||
cur = cursor_of_quad(quadrant(&r, x, y));
|
cur = cursor_of_quad(quadrant(&r, x, y));
|
||||||
set_cursor(f->client, cur);
|
set_cursor(f->client, cur);
|
||||||
}else
|
} else
|
||||||
set_cursor(f->client, cursor[CurNormal]);
|
set_cursor(f->client, cursor[CurNormal]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,10 +262,35 @@ frame_delta_h() {
|
|||||||
return def.border + labelh(&def.font);
|
return def.border + labelh(&def.font);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ingrabbox(Frame *f, int x, int y) {
|
||||||
|
int dx, h;
|
||||||
|
|
||||||
|
if(f->area->floating)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
h = labelh(&def.font) / 3;
|
||||||
|
h = max(h, 4);
|
||||||
|
|
||||||
|
if((f == f->area->frame) && f->area->next)
|
||||||
|
if(x >= f->rect.width - h) {
|
||||||
|
dx = x - (f->rect.width - h);
|
||||||
|
if(y <= dx)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if((f == f->area->frame) && (f->area != f->view->area->next))
|
||||||
|
if(x <= h && y <= h - x)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
draw_frame(Frame *f) {
|
draw_frame(Frame *f) {
|
||||||
BlitzBrush br = { 0 };
|
BlitzBrush br = { 0 };
|
||||||
|
XPoint pt[3];
|
||||||
Frame *tf;
|
Frame *tf;
|
||||||
|
int h;
|
||||||
|
|
||||||
if(f->view != screen->sel)
|
if(f->view != screen->sel)
|
||||||
return;
|
return;
|
||||||
@ -302,6 +341,30 @@ draw_frame(Frame *f) {
|
|||||||
f->grabbox = br.rect;
|
f->grabbox = br.rect;
|
||||||
draw_tile(&br);
|
draw_tile(&br);
|
||||||
|
|
||||||
|
if(!f->area->floating) {
|
||||||
|
XSetLineAttributes(blz.dpy, br.gc, 1, LineSolid, CapButt, JoinMiter);
|
||||||
|
h = labelh(&def.font) / 3;
|
||||||
|
h = max(h, 4);
|
||||||
|
if((f == f->area->frame) && f->area->next) {
|
||||||
|
pt[0] = (XPoint){ f->rect.width - h, 0 };
|
||||||
|
pt[1] = (XPoint){ f->rect.width, h };
|
||||||
|
pt[2] = (XPoint){ f->rect.width, 0 };
|
||||||
|
XSetForeground(blz.dpy, br.gc, def.normcolor.bg);
|
||||||
|
XFillPolygon(blz.dpy, br.drawable, br.gc, pt, 3, Convex, CoordModeOrigin);
|
||||||
|
XSetForeground(blz.dpy, br.gc, br.color.border);
|
||||||
|
XDrawLines(blz.dpy, br.drawable, br.gc, pt, 2, CoordModeOrigin);
|
||||||
|
}
|
||||||
|
if((f == f->area->frame) && (f->area != f->view->area->next)) {
|
||||||
|
pt[0] = (XPoint){ h, 0 };
|
||||||
|
pt[1] = (XPoint){ 0, h };
|
||||||
|
pt[2] = (XPoint){ 0, 0 };
|
||||||
|
XSetForeground(blz.dpy, br.gc, def.normcolor.bg);
|
||||||
|
XFillPolygon(blz.dpy, br.drawable, br.gc, pt, 3, Convex, CoordModeOrigin);
|
||||||
|
XSetForeground(blz.dpy, br.gc, br.color.border);
|
||||||
|
XDrawLines(blz.dpy, br.drawable, br.gc, pt, 2, CoordModeOrigin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
XCopyArea(
|
XCopyArea(
|
||||||
/* display */ blz.dpy,
|
/* display */ blz.dpy,
|
||||||
/* src */ pmap,
|
/* src */ pmap,
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/* Datatypes: */
|
/* Datatypes: */
|
||||||
/**************/
|
|
||||||
typedef struct Dirtab Dirtab;
|
typedef struct Dirtab Dirtab;
|
||||||
struct Dirtab {
|
struct Dirtab {
|
||||||
char *name;
|
char *name;
|
||||||
@ -48,7 +47,6 @@ struct FileId {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* Constants */
|
/* Constants */
|
||||||
/*************/
|
|
||||||
enum { /* Dirs */
|
enum { /* Dirs */
|
||||||
FsRoot, FsDClient, FsDClients, FsDBars,
|
FsRoot, FsDClient, FsDClients, FsDBars,
|
||||||
FsDTag, FsDTags,
|
FsDTag, FsDTags,
|
||||||
|
@ -27,7 +27,7 @@ static char *address, *ns_path;
|
|||||||
static Bool check_other_wm;
|
static Bool check_other_wm;
|
||||||
static struct sigaction sa;
|
static struct sigaction sa;
|
||||||
static struct passwd *passwd;
|
static struct passwd *passwd;
|
||||||
static int sleeperfd, sock;
|
static int sleeperfd, sock, exitsignal;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
usage() {
|
usage() {
|
||||||
@ -54,8 +54,8 @@ scan_wins() {
|
|||||||
for(i = 0; i < num; i++) {
|
for(i = 0; i < num; i++) {
|
||||||
if(!XGetWindowAttributes(blz.dpy, wins[i], &wa))
|
if(!XGetWindowAttributes(blz.dpy, wins[i], &wa))
|
||||||
continue;
|
continue;
|
||||||
if(XGetTransientForHint(blz.dpy, wins[i], &d1)
|
if((XGetTransientForHint(blz.dpy, wins[i], &d1))
|
||||||
&& wa.map_state == IsViewable)
|
&& (wa.map_state == IsViewable))
|
||||||
manage_client(create_client(wins[i], &wa));
|
manage_client(create_client(wins[i], &wa));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -167,11 +167,9 @@ init_ns() {
|
|||||||
if(stat(ns_path, &st))
|
if(stat(ns_path, &st))
|
||||||
fatal("Can't stat ns_path '%s':", ns_path);
|
fatal("Can't stat ns_path '%s':", ns_path);
|
||||||
if(getuid() != st.st_uid)
|
if(getuid() != st.st_uid)
|
||||||
fatal("ns_path '%s' exists but is not owned by you",
|
fatal("ns_path '%s' exists but is not owned by you", ns_path);
|
||||||
ns_path);
|
|
||||||
if(st.st_mode & 077)
|
if(st.st_mode & 077)
|
||||||
fatal("ns_path '%s' exists, but has group or world permissions",
|
fatal("ns_path '%s' exists, but has group or world permissions", ns_path);
|
||||||
ns_path);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -295,7 +293,7 @@ wmii_error_handler(Display *dpy, XErrorEvent *error) {
|
|||||||
|
|
||||||
for(i = 0; i < nelem(itab); i++)
|
for(i = 0; i < nelem(itab); i++)
|
||||||
if((itab[i].rcode == 0 || itab[i].rcode == error->request_code)
|
if((itab[i].rcode == 0 || itab[i].rcode == error->request_code)
|
||||||
&&(itab[i].ecode == 0 || itab[i].ecode == error->error_code))
|
&& (itab[i].ecode == 0 || itab[i].ecode == error->error_code))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fprintf(stderr, "%s: fatal error: Xrequest code=%d, Xerror code=%d\n",
|
fprintf(stderr, "%s: fatal error: Xrequest code=%d, Xerror code=%d\n",
|
||||||
@ -317,14 +315,13 @@ cleanup_handler(int signal) {
|
|||||||
sa.sa_handler = SIG_DFL;
|
sa.sa_handler = SIG_DFL;
|
||||||
sigaction(signal, &sa, nil);
|
sigaction(signal, &sa, nil);
|
||||||
|
|
||||||
|
srv.running = False;
|
||||||
|
|
||||||
switch(signal) {
|
switch(signal) {
|
||||||
case SIGINT:
|
|
||||||
srv.running = False;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
cleanup();
|
exitsignal = signal;
|
||||||
XCloseDisplay(blz.dpy);
|
break;
|
||||||
raise(signal);
|
case SIGINT:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -429,11 +426,8 @@ main(int argc, char *argv[]) {
|
|||||||
XSetWindowAttributes wa;
|
XSetWindowAttributes wa;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
passwd = getpwuid(getuid());
|
|
||||||
user = estrdup(passwd->pw_name);
|
|
||||||
wmiirc = "wmiistartrc";
|
wmiirc = "wmiistartrc";
|
||||||
|
|
||||||
/* command line args */
|
|
||||||
ARGBEGIN{
|
ARGBEGIN{
|
||||||
case 'v':
|
case 'v':
|
||||||
printf("%s", version);
|
printf("%s", version);
|
||||||
@ -452,6 +446,9 @@ main(int argc, char *argv[]) {
|
|||||||
break;
|
break;
|
||||||
}ARGEND;
|
}ARGEND;
|
||||||
|
|
||||||
|
if(argc)
|
||||||
|
usage();
|
||||||
|
|
||||||
setlocale(LC_CTYPE, "");
|
setlocale(LC_CTYPE, "");
|
||||||
starting = True;
|
starting = True;
|
||||||
|
|
||||||
@ -467,8 +464,10 @@ main(int argc, char *argv[]) {
|
|||||||
XSync(blz.dpy, False);
|
XSync(blz.dpy, False);
|
||||||
check_other_wm = False;
|
check_other_wm = False;
|
||||||
|
|
||||||
|
passwd = getpwuid(getuid());
|
||||||
|
user = estrdup(passwd->pw_name);
|
||||||
|
|
||||||
init_environment();
|
init_environment();
|
||||||
init_traps();
|
|
||||||
|
|
||||||
errstr = nil;
|
errstr = nil;
|
||||||
sock = ixp_announce(address);
|
sock = ixp_announce(address);
|
||||||
@ -497,6 +496,7 @@ main(int argc, char *argv[]) {
|
|||||||
loadcolor(&blz, &def.focuscolor);
|
loadcolor(&blz, &def.focuscolor);
|
||||||
loadcolor(&blz, &def.normcolor);
|
loadcolor(&blz, &def.normcolor);
|
||||||
|
|
||||||
|
init_traps();
|
||||||
init_atoms();
|
init_atoms();
|
||||||
init_cursors();
|
init_cursors();
|
||||||
loadfont(&blz, &def.font);
|
loadfont(&blz, &def.font);
|
||||||
@ -580,9 +580,10 @@ main(int argc, char *argv[]) {
|
|||||||
ixp_server_close(&srv);
|
ixp_server_close(&srv);
|
||||||
close(sleeperfd);
|
close(sleeperfd);
|
||||||
|
|
||||||
|
if(exitsignal)
|
||||||
|
raise(exitsignal);
|
||||||
if(execstr)
|
if(execstr)
|
||||||
execl("/bin/sh", "sh", "-c", execstr, nil);
|
execl("/bin/sh", "sh", "-c", execstr, nil);
|
||||||
|
|
||||||
if(errstr)
|
if(errstr)
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
10
util/compile
10
util/compile
@ -10,11 +10,11 @@ echo CC ${BASE}$outfile
|
|||||||
$CC -o $outfile $CFLAGS $@ 2>$xtmp
|
$CC -o $outfile $CFLAGS $@ 2>$xtmp
|
||||||
status=$?
|
status=$?
|
||||||
|
|
||||||
cat $xtmp \
|
cat $xtmp |
|
||||||
| egrep -v ': error: .Each undeclared identifier|: error: for each function it appears|is dangerous, better use|is almost always misused|: In function |: At top level:|support .long long.|use of C99 long long|ISO C forbids conversion' \
|
egrep -v ': error: .Each undeclared identifier|: error: for each function it appears|is dangerous, better use|is almost always misused|: In function |: At top level:|support .long long.|use of C99 long long|ISO C forbids conversion' |
|
||||||
| sed 's/ .first use in this function.$//; s/\"\([^\"][^\"]*\)\", line \([0-9][0-9]*\)/\1:\2/g' \
|
sed 's/ .first use in this function.$//; s/\"\([^\"][^\"]*\)\", line \([0-9][0-9]*\)/\1:\2/g' |
|
||||||
| uniq 1>&2
|
uniq 1>&2
|
||||||
|
|
||||||
rm -f $xtmp $xtmp.status
|
rm -f $xtmp
|
||||||
exit $status
|
exit $status
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user