Commit graph

186 commits

Author SHA1 Message Date
Scott Moreau
4272e63991 shell: Eliminate unneeded function.
Replace all occurrences of workspace_damage_all_surfaces() with
weston_compositor_schedule_repaint(). This fixes a bug exposed by
982387011f where trying to switch workspaces while there are no
surfaces on the current workspace fails to start the animation.
2012-08-13 12:57:56 -04:00
Rob Bradford
4cb88c79e0 shell: Avoid modulo by zero error in positioning algorithm
As spotted by Philipp Brüschweiler <blei42@gmail.com>
2012-08-13 11:12:17 -04:00
Rob Bradford
ac63e5bd7e shell: Enhance the basic random positioning algorithm
Place the window in a random position on the output where the first seat with
a pointer is. When calculating the random position limit the range to the
area that would ensure that the whole surface is visible. If the surface is
larger than the output then the surface is placed at the origin of the
output.

This change is based on the good work of Scott Moreau <oreaus@gmail.com>
2012-08-13 10:01:46 -04:00
Kristian Høgsberg
92374e1409 shell: Ignore unsolicited pong requests
If a client sends a pong message out of the blue, we deref ping_timer
which is NULL and then crash.  Unsolicited pong requests indicate that
something is wrong on the client, but the compositor should survide that.
2012-08-13 10:01:46 -04:00
Kristian Høgsberg
f4d2f237f0 shell: Track pointer focus for all seats 2012-08-10 10:05:39 -04:00
Philipp Brüschweiler
711fda86cc shell: move input panels into a designated layer
This makes the separation between panels and input panels clearer and
prevents the (desktop) panel from removing existing input panels on
redraw.

The input panel layer is below the panel layer.
2012-08-09 17:13:14 -04:00
Ander Conselvan de Oliveira
383b671ccf shell: Fix repaint debugging
Since weston_surface_update_transform() was changed so it called
surface_damage_below() instead of surface_damage(), the trick of
clearing the surface damage did not work anymore.

Fix this by moving the repaint surface to a special plane before
calling update_transform. The move is made manually (as opposed to
calling weston_surface_move_to_plane()) to avoid the call to
weston_surface_damage_below(). The transform update causes the
damage to be added to this special plane, which is simply ignored.
After the geometry.dirty bit is clear, the surface is moved back to
the primary plane.
2012-08-09 14:37:01 -04:00
Philipp Brüschweiler
8801357332 shell: don't abuse link_layer for keeping track of input panel surfaces
Input panel surfaces were kept in a list by using layer_link of
weston_surface. This was pretty hacky and resulted in the bug that
an input panel surface was not removed from the list if it was unmapped
at the time of destruction.

This patch wraps the surface in a new input_panel_surface struct and
properly handles destruction with a signal listener.
2012-08-09 10:37:41 -04:00
Kristian Høgsberg
61f00f52fa shell: Make sure the black surface is opaque
So we don't repaint anything below it.
2012-08-03 16:37:01 -04:00
Kristian Høgsberg
79af73e313 compositor-drm: Disable planes when zoomed or capturing
When the entire output is transformed or we're capturing the output
for screenshot or video, disable all output specific overlays
(drm planes, hw cursors etc) and move all surfaces into the primary
plane.
2012-08-03 16:33:42 -04:00
Kristian Høgsberg
bbe983923d shell: Make it possible to move and raise unresponsive surfaces 2012-08-01 00:20:21 -04:00
Kristian Høgsberg
9e31bff831 shell: Move surface move code back to just after the move grab functions
This chunk of code is what uses the move grab and used to come right
after it.  At some point it got split up, but move it back now.
2012-08-01 00:08:07 -04:00
Kristian Høgsberg
64eca8949b compositor: Fold the log prototypes into compositor.h and drop log.h
We're trying to keep the API exposed by the core compositor in compositor.h
2012-08-01 00:00:57 -04:00
Kristian Høgsberg
e377822c64 shell: Give keyboard focus to top surface when current keyboard focus goes away 2012-07-31 22:18:02 -04:00
Kristian Høgsberg
2f5faff7f9 shell: Always track focus state per workspace
It's a little simpler than always creating and destroying it when we
switch workspace, and we'll need the focus_state soon.
2012-07-31 16:36:37 -04:00
Kristian Høgsberg
c94de6450e shell: Remove unused shsurf->focus_state 2012-07-31 10:51:22 -04:00
Kristian Høgsberg
b8e0d0f5ac shell: Use the right destroy listener in focus_state_surface_destroy()
We were dereferencing the seat destroy listener.
2012-07-31 10:30:26 -04:00
Tiago Vignatti
65191d144f shell: Remove unused pointer_end_grab
shell_grab_end already does that for us.

Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
2012-07-20 15:31:52 -04:00
Kristian Høgsberg
a08b528597 shell: Center fullscreen surface whenever new buffer is attached 2012-07-20 15:31:00 -04:00
Kristian Høgsberg
82a1d11cfa shell: Set shell_interface.shell at initialization 2012-07-19 14:02:49 -04:00
Kristian Høgsberg
94de680439 shell: Default to maximize/fullscreen on current output 2012-07-18 15:52:13 -04:00
Ander Conselvan de Oliveira
eac9a46012 shell: Don't ping the grab surface
If the grab surface happens to be unresponsive, the busy cursor grab
will be started and that will cause the grab surface to receive focus,
which in turn leads to it being pingged again. Break the cycle by not
sending pings to it. If the shell is unresponsive it won't be able to
set the busy cursor anyway.
2012-07-16 13:35:25 -04:00
Kristian Høgsberg
240dfeb0fe shell: Scale fullscreen surface without cropping them, center on output 2012-07-12 12:32:31 -04:00
Juan Zhao
4ab9468865 shell: Use the correct the member name when iterating panel_list
It does not get the correct panel height for now.  The memeber of list
to read should be layer_link not link now.

