Enlightenment CVS committal
Author : kwo
Project : e16
Module : e
Dir : e16/e/src
Modified Files:
E.h arrange.c borders.c conf.h config.c ewmh.c icccm.c
screen.c settings.c size.c warp.c
Log Message:
Handle struts, optionally ignore.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.301
retrieving revision 1.302
diff -u -3 -r1.301 -r1.302
--- E.h 3 Jul 2004 00:30:48 -0000 1.301
+++ E.h 3 Jul 2004 00:58:18 -0000 1.302
@@ -984,6 +984,10 @@
int head;
struct
{
+ int left, right, top, bottom;
+ } strut;
+ struct
+ {
unsigned vroot:1; /* Virtual root window */
} props;
struct
@@ -1230,6 +1234,7 @@
{
char manual;
char manual_mouse_pointer;
+ char ignore_struts;
} place;
struct
{
@@ -2543,8 +2548,12 @@
void ScreenInit(void);
int ScreenGetGeometry(int x, int y, int *px, int *py,
int *pw, int *ph);
+int ScreenGetAvailableArea(int x, int y, int *px, int *py,
+ int *pw, int *ph);
int GetPointerScreenGeometry(int *px, int *py,
int *pw, int *ph);
+int GetPointerScreenAvailableArea(int *px, int *py,
+ int *pw, int *ph);
/* session.c */
void SessionInit(void);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/arrange.c,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -3 -r1.70 -r1.71
--- arrange.c 19 May 2004 21:41:03 -0000 1.70
+++ arrange.c 3 Jul 2004 00:58:19 -0000 1.71
@@ -93,7 +93,7 @@
{
int xx1, yy1, xx2, yy2;
- GetPointerScreenGeometry(&xx1, &yy1, &xx2, &yy2);
+ GetPointerScreenAvailableArea(&xx1, &yy1, &xx2, &yy2);
xx2 += xx1;
yy2 += yy1;
if (startx < xx1)
@@ -597,8 +597,8 @@
EDBUG_RETURN_;
}
- ScreenGetGeometry(ewin->shape_x, ewin->shape_y, &left_bound, &top_bound, &w,
- &h);
+ ScreenGetAvailableArea(ewin->shape_x, ewin->shape_y,
+ &left_bound, &top_bound, &w, &h);
right_bound = left_bound + w;
bottom_bound = top_bound + h;
screen_snap_dist = Mode.constrained ? (w + h) : Conf.snap.screen_snap_dist;
@@ -941,7 +941,7 @@
{
int x, y, w, h;
- GetPointerScreenGeometry(&x, &y, &w, &h);
+ GetPointerScreenAvailableArea(&x, &y, &w, &h);
*px = (w - ewin->w) / 2 + x;
*py = (h - ewin->h) / 2 + y;
}
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/borders.c,v
retrieving revision 1.209
retrieving revision 1.210
diff -u -3 -r1.209 -r1.210
--- borders.c 3 Jul 2004 00:30:48 -0000 1.209
+++ borders.c 3 Jul 2004 00:58:19 -0000 1.210
@@ -3215,7 +3215,7 @@
ewin->lw = ewin->client.w;
ewin->lh = ewin->client.h;
ewin->ll = ewin->layer;
- ScreenGetGeometry(ewin->x, ewin->y, &x, &y, &w, &h);
+ ScreenGetAvailableArea(ewin->x, ewin->y, &x, &y, &w, &h);
#if 0
ewin->layer = 10;
#endif
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/conf.h,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -3 -r1.33 -r1.34
--- conf.h 14 Jun 2004 17:02:29 -0000 1.33
+++ conf.h 3 Jul 2004 00:58:19 -0000 1.34
@@ -101,6 +101,8 @@
#define CONTROL_NEW_TRANSIENTS_GET_FOCUS 341
#define CONTROL_NEW_TRANSIENTS_GET_FOCUS_IF_GROUP 342
#define CONTROL_MANUAL_PLACEMENT 343
+#define CONTROL_MANUAL_PLACEMENT_MOUSE_POINTER 3360
+#define CONTROL_PLACE_IGNORE_STRUTS 3361
#define CONTROL_RAISE_ON_NEXT_FOCUS 344
#define CONTROL_WARP_ON_NEXT_FOCUS 345
#define CONTROL_EDGE_FLIP_RESISTANCE 346
@@ -112,7 +114,6 @@
#define CONTROL_AREA_WRAPAROUND 352
#define CONTROL_DIALOG_HEADERS 353
#define CONTROL_DESKTOP_WRAPAROUND 354
-#define CONTROL_MANUAL_PLACEMENT_MOUSE_POINTER 3360
#define CONTROL_WARPMENUS 666
#define CONTROL_USER_BG 1350
#define CONTROL_PAGER_ZOOM 1351
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/config.c,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -3 -r1.106 -r1.107
--- config.c 3 Jul 2004 00:30:49 -0000 1.106
+++ config.c 3 Jul 2004 00:58:19 -0000 1.107
@@ -755,6 +755,9 @@
case CONTROL_MANUAL_PLACEMENT_MOUSE_POINTER:
Conf.place.manual_mouse_pointer = i2;
break;
+ case CONTROL_PLACE_IGNORE_STRUTS:
+ Conf.place.ignore_struts = i2;
+ break;
case CONTROL_RAISE_ON_NEXT_FOCUS:
Conf.focus.raise_on_next_focus = i2;
break;
@@ -3896,6 +3899,7 @@
fprintf(autosavefile, "343 %i\n", (int)Conf.place.manual);
fprintf(autosavefile, "3360 %i\n",
(int)Conf.place.manual_mouse_pointer);
+ fprintf(autosavefile, "3361 %i\n", (int)Conf.place.ignore_struts);
fprintf(autosavefile, "344 %i\n", (int)Conf.focus.raise_on_next_focus);
fprintf(autosavefile, "345 %i\n", (int)Conf.focus.warp_on_next_focus);
fprintf(autosavefile, "346 %i\n", (int)Conf.edge_flip_resistance);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/ewmh.c,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -3 -r1.53 -r1.54
--- ewmh.c 1 Jul 2004 21:04:42 -0000 1.53
+++ ewmh.c 3 Jul 2004 00:58:19 -0000 1.54
@@ -68,6 +68,10 @@
/* Misc window ops */
Atom _NET_CLOSE_WINDOW;
+#if 0 /* Not yet implemented */
+Atom _NET_MOVERESIZE_WINDOW;
+#endif
+
/*
* _NET_WM_MOVERESIZE
*
@@ -93,6 +97,11 @@
*/
Atom _NET_WM_NAME;
Atom _NET_WM_ICON_NAME;
+
+#if 0 /* Not yet implemented */
+Atom _NET_WM_VISIBLE_NAME;
+Atom _NET_WM_VISIBLE_ICON_NAME;
+#endif
Atom _NET_WM_DESKTOP;
/* _NET_WM_WINDOW_TYPE (window property) */
@@ -127,6 +136,22 @@
#define _NET_WM_STATE_ADD 1
#define _NET_WM_STATE_TOGGLE 2
+Atom _NET_WM_STRUT;
+
+#if 0 /* Not yet implemented */
+Atom _NET_WM_ALLOWED_ACTIONS;
+Atom _NET_WM_ICON_GEOMETRY;
+Atom _NET_WM_ICON;
+Atom _NET_WM_PID;
+Atom _NET_WM_HANDLED_ICONS;
+
+Atom _NET_WM_PING;
+#endif
+
+#ifndef ENABLE_HINTS_GNOME
+Atom _G_WIN_LAUER;
+#endif
+
/*
* Set/clear Atom in list
*/
@@ -219,6 +244,8 @@
_ATOM_INIT(_NET_WM_STATE_ABOVE);
_ATOM_INIT(_NET_WM_STATE_BELOW);
+ _ATOM_INIT(_NET_WM_STRUT);
+
_ATOM_SET_ATOM(_NET_SUPPORTED, VRoot.win, atom_list, atom_count);
/* Set WM info properties */
@@ -715,6 +742,30 @@
EDBUG_RETURN_;
}
+static void
+EWMH_GetWindowStrut(EWin * ewin)
+{
+ CARD32 *val;
+ int size;
+
+ EDBUG(6, "EWMH_GetWindowStrut");
+
+ val = AtomGet(ewin->client.win, _NET_WM_STRUT, XA_CARDINAL, &size);
+ if (val)
+ {
+ if (size > 4)
+ {
+ ewin->strut.left = val[0];
+ ewin->strut.right = val[1];
+ ewin->strut.top = val[2];
+ ewin->strut.bottom = val[3];
+ }
+ Efree(val);
+ }
+
+ EDBUG_RETURN_;
+}
+
void
EWMH_GetWindowHints(EWin * ewin)
{
@@ -726,6 +777,7 @@
EWMH_GetWindowState(ewin);
EWMH_GetWindowType(ewin);
/* EWMH_GetWindowIcons(ewin); TBD */
+ EWMH_GetWindowStrut(ewin);
EDBUG_RETURN_;
}
@@ -959,6 +1011,8 @@
EWMH_GetWindowName(ewin);
else if (atom_change == _NET_WM_ICON_NAME)
EWMH_GetWindowIconName(ewin);
+ else if (atom_change == _NET_WM_STRUT)
+ EWMH_GetWindowStrut(ewin);
EDBUG_RETURN_;
}
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/icccm.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -3 -r1.72 -r1.73
--- icccm.c 2 Jul 2004 17:36:58 -0000 1.72
+++ icccm.c 3 Jul 2004 00:58:19 -0000 1.73
@@ -41,6 +41,7 @@
static Atom E_XA_WM_HINTS = 0;
static Atom E_XA_WM_CLIENT_LEADER = 0;
static Atom E_XA_WM_TRANSIENT_FOR = 0;
+static Atom E_XA_WM_ICON_SIZE = 0;
void
ICCCM_Init(void)
@@ -62,6 +63,7 @@
E_XA_WM_HINTS = XInternAtom(disp, "WM_HINTS", False);
E_XA_WM_CLIENT_LEADER = XInternAtom(disp, "WM_CLIENT_LEADER", False);
E_XA_WM_TRANSIENT_FOR = XInternAtom(disp, "WM_TRANSIENT_FOR", False);
+ E_XA_WM_ICON_SIZE = XInternAtom(disp, "WM_ICON_SIZE", False);
if (Mode.wm.window)
{
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/screen.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- screen.c 30 Jun 2004 13:04:18 -0000 1.7
+++ screen.c 3 Jul 2004 00:58:19 -0000 1.8
@@ -90,6 +90,62 @@
return head;
}
+static void
+VRootGetAvailableArea(int *px, int *py, int *pw, int *ph)
+{
+ EWin *const *lst, *ewin;
+ int i, num, l, r, t, b;
+
+ l = r = t = b = 0;
+ lst = EwinListGetAll(&num);
+ for (i = 0; i < num; i++)
+ {
+ ewin = lst[i];
+
+ if (l < ewin->strut.left)
+ l = ewin->strut.left;
+ if (r < ewin->strut.right)
+ r = ewin->strut.right;
+ if (t < ewin->strut.top)
+ t = ewin->strut.top;
+ if (b < ewin->strut.bottom)
+ b = ewin->strut.bottom;
+ }
+
+ *px = l;
+ *py = t;
+ *pw = VRoot.w - (l + r);
+ *ph = VRoot.h - (t + b);
+}
+
+int
+ScreenGetAvailableArea(int xi, int yi, int *px, int *py, int *pw, int *ph)
+{
+ int x1, y1, w1, h1, x2, y2, w2, h2, head;
+
+ head = ScreenGetGeometry(xi, yi, &x1, &y1, &w1, &h1);
+
+ if (!Conf.place.ignore_struts)
+ {
+ VRootGetAvailableArea(&x2, &y2, &w2, &h2);
+ if (x1 < x2)
+ x1 = x2;
+ if (y1 < y2)
+ y1 = y2;
+ if (w1 > w2)
+ w1 = w2;
+ if (h1 > h2)
+ h1 = h2;
+ }
+
+ *px = x1;
+ *py = y1;
+ *pw = w1;
+ *ph = h1;
+
+ return head;
+}
+
int
GetPointerScreenGeometry(int *px, int *py, int *pw, int *ph)
{
@@ -103,3 +159,17 @@
return ScreenGetGeometry(pointer_x, pointer_y, px, py, pw, ph);
}
+
+int
+GetPointerScreenAvailableArea(int *px, int *py, int *pw, int *ph)
+{
+ Window rt, ch;
+ int pointer_x, pointer_y;
+ int d;
+ unsigned int ud;
+
+ XQueryPointer(disp, VRoot.win, &rt, &ch, &pointer_x, &pointer_y, &d, &d,
+ &ud);
+
+ return ScreenGetAvailableArea(pointer_x, pointer_y, px, py, pw, ph);
+}
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/settings.c,v
retrieving revision 1.115
retrieving revision 1.116
diff -u -3 -r1.115 -r1.116
--- settings.c 3 Jul 2004 00:30:50 -0000 1.115
+++ settings.c 3 Jul 2004 00:58:19 -0000 1.116
@@ -1450,6 +1450,7 @@
static char tmp_switch_popup;
static char tmp_manual_placement;
static char tmp_manual_placement_mouse_pointer;
+static char tmp_place_ignore_struts;
#ifdef HAS_XINERAMA
static char tmp_extra_head;
@@ -1464,6 +1465,7 @@
Conf.focus.switchfortransientmap = tmp_switch_popup;
Conf.place.manual = tmp_manual_placement;
Conf.place.manual_mouse_pointer = tmp_manual_placement_mouse_pointer;
+ Conf.place.ignore_struts = tmp_place_ignore_struts;
#ifdef HAS_XINERAMA
if (xinerama_active)
Conf.extra_head = tmp_extra_head;
@@ -1492,6 +1494,7 @@
tmp_switch_popup = Conf.focus.switchfortransientmap;
tmp_manual_placement = Conf.place.manual;
tmp_manual_placement_mouse_pointer = Conf.place.manual_mouse_pointer;
+ tmp_place_ignore_struts = Conf.place.ignore_struts;
#ifdef HAS_XINERAMA
tmp_extra_head = Conf.extra_head;
#endif
@@ -1557,6 +1560,14 @@
DialogItemCheckButtonSetState(di, tmp_manual_placement_mouse_pointer);
DialogItemCheckButtonSetPtr(di, &tmp_manual_placement_mouse_pointer);
+ di = DialogAddItem(table, DITEM_CHECKBUTTON);
+ DialogItemSetPadding(di, 2, 2, 2, 2);
+ DialogItemSetFill(di, 1, 0);
+ DialogItemSetColSpan(di, 2);
+ DialogItemCheckButtonSetText(di, _("Ignore struts"));
+ DialogItemCheckButtonSetState(di, tmp_place_ignore_struts);
+ DialogItemCheckButtonSetPtr(di, &tmp_place_ignore_struts);
+
#ifdef HAS_XINERAMA
if (xinerama_active)
{
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/size.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -3 -r1.37 -r1.38
--- size.c 31 May 2004 20:30:12 -0000 1.37
+++ size.c 3 Jul 2004 00:58:19 -0000 1.38
@@ -92,7 +92,7 @@
case MAX_ABSOLUTE:
case MAX_AVAILABLE:
case MAX_CONSERVATIVE:
- ScreenGetGeometry(ewin->x, ewin->y, &x1, &y1, &x2, &y2);
+ ScreenGetAvailableArea(ewin->x, ewin->y, &x1, &y1, &x2, &y2);
x2 += x1;
y2 += y1;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/warp.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -3 -r1.46 -r1.47
--- warp.c 8 Jun 2004 22:16:14 -0000 1.46
+++ warp.c 3 Jul 2004 00:58:19 -0000 1.47
@@ -228,7 +228,7 @@
}
w += (ic->padding.left + ic->padding.right);
h += (ic->padding.top + ic->padding.bottom);
- GetPointerScreenGeometry(&x, &y, &ww, &hh);
+ GetPointerScreenAvailableArea(&x, &y, &ww, &hh);
x += (ww - w) / 2;
y += (hh - h * warplist_num) / 2;
mw = w;
-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 -
digital self defense, top technical experts, no vendor pitches,
unmatched networking opportunities. Visit www.blackhat.com
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs