Commit Graph

44 Commits

Author SHA1 Message Date
Mike Blumenkrantz def17d763b +e_comp_util_object_is_above_nocomp() 2014-02-26 11:46:32 -05:00
Mike Blumenkrantz a52ede0c66 track current nocomp client 2014-02-26 11:46:31 -05:00
Mike Blumenkrantz aad88716a4 fix compositor grab tracking
it's possible to have multiple/recursive grabs, so the number of grabs active needs to be tracked

T820
2014-01-22 22:14:33 -05:00
Mike Blumenkrantz 390b8a5bf5 feature: selective redirection toggling
this toggles redirection on compatible (X) clients while still mostly preserving window frame functionality
2014-01-14 20:29:00 -05:00
Mike Blumenkrantz ed4c98f9f5 feature: e_comp_shape_queue_block for blocking shape changes
in some cases, it may be desirable to block shape cutting for an amount of time to reduce cpu calculations. this should be set when performing any non-interactive compositor effects
2014-01-14 20:28:59 -05:00
Mike Blumenkrantz 12d7405a0f huge wl fixup (wayland clients actually working again)
* try to clear up build system for separating out ecore-x

* add #ifdefs for lots of ecore-x stuff

* break out some internal e wl functions for reuse in api

* store wl surface buffers as an inlist

* add protocol-specific client compositor data

** move lots of X client attributes here

* add pixmap type checks to a number of X-specific things, such as grabinput, to block them for non-X clients

* rearrange startup order to work with wayland

* move X screensaver code to e_comp_x

* flag modules still requiring X with -DNEED_X
2014-01-14 20:28:57 -05:00
Mike Blumenkrantz c2be19c093 feature: comp config is no longer a module
given that compositing is always enabled and that it's crucial to be able to change these settings, potentially having them unavailable is not a great way to live
2014-01-14 20:28:57 -05:00
Mike Blumenkrantz 86656e4df9 compositor rewrite / charlie-foxtrot situation
huge fustercluck commit because there wasn't really a way to separate out the changes. better to just rip it all out at once.

* compositor and window management completely rewritten. this was the goal for E19, but it pretty much required everything existing to be scrapped since it wasn't optimized, streamlined, or sensible. now instead of having the compositor strapped to the window manager like an outboard motor, it's housed more like an automobile engine.

** various comp structs have been merged into other places (eg. E_Comp_Zone is now just part of E_Zone where applicable), leading to a large deduplication of attributes

** awful E_Comp_Win is totally dead, having been replaced with e_comp_object smart objects which work just like normal canvas objects

** protocol-specific window management and compositor functionality is now kept exclusively in backend files

** e_pixmap api provides generic client finding and rendering api

** screen/xinerama screens are now provided directly by compositor on startup and re-set on change

** e_comp_render_update finally replaced with eina_tiler

** wayland compositor no longer creates X windows

** compositor e_layout removed entirely

* e_container is gone. this was made unnecessary in E18, but I kept it to avoid having too much code churn in one release. its sole purpose was to catch some events and handle window stacking, both of which are now just done by the compositor infra

* e_manager is just for screensaver and keybind stuff now, possibly remove later?

* e_border is gone along with a lot of its api. e_client has replaced it, and e_client has been rewritten completely; some parts may be similar, but the design now relies upon having a functional compositor

** window configuration/focus functions are all removed. all windows are now managed solely with evas_object_X functions on the "frame" member of a client, just as any other canvas object can be managed.

*** do NOT set interceptors on a client's comp_object. seriously.

* startup order rewritten: compositor now starts much earlier, other things just use attrs and members of the compositor

* ecore_x_pointer_xy_get usage replaced with ecore_evas_pointer_xy_get

* e_popup is totally gone, existing usage replaced by e_comp_object_util_add where applicable, otherwise just placed normally on the canvas

* deskmirror is (more) broken for now

* illume is totally fucked

* Ecore_X_Window replaced with Ecore_Window in most cases

