| /* |
| * Copyright © 2010-2012 Intel Corporation |
| * Copyright © 2011-2012 Collabora, Ltd. |
| * Copyright © 2013 Raspberry Pi Foundation |
| * |
| * Permission to use, copy, modify, distribute, and sell this software and |
| * its documentation for any purpose is hereby granted without fee, provided |
| * that the above copyright notice appear in all copies and that both that |
| * copyright notice and this permission notice appear in supporting |
| * documentation, and that the name of the copyright holders not be used in |
| * advertising or publicity pertaining to distribution of the software |
| * without specific, written prior permission. The copyright holders make |
| * no representations about the suitability of this software for any |
| * purpose. It is provided "as is" without express or implied warranty. |
| * |
| * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS |
| * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND |
| * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY |
| * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER |
| * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF |
| * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN |
| * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| */ |
| |
| #include <stdbool.h> |
| |
| #include "compositor.h" |
| |
| enum animation_type { |
| ANIMATION_NONE, |
| |
| ANIMATION_ZOOM, |
| ANIMATION_FADE, |
| ANIMATION_DIM_LAYER, |
| }; |
| |
| enum fade_type { |
| FADE_IN, |
| FADE_OUT |
| }; |
| |
| enum exposay_target_state { |
| EXPOSAY_TARGET_OVERVIEW, /* show all windows */ |
| EXPOSAY_TARGET_CANCEL, /* return to normal, same focus */ |
| EXPOSAY_TARGET_SWITCH, /* return to normal, switch focus */ |
| }; |
| |
| enum exposay_layout_state { |
| EXPOSAY_LAYOUT_INACTIVE = 0, /* normal desktop */ |
| EXPOSAY_LAYOUT_ANIMATE_TO_INACTIVE, /* in transition to normal */ |
| EXPOSAY_LAYOUT_OVERVIEW, /* show all windows */ |
| EXPOSAY_LAYOUT_ANIMATE_TO_OVERVIEW, /* in transition to all windows */ |
| }; |
| |
| struct focus_surface { |
| struct weston_surface *surface; |
| struct weston_view *view; |
| struct weston_transform workspace_transform; |
| }; |
| |
| struct workspace { |
| struct weston_layer layer; |
| |
| struct wl_list focus_list; |
| struct wl_listener seat_destroyed_listener; |
| |
| struct focus_surface *fsurf_front; |
| struct focus_surface *fsurf_back; |
| struct weston_view_animation *focus_animation; |
| }; |
| |
| struct desktop_shell { |
| struct weston_compositor *compositor; |
| |
| struct wl_listener idle_listener; |
| struct wl_listener wake_listener; |
| struct wl_listener destroy_listener; |
| struct wl_listener show_input_panel_listener; |
| struct wl_listener hide_input_panel_listener; |
| struct wl_listener update_input_panel_listener; |
| |
| struct weston_layer fullscreen_layer; |
| struct weston_layer panel_layer; |
| struct weston_layer background_layer; |
| struct weston_layer lock_layer; |
| struct weston_layer input_panel_layer; |
| |
| struct wl_listener pointer_focus_listener; |
| struct weston_surface *grab_surface; |
| |
| struct { |
| struct weston_process process; |
| struct wl_client *client; |
| struct wl_resource *desktop_shell; |
| struct wl_listener client_destroy_listener; |
| |
| unsigned deathcount; |
| uint32_t deathstamp; |
| } child; |
| |
| bool locked; |
| bool showing_input_panels; |
| bool prepare_event_sent; |
| |
| struct { |
| struct weston_surface *surface; |
| pixman_box32_t cursor_rectangle; |
| } text_input; |
| |
| struct weston_surface *lock_surface; |
| struct wl_listener lock_surface_listener; |
| |
| struct { |
| struct wl_array array; |
| unsigned int current; |
| unsigned int num; |
| |
| struct wl_list client_list; |
| |
| struct weston_animation animation; |
| struct wl_list anim_sticky_list; |
| int anim_dir; |
| uint32_t anim_timestamp; |
| double anim_current; |
| struct workspace *anim_from; |
| struct workspace *anim_to; |
| } workspaces; |
| |
| struct { |
| char *path; |
| int duration; |
| struct wl_resource *binding; |
| struct weston_process process; |
| struct wl_event_source *timer; |
| } screensaver; |
| |
| struct { |
| struct wl_resource *binding; |
| struct wl_list surfaces; |
| } input_panel; |
| |
| struct { |
| struct weston_view *view; |
| struct weston_view_animation *animation; |
| enum fade_type type; |
| struct wl_event_source *startup_timer; |
| } fade; |
| |
| struct exposay { |
| /* XXX: Make these exposay_surfaces. */ |
| struct weston_view *focus_prev; |
| struct weston_view *focus_current; |
| struct weston_view *clicked; |
| struct workspace *workspace; |
| struct weston_seat *seat; |
| struct wl_list surface_list; |
| |
| struct weston_keyboard_grab grab_kbd; |
| struct weston_pointer_grab grab_ptr; |
| |
| enum exposay_target_state state_target; |
| enum exposay_layout_state state_cur; |
| int in_flight; /* number of animations still running */ |
| |
| int num_surfaces; |
| int grid_size; |
| int surface_size; |
| |
| int hpadding_outer; |
| int vpadding_outer; |
| int padding_inner; |
| |
| int row_current; |
| int column_current; |
| |
| bool mod_pressed; |
| bool mod_invalid; |
| } exposay; |
| |
| uint32_t binding_modifier; |
| uint32_t exposay_modifier; |
| enum animation_type win_animation_type; |
| enum animation_type startup_animation_type; |
| enum animation_type focus_animation_type; |
| |
| struct wl_listener output_create_listener; |
| struct wl_listener output_move_listener; |
| struct wl_list output_list; |
| |
| char *client; |
| }; |
| |
| void |
| set_alpha_if_fullscreen(struct shell_surface *shsurf); |
| |
| struct weston_output * |
| get_default_output(struct weston_compositor *compositor); |
| |
| struct weston_view * |
| get_default_view(struct weston_surface *surface); |
| |
| struct shell_surface * |
| get_shell_surface(struct weston_surface *surface); |
| |
| struct workspace * |
| get_current_workspace(struct desktop_shell *shell); |
| |
| void |
| lower_fullscreen_layer(struct desktop_shell *shell); |
| |
| void |
| activate(struct desktop_shell *shell, struct weston_surface *es, |
| struct weston_seat *seat); |
| |
| void |
| exposay_binding(struct weston_seat *seat, |
| enum weston_keyboard_modifier modifier, |
| void *data); |
| int |
| input_panel_setup(struct desktop_shell *shell); |
| void |
| input_panel_destroy(struct desktop_shell *shell); |