Snap attraction between windows
Olivier Fourdan
fourdan at xfce.org
Sun Mar 9 23:11:49 CET 2003
Jens,
Looks fine to me. I've committed your change to CVS.
Cheers,
Olivier.
On Sun, 2003-03-09 at 22:46, Jens Guballa wrote:
> Hi Olivier,
>
> On Sun, Mar 09, 2003 at 10:27:13PM +0100, Olivier Fourdan wrote:
> > Jens,
> >
> > Yes, please send your patch and I'll evaluate it. If it proves to be
> > okay, I'll commit it in CVS.
>
> OK, here it comes. As I am not very familar with the diff and the other
> development tools, I will provide the code in "plain".
>
> The changes I have done are in the fuction clientMove_event_filter,
> my changes are limited to the "if (params.snap_to_border)"-clause only.
>
> Best regards,
> Jens
>
>
> :
> :
> if (params.snap_to_border)
> {
> int i;
> Client * c2;
> int frame_x2 = frame_x + frame_width;
> int frame_y2 = frame_y + frame_height;
> int c_frame_x1, c_frame_x2, c_frame_y1, c_frame_y2;
> int delta;
> int best_delta_x, best_delta_y, best_frame_x, best_frame_y;
>
> if (abs(disp_x + left - frame_x) < abs(disp_max_x - right - frame_x2))
> {
> best_delta_x = abs(disp_x + left - frame_x);
> best_frame_x = disp_x + left;
> }
> else
> {
> best_delta_x = abs(disp_max_x - right - frame_x2);
> best_frame_x = disp_max_x - right - frame_width;
> }
>
> if (abs(disp_y + top - frame_y) < abs(disp_max_y - bottom - frame_y2))
> {
> best_delta_y = abs(disp_y + top - frame_y);
> best_frame_y = disp_y + top;
> }
> else
> {
> best_delta_y = abs(disp_max_y - bottom - frame_y2);
> best_frame_y = disp_max_y - bottom - frame_height;
> }
>
>
> for(c2 = clients, i = 0; i < client_count; c2 = c2->next, i++)
> {
> if (CLIENT_FLAG_TEST(c2, CLIENT_FLAG_VISIBLE))
> {
> c_frame_x1 = frameX(c2);
> c_frame_x2 = c_frame_x1 + frameWidth(c2);
> c_frame_y1 = frameY(c2);
> c_frame_y2 = c_frame_y1 + frameHeight(c2);
>
> if ((c_frame_y1 <= frame_y2) && (c_frame_y2 >= frame_y))
> {
> delta = abs(c_frame_x2 - frame_x);
> if (delta < best_delta_x)
> {
> best_delta_x = delta;
> best_frame_x = c_frame_x2;
> }
>
> delta = abs(c_frame_x1 - frame_x2);
> if (delta < best_delta_x)
> {
> best_delta_x = delta;
> best_frame_x = c_frame_x1 - frame_width;
> }
> }
>
> if ((c_frame_x1 <= frame_x2) && (c_frame_x2 >= frame_x))
> {
> delta = abs(c_frame_y2 - frame_y);
> if (delta < best_delta_y)
> {
> best_delta_y = delta;
> best_frame_y = c_frame_y2;
> }
>
> delta = abs(c_frame_y1 - frame_y2);
> if (delta < best_delta_y)
> {
> best_delta_y = delta;
> best_frame_y = c_frame_y1 - frame_height;
> }
>
> }
> }
> }
>
> if (best_delta_x <= params.snap_width)
> {
> c->x = best_frame_x + frame_left;
> }
>
> if (best_delta_y <= params.snap_width)
> {
> c->y = ((best_frame_y < top) ? top : best_frame_y ) + frame_top;
> }
> else if ((frame_y + frame_top > 0) && (frame_y < top))
> {
> c->y = frame_top + top;
> }
>
>
> /* old code if(abs(frame_x - disp_max_x + frame_width + right) < params.snap_width)
> {
> c->x = disp_max_x - frame_right - c->width - right;
> frame_x = frameX(c);
> }
> if(abs(frame_x - disp_x) < params.snap_width + left)
> {
> c->x = disp_x + frame_left + left;
> frame_x = frameX(c);
> }
> if(abs(frame_y - disp_max_y + frame_height + bottom) < params.snap_width)
> {
> c->y = disp_max_y - frame_height + frame_top - bottom;
> frame_y = frameY(c);
> }
> if((frame_y + frame_top > disp_y) && (frame_y < disp_y + top + params.snap_width))
> {
> c->y = disp_y + frame_top + top;
> frame_y = frameY(c);
> }
> end old code */
> }
> else
> {
> if((frame_y + frame_top > 0) && (frame_y < top))
> {
> c->y = frame_top + top;
> }
> }
>
> :
> :
>
> _______________________________________________
> Xfce4-dev mailing list
> Xfce4-dev at xfce.org
> http://moongroup.com/mailman/listinfo/xfce4-dev
--
Olivier Fourdan <fourdan at xfce.org>
http://www.xfce.org
More information about the Xfce4-dev
mailing list