* edge binding XWindows replaced with regular canvas objects

* some E_Win functionality has changed such that delete callbacks are now correctly called in ALL cases. various dialogs have been updated to not crash as a result

comp files and descriptions:

e_comp.c - overall compositor functions, rendering/update loop, shape cutting

e_comp_x.c - X window management and compositor functionality

e_comp_wl.c - Wayland surface management and compositor functionality

e_comp_canvas.c - general compositor canvas functions and utilities

e_comp_object.c - E_Client->frame member for managing clients as Evas_Objects, utility functions for adding objects to the compositor rendering systems

additional authors: ivan.briano@intel.com

feature: new compositor

removal: e_border, e_container, e_popup
2014-01-14 20:22:02 -05:00
Carsten Haitzler 835a3dfac6 comp - remove sync support in comp - it should be off by default anyway.
this was never a great idea, and it has too many buglets in corner
cases (eg window resizing) so remove it. simpler is better.
2013-12-09 20:43:35 +09:00
Mike Blumenkrantz e4e6b0d0fd force comp reshape after desklock hide
should fix T440
2013-11-27 10:38:21 -05:00
Mike Blumenkrantz 36d45c65ef add e_comp_win_effect_clip for manually applying clip to comp wins 2013-05-30 09:39:30 +01:00
Mike Blumenkrantz 738e8d5d4a set pass events on effect_obj for comp wins instead of shobj; fixes dnd window finding algorithm 2013-05-23 10:45:25 +01:00
Mike Blumenkrantz 89664c894e layout/comp "top at xy" functions now allow restricting based on visibility
fixes desktop gadget dnd
2013-05-21 13:52:11 +01:00
Mike Blumenkrantz c8d615f155 comp shape updates:
* move all shape rectangle stuff into e_container_shape

* use input rects for cutting comp shape when available

* set shape changed and render queue when container shape change callbacks are called

* create fewer comp wins (small memory improvement)
2013-05-21 11:21:05 +01:00
Carsten Haitzler 59c4e0f81b fix race condtion in comp caused by delayed job doing the populate.
by making a job to delay population we play a race condition game with
initting of other bits of e. this means the comp may or may not have
been filled by the container layer winds before other internal events
and actions start making comp wins and setting layers. this means that
things like e_comp_win_find() for a con->layers[n].win may fail... as
this has yet to be added... and thus.. we crash in startup. it's a
race condition.

so this removed the delay job and makes population of the comp
explicit. it puts the population into the hnds of the e_main init
after a manager has been created and after a container is created, and
thus laer wins created, so it can walk the x window stack correctly,
but before anything else is done. this means that we will be properly
inited at this point without a race condition.
2013-04-26 16:31:29 +09:00
Mike Blumenkrantz b04d2dfc4b add e_comp_win_effect_unclip() to unclip an effect object after a transition 2013-04-22 13:58:01 +01:00
Mike Blumenkrantz f5965d533c add new event for comp win stacking 2013-04-19 13:49:34 +01:00
Mike Blumenkrantz dde99c089a flag comp win geometry updates and call only as necessary 2013-04-16 15:05:11 +01:00
Mike Blumenkrantz ed7b29d50f all comp wins now have zoomaps, zooming effect lovers rejoice 2013-04-16 13:51:50 +01:00
Mike Blumenkrantz 718dfef61d giant comp rejiggering commit #6:
* border->fx REMOVED, related border api REMOVED

* comp edc has new class of groups: e/comp/effects[/auto]
** these are effects which can be applied to any compositor object through the e_comp_win_effect* api and are written in embryo
*** two types - base and auto - base = manual, for use with animators; auto are "trigger and forget", for use as actual effects

* desk flip transition animations moved to comp effects and FIXED(ish)

* "zoom" effect renamed to "diagonal" for slightly less misleading name since it never did any zooming

* actual "zoom" effect added

