Resizing with external padding/grab area prevents reaching edge of screen

Bug #710356 reported by Alan Pope 🍺🐧🐱 🦄 on 2011-01-30
28
This bug affects 4 people
Affects Status Importance Assigned to Milestone
Unity
Fix Released
High
Sam Spilsbury
light-themes (Ubuntu)
High
Unassigned
unity (Ubuntu)
High
Sam Spilsbury

Bug Description

With the new external padding/resize drag area introduced in light-themes=0.1.8.5 to help with LP: #160311 it is not possible to resize a window exactly against the boundaries of the edge of the screen.

There are two main parts to this.

  (a) The extent of the shadowing is used as the window outside. When released, the window ends up being smaller.
  (b) When click is initiated N pixels outside the window border, the pointer will reach the edge of the screen N pixels too soon; prevent resizing exactly against the edge.

Solutions:

  (1) The shadow should not be counted as the size of the window
  (2) If the pointer is N pixels outside of the window border, the pointer must be allowed to overshoot N pixels past the edge of the screen while resizing.

For the latter, one pixel of border must remain grabable so that the window can be reduced from a semi-maximised state again.

S

Download full text (7.4 KiB)

On Mon, Jan 31, 2011 at 5:38 AM, Alan Pope <email address hidden> wrote:
> Public bug reported:
>
> Binary package hint: unity
>
> With a fully updated system I note two things which seem to be one bug:-
>
> 1) Left hand window grab handle (for resizing) is outside the window itself. This can be observed by moving the mouse to the left edge of a window and then moving outside on the left.

This is intentional with the new resize borders

> 2) Window cannot be fully aligned with left side of desktop. Observe the screenshot attached. There is a gap between the terminal window (occupying the left display) and the browser window (occupying the right display). The browser is pushed hard up against the left side of the right display, but there is still a notable gap.

This is being worked on atm

