FVWM Bug Tracking notification new message incoming/858
Message summary for PR#858 From: [EMAIL PROTECTED] Subject: New windows overlap 'system' toolbars Date: Tue, 26 Feb 2002 18:36:58 -0600 0 replies 0 followups ====> ORIGINAL MESSAGE FOLLOWS <==== >From [EMAIL PROTECTED] Tue Feb 26 18:36:59 2002 Received: from karazm.math.uh.edu ([129.7.128.1]) by malifon.math.uh.edu with esmtp (Exim 3.20 #1) id 16fs5b-0004H0-00 for [EMAIL PROTECTED]; Tue, 26 Feb 2002 18:36:59 -0600 Received: from malifon.math.uh.edu (IDENT:[EMAIL PROTECTED] [129.7.128.13]) by karazm.math.uh.edu (8.9.3/8.9.3) with ESMTP id SAA03007 for <[EMAIL PROTECTED]>; Tue, 26 Feb 2002 18:36:59 -0600 (CST) Received: from localhost ([127.0.0.1] ident=65534) by malifon.math.uh.edu with esmtp (Exim 3.20 #1) id 16fs5a-0004Gw-00 for [EMAIL PROTECTED]; Tue, 26 Feb 2002 18:36:58 -0600 From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: New windows overlap 'system' toolbars Message-Id: <[EMAIL PROTECTED]> Date: Tue, 26 Feb 2002 18:36:58 -0600 Full_Name: Daniel Speyer Version: 2.4.5 CVS_Date: OS: Debian GNU/Linux X_Server: 4.1 Submission from: (NULL) (129.2.159.61) I typically run with a toolbar of some sort on one side of the screen (currently an FvwmButtons on the left, previously a combination of Fvwm modules and Tcl/Tk scripts on the right, before that a taskbar-ish thing on the bottom -- you get the idea). However, when new windows popped up, they didn't think of these bars as special, and went right over them (or under, if I was using alwaysontop, but that wasn't much better). This became really annoying, because I think of those windows as seperate from my desktop and I wanted windows to overlap them about as much as I wanted them to run off the screen. I've written a patch that makes Fvwm think the same way. Essentially, it lets you tell it how far from each edge should be thought of as 'off-screen,' and should only receive windows if they just don't fit anywhere else. I've tested this patch for a while, and it seems quite stable. --Daniel Speyer P.S. I submitted the patch earlier to fvwm-workers but it seems to have been ignored. It occured to me that some projects prefer patches submitted through bug tracking, so I'm trying this. P.P.S Since every feature needs documentation, here's a man entry for it (apologies for the plain text, I don't know man format) PlacementEdgeAvoid left top right bottom This command creates a region at each edge to avoid when placing new windows. This is useful for keeping toolbars, taskbars, global menus, etc. from getting covered. All arguments are mandatory. If you don't have a toolbar on a given side, just use 0. P.P.P.S. There doesn't seem to be an attatchment mechanism here, so I've appended the patch: diff -u -r fvwm-2.4.5/fvwm/commands.h fvwm-2.4.5-mine/fvwm/commands.h --- fvwm-2.4.5/fvwm/commands.h Wed Sep 5 12:39:56 2001 +++ fvwm-2.4.5-mine/fvwm/commands.h Sun Feb 24 01:15:37 2002 @@ -119,6 +119,7 @@ void CMD_PipeRead(F_CMD_ARGS); void CMD_PixmapPath(F_CMD_ARGS); void CMD_PlaceAgain(F_CMD_ARGS); +void CMD_PlacementEdgeAvoid(F_CMD_ARGS); void CMD_PointerKey(F_CMD_ARGS); void CMD_Popup(F_CMD_ARGS); void CMD_Prev(F_CMD_ARGS); diff -u -r fvwm-2.4.5/fvwm/functions.c fvwm-2.4.5-mine/fvwm/functions.c --- fvwm-2.4.5/fvwm/functions.c Thu Jan 17 07:32:08 2002 +++ fvwm-2.4.5-mine/fvwm/functions.c Sun Feb 24 01:19:51 2002 @@ -194,6 +194,7 @@ CMD_ENTRY("piperead", CMD_PipeRead, F_READ, 0), CMD_ENTRY("pixmappath", CMD_PixmapPath, F_PIXMAP_PATH, 0), CMD_ENTRY("placeagain", CMD_PlaceAgain, F_PLACEAGAIN, FUNC_NEEDS_WINDOW), + CMD_ENTRY("placementedgeavoid", CMD_PlacementEdgeAvoid, F_PLACEMENT_EDGE_AVOID, 0), CMD_ENTRY("pointerkey", CMD_PointerKey, F_POINTERKEY, 0), CMD_ENTRY("popup", CMD_Popup, F_POPUP, 0), CMD_ENTRY("prev", CMD_Prev, F_PREV, 0), diff -u -r fvwm-2.4.5/fvwm/functions.h fvwm-2.4.5-mine/fvwm/functions.h --- fvwm-2.4.5/fvwm/functions.h Wed Sep 5 12:39:56 2001 +++ fvwm-2.4.5-mine/fvwm/functions.h Sun Feb 24 01:20:13 2002 @@ -149,6 +149,7 @@ F_OPAQUE, F_PICK, F_PIXMAP_PATH, + F_PLACEMENT_EDGE_AVOID, F_POINTERKEY, F_POPUP, F_PREV, diff -u -r fvwm-2.4.5/fvwm/placement.c fvwm-2.4.5-mine/fvwm/placement.c --- fvwm-2.4.5/fvwm/placement.c Sun Dec 9 09:00:08 2001 +++ fvwm-2.4.5-mine/fvwm/placement.c Sun Feb 24 01:14:56 2002 @@ -54,6 +54,12 @@ #define MAX(A,B) ((A)>(B)? (A):(B)) #endif +static int PageEdgeAvoid_left=0; +static int PageEdgeAvoid_top=0; +static int PageEdgeAvoid_right=0; +static int PageEdgeAvoid_bottom=0; + + static int get_next_x( FvwmWindow *t, rectangle *screen_g, int x, int y, int pdeltax, int pdeltay, int use_percent); @@ -66,11 +72,30 @@ FvwmWindow *t, rectangle *screen_g, int *x, int *y, int pdeltax, int pdeltay, int use_percent); +void CMD_PlacementEdgeAvoid(F_CMD_ARGS) +{ + int val[4]; + int n; + + n = GetIntegerArguments(action, NULL, val, 4); + if (n != 4) + { + fvwm_msg(ERR, "PlacementEdgeAvoid", + "PlacementEdgeAvoid require 4 arguments"); + return; + } + PageEdgeAvoid_left = val[0]; + PageEdgeAvoid_top = val[1]; + PageEdgeAvoid_right = val[2]; + PageEdgeAvoid_bottom = val[3]; +} + + static int SmartPlacement( FvwmWindow *t, rectangle *screen_g, int width, int height, int *x, int *y, int pdeltax, int pdeltay) { - int PageLeft = screen_g->x - pdeltax; + int PageLeft = screen_g->x - pdeltax + 50; int PageTop = screen_g->y - pdeltay; int PageRight = PageLeft + screen_g->width; int PageBottom = PageTop + screen_g->height; @@ -586,6 +611,10 @@ PageTop = screen_g.y - pdeltay; PageRight = PageLeft + screen_g.width; PageBottom = PageTop + screen_g.height; + PageLeft += PageEdgeAvoid_left; + PageRight -= PageEdgeAvoid_right; + PageTop += PageEdgeAvoid_top; + PageBottom -= PageEdgeAvoid_bottom; yt = PageTop; /* Don't alter the existing desk location during Capture/Recapture. */ -- Visit the official FVWM web page at <URL:http://www.fvwm.org/>. To unsubscribe from the list, send "unsubscribe fvwm-workers" in the body of a message to [EMAIL PROTECTED] To report problems, send mail to [EMAIL PROTECTED]