* border hierarchy now as follows: cw->effect_obj swallows cw->shobj, cw->shobj swallows cw->bd->bg_object ?: cw->obj, if (cw->bd->bg_object) cw->bd->bg_object swallows cw->obj
** cw->effect_obj now used for all positioning and comp logic
** cw->effect_obj ONLY used for object transformation effects (moving, zooming, fading, etc)
** cw->shobj ONLY for comp visual/non-movement effects (focus effect, unfocus opacity, legacy shadows); this is a candidate for removal/rewrite in E19

* even more comp shape rewrites

* desk flip animation time now controlled by theme since edje doesn't support setting transition time in C; related config value removed

* desk flip transitions (in e_desk.c) rewritten

* various modules (evry/illume2) updated to use comp effects instead of fx offset

* desk flip configuration BROKEN(ish)
2013-04-15 08:39:16 +01:00
Mike Blumenkrantz 505cec1d91 giant comp rejiggering commit #5:
* border frame/object now drawn directly on compositor canvas

* border shadows now in border theme with edje hint, non-updated themes still receive comp object shadows FOR NOW

* e_border MOVE/RESIZE pointer mode defines are now e_pointer.h enums

* added BD_CHANGED() util macro for setting bd->changed and printing a debug line to assist in finding places where this all-important flag is wrongly set

* bd->bg_win removed entirely

* bd->pointer objects moved to compositor object; now only one pointer object exists for each compositor

* resizing windows now shows a new and totally-intended scaling effect for window contents

* some additional retooling of border deletion/free callbacks

* fixed lurking potential bug where window could recieve focus from autoraise timer after border had been deleted

* more comp shape improvements/rewrites

* desk transitions are now BROKEN(ish)

* various modules updated to not be totally broken with these changes
2013-04-15 08:39:16 +01:00
discomfitor 0dd92f98f3 add menu canvas layer 2013-03-11 05:20:27 +00:00
Mike Blumenkrantz 1f34e88860 fix comp injected object stacking
previously this was done in such a way that if the "owner" stacking object of an injected object was restacked, the injected object would remain at its original stacking level since it was not tethered to anything and did not have X managing stacking. now comp will anchor injected objects to the stacking container window and adjust stacking as needed for them

fixes shelf stacking in some cases
2013-02-26 08:39:10 +00:00
Mike Blumenkrantz 159373a340 add comp util functions for returning the layer and effective layer of a comp object 2013-02-22 13:18:30 +00:00
Mike Blumenkrantz 12ffdeb622 e's compositor now obeys _NET_WM_WINDOW_OPACITY as a normal atom in e_border
additionally:

* actions are now available for setting/changing window opacity

* window remembers can now remember window opacity

SVN revision: 84303
2013-02-22 09:33:13 +00:00
Mike Blumenkrantz 5db6e8a56f s/e_comp_win_find_border_win/e_comp_win_find_client_win/
the former could be bd->win, while the latter can only be bd->client.win

SVN revision: 84301
2013-02-22 09:33:06 +00:00
Mike Blumenkrantz 2981c653a8 store e objects in comp win, delay deletion of e object comp wins until after animation
SVN revision: 84098
2013-02-19 09:54:57 +00:00
Mike Blumenkrantz 8b28b2f2f1 revert previous few commits related to e_menu, not meant to go in yet
SVN revision: 84083
2013-02-19 08:22:46 +00:00
Mike Blumenkrantz 0599f9d371 add menu canvas layer
SVN revision: 84076
2013-02-19 08:08:58 +00:00
Mike Blumenkrantz 6703cb2bf3 nocomp mode now dynamically enables/disables based on the state and stacking of fullscreen windows and comp objects
SVN revision: 84062
2013-02-18 13:43:55 +00:00
Mike Blumenkrantz f36ecd9d3d giant comp rejiggering commit #2: popups are now objects drawn directly onto the compositor canvas with no xwindows of their own
* added a number of new e_comp functions and macros

* options for disabling effects on objects: this option does not currently have any effect