>
> ProblemType: Bug
> DistroRelease: Ubuntu 11.04
> Package: unity 3.2.16-0ubuntu1
> ProcVersionSignature: Ubuntu 2.6.37-12.26-generic 2.6.37
> Uname: Linux 2.6.37-12-generic x86_64
> NonfreeKernelModules: nvidia
> .proc.driver.nvidia.version:
>  NVRM version: NVIDIA UNIX x86_64 Kernel Module  260.19.29  Wed Dec  8 12:08:56 PST 2010
>  GCC version:  gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-1ubuntu6)
> Architecture: amd64
> CompizPlugins: No value set for `/apps/compiz-1/general/allscreens/options/active_plugins'
> CompositorRunning: compiz
> Date: Sun Jan 30 21:34:10 2011
> DistUpgraded: Yes, recently upgraded Log time: 2011-01-19 12:33:17.207056
> DistroCodename: natty
> DistroVariant: ubuntu
> DkmsStatus:
>  nvidia-current, 260.19.29, 2.6.37-12-generic, x86_64: installed
>  nvidia-current, 260.19.29, 2.6.38-1-generic, x86_64: installed
>  vboxhost, 3.2.12, 2.6.37-12-generic, x86_64: installed
>  vboxhost, 3.2.12, 2.6.35-24-generic, x86_64: installed
> GraphicsCard:   Subsystem: LeadTek Research Inc. Device [107d:2a62]
> InstallationMedia: Ubuntu 10.04.1 LTS "Lucid Lynx" - Release amd64 (20100816.1)
> InstallationMedia_: Ubuntu 10.04.1 LTS "Lucid Lynx" - Release amd64 (20100816.1)
> MachineType: System manufacturer System Product Name
> ProcEnviron:
>  LANGUAGE=en_GB:en
>  PATH=(custom, user)
>  LANG=en_GB.UTF-8
>  LC_MESSAGES=en_GB.utf8
>  SHELL=/bin/bash
> ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-2.6.37-12-generic root=UUID=fb22b4e1-1576-4bf8-8272-15300bc7de38 ro single
> ProcVersionSignature_: Ubuntu 2.6.37-12.26-generic 2.6.37
> Renderer: Hardware acceleration
> SourcePackage: unity
> UnitySupportTest:
>
> dmi.bios.date: 04/24/2009
> dmi.bios.vendor: Phoenix Technologies, LTD
> dmi.bios.version: ASUS P5N32-E SLI ACPI BIOS Revision 1801
> dmi.board.name: P5N32-E SLI
> dmi.board.vendor: ASUSTeK Computer INC.
> dmi.board.version: 1.XX
> dmi.chassis.asset.tag: 123456789000
> dmi.chassis.type: 3
> dmi.chassis.vendor: Chassis Manufacture
> dmi.chassis.version: Chassis Version
> dmi.modalias: dmi:bvnPhoenixTechnologies,LTD:bvrASUSP5N32-ESLIACPIBIOSRevision1801:bd04/24/2009:svnSystemmanufacturer:pnSystemProductName:pvrSystemVersion:rvnASUSTeKComputerINC.:rnP5N32-ESLI:rvr1.XX:cvnChassisManufacture:ct3:cvrChassisVersion:
> dmi.product.name: System Product Name
> dmi.product.version: System Version
> dmi.sys.vendor: System manufacturer
> version.libdrm2: libdrm2 2.4...

Read more...

Hey Alan,

please try to report one issue by bug report. The first one, as sam told was intentional, the other one is already reported. Marking then that as invalid.

Changed in unity (Ubuntu):
status: New → Invalid

It felt like one issue to me, so I filed it as one bug.

Can I just get clarification.

You are saying that it's _intentional_ that the grab handle for resizing a window is _outside_ the window that you're resizing?

Download full text (4.1 KiB)

On Mon, Jan 31, 2011 at 7:03 PM, Alan Pope <email address hidden> wrote:
> It felt like one issue to me, so I filed it as one bug.
>
> Can I just get clarification.
>
> You are saying that it's _intentional_ that the grab handle for resizing
> a window is _outside_ the window that you're resizing?
>

Yes it is a bugfix for the borders being too small

> --
> You received this bug notification because you are a member of Unity
> Team, which is subscribed to unity in ubuntu.
> https://bugs.launchpad.net/bugs/710356
>
> Title:
>  Window resize grab area is outside window
>
> Status in “unity” package in Ubuntu:
>  Invalid
>
> Bug description:
>  Binary package hint: unity
>
>  With a fully updated system I note two things which seem to be one
>  bug:-
>
>  1) Left hand window grab handle (for resizing) is outside the window itself. This can be observed by moving the mouse to the left edge of a window and then moving outside on the left.
>  2) Window cannot be fully aligned with left side of desktop. Observe the screenshot attached. There is a gap between the terminal window (occupying the left display) and the browser window (occupying the right display). The browser is pushed hard up against the left side of the right display, but there is still a notable gap.
>
>  ProblemType: Bug
>  DistroRelease: Ubuntu 11.04
>  Package: unity 3.2.16-0ubuntu1
>  ProcVersionSignature: Ubuntu 2.6.37-12.26-generic 2.6.37
>  Uname: Linux 2.6.37-12-generic x86_64
>  NonfreeKernelModules: nvidia
>  .proc.driver.nvidia.version:
>   NVRM version: NVIDIA UNIX x86_64 Kernel Module  260.19.29  Wed Dec  8 12:08:56 PST 2010
>   GCC version:  gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-1ubuntu6)
>  Architecture: amd64
>  CompizPlugins: No value set for `/apps/compiz-1/general/allscreens/options/active_plugins'
>  CompositorRunning: compiz
>  Date: Sun Jan 30 21:34:10 2011
>  DistUpgraded: Yes, recently upgraded Log time: 2011-01-19 12:33:17.207056
>  DistroCodename: natty
>  DistroVariant: ubuntu
>  DkmsStatus:
>   nvidia-current, 260.19.29, 2.6.37-12-generic, x86_64: installed
>   nvidia-current, 260.19.29, 2.6.38-1-generic, x86_64: installed
>   vboxhost, 3.2.12, 2.6.37-12-generic, x86_64: installed
>   vboxhost, 3.2.12, 2.6.35-24-generic, x86_64: installed
>  GraphicsCard:   Subsystem: LeadTek Research Inc. Device [107d:2a62]
>  InstallationMedia: Ubuntu 10.04.1 LTS "Lucid Lynx" - Release amd64 (20100816.1)
>  InstallationMedia_: Ubuntu 10.04.1 LTS "Lucid Lynx" - Release amd64 (20100816.1)
>  MachineType: System manufacturer System Product Name
>  ProcEnviron:
>   LANGUAGE=en_GB:en
>   PATH=(custom, user)
>   LANG=en_GB.UTF-8
>   LC_MESSAGES=en_GB.utf8
>   SHELL=/bin/bash
>  ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-2.6.37-12-generic root=UUID=fb22b4e1-1576-4bf8-8272-15300bc7de38 ro single
>  ProcVersionSignature_: Ubuntu 2.6.37-12.26-generic 2.6.37
>  Renderer: Hardware acceleration
>  SourcePackage: unity
>  UnitySupportTest:
>
>  dmi.bios.date: 04/24/2009
>  dmi.bios.vendor: Phoenix Technologies, LTD
>  dmi.bios.version: ASUS P5N32-E SLI ACPI BIOS Revision 1801
>  dmi.board.name: P5N32-E SLI
>  dmi.board.vendor: ASUSTeK Computer INC.
>  dmi.board.version: 1.XX
>  dmi.chassis...

Read more...

popey: suggestions welcomed for where else to site the grab area if not outside the window! :)

Yes, to be sure, it's intentionally magic ;-)

Popey: Re-reading the second-part of this bug-report, there's possibly some room for improvement.

  * If the window is grabbed N pixels outside of the window border, then allow overshooting the screen edge by the same N pixels outside of the screen borders.

This would still allow exact aligning with the screen edge in all cases. I'm happy to re-focus this bug around solving that specific issue if you'd be happy with that.

summary: - Window resize grab area is outside window
+ Resizing with external padding/grab area prevents reaching edge of
+ screen
Paul Sladen (sladen) on 2011-02-02
description: updated

I agree with the new description, much clearer, many thanks Paul.
The issue also occurs when you drag a window to the screen edge, not just when you resize to the screen edge. As shown in my original screenshot, I dragged the firefox window on the right screen to the left edge which got "stuck" a few pixels short. I opened the terminal on the left screen to show that it's quite pronounced when you have dual displays.

Paul Sladen (sladen) on 2011-02-03
Changed in unity (Ubuntu):
status: Invalid → Triaged
Changed in light-themes (Ubuntu):
status: New → Incomplete
Download full text (4.6 KiB)

On Thu, Feb 3, 2011 at 5:01 AM, Paul Sladen <email address hidden> wrote:
> Popey: Re-reading the second-part of this bug-report, there's possibly
> some room for improvement.
>
>  * If the window is grabbed N pixels outside of the window border, then
> allow overshooting the screen edge by the same N pixels outside of the
> screen borders.
>
> This would still allow exact aligning with the screen edge in all cases.
> I'm happy to re-focus this bug around solving that specific issue if
> you'd be happy with that.
>

The code has been changed so that you should be able to resize the
window so that the border touches the edge of the screen but goes no
further. Compiz shouldn't care about where the mouse is.

> ** Summary changed:
>
> - Window resize grab area is outside window
> + Resizing with external padding/grab area prevents reaching edge of screen
>
> --
> You received this bug notification because you are a member of Unity
> Team, which is subscribed to unity in ubuntu.
> https://bugs.launchpad.net/bugs/710356
>
> Title:
>  Resizing with external padding/grab area prevents reaching edge of
>  screen
>
> Status in “unity” package in Ubuntu:
>  Invalid
>
> Bug description:
>  Binary package hint: unity
>
>  With a fully updated system I note two things which seem to be one
>  bug:-
>
>  1) Left hand window grab handle (for resizing) is outside the window itself. This can be observed by moving the mouse to the left edge of a window and then moving outside on the left.
>  2) Window cannot be fully aligned with left side of desktop. Observe the screenshot attached. There is a gap between the terminal window (occupying the left display) and the browser window (occupying the right display). The browser is pushed hard up against the left side of the right display, but there is still a notable gap.
>
>  ProblemType: Bug
>  DistroRelease: Ubuntu 11.04
>  Package: unity 3.2.16-0ubuntu1
>  ProcVersionSignature: Ubuntu 2.6.37-12.26-generic 2.6.37
>  Uname: Linux 2.6.37-12-generic x86_64
>  NonfreeKernelModules: nvidia
>  .proc.driver.nvidia.version:
>   NVRM version: NVIDIA UNIX x86_64 Kernel Module  260.19.29  Wed Dec  8 12:08:56 PST 2010
>   GCC version:  gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-1ubuntu6)
>  Architecture: amd64
>  CompizPlugins: No value set for `/apps/compiz-1/general/allscreens/options/active_plugins'
>  CompositorRunning: compiz
>  Date: Sun Jan 30 21:34:10 2011
>  DistUpgraded: Yes, recently upgraded Log time: 2011-01-19 12:33:17.207056
>  DistroCodename: natty
>  DistroVariant: ubuntu
>  DkmsStatus:
>   nvidia-current, 260.19.29, 2.6.37-12-generic, x86_64: installed
>   nvidia-current, 260.19.29, 2.6.38-1-generic, x86_64: installed
>   vboxhost, 3.2.12, 2.6.37-12-generic, x86_64: installed
>   vboxhost, 3.2.12, 2.6.35-24-generic, x86_64: installed
>  GraphicsCard:   Subsystem: LeadTek Research Inc. Device [107d:2a62]
>  InstallationMedia: Ubuntu 10.04.1 LTS "Lucid Lynx" - Release amd64 (20100816.1)
>  InstallationMedia_: Ubuntu 10.04.1 LTS "Lucid Lynx" - Release amd64 (20100816.1)
>  MachineType: System manufacturer System Product Name
>  ProcEnviron:
>   LANGUAGE=en_GB:en
>   PATH=(custom, user)
>   LANG=en_GB.UTF-8
>   LC_ME...

Read more...

 importance high

Very visible wart, thanks for the report, let's get it nailed!

Changed in light-themes (Ubuntu):
importance: Undecided → High
Didier Roche (didrocks) on 2011-02-03
Changed in unity:
status: New → Triaged
importance: Undecided → High
Changed in unity (Ubuntu):
importance: Undecided → High
Changed in unity:
assignee: nobody → Sam "SmSpillaz" Spilsbury (smspillaz)
Sam Spilsbury (smspillaz) wrote :

I'm looking into this but there will be one caveat in my
implementation that I won't be able to work around.

Motion events in X are always reported as absolute co-ordinates
relative to the root window (the ones that we care about anyways) so
the way this will work is that if your mouse cursor moves in the
perpendicular direction to where the screen edge is facing on screen
(eg mouse moves up/down when you are at the left edge of the screen)
then it will take the motion in the opposite direction as pointer
motion in the same direction to resize the window.

Chase, I'm CCing you in case you know something about this.

On Thu, Feb 3, 2011 at 5:06 PM, Didier Roche <email address hidden> wrote:
> ** Also affects: unity
>   Importance: Undecided
>       Status: New
>
> ** Changed in: unity
>       Status: New => Triaged
>
> ** Changed in: unity
>   Importance: Undecided => High
>
> ** Changed in: unity (Ubuntu)
>   Importance: Undecided => High
>
> ** Changed in: unity
>     Assignee: (unassigned) => Sam "SmSpillaz" Spilsbury (smspillaz)
>
> --
> You received this bug notification because you are a member of Unity
> Team, which is subscribed to unity in ubuntu.
> https://bugs.launchpad.net/bugs/710356
>
> Title:
>  Resizing with external padding/grab area prevents reaching edge of
>  screen
>
> Status in Unity:
>  Triaged
> Status in “light-themes” package in Ubuntu:
>  Incomplete
> Status in “unity” package in Ubuntu:
>  Triaged
>
> Bug description:
>  With the new external padding/resize drag area introduced in light-
>  themes=0.1.8.5 to help with LP: #160311 it is not possible to resize a
>  window exactly against the boundaries of the edge of the screen.
>
>  There are two main parts to this.
>
>    (a) The extent of the shadowing is used as the window outside.  When released, the window ends up being smaller.
>    (b) When click is initiated N pixels outside the window border, the pointer will reach the edge of the screen N pixels too soon; prevent resizing exactly against the edge.
>
>  Solutions:
>
>    (1) The shadow should not be counted as the size of the window
>    (2) If the pointer is N pixels outside of the window border, the pointer must be allowed to overshoot N pixels past the edge of the screen while resizing.
>
>  For the latter, one pixel of border must remain grabable so that the
>  window can be reduced from a semi-maximised state again.
>
>  S
>
>
>

--
Sam Spilsbury

Sam Spilsbury (smspillaz) wrote :

Ok, here's some patches to make this work right.

Basically, it works so that if the mouse cursor hits the edge of the screen, any mouse movements which are parallel to the screen edge (eg up and down on a left edge) will be treated as mouse movements in the direction of the edge, so you resize a window so that the cursor hits the edge of the screen, and then move it up and down to "complete" the resize. This sort of works in a fitts-law kind of way where we know that the cursor motion isn't really going to be "precisely" left or right, but rather the user will physically move the mouse in such a way where there is going to be noise in the opposite direction anyways, so might as well use that noise to see how much they are "trying". Once the window hits the edge of the screen it stops counting these up and down movements as cursor motion, since that would end up breaking snap-back.

Attaching the first patch - second patch in the next comment (launchpad needs a way to attach multiple things to a comment) and here is a video of how it works should we be too lazy to rebuild :)

http://smspillaz.ucc.asn.au/unity/enh_borders.ogv

Sam Spilsbury (smspillaz) wrote :

This patch makes the first one work better

Chase Douglas (chasedouglas) wrote :

The patch seems to require bringing the cursor to exactly the very last pixel row or column along the edge of the screen. This will be very hard to do properly with a touchscreen. If there's a bezel around the screen, you won't be able to get to the last pixel. If there isn't a bezel, you will probably overshoot and end with a touch up event instead of futzing along the edge of the screen.

Instead, could we do some simple snap to the edge of the screen logic? If it gets within 5 px it snaps? Who would really be upset that they can't set their window to exactly 3 px from an edge :).

Sadly I will be unable to test this functionality until the nVidia driver is updated :(

I take it this doesn't fix the problem I originally reported which is to move a window, not resize it?

Sam Spilsbury (smspillaz) wrote :

On Thu, Feb 3, 2011 at 9:59 PM, Chase Douglas
<email address hidden> wrote:
> The patch seems to require bringing the cursor to exactly the very last
> pixel row or column along the edge of the screen. This will be very hard
> to do properly with a touchscreen. If there's a bezel around the screen,
> you won't be able to get to the last pixel. If there isn't a bezel, you
> will probably overshoot and end with a touch up event instead of futzing
> along the edge of the screen.
>

Indeed. This fix is for desktops.

> Instead, could we do some simple snap to the edge of the screen logic?
> If it gets within 5 px it snaps? Who would really be upset that they
> can't set their window to exactly 3 px from an edge :).

I think with unity touch we'll have another plugin which controls
resize snapping

>
> --
> You received this bug notification because you are a member of Unity
> Team, which is subscribed to unity in ubuntu.
> https://bugs.launchpad.net/bugs/710356
>
> Title:
>  Resizing with external padding/grab area prevents reaching edge of
>  screen
>
> Status in Unity:
>  Triaged
> Status in “light-themes” package in Ubuntu:
>  Incomplete
> Status in “unity” package in Ubuntu:
>  Triaged
>
> Bug description:
>  With the new external padding/resize drag area introduced in light-
>  themes=0.1.8.5 to help with LP: #160311 it is not possible to resize a
>  window exactly against the boundaries of the edge of the screen.
>
>  There are two main parts to this.
>
>    (a) The extent of the shadowing is used as the window outside.  When released, the window ends up being smaller.
>    (b) When click is initiated N pixels outside the window border, the pointer will reach the edge of the screen N pixels too soon; prevent resizing exactly against the edge.
>
>  Solutions:
>
>    (1) The shadow should not be counted as the size of the window
>    (2) If the pointer is N pixels outside of the window border, the pointer must be allowed to overshoot N pixels past the edge of the screen while resizing.
>
>  For the latter, one pixel of border must remain grabable so that the
>  window can be reduced from a semi-maximised state again.
>
>  S
>
>
>

--
Sam Spilsbury

tags: added: patch
Mark Shuttleworth (sabdfl) wrote :

On 03/02/11 13:59, Chase Douglas wrote:
> The patch seems to require bringing the cursor to exactly the very last
> pixel row or column along the edge of the screen. This will be very hard
> to do properly with a touchscreen. If there's a bezel around the screen,
> you won't be able to get to the last pixel. If there isn't a bezel, you
> will probably overshoot and end with a touch up event instead of futzing
> along the edge of the screen.
>
> Instead, could we do some simple snap to the edge of the screen logic?
> If it gets within 5 px it snaps? Who would really be upset that they
> can't set their window to exactly 3 px from an edge :).

Good idea, let's try a 5px snap.

Mark

Paul Sladen (sladen) wrote :

There's already snap logic, but it's snapping the shadow outline, not the window borders! :)

Eviatar (eviatarbach) wrote :

It seems this bug also affects Grid Snap edges; see here: https://bugs.launchpad.net/unity/+bug/719151

Mio (m10) wrote :
Neil J. Patel (njpatel) on 2011-03-11
Changed in unity:
milestone: none → 3.6.8

This issue is quite annoying when using the the "vertical maximization" of windows; i.e.: just middle-click on the maximize window control and the window should be vertically maximized, but due to this feature there's still a bottom edge not filled with the application content (cause the shadow uses it!).

Sam Spilsbury (smspillaz) wrote :

I already released a fix for this a while ago - the window now "completes" the resize when you cursor against the edge of the screen.

Changed in unity:
status: Triaged → Fix Released
Changed in unity (Ubuntu):
status: Triaged → Fix Released
Changed in light-themes (Ubuntu):
assignee: nobody → Sam "SmSpillaz" Spilsbury (smspillaz)
status: Incomplete → Fix Released
Changed in unity (Ubuntu):
assignee: nobody → Sam "SmSpillaz" Spilsbury (smspillaz)
tags: added: unity
Paul Sladen (sladen) wrote :

Sam: thank you for the work refining the resize/grib padding experience. I think there's still a few corner cases where things perhaps need a small amount of further tweaking. Would it perhaps be easier if Treviño or I file separate bug reports for each of those, so it's possible to have the satisfaction and clarity of leaving this bug report closed?

Sam Spilsbury (smspillaz) wrote :

On Sat, Mar 12, 2011 at 12:58 AM, Paul Sladen <email address hidden> wrote:
> Sam: thank you for the work refining the resize/grib padding experience.
> I think there's still a few corner cases where things perhaps need a
> small amount of further tweaking.  Would it perhaps be easier if Treviño
> or I file separate bug reports for each of those, so it's possible to
> have the satisfaction and clarity of leaving this bug report closed

Yes, please

?
>
> --
> You received this bug notification because you are a member of Unity
> Bugs, which is subscribed to unity in ubuntu.
> https://bugs.launchpad.net/bugs/710356
>
> Title:
>  Resizing with external padding/grab area prevents reaching edge of
>  screen
>
> Status in Unity:
>  Fix Released
> Status in “light-themes” package in Ubuntu:
>  Fix Released
> Status in “unity” package in Ubuntu:
>  Fix Released
>
> Bug description:
>  With the new external padding/resize drag area introduced in light-
>  themes=0.1.8.5 to help with LP: #160311 it is not possible to resize a
>  window exactly against the boundaries of the edge of the screen.
>
>  There are two main parts to this.
>
>    (a) The extent of the shadowing is used as the window outside.  When released, the window ends up being smaller.
>    (b) When click is initiated N pixels outside the window border, the pointer will reach the edge of the screen N pixels too soon; prevent resizing exactly against the edge.
>
>  Solutions:
>
>    (1) The shadow should not be counted as the size of the window
>    (2) If the pointer is N pixels outside of the window border, the pointer must be allowed to overshoot N pixels past the edge of the screen while resizing.
>
>  For the latter, one pixel of border must remain grabable so that the
>  window can be reduced from a semi-maximised state again.
>
>  S
>

--
Sam Spilsbury

cabanas (r-cabanas) on 2011-08-27
Changed in light-themes (Ubuntu):
assignee: Sam Spilsbury (smspillaz) → cabanas (r-cabanas)
assignee: cabanas (r-cabanas) → nobody
Neil J. Patel (njpatel) wrote :

Excellent job, Sam!

To post a comment you must log in.