1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-20 21:08:08 +01:00

- Fixed wrong display position for the move/resize widgets

patch (Peter Zijlstra <a.p.zijlstra@chello.nl>)
This commit is contained in:
dan
2003-02-18 00:35:54 +00:00
parent b5ef388711
commit 80c09f1075
2 changed files with 80 additions and 82 deletions

View File

@@ -50,6 +50,8 @@ Changes since version 0.80.2:
which also happens in this case, since shading is a form of miniaturization) which also happens in this case, since shading is a form of miniaturization)
- Fixed bug with tpixmap from previous xinerama patch - Fixed bug with tpixmap from previous xinerama patch
- Fixed edge resistance and move/resize frame drawing for borderless windows - Fixed edge resistance and move/resize frame drawing for borderless windows
- Fixed wrong display position for the move/resize widgets after xinerama
patch (Peter Zijlstra <a.p.zijlstra@chello.nl>)
Changes since version 0.80.1: Changes since version 0.80.1:

View File

@@ -119,44 +119,41 @@ moveGeometryDisplayCentered(WScreen *scr, int x, int y)
{ {
unsigned int w = WMWidgetWidth(scr->gview); unsigned int w = WMWidgetWidth(scr->gview);
unsigned int h = WMWidgetHeight(scr->gview); unsigned int h = WMWidgetHeight(scr->gview);
unsigned int x1 = 0, y1 = 0, x2 = scr->scr_width, y2 = scr->scr_height; int x1 = 0, y1 = 0, x2 = scr->scr_width, y2 = scr->scr_height;
x -= w / 2; x -= w / 2;
y -= h / 2; y -= h / 2;
/* /* dead area check */
* dead area check
*/
if (scr->xine_count) { if (scr->xine_count) {
WMRect rect; WMRect rect;
int head, flags; int head, flags;
rect.pos.x = x; rect.pos.x = x;
rect.pos.y = y; rect.pos.y = y;
rect.size.width = w; rect.size.width = w;
rect.size.height = h; rect.size.height = h;
head = wGetRectPlacementInfo(scr, rect, &flags); head = wGetRectPlacementInfo(scr, rect, &flags);
if (flags & (XFLAG_DEAD | XFLAG_PARTIAL)) { if (flags & (XFLAG_DEAD | XFLAG_PARTIAL)) {
rect = wGetRectForHead(scr, head); rect = wGetRectForHead(scr, head);
x1 = rect.pos.x; x1 = rect.pos.x;
y1 = rect.pos.y; y1 = rect.pos.y;
x2 = x1 + rect.size.width; x2 = x1 + rect.size.width;
y2 = y1 + rect.size.height; y2 = y1 + rect.size.height;
} }
} }
if (x < x1 + 1) if (x < x1 + 1)
x = x1 + 1; x = x1 + 1;
else if (x > (x2 - w)) else if (x > (x2 - w))
x = x2 - w; x = x2 - w;
if (y < y1 + 1) if (y < y1 + 1)
y = y1 + 1; y = y1 + 1;
else if (y > (y2 - h)) else if (y > (y2 - h))
y = y2 - h; y = y2 - h;
WMMoveWidget(scr->gview, x, y); WMMoveWidget(scr->gview, x, y);
@@ -200,6 +197,7 @@ static void
cyclePositionDisplay(WWindow *wwin, int x, int y, int w, int h) cyclePositionDisplay(WWindow *wwin, int x, int y, int w, int h)
{ {
WScreen *scr = wwin->screen_ptr; WScreen *scr = wwin->screen_ptr;
WMRect rect;
wPreferences.move_display++; wPreferences.move_display++;
wPreferences.move_display %= NUM_DISPLAYS; wPreferences.move_display %= NUM_DISPLAYS;
@@ -213,12 +211,12 @@ cyclePositionDisplay(WWindow *wwin, int x, int y, int w, int h)
WMUnmapWidget(scr->gview); WMUnmapWidget(scr->gview);
} else { } else {
if (wPreferences.move_display == WDIS_CENTER) { if (wPreferences.move_display == WDIS_CENTER) {
WMRect rect = wGetRectForHead(scr, wGetHeadForPointerLocation(scr)); rect = wGetRectForHead(scr, wGetHeadForWindow(wwin));
moveGeometryDisplayCentered(scr, moveGeometryDisplayCentered(scr, rect.pos.x + rect.size.width/2,
rect.pos.x + rect.size.width/2, rect.pos.y + rect.size.height/2);
rect.pos.y + rect.size.width/2);
} else if (wPreferences.move_display == WDIS_TOPLEFT) { } else if (wPreferences.move_display == WDIS_TOPLEFT) {
moveGeometryDisplayCentered(scr, 1, 1); rect = wGetRectForHead(scr, wGetHeadForWindow(wwin));
moveGeometryDisplayCentered(scr, rect.pos.x + 1, rect.pos.y + 1);
} else if (wPreferences.move_display == WDIS_FRAME_CENTER) { } else if (wPreferences.move_display == WDIS_FRAME_CENTER) {
moveGeometryDisplayCentered(scr, x + w/2, y + h/2); moveGeometryDisplayCentered(scr, x + w/2, y + h/2);
} }
@@ -231,17 +229,19 @@ static void
mapPositionDisplay(WWindow *wwin, int x, int y, int w, int h) mapPositionDisplay(WWindow *wwin, int x, int y, int w, int h)
{ {
WScreen *scr = wwin->screen_ptr; WScreen *scr = wwin->screen_ptr;
WMRect rect;
if (wPreferences.move_display == WDIS_NEW if (wPreferences.move_display == WDIS_NEW
|| wPreferences.move_display == WDIS_NONE) { || wPreferences.move_display == WDIS_NONE) {
return; return;
} else if (wPreferences.move_display == WDIS_CENTER) { } else if (wPreferences.move_display == WDIS_CENTER) {
WMRect rect = wGetRectForHead(scr, wGetHeadForPointerLocation(scr)); rect = wGetRectForHead(scr, wGetHeadForWindow(wwin));
moveGeometryDisplayCentered(scr, moveGeometryDisplayCentered(scr,
rect.pos.x + rect.size.width/2, rect.pos.x + rect.size.width/2,
rect.pos.y + rect.size.width/2); rect.pos.y + rect.size.height/2);
} else if (wPreferences.move_display == WDIS_TOPLEFT) { } else if (wPreferences.move_display == WDIS_TOPLEFT) {
moveGeometryDisplayCentered(scr, 1, 1); rect = wGetRectForHead(scr, wGetHeadForWindow(wwin));
moveGeometryDisplayCentered(scr, rect.pos.x + 1, rect.pos.y + 1);
} else if (wPreferences.move_display == WDIS_FRAME_CENTER) { } else if (wPreferences.move_display == WDIS_FRAME_CENTER) {
moveGeometryDisplayCentered(scr, x + w/2, y + h/2); moveGeometryDisplayCentered(scr, x + w/2, y + h/2);
} }
@@ -293,8 +293,7 @@ showGeometry(WWindow *wwin, int x1, int y1, int x2, int y2, int direction)
} }
my = (ty + by) / 2; my = (ty + by) / 2;
/* top arrow */ /* top arrow & end bar */
/* end bar */
segment[0].x1 = x - (s + 6); segment[0].y1 = ty; segment[0].x1 = x - (s + 6); segment[0].y1 = ty;
segment[0].x2 = x - (s - 10); segment[0].y2 = ty; segment[0].x2 = x - (s - 10); segment[0].y2 = ty;
@@ -311,8 +310,7 @@ showGeometry(WWindow *wwin, int x1, int y1, int x2, int y2, int direction)
XDrawSegments(dpy, root, gc, segment, 4); XDrawSegments(dpy, root, gc, segment, 4);
/* bottom arrow */ /* bottom arrow & end bar */
/* end bar */
segment[0].y1 = by; segment[0].y1 = by;
segment[0].y2 = by; segment[0].y2 = by;
@@ -363,8 +361,7 @@ showGeometry(WWindow *wwin, int x1, int y1, int x2, int y2, int direction)
wwin->normal_hints->width_inc); wwin->normal_hints->width_inc);
fw = WMWidthOfString(scr->tech_draw_font, num, strlen(num)); fw = WMWidthOfString(scr->tech_draw_font, num, strlen(num));
/* left arrow */ /* left arrow & end bar */
/* end bar */
segment[0].x1 = x1; segment[0].y1 = y - (s + 6); segment[0].x1 = x1; segment[0].y1 = y - (s + 6);
segment[0].x2 = x1; segment[0].y2 = y - (s - 10); segment[0].x2 = x1; segment[0].y2 = y - (s - 10);
@@ -381,8 +378,7 @@ showGeometry(WWindow *wwin, int x1, int y1, int x2, int y2, int direction)
XDrawSegments(dpy, root, gc, segment, 4); XDrawSegments(dpy, root, gc, segment, 4);
/* right arrow */ /* right arrow & end bar */
/* end bar */
segment[0].x1 = x2 + 1; segment[0].x1 = x2 + 1;
segment[0].x2 = x2 + 1; segment[0].x2 = x2 + 1;
@@ -424,6 +420,7 @@ static void
cycleGeometryDisplay(WWindow *wwin, int x, int y, int w, int h, int dir) cycleGeometryDisplay(WWindow *wwin, int x, int y, int w, int h, int dir)
{ {
WScreen *scr = wwin->screen_ptr; WScreen *scr = wwin->screen_ptr;
WMRect rect;
wPreferences.size_display++; wPreferences.size_display++;
wPreferences.size_display %= NUM_DISPLAYS; wPreferences.size_display %= NUM_DISPLAYS;
@@ -433,12 +430,13 @@ cycleGeometryDisplay(WWindow *wwin, int x, int y, int w, int h, int dir)
WMUnmapWidget(scr->gview); WMUnmapWidget(scr->gview);
} else { } else {
if (wPreferences.size_display == WDIS_CENTER) { if (wPreferences.size_display == WDIS_CENTER) {
WMRect rect = wGetRectForHead(scr, wGetHeadForPointerLocation(scr)); rect = wGetRectForHead(scr, wGetHeadForWindow(wwin));
moveGeometryDisplayCentered(scr, moveGeometryDisplayCentered(scr,
rect.pos.x + rect.size.width/2, rect.pos.x + rect.size.width/2,
rect.pos.y + rect.size.width/2); rect.pos.y + rect.size.height/2);
} else if (wPreferences.size_display == WDIS_TOPLEFT) { } else if (wPreferences.size_display == WDIS_TOPLEFT) {
moveGeometryDisplayCentered(scr, 1, 1); rect = wGetRectForHead(scr, wGetHeadForWindow(wwin));
moveGeometryDisplayCentered(scr, rect.pos.x + 1, rect.pos.y + 1);
} else if (wPreferences.size_display == WDIS_FRAME_CENTER) { } else if (wPreferences.size_display == WDIS_FRAME_CENTER) {
moveGeometryDisplayCentered(scr, x + w/2, y + h/2); moveGeometryDisplayCentered(scr, x + w/2, y + h/2);
} }
@@ -452,18 +450,20 @@ static void
mapGeometryDisplay(WWindow *wwin, int x, int y, int w, int h) mapGeometryDisplay(WWindow *wwin, int x, int y, int w, int h)
{ {
WScreen *scr = wwin->screen_ptr; WScreen *scr = wwin->screen_ptr;
WMRect rect;
if (wPreferences.size_display == WDIS_NEW if (wPreferences.size_display == WDIS_NEW
|| wPreferences.size_display == WDIS_NONE) || wPreferences.size_display == WDIS_NONE)
return; return;
if (wPreferences.size_display == WDIS_CENTER) { if (wPreferences.size_display == WDIS_CENTER) {
WMRect rect = wGetRectForHead(scr, wGetHeadForPointerLocation(scr)); rect = wGetRectForHead(scr, wGetHeadForWindow(wwin));
moveGeometryDisplayCentered(scr, moveGeometryDisplayCentered(scr,
rect.pos.x + rect.size.width/2, rect.pos.x + rect.size.width/2,
rect.pos.y + rect.size.width/2); rect.pos.y + rect.size.height/2);
} else if (wPreferences.size_display == WDIS_TOPLEFT) { } else if (wPreferences.size_display == WDIS_TOPLEFT) {
moveGeometryDisplayCentered(scr, 1, 1); rect = wGetRectForHead(scr, wGetHeadForWindow(wwin));
moveGeometryDisplayCentered(scr, rect.pos.x + 1, rect.pos.y + 1);
} else if (wPreferences.size_display == WDIS_FRAME_CENTER) { } else if (wPreferences.size_display == WDIS_FRAME_CENTER) {
moveGeometryDisplayCentered(scr, x + w/2, y + h/2); moveGeometryDisplayCentered(scr, x + w/2, y + h/2);
} }
@@ -502,9 +502,9 @@ doWindowMove(WWindow *wwin, WMArray *array, int dx, int dy)
else if (y + 20 > scr->scr_height) else if (y + 20 > scr->scr_height)
y = scr->scr_height - 20; y = scr->scr_height - 20;
#else #else
wScreenBringInside(scr, &x, &y, wScreenBringInside(scr, &x, &y,
(int)tmpw->frame->core->width, (int)tmpw->frame->core->width,
(int)tmpw->frame->core->height); (int)tmpw->frame->core->height);
#endif #endif
wWindowMove(tmpw, x, y); wWindowMove(tmpw, x, y);
@@ -583,9 +583,9 @@ drawFrames(WWindow *wwin, WMArray *array, int dx, int dy)
y = scr_height - 20; y = scr_height - 20;
#else #else
wScreenBringInside(wwin->screen_ptr, &x, &y, wScreenBringInside(wwin->screen_ptr, &x, &y,
(int)tmpw->frame->core->width, (int)tmpw->frame->core->width,
(int)tmpw->frame->core->height); (int)tmpw->frame->core->height);
#endif #endif
drawTransparentFrame(tmpw, x, y, tmpw->frame->core->width, drawTransparentFrame(tmpw, x, y, tmpw->frame->core->width,
@@ -854,9 +854,8 @@ updateMoveData(WWindow *wwin, MoveData *data)
return; return;
} }
/* /* order from closest to the border of the screen to farthest */
* order from closest to the border of the screen to farthest
*/
qsort(data->topList, data->count, sizeof(WWindow**), compareWTop); qsort(data->topList, data->count, sizeof(WWindow**), compareWTop);
qsort(data->leftList, data->count, sizeof(WWindow**), compareWLeft); qsort(data->leftList, data->count, sizeof(WWindow**), compareWLeft);
qsort(data->rightList, data->count, sizeof(WWindow**), compareWRight); qsort(data->rightList, data->count, sizeof(WWindow**), compareWRight);
@@ -1051,18 +1050,17 @@ updateWindowPosition(WWindow *wwin, MoveData *data, Bool doResistance,
attract = wPreferences.attract; attract = wPreferences.attract;
/* horizontal movement: check horizontal edge resistances */ /* horizontal movement: check horizontal edge resistances */
if (dx || dy) { if (dx || dy) {
WMRect rect;
int i; int i;
/* window is the leftmost window: check against screen edge */ /* window is the leftmost window: check against screen edge */
/* /* Add inter head resistance 1/2 (if needed) */
* Add inter head resistance 1/2 (if needed) rect = wGetRectForHead(scr, wGetHeadForPointerLocation(scr));
*/
WMRect rect = wGetRectForHead(scr, wGetHeadForPointerLocation(scr));
l_edge = WMAX(scr->totalUsableArea.x1, rect.pos.x); l_edge = WMAX(scr->totalUsableArea.x1, rect.pos.x);
edge_l = l_edge - resist; edge_l = l_edge - resist;
edge_r = WMIN(scr->totalUsableArea.x2, rect.pos.x + rect.size.width); edge_r = WMIN(scr->totalUsableArea.x2, rect.pos.x + rect.size.width);
r_edge = edge_r + resist; r_edge = edge_r + resist;
/* 1 */ /* 1 */
if ((data->rightIndex >= 0) && (data->rightIndex <= data->count)) { if ((data->rightIndex >= 0) && (data->rightIndex <= data->count)) {
@@ -1158,13 +1156,11 @@ updateWindowPosition(WWindow *wwin, MoveData *data, Bool doResistance,
} }
/* VeRT */ /* VeRT */
/* /* Add inter head resistance 2/2 (if needed) */
* Add inter head resistance 2/2 (if needed) t_edge = WMAX(scr->totalUsableArea.y1, rect.pos.y);
*/ edge_t = t_edge - resist;
t_edge = WMAX(scr->totalUsableArea.y1, rect.pos.y); edge_b = WMIN(scr->totalUsableArea.y2, rect.pos.y + rect.size.height);
edge_t = t_edge - resist; b_edge = edge_b + resist;
edge_b = WMIN(scr->totalUsableArea.y2, rect.pos.y + rect.size.height);
b_edge = edge_b + resist;
if ((data->bottomIndex >= 0) && (data->bottomIndex <= data->count)) { if ((data->bottomIndex >= 0) && (data->bottomIndex <= data->count)) {
WWindow *looprw; WWindow *looprw;
@@ -1701,7 +1697,7 @@ wMouseMoveWindow(WWindow *wwin, XEvent *ev)
Window junkw; Window junkw;
/* XWarpPointer() doesn't seem to generate Motion events, so /* XWarpPointer() doesn't seem to generate Motion events, so
we've got to simulate them */ * we've got to simulate them */
XQueryPointer(dpy, root, &junkw, &junkw, &event.xmotion.x_root, XQueryPointer(dpy, root, &junkw, &junkw, &event.xmotion.x_root,
&event.xmotion.y_root, &junk, &junk, &event.xmotion.y_root, &junk, &junk,
(unsigned *) &junk); (unsigned *) &junk);