* all modules which used gadcon popups have been adjusted

* all modules which used input windows to detect close events for gadcon popups have been adjusted to use new popup autoclose functionality

* shelves are now always drawn on the compositor canvas, meaning objects will never get clipped by the shelf (ticket #1810)

* shelves no longer have an event object

SVN revision: 84060
2013-02-18 13:43:47 +00:00
Mike Blumenkrantz 04330ef7d9 add comp functions for injecting objects into the comp layout
SVN revision: 84054
2013-02-18 13:43:22 +00:00
Mike Blumenkrantz 89d422a4de rename E_COMP_CANVAS_LAYER_ABOVE -> POPUP
SVN revision: 84053
2013-02-18 13:43:18 +00:00
Mike Blumenkrantz 41b95796a4 add desklock layer to layer enum
SVN revision: 84051
2013-02-18 13:43:10 +00:00
Mike Blumenkrantz aa6a2d173d giant comp rejiggering commit because anything smaller would have broken something:
* remove xwin for container canvas: now drawn directly on the compositor canvas

* added SHAPE_DEBUG define for bored developers

* bindings now use new e struct for mouse/wheel events

* container+zone now get mouse events from smart callbacks instead of x events

* rename comp api namespace

* change comp underlay theme to have a swallow for the wallpaper

* add names to all zone/container/comp objects to make debugging much easier

* some minor related updates to go along with this

SVN revision: 83752
2013-02-07 13:20:07 +00:00
Mike Blumenkrantz 321f2b4fa3 comp structs now public, remove comp struct accessor functions, add comp utility functions to simplify getting comp from an e_object
SVN revision: 83745
2013-02-07 13:19:47 +00:00
Mike Blumenkrantz 7f35677bc0 e_manager_new now creates compositors for new managers instead of creating them all at once
SVN revision: 83743
2013-02-07 13:19:36 +00:00
Mike Blumenkrantz 8fcf2cbcca remove old e_msg-based comp api as well as e_manager_comp api, replacing both with e_comp functions and events
this completely breaks anything external which used comp, so module api version has been bumped


SVN revision: 82973
2013-01-18 12:47:14 +00:00
Mike Blumenkrantz e75bc273b2 e_comp.h now includes other comp headers, explicitly including comp headers is not necessary
SVN revision: 82972
2013-01-18 11:22:05 +00:00
Mike Blumenkrantz e34ba7b645 change comp engine values to enum
SVN revision: 82717
2013-01-13 11:55:16 +00:00
Mike Blumenkrantz e0b0c10914 rename e_comp_shadow_set to e_comp_shadows_reset to be more descriptive about what it does
SVN revision: 82570
2013-01-10 14:05:08 +00:00
Mike Blumenkrantz 3394a2b461 fix comp config dialog settings apply (:/), fix comp config saving (:/), fix comp config dialog config loading (:/), change comp config domain to "e_comp" (your settings will be lost if you do not manually rename)
SVN revision: 82563
2013-01-10 13:03:36 +00:00
Mike Blumenkrantz 9c92b1b73c fix e_comp_shutdown return type and make e_comp_{init,shutdown} EINTERN so they can't be disabled
SVN revision: 82518
2013-01-10 07:53:20 +00:00
Lucas De Marchi 8cacf8429d e: merge comp module into core
* Move compositor to core, but letting the configuration there
 * Rename all files and functions from e_mod_comp_* to e_comp_*
 * Move the config dialogs to a new module named conf_comp. It still
   uses a domain config, otherwise it would not pick the current
   user's configuration. Maybe it would be wise to later on move these
   options to e_config
 * Fixup the wizard mess linking the header in the build tree in order
   to be able to create the config. Since now it's in core, we don't
   need to play linking games in the build system

I'm not sure if the wayland part works. It was not even building
previously so I'll let for who cares about this to actually test and
report bugs.



SVN revision: 82454
2013-01-09 11:34:07 +00:00