Signed-off-by: Juan Zhao <juan.j.zhao@linux.intel.com>
2012-07-10 08:47:25 -04:00
Kristian Høgsberg
e4d3a2bce6 Only position fullscreen surface in surface->configure callback
We end up calling shell_configure_fullscreen() from activate(), where
surface->buffer may be NULL.  Instead, call it on initial map and
first buffer attach after surface type change.  Both code path
come from the surface->configure callback where surface->buffer is know
to be non-NULL.

https://bugs.freedesktop.org/show_bug.cgi?id=51678
2012-07-09 21:49:10 -04:00
Rob Bradford
31b6862eeb shell: Use desired output when sending configure events when maximised
With shell_surface.set_maximised the caller can provide an output to maximise
to or the default output will be used. With the corresponding configure we
should use the dimensions from the chosen output not the output the surface
was currently on.

Similarly when calculating the position for the window in the map() function
we should use the desired output again.

There is no need to assign shsurf->output to es->output since that happens in
the map() function later.
2012-07-02 15:16:19 -04:00
Ander Conselvan de Oliveira
00d17bb903 shell: Don't move fullscreen surfaces 2012-06-28 14:14:01 -04:00
Ander Conselvan de Oliveira
b9d2a0fc0a shell: Show approprite cursors during move and resize grabs
This patch expands the busy cursor mechanism so that it is possible for
the desktop-shell client to show the appropriate cursor during grabs.
2012-06-28 14:13:57 -04:00
Kristian Høgsberg
73694c832b compositor: Move repaint debug binding to mod-shift-space
Alt-space or Super-space are too likely to conflict with application
bindings.
2012-06-28 14:13:10 -04:00
Kristian Høgsberg
c7cd626bcf compositor: Update xkb state with key releases on focus out
This happens when vt-switching away from the compositor (drm) or
giving keyboard focus to a different X window.  Release the modifiers
so we don't get stuck modifiers.  We'll update with the new keys down
when we come back.
2012-06-28 13:46:09 -04:00
Kristian Høgsberg
8150b190d6 shell: Take a wl_surface as parent for transient and popup windows 2012-06-27 10:24:22 -04:00
Kristian Høgsberg
0636ac307e shell: Make input_panel just a regular wl_surface 2012-06-27 10:24:21 -04:00
Kristian Høgsberg
1a73a6335d shell: Make screensaver just a wl_surface 2012-06-27 10:24:21 -04:00
Kristian Høgsberg
730c94d62e shell: Make the lock surface just a plain wl_surface too 2012-06-27 10:24:21 -04:00
Kristian Høgsberg
af7b1ffaf4 shell: Make panel just a wl_surface too 2012-06-27 10:24:21 -04:00
Kristian Høgsberg
962342cb8e shell: Don't make desktop_shell background a wl_shell_surface
We don't gain anything from taking a wl_shell_surface in
desktop_surface.set_background, except making wl_shell_surface
gratuitously dependent on wl_shell.  In shell.c we can also handle
backgrounds in their own background_configure function which simplifies
the mapping and placement logic.
2012-06-26 16:29:53 -04:00
Kristian Høgsberg
ce345b0f60 shell: Fix inverted test for locked in workspace bindings 2012-06-25 21:35:42 -04:00
Kristian Høgsberg
4476aaff24 shell: Hide workspace layer when locking screen 2012-06-25 14:03:13 -04:00
Kristian Høgsberg
1ce6a2a2b3 shell: Animate input panel mapping
We slide it in from below.
2012-06-21 22:34:39 -04:00
Kristian Høgsberg
414bd420fd util: Generalize surface animation code
Too much duplicated code here, and we're about to introduce another
animation.
2012-06-21 22:07:30 -04:00
Kristian Høgsberg
85b2e4b6bf shell: Don't focus to background, screensaver or input_panel surfaces 2012-06-21 16:49:42 -04:00
Kristian Høgsberg
a4a4de487e shell: Don't allow move/resize/rotate for input panel surfaces 2012-06-21 16:46:14 -04:00
Jan Arne Petersen
42feced8de shell: Add support for input panels 2012-06-21 16:41:06 -04:00
Kristian Høgsberg
d813445f16 shell: Just use surface->private for shell_surface 2012-06-21 12:49:02 -04:00
Kristian Høgsberg
6c6fb993f7 shell: Schedule repaint when moving a surface
It seems we used to rely on the repaint scheduled by the cursor motion.
But if there's no cursor, there's no cursor motion, so we need to schedule
our own repaint.
2012-06-21 12:32:23 -04:00
Kristian Høgsberg
b0d8e779df switcher: Don't use compositor->surface_list
compositor->surface_list is only valid during weston_output_repaint() so
don't use it in the switcher code.
2012-06-18 16:34:58 -04:00
Scott Moreau
8dacaaba1b Animate transitions for zoom focus point change.
Handle the transition when focus changes from text cursor to
mouse pointer or vice versa.
2012-06-18 11:07:03 -04:00
Kristian Høgsberg
7b5029f8d4 shell: Don't override the sprite surface output
This was a hack to force the sprite surface to have an output.  Not needed
not that the sprite surface is a regular client provided surface.
2012-06-15 16:31:27 -04:00
Jonas Ådahl
04769744e1 shell: Store focus state in workspaces
When moving moving back to a workspace or resuming a locked desktop the
keyboard focus state information was lost. By pushing the state to the
workspace when navigating away from a workspace, or locking a desktop,
we can restore it when navigating back, or resuming.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2012-06-12 20:20:38 -04:00
Jonas Ådahl
62fcd0417e shell: Animate workspace changes
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2012-06-12 20:20:30 -04:00