This patch allows for the assignment of RAM to a start node via a new
'ram' attribute as an alternative to traditional '<resource name="RAM">'
nodes. This makes configurations more concise.
It also adds support for defining a configuration-global default RAM
quota, following the existing pattern of the default caps definition,
e.g. the following <default> node alleviates the need to repeatedly
state reasonable 'ram' and 'caps' values in each single start node.
<default caps="100" ram="1M"/>
Fixes#5448
Support dynamic panorama of virtual displays. Virtual monitors for
VirtualBox must be configured in two steps.
- <Display monitorCount="<num>"> nodes in the .vbox file defines the
number of _connectors_ and, thus, the maximum number of connected
virtual monitors.
- Each enabled VirtualBox monitor requests a dedicated GUI session.
Enablement and labeling of these sessions is done via <monitor>
nodes in the component configuration like follows.
<monitor label="DP-1"/>
<monitor label="HDMI-A-1"/>
Labels can be used by the window manager to configure and place the
corresponding window. The order of the nodes directly controls the
connection order at the virtual graphics card.
Fixes#5449
When emitting TOUCH_RELEASE events, we have to make sure that the
release events refer to the corresponding ID of the preceding TOUCH
event(s).
Fixes#5446
When trying to apply dynamic config updates to the VFS, don't rely on
the assumption that one file-system instance exists for each XML node
because a malconfigured file-system route may result in a skipped
file-system construction. Print a diagnostic message instead.
Encountered while working on issue #5445
The commit will improve diagnostics, if a core thread dies
(which should never happen) with an hardware exception beside a page fault,
e.g. general protection fault or undefined opcode.
Without the commit we may not see this circumstance easily.
Issue #5443
In some situations, atexit handlers perform I/O (e.g., closing a file),
which entails the handling of signals. Should SIGTERM be pending, the
handling of this signal will in turn trigger the execution of atexit
handlers. To break this cycle, this patch removes atexit handlers from
the list before executing them. So no atexit handler is entered more
than once.
Fixes#5444
This patch adds the feature of moving and resizing windows by clicking
anywhere within a window while the global window-management key is held.
Depending on the position within the window, the click is interpreted as
click on the title (when clicking at inner 50% of the window, or as a
click on the border (when clicking at an area nearby the window
boundary).
This mode of interaction requires more flexibility of the handling of
key sequences. The formerly hard-wired handling of the drag and drop as
response to BTN_LEFT events does not suffice. Therefore, this patch
moves the driving of the drag-and-drop state to the config level by
introducing the actions "drag" and "drop"
Fixes#5403
This patch moves the formerly hard-wired drag-and-drop handling
to the configuration level by introducing the actions "drag" and "drop".
To aid the robust handling of release events matching their
corresponding press events, the patch refines the policy-matching of the
current combination of keys against the hierarchy of <press> and
<release> nodes. If no policy for a concrete combination exists, a
release event also considers the policy of its matching <press> node.
This way, the regular drag-and-drop rules can be expressed as
<press key="BTN_LEFT" action="drag">
<release key="BTN_LEFT" action="drop"/>
</press>
This also works when releasing BTN_LEFT while pressing additional keys,
for which no policy exists.
With this change, the layouter supports the matching of multiple key
sequences instead of only one, thereby supporting multiple actions at
once and allowing for decoupling different user interactions in the
configuration.
Issue #5403
To accommodate multi-monitor window management, the window-layouter
rules must be extended. By renaming the rules file to a version number
reflecting the date of change (24.12), we prevent the loss of
window-layout state when switching back and forth between different
versions of the window-layouter.
The default rules contain now the definition of three displays
("primary", "secondary", and "ternary") and map 3 screens to each
display.
Issue #5390
The new 'action' attribute values can be used to realize the
keyboard-based assignement of windows to screens. The "pick_up" action
(on a key press) selects the focused window to be held at the current
position until the "place_down" action is issued (by a key release).
While the focused window is held, "screen" actions can be executed
taking the picked up window to the selected screen.
Issue #5390
This patch restricts the focus switching via the keyboard (Super-Tab) to
windows located at visible screens.
Should the currently focused window become invible, switch the focus to the
most recently focused visible window.
Issue #5390
Replace the use of pointers and the copying of XML nodes by the 'with_'
pattern. Use plain struct where appropriate, replace constructors by { }
initialization. Use C++20 function template syntax. Replace accessors by
public constants where possible. Follow 'from_xml' convention. Follow
usual 'Action' interface naming.
Issue #5390
This patch enables the user to interactively change the assignment of
windows to screens. For screens visible side by side in a multi-monitor
setup, one can now move a window from one screen to another by dragging
the window title. When using screens as virtual desktops on one display,
a window can be moved to another screen by switching the screen (by
pressing a key matching a desired screen) while the window is dragged
with the mouse. So the user can drag the window between virtual desktops.
Issue #5390
This patch allows the user to drag windows from one target area (i.e.,
display) to another whereas the resizing of windows is restricted to
the window's original target area. The latter point is important to
ensure that the window's resize handles remain reachable at all times.
Issue #5390
This patch changes the window-layout format to support the rectangular
clipping of windows at screen boundaries. The new <boundary> node defines
the clipping boundary for the windows listed within the node. Boundaries
are expected to be disjoint. In the example below, the "vbox" window is
placed partially outside the screen area of "screen_2".
<window_layout>
<boundary name="screen_1" xpos="0" ypos="0" width="640" height="480">
<window id="1" title="launchpad" xpos="10" ypos="140" width="400" height=">
</boundary>
<boundary name="screen_2" xpos="640" ypos="0" width="800" height="600">
<window id="2" title="vbox" xpos="520" ypos="52" width="800" height="600">
<window id="3" title="terminal" xpos="650" ypos="72" width="500" height="400">
</boundary>
</window_layout>
The layouter uses boundaries to restrict the visiblilty of windows to
their respective target areas.
Until now, Sculpt relied on the fact that the window-layout ROM had the
same structure as the resize-request ROM. With the addition of the
<boundary> nodes, this is no longer the case. Therefore, the Sculpt
manager generates a dedicated resize-request ROM now.
Issue #5390
This commit adds support for SIMD-based alpha blending, which speeds up
the alpha-compositing of the nitpicker GUI server by circa 300% on ARM
Neon and x86_64 using SSE4.1
Issue #5428
Prevent errors like follows.
error: invalid cast from type ‘size_t’ {aka ‘long unsigned int’} to type ‘__u64’ {aka ‘long long unsigned int’}
Issue #5431
Instead of freezing, return corresponding libusb error code if the
USB device got disconnected. Therefore, components using the library
can continue to work otherwise.
Fixgenodelabs/genode#5434
In Child::deliver_session_cap a signal to wakeup a service after
altering its session ROM was missing when the requesting client
that does not longer exist.
Fixgenodelabs/genode#5435