parent
9577d31aaf
commit
e9230a8aa5
4
src/E.h
4
src/E.h
|
@ -209,10 +209,6 @@
|
|||
*/
|
||||
#include "etypes.h"
|
||||
|
||||
typedef struct {
|
||||
int min, max;
|
||||
} Constraints;
|
||||
|
||||
typedef struct {
|
||||
Window xwin;
|
||||
Win win;
|
||||
|
|
|
@ -28,6 +28,10 @@
|
|||
#include "eimage.h"
|
||||
#include "etypes.h"
|
||||
|
||||
typedef struct {
|
||||
int min, max;
|
||||
} WinLimit;
|
||||
|
||||
typedef struct {
|
||||
int originbox;
|
||||
struct {
|
||||
|
@ -37,7 +41,7 @@ typedef struct {
|
|||
} WinPoint;
|
||||
|
||||
typedef struct {
|
||||
Constraints width, height;
|
||||
WinLimit width, height;
|
||||
WinPoint topleft, bottomright;
|
||||
} Geometry;
|
||||
|
||||
|
|
|
@ -42,7 +42,8 @@
|
|||
PointerMotionMask)
|
||||
|
||||
typedef struct {
|
||||
Constraints width, height;
|
||||
int width_min, width_max;
|
||||
int height_min, height_max;
|
||||
int xorigin, yorigin;
|
||||
int xabs, xrel;
|
||||
int yabs, yrel;
|
||||
|
@ -140,10 +141,10 @@ ButtonCreate(const char *name, int id, const char *iclass,
|
|||
b->tclass = TextclassAlloc(tclass, 1);
|
||||
|
||||
b->flags = flags;
|
||||
b->geom.width.min = minw;
|
||||
b->geom.width.max = maxw;
|
||||
b->geom.height.min = minh;
|
||||
b->geom.height.max = maxh;
|
||||
b->geom.width_min = minw;
|
||||
b->geom.width_max = maxw;
|
||||
b->geom.height_min = minh;
|
||||
b->geom.height_max = maxh;
|
||||
b->geom.xorigin = xo;
|
||||
b->geom.yorigin = yo;
|
||||
b->geom.xabs = xa;
|
||||
|
@ -236,14 +237,14 @@ ButtonCalc(Button * b)
|
|||
w = ((b->geom.xsizerel * VRoot.w) >> 10) + b->geom.xsizeabs;
|
||||
h = ((b->geom.ysizerel * VRoot.h) >> 10) + b->geom.ysizeabs;
|
||||
}
|
||||
if (w > b->geom.width.max)
|
||||
w = b->geom.width.max;
|
||||
else if (w < b->geom.width.min)
|
||||
w = b->geom.width.min;
|
||||
if (h > b->geom.height.max)
|
||||
h = b->geom.height.max;
|
||||
else if (h < b->geom.height.min)
|
||||
h = b->geom.height.min;
|
||||
if (w > b->geom.width_max)
|
||||
w = b->geom.width_max;
|
||||
else if (w < b->geom.width_min)
|
||||
w = b->geom.width_min;
|
||||
if (h > b->geom.height_max)
|
||||
h = b->geom.height_max;
|
||||
else if (h < b->geom.height_min)
|
||||
h = b->geom.height_min;
|
||||
xo = (w * b->geom.xorigin) >> 10;
|
||||
yo = (h * b->geom.yorigin) >> 10;
|
||||
x = ((b->geom.xrel * VRoot.w) >> 10) + b->geom.xabs - xo;
|
||||
|
@ -703,10 +704,10 @@ ButtonsConfigLoad(FILE * fs)
|
|||
pbt->flags = flags;
|
||||
pbt->internal = internal;
|
||||
pbt->default_show = show;
|
||||
pbt->geom.width.min = minw;
|
||||
pbt->geom.width.max = maxw;
|
||||
pbt->geom.height.min = minh;
|
||||
pbt->geom.height.max = maxh;
|
||||
pbt->geom.width_min = minw;
|
||||
pbt->geom.width_max = maxw;
|
||||
pbt->geom.height_min = minh;
|
||||
pbt->geom.height_max = maxh;
|
||||
pbt->geom.xorigin = xo;
|
||||
pbt->geom.yorigin = yo;
|
||||
pbt->geom.xabs = xa;
|
||||
|
@ -853,10 +854,10 @@ ButtonsConfigSave(void)
|
|||
fprintf(fs, "11 %s\n", ActionclassGetName(b->aclass));
|
||||
if (EoGetLayer(b) >= 0)
|
||||
fprintf(fs, "453 %i\n", EoGetLayer(b));
|
||||
fprintf(fs, "456 %i\n", b->geom.width.min);
|
||||
fprintf(fs, "457 %i\n", b->geom.width.max);
|
||||
fprintf(fs, "468 %i\n", b->geom.height.min);
|
||||
fprintf(fs, "469 %i\n", b->geom.height.max);
|
||||
fprintf(fs, "456 %i\n", b->geom.width_min);
|
||||
fprintf(fs, "457 %i\n", b->geom.width_max);
|
||||
fprintf(fs, "468 %i\n", b->geom.height_min);
|
||||
fprintf(fs, "469 %i\n", b->geom.height_max);
|
||||
fprintf(fs, "528 %i\n", b->geom.xorigin);
|
||||
fprintf(fs, "529 %i\n", b->geom.yorigin);
|
||||
fprintf(fs, "530 %i\n", b->geom.xabs);
|
||||
|
|
|
@ -104,10 +104,10 @@ EwinCreate(int type)
|
|||
|
||||
ewin->icccm.need_input = 1;
|
||||
|
||||
ewin->icccm.width.min = 0;
|
||||
ewin->icccm.height.min = 0;
|
||||
ewin->icccm.width.max = 65535;
|
||||
ewin->icccm.height.max = 65535;
|
||||
ewin->icccm.width_min = 0;
|
||||
ewin->icccm.height_min = 0;
|
||||
ewin->icccm.width_max = 65535;
|
||||
ewin->icccm.height_max = 65535;
|
||||
ewin->icccm.base_w = 0;
|
||||
ewin->icccm.base_h = 0;
|
||||
ewin->icccm.w_inc = 1;
|
||||
|
|
|
@ -176,7 +176,8 @@ struct _ewin {
|
|||
Window client_leader;
|
||||
|
||||
/* WM_NORMAL_HINTS */
|
||||
Constraints width, height;
|
||||
int width_min, width_max;
|
||||
int height_min, height_max;
|
||||
int base_w, base_h;
|
||||
int w_inc, h_inc;
|
||||
int grav;
|
||||
|
|
66
src/icccm.c
66
src/icccm.c
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various contributors
|
||||
* Copyright (C) 2004-2007 Kim Woelders
|
||||
* Copyright (C) 2004-2008 Kim Woelders
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
|
@ -167,14 +167,14 @@ ICCCM_SizeMatch(const EWin * ewin, int wi, int hi, int *pwo, int *pho)
|
|||
w = wi;
|
||||
h = hi;
|
||||
|
||||
if (w < ewin->icccm.width.min)
|
||||
w = ewin->icccm.width.min;
|
||||
if (w > ewin->icccm.width.max)
|
||||
w = ewin->icccm.width.max;
|
||||
if (h < ewin->icccm.height.min)
|
||||
h = ewin->icccm.height.min;
|
||||
if (h > ewin->icccm.height.max)
|
||||
h = ewin->icccm.height.max;
|
||||
if (w < ewin->icccm.width_min)
|
||||
w = ewin->icccm.width_min;
|
||||
if (w > ewin->icccm.width_max)
|
||||
w = ewin->icccm.width_max;
|
||||
if (h < ewin->icccm.height_min)
|
||||
h = ewin->icccm.height_min;
|
||||
if (h > ewin->icccm.height_max)
|
||||
h = ewin->icccm.height_max;
|
||||
if ((w > 0) && (h > 0))
|
||||
{
|
||||
w -= ewin->icccm.base_w;
|
||||
|
@ -240,10 +240,10 @@ ICCCM_SetSizeConstraints(EWin * ewin, unsigned int wmin, unsigned int hmin,
|
|||
unsigned int winc, unsigned int hinc,
|
||||
double amin, double amax)
|
||||
{
|
||||
ewin->icccm.width.min = wmin;
|
||||
ewin->icccm.height.min = hmin;
|
||||
ewin->icccm.width.max = wmax;
|
||||
ewin->icccm.height.max = hmax;
|
||||
ewin->icccm.width_min = wmin;
|
||||
ewin->icccm.height_min = hmin;
|
||||
ewin->icccm.width_max = wmax;
|
||||
ewin->icccm.height_max = hmax;
|
||||
|
||||
ewin->icccm.base_w = wbase;
|
||||
ewin->icccm.base_h = hbase;
|
||||
|
@ -443,24 +443,24 @@ ICCCM_GetGeoms(EWin * ewin)
|
|||
|
||||
if (hint.flags & PMinSize)
|
||||
{
|
||||
ewin->icccm.width.min = MAX(0, hint.min_width);
|
||||
ewin->icccm.height.min = MAX(0, hint.min_height);
|
||||
ewin->icccm.width_min = MAX(0, hint.min_width);
|
||||
ewin->icccm.height_min = MAX(0, hint.min_height);
|
||||
}
|
||||
else
|
||||
{
|
||||
ewin->icccm.width.min = 0;
|
||||
ewin->icccm.height.min = 0;
|
||||
ewin->icccm.width_min = 0;
|
||||
ewin->icccm.height_min = 0;
|
||||
}
|
||||
|
||||
if (hint.flags & PMaxSize)
|
||||
{
|
||||
ewin->icccm.width.max = MIN(hint.max_width, 65535);
|
||||
ewin->icccm.height.max = MIN(hint.max_height, 65535);
|
||||
ewin->icccm.width_max = MIN(hint.max_width, 65535);
|
||||
ewin->icccm.height_max = MIN(hint.max_height, 65535);
|
||||
}
|
||||
else
|
||||
{
|
||||
ewin->icccm.width.max = 65535;
|
||||
ewin->icccm.height.max = 65535;
|
||||
ewin->icccm.width_max = 65535;
|
||||
ewin->icccm.height_max = 65535;
|
||||
}
|
||||
|
||||
if (hint.flags & PResizeInc)
|
||||
|
@ -508,23 +508,23 @@ ICCCM_GetGeoms(EWin * ewin)
|
|||
}
|
||||
else
|
||||
{
|
||||
ewin->icccm.base_w = ewin->icccm.width.min;
|
||||
ewin->icccm.base_h = ewin->icccm.height.min;
|
||||
ewin->icccm.base_w = ewin->icccm.width_min;
|
||||
ewin->icccm.base_h = ewin->icccm.height_min;
|
||||
}
|
||||
|
||||
if (ewin->icccm.width.min < ewin->icccm.base_w)
|
||||
ewin->icccm.width.min = ewin->icccm.base_w;
|
||||
if (ewin->icccm.height.min < ewin->icccm.base_h)
|
||||
ewin->icccm.height.min = ewin->icccm.base_h;
|
||||
if (ewin->icccm.width_min < ewin->icccm.base_w)
|
||||
ewin->icccm.width_min = ewin->icccm.base_w;
|
||||
if (ewin->icccm.height_min < ewin->icccm.base_h)
|
||||
ewin->icccm.height_min = ewin->icccm.base_h;
|
||||
|
||||
if (ewin->icccm.width.max < ewin->icccm.base_w)
|
||||
ewin->icccm.width.max = ewin->icccm.base_w;
|
||||
if (ewin->icccm.height.max < ewin->icccm.base_h)
|
||||
ewin->icccm.height.max = ewin->icccm.base_h;
|
||||
if (ewin->icccm.width_max < ewin->icccm.base_w)
|
||||
ewin->icccm.width_max = ewin->icccm.base_w;
|
||||
if (ewin->icccm.height_max < ewin->icccm.base_h)
|
||||
ewin->icccm.height_max = ewin->icccm.base_h;
|
||||
}
|
||||
|
||||
ewin->props.no_resize_h = (ewin->icccm.width.min == ewin->icccm.width.max);
|
||||
ewin->props.no_resize_v = (ewin->icccm.height.min == ewin->icccm.height.max);
|
||||
ewin->props.no_resize_h = (ewin->icccm.width_min == ewin->icccm.width_max);
|
||||
ewin->props.no_resize_v = (ewin->icccm.height_min == ewin->icccm.height_max);
|
||||
|
||||
if (EDebug(EDBUG_TYPE_SNAPS))
|
||||
Eprintf("Snap get icccm %#lx: %4d+%4d %4dx%4d: %s\n",
|
||||
|
|
|
@ -1093,8 +1093,8 @@ EwinShowInfo(const EWin * ewin)
|
|||
EwinIsTransient(ewin), EwinGetTransientFor(ewin),
|
||||
ewin->props.no_resize_h, ewin->props.no_resize_v,
|
||||
ewin->state.shaped, ewin->icccm.base_w, ewin->icccm.base_h,
|
||||
ewin->icccm.width.min, ewin->icccm.height.min,
|
||||
ewin->icccm.width.max, ewin->icccm.height.max,
|
||||
ewin->icccm.width_min, ewin->icccm.height_min,
|
||||
ewin->icccm.width_max, ewin->icccm.height_max,
|
||||
ewin->icccm.w_inc, ewin->icccm.h_inc,
|
||||
ewin->icccm.aspect_min, ewin->icccm.aspect_max,
|
||||
ewin->strut.left, ewin->strut.right,
|
||||
|
|
|
@ -41,8 +41,8 @@ struct _windowmatch {
|
|||
char prop;
|
||||
char qual;
|
||||
char *value;
|
||||
Constraints width;
|
||||
Constraints height;
|
||||
int width_min, width_max;
|
||||
int height_min, height_max;
|
||||
/* Match actions */
|
||||
char *args;
|
||||
Border *border;
|
||||
|
@ -108,8 +108,8 @@ WindowMatchCreate(const char *name)
|
|||
ecore_list_prepend(wm_list, b);
|
||||
|
||||
b->name = Estrdup(name);
|
||||
b->width.max = 99999;
|
||||
b->height.max = 99999;
|
||||
b->width_max = 99999;
|
||||
b->height_max = 99999;
|
||||
|
||||
return b;
|
||||
}
|
||||
|
@ -188,7 +188,7 @@ WindowMatchConfigLoad(FILE * fs)
|
|||
wm->match = MATCH_TYPE_SIZE;
|
||||
else
|
||||
wm->match = MATCH_TYPE_SIZE_H;
|
||||
sscanf(s, "%*s %u %u", &(wm->width.min), &(wm->width.max));
|
||||
sscanf(s, "%*s %u %u", &(wm->width_min), &(wm->width_max));
|
||||
break;
|
||||
case WINDOWMATCH_HEIGHT:
|
||||
if (!wm)
|
||||
|
@ -197,7 +197,7 @@ WindowMatchConfigLoad(FILE * fs)
|
|||
wm->match = MATCH_TYPE_SIZE;
|
||||
else
|
||||
wm->match = MATCH_TYPE_SIZE_V;
|
||||
sscanf(s, "%*s %u %u", &(wm->height.min), &(wm->height.max));
|
||||
sscanf(s, "%*s %u %u", &(wm->height_min), &(wm->height_max));
|
||||
break;
|
||||
|
||||
case WINDOWMATCH_TRANSIENT:
|
||||
|
@ -325,24 +325,24 @@ WindowMatchDecode(const char *line)
|
|||
num = sscanf(value, "%u-%ux%u-%u", &w1, &w2, &h1, &h2);
|
||||
if (num < 4)
|
||||
goto case_error;
|
||||
wm->width.min = w1;
|
||||
wm->width.max = w2;
|
||||
wm->height.min = h1;
|
||||
wm->height.max = h2;
|
||||
wm->width_min = w1;
|
||||
wm->width_max = w2;
|
||||
wm->height_min = h1;
|
||||
wm->height_max = h2;
|
||||
break;
|
||||
case MATCH_TYPE_SIZE_H:
|
||||
num = sscanf(value, "%u-%u", &w1, &w2);
|
||||
if (num < 2)
|
||||
goto case_error;
|
||||
wm->width.min = w1;
|
||||
wm->width.max = w2;
|
||||
wm->width_min = w1;
|
||||
wm->width_max = w2;
|
||||
break;
|
||||
case MATCH_TYPE_SIZE_V:
|
||||
num = sscanf(value, "%u-%u", &h1, &h2);
|
||||
if (num < 2)
|
||||
goto case_error;
|
||||
wm->height.min = h1;
|
||||
wm->height.max = h2;
|
||||
wm->height_min = h1;
|
||||
wm->height_max = h2;
|
||||
break;
|
||||
|
||||
case MATCH_TYPE_PROP:
|
||||
|
@ -427,16 +427,16 @@ WindowMatchEncode(WindowMatch * wm, char *buf, int len)
|
|||
|
||||
case MATCH_TYPE_SIZE:
|
||||
value = s;
|
||||
sprintf(s, "%u-%ux%u-%u", wm->width.min, wm->width.max,
|
||||
wm->height.min, wm->height.max);
|
||||
sprintf(s, "%u-%ux%u-%u", wm->width_min, wm->width_max,
|
||||
wm->height_min, wm->height_max);
|
||||
break;
|
||||
case MATCH_TYPE_SIZE_H:
|
||||
value = s;
|
||||
sprintf(s, "%u-%u", wm->width.min, wm->width.max);
|
||||
sprintf(s, "%u-%u", wm->width_min, wm->width_max);
|
||||
break;
|
||||
case MATCH_TYPE_SIZE_V:
|
||||
value = s;
|
||||
sprintf(s, "%u-%u", wm->height.min, wm->height.max);
|
||||
sprintf(s, "%u-%u", wm->height_min, wm->height_max);
|
||||
break;
|
||||
|
||||
case MATCH_TYPE_PROP:
|
||||
|
@ -504,18 +504,18 @@ WindowMatchEwinTest(const WindowMatch * wm, const EWin * ewin)
|
|||
return matchregexp(wm->value, EwinGetIcccmClass(ewin));
|
||||
|
||||
case MATCH_TYPE_SIZE:
|
||||
match = (ewin->client.w >= wm->width.min &&
|
||||
ewin->client.w <= wm->width.max &&
|
||||
ewin->client.h >= wm->height.min &&
|
||||
ewin->client.h <= wm->height.max);
|
||||
match = (ewin->client.w >= wm->width_min &&
|
||||
ewin->client.w <= wm->width_max &&
|
||||
ewin->client.h >= wm->height_min &&
|
||||
ewin->client.h <= wm->height_max);
|
||||
break;
|
||||
case MATCH_TYPE_SIZE_H:
|
||||
match = (ewin->client.w >= wm->width.min &&
|
||||
ewin->client.w <= wm->width.max);
|
||||
match = (ewin->client.w >= wm->width_min &&
|
||||
ewin->client.w <= wm->width_max);
|
||||
break;
|
||||
case MATCH_TYPE_SIZE_V:
|
||||
match = (ewin->client.h >= wm->height.min &&
|
||||
ewin->client.h <= wm->height.max);
|
||||
match = (ewin->client.h >= wm->height_min &&
|
||||
ewin->client.h <= wm->height_max);
|
||||
break;
|
||||
|
||||
case MATCH_TYPE_PROP:
|
||||
|
|
Loading…
Reference in New Issue