Patent Description:
<CIT> discloses an apparatus and method for optimally displaying multiple windows on a display. The multiple windows can be sequentially or simultaneously resized and/or repositioned. The method performs at least one of resizing or repositioning operation on at least one of the multiple windows to fit within the available display area. The method allows the user the ability to see a maximum of information from multiple windows and allows access to the scroll bars, title bars, status bars and command window of the multiple windows.

<CIT> discloses a methods for manipulating display areas on a GUI workspace by transitioning the display areas from an original state to one of a set of enhanced window states. Initially, an indication to resize a display area is received at an operating system, which consequently invokes an appropriate window state. The indication may include capturing an edge of the display area and vertically dragging the edge to a dock-target region, thereby invoking a vertically-maximized state.

Advantageous embodiments of the invention are subject to the dependent claims.

This document describes techniques and apparatuses enabling adaptive sizing and positioning of application windows in a multi-application environment. The multi-application environment described herein presents one or more application windows, which can be sized, positioned, or layered to provide an optimized layout. In some embodiments, these techniques and apparatuses enable a size or position of an application window to be determined based on an edge of another application window. Also, in some embodiments the techniques and apparatuses enable an application window to be sized to a predefined area based on selection of a region of the multi-application environment. Further still, some embodiments enable joint dividers or joint corner controls, which enable multiple application windows to be sized or positioned simultaneously. Further, some embodiments identify available regions of a multi-application environment and enable selection of application windows to present via the available region.

This summary is provided to introduce simplified concepts that are further described below in the Detailed Description. This summary is not intended to identify essential features of the claimed subject matter, nor is it intended for use in determining the scope of the claimed subject matter. Techniques and/or apparatuses enabling adaptive sizing and positioning of application windows are also referred to herein separately or in conjunction as the "techniques" as permitted by the context, though techniques may include or instead represent other aspects described herein.

Embodiments enabling a multi-application environment are described with reference to the following drawings. The same numbers are used throughout the drawings to reference like features and components:.

This document describes techniques and apparatuses enabling adaptive sizing and positioning of application windows. These apparatuses and techniques may enable application windows of a multi-application environment to be conveniently and efficiently positioned or sized to provide optimized layouts of application windows. In some embodiments the techniques and apparatuses enable an application window to be sized to a predefined area based on selection of a region of the multi-application environment. This application window management is enabled through regions or predefined areas of the multi-application environment.

<FIG> illustrates an example system <NUM> in which techniques enabling adaptive sizing and positioning of application windows can be embodied. System <NUM> includes a computing device <NUM>, which is illustrated with four examples: a smart phone computer <NUM>, a tablet computing device <NUM>, a laptop computer <NUM>, and a gaming device <NUM>, though other computing devices and systems, such as set-top boxes, servers, and netbooks, may also be used.

Computing device <NUM> includes computer processor(s) <NUM> and computer-readable storage media <NUM> (media <NUM>). Media <NUM> includes an operating system <NUM>, multi-application environment module <NUM>, system-interface module <NUM>, input module <NUM>, application(s) <NUM>, each having one or more application user interfaces <NUM> (application UI(s) <NUM>), application manager <NUM>, which includes or has access to application queue <NUM>, and window manager <NUM>.

Computing device <NUM> also includes or has access to one or more displays <NUM> and input mechanisms <NUM>. <FIG> illustrates four example displays, which may be separate or integrated with computing device <NUM>. Input mechanisms <NUM> may include gesture-sensitive sensors and devices, such as touch-based sensors and movement-tracking sensors (e.g., camera-based), as well as mice (free-standing or integral with a keyboard), a stylus, touch pads, accelerometers, and microphones with accompanying voice recognition software, to name a few. Input mechanisms <NUM> may be separate or integral with displays <NUM>; integral examples include gesture-sensitive displays with integrated touch-sensitive or motion-sensitive sensors.

Operating system <NUM> manages resources of computing device <NUM> and may be implemented using any suitable instruction format, such as <NUM>-bit, <NUM>-bit, reduced instruction set computing (RISC), complex instruction set computing (CISC), and the like. In some cases, operating system <NUM> may enable execution of a module or application having a different instruction format through virtualization. Operating system <NUM> enables other modules of computing device <NUM> to access the resources of computing device <NUM>, such as multi-application environment module <NUM> and applications <NUM>.

Multi-application environment module <NUM> provides a multi-application environment by which a user may view and interact with one or more of applications <NUM> through application UIs <NUM>, which are presented via respective application windows. In some cases, the multi-application environment is an overlapping windowing environment or workspace that enables management or manipulation of a position, size, and/or front-to-back ordering (collectively, "placement") of overlapping windows (e.g., the z-ordering of the windows) or non-overlapping windows. The ordering or 'depth' of each application window in a workspace can be maintained via a z-stack of multi-application environment module <NUM>. Typically, primary application or non-occluded application windows reside at the top of the z-stack. Other application windows, such as non-primary or occluded application windows reside at positions deeper in the z-stack. These non-primary application windows may overlap or occlude each other based on their respective positions within the z-stack.

Multi-application environment module <NUM> may present application UIs <NUM> through application windows having frames. These frames may provide controls through which to interact with an application and/or controls enabling a user to position and size the window. Alternately or additionally, multi-application environment module <NUM> may present application UIs <NUM> through application windows having little or no window frame, and/or without presenting visual controls (e.g., permanent controls on a window frame or in a window obscuring content).

The multi-application environment enabled by multi-application environment module <NUM> can be, but is not required to be, hosted and/or surfaced without use of a windows-based desktop environment. Thus, in some cases multi-application environment module <NUM> presents a multi-application environment as an immersive environment and precludes usage of desktop-like displays (e.g., a taskbar). Further still, in some embodiments this multi-application environment is similar to an operating system in that it is not closeable or capable of being un-installed. While not required, in some cases this multi-application environment enables use of all or nearly all of the pixels of a display by applications within the multi-application environment.

System-interface module <NUM> provides one or more interfaces through which interaction with operating system <NUM> is enabled, such as an application-launching interface, an application management user interface (application management UI), a start menu, a control panel, or a system tools or options menu, to name just a few. Input module <NUM> receives input through the application windows, input mechanisms <NUM>, or other controls and affordances of a multi-application environment.

Applications <NUM> may include any suitable type of application, such as productivity applications, web browsers, media viewers, navigation applications, multimedia editing applications, and the like. Operating system <NUM> or multi-application environment module <NUM> may support applications of varying types or instruction sets natively or via virtualization. For example, multi-application environment module <NUM> may simultaneously present multiple applications <NUM> of varying types or instruction sets, such as <NUM>-bit, <NUM>-bit, run-time environments (e.g., Java or Silverlight, plug-ins (e.g., Flash), RISC, CISC, run-time-languages, and so on.

Each application <NUM> includes one or more application UIs <NUM>, which enables viewing or interaction with content of the application. Application UIs <NUM> may include predefined properties or preferences (e.g., default values or settings) for presenting an application <NUM>, such as an aspect ratio, maximum size, minimum size, position, primacy, display orientation, and the like. In at least some embodiments, application programming interfaces (APIs) associated with an application <NUM> enable access to the properties or preferences of the application <NUM> or respective application UI <NUM>.

Application manager <NUM> enables management of applications <NUM>, such as launching, switching, and tracking active applications. In some cases, application manager <NUM> enables relationships between applications to be established and maintained, such as applications that are frequently launched, positioned, or used within close proximity to each other. Application manager <NUM> may also have access to, or maintain, application queue <NUM>, which may include active applications, minimized applications, or previously-interacted-with applications. Applications of application queue <NUM> may be organized in any suitable fashion, such as most-recently-used, most-frequently-used, alphabetically, by application association, or by application grouping.

In at least some embodiments, window manager <NUM> enables techniques that position or size application windows to provide an optimized layout of application windows in a multi-application environment. Examples of these techniques and layouts of application windows, some of which are presented based on regions of the multi-application environment, are provided below, though they are not exhaustive or intended to limit the techniques described herein.

Any or all of operating system <NUM>, multi-application environment module <NUM>, system-interface module <NUM>, input module <NUM>, application(s) <NUM>, application manager <NUM>, and window manager <NUM> may be implemented separate from each other or combined or integrated in any suitable form.

Example methods <NUM>, <NUM>, <NUM>, and <NUM> address sizing or positioning application windows based on another application window or a region of a multi-application environment, example methods <NUM> and <NUM> address enabling joint dividers for sizing or positioning application windows, and example methods <NUM> and <NUM> address presenting an application window in an available area of a multi-application environment.

The methods described herein may be used separately or in combination with each other, in whole or in part. These methods are shown as sets of operations (or acts) performed, such as through one or more entities or modules, and are not necessarily limited to the order shown for performing the operation. For example, the techniques may present an application window in a region of a multi-application environment and automatically present another application window in another region of the multi-application environment. The techniques may also size and position an application window based on a selected region of a multi-application environment, present the sized application window in the selected region, and then establish a joint divider that enables the application window and another application window contacting the application window to be simultaneously resized. Further, the techniques may present an application window in a region of a multi-application environment and then present a prompt of other application windows that are selectable to fill one or more available regions of the multi-application environment.

<FIG> illustrates an example operating environment <NUM> in which the techniques described herein can be performed. In this particular example, tablet computing device <NUM> presents, via multi-application environment module <NUM>, multi-application environment <NUM> via display <NUM>. Here, multi-application environment <NUM>, which may also be referred to as a workspace, includes application window <NUM> and application window <NUM>, each of which occupy approximately half of multi-application environment <NUM> as shown by application window divider <NUM>.

As noted above, application windows may include controls (e.g., application window <NUM>) that enable the application window to be sized, positioned, minimized, closed, and so on. Alternately, application windows may not include controls (e.g., application window <NUM>), which enables a user interface or content of an application to fully occupy a region or an area of multi-application environment <NUM>. It should be noted that application windows without controls may still be sized, positioned, or otherwise manipulated by engaging an edge or contents of the application window.

Alternately or additionally, multi-application environment <NUM> may be implemented as a desktop, virtual or otherwise, and include a control area, which is shown as application management UI <NUM> or a start menu (not shown). For example, when implemented as a desktop, multi-application environment <NUM> may provide a windows-based workspace in which application windows can be individually moved, sized, or selected as a primary window (e.g. moved to the top of the z-stack).

Multi-application environment <NUM> may also provide one or more virtual desktops through which different sets of application windows can be presented or accessed. By way of example, a user may configure one virtual desktop with work-based or productivity application windows and another virtual desktop with media consumption application windows. By so doing, the user can interact with two different sets of application windows by switching or pivoting between the two virtual desktops. In some cases, the user may switch an application window from another virtual desktop to a currently selected virtual desktop thereby precluding the need to pivot between the virtual desktops. In at least some embodiments, multi-application environment <NUM>, or a section thereof, fully occupies a screen or visible area of a display. As such, edges of multi-application environment <NUM> may align with respective edges of the screen or visible area of the display.

Application management UI <NUM> enables access to features and functions of operating system <NUM>, system-interface module <NUM>, or other applications <NUM> of computing device <NUM>. For example, application windows can be launched or switched from application management UI <NUM>. Using the techniques herein, application windows can be efficiently added, switched, positioned, sized, or otherwise manipulated in multi-application environment <NUM> to provide optimized layouts of application windows.

<FIG> depicts method <NUM> for sizing or positioning an application window based on another application window, including operations performed by windows manager <NUM> or multi-application environment module <NUM>. In portions of the following discussion, reference may be made to system <NUM> of <FIG>, the operating environment <NUM> of <FIG>, and other methods and example embodiments described elsewhere herein, reference to which is made for example only.

At <NUM>, a selection of a region of a multi-application environment is received. The region can be selected via any suitable input, such as a hot-key combination or directional input received via an application window (e.g., window dragging). In some cases, selection of the region is received via an application window being added to, switched to, or moved within the multi-application environment. The region may include any suitable section or area of the multi-application environment, such as a section along an edge of a screen or a section in the center of the screen. In some cases, a user may define or configure particular areas (e.g., sections or strips of screen area) within the multi-application environment as user-defined regions.

The region may be fixed, predefined, or dynamic, such as a region that changes size or position due to an orientation of a display or type of input received. In some cases, a region may be associated with a corresponding operation, such as a "snap" operation, which fills the region with an application window at a predefined size or predefined position. These predefined sizes or predefined positions may correspond to predefined areas of a multi-application environment, which may include horizontal and/or vertical quadrants or fractions of a workspace, such as halves, quarters, thirds, and any combination thereof. Alternately or additionally, the predefined areas of the multi-application environment may be defined by a user, such as by partitioning a workspace or by saving an application window's size, position, or location within a z-stack as a predefined area.

By way of example, consider <FIG>, which illustrates example workspaces <NUM>, <NUM>, and <NUM>, each of which illustrate various layouts of regions. Here, application windows <NUM>, <NUM>, <NUM>, and <NUM> of workspace <NUM> are initially snapped to quadrant areas of the workspace. An application window may be considered snapped when the application window contacts or touches two or more adjacent edges of a workspace or screen. Similarly, application windows <NUM> and <NUM> are initially snapped to half areas of workspace <NUM>.

At <NUM>, an edge of another application window that is adjacent to the selected region is identified. The other application window may occupy an adjacent region of the multi-application environment. In some cases, the edge of the other application window is complimentary to the selected region. Alternately or additionally, an edge of a non-adjacent application window may be identified (e.g., complimentary or non-complimentary).

For example, consider region <NUM>, region <NUM>, and region <NUM> of workspace <NUM> along axes originating from corner <NUM>. Here, region <NUM> and region <NUM> are adjacent to corner <NUM> and region <NUM> is not adjacent to corner <NUM>. Further, edges of regions may be classified as complementary or non-complementary along an individual axis. From corner <NUM> and along an X-axis, edge <NUM> and edge <NUM> are complimentary and edge <NUM> is not complimentary. Similarly, from corner <NUM> and along a Y-axis, edge <NUM> and edge <NUM> are complimentary and edge <NUM> is not complimentary.

In the context of workspace <NUM>, assume window <NUM> is being dragged into a corner region of workspace <NUM>. Here, window manager <NUM> identifies an edge of application window <NUM>, which is adjacent to the region into which application window <NUM> is moving. Additionally, in the context of workspace <NUM>, application window <NUM> is being dragged into a side region of workspace <NUM>. Here, window manager <NUM> identifies an edge of application window <NUM>, which is adjacent to the region into which application window <NUM> is moving.

At <NUM>, a size or a position is determined for the application window based on the edge of the other application window. The size or position of the application window may be determined such that the application window fills the region to the edge of the other application window. In some cases, the size or position is determined such that an edge of the application window aligns with a complimentary edge of an adjacent application window. In such cases, the application window and adjacent application window may have a same width or a same height. Alternately or additionally, the determined size or position may correspond to a predefined area of a multi-application environment, such as a quadrant area or half area of a workspace.

Returning to example workspace <NUM>, window manager determines a size for application window <NUM> such that edges of application window <NUM> align with edges of application window <NUM> and application window <NUM>. Additionally, in the context of workspace <NUM>, window manager determines a size for application window <NUM> such that an edge of application window <NUM> aligns with the edge of application window <NUM>.

At <NUM>, the application window is presented in the selected region of the multi-application environment at the determined size or determined position. In some cases, the application window is presented over another application window occupying the selected regions. In such cases, the other application window may be relegated to another primacy layer of the multi-application environment (e.g., deeper in the z-stack). Alternately or additionally, the application window may be snapped into the region.

Concluding the example referencing workspace <NUM>, window manager presents application window <NUM> in a quadrant of workspace <NUM>, which places application window <NUM> against the other snapped windows of workspace <NUM>. Additionally, in the context of workspace <NUM>, window manager places application window <NUM> against half-snapped application window <NUM>.

<FIG> depicts a method <NUM> for sizing and positioning an application window based on other application windows of a multi-application environment, including operations performed by windows manager <NUM> or multi-application environment module <NUM>. In portions of the following discussion reference may be made to system <NUM> of <FIG>, operating environment <NUM> of <FIG>, and other methods and example embodiments described elsewhere herein, reference to which is made for example only.

At <NUM>, input is received to initiate placement of an application window in a region of a multi-application environment. Placement of the application window may be responsive to input to add, switch, or move an application window in the multi-application environment. In some cases, the input is a gesture or edge trigger action in which an application window, or visual representation thereof, is dragged to or moved against an edge of the multi-application environment. In such cases, the application window's contact or movement into the edge of the multi-application environment can 'trigger' a placement, or other transformation, of the application window.

At <NUM>, respective sizes and positions of other application windows in the multi-application environment are determined. In some cases, respective edges of the other application windows are identified as complimentary or non-complimentary edges to the region. In such cases, these respective edges may be identified on a per-axis basis, such as a vertical axis or horizontal axis. When complimentary edges of other applications are identified along both axes (e.g., two adjacent application windows), edges of the horizontal axis may be disregarded.

Optionally at <NUM>, respective states of the other application windows are determined. Application windows that are not snapped within a multi-application environment or are occluded by other windows may be disregarded from other operations of method <NUM>. Alternately or additionally, application windows that are minimized, maximized, or presented via another display may also be disregarded from the other operations of method <NUM>. By so doing, currently snapped or primary windows of the multi-application environment are considered when sizing or positioning the application window to provide an optimized layout of application windows. In some cases, a data structure of information describing the other application windows (e.g., on-screen application windows) and their respective state information is created or maintained. This data structure can be accessed or consulted to determine which application windows to consider when optimizing a layout of the application windows.

At <NUM>, a size and position for the application window are determined based on the respective sizes and positions of the other application windows. In some cases, the size and position of the window are also determined based on properties or preferences of the application window, such as a default aspect ratio or minimum size. In other cases, properties or preferences of the other application windows may be considered, such as to maintain a minimum size of one of the other application windows.

In some embodiments, the application window is sized and positioned to line up with other application windows that are adjacent to the region in which the application window is selected for presentation. For example, the application window may be sized to line up with a complimentary edge of an adjacent application window. When two of the other application windows are adjacent to the region, the application window may be sized to both complimentary edges of a vertically adjacent window. An example of this is illustrated in example workspace <NUM> of <FIG>, which includes application windows <NUM> and <NUM> that are adjacent to corner region <NUM>. Here, a size and position are determined for application window <NUM> such that the application window aligns with application window <NUM>.

Alternately, if another application window is not vertically adjacent, the application window can be sized to a horizontally adjacent window. This is illustrated by example workspace <NUM>, which includes application window <NUM> that is horizontally adjacent to half-region <NUM>. Here, a size and position are determined for application window <NUM> such that the application window aligns with a complimentary edge of application window <NUM>.

Further, when an adjacent application window does not have a complimentary edge in the region, the application window can be sized and positioned to line up with a non-complimentary edge of the adjacent window. This is illustrated by example workspace <NUM>, which includes application window <NUM> that is adjacent to corner <NUM>. Here, a size and position are determined for application window <NUM> to align the application window with a non-complimentary edge of application window <NUM>.

Additionally, when another application window is not adjacent to the region, the application window can be sized to a complimentary edge of a non-adjacent region. This is illustrated by example workspace <NUM>, which includes application window <NUM> that is not adjacent to corner <NUM>. Here, a size and position are determined for application <NUM> to align the application window with a complimentary edges of application window <NUM>.

Alternately, when there are no other edges or application windows present, the application window can be sized and positioned to a predefined area of the multi-application environment, such as a quadrant area or half area. This is illustrated in example workspaces <NUM> and <NUM> of <FIG>, which do not include an adjacent application window or those having complimentary edges. In workspace <NUM>, application window <NUM> is snapped to half the workspace and located opposite of corner <NUM>. As such, a size and position are determined such that application window <NUM> half snaps into an upper region of work space <NUM>. In workspace <NUM>, there are no other application windows when application window <NUM> is moved into a half-region. Accordingly, a size and position are determined such that window <NUM> can be snapped into a half-snap area of workspace <NUM>.

Optionally at <NUM>, a respective size or position of one of the other application windows is altered. In some cases, a size or position of the other application window is determined based on properties or preferences of the other application window, such as a default aspect ratio or minimum size. Altering the other application window may include moving or sizing the other application window to fit or fill a predefined area of the multi-application environment, such as a quadrant area or half area.

In some embodiments, this can be effective in enabling application window swapping, such as when the application window and another application window are similarly sized. Examples of this are illustrated in workspaces <NUM> and <NUM> of <FIG>, in which application window swapping is initiated in response to half-snap and quarter-snap edge trigger actions (triggers), respectively. In workspace <NUM>, half-snap edge trigger <NUM> is received via application window <NUM> to move the application window to the right edge of workspace <NUM>.

Here, application windows <NUM> and <NUM> are repositioned to the left edge of workspace <NUM> thereby enabling a position swap with application window <NUM>. In workspace <NUM>, quarter-snap edge trigger <NUM> is received via application window <NUM> to move the application window to the upper-left corner of workspace <NUM>. Here, application window <NUM> is repositioned to the lower-left corner of workspace <NUM> thereby enabling a position swap with application window <NUM>.

An example algorithm to determine when to initiate an application window swap is based on the input moving one of the application windows. When edge components of the application windows that are perpendicular to movement are identical, the application windows can be swapped. In other words, when moving an application window along the X-axis, the application window edges in the Y-axis must match. For diagonal movement, this algorithm can be applied twice, once in each axial direction. Vector-based movement along each axis may be determined by mapping the movement back to an edge trigger or other directional input.

At <NUM>, the application window is presented at the determined size and position to complete placement of the window. In some cases, the application window is presented over another application window occupying the selected regions. In such cases, the other application window may be relegated to another primacy layer of the multi-application environment (e.g., deeper in the z-stack). Alternately or additionally, the application window may be snapped into the region at a predefined size, such as to occupy a quadrant-area or half-area of the multi-application environment.

Further, method <NUM> or <NUM> may be implemented to resize an existing snapped window or maximized window. Resizing these windows may be initiated using any suitable input, such a half-snap or quadrant-snap edge triggers. In some cases, these operations are enabled responsive to receiving additional input, such as a mouse button or keyboard input (e.g., ALT key), in addition to an edge trigger or window dragging input.

<FIG> illustrates examples of resizing snapped application windows, which are shown with reference to workspaces <NUM> and <NUM>. Workspace <NUM> includes application window <NUM> and application window <NUM>, which is initially maximized in the workspace. Here, half-snap edge trigger <NUM> positions and sizes application window <NUM> to a half-area of workspace <NUM>. In response to this, window manager <NUM> resizes application window <NUM> to another half-area of workspace <NUM>.

As another example, consider workspace <NUM> illustrating an embodiment of the invention claimed, which includes application window <NUM> and application window <NUM> occupying a half-area of workspace <NUM>. Here, quadrant-snap edge trigger <NUM> positions and sizes application window <NUM> to a quadrant-area of workspace <NUM>. In response to this, window manager <NUM> resizes application window <NUM> to an adjacent quadrant-area of workspace <NUM>. These are but a few examples of how methods <NUM> and <NUM> can be implemented to position or size snapped application windows.

<FIG> depicts a method <NUM> for region-based sizing of application windows, including operations performed by windows manager <NUM> or multi-application environment module <NUM>. In portions of the following discussion reference may be made to system <NUM> of <FIG>, operating environment <NUM> of <FIG>, and other methods and example embodiments described elsewhere herein, reference to which is made for example only.

At <NUM>, an application window is presented in a user interface having predefined areas. The application window may be presented in one of the predefined areas or over the predefined areas. Each of the predefined areas corresponds with a region of the user interface. In some cases, the regions (e.g., edges) of the user interface are used to trigger placement of an application window into a corresponding one of the predefined areas (e.g., quadrants). These regions of the user interface may be default regions, such as screen edges, or user-defined regions that include any section of the screen. In some cases, the predefined areas may have an associated size or position within the user interface, such as a quadrant size, half size, maximized size, minimized size, and so on. The user interface may be implemented as a multi-application environment.

By way of example, consider <FIG>, which illustrates example predefined areas and corresponding regions. By way of example only, the predefined areas are illustrated as snap-areas, which may be evenly or unevenly split across sections of a workspace. For instance, workspace <NUM> of <FIG> includes half-snap area <NUM> and half-snap area <NUM>, which correspond edge region <NUM> and edge region <NUM>, respectively.

Example workspace <NUM> includes quadrant areas, such as quadrant-snap areas <NUM>, <NUM>, <NUM>, and <NUM>, which correspond to corner regions <NUM>, <NUM>, <NUM>, and <NUM>, respectively. Corner regions may be defined as square or round (e.g., corner region <NUM>), and may have a predefined size, such as a width or radius of approximately <NUM> pixels. Other example half areas are shown in workspace <NUM>, which includes half-snap area <NUM> and half-snap area <NUM>. Edge region <NUM> may correspond with a maximized area of a workspace or, in the case of a portrait-oriented display, may correspond with half-snap area <NUM>. Finally, half-snap area <NUM> corresponds with edge region <NUM> located along the bottom of workspace <NUM>.

In some embodiments, a size of a region may be altered depending on a type of input expected. For example, when a more-precise input is received, such as mouse input, regions may have a smaller size because a user can easily engage an intended region. In other cases, the size of the regions (e.g., edge region or corner edge) may be increased when less-precise input is received, such as touch input or gesture input. Alternately or additionally, a size of a region may be altered based on display topology, such as providing larger regions where edges of displays meet to enable more-accurate region selection.

At <NUM>, a size of the application window is altered based on one of the predefined areas. The size of the application window is altered in response to input moving the application window into a region that corresponds with the predefined area. In some cases, the application window is positioned to occupy a portion or all of the predefined area. The input moving the application window may include any suitable input, such as an edge trigger or directional input (e.g., dragging) received through the application window. For example, dragging an application window into a corner region sizes the application window into a quadrant that corresponds to the corner region. Thus, an application window can be sized to any predefined area of a workspace by moving that window to a corresponding region.

<FIG> depicts a method <NUM> for region-based sizing and positioning of application windows, including operations performed by windows manager <NUM> or multi-application environment module <NUM>. In portions of the following discussion reference may be made to system <NUM> of <FIG>, operating environment <NUM> of <FIG>, and other methods and example embodiments described elsewhere herein, reference to which is made for example only.

At <NUM>, input is received to move an application window within a user interface having predefined areas. The input received may include any suitable type of input, such as key strokes, directional input, gesture input, and the like. For example, the input may include selection and dragging of the application via a mouse or one or more key strokes, such as the Windows™ key and an arrow key. In other instances, the application may be dragged into a region that corresponds with one of the predefined areas.

At <NUM>, a predefined area of the user interface is selected based on the input and the state of the application window. The state of the application window may include a current size, a current position, a current depth in the z-stack, or a current predefined area occupied by the application window. The predefined area may include any predefined area, such as a user defined area or other predefined area described herein, such as snap areas. In some embodiments, the predefined areas may also be overlapping and have customizable depths in the z-stack of windows. By so doing, application window layouts of varying primacy or depth can be created.

Using the state of the application window can enable dynamic sizing and positioning of the application window. By way of example, selection of a predefined area or application window state can be determined using a state machine. In some cases, accessing the state machine based on a current state of an application window and the input received can select a next-predefined area or next-state for the application window.

Consider <FIG>, which illustrates example state machine <NUM> for dynamically selecting predefined areas or states for application windows. Here, legend <NUM> indicates which state transitions occur in response to a respective input received, such as an arrow key pressed while holding a Windows™ key. As shown by states of state machine <NUM>, predefined areas can be selected by entering a series of keystrokes to reach a corresponding state. In this particular example, state machine <NUM> includes states for half areas, such as left half <NUM>, right half <NUM>, split top <NUM>, and split bottom <NUM>. State machine also includes states for quadrant areas, such as left-top quarter <NUM>, left-bottom quarter <NUM>, right-top quarter <NUM>, and right-bottom quarter <NUM>. Further, other predefined areas or states of state machine <NUM> are also selectable and include minimize <NUM>, restore <NUM>, and maximize <NUM>. Alternately or additionally, a user can map one or more of the states, or other key combinations, to custom user-defined areas of a workspace.

Returning to the method at hand, at <NUM>, a size and position of the application window are altered such that the application window will fill the predefined area. In some cases, the application window is sized to fill a quadrant area or half area of the user interface. In other cases, the application window may be minimized or relegated deeper in a z-stack of currently presented application windows. As noted above, the predefined area may be user defined, such as a drop region in a center of a user interface or multi-application environment.

By way of example, consider workspace <NUM> of <FIG>, which illustrates custom drop areas <NUM>, <NUM>, and <NUM>. These custom drop areas may be defined by a user and mapped to a region (e.g., a region in the middle of the workspace) or key combination such that a size and position of an application window are altered to fill the drop area. These drop areas may be configured in any suitable fashion, such as by storing an application window's size, position, or depth in a z-stack as a user-defined area of a workspace.

Optionally at <NUM>, the application window is previewed to visibly indicate the altered size and position of the application window. The preview of the application window can be shown as a non-opaque (or partially transparent) representation of the application window or content thereof. In some cases, additional input is received confirming the previewed placement of the application window in the predefined area. In such cases, method <NUM> may advance to operation <NUM> in response to input committing the application window as previewed.

Alternately, the additional input may select another of the predefined areas in which to present the application interface. This may be effective to cause method <NUM> to return to operation <NUM> for selection of another predefined area. In yet other cases, the additional input may be received in the form of continued dragging or inertia imparted on the application window or the preview thereof. In response to this continued dragging or inertia (e.g., into an edge region), the preview of the application window can be resized in the predefined area or sized to another predefined area.

At <NUM>, the application window is presented in the predefined area of the user interface at the altered size and position. In some cases, the application window is presented at a particular depth in the z-stack in accordance with a depth associated with the predefined region of the user interface. Presenting the application at the altered size and position can be effective to fill the predefined area. An example of this is illustrated by workspace <NUM> in which search application <NUM> is sized and positioned to fill drop areas <NUM>. In the context of <FIG>, operations of method <NUM> may be repeated to fill drop areas <NUM> and <NUM> with image application <NUM> and notepad application <NUM>, respectively.

<FIG> depicts a method <NUM> for establishing a joint divider between application windows, including operations performed by windows manager <NUM> or multi-application environment module <NUM>. In portions of the following discussion reference may be made to system <NUM> of <FIG>, operating environment <NUM> of <FIG>, and other methods and example embodiments described elsewhere herein, reference to which is made for example only.

At <NUM>, a joint divider is established between a first application window and a second application window of a multi-application environment. The joint divider is established in response to an edge of the first application window contacting (e.g., touching with no overlap) an edge of the second application window. In some cases, the joint divider is established along respective sections of each application window that are in contact. In other cases, the joint divider is established along an entire length of each respective application window, regardless of an amount of contact between the application windows. Contact between the edges of the application windows may be caused by any suitable operation, such as moving, snapping, adding, or sizing one of the application windows in the multi-application environment. The joint divider can also be established along any visible edges of the application windows. In some cases, establishing the joint divider may be limited to snapped application windows and preclude non-snapped or floating application windows.

In some embodiments, the joint divider is established between multiple application windows contacting each other along one or more edges. For example, a single joint divider can be established when respective edges of two applications windows contact an edge of a third application window. Alternately, complex joint dividers can be formed when application windows contact each other at respective corners of the application windows. Alternately or additionally, establishing the joint divider groups (or relates) the application windows together enabling operations to be performed on the grouped application windows. For example, grouped application windows may be opened, closed, minimized, resized, switched to/from, or moved together. Further, ungrouping the grouped application windows may return the previously-grouped application windows to their respective original states. In some cases, the grouped application windows are presented together in switching affordances, such as a start menu, application management UI, or hotkey switcher (e.g., ALT+Tab or Windows™+Tab).

A joint divider can be established whenever and wherever respective edges of two or more application windows contact each other. By way of example, consider <FIG> which illustrates various joint dividers in workspaces <NUM>, <NUM>, and <NUM>. Workspace <NUM> includes joint divider <NUM> established between quadrant-snapped application windows and joint divider <NUM> established between the quadrant-snapped application windows and a half-snapped application window. Joint dividers may also be established between occluded application windows as shown in workspace <NUM> where application divider <NUM> is established between partially-occluded and snapped application windows. Further, application divider <NUM> is established between occluded and floating application windows, which are not at a highest level in the z-stack of application windows.

At <NUM>, the joint divider shared by a first application window and a second application window is presented. Presenting the joint divider may include providing a visual or haptic indication of the joint divider. For example, a visual indication is presented over edges of application windows that share the joint divider. In other cases, the joint divider is presented between two application windows that share the joint divider. In such cases, the size of one or both application windows may be reduced to provide space in which to present the joint divider. Alternately or additionally, haptic feedback (e.g., bumps or undulations) can be used to indicate a presence of the joint divider. In some cases, the joint divider is presented in response to input or cursor movement that is proximate the joint divider.

In some embodiments, a joint-separation control or affordance is also presented to enable a joint divider to be disabled. The joint-separation control can be presented over a section of the joint divider, an edge of the joint control, or both edges of the joint control. In some cases, the joint-separation control enables a user to 'unbuckle' the joint divider, which enables individual sizing or movement of application windows previously sharing the joint divider. The joint divider may also be disabled by other operations, such as double-clicking the joint divider, clicking the joint divider while holding a key (e.g., CTRL), or by sizing or moving an application window via an edge that is not part of the joint divider.

The joint divider can be presented in response to establishing the joint divider between application windows. Alternately, the joint divider may exist without being presented until input or cursor movement is received proximate to the joint divider. <FIG> illustrates an example of presenting a joint divider in response to cursor movement. Movement of a curser is shown in a progression of illustrated workspaces starting in workspace <NUM>, which includes application window <NUM>, application window <NUM>, and cursor <NUM>.

As shown in workspace <NUM>, movement of cursor <NUM> can be detected based on proximity threshold <NUM>. Proximity threshold <NUM> may be configured having any suitable dimensions, such as <NUM> pixels from a joint divider, and may be reconfigured based on a type of input being received. As cursor <NUM> crosses proximity threshold <NUM>, as shown in workspace <NUM>, joint divider <NUM> and joint-separation control <NUM> are presented over contacting edges of application windows <NUM> and <NUM>.

At <NUM>, input to alter respective sizes of the first application window and the second application window is received via the joint divider. The input received may include any suitable type of input, such as directional input received via a cursor movement, touch input, or arrow keys. By way of example, consider example workspace <NUM> of <FIG>, which includes joint divider <NUM> shared by application windows <NUM> and <NUM>. In this particular example, joint divider <NUM> also includes joint-separation control to enable individual sizing of application windows <NUM> and <NUM>. Here, input to size application windows <NUM> and <NUM> in a lateral direction is received via cursor <NUM>.

At <NUM>, the respective sizes of the first application window and the second application window are altered simultaneously in response to the input. The respective sizes of the application windows may be altered as the input, such as directional cursor movement, is received. For example, the altered sizes of the application windows may be visually indicated by sliding the joint divider along an axis in which input is received. Thus, the sliding joint divider may visually indicate the simultaneous sizing of the first and second application windows.

Alternately or additionally, joint dividers may exhibit an attraction or affinity (e.g., magnetism) for midpoints along an edge of a workspace. This can be effective to aid a user in sizing windows in a symmetrical layout. In some cases, the attraction to points along edges of the workspace can be disable in response to key input (e.g., holding the CTRL key).

In the context of <FIG>, application windows <NUM> and <NUM> are sized based on the movement of joint divider <NUM> to a position shown in workspace <NUM>. In this particular example, features of the joint-separation control are also illustrated. Here, additional input to independently size application window <NUM> is received via joint-separation control <NUM>. As shown, input received from cursor <NUM> sizes application window <NUM> an opposite lateral direction. As a result, application window <NUM> is separated from application window <NUM> as shown in workspace <NUM>, disabling the joint divider, and sized to expose previously-occluded application windows <NUM>.

<FIG> depicts a method <NUM> for sizing and positioning application windows with a joint divider, including operations performed by windows manager <NUM> or multi-application environment module <NUM>. In portions of the following discussion reference may be made to system <NUM> of <FIG>, operating environment <NUM> of <FIG>, and other methods and example embodiments described elsewhere herein, reference to which is made for example only.

At <NUM>, a joint divider shared between a first application window and a second application window is presented in a multi-application environment. Presenting the joint divider may include providing a visual or haptic indication of the joint divider. For example, a visual indication is presented in between or over edges of application windows that share the joint divider. Alternately or additionally, haptic feedback (e.g., bumps or undulations) can be used to indicate a presence of the joint divider. By way of example, consider workspace <NUM> of <FIG> in which application window <NUM> and application window <NUM> share joint divider <NUM>. Here, joint divider <NUM> is visually indicated over contacting edges of application window <NUM> and application window <NUM>.

At <NUM>, input to increase a size of the first application window is received via the joint divider. In some cases, the input to increase the size of the first application window may indicate to increase the size of the first application window in a direction toward the second application window. In such cases, depending on a position of the second window with respect to an edge of a workspace, the input may indicate to size, move, or relegate the second application deeper into a z-stack of windows. For example, application windows not touching an edge of a multi-application environment may be moved rather than sized.

The input received may include any suitable type of input, such as directional input received via a cursor movement, touch input, or arrow keys. In the context of the current example, directional input is received via application divider as shown in workspace <NUM> of <FIG>. Here, note that application window <NUM> is not in contact with an edge of workspace <NUM> and is thus movable without being sized.

At <NUM>, the size of the first application window is increased in response to the input received. While the size of the first application window is increased the second application window is simultaneously moved effective to maintain a size of the second application window. Movement of the second application window may continue until an edge of the multi-application environment is encountered. Continuing the ongoing example, a size of application window <NUM> is increased while application window <NUM> is moved toward an edge of workspace <NUM>.

Operations <NUM>, <NUM>, and <NUM> are optional and may be performed responsive to additional input or further increases in the size of the first application window. At <NUM>, a size of the second application window is decreased in response to an edge of the second application window encountering an edge of the multi-application environment. Decreasing the size of the second application window occurs while the size of the first application window continues to increase. The size of the second application window may be decreased until a minimum window size is reached. In the context of <FIG>, this is illustrated in layer view <NUM> where continued movement of joint divider <NUM> increase the size of application window <NUM> and decreases a size of application window <NUM>.

At <NUM>, the first application window is permitted to overlap the second application window in response to the size of the second application window reaching a minimum size. Once the minimum size of the second application window is reached, the advancing edge of the first application begins to overlap the second application window. The minimum size of the application window may be defined by an application associated with the application user interface, an operating system, or by user input. Continuing the ongoing example, a minimum size of application window <NUM> is reached by joint divider <NUM> as shown in layer view <NUM>. In response to this and as illustrated in layer view <NUM>, an advancing edge of application window <NUM> begins to overlap application window <NUM>.

At <NUM>, the second application window is relegated to another layer of the multi-application environment in response to the joint divider encountering the edge of the multi-application environment. In some cases, the second application window is pushed deeper into a z-stack of application windows. Alternately or additionally, the size of the second application window can be restored to a default size or a size previous to being moved. This can be effective to enable the second application window to be restored or switched to without resizing. Concluding the present example, application window <NUM> is relegated to a next-layer of the workspace at a restored size. Thus, application window <NUM> can be restored or switched to without resizing.

Joint dividers may also be established between multiple application windows and may be referred to as complex joint dividers. Sizing or movement of multiple application windows may be implemented by operation described with respect to method <NUM> or <NUM>. By way of example consider <FIG>, which includes example workspaces <NUM> and <NUM> illustrating joint dividers established between multiple application windows. In the context of workspace <NUM>, joint divider <NUM> enables sizing of application windows <NUM> and <NUM>, which are adjacent to each other and share joint divider <NUM>. Joint divider <NUM>, which is shared between edges of application windows <NUM>, <NUM>, and <NUM> enables sizing of all three application windows.

This aspect can be extended to four application windows as shown in workspace <NUM>, which includes application windows <NUM>, <NUM>, <NUM>, and <NUM>. In this example, joint dividers <NUM>, <NUM>, <NUM>, and <NUM> each enable sizing of their respective adjacent windows that share edges. For example, joint divider <NUM> sizes application windows <NUM> and <NUM>, but not application windows <NUM> or <NUM>. Alternately or additionally, when sizing multiple windows, a joint divider may separate or 'unbuckle' in response to sizing one of the multiple windows to a minimum size.

Complex joint dividers may also be implemented to maintain an independence of a window or localize changes to a particular windows. For example, consider workspaces <NUM>, <NUM>, and <NUM> of <FIG>, which illustrate a three floating application windows that share a joint divider. Here, application windows <NUM>, <NUM>, and <NUM> share joint divider <NUM>. As shown in workspace <NUM>, input <NUM> received via a section of joint divider <NUM> shared by application windows <NUM> and <NUM> sizes those application windows but not application window <NUM>. Another example of this independent sizing is shown in workspaces <NUM>, in which input <NUM> sizes application window <NUM> over application windows <NUM> and <NUM>. Alternately, input <NUM> received via a section of joint divider shared by application windows <NUM> and <NUM> can size these application windows as shown in workspace <NUM>.

Joint dividers may also be implemented in combination to provide joint corners. Joint corners enable application window sizing in one or two axes and may size at least two application windows that share the joint corner. <FIG> illustrates various examples of corner joints as shown in workspaces <NUM> and <NUM>. In workspace <NUM>, corner joint <NUM> enables application windows <NUM>, <NUM>, <NUM>, and <NUM> to be sized in both axes.

In some cases, joint corners can be established when two application windows share a corner and not a common edge. An example of this is illustrated by workspace <NUM> in which application windows <NUM> and <NUM> meet at corners and share joint corner <NUM>. Here, joint corner <NUM> enables sizing of application windows <NUM> and <NUM> in both axes. As with joint dividers, joint corners may be disabled responsive to reaching an application windows minimum size or other suitable input, such as key input or dragging an application window from an edge that is not part of the joint corner.

Joint corners can be established whenever corners of application windows contact or touch each other. Window manager <NUM> can establish or maintain joint corners by tracking corner, or two adjacent edges, of individual windows. Returning to <FIG>, consider example workspace <NUM> that includes application windows <NUM>, <NUM>, and <NUM>. Each of these windows includes a corner where two of their respective edges meet. Here, window manager <NUM> tracks edges <NUM>, <NUM>, and <NUM> to establish or maintain a joint corner for these application windows.

Window manager <NUM> may also track edges of individual application windows to establish or maintain joint dividers. By way of example, consider <FIG> in which workspace <NUM> includes application windows <NUM> and <NUM>. Application windows <NUM> and <NUM> share joint divider <NUM>, and thus can be sized through input received through the joint divider. To enable sizing or other joint divider operations window manager <NUM> can build a dependency chain to track individual edges of application windows.

In the context of <FIG> and as shown in detailed view <NUM>, joint divider <NUM> includes edge <NUM> of application window <NUM> and edge <NUM> of application window <NUM>. Here, cursor <NUM> is hovering over edge <NUM> of application window <NUM> and window manager <NUM> can build a dependency chain with respect to edge <NUM> and a position of cursor <NUM>. Starting from edge <NUM>, window manager determines which other application window edges are in contact with edge <NUM>. Here, edge <NUM> is determined to be contacting edge <NUM> as shown in detailed view <NUM>, and is thus affected by joint divider <NUM>.

Alternately or additionally, non-contiguous edges may be disregarded and ignored when performing joint divider operations. For example, in detailed view <NUM>, window manager <NUM> determines that edges of application windows <NUM> and <NUM> are in contact with edge <NUM>. An edge of application window <NUM>, however, is determined to not be in contact with edge <NUM> because of intervening application window <NUM> and may be disregarded. As shown in detailed view <NUM>, Application window <NUM> may also be determined as not contacting edge <NUM> and may also be disregarded for joint divider operations.

<FIG> further illustrates an example of edge dependency at detailed view <NUM>, in which edge <NUM> of application window <NUM> is determined to be in contact with edge <NUM> of application window <NUM>. From application window <NUM>, window manager <NUM> can determine contact from the perspective of a next application window in an edge dependency chain. Here, edge <NUM> of application window <NUM> is determined to be in contact with edge <NUM> of application window <NUM>. In detailed view <NUM>, a size operation initiated by input <NUM> is propagated through the dependency chain and causing each of the contacting application windows to size or move accordingly.

<FIG> depicts a method <NUM> for presenting selectable application windows in an available region of a multi-application environment, including operations performed by windows manager <NUM> or multi-application environment module <NUM>. In portions of the following discussion reference may be made to system <NUM> of <FIG>, operating environment <NUM> of <FIG>, and other methods and example embodiments described elsewhere herein, reference to which is made for example only.

At <NUM>, visual representations of application windows are presented in an available region of a multi-application environment. The visual representations correspond to application windows that are selectable or suitable for presentation in the available area, such as application windows that can be sized to fully-occupy the available region. The visual representations of the application windows may include text, icons, or reduced-sized images of the application windows, such as thumbnail images. These reduced-sized images may visibly indicate a preview of an application windows content or previously-presented content.

In some embodiments, the visual representations of the application windows are presented via a prompt or other application-selection interface in the available region. In some cases, the visual representations are presented in response to presenting another application in another region of the multi-application environment, such as a snap operation to present the other application in a quadrant-area or half-area. In other cases, the visual representations are presented in response to input received via an application-selection control, such as a control to invoke the prompt or application-selection interface. The application-selection control may be implemented as a hover-region or graphical tab near along an edge of the available area.

An application-selection control may also be presented in response to cursor movement or other input that 'pushes' into an edge region of the multi-application environment. The push movement may include a double push movement or movement over a distance of workspace or screen area. In some cases, a push movement is detected using particular criteria to avoid recognizing inadvertent contact with an edge (e.g., scrolling a scrollbar) as push movement. For example, once movement of a cursor pauses at, or just within, an edge region, a subsequent 'push' (e.g., double push) further into the edge region can invoke the application-selection control. Alternately, the application-selection control may not be invoked if the cursor leaves the edge region, a length of the pause fails to meet a predefined threshold, or the cursor continues to move through the edge region without pausing.

In some embodiments, movement of a cursor prior to encountering an edge region can also be considered. Vertical and horizontal components of cursor movement may be tracked to determine if the cursor travelled far enough across a workspace or into the edge region at a sufficient angle. By way of example, when encountering a horizontal edge, the application-selection control can be invoked in response to determining that the cursor travelled at least <NUM> vertical pixels and moved more vertically than horizontally within the edge region. Similar criteria may be applied to vertical edge regions, such as by determining that the cursor moved more horizontally than vertically within the edge region. Alternately or additionally, cursor movement or other input can be tracked by a state machine configured to invoke or trigger presentation of the application-selection control in response to these criteria being met.

By way of example, consider <FIG> in which example workspace <NUM> of a multi-application environment is illustrated. Workspace <NUM> includes application window <NUM>, available region <NUM>, and taskbar <NUM>. In this particular example, application-selection prompt <NUM> is presented in available region <NUM>, which also includes application-selection control <NUM>. A more detailed view of application-selection control <NUM> is provided at <NUM> and includes dismiss control <NUM>.

Application-selection control <NUM> is implemented as a hover region along an edge of available region <NUM> and appears responsive to proximity to cursor <NUM> (or touch input). The hover region may have a predefined width or area, such as <NUM> to <NUM> pixels along an edge of a workspace. Application-selection control <NUM> enables a user to trigger or invoke application selection-prompt <NUM>, which may then present all active application windows to the user in a contextual fashion. Alternately or additionally, dismiss control <NUM> enables application-selection prompt <NUM> to be dismissed (or hidden) temporarily or until subsequent proximity with a cursor or other input. Here, assume that a user has tapped application-selection control <NUM> to invoke application-selection prompt <NUM>. In response to this input, application-selection prompt <NUM> is presented and includes visual representations (e.g., thumbnail images) of application windows that were most-recently accessed by the user.

Alternately or additionally, the visual representation of the application windows may be presented in response to presenting another application window in another region of the multi-application environment. This may be effective to enable a user to easily select one of the application windows for the available region to complete a layout of application windows in the multi-application environment.

An example of this is shown in workspace <NUM> of <FIG>, in which edge trigger <NUM> is received via application window <NUM>. Edge trigger <NUM> half-snaps application window <NUM> to an edge of workspace <NUM> and application window <NUM> is presented in the half-snap region. This example illustrates but one instance in which an edge trigger or other contact with an edge can be effective to cause presentation or 'snapping' of an application window into a predefined area that corresponds with the edge. Here, note that unsnapped (e.g., floating) application windows <NUM> are partially-occluded before the half-snap operation of application window <NUM>. In response to the presentation of application window <NUM> in the half-snap region, visual representations <NUM> that correspond to unsnapped application windows <NUM> are presented in application-selection prompt <NUM>.

At <NUM>, one of the application windows is presented in the available region. The application window is presented in response to receiving input selecting a corresponding one of the visual representations. In some cases, the input selecting the visual representation is received via other application-selection user interfaces, such as an application management UI, start menu, or key-based application switcher (e.g., ALT+Tab keys).

The application window is sized and positioned to fill or completely occupy the available region. Prior to presenting the application window, a preview of the application window may be presented to visibly indicate the size and position of the application window within the available region. In the context of <FIG> and workspace <NUM>, the user tapping email application tile <NUM> would cause a corresponding email application to fill available region <NUM>. Thus, with a single tap input, the user is able to conveniently optimize a layout of the workspace.

<FIG> depicts a method <NUM> for identifying an available region of a multi-application environment in which to present an application window, including operations performed by windows manager <NUM> or multi-application environment module <NUM>. In portions of the following discussion reference may be made to system <NUM> of <FIG>, operating environment <NUM> of <FIG>, and other methods and example embodiments described elsewhere herein, reference to which is made for example only.

At <NUM>, an available region of a multi-application environment is identified. The available region may include any suitable region in which an application interface can be presented, such as a rectangular region of workspace or screen. Identification of the available region may be performed in response to presentation of another application window in another region of the multi-application environment. The other application window may be presented in the other region via any suitable operation, such as a snap operation, sizing via a dynamic joint divider, or region-based sizing. In some cases, the available region is identified as a region that does not include an un-occluded window or a region that can be fully occupied by an application window. Alternately or additionally, the available region is identified for a primary or foremost one layer of the multi-application environment (e.g., top of the z-stack).

Consider <FIG> in which workspace <NUM> is presented generally at <NUM> and includes application windows <NUM>, <NUM>, <NUM>, and <NUM>, the latter three being partially occluded by application window <NUM>. Here, assume that half-snap edge trigger <NUM> is received via application window <NUM>, which is then snapped to the right half of workspace <NUM> as shown at <NUM>. In response to this snap operation, window manager <NUM> identifies the left half of workspace <NUM> as available area <NUM>.

Optionally at <NUM>, application windows that are selectable for presentation in the available region are determined. These application windows may include any suitable application window, such as application windows that are occluded, partially-occluded, minimized, or grouped with another active or open application window. Candidate application windows for selection may also sizable to fill the available region, so fixed-size application windows and application windows snapped to other regions can be excluded.

At, <NUM> visual representations of application windows are presented in the available region. These application windows include those application windows that are selectable for presentation in the available region. The visual representations of the application windows may include text, icons, or reduced-sized images of the application windows, such as thumbnail images. These reduced-sized images may visibly indicate a preview of an application windows content or previously-presented content. In the context of the present example and as shown at <NUM>, window manager <NUM> presents visual representations, such as reduced-size images, of application windows <NUM>, <NUM>, and <NUM> in available region <NUM> of workspace <NUM>.

Alternately or additionally, an order or layout for the visual representations of the application windows is determined. This order or layout may be determined based any characteristic or property of the application windows, such as most-frequent-use, most-recent-use, names, titles, sizes, position in the z-stack, or grouping with another active or open application window.

At <NUM>, input selecting one of the application windows is received via a corresponding one of the visual representations. The input may include any suitable input, such as cursor input, gesture input, or touch input. In some cases, the touch input includes a tap or quadrant-snap or half-snap into the available region. Continuing the ongoing example, quadrant-snap trigger <NUM> is received via the visual representation of application window <NUM>.

At <NUM>, the selected application window is presented in at least a portion of the available region. The application window is sized and positioned to fill or completely occupy the available region. Prior to presenting the application window, a preview of the application window may be presented to visibly indicate the size and position of the application window within the available region. Optionally, operations of method <NUM> may be performed repeatedly to fill other available regions of the multi-application environment. By so doing, an optimized layout of application windows can be provided with minimal user interaction.

In some embodiments, an application window may be selected for the user and presented in the available region without user input. For example, if an application window is paired with another application window in another region, the paired application window can be presented in response to presentation other application window in the other region. The application window may also be selected automatically based on criteria used to determine which applications are selectable for presentation, such as a most-recently user or most-frequently used application window.

Concluding the present example, window manager <NUM> sizes and positions application window <NUM> to fill a quadrant of workspace <NUM> as shown at <NUM>. Further, window manager <NUM> may then identify available region <NUM> of workspace <NUM> in which to present the visual representations of application windows <NUM> and <NUM>. Here, assume that tap input <NUM> is received via the visual representation of application window <NUM>. In response, window manager <NUM> sizes and positions application window <NUM> to fill a quadrant region of workspace <NUM> as shown at <NUM>. Thus, with just three instances of input, a layout of application windows have been provided in workspace <NUM>.

Aspects of these methods may be implemented in hardware (e.g., fixed logic circuitry), firmware, a System-on-Chip (SoC), software, manual processing, or any combination thereof. A software implementation represents program code that performs specified tasks when executed by a computer processor, such as software, applications, routines, programs, objects, components, data structures, procedures, modules, functions, and the like. The program code can be stored in one or more computer-readable memory devices, both local and/or remote to a computer processor. The methods may also be practiced in a distributed computing environment by multiple computing devices.

<FIG> illustrates various components of example device <NUM> that can be implemented as any type of client, server, and/or computing device as described with reference to the previous <FIG> to implement techniques enabling adaptive sizing and positioning of application windows. In embodiments, device <NUM> can be implemented as one or a combination of a wired and/or wireless device, as a form of television client device (e.g., television set-top box, digital video recorder (DVR), etc.), consumer device, computer device, server device, portable computer device, user device, communication device, video processing and/or rendering device, appliance device, gaming device, electronic device, and/or as another type of device. Device <NUM> may also be associated with a user (e.g., a person) and/or an entity that operates the device such that a device describes logical devices that include users, software, firmware, and/or a combination of devices.

Device <NUM> includes communication devices <NUM> that enable wired and/or wireless communication of device data <NUM> (e.g., received data, data that is being received, data scheduled for broadcast, data packets of the data, etc.). Device data <NUM> or other device content can include configuration settings of the device, media content stored on the device, and/or information associated with a user of the device. Media content stored on device <NUM> can include any type of audio, video, and/or image data. Device <NUM> includes one or more data inputs <NUM> via which any type of data, media content, and/or inputs can be received, such as user-selectable inputs, messages, music, television media content, recorded video content, and any other type of audio, video, and/or image data received from any content and/or data source.

Device <NUM> also includes communication interfaces <NUM>, which can be implemented as any one or more of a serial and/or parallel interface, a wireless interface, any type of network interface, a modem, and as any other type of communication interface. Communication interfaces <NUM> provide a connection and/or communication links between device <NUM> and a communication network by which other electronic, computing, and communication devices communicate data with device <NUM>.

Device <NUM> includes one or more processors <NUM> (e.g., any of microprocessors, controllers, and the like), which process various computer-executable instructions to control the operation of device <NUM> and to enable techniques enabling a multi-application environment. Alternatively or in addition, device <NUM> can be implemented with any one or combination of hardware, firmware, or fixed logic circuitry that is implemented in connection with processing and control circuits which are generally identified at <NUM>. Although not shown, device <NUM> can include a system bus or data transfer system that couples the various components within the device. A system bus can include any one or combination of different bus structures, such as a memory bus or memory controller, a peripheral bus, a universal serial bus, and/or a processor or local bus that utilizes any of a variety of bus architectures.

Device <NUM> also includes computer-readable storage media <NUM>, such as one or more memory devices that enable persistent and/or non-transitory data storage (i.e., in contrast to mere signal transmission), examples of which include random access memory (RAM), non-volatile memory (e.g., any one or more of a read-only memory (ROM), flash memory, EPROM, EEPROM, etc.), and a disk storage device. A disk storage device may be implemented as any type of magnetic or optical storage device, such as a hard disk drive, a recordable and/or rewriteable compact disc (CD), any type of a digital versatile disc (DVD), and the like. Device <NUM> can also include a mass storage media device <NUM>.

Computer-readable storage media <NUM> provides data storage mechanisms to store device data <NUM>, as well as various device applications <NUM> and any other types of information and/or data related to operational aspects of device <NUM>. For example, an operating system <NUM> can be maintained as a computer application with the computer-readable storage media <NUM> and executed on processors <NUM>. Device applications <NUM> may include a device manager, such as any form of a control application, software application, signal-processing and control module, code that is native to a particular device, a hardware abstraction layer for a particular device, and so on.

Claim 1:
A computer-implemented method to adaptively size or position an application window of an application in a windows-based workspace, the method comprising:
receiving (<NUM>) a selection of a quadrant of the windows-based workspace (<NUM>) in which to present the application window (<NUM>) of the application by detecting said application window (<NUM>) of the application being moved or dragged against a corner of the windows-based workspace (<NUM>) within a half-area of the windows-based workspace (<NUM>) associated with the selected quadrant;
determining (<NUM>) a size and position of another application window (<NUM>) in the windows-based workspace (<NUM>), wherein the other application window (<NUM>) occupies the half-area of the windows-based workspace (<NUM>) associated with the selected quadrant;
determining (<NUM>), based on the determined size and position of the other application window (<NUM>), a size and position for the application window (<NUM>) of the application such that the application window (<NUM>) fills the selected quadrant of the half-area of the windows-based workspace (<NUM>);
determining, for the other application window (<NUM>), another size and position such that a horizontal edge of the other application window (<NUM>) aligns with a horizontal edge of the selected quadrant of the half-area of the windows-based workspace (<NUM>); and
presenting (<NUM>) the application window (<NUM>) at the determined size and position such that the application window (<NUM>) is presented in the selected quadrant of the half-area of the windows-based workspace (<NUM>), and presenting (<NUM>) the other application window (<NUM>) at the other determined size and position such that the application window (<NUM>) and other application window (<NUM>) meet at the horizontal edge of the predefined area of the windows-based workspace (<NUM>) and such that the other application window (<NUM>) is presented in the other quadrant of the half-area of the windows-based workspace (<NUM>).