Compare commits

...

51 Commits

Author SHA1 Message Date
Iván Briano e31e5917ef Let's not try to lock twice
Causes funky things like black rectangles over the lockscreen and
somewhoe kills focus of popups after unlocking.
2013-12-27 16:12:11 -02:00
Mike Blumenkrantz d620f743f5 remove e-specific theme config members 2013-12-23 18:36:34 -05:00
discomfitor a9bfd0ef30 feature: add PIN-style desklock for lokker module
accessible from the normal screen lock dialog
2013-12-23 18:36:34 -05:00
Mike Blumenkrantz 368b60a657 feature: make desklock hookable, break out current desklock into module, move pam stuff to separate file
after this commit, the new module "lokker" (or other loaded module) is in charge of creating all graphics for the lock screen, and it will be added to the user's config. failure to load a lockscreen module will just result in a black screen

desklock subsystem now handles all the pre/post lock stuff while the modules themselves are responsible for creating visuals and calling auth functions to determine whether to unlock the screen
2013-12-23 18:36:34 -05:00
discomfitor c0d681462d feature: revive personal desklock passwords
these were previously disabled because hashing a password was too much work (I guess?), but now they're back. config dialog has changed accordingly
2013-12-23 18:36:34 -05:00
discomfitor 4c34a71120 nosquash: add blocker rects for desklock
add a black rect to cover the screen during desklock
2013-12-23 18:36:34 -05:00
discomfitor 2c64b4bf95 nosquash: break out desklock into display server-able hooks
if we're running in a non-X environment, we can't very well expect that using X calls to hide/show windows for desklock is going to work as expected. now a compositor backend can add a pre or post desklock hook to hide/show its clients as necessary
2013-12-23 18:36:34 -05:00
discomfitor 93e613b9b2 nosquash: fix fileman stealing focus
desktop fileman should only receive focus if there is no client currently visible on the active desktop
2013-12-23 18:36:34 -05:00
discomfitor 157e3908e9 feature: function for getting top visible client on current desk
this is a pretty useful function overall, and I found that I was duplicating its functionality in a number of places, so I broke it out
2013-12-23 18:36:34 -05:00
discomfitor 48e2f15ae7 not sure if keep... add retries for failure x clients
if a client's X attributes fail to be fetched on the first attempt, it's possible that we might succeed on a second attempt, which would prevent us from losing a client
2013-12-23 18:36:34 -05:00
Mike Blumenkrantz aaef7869b5 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
2013-12-23 18:36:34 -05:00
Mike Blumenkrantz 279a03d4b7 feature: break out e_moveresize_client_extents for calculating client step sizes
if using an external moveresize implementation, this function is very handy
2013-12-23 18:36:34 -05:00
discomfitor 5595587c56 feature: add layer_block client flag to bypass any layer/stacking checks and "just do it" for cool effects
this flag allows a client's layer to be changed instantly with no protocol-level checks or work, allowing compositor effects to do their work more easily
2013-12-23 18:36:34 -05:00
discomfitor 156e6890dd feature: allow moveresize visuals to be replaced
the existing moveresize popup infrastructure is very limiting in that it requires you to create a popup. if you don't want to create a popup, now you don't have to.
2013-12-23 18:36:34 -05:00
Mike Blumenkrantz 3f7b6c1286 feature: allow desk flip animations to be handled completely externally
by exposing desk flip as a hookable api, it becomes easy to write custom flip effects such as in the external "desksanity" module
2013-12-23 18:36:34 -05:00
Mike Blumenkrantz cb8bc59900 move deskmirror test over a little 2013-12-23 18:36:34 -05:00
Mike Blumenkrantz d2ded6cbf9 feature: E16-style live pager returns! window-only drags currently a little broken
p16 is a pager replacement module which uses deskmirror to show you live views of each desktop. it has a separate theme and reuses a lot of pager code.

not sure if original pager should be kept, but it's still around for now.

pager and pager16 both provide the same gadget and cannot be loaded simultaneously
2013-12-23 18:36:34 -05:00
Mike Blumenkrantz c6578fa569 nosquash: don't recalc a gadcon on unpack if we're stopping, also don't recalc gadcons during stop when unpopulating
this caused a lot of slowdown, and even possible crashes, during restarts
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 6029ebb85f add E_Win_Cb typedef
this is mostly cosmetic, but I thought it might be a little more descriptive?
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 198e5ea72b nosquash: deskmirror is now a fully-functional E api
* finish updating for E19 api

* fix visibility changing on sources

** use that shelf data item added in previous commit to detect shelf visibility

* fix sizing (but not scaling :() and positioning of sources

* also fix stacking
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 37b11d932d check for efreet desktop if EITHER icccm name/class is set
allows wayland clients, which only set class here, to find their desktop
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz b2969cb880 add e_exec instances for wl clients if they set surface class: works for terminology
creating phony e_exec instances based on name/class allows wayland clients to show up normally in ibar
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 099b250275 don't delete pointers when changing settings, just update size
this fixes a case where cursors would be permanently broken (along with the world) when changing cursor settings
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 2ec808f9d8 wl pointers done
pointers in E now come in two flavors, one for each protocol that we currently support. each is created from the owner compositor backend:

X pointers still work as usual

Wayland pointers are actually surfaces that we dump image data into periodically to render them as evas images

some small amounts of hack is necessary to make this work, namely blocking X pointers when a Wayland one is in use if we're running a multi-protocol compositor
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz b3bd012cec feature: add wl_fb output module
adds a probably-working wayland framebuffer output module

Additional authors:
Chris Michael <cp.michael@samsung.com>

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 8e5e2fc2ef feature: add E_WL_FORCE environment variable to force loading of an output module during init
variable takes the name of the output module s/wl_// ; example: E_WL_FORCE=x11

this module allows easy loading of a wayland output module to override any detection which may occur by force-loading the module during startup

in a later commit, an actual output detection mechanism needs to be added to run through all the possible output modes
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 87b16dad61 feature: add wl_x11 output module
this is the first of the wayland output modules, and it is extremely simple as a result of the compositor rewrite. for any other wayland output modules, it should be enough to simply create an ecore_evas canvas and do startup in this way.
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz f714dbf7e4 nosquash: 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
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 8c97314cd2 nosquash: remove a bunch of unnecessary ecore-x calls from modules 2013-12-23 18:36:33 -05:00
Mike Blumenkrantz fbfcb526ad nosquash: remove black_ecore_evas
this was used in illume, which is now dead.
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 9f2c63a6bf nosquash: make backlight wayland-friendly 2013-12-23 18:36:33 -05:00
Mike Blumenkrantz e7108dd1df nosquash: make e_hints more wayland-friendly 2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 625d2706d4 remove awful LAYOUT client hook 2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 7cb9f39c5b nosquash: disable illume building, blacklist illume modules
illume 100% requires X, thus illume is dead. replacements are semi-underway.
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 52d27d9ecd nosquash: move e_util_icon_save to e_desktop_editor for better waylanding 2013-12-23 18:36:33 -05:00
Mike Blumenkrantz af0464a8c6 feature: add E_THEME_OVERRIDE to specify an edje file to use as the override for the default theme
similar to E_MODULE_SRC_PATH, this allows editing a theme without contaminating the current system
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 8c218fd28e 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 be
2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 711bc1b2a5 ignore evry clipboard win 2013-12-23 18:36:33 -05:00
Mike Blumenkrantz 6999e7a0df set name/class on comp selection win, ignore comp selection win 2013-12-23 18:36:32 -05:00
Mike Blumenkrantz bf0aee21f3 set name/class on evry clipboard 2013-12-23 18:36:32 -05:00
Mike Blumenkrantz 7d3ab68335 use input window for evry clipboard 2013-12-23 18:36:32 -05:00
Mike Blumenkrantz 95522343df feature: E_FIRST_FRAME env variable
requested by cedric for profiling, works just like similar elm variable
2013-12-23 18:36:32 -05:00
Mike Blumenkrantz 29d792094f feature: add source-able script to set some helpful vars for running e19 directly from the git directory without installing anything 2013-12-23 18:36:32 -05:00
Mike Blumenkrantz d32e08064a nosquash: set shelf data on shelf comp object
probably good practice to set object data to comp objects? anyway, this makes it easier to use with deskmirror
2013-12-23 18:36:32 -05:00
Mike Blumenkrantz af9486c4c2 update config for v14 2013-12-23 18:36:32 -05:00
Mike Blumenkrantz f90e76db81 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

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
2013-12-23 18:36:32 -05:00
Mike Blumenkrantz 62a847e86f print E_IPC_SOCKET value during startup 2013-12-23 18:36:32 -05:00
Mike Blumenkrantz b49aac025e feature: add E_MODULE_SRC_PATH for setting current module src path without needing to install modules
this is a useful feature when working on and debugging modules so that contamination of the running system can be avoided
2013-12-23 18:36:32 -05:00
Mike Blumenkrantz b997165ce9 feature: use non-recursive makefiles for entire build system
this is the correct way to write a build system. one toplevel Makefile.am with the rest of the directories having include Makefile.mk files.

additional authors:

Iván Briano <ivan.briano@intel.com>
2013-12-23 18:36:32 -05:00
Mike Blumenkrantz 529d1eb68d update standard config for v12 2013-12-23 18:36:31 -05:00
Mike Blumenkrantz db8e211134 fix weird pulse crash when sink name is NULL (wtf?) 2013-12-23 18:36:31 -05:00
548 changed files with 38192 additions and 36160 deletions

View File

@ -1,6 +1,7 @@
SUBDIRS = src data doc config
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
AUTOMAKE_OPTIONS = subdir-objects
SUBDIRS = .
if HAVE_PO
@ -8,6 +9,11 @@ SUBDIRS += po
endif
CLEANFILES =
DISTCLEANFILES =
INSTALL_DATA_HOOKS =
PHONIES =
MAINTAINERCLEANFILES = \
ABOUT-NLS* \
Makefile.in \
@ -25,52 +31,45 @@ ltmain.sh \
missing \
$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.gz \
$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.bz2 \
$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)-doc.tar.bz2 \
m4/libtool.m4 \
m4/lt~obsolete.m4 \
m4/ltoptions.m4 \
m4/ltsugar.m4 \
m4/ltversion.m4 \
m4/codeset.m4 \
m4/gettext.m4 \
m4/glibc21.m4 \
m4/iconv.m4 \
m4/intdiv0.m4 \
m4/inttypes_h.m4 \
m4/inttypes.m4 \
m4/inttypes-pri.m4 \
m4/isc-posix.m4 \
m4/lcmessage.m4 \
m4/lib-ld.m4 \
m4/lib-link.m4 \
m4/lib-prefix.m4 \
m4/nls.m4 \
m4/po.m4 \
m4/progtest.m4 \
m4/stdint_h.m4 \
m4/uintmax_t.m4 \
m4/ulonglong.m4
$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)-doc.tar.bz2
EXTRA_DIST = \
config.rpath \
README \
AUTHORS \
COPYING \
enlightenment.spec.in \
enlightenment.spec \
enlightenment.pc \
pkgbuild/PKGBUILD \
pkgbuild/enlightenment.install
EDJE_CC = $(EDJE_CC_$(V))
EDJE_CC_ = $(EDJE_CC_$(AM_DEFAULT_VERBOSITY))
EDJE_CC_0 = @echo " EDJE_CC " $@; @edje_cc@
EDJE_CC_1 = @edje_cc@
EDJE_FLAGS_VERBOSE_ = $(EDJE_FLAGS_VERBOSE_$(AM_DEFAULT_VERBOSITY))
EDJE_FLAGS_VERBOSE_0 =
EDJE_FLAGS_VERBOSE_1 = -v
EDJE_FLAGS = $(EDJE_FLAGS_VERBOSE_$(V)) \
@EDJE_DEF@
include m4/Makefile.mk
if HAVE_PO
MAINTAINERCLEANFILES += \
po/boldquot.sed \
po/en@boldquot.header \
po/en@quot.header \
po/insert-header.sin \
po/Makefile.in.in \
po/Makevars.template \
po/quot.sed \
po/remove-potcdate.sin \
po/Rules-quot
include po/Makefile.mk
endif
DISTCHECK_CONFIGURE_FLAGS = --disable-systemd
EXTRA_DIST = config.rpath README AUTHORS COPYING \
enlightenment.spec.in enlightenment.spec enlightenment.pc \
pkgbuild/PKGBUILD pkgbuild/enlightenment.install
include config/Makefile.mk
include data/Makefile.mk
include src/Makefile.mk
filesdir = $(datadir)/enlightenment/
files_DATA = AUTHORS COPYING
@ -78,8 +77,15 @@ files_DATA = AUTHORS COPYING
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = enlightenment.pc
.PHONY: doc
include doc/Makefile.mk
doc:
@echo "entering doc/"
$(MAKE) -C doc doc
.PHONY: $(PHONIES)
clean-local: doc-clean
rm -rf config/*.cfg config/*~
rm -rf config/standard/*.cfg config/standard/*~
rm -rf config/mobile/*.cfg config/mobile/*~
rm -rf config/default/*.cfg config/default/*~
rm -f data/themes/*.edj
install-data-hook: $(INSTALL_DATA_HOOKS)

View File

@ -1,20 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
SUBDIRS = default standard mobile
EET_EET = @eet_eet@
EXTRA_DIST = profile.src
filesdir = $(datadir)/enlightenment/data/config
files_DATA = profile.cfg
SUFFIXES = .cfg
.src.cfg:
$(EET_EET) -i \
$(top_builddir)/config/$@ config \
$< 0
clean-local:
rm -rf *.cfg *~

25
config/Makefile.mk Normal file
View File

@ -0,0 +1,25 @@
EET_EET = @eet_eet@
EXTRA_DIST += config/profile.src
configfilesdir = $(datadir)/enlightenment/data/config
configfiles_DATA = config/profile.cfg
SUFFIXES = .cfg
.src.cfg:
$(MKDIR_P) $(@D)
$(EET_EET) -e \
$(top_builddir)/$@ config \
$< 1
include config/default/Makefile.mk
include config/standard/Makefile.mk
include config/mobile/Makefile.mk
config/profile.cfg: config/profile.src
$(MKDIR_P) $(@D)
$(EET_EET) -i \
$(top_builddir)/$@ config \
$< 1

View File

@ -1,27 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
EET_EET = @eet_eet@
EXTRA_DIST = \
profile.desktop \
enlightenment-default.png \
e.src \
e_bindings.src
filesdir = $(datadir)/enlightenment/data/config/default
files_DATA = \
profile.desktop \
enlightenment-default.png \
e.cfg \
e_bindings.cfg
SUFFIXES = .cfg
.src.cfg:
$(EET_EET) -e \
$(top_builddir)/config/default/$@ config \
$< 1
clean-local:
rm -rf *.cfg *~

View File

@ -0,0 +1,12 @@
EXTRA_DIST += \
config/default/profile.desktop \
config/default/enlightenment-default.png \
config/default/e.src \
config/default/e_bindings.src
configdefaultfilesdir = $(datadir)/enlightenment/data/config/default
configdefaultfiles_DATA = \
config/default/profile.desktop \
config/default/enlightenment-default.png \
config/default/e.cfg \
config/default/e_bindings.cfg

View File

@ -1,8 +1,7 @@
group "E_Config" struct {
value "config_version" int: 1000011;
value "config_version" int: 1000014;
value "config_type" uint: 0; // this profile seems to just be super minimalist
value "show_splash" int: 0;
value "init_default_theme" string: "default.edj";
value "desktop_default_name" string: "%i-%i";
value "desktop_default_window_profile" string: "";
value "menus_scroll_speed" double: 1000.0;
@ -31,12 +30,6 @@ group "E_Config" struct {
value "priority" int: 0;
}
}
group "themes" list {
group "E_Config_Theme" struct {
value "category" string: "theme";
value "file" string: "default.edj";
}
}
value "window_placement_policy" int: 0;
value "window_grouping" int: 0;
value "focus_policy" int: 0;

View File

@ -1,40 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
EET_EET = @eet_eet@
EXTRA_DIST = \
profile.desktop \
enlightenment-mobile.png \
e.src \
e_bindings.src \
module.battery.src \
module.illume-home.src \
module.illume-keyboard.src \
module.illume-indicator.src \
module.illume-softkey.src \
module.illume2.src \
module.conf.src
filesdir = $(datadir)/enlightenment/data/config/mobile
files_DATA = \
profile.desktop \
enlightenment-mobile.png \
e.cfg \
e_bindings.cfg \
module.battery.cfg \
module.illume-home.cfg \
module.illume-keyboard.cfg \
module.illume-indicator.cfg \
module.illume-softkey.cfg \
module.illume2.cfg \
module.conf.cfg
SUFFIXES = .cfg
.src.cfg:
$(EET_EET) -e \
$(top_builddir)/config/mobile/$@ config \
$< 1
clean-local:
rm -rf *.cfg *~

26
config/mobile/Makefile.mk Normal file
View File

@ -0,0 +1,26 @@
EXTRA_DIST += \
config/mobile/profile.desktop \
config/mobile/enlightenment-mobile.png \
config/mobile/e.src \
config/mobile/e_bindings.src \
config/mobile/module.battery.src \
config/mobile/module.illume-home.src \
config/mobile/module.illume-keyboard.src \
config/mobile/module.illume-indicator.src \
config/mobile/module.illume-softkey.src \
config/mobile/module.illume2.src \
config/mobile/module.conf.src
configmobilefilesdir = $(datadir)/enlightenment/data/config/mobile
configmobilefiles_DATA = \
config/mobile/profile.desktop \
config/mobile/enlightenment-mobile.png \
config/mobile/e.cfg \
config/mobile/e_bindings.cfg \
config/mobile/module.battery.cfg \
config/mobile/module.illume-home.cfg \
config/mobile/module.illume-keyboard.cfg \
config/mobile/module.illume-indicator.cfg \
config/mobile/module.illume-softkey.cfg \
config/mobile/module.illume2.cfg \
config/mobile/module.conf.cfg

View File

@ -1,8 +1,7 @@
group "E_Config" struct {
value "config_version" int: 1000011;
value "config_version" int: 1000014;
value "config_type" uint: 1;
value "show_splash" int: 1;
value "init_default_theme" string: "default.edj";
value "desktop_default_name" string: "%i-%i";
value "desktop_default_window_profile" string: "mobile";
value "menus_scroll_speed" double: 1000.0000000000000000000000000;
@ -265,12 +264,6 @@ group "E_Config" struct {
}
}
group "modules" list {
group "E_Config_Module" struct {
value "name" string: "conf_comp";
value "enabled" uchar: 1;
value "delayed" uchar: 0;
value "priority" int: -1000;
}
group "E_Config_Module" struct {
value "name" string: "illume2";
value "enabled" uchar: 1;
@ -337,6 +330,12 @@ group "E_Config" struct {
value "delayed" uchar: 1;
value "priority" int: 0;
}
group "E_Config_Module" struct {
value "name" string: "lokker";
value "enabled" uchar: 1;
value "delayed" uchar: 0;
value "priority" int: 0;
}
group "E_Config_Module" struct {
value "name" string: "conf";
value "enabled" uchar: 1;
@ -392,12 +391,6 @@ group "E_Config" struct {
value "priority" int: 0;
}
}
group "themes" list {
group "E_Config_Theme" struct {
value "category" string: "theme";
value "file" string: "default.edj";
}
}
group "gadcons" list {
group "E_Config_Gadcon" struct {
group "clients" list {

View File

@ -1,43 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
EET_EET = @eet_eet@
EXTRA_DIST = \
profile.desktop \
enlightenment-standard.png \
e.src \
e_bindings.src \
module.battery.src \
module.cpufreq.src \
module.fileman.src \
module.ibar.src \
module.ibox.src \
module.pager.src \
module.temperature.src \
module.conf.src
filesdir = $(datadir)/enlightenment/data/config/standard
files_DATA = \
profile.desktop \
enlightenment-standard.png \
e.cfg \
e_bindings.cfg \
module.battery.cfg \
module.cpufreq.cfg \
module.fileman.cfg \
module.ibar.cfg \
module.ibox.cfg \
module.pager.cfg \
module.temperature.cfg \
module.conf.cfg
SUFFIXES = .cfg
.src.cfg:
$(EET_EET) -e \
$(top_builddir)/config/standard/$@ config \
$< 1
clean-local:
rm -rf *.cfg *~

View File

@ -0,0 +1,28 @@
EXTRA_DIST += \
config/standard/profile.desktop \
config/standard/enlightenment-standard.png \
config/standard/e.src \
config/standard/e_bindings.src \
config/standard/module.battery.src \
config/standard/module.cpufreq.src \
config/standard/module.fileman.src \
config/standard/module.ibar.src \
config/standard/module.ibox.src \
config/standard/module.pager.src \
config/standard/module.temperature.src \
config/standard/module.conf.src
configstandardfilesdir = $(datadir)/enlightenment/data/config/standard
configstandardfiles_DATA = \
config/standard/profile.desktop \
config/standard/enlightenment-standard.png \
config/standard/e.cfg \
config/standard/e_bindings.cfg \
config/standard/module.battery.cfg \
config/standard/module.cpufreq.cfg \
config/standard/module.fileman.cfg \
config/standard/module.ibar.cfg \
config/standard/module.ibox.cfg \
config/standard/module.pager.cfg \
config/standard/module.temperature.cfg \
config/standard/module.conf.cfg

View File

@ -1,8 +1,7 @@
group "E_Config" struct {
value "config_version" int: 1000011;
value "config_version" int: 1000014;
value "config_type" uint: 3;
value "show_splash" int: 1;
value "init_default_theme" string: "default.edj";
value "desktop_default_name" string: "%i-%i";
value "desktop_default_window_profile" string: "standard";
value "menus_scroll_speed" double: 1000.0;
@ -154,6 +153,7 @@ group "E_Config" struct {
value "icon_theme" string: "Tango";
value "icon_theme_overrides" uchar: 0;
value "desk_flip_animate_mode" int: 1;
value "desk_flip_animate_type" string: "auto/pane";
value "desk_flip_animate_interpolation" int: 0;
value "desk_flip_animate_time" double: 0.2;
value "wallpaper_import_last_dev" string: "~/";
@ -603,10 +603,9 @@ group "E_Config" struct {
}
value "name" string: "shelf";
value "id" int: 1;
value "container" int: 0;
value "manager" int: 0;
value "zone" int: 0;
value "layer" int: 200;
value "popup" uchar: 1;
value "layer" int: 250;
value "orient" int: 6;
value "fit_along" uchar: 1;
value "fit_size" uchar: 0;
@ -867,19 +866,7 @@ group "E_Config" struct {
value "id" int: 115;
}
}
group "themes" list {
group "E_Config_Theme" struct {
value "category" string: "theme";
value "file" string: "default.edj";
}
}
group "modules" list {
group "E_Config_Module" struct {
value "name" string: "conf_comp";
value "enabled" uchar: 1;
value "delayed" uchar: 0;
value "priority" int: -1000;
}
group "E_Config_Module" struct {
value "name" string: "tasks";
value "enabled" uchar: 1;
@ -1066,6 +1053,12 @@ group "E_Config" struct {
value "delayed" uchar: 1;
value "priority" int: 0;
}
group "E_Config_Module" struct {
value "name" string: "lokker";
value "enabled" uchar: 1;
value "delayed" uchar: 0;
value "priority" int: 0;
}
group "E_Config_Module" struct {
value "name" string: "notification";
value "enabled" uchar: 1;

View File

@ -2,11 +2,11 @@
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
m4_define([v_maj], [0])
m4_define([v_min], [18])
m4_define([v_mic], [0])
dnl m4_define([v_rev], m4_esyscmd([(git rev-list --count HEAD 2>/dev/null || echo 0) | tr -d '\n']))dnl
m4_define([v_mic], [99])
m4_define([v_rev], m4_esyscmd([(git rev-list --count HEAD 2>/dev/null || echo 0) | tr -d '\n']))dnl
##-- When released, remove the dnl on the below line
dnl m4_undefine([v_rev])
m4_define([relname], [0.17.99])
m4_define([relname], [0.18.99])
##-- When doing snapshots - change soname. remove dnl on below line
m4_define([relname], [ver-pre-01])
dnl m4_define([v_rel], [-release relname])
@ -24,7 +24,6 @@ AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_MACRO_DIR([m4])
AC_CANONICAL_BUILD
AC_CANONICAL_HOST
AC_ISC_POSIX
AC_CONFIG_HEADERS([config.h])
AH_TOP([
@ -36,14 +35,13 @@ AH_BOTTOM([
])
AM_INIT_AUTOMAKE([1.11 dist-bzip2 -Wno-portability])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AM_SILENT_RULES([yes])
AC_GNU_SOURCE
AC_USE_SYSTEM_EXTENSIONS
AC_PROG_MKDIR_P
AC_C_BIGENDIAN
AC_PROG_CC_C99
AM_PROG_CC_C_O
AC_C_CONST
AC_FUNC_ALLOCA
AC_C___ATTRIBUTE__
@ -59,13 +57,13 @@ AC_DEFINE_UNQUOTED(VMIC, [v_mic], [Micro version])
AC_DEFINE_UNQUOTED(VREV, [v_rev], [Revison])
version_info="lt_cur:lt_rev:lt_age"
release_info="v_rel"
AC_SUBST(version_info)
AC_SUBST(release_info)
AC_SUBST([version_info])
AC_SUBST([release_info])
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
release=relname
AC_SUBST(release)
AC_SUBST([release])
PKG_PROG_PKG_CONFIG
@ -93,7 +91,7 @@ extern char **environ;
AC_DEFINE(HAVE_ENVIRON, 1, [Have environ var])
])
efl_version="1.8.0"
efl_version="1.8.99"
AC_SUBST(efl_version)
AC_CHECK_HEADERS([sys/timerfd.h sys/ptrace.h arpa/inet.h netinet/in.h])
@ -112,11 +110,11 @@ if test "x$res" = "xno"; then
fi
fi
AC_SUBST(fnmatch_libs)
AC_SUBST([fnmatch_libs])
have_pam=no
AC_ARG_ENABLE(pam,
AC_HELP_STRING([--enable-pam], [enable PAM support @<:@default=detect@:>@]),
AS_HELP_STRING([--enable-pam], [enable PAM support @<:@default=detect@:>@]),
[want_pam=$enableval],
[want_pam=auto]
)
@ -131,11 +129,11 @@ if test "x$want_pam" != "xno" ; then
fi
dnl AC_E_CHECK_PKG(VALGRIND, [valgrind >= 2.4.0], [], [:])
AC_SUBST(VALGRIND_CFLAGS)
AC_SUBST(VALGRIND_LIBS)
AC_SUBST([VALGRIND_CFLAGS])
AC_SUBST([VALGRIND_LIBS])
MODULE_ARCH="$host_os-$host_cpu-relname"
AC_SUBST(MODULE_ARCH)
AC_SUBST([MODULE_ARCH])
AC_DEFINE_UNQUOTED(MODULE_ARCH, "$MODULE_ARCH", "Module architecture")
if test "x${bindir}" = 'xNONE'; then
@ -147,7 +145,7 @@ if test "x${bindir}" = 'xNONE'; then
else
PACKAGE_BIN_DIR="${bindir}"
fi
AC_SUBST(PACKAGE_BIN_DIR)
AC_SUBST([PACKAGE_BIN_DIR])
if test "x${libdir}" = 'xNONE'; then
if test "x${prefix}" = "xNONE"; then
@ -158,7 +156,7 @@ if test "x${libdir}" = 'xNONE'; then
else
PACKAGE_LIB_DIR="${libdir}"
fi
AC_SUBST(PACKAGE_LIB_DIR)
AC_SUBST([PACKAGE_LIB_DIR])
if test "x${prefix}" = "xNONE"; then
PACKAGE_DATA_DIR="${ac_default_prefix}/share/${PACKAGE}"
@ -169,15 +167,15 @@ else
LOCALE_DIR="${prefix}/share/locale"
PACKAGE_SYSCONF_DIR="${sysconfdir}"
fi
AC_SUBST(PACKAGE_DATA_DIR)
AC_SUBST(LOCALE_DIR)
AC_SUBST(PACKAGE_SYSCONF_DIR)
AC_SUBST([PACKAGE_DATA_DIR])
AC_SUBST([LOCALE_DIR])
AC_SUBST([PACKAGE_SYSCONF_DIR])
#######################################
## Simple X11 build/link
AC_ARG_ENABLE(simple-x11,
AC_HELP_STRING([--enable-simple-x11], [enable simple x11 linking]),
AS_HELP_STRING([--enable-simple-x11], [enable simple x11 linking]),
[ want_evas_simple_x11=$enableval ]
)
@ -198,8 +196,8 @@ dnl ],[
dnl AC_MSG_ERROR([Cannot find X headers and libraries.])
dnl ]
dnl )
dnl AC_SUBST(x_cflags)
dnl AC_SUBST(x_libs)
dnl AC_SUBST([x_cflags])
dnl AC_SUBST([x_libs])
cf_cflags=""
cf_libs=""
@ -213,8 +211,8 @@ AC_CHECK_HEADERS(CFBase.h,
]
)
CPPFLAGS="${PCPPFLAGS}"
AC_SUBST(cf_cflags)
AC_SUBST(cf_libs)
AC_SUBST([cf_cflags])
AC_SUBST([cf_libs])
PKG_CHECK_MODULES([BLUEZ], [bluez],
[have_bluetooth="yes"],
@ -296,7 +294,7 @@ dnl fi
#ALL_LINGUAS="bg de eo es fi fr ja pt ru zh_CN hu sl it cs da sk sv nb nl zh_TW"
# a lot of .po's are broken
ALL_LINGUAS="bg ca cs da de el eo es fi fr fr_CH he hu it ja ko nb nl pl pt_BR ru sk sl sv tr zh_CN zh_TW"
AC_SUBST(ALL_LINGUAS)
AC_SUBST([ALL_LINGUAS])
m4_ifdef([AM_GNU_GETTEXT_VERSION], [
AM_GNU_GETTEXT_VERSION([0.17])
@ -315,7 +313,7 @@ have_po="yes"
have_po="no"
])
])
AC_SUBST(LTLIBINTL)
AC_SUBST([LTLIBINTL])
if test "x$LIBINTL" = "x"; then
LIBINTL="$INTLLIBS"
fi
@ -327,7 +325,7 @@ fi
AM_CONDITIONAL([HAVE_PO], [test "x${have_po}" = "xyes"])
AC_CHECK_LIB(dl, dlopen, dlopen_libs=-ldl)
AC_SUBST(dlopen_libs)
AC_SUBST([dlopen_libs])
AC_MSG_CHECKING([whether to install sysactions.conf])
AC_ARG_ENABLE([install-sysactions],
@ -480,10 +478,7 @@ PKG_CHECK_MODULES(E_THUMB, [
PKG_CHECK_MODULES(E_GRABBER, [
eina >= ${efl_version}
ecore >= ${efl_version}
eet >= ${efl_version}
efreet >= ${efl_version}
ecore-x >= ${efl_version}
])
efm_requires="\
@ -591,10 +586,10 @@ e_libs="$E_LIBS $LIBINTL $fnmatch_libs $execinfo_libs"
e_cflags="-DUSE_E_CONFIG_H $E_CFLAGS"
e_configflags="-DUSE_E_CONFIG_H"
AC_SUBST(e_libs)
AC_SUBST(e_cflags)
AC_SUBST(e_configflags)
AC_SUBST(requirements_e)
AC_SUBST([e_libs])
AC_SUBST([e_cflags])
AC_SUBST([e_configflags])
AC_SUBST([requirements_e])
PKG_CHECK_EXISTS([xkeyboard-config],[
xkb_base=`$PKG_CONFIG --variable=xkb_base xkeyboard-config 2>/dev/null`
@ -610,7 +605,7 @@ AC_ARG_WITH(profile,
AC_MSG_NOTICE([Enlightenment build profile set to $profile])
EDJE_DEF="-DLOWRES_PDA=1 -DMEDIUMRES_PDA=2 -DHIRES_PDA=3 -DSLOW_PC=4 -DMEDIUM_PC=5 -DFAST_PC=6"
EDJE_DEF=$EDJE_DEF" -DE18_PROFILE"=$profile
AC_SUBST(EDJE_DEF)
AC_SUBST([EDJE_DEF])
AC_ARG_WITH(edje-cc,
[ --with-edje-cc=PATH specify a specific path to edje_cc],
@ -621,7 +616,7 @@ AC_ARG_WITH(edje-cc,
],[
edje_cc=$(pkg-config --variable=prefix edje)/bin/edje_cc
])
AC_SUBST(edje_cc)
AC_SUBST([edje_cc])
PKG_CHECK_MODULES(EET, [eet >= ${efl_version}])
AC_ARG_WITH(eet-eet,
@ -633,7 +628,7 @@ AC_ARG_WITH(eet-eet,
],[
eet_eet=$(pkg-config --variable=prefix eet)/bin/eet
])
AC_SUBST(eet_eet)
AC_SUBST([eet_eet])
AC_DEFINE(E_INTERNAL, 1, "This define can be used to wrap internal E stuff, as config.h isn't exported")
@ -654,7 +649,7 @@ case "$host_os" in
;;
esac
AC_SUBST(BATTERY_LDFLAGS)
AC_SUBST([BATTERY_LDFLAGS])
AM_CONDITIONAL([HAVE_OPENBSD], [test "x${have_openbsd}" = "xyes"])
AM_CONDITIONAL(HAVE_TEMPERATURE, false)
@ -671,7 +666,7 @@ define([CHECK_MODULE_MUSIC_CONTROL],
##have_exchange=no
##AC_ARG_ENABLE(exchange,
## AC_HELP_STRING([--disable-exchange], [disable Exchange support @<:@default=detect@:>@]),
## AS_HELP_STRING([--disable-exchange], [disable Exchange support @<:@default=detect@:>@]),
## [want_exchange=$enableval],
## [want_exchange=auto]
##)
@ -690,7 +685,7 @@ AM_CONDITIONAL(HAVE_EXCHANGE, false)
have_enotify=no
AM_CONDITIONAL([HAVE_ENOTIFY], [false])
AC_ARG_ENABLE([enotify],
AC_HELP_STRING([--disable-enotify], [disable Enotify support @<:@default=detect@:>@]),
AS_HELP_STRING([--disable-enotify], [disable Enotify support @<:@default=detect@:>@]),
[e_cv_want_enotify=$enableval],
AC_CACHE_VAL([e_cv_want_enotify], [e_cv_want_enotify=yes])
)
@ -718,6 +713,7 @@ define([CHECK_MODULE_NOTIFICATION],
fi
])
AM_CONDITIONAL(HAVE_ALSA, false)
define([CHECK_MODULE_MIXER],
[
@ -743,8 +739,8 @@ define([CHECK_MODULE_MIXER],
fi
])
AC_SUBST(SOUND_CFLAGS)
AC_SUBST(SOUND_LIBS)
AC_SUBST([SOUND_CFLAGS])
AC_SUBST([SOUND_LIBS])
AM_CONDITIONAL(HAVE_ECONNMAN, false)
AM_CONDITIONAL(HAVE_DUMMY, false)
@ -753,8 +749,8 @@ define([CHECK_MODULE_CONNMAN],
AC_E_CHECK_PKG(ECONNMAN, [ eldbus >= $efl_version ], [], [CONNMAN=false])
dnl AC_E_CHECK_PKG(DUMMY, [ connman >= 1.0 ], [], [CONNMAN=false])
])
AC_SUBST(ECONNMAN_CFLAGS)
AC_SUBST(ECONNMAN_LIBS)
AC_SUBST([ECONNMAN_CFLAGS])
AC_SUBST([ECONNMAN_LIBS])
AM_CONDITIONAL(HAVE_BLUEZ4, false)
AM_CONDITIONAL(HAVE_DUMMY, false)
@ -762,42 +758,50 @@ define([CHECK_MODULE_BLUEZ4],
[
AC_E_CHECK_PKG(BLUEZ4, [ eldbus ],)
])
AC_SUBST(EBLUEZ4_CFLAGS)
AC_SUBST(EBLUEZ4_LIBS)
AC_SUBST([EBLUEZ4_CFLAGS])
AC_SUBST([EBLUEZ4_LIBS])
have_wayland_only=no
AC_ARG_ENABLE([wayland-only],
AS_HELP_STRING([--enable-wayland-only],[enable wayland-only version of enlightenment @<:@default=disabled@:>@]),
[e_cv_want_wayland_only=$enableval],
[e_cv_want_wayland_only=no])
AC_MSG_CHECKING([whether wayland-only version is enabled])
AC_MSG_RESULT([${e_cv_want_wayland_only}])
have_wayland_clients=no
AC_ARG_ENABLE([wayland-clients],
AS_HELP_STRING([--enable-wayland-clients],[enable wayland clients in composite module @<:@default=disabled@:>@]),
[e_cv_want_wayland_clients=$enableval],
[e_cv_want_wayland_clients=no])
AC_MSG_CHECKING([whether wayland client support is enabled])
AC_MSG_RESULT([${e_cv_want_wayland_clients}])
if test "x$e_cv_want_wayland_clients" != "xno";then
PKG_CHECK_MODULES([WAYLAND], [wayland-server >= 1.2.90 pixman-1 >= 0.3 xkbcommon >= 0.3.0],
[
have_wayland_clients=yes
AC_DEFINE_UNQUOTED([HAVE_WAYLAND_CLIENTS],[1],[enable wayland client support])
],
[have_wayland_clients=no])
else
have_wayland_clients=no
fi
AM_CONDITIONAL([HAVE_WAYLAND_CLIENTS], [test "x${have_wayland_clients}" = "xyes"])
have_wayland_egl=no
if test "x${have_wayland_clients}" = "xyes"; then
AC_ARG_ENABLE([wayland-egl],
AS_HELP_STRING([--enable-wayland-egl],[enable wayland clients to render using EGL @<:@default=disabled@:>@]),
AS_HELP_STRING([--enable-wayland-egl],[enable wayland to render using EGL @<:@default=disabled@:>@]),
[e_cv_want_wayland_egl=$enableval],
[e_cv_want_wayland_egl=no])
AC_MSG_CHECKING([whether wayland client EGL support is enabled])
AC_MSG_CHECKING([whether wayland EGL support is enabled])
AC_MSG_RESULT([${e_cv_want_wayland_egl}])
if test "x$e_cv_want_wayland_egl" != "xno";then
if test "x${e_cv_want_wayland_only}" != "xno" || test "x${e_cv_want_wayland_clients}" != "xno";then
PKG_CHECK_MODULES([WAYLAND], [ecore-wayland wayland-server pixman-1 xkbcommon],
[
have_wayland=yes
AC_DEFINE_UNQUOTED([HAVE_WAYLAND],[1],[enable wayland support])
],
[have_wayland=no])
else
have_wayland=no
fi
if test "x${have_wayland}" = "xyes"; then
if test "x${e_cv_want_wayland_clients}" != "xno"; then
have_wayland_clients=yes
AC_DEFINE_UNQUOTED([HAVE_WAYLAND_CLIENTS],[1],[enable wayland clients in composite module])
fi
if test "x${e_cv_want_wayland_egl}" != "xno";then
PKG_CHECK_MODULES([WAYLAND_EGL], [egl >= 7.10],
[
have_wayland_egl=yes
@ -809,8 +813,24 @@ if test "x${have_wayland_clients}" = "xyes"; then
fi
fi
AM_CONDITIONAL([HAVE_WAYLAND], [test "x${have_wayland}" = "xyes"])
AM_CONDITIONAL([HAVE_WAYLAND_ONLY], [test "x${have_wayland_only}" = "xyes"])
AM_CONDITIONAL([HAVE_WAYLAND_CLIENTS], [test "x${have_wayland_clients}" = "xyes"])
AM_CONDITIONAL([HAVE_WAYLAND_EGL], [test "x${have_wayland_egl}" = "xyes"])
PKG_CHECK_MODULES([ECORE_X], [ecore-x >= ${efl_version}])
if test -n "$ECORE_X_CFLAGS" ; then
ecore_x=true
else
ecore_x=false
fi
if test "x${ecore_x}" = "xtrue" && test -n "$WAYLAND_CFLAGS" ; then
wl_x11=true
else
wl_x11=false
fi
define([CHECK_MODULE_WL_DESKTOP_SHELL],
[
if test "x${have_wayland_clients}" = "xyes"; then
@ -821,19 +841,20 @@ define([CHECK_MODULE_WL_DESKTOP_SHELL],
])
AM_CONDITIONAL([HAVE_WL_DESKTOP_SHELL], [test "x${WL_DESKTOP_SHELL}" = "xtrue"])
define([CHECK_MODULE_WL_SCREENSHOT],
define([CHECK_MODULE_WL_FB],
[
if test "x${have_wayland_clients}" = "xyes"; then
AC_E_CHECK_PKG(WL_SCREENSHOT, [ ecore >= $efl_version ecore-wayland >= $efl_version eina >= $efl_version ], [WL_SCREENSHOT=true], [WL_SCREENSHOT=false])
AC_E_CHECK_PKG(WL_FB, [ ecore-fb >= $efl_version ecore >= $efl_version eina >= $efl_version ], [WL_FB=true], [WL_FB=false])
else
WL_SCREENSHOT=false
WL_FB=false
fi
])
AM_CONDITIONAL([HAVE_WL_SCREENSHOT], [test "x${WL_SCREENSHOT}" = "xtrue"])
AM_CONDITIONAL([HAVE_WL_FB], [test "x${WL_FB}" = "xtrue"])
AC_E_OPTIONAL_MODULE([ibar], true)
AC_E_OPTIONAL_MODULE([clock], true)
AC_E_OPTIONAL_MODULE([pager], true)
AC_E_OPTIONAL_MODULE([pager16], true)
AC_E_OPTIONAL_MODULE([battery], true, [CHECK_MODULE_BATTERY])
AC_E_OPTIONAL_MODULE([temperature], true, [CHECK_MODULE_TEMPERATURE])
AC_E_OPTIONAL_MODULE([notification], true, [CHECK_MODULE_NOTIFICATION])
@ -845,7 +866,6 @@ AC_E_OPTIONAL_MODULE([fileman], true)
AC_E_OPTIONAL_MODULE([fileman_opinfo], true)
AC_E_OPTIONAL_MODULE([wizard], true)
AC_E_OPTIONAL_MODULE([conf], true)
AC_E_OPTIONAL_MODULE([conf_comp], true)
AC_E_OPTIONAL_MODULE([conf_wallpaper2], true)
AC_E_OPTIONAL_MODULE([conf_theme], true, true)
AC_E_OPTIONAL_MODULE([conf_intl], true)
@ -865,24 +885,27 @@ AC_E_OPTIONAL_MODULE([gadman], true)
AC_E_OPTIONAL_MODULE([mixer], true, [CHECK_MODULE_MIXER])
AC_E_OPTIONAL_MODULE([connman], true, [CHECK_MODULE_CONNMAN])
AC_E_OPTIONAL_MODULE([bluez4], true, [CHECK_MODULE_BLUEZ4])
AC_E_OPTIONAL_MODULE([illume2], true)
#AC_E_OPTIONAL_MODULE([illume2], true)
AC_E_OPTIONAL_MODULE([syscon], true)
AC_E_OPTIONAL_MODULE([everything], true)
AC_E_OPTIONAL_MODULE([systray], true)
AC_E_OPTIONAL_MODULE([appmenu], true)
AC_E_OPTIONAL_MODULE([quickaccess], true)
AC_E_OPTIONAL_MODULE([teamwork], true)
AC_E_OPTIONAL_MODULE([shot], true)
AC_E_OPTIONAL_MODULE([lokker], true)
AC_E_OPTIONAL_MODULE([shot], true, $ecore_x)
AC_E_OPTIONAL_MODULE([backlight], true)
AC_E_OPTIONAL_MODULE([tasks], true)
AC_E_OPTIONAL_MODULE([conf_randr], true)
AC_E_OPTIONAL_MODULE([xkbswitch], true)
AC_E_OPTIONAL_MODULE([conf_randr], true, $ecore_x)
AC_E_OPTIONAL_MODULE([xkbswitch], true, $ecore_x)
AC_E_OPTIONAL_MODULE([tiling], true)
AC_E_OPTIONAL_MODULE([access], true)
AC_E_OPTIONAL_MODULE([access], false, $ecore_x)
AC_E_OPTIONAL_MODULE([music_control], true, [CHECK_MODULE_MUSIC_CONTROL])
AC_E_OPTIONAL_MODULE([contact], true)
AC_E_OPTIONAL_MODULE([contact], false)
AC_E_OPTIONAL_MODULE([wl_desktop_shell], true, [CHECK_MODULE_WL_DESKTOP_SHELL])
AC_E_OPTIONAL_MODULE([wl_screenshot], true, [CHECK_MODULE_WL_SCREENSHOT])
AC_E_OPTIONAL_MODULE([wl_x11], $have_wayland, $wl_x11)
AC_E_OPTIONAL_MODULE([wl_fb], $have_wayland, [CHECK_MODULE_WL_FB])
#AC_E_OPTIONAL_MODULE([wl_screenshot], true, [CHECK_MODULE_WL_SCREENSHOT])
HALT="/sbin/shutdown -h now"
REBOOT="/sbin/shutdown -r now"
@ -917,10 +940,10 @@ case "$host_os" in
fi
;;
esac
AC_SUBST(HALT)
AC_SUBST(REBOOT)
AC_SUBST(SUSPEND)
AC_SUBST(HIBERNATE)
AC_SUBST([HALT])
AC_SUBST([REBOOT])
AC_SUBST([SUSPEND])
AC_SUBST([HIBERNATE])
m4_ifdef([v_mic],
[
@ -939,14 +962,11 @@ AC_OUTPUT([
Makefile
enlightenment.spec
enlightenment.pc
src/Makefile
src/bin/Makefile
src/bin/e_fm_shared_types.h
src/bin/e_fm/Makefile
src/modules/Makefile
src/modules/ibar/module.desktop
src/modules/clock/module.desktop
src/modules/pager/module.desktop
src/modules/pager16/module.desktop
src/modules/battery/module.desktop
src/modules/temperature/module.desktop
src/modules/notification/module.desktop
@ -977,24 +997,14 @@ src/modules/gadman/module.desktop
src/modules/mixer/module.desktop
src/modules/connman/module.desktop
src/modules/bluez4/module.desktop
src/modules/illume2/doc/illume.dox
src/modules/illume2/module.desktop
src/modules/illume-home/module.desktop
src/modules/illume-home-toggle/module.desktop
src/modules/illume-softkey/module.desktop
src/modules/illume-keyboard/module.desktop
src/modules/illume-indicator/module.desktop
src/modules/illume-kbd-toggle/module.desktop
src/modules/illume-mode-toggle/module.desktop
src/modules/illume-bluetooth/module.desktop
src/modules/syscon/module.desktop
src/modules/everything/module.desktop
src/modules/everything/everything.pc
src/modules/systray/module.desktop
src/modules/appmenu/module.desktop
src/modules/conf_comp/module.desktop
src/modules/quickaccess/module.desktop
src/modules/teamwork/module.desktop
src/modules/lokker/module.desktop
src/modules/shot/module.desktop
src/modules/backlight/module.desktop
src/modules/tasks/module.desktop
@ -1005,31 +1015,25 @@ src/modules/music-control/module.desktop
src/modules/contact/module.desktop
src/modules/wl_desktop_shell/module.desktop
src/modules/wl_screenshot/module.desktop
data/Makefile
data/images/Makefile
data/flags/Makefile
data/favorites/Makefile
data/desktop/Makefile
data/input_methods/Makefile
data/xsession/Makefile
data/xsession/enlightenment.desktop
data/tools/Makefile
data/etc/Makefile
data/etc/sysactions.conf
data/icons/Makefile
data/backgrounds/Makefile
data/units/Makefile
data/units/e18.service
doc/Makefile
doc/Doxyfile
doc/e.dox
config/Makefile
config/default/Makefile
config/standard/Makefile
config/mobile/Makefile
$po_makefile_in
])
#src/modules/illume2/doc/illume.dox
#src/modules/illume2/module.desktop
#src/modules/illume-home/module.desktop
#src/modules/illume-home-toggle/module.desktop
#src/modules/illume-softkey/module.desktop
#src/modules/illume-keyboard/module.desktop
#src/modules/illume-indicator/module.desktop
#src/modules/illume-kbd-toggle/module.desktop
#src/modules/illume-mode-toggle/module.desktop
#src/modules/illume-bluetooth/module.desktop
# report
txt_strip() {
echo "[$]@" | sed -e 's/^[[ \t]]*\([[^ \t]]*\)[[ \t]]*$/\1/g'

View File

@ -1,14 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
SUBDIRS = \
images \
tools \
xsession \
input_methods \
etc \
icons \
backgrounds \
flags \
favorites \
desktop \
units

11
data/Makefile.mk Normal file
View File

@ -0,0 +1,11 @@
include data/images/Makefile.mk
include data/tools/Makefile.mk
include data/xsession/Makefile.mk
include data/input_methods/Makefile.mk
include data/etc/Makefile.mk
include data/icons/Makefile.mk
include data/backgrounds/Makefile.mk
include data/flags/Makefile.mk
include data/favorites/Makefile.mk
include data/desktop/Makefile.mk
include data/units/Makefile.mk

View File

@ -1,42 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
filesdir = $(datadir)/enlightenment/data/backgrounds
files_DATA = \
Brown_Rock_Hi.edj \
Colorful_Roses.edj \
Darkconcrete.edj \
Dark_Gradient.edj \
Grassy.edj \
Japanesemaple.edj \
Lakegrass.edj \
Light_Gradient.edj \
Mossstring.edj \
Motleyrock.edj \
Newgrowth.edj \
Orange_Roses.edj \
Pattern_Radial.edj \
Pattern_Vertical.edj \
Pattern_Vertical_Hi.edj \
Pine_Silhouettes.edj \
Purple_Flower_Bunch.edj \
Skywall.edj \
Stringflower.edj \
Wetgrass.edj \
Wetleaf.edj \
Whiterock.edj \
Hills.edj \
Light.edj \
Temple.edj \
Train.edj \
Curly_Leaves.edj \
Flower_Petals.edj \
Go_Away.edj \
Green_Stem.edj \
Leafy_Red.edj \
Ramen.edj \
Shady_Leaves.edj \
Windy_Palm.edj \
Lantern_Cluster.edj \
Wall_Lanterns.edj
EXTRA_DIST = $(files_DATA)

View File

@ -0,0 +1,41 @@
backgroundfilesdir = $(datadir)/enlightenment/data/backgrounds
backgroundfiles_DATA = \
data/backgrounds/Brown_Rock_Hi.edj \
data/backgrounds/Colorful_Roses.edj \
data/backgrounds/Darkconcrete.edj \
data/backgrounds/Dark_Gradient.edj \
data/backgrounds/Grassy.edj \
data/backgrounds/Japanesemaple.edj \
data/backgrounds/Lakegrass.edj \
data/backgrounds/Light_Gradient.edj \
data/backgrounds/Mossstring.edj \
data/backgrounds/Motleyrock.edj \
data/backgrounds/Newgrowth.edj \
data/backgrounds/Orange_Roses.edj \
data/backgrounds/Pattern_Radial.edj \
data/backgrounds/Pattern_Vertical.edj \
data/backgrounds/Pattern_Vertical_Hi.edj \
data/backgrounds/Pine_Silhouettes.edj \
data/backgrounds/Purple_Flower_Bunch.edj \
data/backgrounds/Skywall.edj \
data/backgrounds/Stringflower.edj \
data/backgrounds/Wetgrass.edj \
data/backgrounds/Wetleaf.edj \
data/backgrounds/Whiterock.edj \
data/backgrounds/Hills.edj \
data/backgrounds/Light.edj \
data/backgrounds/Temple.edj \
data/backgrounds/Train.edj \
data/backgrounds/Curly_Leaves.edj \
data/backgrounds/Flower_Petals.edj \
data/backgrounds/Go_Away.edj \
data/backgrounds/Green_Stem.edj \
data/backgrounds/Leafy_Red.edj \
data/backgrounds/Ramen.edj \
data/backgrounds/Shady_Leaves.edj \
data/backgrounds/Windy_Palm.edj \
data/backgrounds/Lantern_Cluster.edj \
data/backgrounds/Wall_Lanterns.edj
EXTRA_DIST += $(backgroundfiles_DATA)

View File

@ -1,6 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
filesdir = $(datadir)/applications
files_DATA = \
enlightenment_filemanager.desktop
EXTRA_DIST = $(files_DATA)

5
data/desktop/Makefile.mk Normal file
View File

@ -0,0 +1,5 @@
desktopfilesdir = $(datadir)/applications
desktopfiles_DATA = \
data/desktop/enlightenment_filemanager.desktop
EXTRA_DIST += $(desktopfiles_DATA)

View File

@ -1,16 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
filesdir = $(sysconfdir)/enlightenment
files_DATA =
if INSTALL_SYSACTIONS
files_DATA += sysactions.conf
endif
menusdir = $(sysconfdir)/xdg/menus
menus_DATA =
if INSTALL_ENLIGHTENMENT_MENU
menus_DATA += enlightenment.menu
endif
EXTRA_DIST = $(files_DATA) $(menus_DATA)

15
data/etc/Makefile.mk Normal file
View File

@ -0,0 +1,15 @@
etcfilesdir = $(sysconfdir)/enlightenment
etcfiles_DATA =
if INSTALL_SYSACTIONS
etcfiles_DATA += data/etc/sysactions.conf
endif
etcmenusdir = $(sysconfdir)/xdg/menus
etcmenus_DATA =
if INSTALL_ENLIGHTENMENT_MENU
etcmenus_DATA += data/etc/enlightenment.menu
endif
EXTRA_DIST += $(etcfiles_DATA) $(etcmenus_DATA)

View File

@ -1,11 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
favsdir = $(datadir)/enlightenment/data/favorites
favs_DATA = \
.order \
desktop.desktop \
home.desktop \
root.desktop \
tmp.desktop
EXTRA_DIST = $(favs_DATA)

View File

@ -0,0 +1,9 @@
datafavsdir = $(datadir)/enlightenment/data/favorites
datafavs_DATA = \
data/favorites/.order \
data/favorites/desktop.desktop \
data/favorites/home.desktop \
data/favorites/root.desktop \
data/favorites/tmp.desktop
EXTRA_DIST += $(datafavs_DATA)

View File

@ -1,104 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
filesdir = $(datadir)/enlightenment/data/flags
files_DATA = \
ad_flag.png \
af_flag.png \
al_flag.png \
am_flag.png \
ara_flag.png \
ar_flag.png \
at_flag.png \
az_flag.png \
ba_flag.png \
bd_flag.png \
be_flag.png \
bg_flag.png \
brai_flag.png \
br_flag.png \
bt_flag.png \
bw_flag.png \
by_flag.png \
ca_flag.png \
cat_flag.png \
cd_flag.png \
ch_flag.png \
cm_flag.png \
cn_flag.png \
cz_flag.png \
de_flag.png \
dk_flag.png \
ee_flag.png \
epo_flag.png \
es_flag.png \
et_flag.png \
fi_flag.png \
fo_flag.png \
fr_flag.png \
gb_flag.png \
ge_flag.png \
gh_flag.png \
gn_flag.png \
gr_flag.png \
hr_flag.png \
hu_flag.png \
ie_flag.png \
il_flag.png \
in_flag.png \
iq_flag.png \
ir_flag.png \
is_flag.png \
it_flag.png \
jp_flag.png \
ke_flag.png \
kg_flag.png \
kh_flag.png \
kr_flag.png \
ku_flag.png \
kz_flag.png \
la_flag.png \
lang-system.png \
latam_flag.png \
lk_flag.png \
lt_flag.png \
lv_flag.png \
ma_flag.png \
mao_flag.png \
md_flag.png \
me_flag.png \
mk_flag.png \
ml_flag.png \
mm_flag.png \
mn_flag.png \
mt_flag.png \
mv_flag.png \
my_flag.png \
ng_flag.png \
nl_flag.png \
no_flag.png \
np_flag.png \
ph_flag.png \
pk_flag.png \
pl_flag.png \
pt_flag.png \
ro_flag.png \
rs_flag.png \
ru_flag.png \
se_flag.png \
si_flag.png \
sk_flag.png \
sn_flag.png \
sy_flag.png \
th_flag.png \
tj_flag.png \
tm_flag.png \
tr_flag.png \
tw_flag.png \
tz_flag.png \
ua_flag.png \
unknown_flag.png \
us_flag.png \
uz_flag.png \
vn_flag.png \
za_flag.png
EXTRA_DIST = $(files_DATA)

103
data/flags/Makefile.mk Normal file
View File

@ -0,0 +1,103 @@
dataflagsfilesdir = $(datadir)/enlightenment/data/flags
dataflagsfiles_DATA = \
data/flags/ad_flag.png \
data/flags/af_flag.png \
data/flags/al_flag.png \
data/flags/am_flag.png \
data/flags/ara_flag.png \
data/flags/ar_flag.png \
data/flags/at_flag.png \
data/flags/az_flag.png \
data/flags/ba_flag.png \
data/flags/bd_flag.png \
data/flags/be_flag.png \
data/flags/bg_flag.png \
data/flags/brai_flag.png \
data/flags/br_flag.png \
data/flags/bt_flag.png \
data/flags/bw_flag.png \
data/flags/by_flag.png \
data/flags/ca_flag.png \
data/flags/cat_flag.png \
data/flags/cd_flag.png \
data/flags/ch_flag.png \
data/flags/cm_flag.png \
data/flags/cn_flag.png \
data/flags/cz_flag.png \
data/flags/de_flag.png \
data/flags/dk_flag.png \
data/flags/ee_flag.png \
data/flags/epo_flag.png \
data/flags/es_flag.png \
data/flags/et_flag.png \
data/flags/fi_flag.png \
data/flags/fo_flag.png \
data/flags/fr_flag.png \
data/flags/gb_flag.png \
data/flags/ge_flag.png \
data/flags/gh_flag.png \
data/flags/gn_flag.png \
data/flags/gr_flag.png \
data/flags/hr_flag.png \
data/flags/hu_flag.png \
data/flags/ie_flag.png \
data/flags/il_flag.png \
data/flags/in_flag.png \
data/flags/iq_flag.png \
data/flags/ir_flag.png \
data/flags/is_flag.png \
data/flags/it_flag.png \
data/flags/jp_flag.png \
data/flags/ke_flag.png \
data/flags/kg_flag.png \
data/flags/kh_flag.png \
data/flags/kr_flag.png \
data/flags/ku_flag.png \
data/flags/kz_flag.png \
data/flags/la_flag.png \
data/flags/lang-system.png \
data/flags/latam_flag.png \
data/flags/lk_flag.png \
data/flags/lt_flag.png \
data/flags/lv_flag.png \
data/flags/ma_flag.png \
data/flags/mao_flag.png \
data/flags/md_flag.png \
data/flags/me_flag.png \
data/flags/mk_flag.png \
data/flags/ml_flag.png \
data/flags/mm_flag.png \
data/flags/mn_flag.png \
data/flags/mt_flag.png \
data/flags/mv_flag.png \
data/flags/my_flag.png \
data/flags/ng_flag.png \
data/flags/nl_flag.png \
data/flags/no_flag.png \
data/flags/np_flag.png \
data/flags/ph_flag.png \
data/flags/pk_flag.png \
data/flags/pl_flag.png \
data/flags/pt_flag.png \
data/flags/ro_flag.png \
data/flags/rs_flag.png \
data/flags/ru_flag.png \
data/flags/se_flag.png \
data/flags/si_flag.png \
data/flags/sk_flag.png \
data/flags/sn_flag.png \
data/flags/sy_flag.png \
data/flags/th_flag.png \
data/flags/tj_flag.png \
data/flags/tm_flag.png \
data/flags/tr_flag.png \
data/flags/tw_flag.png \
data/flags/tz_flag.png \
data/flags/ua_flag.png \
data/flags/unknown_flag.png \
data/flags/us_flag.png \
data/flags/uz_flag.png \
data/flags/vn_flag.png \
data/flags/za_flag.png
EXTRA_DIST += $(dataflagsfiles_DATA)

View File

@ -1,13 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
filesdir = $(datadir)/enlightenment/data/icons
files_DATA = \
xterm.png \
web_browser.png \
audio_player.png \
mail_client.png \
video_player.png \
text_editor.png \
image_viewer.png \
audio_player2.png
EXTRA_DIST = $(files_DATA)

12
data/icons/Makefile.mk Normal file
View File

@ -0,0 +1,12 @@
iconsfilesdir = $(datadir)/enlightenment/data/icons
iconsfiles_DATA = \
data/icons/xterm.png \
data/icons/web_browser.png \
data/icons/audio_player.png \
data/icons/mail_client.png \
data/icons/video_player.png \
data/icons/text_editor.png \
data/icons/image_viewer.png \
data/icons/audio_player2.png
EXTRA_DIST += $(iconsfiles_DATA)

View File

@ -1,10 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
filesdir = $(datadir)/enlightenment/data/images
files_DATA = \
enlightenment.png \
test.png \
test.jpg \
test.edj \
test.svg
EXTRA_DIST = $(files_DATA)

9
data/images/Makefile.mk Normal file
View File

@ -0,0 +1,9 @@
imagesfilesdir = $(datadir)/enlightenment/data/images
imagesfiles_DATA = \
data/images/enlightenment.png \
data/images/test.png \
data/images/test.jpg \
data/images/test.edj \
data/images/test.svg
EXTRA_DIST += $(imagesfiles_DATA)

View File

@ -1,12 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
filesdir = $(datadir)/enlightenment/data/input_methods
files_DATA = \
scim.imc \
uim.imc \
iiimf.imc \
ibus.imc \
gcin.imc \
hime.imc \
fcitx.imc
EXTRA_DIST = $(files_DATA)

View File

@ -0,0 +1,11 @@
imcfilesdir = $(datadir)/enlightenment/data/input_methods
imcfiles_DATA = \
data/input_methods/scim.imc \
data/input_methods/uim.imc \
data/input_methods/iiimf.imc \
data/input_methods/ibus.imc \
data/input_methods/gcin.imc \
data/input_methods/hime.imc \
data/input_methods/fcitx.imc
EXTRA_DIST += $(imcfiles_DATA)

View File

@ -1,8 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
enlightenment_remotedir = $(bindir)
enlightenment_remote_SCRIPTS = enlightenment_remote
EXTRA_DIST = enlightenment_remote

6
data/tools/Makefile.mk Normal file
View File

@ -0,0 +1,6 @@
enlightenment_remotedir = $(bindir)
enlightenment_remote_SCRIPTS = data/tools/enlightenment_remote
EXTRA_DIST += data/tools/enlightenment_remote

View File

@ -1,9 +0,0 @@
AUTOMAKE_OPTIONS = 1.4 foreign
MAINTAINERCLEANFILES = Makefile.in
if HAVE_SYSTEMD_USER_SESSION
unitsdir = $(USER_SESSION_DIR)
units_DATA = e18.service
endif
EXTRA_DIST = $(units_DATA)

6
data/units/Makefile.mk Normal file
View File

@ -0,0 +1,6 @@
if HAVE_SYSTEMD_USER_SESSION
unitsdir = $(USER_SESSION_DIR)
units_DATA = data/units/e18.service
endif
EXTRA_DIST += $(units_DATA)

View File

@ -1,4 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
filesdir = $(datadir)/xsessions
files_DATA = enlightenment.desktop
EXTRA_DIST = enlightenment.desktop.in

View File

@ -0,0 +1,3 @@
xsessionfilesdir = $(datadir)/xsessions
xsessionfiles_DATA = data/xsession/enlightenment.desktop
EXTRA_DIST += data/xsession/enlightenment.desktop.in

View File

@ -1,15 +1,15 @@
PROJECT_NAME = Enlightenment
PROJECT_NUMBER =
OUTPUT_DIRECTORY = .
INPUT = @builddir@/e.dox @top_srcdir@/src
IMAGE_PATH = @srcdir@/img
OUTPUT_DIRECTORY = @builddir@/doc
INPUT = @builddir@/doc/e.dox @top_srcdir@/src
IMAGE_PATH = @srcdir@/doc/img
OUTPUT_LANGUAGE = English
GENERATE_HTML = YES
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html
HTML_HEADER = @srcdir@/head.html
HTML_FOOTER = @srcdir@/foot.html
HTML_STYLESHEET = @srcdir@/e.css
HTML_HEADER = @srcdir@/doc/head.html
HTML_FOOTER = @srcdir@/doc/foot.html
HTML_STYLESHEET = @srcdir@/doc/e.css
ENUM_VALUES_PER_LINE = 1
GENERATE_HTMLHELP = NO
CHM_FILE =

View File

@ -1,42 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in e.dox
.PHONY: doc
PACKAGE_DOCNAME = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)-doc
if EFL_BUILD_DOC
doc-clean:
rm -rf html/ latex/ man/ xml/ $(top_builddir)/$(PACKAGE_DOCNAME).tar*
doc: all doc-clean
$(efl_doxygen)
cp $(srcdir)/img/* html/
rm -rf $(PACKAGE_DOCNAME).tar*
$(MKDIR_P) $(PACKAGE_DOCNAME)/doc
cp -R html/ latex/ man/ $(PACKAGE_DOCNAME)/doc
tar cf $(PACKAGE_DOCNAME).tar $(PACKAGE_DOCNAME)/
bzip2 -9 $(PACKAGE_DOCNAME).tar
rm -rf $(PACKAGE_DOCNAME)/
mv $(PACKAGE_DOCNAME).tar.bz2 $(top_builddir)
@echo "Documentation Package: $(top_builddir)/$(PACKAGE_DOCNAME).tar.bz2"
clean-local: doc-clean
else
doc:
@echo "Documentation not built. Run ./configure --help"
endif
filesdir = $(datadir)/enlightenment/doc
files_DATA = \
documentation.html \
illume2.html \
FDO.txt \
cache.txt \
enlightenment.png \
illume2.png
EXTRA_DIST = $(files_DATA) Doxyfile.in $(wildcard img/*.*) e.css head.html foot.html e.dox.in

47
doc/Makefile.mk Normal file
View File

@ -0,0 +1,47 @@
MAINTAINERCLEANFILES += doc/e.dox
PHONIES += doc doc-clean
PACKAGE_DOCNAME = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)-doc
if EFL_BUILD_DOC
doc-clean:
rm -rf doc/html/ doc/latex/ doc/man/ doc/xml/ $(top_builddir)/$(PACKAGE_DOCNAME).tar*
doc: all doc-clean
@echo "entering doc/"
$(efl_doxygen) doc/Doxyfile
cp $(top_srcdir)/doc/img/* doc/html/
rm -rf $(PACKAGE_DOCNAME).tar*
$(MKDIR_P) $(PACKAGE_DOCNAME)/doc
cp -R doc/html/ doc/latex/ doc/man/ $(PACKAGE_DOCNAME)/doc
tar cf $(PACKAGE_DOCNAME).tar $(PACKAGE_DOCNAME)/
bzip2 -9 $(PACKAGE_DOCNAME).tar
rm -rf $(PACKAGE_DOCNAME)/
@echo "Documentation Package: $(top_builddir)/$(PACKAGE_DOCNAME).tar.bz2"
else
doc:
@echo "Documentation not built. Run ./configure --help"
endif
docfilesdir = $(datadir)/enlightenment/doc
docfiles_DATA = \
doc/documentation.html \
doc/illume2.html \
doc/FDO.txt \
doc/cache.txt \
doc/enlightenment.png \
doc/illume2.png
EXTRA_DIST += \
$(docfiles_DATA) \
doc/Doxyfile.in \
$(wildcard doc/img/*.*) \
doc/e.css \
doc/head.html \
doc/foot.html \
doc/e.dox.in

3
e19_workdir_setup.sh Normal file
View File

@ -0,0 +1,3 @@
export E_THEME_OVERRIDE=$(readlink -f data/themes/default.edj)
export E_MODULE_SRC_PATH=$(readlink -f src/modules/)
export E_START=/e

26
m4/Makefile.mk Normal file
View File

@ -0,0 +1,26 @@
MAINTAINERCLEANFILES += \
m4/libtool.m4 \
m4/lt~obsolete.m4 \
m4/ltoptions.m4 \
m4/ltsugar.m4 \
m4/ltversion.m4 \
m4/codeset.m4 \
m4/gettext.m4 \
m4/glibc21.m4 \
m4/iconv.m4 \
m4/intdiv0.m4 \
m4/inttypes_h.m4 \
m4/inttypes.m4 \
m4/inttypes-pri.m4 \
m4/isc-posix.m4 \
m4/lcmessage.m4 \
m4/lib-ld.m4 \
m4/lib-link.m4 \
m4/lib-prefix.m4 \
m4/nls.m4 \
m4/po.m4 \
m4/progtest.m4 \
m4/stdint_h.m4 \
m4/uintmax_t.m4 \
m4/ulonglong.m4

10
po/Makefile.mk Normal file
View File

@ -0,0 +1,10 @@
MAINTAINERCLEANFILES += \
po/boldquot.sed \
po/en@boldquot.header \
po/en@quot.header \
po/insert-header.sin \
po/Makefile.in.in \
po/Makevars.template \
po/quot.sed \
po/remove-potcdate.sin \
po/Rules-quot

View File

@ -4,9 +4,9 @@ src/bin/e_alert.c
src/bin/e_atoms.c
src/bin/e_bg.c
src/bin/e_bindings.c
src/bin/e_border.c
src/bin/e_box.c
src/bin/e_canvas.c
src/bin/e_client.c
src/bin/e_color.c
src/bin/e_color_class.c
src/bin/e_color_dialog.c
@ -15,7 +15,6 @@ src/bin/e_config.c
src/bin/e_config_dialog.c
src/bin/e_configure.c
src/bin/e_confirm_dialog.c
src/bin/e_container.c
src/bin/e_datastore.c
src/bin/e_desk.c
src/bin/e_desklock.c
@ -47,13 +46,15 @@ src/bin/e_imc_main.c
src/bin/e_import_config_dialog.c
src/bin/e_import_dialog.c
src/bin/e_init.c
src/bin/e_int_border_locks.c
src/bin/e_int_border_menu.c
src/bin/e_int_border_prop.c
src/bin/e_int_border_remember.c
src/bin/e_int_client_locks.c
src/bin/e_int_client_menu.c
src/bin/e_int_client_prop.c
src/bin/e_int_client_remember.c
src/bin/e_int_config_modules.c
src/bin/e_int_gadcon_config.c
src/bin/e_int_menus.c
src/bin/e_int_config_comp.c
src/bin/e_int_config_comp_match.c
src/bin/e_int_shelf_config.c
src/bin/e_int_toolbar_config.c
src/bin/e_intl.c
@ -76,7 +77,6 @@ src/bin/e_pan.c
src/bin/e_path.c
src/bin/e_place.c
src/bin/e_pointer.c
src/bin/e_popup.c
src/bin/e_prefix.c
src/bin/e_randr.c
src/bin/e_remember.c
@ -90,7 +90,6 @@ src/bin/e_slider.c
src/bin/e_spectrum.c
src/bin/e_start_main.c
src/bin/e_startup.c
src/bin/e_stolen.c
src/bin/e_sys.c
src/bin/e_sys_main.c
src/bin/e_table.c
@ -157,9 +156,6 @@ src/modules/conf_bindings/e_int_config_keybindings.c
src/modules/conf_bindings/e_int_config_mousebindings.c
src/modules/conf_bindings/e_int_config_signalbindings.c
src/modules/conf_bindings/e_mod_main.c
src/modules/conf_comp/e_mod_config.c
src/modules/conf_comp/e_mod_config_match.c
src/modules/conf_comp/e_mod_main.c
src/modules/conf_dialogs/e_int_config_dialogs.c
src/modules/conf_dialogs/e_int_config_profiles.c
src/modules/conf_dialogs/e_mod_main.c

View File

@ -1,2 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
SUBDIRS = bin modules

2
src/Makefile.mk Normal file
View File

@ -0,0 +1,2 @@
include src/bin/Makefile.mk
include src/modules/Makefile.mk

View File

@ -1,457 +0,0 @@
SUBDIRS = e_fm
MAINTAINERCLEANFILES = Makefile.in
DISTCLEANFILES = e_fm_shared_types.h
AM_CPPFLAGS = \
-I$(top_builddir) \
-I$(top_builddir)/src/bin \
-I$(top_srcdir) \
-I$(top_srcdir)/src/bin \
@e_cflags@ \
@cf_cflags@ \
@VALGRIND_CFLAGS@ \
@EDJE_DEF@ \
@WAYLAND_CFLAGS@ \
@WAYLAND_EGL_CFLAGS@ \
-DE_BINDIR=\"$(bindir)\" \
-DPACKAGE_BIN_DIR=\"@PACKAGE_BIN_DIR@\" \
-DPACKAGE_LIB_DIR=\"@PACKAGE_LIB_DIR@\" \
-DPACKAGE_DATA_DIR=\"@PACKAGE_DATA_DIR@\" \
-DLOCALE_DIR=\"@LOCALE_DIR@\" \
-DPACKAGE_SYSCONF_DIR=\"@PACKAGE_SYSCONF_DIR@\"
bin_PROGRAMS = \
enlightenment \
enlightenment_imc \
enlightenment_start \
enlightenment_filemanager \
enlightenment_open
internal_bindir = $(libdir)/enlightenment/utils
internal_bin_PROGRAMS = \
enlightenment_fm_op \
enlightenment_sys \
enlightenment_thumb \
enlightenment_alert \
enlightenment_static_grabber
if HAVE_EEZE
internal_bin_PROGRAMS += enlightenment_backlight
endif
ENLIGHTENMENTHEADERS = \
e_about.h \
e_acpi.h \
e_actions.h \
e_alert.h \
e_atoms.h \
e_backlight.h \
e_bg.h \
e_bindings.h \
e_border.h \
e_box.h \
e_canvas.h \
e_color_class.h \
e_color_dialog.h \
e_color.h \
e_comp.h \
e_comp_cfdata.h \
e_comp_render_update.h \
e_config_data.h \
e_config_dialog.h \
e_config.h \
e_configure.h \
e_confirm_dialog.h \
e_container.h \
e_datastore.h \
e_dbusmenu.h \
e_desk.h \
e_deskenv.h \
e_desklock.h \
e_deskmirror.h \
e_dialog.h \
e_dnd.h \
e_dpms.h \
e_desktop_editor.h \
e_entry.h \
e_entry_dialog.h \
e_env.h \
e_error.h \
e_exec.h \
e_exehist.h \
e_filereg.h \
e_flowlayout.h \
e_fm_custom.h \
e_fm_device.h \
e_fm.h \
e_fm_mime.h \
e_fm_op.h \
e_fm_op_registry.h \
e_fm_prop.h \
e_fm_shared_codec.h \
e_fm_shared_device.h \
e_fm_shared_types.h \
e_focus.h \
e_font.h \
e_gadcon.h \
e_gadcon_popup.h \
e_grabinput.h \
e_grab_dialog.h \
e.h \
e_hints.h \
e_icon.h \
e_ilist.h \
e_import_config_dialog.h \
e_import_dialog.h \
e_includes.h \
e_init.h \
e_int_border_locks.h \
e_int_border_menu.h \
e_int_border_prop.h \
e_int_border_remember.h \
e_int_config_modules.h \
e_int_gadcon_config.h \
e_intl_data.h \
e_intl.h \
e_int_menus.h \
e_int_shelf_config.h \
e_int_toolbar_config.h \
e_ipc_codec.h \
e_ipc.h \
e_layout.h \
e_livethumb.h \
e_log.h \
e_manager.h \
e_maximize.h \
e_menu.h \
e_mmx.h \
e_module.h \
e_mouse.h \
e_moveresize.h \
e_msgbus.h \
e_notification.h \
e_msg.h \
e_obj_dialog.h \
e_object.h \
e_order.h \
e_pan.h \
e_path.h \
e_place.h \
e_pointer.h \
e_popup.h \
e_powersave.h \
e_prefix.h \
e_randr.h \
e_remember.h \
e_resist.h \
e_scale.h \
e_screensaver.h \
e_scrollframe.h \
e_sha1.h \
e_shelf.h \
e_signals.h \
e_slidecore.h \
e_slider.h \
e_slidesel.h \
e_spectrum.h \
e_startup.h \
e_stolen.h \
e_sys.h \
e_table.h \
e_test.h \
e_theme_about.h \
e_theme.h \
e_thumb.h \
e_toolbar.h \
e_update.h \
e_user.h \
e_utils.h \
e_widget_aspect.h \
e_widget_button.h \
e_widget_check.h \
e_widget_color_well.h \
e_widget_config_list.h \
e_widget_csel.h \
e_widget_cslider.h \
e_widget_bgpreview.h \
e_widget_entry.h \
e_widget_filepreview.h \
e_widget_flist.h \
e_widget_font_preview.h \
e_widget_framelist.h \
e_widget_frametable.h \
e_widget_fsel.h \
e_widget.h \
e_widget_ilist.h \
e_widget_image.h \
e_widget_label.h \
e_widget_list.h \
e_widget_preview.h \
e_widget_radio.h \
e_widget_scrollframe.h \
e_widget_slider.h \
e_widget_spectrum.h \
e_widget_table.h \
e_widget_textblock.h \
e_widget_toolbar.h \
e_widget_toolbook.h \
e_win.h \
e_xinerama.h \
e_xkb.h \
e_xsettings.h \
e_zoomap.h \
e_zone.h
if HAVE_WAYLAND_CLIENTS
ENLIGHTENMENTHEADERS += \
e_comp_wl.h \
e_surface.h
endif
enlightenment_src = \
e_about.c \
e_acpi.c \
e_alert.c \
e_actions.c \
e_atoms.c \
e_backlight.c \
e_bg.c \
e_bindings.c \
e_border.c \
e_box.c \
e_canvas.c \
e_color.c \
e_color_class.c \
e_color_dialog.c \
e_comp.c \
e_comp_cfdata.c \
e_comp_render_update.c \
e_config.c \
e_config_data.c \
e_config_dialog.c \
e_configure.c \
e_confirm_dialog.c \
e_container.c \
e_datastore.c \
e_dbusmenu.c \
e_desk.c \
e_deskenv.c \
e_desklock.c \
e_deskmirror.c \
e_dialog.c \
e_dnd.c \
e_dpms.c \
e_desktop_editor.c \
e_entry.c \
e_entry_dialog.c \
e_env.c \
e_error.c \
e_exec.c \
e_exehist.c \
e_filereg.c \
e_flowlayout.c \
e_fm.c \
e_fm_custom.c \
e_fm_device.c \
e_fm_mime.c \
e_fm_op_registry.c \
e_fm_prop.c \
e_fm_shared_codec.c \
e_fm_shared_device.c \
e_focus.c \
e_font.c \
e_gadcon.c \
e_gadcon_popup.c \
e_grabinput.c \
e_grab_dialog.c \
e_hints.c \
e_icon.c \
e_ilist.c \
e_import_config_dialog.c \
e_import_dialog.c \
e_init.c \
e_int_border_locks.c \
e_int_border_menu.c \
e_int_border_prop.c \
e_int_border_remember.c \
e_int_config_modules.c \
e_int_gadcon_config.c \
e_intl.c \
e_intl_data.c \
e_int_menus.c \
e_int_shelf_config.c \
e_int_toolbar_config.c \
e_ipc.c \
e_ipc_codec.c \
e_layout.c \
e_livethumb.c \
e_log.c \
e_manager.c \
e_maximize.c \
e_menu.c \
e_module.c \
e_mouse.c \
e_moveresize.c \
e_msgbus.c \
e_notification.c \
e_msg.c \
e_obj_dialog.c \
e_object.c \
e_order.c \
e_pan.c \
e_path.c \
e_place.c \
e_pointer.c \
e_popup.c \
e_powersave.c \
e_prefix.c \
e_randr.c \
e_remember.c \
e_resist.c \
e_scale.c \
e_screensaver.c \
e_scrollframe.c \
e_sha1.c \
e_shelf.c \
e_signals.c \
e_slidecore.c \
e_slider.c \
e_slidesel.c \
e_spectrum.c \
e_startup.c \
e_stolen.c \
e_sys.c \
e_table.c \
e_test.c \
e_theme_about.c \
e_theme.c \
e_thumb.c \
e_toolbar.c \
e_update.c \
e_user.c \
e_utils.c \
e_widget_aspect.c \
e_widget_button.c \
e_widget.c \
e_widget_check.c \
e_widget_color_well.c \
e_widget_config_list.c \
e_widget_csel.c \
e_widget_cslider.c \
e_widget_bgpreview.c \
e_widget_entry.c \
e_widget_filepreview.c \
e_widget_flist.c \
e_widget_font_preview.c \
e_widget_framelist.c \
e_widget_frametable.c \
e_widget_fsel.c \
e_widget_ilist.c \
e_widget_image.c \
e_widget_label.c \
e_widget_list.c \
e_widget_preview.c \
e_widget_radio.c \
e_widget_scrollframe.c \
e_widget_slider.c \
e_widget_spectrum.c \
e_widget_table.c \
e_widget_textblock.c \
e_widget_toolbar.c \
e_widget_toolbook.c \
e_win.c \
e_xinerama.c \
e_xkb.c \
e_xsettings.c \
e_zoomap.c \
e_zone.c \
$(ENLIGHTENMENTHEADERS)
if HAVE_WAYLAND_CLIENTS
enlightenment_src += \
e_comp_wl.c \
e_surface.c
endif
enlightenment_CFLAGS = $(AM_CPPFLAGS) @WAYLAND_CFLAGS@ @WAYLAND_EGL_CFLAGS@
enlightenment_CPPFLAGS = $(AM_CPPFLAGS) -DE_LOGGING=1
enlightenment_SOURCES = \
e_main.c \
$(enlightenment_src)
enlightenment_LDFLAGS = -export-dynamic
enlightenment_LDADD = @e_libs@ @dlopen_libs@ @cf_libs@ @VALGRIND_LIBS@ @WAYLAND_LIBS@ @WAYLAND_EGL_LIBS@ -lm
enlightenment_imc_SOURCES = \
e.h \
e_config_data.c \
e_imc_main.c \
e_intl_data.c
enlightenment_imc_LDADD = @E_IMC_LIBS@
enlightenment_start_SOURCES = \
e_start_main.c
enlightenment_start_CFLAGS = $(AM_CPPFLAGS) @E_START_CFLAGS@
enlightenment_start_LDADD = @dlopen_libs@ @E_START_LIBS@
enlightenment_thumb_SOURCES = \
e_sha1.c \
e_thumb_main.c \
e_user.c
enlightenment_thumb_LDADD = @E_THUMB_LIBS@
enlightenment_fm_op_SOURCES = \
e_fm_op.c
enlightenment_fm_op_LDADD = @E_FM_OP_LIBS@ -lm
enlightenment_sys_SOURCES = \
e_sys_main.c e_sys_l2ping.c
enlightenment_sys_LDADD = @SUID_LDFLAGS@ @E_SYS_LIBS@ @BLUEZ_LIBS@
enlightenment_sys_CFLAGS = @SUID_CFLAGS@ @E_SYS_CFLAGS@ @BLUEZ_CFLAGS@
if HAVE_EEZE
enlightenment_backlight_SOURCES = \
e_backlight_main.c
enlightenment_backlight_CFLAGS = @SUID_CFLAGS@ @EEZE_CFLAGS@
enlightenment_backlight_LDADD = @SUID_LDFLAGS@ @EEZE_LIBS@
endif
enlightenment_alert_SOURCES = \
e_alert_main.c
enlightenment_alert_LDADD = @E_ALERT_LIBS@
enlightenment_alert_CFLAGS = @E_ALERT_CFLAGS@
enlightenment_filemanager_SOURCES = e_fm_cmdline.c
enlightenment_filemanager_LDADD = @E_FM_CMDLINE_LIBS@
enlightenment_filemanager_CFLAGS = @E_FM_CMDLINE_CFLAGS@
enlightenment_open_SOURCES = e_open.c
enlightenment_open_LDADD = @E_OPEN_LIBS@
enlightenment_open_CFLAGS = @E_OPEN_CFLAGS@
enlightenment_static_grabber_SOURCES = e_static_grab.c
enlightenment_static_grabber_LDADD = @E_GRABBER_LIBS@
enlightenment_static_grabber_CFLAGS = @E_GRABBER_CFLAGS@
# HACK! why install-data-hook? install-exec-hook is run after bin_PROGRAMS
# and before internal_bin_PROGRAMS are installed. install-data-hook is
# run after both
setuid_root_mode = a=rx,u+xs
if HAVE_EEZE
install-data-hook:
@chmod $(setuid_root_mode) $(DESTDIR)$(libdir)/enlightenment/utils/enlightenment_sys$(EXEEXT) || true
@chmod $(setuid_root_mode) $(DESTDIR)$(libdir)/enlightenment/utils/enlightenment_backlight$(EXEEXT) || true
else
install-data-hook:
@chmod $(setuid_root_mode) $(DESTDIR)$(libdir)/enlightenment/utils/enlightenment_sys$(EXEEXT) || true
endif
installed_headersdir = $(prefix)/include/enlightenment
installed_headers_DATA = $(ENLIGHTENMENTHEADERS)

476
src/bin/Makefile.mk Normal file
View File

@ -0,0 +1,476 @@
DISTCLEANFILES += src/bin/e_fm_shared_types.h
E_CPPFLAGS = \
-I$(top_builddir) \
-I$(top_builddir)/src/bin \
-I$(top_srcdir) \
-I$(top_srcdir)/src/bin \
@e_cflags@ \
@cf_cflags@ \
@VALGRIND_CFLAGS@ \
@EDJE_DEF@ \
@WAYLAND_CFLAGS@ \
@WAYLAND_EGL_CFLAGS@ \
-DE_BINDIR=\"$(bindir)\" \
-DPACKAGE_BIN_DIR=\"@PACKAGE_BIN_DIR@\" \
-DPACKAGE_LIB_DIR=\"@PACKAGE_LIB_DIR@\" \
-DPACKAGE_DATA_DIR=\"@PACKAGE_DATA_DIR@\" \
-DLOCALE_DIR=\"@LOCALE_DIR@\" \
-DPACKAGE_SYSCONF_DIR=\"@PACKAGE_SYSCONF_DIR@\"
bin_PROGRAMS = \
src/bin/enlightenment \
src/bin/enlightenment_imc \
src/bin/enlightenment_start \
src/bin/enlightenment_filemanager \
src/bin/enlightenment_open
internal_bindir = $(libdir)/enlightenment/utils
internal_bin_PROGRAMS = \
src/bin/enlightenment_fm_op \
src/bin/enlightenment_sys \
src/bin/enlightenment_thumb \
src/bin/enlightenment_alert \
src/bin/enlightenment_static_grabber
if HAVE_EEZE
internal_bin_PROGRAMS += src/bin/enlightenment_backlight
endif
ENLIGHTENMENTHEADERS = \
src/bin/e_about.h \
src/bin/e_acpi.h \
src/bin/e_actions.h \
src/bin/e_alert.h \
src/bin/e_atoms.h \
src/bin/e_auth.h \
src/bin/e_backlight.h \
src/bin/e_bg.h \
src/bin/e_bindings.h \
src/bin/e_box.h \
src/bin/e_canvas.h \
src/bin/e_client.h \
src/bin/e_client.x \
src/bin/e_color_class.h \
src/bin/e_color_dialog.h \
src/bin/e_color.h \
src/bin/e_comp.h \
src/bin/e_comp_canvas.h \
src/bin/e_comp_cfdata.h \
src/bin/e_comp_object.h \
src/bin/e_comp_x.h \
src/bin/e_config_data.h \
src/bin/e_config_dialog.h \
src/bin/e_config.h \
src/bin/e_configure.h \
src/bin/e_confirm_dialog.h \
src/bin/e_datastore.h \
src/bin/e_dbusmenu.h \
src/bin/e_desk.h \
src/bin/e_deskenv.h \
src/bin/e_desklock.h \
src/bin/e_deskmirror.h \
src/bin/e_dialog.h \
src/bin/e_dnd.h \
src/bin/e_dpms.h \
src/bin/e_desktop_editor.h \
src/bin/e_entry.h \
src/bin/e_entry_dialog.h \
src/bin/e_env.h \
src/bin/e_error.h \
src/bin/e_exec.h \
src/bin/e_exehist.h \
src/bin/e_filereg.h \
src/bin/e_flowlayout.h \
src/bin/e_fm_custom.h \
src/bin/e_fm_device.h \
src/bin/e_fm.h \
src/bin/e_fm_mime.h \
src/bin/e_fm_op.h \
src/bin/e_fm_op_registry.h \
src/bin/e_fm_prop.h \
src/bin/e_fm_shared_codec.h \
src/bin/e_fm_shared_device.h \
src/bin/e_fm_shared_types.h \
src/bin/e_focus.h \
src/bin/e_font.h \
src/bin/e_gadcon.h \
src/bin/e_gadcon_popup.h \
src/bin/e_grabinput.h \
src/bin/e_grab_dialog.h \
src/bin/e.h \
src/bin/e_hints.h \
src/bin/e_icon.h \
src/bin/e_ilist.h \
src/bin/e_import_config_dialog.h \
src/bin/e_import_dialog.h \
src/bin/e_includes.h \
src/bin/e_init.h \
src/bin/e_int_client_locks.h \
src/bin/e_int_client_menu.h \
src/bin/e_int_client_prop.h \
src/bin/e_int_client_remember.h \
src/bin/e_int_config_modules.h \
src/bin/e_int_gadcon_config.h \
src/bin/e_intl_data.h \
src/bin/e_intl.h \
src/bin/e_int_menus.h \
src/bin/e_int_shelf_config.h \
src/bin/e_int_toolbar_config.h \
src/bin/e_ipc_codec.h \
src/bin/e_ipc.h \
src/bin/e_layout.h \
src/bin/e_livethumb.h \
src/bin/e_log.h \
src/bin/e_manager.h \
src/bin/e_maximize.h \
src/bin/e_menu.h \
src/bin/e_mmx.h \
src/bin/e_module.h \
src/bin/e_mouse.h \
src/bin/e_moveresize.h \
src/bin/e_msgbus.h \
src/bin/e_notification.h \
src/bin/e_msg.h \
src/bin/e_obj_dialog.h \
src/bin/e_object.h \
src/bin/e_order.h \
src/bin/e_pan.h \
src/bin/e_path.h \
src/bin/e_pixmap.h \
src/bin/e_place.h \
src/bin/e_pointer.h \
src/bin/e_powersave.h \
src/bin/e_prefix.h \
src/bin/e_randr.h \
src/bin/e_remember.h \
src/bin/e_resist.h \
src/bin/e_scale.h \
src/bin/e_screensaver.h \
src/bin/e_scrollframe.h \
src/bin/e_sha1.h \
src/bin/e_shelf.h \
src/bin/e_signals.h \
src/bin/e_slidecore.h \
src/bin/e_slider.h \
src/bin/e_slidesel.h \
src/bin/e_spectrum.h \
src/bin/e_startup.h \
src/bin/e_sys.h \
src/bin/e_table.h \
src/bin/e_test.h \
src/bin/e_theme_about.h \
src/bin/e_theme.h \
src/bin/e_thumb.h \
src/bin/e_toolbar.h \
src/bin/e_update.h \
src/bin/e_user.h \
src/bin/e_utils.h \
src/bin/e_widget_aspect.h \
src/bin/e_widget_button.h \
src/bin/e_widget_check.h \
src/bin/e_widget_color_well.h \
src/bin/e_widget_config_list.h \
src/bin/e_widget_csel.h \
src/bin/e_widget_cslider.h \
src/bin/e_widget_bgpreview.h \
src/bin/e_widget_entry.h \
src/bin/e_widget_filepreview.h \
src/bin/e_widget_flist.h \
src/bin/e_widget_font_preview.h \
src/bin/e_widget_framelist.h \
src/bin/e_widget_frametable.h \
src/bin/e_widget_fsel.h \
src/bin/e_widget.h \
src/bin/e_widget_ilist.h \
src/bin/e_widget_image.h \
src/bin/e_widget_label.h \
src/bin/e_widget_list.h \
src/bin/e_widget_preview.h \
src/bin/e_widget_radio.h \
src/bin/e_widget_scrollframe.h \
src/bin/e_widget_slider.h \
src/bin/e_widget_spectrum.h \
src/bin/e_widget_table.h \
src/bin/e_widget_textblock.h \
src/bin/e_widget_toolbar.h \
src/bin/e_widget_toolbook.h \
src/bin/e_win.h \
src/bin/e_xinerama.h \
src/bin/e_xkb.h \
src/bin/e_xsettings.h \
src/bin/e_zoomap.h \
src/bin/e_zone.h
if HAVE_WAYLAND_CLIENTS
ENLIGHTENMENTHEADERS += \
src/bin/e_comp_wl.h
endif
enlightenment_src = \
src/bin/e_about.c \
src/bin/e_acpi.c \
src/bin/e_actions.c \
src/bin/e_atoms.c \
src/bin/e_auth.c \
src/bin/e_backlight.c \
src/bin/e_bg.c \
src/bin/e_bindings.c \
src/bin/e_box.c \
src/bin/e_canvas.c \
src/bin/e_client.c \
src/bin/e_color.c \
src/bin/e_color_class.c \
src/bin/e_color_dialog.c \
src/bin/e_comp.c \
src/bin/e_comp_canvas.c \
src/bin/e_comp_cfdata.c \
src/bin/e_comp_object.c \
src/bin/e_config.c \
src/bin/e_config_data.c \
src/bin/e_config_dialog.c \
src/bin/e_configure.c \
src/bin/e_confirm_dialog.c \
src/bin/e_datastore.c \
src/bin/e_dbusmenu.c \
src/bin/e_desk.c \
src/bin/e_deskenv.c \
src/bin/e_desklock.c \
src/bin/e_deskmirror.c \
src/bin/e_dialog.c \
src/bin/e_dnd.c \
src/bin/e_dpms.c \
src/bin/e_desktop_editor.c \
src/bin/e_entry.c \
src/bin/e_entry_dialog.c \
src/bin/e_env.c \
src/bin/e_error.c \
src/bin/e_exec.c \
src/bin/e_exehist.c \
src/bin/e_filereg.c \
src/bin/e_flowlayout.c \
src/bin/e_fm.c \
src/bin/e_fm_custom.c \
src/bin/e_fm_device.c \
src/bin/e_fm_mime.c \
src/bin/e_fm_op_registry.c \
src/bin/e_fm_prop.c \
src/bin/e_fm_shared_codec.c \
src/bin/e_fm_shared_device.c \
src/bin/e_focus.c \
src/bin/e_font.c \
src/bin/e_gadcon.c \
src/bin/e_gadcon_popup.c \
src/bin/e_grabinput.c \
src/bin/e_grab_dialog.c \
src/bin/e_hints.c \
src/bin/e_icon.c \
src/bin/e_ilist.c \
src/bin/e_import_config_dialog.c \
src/bin/e_import_dialog.c \
src/bin/e_init.c \
src/bin/e_int_client_locks.c \
src/bin/e_int_client_menu.c \
src/bin/e_int_client_prop.c \
src/bin/e_int_client_remember.c \
src/bin/e_int_config_modules.c \
src/bin/e_int_config_comp.c \
src/bin/e_int_config_comp_match.c \
src/bin/e_int_gadcon_config.c \
src/bin/e_intl.c \
src/bin/e_intl_data.c \
src/bin/e_int_menus.c \
src/bin/e_int_shelf_config.c \
src/bin/e_int_toolbar_config.c \
src/bin/e_ipc.c \
src/bin/e_ipc_codec.c \
src/bin/e_layout.c \
src/bin/e_livethumb.c \
src/bin/e_log.c \
src/bin/e_manager.c \
src/bin/e_maximize.c \
src/bin/e_menu.c \
src/bin/e_module.c \
src/bin/e_mouse.c \
src/bin/e_moveresize.c \
src/bin/e_msgbus.c \
src/bin/e_notification.c \
src/bin/e_msg.c \
src/bin/e_obj_dialog.c \
src/bin/e_object.c \
src/bin/e_order.c \
src/bin/e_pan.c \
src/bin/e_path.c \
src/bin/e_pixmap.c \
src/bin/e_place.c \
src/bin/e_pointer.c \
src/bin/e_powersave.c \
src/bin/e_prefix.c \
src/bin/e_remember.c \
src/bin/e_resist.c \
src/bin/e_scale.c \
src/bin/e_screensaver.c \
src/bin/e_scrollframe.c \
src/bin/e_sha1.c \
src/bin/e_shelf.c \
src/bin/e_signals.c \
src/bin/e_slidecore.c \
src/bin/e_slider.c \
src/bin/e_slidesel.c \
src/bin/e_spectrum.c \
src/bin/e_startup.c \
src/bin/e_sys.c \
src/bin/e_table.c \
src/bin/e_test.c \
src/bin/e_theme_about.c \
src/bin/e_theme.c \
src/bin/e_thumb.c \
src/bin/e_toolbar.c \
src/bin/e_update.c \
src/bin/e_user.c \
src/bin/e_utils.c \
src/bin/e_widget_aspect.c \
src/bin/e_widget_button.c \
src/bin/e_widget.c \
src/bin/e_widget_check.c \
src/bin/e_widget_color_well.c \
src/bin/e_widget_config_list.c \
src/bin/e_widget_csel.c \
src/bin/e_widget_cslider.c \
src/bin/e_widget_bgpreview.c \
src/bin/e_widget_entry.c \
src/bin/e_widget_filepreview.c \
src/bin/e_widget_flist.c \
src/bin/e_widget_font_preview.c \
src/bin/e_widget_framelist.c \
src/bin/e_widget_frametable.c \
src/bin/e_widget_fsel.c \
src/bin/e_widget_ilist.c \
src/bin/e_widget_image.c \
src/bin/e_widget_label.c \
src/bin/e_widget_list.c \
src/bin/e_widget_preview.c \
src/bin/e_widget_radio.c \
src/bin/e_widget_scrollframe.c \
src/bin/e_widget_slider.c \
src/bin/e_widget_spectrum.c \
src/bin/e_widget_table.c \
src/bin/e_widget_textblock.c \
src/bin/e_widget_toolbar.c \
src/bin/e_widget_toolbook.c \
src/bin/e_win.c \
src/bin/e_xinerama.c \
src/bin/e_zoomap.c \
src/bin/e_zone.c \
$(ENLIGHTENMENTHEADERS)
if ! HAVE_WAYLAND_ONLY
enlightenment_src += \
src/bin/e_alert.c \
src/bin/e_comp_x.c \
src/bin/e_randr.c \
src/bin/e_xkb.c \
src/bin/e_xsettings.c
endif
if HAVE_WAYLAND_CLIENTS
enlightenment_src += \
src/bin/e_comp_wl.c
endif
src_bin_enlightenment_CPPFLAGS = $(E_CPPFLAGS) -DE_LOGGING=1 @WAYLAND_CFLAGS@ @WAYLAND_EGL_CFLAGS@ @ECORE_X_CFLAGS@ -DNEED_X=1
src_bin_enlightenment_SOURCES = \
src/bin/e_main.c \
$(enlightenment_src)
src_bin_enlightenment_LDFLAGS = -export-dynamic
src_bin_enlightenment_LDADD = @e_libs@ @dlopen_libs@ @cf_libs@ @VALGRIND_LIBS@ @WAYLAND_LIBS@ @WAYLAND_EGL_LIBS@ -lm @ECORE_X_LIBS@
src_bin_enlightenment_imc_SOURCES = \
src/bin/e.h \
src/bin/e_config_data.c \
src/bin/e_imc_main.c \
src/bin/e_intl_data.c
src_bin_enlightenment_imc_LDADD = @E_IMC_LIBS@
src_bin_enlightenment_imc_CPPFLAGS = $(E_CPPFLAGS)
src_bin_enlightenment_start_SOURCES = \
src/bin/e_start_main.c
src_bin_enlightenment_start_CPPFLAGS = $(E_CPPFLAGS) @E_START_CFLAGS@
src_bin_enlightenment_start_LDADD = @dlopen_libs@ @E_START_LIBS@
src_bin_enlightenment_thumb_SOURCES = \
src/bin/e_sha1.c \
src/bin/e_thumb_main.c \
src/bin/e_user.c
src_bin_enlightenment_thumb_LDADD = @E_THUMB_LIBS@
src_bin_enlightenment_thumb_CPPFLAGS = $(E_CPPFLAGS)
src_bin_enlightenment_fm_op_SOURCES = \
src/bin/e_fm_op.c
src_bin_enlightenment_fm_op_LDADD = @E_FM_OP_LIBS@ -lm
src_bin_enlightenment_fm_op_CPPFLAGS = $(E_CPPFLAGS)
src_bin_enlightenment_sys_SOURCES = \
src/bin/e_sys_main.c \
src/bin/e_sys_l2ping.c
src_bin_enlightenment_sys_LDADD = @SUID_LDFLAGS@ @E_SYS_LIBS@ @BLUEZ_LIBS@
src_bin_enlightenment_sys_CPPFLAGS = @SUID_CFLAGS@ @E_SYS_CFLAGS@ @BLUEZ_CFLAGS@ -DPACKAGE_SYSCONF_DIR=\"@PACKAGE_SYSCONF_DIR@\"
if HAVE_EEZE
src_bin_enlightenment_backlight_SOURCES = \
src/bin/e_backlight_main.c
src_bin_enlightenment_backlight_CPPFLAGS = @SUID_CFLAGS@ @EEZE_CFLAGS@
src_bin_enlightenment_backlight_LDADD = @SUID_LDFLAGS@ @EEZE_LIBS@
endif
src_bin_enlightenment_alert_SOURCES = \
src/bin/e_alert_main.c
src_bin_enlightenment_alert_LDADD = @E_ALERT_LIBS@
src_bin_enlightenment_alert_CPPFLAGS = @E_ALERT_CFLAGS@
src_bin_enlightenment_filemanager_SOURCES = \
src/bin/e_fm_cmdline.c
src_bin_enlightenment_filemanager_LDADD = @E_FM_CMDLINE_LIBS@
src_bin_enlightenment_filemanager_CPPFLAGS = @E_FM_CMDLINE_CFLAGS@
src_bin_enlightenment_open_SOURCES = \
src/bin/e_open.c
src_bin_enlightenment_open_LDADD = @E_OPEN_LIBS@
src_bin_enlightenment_open_CPPFLAGS = @E_OPEN_CFLAGS@
src_bin_enlightenment_static_grabber_SOURCES = \
src/bin/e_static_grab.c
src_bin_enlightenment_static_grabber_LDADD = @E_GRABBER_LIBS@
src_bin_enlightenment_static_grabber_CPPFLAGS = @E_GRABBER_CFLAGS@
include src/bin/e_fm/Makefile.mk
# HACK! why install-data-hook? install-exec-hook is run after bin_PROGRAMS
# and before internal_bin_PROGRAMS are installed. install-data-hook is
# run after both
setuid_root_mode = a=rx,u+xs
if HAVE_EEZE
enlightenment-sys-install-data-hook:
@chmod $(setuid_root_mode) $(DESTDIR)$(libdir)/enlightenment/utils/enlightenment_sys$(EXEEXT) || true
@chmod $(setuid_root_mode) $(DESTDIR)$(libdir)/enlightenment/utils/enlightenment_backlight$(EXEEXT) || true
else
enlightenment-sys-install-data-hook:
@chmod $(setuid_root_mode) $(DESTDIR)$(libdir)/enlightenment/utils/enlightenment_sys$(EXEEXT) || true
endif
installed_headersdir = $(prefix)/include/enlightenment
installed_headers_DATA = $(ENLIGHTENMENTHEADERS)
INSTALL_DATA_HOOKS += enlightenment-sys-install-data-hook
PHONIES += e enlightenment install-e install-enlightenment
e: $(bin_PROGRAMS)
enlightenment: e
install-e: install-binPROGRAMS
install-enlightenment: install-e

View File

@ -105,7 +105,6 @@ void *alloca (size_t);
# include <Evas_Engine_Buffer.h>
# include <Ecore.h>
# include <Ecore_Getopt.h>
# include <Ecore_X.h>
# include <Ecore_Evas.h>
# include <Ecore_Input.h>
# include <Ecore_Input_Evas.h>
@ -308,7 +307,8 @@ extern EAPI Eina_Bool e_nopause;
extern EAPI Eina_Bool e_precache_end;
extern EAPI Eina_Bool x_fatal;
EAPI void e_alert_composite_win(Ecore_X_Window root, Ecore_X_Window win);
extern EINTERN const char *e_first_frame;
extern EINTERN double e_first_frame_start_time;
//#define SMARTERR(args...) abort()
#define SMARTERRNR() return

View File

@ -7,14 +7,14 @@
/* externally accessible functions */
EAPI E_About *
e_about_new(E_Container *con)
e_about_new(E_Comp *c)
{
E_Obj_Dialog *od;
char buf[16384];
FILE *f;
Eina_Strbuf *tbuf;
od = e_obj_dialog_new(con, _("About Enlightenment"), "E", "_about");
od = e_obj_dialog_new(c, _("About Enlightenment"), "E", "_about");
if (!od) return NULL;
e_obj_dialog_obj_theme_set(od, "base/theme/about", "e/widgets/about/main");
e_obj_dialog_obj_part_text_set(od, "e.text.label", _("Close"));

View File

@ -6,7 +6,7 @@ typedef struct _E_Obj_Dialog E_About;
#ifndef E_ABOUT_H
#define E_ABOUT_H
EAPI E_About *e_about_new (E_Container *con);
EAPI E_About *e_about_new (E_Comp *c);
EAPI void e_about_show (E_About *about);
#endif

File diff suppressed because it is too large Load Diff

View File

@ -88,7 +88,7 @@ main(int argc, char **argv)
fprintf(stderr, "exit_gdb: %i\n", exit_gdb);
tmp = getenv("E18_TAINTED");
tmp = getenv("E19_TAINTED");
if (tmp && !strcmp(tmp, "NO"))
tainted = EINA_FALSE;
@ -554,7 +554,7 @@ _e_alert_draw_text(void)
"on. We were not able to generate a backtrace, check \n"
"if your 'sysactions.conf' has an 'gdb' action line.\n"
"\n"
"Please compile latest Git E18 and EFL with\n"
"Please compile latest Git E19 and EFL with\n"
"-g and -ggdb3 in your CFLAGS.\n");
}
else if (backtrace_str)
@ -562,9 +562,9 @@ _e_alert_draw_text(void)
snprintf(msg, sizeof(msg),
"This is not meant to happen and is likely a sign of \n"
"a bug in Enlightenment or the libraries it relies \n"
"on. You will find an backtrace of E18 (%d) in :\n"
"on. You will find an backtrace of E19 (%d) in :\n"
"'%s'\n"
"Before reporting issue, compile latest E18 and EFL\n"
"Before reporting issue, compile latest E19 and EFL\n"
"from Git with '-g -ggdb3' in your CFLAGS.\n"
"You can then report this crash on :\n"
"https://phab.enlightenment.org/maniphest/.\n",
@ -580,7 +580,7 @@ _e_alert_draw_text(void)
"recover to try and get your desktop back the way \n"
"it was.\n"
"\n"
"Please compile latest Git E18 and EFL with\n"
"Please compile latest Git E19 and EFL with\n"
"-g and -ggdb3 in your CFLAGS.\n", pid);
}
}
@ -592,7 +592,7 @@ _e_alert_draw_text(void)
"modules; before reporting this issue, please\n"
"unload them and try to see if the bug is still\n"
"there. Also update to latest Git and be sure to\n"
"compile E18 and EFL with -g and -ggdb3 in your CFLAGS");
"compile E19 and EFL with -g and -ggdb3 in your CFLAGS");
}
strcpy(warn, "");

View File

@ -2,7 +2,6 @@
/* Atoms */
EAPI Ecore_X_Atom E_ATOM_MANAGED = 0;
EAPI Ecore_X_Atom E_ATOM_CONTAINER = 0;
EAPI Ecore_X_Atom E_ATOM_ZONE = 0;
EAPI Ecore_X_Atom E_ATOM_DESK = 0;
EAPI Ecore_X_Atom E_ATOM_MAPPED = 0;
@ -20,7 +19,6 @@ e_atoms_init(void)
{
const char *atom_names[] = {
"__E_WINDOW_MANAGED",
"__E_WINDOW_CONTAINER",
"__E_WINDOW_ZONE",
"__E_WINDOW_DESK",
"__E_WINDOW_MAPPED",
@ -32,21 +30,20 @@ e_atoms_init(void)
"__E_ATOM_DESKTOP_FILE",
"E_ZONE_GEOMETRY"
};
Ecore_X_Atom atoms[12];
Ecore_X_Atom atoms[11];
ecore_x_atoms_get(atom_names, 12, atoms);
ecore_x_atoms_get(atom_names, 11, atoms);
E_ATOM_MANAGED = atoms[0];
E_ATOM_CONTAINER = atoms[1];
E_ATOM_ZONE = atoms[2];
E_ATOM_DESK = atoms[3];
E_ATOM_MAPPED = atoms[4];
E_ATOM_SHADE_DIRECTION = atoms[5];
E_ATOM_HIDDEN = atoms[6];
E_ATOM_BORDER_SIZE = atoms[7];
E_ATOM_WINDOW_STATE = atoms[8];
E_ATOM_WINDOW_STATE_CENTERED = atoms[9];
E_ATOM_DESKTOP_FILE = atoms[10];
E_ATOM_ZONE_GEOMETRY = atoms[11];
E_ATOM_ZONE = atoms[1];
E_ATOM_DESK = atoms[2];
E_ATOM_MAPPED = atoms[3];
E_ATOM_SHADE_DIRECTION = atoms[4];
E_ATOM_HIDDEN = atoms[5];
E_ATOM_BORDER_SIZE = atoms[6];
E_ATOM_WINDOW_STATE = atoms[7];
E_ATOM_WINDOW_STATE_CENTERED = atoms[8];
E_ATOM_DESKTOP_FILE = atoms[9];
E_ATOM_ZONE_GEOMETRY = atoms[10];
return 1;
}

View File

@ -7,7 +7,6 @@
extern EAPI Ecore_X_Atom E_ATOM_MANAGED;
/* basic window properties */
extern EAPI Ecore_X_Atom E_ATOM_CONTAINER;
extern EAPI Ecore_X_Atom E_ATOM_ZONE;
extern EAPI Ecore_X_Atom E_ATOM_DESK;
extern EAPI Ecore_X_Atom E_ATOM_MAPPED;

191
src/bin/e_auth.c Normal file
View File

@ -0,0 +1,191 @@
#include "e.h"
#ifdef HAVE_PAM
# include <security/pam_appl.h>
# include <pwd.h>
typedef struct E_Auth
{
struct
{
struct pam_conv conv;
pam_handle_t *handle;
} pam;
char user[4096];
char passwd[4096];
} E_Auth;
static pid_t _e_auth_child_pid = -1;
static char *
_auth_auth_get_current_user(void)
{
char *user;
struct passwd *pwent = NULL;
pwent = getpwuid(getuid());
user = strdup(pwent->pw_name);
return user;
}
static int
_auth_auth_pam_conv(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr)
{
int replies = 0;
E_Auth *da = (E_Auth *)appdata_ptr;
struct pam_response *reply = NULL;
reply = (struct pam_response *)malloc(sizeof(struct pam_response) * num_msg);
if (!reply) return PAM_CONV_ERR;
for (replies = 0; replies < num_msg; replies++)
{
switch (msg[replies]->msg_style)
{
case PAM_PROMPT_ECHO_ON:
reply[replies].resp_retcode = PAM_SUCCESS;
reply[replies].resp = strdup(da->user);
break;
case PAM_PROMPT_ECHO_OFF:
reply[replies].resp_retcode = PAM_SUCCESS;
reply[replies].resp = strdup(da->passwd);
break;
case PAM_ERROR_MSG:
case PAM_TEXT_INFO:
reply[replies].resp_retcode = PAM_SUCCESS;
reply[replies].resp = NULL;
break;
default:
free(reply);
return PAM_CONV_ERR;
}
}
*resp = reply;
return PAM_SUCCESS;
}
static int
_auth_pam_init(E_Auth *da)
{
int pamerr;
const char *pam_prof;
char *current_host;
char *current_user;
if (!da) return -1;
da->pam.conv.conv = _auth_auth_pam_conv;
da->pam.conv.appdata_ptr = da;
da->pam.handle = NULL;
/* try other pam profiles - and system-auth (login for fbsd users) is a fallback */
pam_prof = "login";
if (ecore_file_exists("/etc/pam.d/enlightenment"))
pam_prof = "enlightenment";
else if (ecore_file_exists("/etc/pam.d/xscreensaver"))
pam_prof = "xscreensaver";
else if (ecore_file_exists("/etc/pam.d/kscreensaver"))
pam_prof = "kscreensaver";
else if (ecore_file_exists("/etc/pam.d/system-auth"))
pam_prof = "system-auth";
else if (ecore_file_exists("/etc/pam.d/system"))
pam_prof = "system";
else if (ecore_file_exists("/etc/pam.d/xdm"))
pam_prof = "xdm";
else if (ecore_file_exists("/etc/pam.d/gdm"))
pam_prof = "gdm";
else if (ecore_file_exists("/etc/pam.d/kdm"))
pam_prof = "kdm";
if ((pamerr = pam_start(pam_prof, da->user, &(da->pam.conv),
&(da->pam.handle))) != PAM_SUCCESS)
return pamerr;
current_user = _auth_auth_get_current_user();
if ((pamerr = pam_set_item(da->pam.handle, PAM_USER, current_user)) != PAM_SUCCESS)
{
free(current_user);
return pamerr;
}
current_host = e_auth_hostname_get();
if ((pamerr = pam_set_item(da->pam.handle, PAM_RHOST, current_host)) != PAM_SUCCESS)
{
free(current_user);
free(current_host);
return pamerr;
}
free(current_user);
free(current_host);
return 0;
}
#endif
EAPI int
e_auth_begin(char *passwd)
{
#ifdef HAVE_PAM
/* child */
int pamerr;
E_Auth da;
char *current_user, *p;
struct sigaction action;
_e_auth_child_pid = fork();
if (_e_auth_child_pid > 0) return _e_auth_child_pid;
if (_e_auth_child_pid < 0) return -1;
action.sa_handler = SIG_DFL;
action.sa_flags = SA_ONSTACK | SA_NODEFER | SA_RESETHAND | SA_SIGINFO;
sigemptyset(&action.sa_mask);
sigaction(SIGSEGV, &action, NULL);
sigaction(SIGILL, &action, NULL);
sigaction(SIGFPE, &action, NULL);
sigaction(SIGBUS, &action, NULL);
sigaction(SIGABRT, &action, NULL);
current_user = _auth_auth_get_current_user();
eina_strlcpy(da.user, current_user, sizeof(da.user));
eina_strlcpy(da.passwd, passwd, sizeof(da.passwd));
/* security - null out passwd string once we are done with it */
for (p = passwd; *p; p++)
*p = 0;
da.pam.handle = NULL;
da.pam.conv.conv = NULL;
da.pam.conv.appdata_ptr = NULL;
pamerr = _auth_pam_init(&da);
if (pamerr != PAM_SUCCESS)
{
free(current_user);
exit(1);
}
pamerr = pam_authenticate(da.pam.handle, 0);
pam_end(da.pam.handle, pamerr);
/* security - null out passwd string once we are done with it */
memset(da.passwd, 0, sizeof(da.passwd));
if (pamerr == PAM_SUCCESS)
{
free(current_user);
exit(0);
}
free(current_user);
exit(-1);
#endif
return 0;
}
EAPI char *
e_auth_hostname_get(void)
{
return strdup("localhost");
}

7
src/bin/e_auth.h Normal file
View File

@ -0,0 +1,7 @@
#ifndef E_AUTH_H
#define E_AUTH_H
EAPI int e_auth_begin(char *passwd);
EAPI char *e_auth_hostname_get(void);
#endif

View File

@ -62,22 +62,22 @@ e_backlight_init(void)
(E_EVENT_CONFIG_MODE_CHANGED, _e_backlight_handler, NULL);
_e_backlight_handler_border_fullscreen = ecore_event_handler_add
(E_EVENT_BORDER_FULLSCREEN, _e_backlight_handler, NULL);
(E_EVENT_CLIENT_FULLSCREEN, _e_backlight_handler, NULL);
_e_backlight_handler_border_unfullscreen = ecore_event_handler_add
(E_EVENT_BORDER_UNFULLSCREEN, _e_backlight_handler, NULL);
(E_EVENT_CLIENT_UNFULLSCREEN, _e_backlight_handler, NULL);
_e_backlight_handler_border_remove = ecore_event_handler_add
(E_EVENT_BORDER_REMOVE, _e_backlight_handler, NULL);
(E_EVENT_CLIENT_REMOVE, _e_backlight_handler, NULL);
_e_backlight_handler_border_iconify = ecore_event_handler_add
(E_EVENT_BORDER_ICONIFY, _e_backlight_handler, NULL);
(E_EVENT_CLIENT_ICONIFY, _e_backlight_handler, NULL);
_e_backlight_handler_border_uniconify = ecore_event_handler_add
(E_EVENT_BORDER_UNICONIFY, _e_backlight_handler, NULL);
(E_EVENT_CLIENT_UNICONIFY, _e_backlight_handler, NULL);
_e_backlight_handler_border_desk_set = ecore_event_handler_add
(E_EVENT_BORDER_DESK_SET, _e_backlight_handler, NULL);
(E_EVENT_CLIENT_DESK_SET, _e_backlight_handler, NULL);
_e_backlight_handler_desk_show = ecore_event_handler_add
(E_EVENT_DESK_SHOW, _e_backlight_handler, NULL);
@ -179,24 +179,16 @@ e_backlight_exists(void)
EAPI void
e_backlight_update(void)
{
Eina_List *m, *c, *z;
E_Manager *man;
E_Container *con;
const Eina_List *l, *ll;
E_Comp *c;
E_Zone *zone;
if (bl_avail == EINA_FALSE) return;
EINA_LIST_FOREACH(e_manager_list(), m, man)
{
EINA_LIST_FOREACH(man->containers, c, con)
{
EINA_LIST_FOREACH(con->zones, z, zone)
{
EINA_LIST_FOREACH(e_comp_list(), l, c)
EINA_LIST_FOREACH(c->zones, ll, zone)
_e_backlight_update(zone);
}
}
}
}
EAPI void
e_backlight_level_set(E_Zone *zone, double val, double tim)
@ -292,14 +284,17 @@ static void
_e_backlight_update(E_Zone *zone)
{
double x_bl = -1.0;
#ifndef WAYLAND_ONLY
Ecore_X_Window root;
Ecore_X_Randr_Output *out;
int i, num = 0;
root = zone->container->manager->root;
root = zone->comp->man->root;
// try randr
if (root && ecore_x_randr_output_backlight_available())
{
out = ecore_x_randr_window_outputs_get(root, &num);
if ((out) && (num > 0) && (ecore_x_randr_output_backlight_available()))
if ((out) && (num > 0))
{
char *name;
const char *s;
@ -323,12 +318,14 @@ _e_backlight_update(E_Zone *zone)
x_bl = ecore_x_randr_output_backlight_level_get(root, out[0]);
}
free(out);
}
if (x_bl >= 0.0)
{
bl_val = x_bl;
sysmode = MODE_RANDR;
return;
}
#endif
#ifdef HAVE_EEZE
_bl_sys_find();
if (bl_sysval)
@ -343,6 +340,9 @@ _e_backlight_update(E_Zone *zone)
static void
_e_backlight_set(E_Zone *zone, double val)
{
#ifdef WAYLAND_ONLY
if (0)
#else
if (sysmode == MODE_RANDR)
{
Ecore_X_Window root;
@ -350,7 +350,7 @@ _e_backlight_set(E_Zone *zone, double val)
int num = 0, i;
char *name;
root = zone->container->manager->root;
root = zone->comp->man->root;
out = ecore_x_randr_window_outputs_get(root, &num);
if ((out) && (num > 0))
{
@ -377,6 +377,7 @@ _e_backlight_set(E_Zone *zone, double val)
}
free(out);
}
#endif
#ifdef HAVE_EEZE
else if (sysmode == MODE_SYS)
{

View File

@ -76,7 +76,7 @@ e_bg_shutdown(void)
* The most specific match will be returned
*/
EAPI const E_Config_Desktop_Background *
e_bg_config_get(int container_num, int zone_num, int desk_x, int desk_y)
e_bg_config_get(int manager_num, int zone_num, int desk_x, int desk_y)
{
Eina_List *l, *entries;
E_Config_Desktop_Background *bg = NULL, *cfbg = NULL;
@ -85,7 +85,7 @@ e_bg_config_get(int container_num, int zone_num, int desk_x, int desk_y)
int current_spec = 0; /* how specific the setting is - we want the least general one that applies */
/* look for desk specific background. */
if (container_num >= 0 || zone_num >= 0 || desk_x >= 0 || desk_y >= 0)
if (manager_num >= 0 || zone_num >= 0 || desk_x >= 0 || desk_y >= 0)
{
EINA_LIST_FOREACH(e_config->desktop_backgrounds, l, cfbg)
{
@ -93,8 +93,8 @@ e_bg_config_get(int container_num, int zone_num, int desk_x, int desk_y)
if (!cfbg) continue;
spec = 0;
if (cfbg->container == container_num) spec++;
else if (cfbg->container >= 0)
if (cfbg->manager == manager_num) spec++;
else if (cfbg->manager >= 0)
continue;
if (cfbg->zone == zone_num) spec++;
else if (cfbg->zone >= 0)
@ -144,13 +144,13 @@ e_bg_config_get(int container_num, int zone_num, int desk_x, int desk_y)
}
EAPI Eina_Stringshare *
e_bg_file_get(int container_num, int zone_num, int desk_x, int desk_y)
e_bg_file_get(int manager_num, int zone_num, int desk_x, int desk_y)
{
const E_Config_Desktop_Background *cfbg;
const char *bgfile = NULL;
int ok = 0;
cfbg = e_bg_config_get(container_num, zone_num, desk_x, desk_y);
cfbg = e_bg_config_get(manager_num, zone_num, desk_x, desk_y);
/* fall back to default */
if (cfbg)
@ -208,9 +208,9 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition)
desk = e_desk_current_get(zone);
if (desk)
bgfile = e_bg_file_get(zone->container->num, zone->num, desk->x, desk->y);
bgfile = e_bg_file_get(zone->comp->num, zone->num, desk->x, desk->y);
else
bgfile = e_bg_file_get(zone->container->num, zone->num, -1, -1);
bgfile = e_bg_file_get(zone->comp->num, zone->num, -1, -1);
if (zone->bg_object)
{
@ -233,39 +233,43 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition)
zone->bg_object = NULL;
E_FREE_FUNC(zone->transition_object, evas_object_del);
}
o = edje_object_add(zone->container->bg_evas);
o = edje_object_add(zone->comp->evas);
evas_object_repeat_events_set(o, 1);
zone->transition_object = o;
evas_object_name_set(zone->transition_object, "zone->transition_object");
/* FIXME: segv if zone is deleted while up??? */
evas_object_data_set(o, "e_zone", zone);
snprintf(buf, sizeof(buf), "e/transitions/%s", trans);
e_theme_edje_object_set(o, "base/theme/transitions", buf);
edje_object_signal_callback_add(o, "e,state,done", "*", _e_bg_signal, zone);
evas_object_layer_set(o, E_COMP_CANVAS_LAYER_BG);
evas_object_move(o, zone->x, zone->y);
evas_object_resize(o, zone->w, zone->h);
evas_object_layer_set(o, E_LAYER_BG);
evas_object_clip_set(o, zone->bg_clip_object);
evas_object_show(o);
}
if (eina_str_has_extension(bgfile, ".edj"))
{
o = edje_object_add(zone->container->bg_evas);
o = edje_object_add(zone->comp->evas);
edje_object_file_set(o, bgfile, "e/desktop/background");
if (edje_object_data_get(o, "noanimation"))
edje_object_animation_set(o, EINA_FALSE);
}
else
{
o = e_icon_add(zone->container->bg_evas);
o = e_icon_add(zone->comp->evas);
e_icon_file_key_set(o, bgfile, NULL);
e_icon_fill_inside_set(o, 0);
}
evas_object_data_set(o, "e_zone", zone);
evas_object_repeat_events_set(o, 1);
zone->bg_object = o;
evas_object_name_set(zone->bg_object, "zone->bg_object");
if (transition == E_BG_TRANSITION_NONE)
{
evas_object_move(o, zone->x, zone->y);
evas_object_resize(o, zone->w, zone->h);
evas_object_layer_set(o, E_COMP_CANVAS_LAYER_BG);
evas_object_layer_set(o, E_LAYER_BG);
}
evas_object_clip_set(o, zone->bg_clip_object);
evas_object_show(o);
@ -285,9 +289,9 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition)
if (zone->bg_object) evas_object_name_set(zone->bg_object, "zone->bg_object");
if (zone->prev_bg_object) evas_object_name_set(zone->prev_bg_object, "zone->prev_bg_object");
if (zone->transition_object) evas_object_name_set(zone->transition_object, "zone->transition_object");
if (zone->comp_zone) e_comp_zone_update(zone->comp_zone);
evas_object_move(zone->transition_object, zone->x, zone->y);
evas_object_resize(zone->transition_object, zone->w, zone->h);
e_comp_canvas_zone_update(zone);
end:
eina_stringshare_del(bgfile);
}
@ -322,7 +326,7 @@ e_bg_default_set(const char *file)
e_config->desktop_default_background = NULL;
ev = E_NEW(E_Event_Bg_Update, 1);
ev->container = -1;
ev->manager = -1;
ev->zone = -1;
ev->desk_x = -1;
ev->desk_y = -1;
@ -330,7 +334,7 @@ e_bg_default_set(const char *file)
}
EAPI void
e_bg_add(int container, int zone, int desk_x, int desk_y, const char *file)
e_bg_add(int manager, int zone, int desk_x, int desk_y, const char *file)
{
const Eina_List *l;
E_Config_Desktop_Background *cfbg;
@ -341,7 +345,7 @@ e_bg_add(int container, int zone, int desk_x, int desk_y, const char *file)
EINA_LIST_FOREACH(e_config->desktop_backgrounds, l, cfbg)
{
if ((cfbg) &&
(cfbg->container == container) &&
(cfbg->manager == manager) &&
(cfbg->zone == zone) &&
(cfbg->desk_x == desk_x) &&
(cfbg->desk_y == desk_y) &&
@ -352,9 +356,9 @@ e_bg_add(int container, int zone, int desk_x, int desk_y, const char *file)
}
}
e_bg_del(container, zone, desk_x, desk_y);
e_bg_del(manager, zone, desk_x, desk_y);
cfbg = E_NEW(E_Config_Desktop_Background, 1);
cfbg->container = container;
cfbg->manager = manager;
cfbg->zone = zone;
cfbg->desk_x = desk_x;
cfbg->desk_y = desk_y;
@ -364,7 +368,7 @@ e_bg_add(int container, int zone, int desk_x, int desk_y, const char *file)
e_filereg_register(cfbg->file);
ev = E_NEW(E_Event_Bg_Update, 1);
ev->container = container;
ev->manager = manager;
ev->zone = zone;
ev->desk_x = desk_x;
ev->desk_y = desk_y;
@ -372,7 +376,7 @@ e_bg_add(int container, int zone, int desk_x, int desk_y, const char *file)
}
EAPI void
e_bg_del(int container, int zone, int desk_x, int desk_y)
e_bg_del(int manager, int zone, int desk_x, int desk_y)
{
Eina_List *l;
E_Config_Desktop_Background *cfbg;
@ -381,7 +385,7 @@ e_bg_del(int container, int zone, int desk_x, int desk_y)
EINA_LIST_FOREACH(e_config->desktop_backgrounds, l, cfbg)
{
if (!cfbg) continue;
if ((cfbg->container == container) && (cfbg->zone == zone) &&
if ((cfbg->manager == manager) && (cfbg->zone == zone) &&
(cfbg->desk_x == desk_x) && (cfbg->desk_y == desk_y))
{
e_config->desktop_backgrounds = eina_list_remove_list(e_config->desktop_backgrounds, l);
@ -393,7 +397,7 @@ e_bg_del(int container, int zone, int desk_x, int desk_y)
}
ev = E_NEW(E_Event_Bg_Update, 1);
ev->container = container;
ev->manager = manager;
ev->zone = zone;
ev->desk_x = desk_x;
ev->desk_y = desk_y;
@ -403,22 +407,14 @@ e_bg_del(int container, int zone, int desk_x, int desk_y)
EAPI void
e_bg_update(void)
{
Eina_List *l, *ll, *lll;
E_Manager *man;
E_Container *con;
const Eina_List *l, *ll;
E_Comp *c;
E_Zone *zone;
EINA_LIST_FOREACH(e_manager_list(), l, man)
{
EINA_LIST_FOREACH(man->containers, ll, con)
{
EINA_LIST_FOREACH(con->zones, lll, zone)
{
EINA_LIST_FOREACH(e_comp_list(), l, c)
EINA_LIST_FOREACH(c->zones, ll, zone)
e_zone_bg_reconfigure(zone);
}
}
}
}
/* local subsystem functions */
@ -507,19 +503,11 @@ _e_bg_signal(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNU
{
E_Zone *zone = data;
if (zone->prev_bg_object)
{
evas_object_del(zone->prev_bg_object);
zone->prev_bg_object = NULL;
}
if (zone->transition_object)
{
evas_object_del(zone->transition_object);
zone->transition_object = NULL;
}
E_FREE_FUNC(zone->prev_bg_object, evas_object_del);
E_FREE_FUNC(zone->transition_object, evas_object_del);
evas_object_move(zone->bg_object, zone->x, zone->y);
evas_object_resize(zone->bg_object, zone->w, zone->h);
evas_object_layer_set(zone->bg_object, E_COMP_CANVAS_LAYER_BG);
evas_object_layer_set(zone->bg_object, E_LAYER_BG);
evas_object_clip_set(zone->bg_object, zone->bg_clip_object);
evas_object_show(zone->bg_object);
}

View File

@ -19,7 +19,7 @@ extern EAPI int E_EVENT_BG_UPDATE;
struct _E_Event_Bg_Update
{
int container;
int manager;
int zone;
int desk_x;
int desk_y;
@ -28,11 +28,11 @@ struct _E_Event_Bg_Update
EINTERN int e_bg_init(void);
EINTERN int e_bg_shutdown(void);
EAPI const E_Config_Desktop_Background *e_bg_config_get(int container_num, int zone_num, int desk_x, int desk_y);
EAPI Eina_Stringshare *e_bg_file_get(int container_num, int zone_num, int desk_x, int desk_y);
EAPI const E_Config_Desktop_Background *e_bg_config_get(int manager_num, int zone_num, int desk_x, int desk_y);
EAPI Eina_Stringshare *e_bg_file_get(int manager_num, int zone_num, int desk_x, int desk_y);
EAPI void e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition);
EAPI void e_bg_add(int container, int zone, int desk_x, int desk_y, const char *file);
EAPI void e_bg_del(int container, int zone, int desk_x, int desk_y);
EAPI void e_bg_add(int manager, int zone, int desk_x, int desk_y, const char *file);
EAPI void e_bg_del(int manager, int zone, int desk_x, int desk_y);
EAPI void e_bg_default_set(const char *file);
EAPI void e_bg_update(void);

View File

@ -1,8 +1,6 @@
#include "e.h"
/* local subsystem functions */
static Eina_Bool _e_bindings_mapping_change_event_cb(void *data, int type, void *event);
static void _e_bindings_mouse_free(E_Binding_Mouse *bind);
static void _e_bindings_key_free(E_Binding_Key *bind);
static void _e_bindings_edge_free(E_Binding_Edge *bind);
@ -15,15 +13,12 @@ static Eina_Bool _e_bindings_edge_cb_timer(void *data);
/* local subsystem globals */
static Ecore_Event_Handler *mapping_handler = NULL;
static Eina_List *mouse_bindings = NULL;
static Eina_List *key_bindings = NULL;
static Eina_List *edge_bindings = NULL;
static Eina_List *signal_bindings = NULL;
static Eina_List *wheel_bindings = NULL;
static Eina_List *acpi_bindings = NULL;
static int _e_bindings_mapping_change_enabled = 1;
typedef struct _E_Binding_Edge_Data E_Binding_Edge_Data;
@ -48,9 +43,6 @@ e_bindings_init(void)
E_Config_Binding_Acpi *eba;
Eina_List *l;
mapping_handler = ecore_event_handler_add
(ECORE_X_EVENT_MAPPING_CHANGE, _e_bindings_mapping_change_event_cb, NULL);
EINA_LIST_FOREACH(e_bindings->mouse_bindings, l, ebm)
e_bindings_mouse_add(ebm->context, ebm->button, ebm->modifiers,
ebm->any_mod, ebm->action, ebm->params);
@ -105,12 +97,6 @@ e_bindings_shutdown(void)
E_FREE_LIST(wheel_bindings, _e_bindings_wheel_free);
E_FREE_LIST(acpi_bindings, _e_bindings_acpi_free);
if (mapping_handler)
{
ecore_event_handler_del(mapping_handler);
mapping_handler = NULL;
}
return 1;
}
@ -136,7 +122,8 @@ e_bindings_ecore_event_mouse_wheel_convert(const Ecore_Event_Mouse_Wheel *ev, E_
memset(event, 0, sizeof(E_Binding_Event_Wheel));
event->direction = ev->direction;
event->z = ev->z;
event->canvas.x = ev->root.x, event->canvas.y = ev->root.y;
event->canvas.x = e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.x);
event->canvas.y = e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.y);
event->timestamp = ev->timestamp;
event->modifiers = _e_bindings_modifiers(ev->modifiers);
}
@ -146,7 +133,8 @@ e_bindings_ecore_event_mouse_button_convert(const Ecore_Event_Mouse_Button *ev,
{
memset(event, 0, sizeof(E_Binding_Event_Mouse_Button));
event->button = ev->buttons;
event->canvas.x = ev->root.x, event->canvas.y = ev->root.y;
event->canvas.x = e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.x);
event->canvas.y = e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.y);
event->timestamp = ev->timestamp;
event->modifiers = _e_bindings_modifiers(ev->modifiers);
@ -189,6 +177,20 @@ e_bindings_evas_event_mouse_wheel_convert(const Evas_Event_Mouse_Wheel *ev, E_Bi
*/
}
EAPI int
e_bindings_evas_modifiers_convert(Evas_Modifier *modifiers)
{
int mod = 0;
mod |= (E_BINDING_MODIFIER_SHIFT * evas_key_modifier_is_set(modifiers, "Shift"));
mod |= (E_BINDING_MODIFIER_CTRL * evas_key_modifier_is_set(modifiers, "Control"));
mod |= (E_BINDING_MODIFIER_ALT * evas_key_modifier_is_set(modifiers, "Alt"));
mod |= (E_BINDING_MODIFIER_WIN * evas_key_modifier_is_set(modifiers, "Super"));
mod |= (E_BINDING_MODIFIER_WIN * evas_key_modifier_is_set(modifiers, "Hyper"));
mod |= (E_BINDING_MODIFIER_ALTGR * evas_key_modifier_is_set(modifiers, "AltGr"));
return mod;
}
EAPI void
e_bindings_evas_event_mouse_button_convert(const Evas_Event_Mouse_Down *ev, E_Binding_Event_Mouse_Button *event)
{
@ -197,12 +199,7 @@ e_bindings_evas_event_mouse_button_convert(const Evas_Event_Mouse_Down *ev, E_Bi
event->canvas.x = ev->output.x, event->canvas.y = ev->output.y;
event->timestamp = ev->timestamp;
event->modifiers |= (E_BINDING_MODIFIER_SHIFT * evas_key_modifier_is_set(ev->modifiers, "Shift"));
event->modifiers |= (E_BINDING_MODIFIER_CTRL * evas_key_modifier_is_set(ev->modifiers, "Control"));
event->modifiers |= (E_BINDING_MODIFIER_ALT * evas_key_modifier_is_set(ev->modifiers, "Alt"));
event->modifiers |= (E_BINDING_MODIFIER_WIN * evas_key_modifier_is_set(ev->modifiers, "Super"));
event->modifiers |= (E_BINDING_MODIFIER_WIN * evas_key_modifier_is_set(ev->modifiers, "Hyper"));
event->modifiers |= (E_BINDING_MODIFIER_ALTGR * evas_key_modifier_is_set(ev->modifiers, "AltGr"));
event->modifiers = e_bindings_evas_modifiers_convert(ev->modifiers);
event->hold = (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD);
event->scroll = (ev->event_flags & EVAS_EVENT_FLAG_ON_SCROLL);
@ -873,7 +870,7 @@ e_bindings_edge_in_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Event_Z
Eina_List *l;
current = e_desk_at_xy_get(ev->zone, ev->zone->desk_x_current, ev->zone->desk_y_current);
if (current->fullscreen_borders && (!e_config->fullscreen_flip)) return NULL;
if (current->fullscreen_clients && (!e_config->fullscreen_flip)) return NULL;
if (ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT) mod |= E_BINDING_MODIFIER_SHIFT;
if (ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) mod |= E_BINDING_MODIFIER_CTRL;
@ -965,7 +962,7 @@ e_bindings_edge_down_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Event
Eina_List *l;
current = e_desk_at_xy_get(ev->zone, ev->zone->desk_x_current, ev->zone->desk_y_current);
if (current->fullscreen_borders && (!e_config->fullscreen_flip)) return NULL;
if (current->fullscreen_clients && (!e_config->fullscreen_flip)) return NULL;
if (ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT) mod |= E_BINDING_MODIFIER_SHIFT;
if (ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) mod |= E_BINDING_MODIFIER_CTRL;
@ -1364,29 +1361,6 @@ e_bindings_acpi_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Event_Acpi
return act;
}
EAPI void
e_bindings_mapping_change_enable(Eina_Bool enable)
{
if (enable)
_e_bindings_mapping_change_enabled++;
else
_e_bindings_mapping_change_enabled--;
if (_e_bindings_mapping_change_enabled < 0)
_e_bindings_mapping_change_enabled = 0;
}
/* local subsystem functions */
static Eina_Bool
_e_bindings_mapping_change_event_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
{
if (!_e_bindings_mapping_change_enabled) return ECORE_CALLBACK_RENEW;
e_managers_keys_ungrab();
e_border_button_bindings_ungrab_all();
e_border_button_bindings_grab_all();
e_managers_keys_grab();
return ECORE_CALLBACK_PASS_ON;
}
static void
_e_bindings_mouse_free(E_Binding_Mouse *binding)
{
@ -1502,14 +1476,13 @@ _e_bindings_edge_cb_timer(void *data)
ev = ed->ev;
E_FREE(ed);
binding->timer = NULL;
if (act->func.go_edge)
act->func.go_edge(obj, binding->params, ev);
else if (act->func.go)
act->func.go(obj, binding->params);
binding->timer = NULL;
/* Duplicate event */
E_FREE(ev);

View File

@ -6,7 +6,7 @@ typedef enum _E_Binding_Context
E_BINDING_CONTEXT_UNKNOWN,
E_BINDING_CONTEXT_WINDOW,
E_BINDING_CONTEXT_ZONE,
E_BINDING_CONTEXT_CONTAINER,
E_BINDING_CONTEXT_COMPOSITOR,
E_BINDING_CONTEXT_MANAGER,
E_BINDING_CONTEXT_MENU,
E_BINDING_CONTEXT_WINLIST,
@ -193,8 +193,8 @@ EAPI void e_bindings_acpi_add(E_Binding_Context ctxt, int type, int status, cons
EAPI void e_bindings_acpi_del(E_Binding_Context ctxt, int type, int status, const char *action, const char *params);
EAPI E_Action *e_bindings_acpi_find(E_Binding_Context ctxt, E_Event_Acpi *ev, E_Binding_Acpi **bind_ret);
EAPI E_Action *e_bindings_acpi_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Event_Acpi *ev);
EAPI void e_bindings_mapping_change_enable(Eina_Bool enable);
EAPI int e_bindings_evas_modifiers_convert(Evas_Modifier *modifiers);
EAPI int e_bindings_modifiers_to_ecore_convert(E_Binding_Modifier modifiers);
EAPI void e_bindings_evas_event_mouse_button_convert(const Evas_Event_Mouse_Down *ev, E_Binding_Event_Mouse_Button *event);
EAPI void e_bindings_evas_event_mouse_wheel_convert(const Evas_Event_Mouse_Wheel *ev, E_Binding_Event_Wheel *event);

File diff suppressed because it is too large Load Diff

View File

@ -1,885 +0,0 @@
#ifdef E_TYPEDEFS
typedef enum _E_Screen_Limits
{
E_SCREEN_LIMITS_PARTLY = 0,
E_SCREEN_LIMITS_COMPLETELY = 1,
E_SCREEN_LIMITS_WITHIN = 2
} E_Screen_Limits;
typedef enum _E_Icon_Preference
{
E_ICON_PREF_E_DEFAULT,
E_ICON_PREF_NETWM,
E_ICON_PREF_USER
} E_Icon_Preference;
typedef enum _E_Direction
{
E_DIRECTION_UP,
E_DIRECTION_DOWN,
E_DIRECTION_LEFT,
E_DIRECTION_RIGHT
} E_Direction;
typedef enum _E_Transition
{
E_TRANSITION_LINEAR = 0,
E_TRANSITION_SINUSOIDAL = 1,
E_TRANSITION_ACCELERATE = 2,
E_TRANSITION_DECELERATE = 3,
E_TRANSITION_ACCELERATE_LOTS = 4,
E_TRANSITION_DECELERATE_LOTS = 5,
E_TRANSITION_SINUSOIDAL_LOTS = 6,
E_TRANSITION_BOUNCE = 7,
E_TRANSITION_BOUNCE_LOTS = 8
} E_Transition;
typedef enum _E_Stacking
{
E_STACKING_NONE,
E_STACKING_ABOVE,
E_STACKING_BELOW
} E_Stacking;
typedef enum _E_Focus_Policy
{
E_FOCUS_CLICK,
E_FOCUS_MOUSE,
E_FOCUS_SLOPPY,
E_FOCUS_LAST
} E_Focus_Policy;
typedef enum _E_Urgency_Policy
{
E_ACTIVEHINT_POLICY_IGNORE,
E_ACTIVEHINT_POLICY_ANIMATE,
E_ACTIVEHINT_POLICY_ACTIVATE
} E_Urgency_Policy;
typedef enum _E_Focus_Setting
{
E_FOCUS_NONE,
E_FOCUS_NEW_WINDOW,
E_FOCUS_NEW_DIALOG,
E_FOCUS_NEW_DIALOG_IF_OWNER_FOCUSED
} E_Focus_Setting;
typedef enum _E_Maximize
{
E_MAXIMIZE_NONE = 0x00000000,
E_MAXIMIZE_FULLSCREEN = 0x00000001,
E_MAXIMIZE_SMART = 0x00000002,
E_MAXIMIZE_EXPAND = 0x00000003,
E_MAXIMIZE_FILL = 0x00000004,
E_MAXIMIZE_TYPE = 0x0000000f,
E_MAXIMIZE_VERTICAL = 0x00000010,
E_MAXIMIZE_HORIZONTAL = 0x00000020,
E_MAXIMIZE_BOTH = 0x00000030,
E_MAXIMIZE_LEFT = 0x00000070,
E_MAXIMIZE_RIGHT = 0x000000b0,
E_MAXIMIZE_DIRECTION = 0x000000f0
} E_Maximize;
typedef enum _E_Fullscreen
{
/* Resize window */
E_FULLSCREEN_RESIZE,
/* Change screen resoultion and resize window */
E_FULLSCREEN_ZOOM
} E_Fullscreen;
typedef enum _E_Window_Placement
{
E_WINDOW_PLACEMENT_SMART,
E_WINDOW_PLACEMENT_ANTIGADGET,
E_WINDOW_PLACEMENT_CURSOR,
E_WINDOW_PLACEMENT_MANUAL
} E_Window_Placement;
typedef enum _E_Border_Hook_Point
{
E_BORDER_HOOK_EVAL_PRE_FETCH,
E_BORDER_HOOK_EVAL_PRE_POST_FETCH,
E_BORDER_HOOK_EVAL_POST_FETCH,
E_BORDER_HOOK_EVAL_PRE_BORDER_ASSIGN,
E_BORDER_HOOK_EVAL_POST_BORDER_ASSIGN,
E_BORDER_HOOK_EVAL_PRE_NEW_BORDER,
E_BORDER_HOOK_EVAL_POST_NEW_BORDER,
E_BORDER_HOOK_EVAL_END,
E_BORDER_HOOK_CONTAINER_LAYOUT,
E_BORDER_HOOK_NEW_BORDER,
E_BORDER_HOOK_SET_DESK,
E_BORDER_HOOK_MOVE_BEGIN,
E_BORDER_HOOK_MOVE_UPDATE,
E_BORDER_HOOK_MOVE_END,
E_BORDER_HOOK_RESIZE_BEGIN,
E_BORDER_HOOK_RESIZE_UPDATE,
E_BORDER_HOOK_RESIZE_END
} E_Border_Hook_Point;
typedef struct _E_Border E_Border;
typedef struct _E_Event_Border_Simple E_Event_Border_Simple;
typedef struct _E_Border_Pending_Move_Resize E_Border_Pending_Move_Resize;
typedef struct _E_Border_Hook E_Border_Hook;
typedef struct _E_Event_Border_Simple E_Event_Border_Resize;
typedef struct _E_Event_Border_Simple E_Event_Border_Move;
typedef struct _E_Event_Border_Simple E_Event_Border_Add;
typedef struct _E_Event_Border_Simple E_Event_Border_Remove;
typedef struct _E_Event_Border_Simple E_Event_Border_Show;
typedef struct _E_Event_Border_Hide E_Event_Border_Hide;
typedef struct _E_Event_Border_Simple E_Event_Border_Iconify;
typedef struct _E_Event_Border_Simple E_Event_Border_Uniconify;
typedef struct _E_Event_Border_Simple E_Event_Border_Stick;
typedef struct _E_Event_Border_Simple E_Event_Border_Unstick;
typedef struct _E_Event_Border_Zone_Set E_Event_Border_Zone_Set;
typedef struct _E_Event_Border_Desk_Set E_Event_Border_Desk_Set;
typedef struct _E_Event_Border_Stack E_Event_Border_Stack;
typedef struct _E_Event_Border_Simple E_Event_Border_Icon_Change;
typedef struct _E_Event_Border_Simple E_Event_Border_Title_Change;
typedef struct _E_Event_Border_Simple E_Event_Border_Urgent_Change;
typedef struct _E_Event_Border_Simple E_Event_Border_Focus_In;
typedef struct _E_Event_Border_Simple E_Event_Border_Focus_Out;
typedef struct _E_Event_Border_Simple E_Event_Border_Property;
typedef struct _E_Event_Border_Simple E_Event_Border_Fullscreen;
typedef struct _E_Event_Border_Simple E_Event_Border_Unfullscreen;
typedef void (*E_Border_Move_Intercept_Cb)(E_Border *, int x, int y);
#else
#ifndef E_BORDER_H
#define E_BORDER_H
#define E_BORDER_TYPE (int)0xE0b01002
struct _E_Border
{
E_Object e_obj_inherit;
struct
{
struct
{
int x, y, w, h;
int mx, my;
} current, last_down[3], last_up[3];
} mouse;
struct
{
struct
{
int x, y, w, h;
int mx, my;
int button;
} down;
} moveinfo;
int x, y, w, h;
int ref;
E_Zone *zone;
E_Desk *desk;
struct
{
int l, r, t, b;
Eina_Bool calc : 1; // inset has been calculated
} client_inset;
E_Comp_Win *cw;
Ecore_X_Window win;
Evas_Object *bg_object;
Evas_Object *icon_object;
Evas_Object *input_object;
Eina_Stringshare *internal_icon;
Eina_Stringshare *internal_icon_key;
Eina_Bool callbacks_set : 1;
struct
{
Ecore_X_Window lock_win;
Ecore_X_Window win;
int w, h;
struct
{
Eina_Bool mapping_change : 1;
Eina_Bool iconic_shading : 1;
} hacks;
struct
{
unsigned char changed : 1;
unsigned char user_selected : 1;
Eina_Stringshare *name;
} border;
unsigned char shaped : 1;
unsigned char argb : 1;
/* ICCCM */
struct
{
Eina_Stringshare *title;
Eina_Stringshare *name;
Eina_Stringshare *class;
Eina_Stringshare *icon_name;
Eina_Stringshare *machine;
int min_w, min_h;
int max_w, max_h;
int base_w, base_h;
int step_w, step_h;
int start_x, start_y;
double min_aspect, max_aspect;
Ecore_X_Window_State_Hint initial_state;
Ecore_X_Window_State_Hint state;
Ecore_X_Pixmap icon_pixmap;
Ecore_X_Pixmap icon_mask;
Ecore_X_Window icon_window;
Ecore_X_Window window_group;
Ecore_X_Window transient_for;
Ecore_X_Window client_leader;
Ecore_X_Gravity gravity;
Eina_Stringshare *window_role;
unsigned char take_focus : 1;
unsigned char accepts_focus : 1;
unsigned char urgent : 1;
unsigned char delete_request : 1;
unsigned char request_pos : 1;
struct
{
int argc;
char **argv;
} command;
struct
{
unsigned char title : 1;
unsigned char name_class : 1;
unsigned char icon_name : 1;
unsigned char machine : 1;
unsigned char hints : 1;
unsigned char size_pos_hints : 1;
unsigned char protocol : 1;
unsigned char transient_for : 1;
unsigned char client_leader : 1;
unsigned char window_role : 1;
unsigned char state : 1;
unsigned char command : 1;
} fetch;
} icccm;
/* MWM */
struct
{
Ecore_X_MWM_Hint_Func func;
Ecore_X_MWM_Hint_Decor decor;
Ecore_X_MWM_Hint_Input input;
unsigned char exists : 1;
unsigned char borderless : 1;
struct
{
unsigned char hints : 1;
} fetch;
} mwm;
/* NetWM */
struct
{
pid_t pid;
unsigned int desktop;
Eina_Stringshare *name;
Eina_Stringshare *icon_name;
Ecore_X_Icon *icons;
int num_icons;
unsigned int user_time;
unsigned char opacity;
Eina_Bool opacity_changed : 1; // prevent fetching opacity next prop change
struct
{
int left;
int right;
int top;
int bottom;
int left_start_y;
int left_end_y;
int right_start_y;
int right_end_y;
int top_start_x;
int top_end_x;
int bottom_start_x;
int bottom_end_x;
} strut;
unsigned char ping : 1;
struct
{
unsigned char request : 1;
unsigned int wait;
Ecore_X_Sync_Alarm alarm;
Ecore_X_Sync_Counter counter;
unsigned int serial;
double send_time;
} sync;
/* NetWM Window state */
struct
{
unsigned char modal : 1;
unsigned char sticky : 1;
unsigned char maximized_v : 1;
unsigned char maximized_h : 1;
unsigned char shaded : 1;
unsigned char skip_taskbar : 1;
unsigned char skip_pager : 1;
unsigned char hidden : 1;
unsigned char fullscreen : 1;
E_Stacking stacking;
} state;
/* NetWM Window allowed actions */
struct
{
unsigned char move : 1;
unsigned char resize : 1;
unsigned char minimize : 1;
unsigned char shade : 1;
unsigned char stick : 1;
unsigned char maximized_h : 1;
unsigned char maximized_v : 1;
unsigned char fullscreen : 1;
unsigned char change_desktop : 1;
unsigned char close : 1;
} action;
Ecore_X_Window_Type type;
Ecore_X_Window_Type *extra_types;
int extra_types_num;
int startup_id;
struct
{
unsigned char name : 1;
unsigned char icon_name : 1;
unsigned char icon : 1;
unsigned char user_time : 1;
unsigned char strut : 1;
unsigned char type : 1;
unsigned char state : 1;
unsigned char opacity : 1;
/* No, fetch on new_client, shouldn't be changed after map.
unsigned char pid : 1;
*/
/* No, ignore this
unsigned char desktop : 1;
*/
} fetch;
struct
{
unsigned char state : 1;
} update;
} netwm;
/* Extra e stuff */
struct
{
struct
{
struct
{
int x, y;
unsigned char updated : 1;
} video_position;
Ecore_X_Window video_parent;
E_Border *video_parent_border;
Eina_List *video_child;
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
struct
{
Eina_Stringshare *name;
Eina_Stringshare **available_list;
int num;
unsigned char wait_for_done : 1;
unsigned char use : 1;
} profile;
#endif
unsigned char centered : 1;
unsigned char video : 1;
} state;
struct
{
unsigned char state : 1;
unsigned char video_parent : 1;
unsigned char video_position : 1;
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
unsigned char profile : 1;
#endif
} fetch;
} e;
struct
{
struct
{
unsigned char soft_menu : 1;
unsigned char soft_menus : 1;
} fetch;
unsigned char soft_menu : 1;
unsigned char soft_menus : 1;
} qtopia;
struct
{
struct
{
unsigned char state : 1;
unsigned char vkbd : 1;
} fetch;
Ecore_X_Virtual_Keyboard_State state;
unsigned char have_property : 1;
unsigned char vkbd : 1;
} vkbd;
struct
{
struct
{
struct
{
unsigned char conformant : 1;
} fetch;
unsigned char conformant : 1;
} conformant;
struct
{
struct
{
unsigned char state : 1;
struct
{
unsigned int major : 1;
unsigned int minor : 1;
} priority;
unsigned char quickpanel : 1;
unsigned char zone : 1;
} fetch;
Ecore_X_Illume_Quickpanel_State state;
struct
{
unsigned int major : 1;
unsigned int minor : 1;
} priority;
unsigned char quickpanel : 1;
int zone;
} quickpanel;
struct
{
struct
{
unsigned char drag : 1;
unsigned char locked : 1;
} fetch;
unsigned char drag : 1;
unsigned char locked : 1;
} drag;
struct
{
struct
{
unsigned char state : 1;
} fetch;
Ecore_X_Illume_Window_State state;
} win_state;
} illume;
Ecore_X_Window_Attributes initial_attributes;
} client;
E_Container_Shape *shape;
unsigned int visible : 1;
Eina_Bool hidden : 1; // set when window has been hidden by api and should not be shown
unsigned int await_hide_event;
unsigned int moving : 1;
unsigned int focused : 1;
unsigned int new_client : 1;
unsigned int re_manage : 1;
unsigned int placed : 1;
unsigned int shading : 1;
unsigned int shaded : 1;
unsigned int iconic : 1;
unsigned int deskshow : 1;
unsigned int sticky : 1;
unsigned int shaped_input : 1;
unsigned int need_shape_merge : 1;
unsigned int need_shape_export : 1;
unsigned int fullscreen : 1;
unsigned int need_fullscreen : 1;
unsigned int already_unparented : 1;
unsigned int need_reparent : 1;
unsigned int button_grabbed : 1;
unsigned int delete_requested : 1;
unsigned int ping_ok : 1;
unsigned int hung : 1;
unsigned int take_focus : 1;
unsigned int want_focus : 1;
unsigned int user_skip_winlist : 1;
unsigned int need_maximize : 1;
E_Maximize maximized;
E_Fullscreen fullscreen_policy;
unsigned int borderless : 1;
unsigned char offer_resistance : 1;
Eina_Stringshare *bordername;
unsigned int lock_user_location : 1; /*DONE*/
unsigned int lock_client_location : 1; /*DONE*/
unsigned int lock_user_size : 1; /*DONE*/
unsigned int lock_client_size : 1; /*DONE*/
unsigned int lock_user_stacking : 1; /*DONE*/
unsigned int lock_client_stacking : 1; /*DONE*/
unsigned int lock_user_iconify : 1; /*DONE*/
unsigned int lock_client_iconify : 1; /*DONE*/
unsigned int lock_user_desk : 1;
unsigned int lock_client_desk : 1;
unsigned int lock_user_sticky : 1; /*DONE*/
unsigned int lock_client_sticky : 1; /*DONE*/
unsigned int lock_user_shade : 1; /*DONE*/
unsigned int lock_client_shade : 1; /*DONE*/
unsigned int lock_user_maximize : 1; /*DONE*/
unsigned int lock_client_maximize : 1; /*DONE*/
unsigned int lock_user_fullscreen : 1; /*DONE*/
unsigned int lock_client_fullscreen : 1; /*DONE*/
unsigned int lock_border : 1; /*DONE*/
unsigned int lock_close : 1; /*DONE*/
unsigned int lock_focus_in : 1; /*DONE*/
unsigned int lock_focus_out : 1; /*DONE*/
unsigned int lock_life : 1; /*DONE*/
unsigned int internal : 1;
unsigned int internal_no_remember : 1;
unsigned int internal_no_reopen : 1;
unsigned int stolen : 1;
Eina_Bool theme_shadow : 1;
Eina_Bool destroyed : 1;
Ecore_Evas *internal_ecore_evas;
double ping;
unsigned char changed : 1;
unsigned char icon_preference;
unsigned char ignore_first_unmap;
unsigned char resize_mode;
struct
{
int x, y, w, h;
E_Layer layer;
int zone;
E_Maximize maximized;
} saved;
struct
{
unsigned char valid : 1;
int x, y, w, h;
struct
{
int x, y, w, h;
} saved;
} pre_res_change;
struct
{
double start;
double val;
int x, y;
E_Direction dir;
Ecore_Animator *anim;
} shade;
struct
{
int x, y;
int modified;
} shelf_fix;
Eina_List *stick_desks;
E_Menu *border_menu;
E_Config_Dialog *border_locks_dialog;
E_Config_Dialog *border_remember_dialog;
E_Config_Dialog *border_border_dialog;
E_Dialog *border_prop_dialog;
Eina_List *pending_move_resize;
struct
{
unsigned char visible : 1;
unsigned char pos : 1;
unsigned char size : 1;
unsigned char stack : 1;
unsigned char prop : 1;
unsigned char border : 1;
unsigned char reset_gravity : 1;
unsigned char shading : 1;
unsigned char shaded : 1;
unsigned char shape : 1;
unsigned char shape_input : 1;
unsigned char icon : 1;
} changes;
struct
{
unsigned char start : 1;
int x, y;
} drag;
E_Layer layer;
E_Action *cur_mouse_action;
Ecore_Timer *raise_timer;
Ecore_Poller *ping_poller;
Ecore_Timer *kill_timer;
E_Border_Move_Intercept_Cb move_intercept_cb;
E_Remember *remember;
E_Border *modal;
E_Border *leader;
Eina_List *group;
E_Border *parent;
Eina_List *transients;
Efreet_Desktop *desktop;
E_Exec_Instance *exe_inst;
unsigned char comp_hidden : 1;
unsigned char post_move : 1;
unsigned char post_resize : 1;
unsigned char post_show : 1;
unsigned char during_lost : 1;
Ecore_Idle_Enterer *post_job;
Eina_Bool argb;
int tmp_input_hidden;
E_Focus_Policy focus_policy_override;
};
struct _E_Border_Pending_Move_Resize
{
int x, y, w, h;
unsigned char move : 1;
unsigned char resize : 1;
unsigned char without_border : 1;
unsigned int serial;
};
struct _E_Border_Hook
{
E_Border_Hook_Point hookpoint;
void (*func)(void *data, void *bd);
void *data;
unsigned char delete_me : 1;
};
struct _E_Event_Border_Hide
{
E_Border *border;
int manage;
};
struct _E_Event_Border_Simple
{
E_Border *border;
};
struct _E_Event_Border_Zone_Set
{
E_Border *border;
E_Zone *zone;
};
struct _E_Event_Border_Desk_Set
{
E_Border *border;
E_Desk *desk;
};
struct _E_Event_Border_Stack
{
E_Border *border, *stack;
E_Stacking type;
};
EINTERN int e_border_init(void);
EINTERN int e_border_shutdown(void);
EAPI E_Border *e_border_new(E_Container *con, Ecore_X_Window win, int first_map, int internal);
EAPI void e_border_ref(E_Border *bd);
EAPI void e_border_unref(E_Border *bd);
EAPI void e_border_res_change_geometry_save(E_Border *bd);
EAPI void e_border_res_change_geometry_restore(E_Border *bd);
EAPI void e_border_zone_set(E_Border *bd, E_Zone *zone);
EAPI void e_border_desk_set(E_Border *bd, E_Desk *desk);
EAPI void e_border_show(E_Border *bd);
EAPI void e_border_hide(E_Border *bd, int manage);
EAPI void e_border_move(E_Border *bd, int x, int y);
EAPI void e_border_move_intercept_cb_set(E_Border *bd, E_Border_Move_Intercept_Cb cb);
EAPI void e_border_move_without_border(E_Border *bd, int x, int y);
EAPI void e_border_center(E_Border *bd);
EAPI void e_border_center_pos_get(E_Border *bd, int *x, int *y);
EAPI void e_border_resize(E_Border *bd, int w, int h);
EAPI void e_border_resize_without_border(E_Border *bd, int w, int h);
EAPI void e_border_move_resize(E_Border *bd, int x, int y, int w, int h);
EAPI void e_border_move_resize_without_border(E_Border *bd, int x, int y, int w, int h);
EAPI void e_border_layer_set(E_Border *bd, E_Layer layer);
EAPI void e_border_raise(E_Border *bd);
EAPI void e_border_lower(E_Border *bd);
EAPI void e_border_stack_above(E_Border *bd, E_Border *above);
EAPI void e_border_stack_below(E_Border *bd, E_Border *below);
EAPI void e_border_focus_latest_set(E_Border *bd);
EAPI void e_border_raise_latest_set(E_Border *bd);
EAPI void e_border_focus_set_with_pointer(E_Border *bd);
EAPI void e_border_focus_set(E_Border *bd, int focus, int set);
EAPI void e_border_shade(E_Border *bd, E_Direction dir);
EAPI void e_border_unshade(E_Border *bd, E_Direction dir);
EAPI void e_border_maximize(E_Border *bd, E_Maximize max);
EAPI void e_border_unmaximize(E_Border *bd, E_Maximize max);
EAPI void e_border_fullscreen(E_Border *bd, E_Fullscreen policy);
EAPI void e_border_unfullscreen(E_Border *bd);
EAPI void e_border_iconify(E_Border *bd);
EAPI void e_border_uniconify(E_Border *bd);
EAPI void e_border_stick(E_Border *bd);
EAPI void e_border_unstick(E_Border *bd);
EAPI void e_border_pinned_set(E_Border *bd, int set);
EAPI E_Border *e_border_find_by_client_window(Ecore_X_Window win);
EAPI E_Border *e_border_find_all_by_client_window(Ecore_X_Window win);
EAPI E_Border *e_border_find_by_window(Ecore_X_Window win);
EAPI E_Border *e_border_find_by_alarm(Ecore_X_Sync_Alarm alarm);
EAPI E_Border *e_border_focused_get(void);
EAPI void e_border_idler_before(void);
EAPI Eina_List *e_border_client_list(void);
EAPI void e_border_act_move_keyboard(E_Border *bd);
EAPI void e_border_act_resize_keyboard(E_Border *bd);
EAPI void e_border_act_move_begin(E_Border *bd, E_Binding_Event_Mouse_Button *ev);
EAPI void e_border_act_move_end(E_Border *bd, E_Binding_Event_Mouse_Button *ev);
EAPI void e_border_act_resize_begin(E_Border *bd, E_Binding_Event_Mouse_Button *ev);
EAPI void e_border_act_resize_end(E_Border *bd, E_Binding_Event_Mouse_Button *ev);
EAPI void e_border_act_menu_begin(E_Border *bd, E_Binding_Event_Mouse_Button *ev, int key);
EAPI void e_border_act_close_begin(E_Border *bd);
EAPI void e_border_act_kill_begin(E_Border *bd);
EAPI Evas_Object *e_border_icon_add(E_Border *bd, Evas *evas);
EAPI void e_border_button_bindings_ungrab_all(void);
EAPI void e_border_button_bindings_grab_all(void);
EAPI Eina_List *e_border_focus_stack_get(void);
EAPI Eina_List *e_border_lost_windows_get(E_Zone *zone);
EAPI void e_border_ping(E_Border *bd);
EAPI void e_border_move_cancel(void);
EAPI void e_border_resize_cancel(void);
EAPI void e_border_frame_recalc(E_Border *bd);
EAPI Eina_List *e_border_immortal_windows_get(void);
EAPI const char *e_border_name_get(const E_Border *bd);
EAPI void e_border_signal_move_begin(E_Border *bd, const char *sig, const char *src);
EAPI void e_border_signal_move_end(E_Border *bd, const char *sig, const char *src);
EAPI int e_border_resizing_get(E_Border *bd);
EAPI void e_border_signal_resize_begin(E_Border *bd, const char *dir, const char *sig, const char *src);
EAPI void e_border_signal_resize_end(E_Border *bd, const char *dir, const char *sig, const char *src);
EAPI void e_border_resize_limit(E_Border *bd, int *w, int *h);
EAPI E_Border_Hook *e_border_hook_add(E_Border_Hook_Point hookpoint, void (*func)(void *data, void *bd), void *data);
EAPI void e_border_hook_del(E_Border_Hook *bh);
EAPI void e_border_focus_track_freeze(void);
EAPI void e_border_focus_track_thaw(void);
EAPI E_Border *e_border_under_pointer_get(E_Desk *desk, E_Border *exclude);
EAPI int e_border_pointer_warp_to_center_now(E_Border *bd);
EAPI int e_border_pointer_warp_to_center(E_Border *bd);
EAPI void e_border_comp_hidden_set(E_Border *bd, Eina_Bool hidden);
EAPI void e_border_tmp_input_hidden_push(E_Border *bd);
EAPI void e_border_tmp_input_hidden_pop(E_Border *bd);
EAPI void e_border_activate(E_Border *bd, Eina_Bool just_do_it);
EAPI void e_border_focus_lock_set(Eina_Bool lock);
EAPI Eina_Bool e_border_focus_lock_get(void);
EAPI void e_border_input_object_set(E_Border *bd, Evas_Object *input_obj);
extern EAPI int E_EVENT_BORDER_RESIZE;
extern EAPI int E_EVENT_BORDER_MOVE;
extern EAPI int E_EVENT_BORDER_ADD;
extern EAPI int E_EVENT_BORDER_SHOW;
extern EAPI int E_EVENT_BORDER_HIDE;
extern EAPI int E_EVENT_BORDER_REMOVE;
extern EAPI int E_EVENT_BORDER_ICONIFY;
extern EAPI int E_EVENT_BORDER_UNICONIFY;
extern EAPI int E_EVENT_BORDER_STICK;
extern EAPI int E_EVENT_BORDER_UNSTICK;
extern EAPI int E_EVENT_BORDER_ZONE_SET;
extern EAPI int E_EVENT_BORDER_DESK_SET;
extern EAPI int E_EVENT_BORDER_STACK;
extern EAPI int E_EVENT_BORDER_ICON_CHANGE;
extern EAPI int E_EVENT_BORDER_TITLE_CHANGE;
extern EAPI int E_EVENT_BORDER_URGENT_CHANGE;
extern EAPI int E_EVENT_BORDER_FOCUS_IN;
extern EAPI int E_EVENT_BORDER_FOCUS_OUT;
extern EAPI int E_EVENT_BORDER_PROPERTY;
extern EAPI int E_EVENT_BORDER_FULLSCREEN;
extern EAPI int E_EVENT_BORDER_UNFULLSCREEN;
static inline unsigned int
e_border_inset_width_get(const E_Border *bd)
{
return bd->client_inset.l + bd->client_inset.r;
}
static inline unsigned int
e_border_inset_height_get(const E_Border *bd)
{
return bd->client_inset.t + bd->client_inset.b;
}
/* e_config not available everywhere e_border.h is used...
static inline Eina_Bool
e_border_focus_policy_click(const E_Border *bd)
{
return ((bd->focus_policy_override == E_FOCUS_CLICK) || (e_config->focus_policy == E_FOCUS_CLICK));
}
*/
#define e_border_focus_policy_click(bd) \
((bd->focus_policy_override == E_FOCUS_CLICK) || (e_config->focus_policy == E_FOCUS_CLICK))
/* macro for finding misuse of changed flag */
#if 0
# define BD_CHANGED(BD) \
do { \
if (e_object_is_del(E_OBJECT(BD))) \
EINA_LOG_CRIT("CHANGED SET ON DELETED BORDER!"); \
BD->changed = 1; \
INF("%s:%d - BD CHANGED: %p", __FILE__, __LINE__, BD); \
} while (0)
#else
# define BD_CHANGED(BD) BD->changed = 1
#endif
#endif
#endif

View File

@ -143,11 +143,22 @@ e_canvas_rehint(void)
}
EAPI Ecore_Evas *
e_canvas_new(Ecore_X_Window win, int x, int y, int w, int h,
int direct_resize, int override, Ecore_X_Window *win_ret)
e_canvas_new(Ecore_Window win, int x, int y, int w, int h,
int direct_resize, int override, Ecore_Window *win_ret)
{
Ecore_Evas *ee;
Ecore_Evas *ee = NULL;
#ifdef WAYLAND_ONLY
ee = ecore_evas_wayland_shm_new(NULL, win, x, y, w, h, 0);
if (ee)
{
ecore_evas_override_set(ee, override);
if (win_ret) *win_ret = ecore_evas_wayland_window_get(ee);
}
#else
switch (e_comp_get(NULL)->comp_type)
{
case E_PIXMAP_TYPE_X:
ee = ecore_evas_software_x11_new(NULL, win, x, y, w, h);
if (ee)
{
@ -155,7 +166,21 @@ e_canvas_new(Ecore_X_Window win, int x, int y, int w, int h,
if (direct_resize) ecore_evas_software_x11_direct_resize_set(ee, 1);
if (win_ret) *win_ret = ecore_evas_software_x11_window_get(ee);
}
else
break;
# ifdef HAVE_WAYLAND_CLIENTS
case E_PIXMAP_TYPE_WL:
ee = ecore_evas_wayland_shm_new(NULL, win, x, y, w, h, 0);
if (ee)
{
ecore_evas_override_set(ee, override);
if (win_ret) *win_ret = (Ecore_Window)ecore_evas_wayland_window_get(ee);
}
break;
# endif
default: break;
}
#endif
if (!ee)
EINA_LOG_ERR("Impossible to build any Ecore_Evas window !!");
return ee;
}

View File

@ -10,7 +10,7 @@ EAPI void e_canvas_cache_flush(void);
EAPI void e_canvas_cache_reload(void);
EAPI void e_canvas_idle_flush(void);
EAPI void e_canvas_rehint(void);
EAPI Ecore_Evas *e_canvas_new(Ecore_X_Window win, int x, int y, int w, int h, int direct_resize, int override, Ecore_X_Window *win_ret);
EAPI Ecore_Evas *e_canvas_new(Ecore_Window win, int x, int y, int w, int h, int direct_resize, int override, Ecore_Window *win_ret);
EAPI const Eina_List *e_canvas_list(void);
#endif

4501
src/bin/e_client.c Normal file

File diff suppressed because it is too large Load Diff

800
src/bin/e_client.h Normal file
View File

@ -0,0 +1,800 @@
#ifdef E_TYPEDEFS
typedef enum _E_Screen_Limits
{
E_SCREEN_LIMITS_PARTLY = 0,
E_SCREEN_LIMITS_COMPLETELY = 1,
E_SCREEN_LIMITS_WITHIN = 2
} E_Screen_Limits;
typedef enum _E_Icon_Preference
{
E_ICON_PREF_E_DEFAULT,
E_ICON_PREF_NETWM,
E_ICON_PREF_USER
} E_Icon_Preference;
typedef enum _E_Direction
{
E_DIRECTION_UP,
E_DIRECTION_DOWN,
E_DIRECTION_LEFT,
E_DIRECTION_RIGHT
} E_Direction;
typedef enum _E_Transition
{
E_TRANSITION_LINEAR = 0,
E_TRANSITION_SINUSOIDAL = 1,
E_TRANSITION_ACCELERATE = 2,
E_TRANSITION_DECELERATE = 3,
E_TRANSITION_ACCELERATE_LOTS = 4,
E_TRANSITION_DECELERATE_LOTS = 5,
E_TRANSITION_SINUSOIDAL_LOTS = 6,
E_TRANSITION_BOUNCE = 7,
E_TRANSITION_BOUNCE_LOTS = 8
} E_Transition;
typedef enum _E_Stacking
{
E_STACKING_NONE,
E_STACKING_ABOVE,
E_STACKING_BELOW
} E_Stacking;
typedef enum _E_Focus_Policy
{
E_FOCUS_CLICK,
E_FOCUS_MOUSE,
E_FOCUS_SLOPPY,
E_FOCUS_LAST,
} E_Focus_Policy;
typedef enum
{
/* same as ecore-x types */
E_WINDOW_TYPE_UNKNOWN = 0,
E_WINDOW_TYPE_DESKTOP,
E_WINDOW_TYPE_DOCK,
E_WINDOW_TYPE_TOOLBAR,
E_WINDOW_TYPE_MENU,
E_WINDOW_TYPE_UTILITY,
E_WINDOW_TYPE_SPLASH,
E_WINDOW_TYPE_DIALOG,
E_WINDOW_TYPE_NORMAL,
E_WINDOW_TYPE_DROPDOWN_MENU,
E_WINDOW_TYPE_POPUP_MENU,
E_WINDOW_TYPE_TOOLTIP,
E_WINDOW_TYPE_NOTIFICATION,
E_WINDOW_TYPE_COMBO,
E_WINDOW_TYPE_DND
} E_Window_Type;
typedef enum _E_Urgency_Policy
{
E_ACTIVEHINT_POLICY_IGNORE,
E_ACTIVEHINT_POLICY_ANIMATE,
E_ACTIVEHINT_POLICY_ACTIVATE
} E_Urgency_Policy;
typedef enum _E_Focus_Setting
{
E_FOCUS_NONE,
E_FOCUS_NEW_WINDOW,
E_FOCUS_NEW_DIALOG,
E_FOCUS_NEW_DIALOG_IF_OWNER_FOCUSED
} E_Focus_Setting;
typedef enum _E_Maximize
{
E_MAXIMIZE_NONE = 0x00000000,
E_MAXIMIZE_FULLSCREEN = 0x00000001,
E_MAXIMIZE_SMART = 0x00000002,
E_MAXIMIZE_EXPAND = 0x00000003,
E_MAXIMIZE_FILL = 0x00000004,
E_MAXIMIZE_TYPE = 0x0000000f,
E_MAXIMIZE_VERTICAL = 0x00000010,
E_MAXIMIZE_HORIZONTAL = 0x00000020,
E_MAXIMIZE_BOTH = 0x00000030,
E_MAXIMIZE_LEFT = 0x00000070,
E_MAXIMIZE_RIGHT = 0x000000b0,
E_MAXIMIZE_DIRECTION = 0x000000f0
} E_Maximize;
typedef enum _E_Fullscreen
{
/* Resize window */
E_FULLSCREEN_RESIZE,
/* Change screen resoultion and resize window */
E_FULLSCREEN_ZOOM
} E_Fullscreen;
typedef enum _E_Window_Placement
{
E_WINDOW_PLACEMENT_SMART,
E_WINDOW_PLACEMENT_ANTIGADGET,
E_WINDOW_PLACEMENT_CURSOR,
E_WINDOW_PLACEMENT_MANUAL
} E_Window_Placement;
typedef enum E_Client_Property
{
E_CLIENT_PROPERTY_NONE = 0,
E_CLIENT_PROPERTY_SIZE = (1 << 0),
E_CLIENT_PROPERTY_POS = (1 << 1),
E_CLIENT_PROPERTY_TITLE = (1 << 2),
E_CLIENT_PROPERTY_ICON = (1 << 3),
E_CLIENT_PROPERTY_URGENCY = (1 << 4),
E_CLIENT_PROPERTY_GRAVITY = (1 << 5),
E_CLIENT_PROPERTY_NETWM_STATE = (1 << 6),
} E_Client_Property;
typedef struct E_Client E_Client;
typedef struct E_Event_Client E_Event_Client;
typedef struct _E_Event_Client_Property E_Event_Client_Property;
typedef struct _E_Client_Pending_Resize E_Client_Pending_Resize;
typedef struct E_Event_Client_Zone_Set E_Event_Client_Zone_Set;
typedef struct E_Event_Client_Desk_Set E_Event_Client_Desk_Set;
typedef struct _E_Client_Hook E_Client_Hook;
typedef enum _E_Client_Hook_Point
{
E_CLIENT_HOOK_EVAL_PRE_FETCH,
E_CLIENT_HOOK_EVAL_FETCH,
E_CLIENT_HOOK_EVAL_PRE_POST_FETCH,
E_CLIENT_HOOK_EVAL_POST_FETCH,
E_CLIENT_HOOK_EVAL_PRE_FRAME_ASSIGN,
E_CLIENT_HOOK_EVAL_POST_FRAME_ASSIGN,
E_CLIENT_HOOK_EVAL_PRE_NEW_CLIENT,
E_CLIENT_HOOK_EVAL_POST_NEW_CLIENT,
E_CLIENT_HOOK_EVAL_END,
E_CLIENT_HOOK_FOCUS_SET,
E_CLIENT_HOOK_FOCUS_UNSET,
E_CLIENT_HOOK_NEW_CLIENT,
E_CLIENT_HOOK_DESK_SET,
E_CLIENT_HOOK_MOVE_BEGIN,
E_CLIENT_HOOK_MOVE_UPDATE,
E_CLIENT_HOOK_MOVE_END,
E_CLIENT_HOOK_RESIZE_BEGIN,
E_CLIENT_HOOK_RESIZE_UPDATE,
E_CLIENT_HOOK_RESIZE_END,
E_CLIENT_HOOK_DEL,
E_CLIENT_HOOK_UNREDIRECT,
E_CLIENT_HOOK_REDIRECT,
} E_Client_Hook_Point;
typedef void (*E_Client_Move_Intercept_Cb)(E_Client *, int x, int y);
typedef void (*E_Client_Hook_Cb)(void *data, E_Client *ec);
#else
#define E_CLIENT_TYPE (int)0xE0b01002
struct E_Event_Client
{
E_Client *ec;
};
struct E_Event_Client_Desk_Set
{
E_Client *ec;
E_Desk *desk;
};
struct E_Event_Client_Zone_Set
{
E_Client *ec;
E_Zone *zone;
};
struct _E_Event_Client_Property
{
E_Client *ec;
unsigned int property;
};
struct _E_Client_Hook
{
E_Client_Hook_Point hookpoint;
E_Client_Hook_Cb func;
void *data;
unsigned char delete_me : 1;
};
struct _E_Client_Pending_Resize
{
int w, h;
unsigned int serial;
};
struct E_Client
{
E_Object e_obj_inherit;
EINA_INLIST;
E_Pixmap *pixmap;
E_Comp *comp;
int depth;
int x, y, w, h; //frame+client geom
Eina_Rectangle client; //client geom
Evas_Object *frame; //comp object
E_Zone *zone;
E_Desk *desk;
Ecore_Poller *ping_poller;
Ecore_Timer *kill_timer;
E_Client *modal;
E_Client *leader;
Eina_List *group;
E_Client *parent;
Eina_List *transients;
E_Layer layer;
Eina_Rectangle *shape_rects;
unsigned int shape_rects_num;
Eina_Rectangle *shape_input_rects;
unsigned int shape_input_rects_num;
Eina_Stringshare *internal_icon;
Eina_Stringshare *internal_icon_key;
E_Direction shade_dir;
E_Comp_Client_Data *comp_data; //private for the compositor engine (X, Wayland) ONLY
Evas_Object *input_object; //for running wayland clients in X
E_Action *cur_mouse_action;
int border_size; //size of client's border
struct
{
struct
{
int x, y, w, h;
int mx, my;
} current, last_down[3], last_up[3];
} mouse;
struct
{
struct
{
int x, y, w, h;
int mx, my;
int button;
} down;
} moveinfo;
unsigned char ignore_first_unmap;
E_Pointer_Mode resize_mode;
struct
{
Eina_Bool mapping_change : 1;
Eina_Bool iconic_shading : 1;
} hacks;
struct
{
unsigned char changed : 1;
unsigned char user_selected : 1;
Eina_Stringshare *name;
} border;
struct
{
int x, y, w, h;
E_Layer layer;
int zone;
E_Maximize maximized;
} saved;
struct
{
unsigned char valid : 1;
int x, y, w, h;
struct
{
int x, y, w, h;
} saved;
} pre_res_change;
unsigned char shaped : 1;
unsigned char argb : 1;
/* ICCCM */
struct
{
Eina_Stringshare *title;
Eina_Stringshare *name;
Eina_Stringshare *class;
Eina_Stringshare *icon_name;
Eina_Stringshare *machine;
int min_w, min_h;
int max_w, max_h;
int base_w, base_h;
int step_w, step_h;
int start_x, start_y;
double min_aspect, max_aspect;
Ecore_Window icon_window;
Ecore_Window window_group;
Ecore_Window transient_for;
Ecore_Window client_leader;
#ifdef E_COMP_X_H
Ecore_X_Window_State_Hint initial_state;
Ecore_X_Window_State_Hint state;
Ecore_X_Pixmap icon_pixmap;
Ecore_X_Pixmap icon_mask;
Ecore_X_Gravity gravity;
#endif
Eina_Stringshare *window_role;
unsigned char take_focus : 1;
unsigned char accepts_focus : 1;
unsigned char urgent : 1;
unsigned char delete_request : 1;
unsigned char request_pos : 1;
struct
{
int argc;
char **argv;
} command;
struct
{
unsigned char title : 1;
unsigned char name_class : 1;
unsigned char icon_name : 1;
unsigned char machine : 1;
unsigned char hints : 1;
unsigned char size_pos_hints : 1;
unsigned char protocol : 1;
unsigned char transient_for : 1;
unsigned char client_leader : 1;
unsigned char window_role : 1;
unsigned char state : 1;
unsigned char command : 1;
} fetch;
} icccm;
/* MWM */
struct
{
#ifdef E_COMP_X_H
Ecore_X_MWM_Hint_Func func;
Ecore_X_MWM_Hint_Decor decor;
Ecore_X_MWM_Hint_Input input;
#endif
unsigned char exists : 1;
unsigned char borderless : 1;
struct
{
unsigned char hints : 1;
} fetch;
} mwm;
/* NetWM */
struct
{
pid_t pid;
unsigned int desktop;
Eina_Stringshare *name;
Eina_Stringshare *icon_name;
#ifdef E_COMP_X_H
Ecore_X_Icon *icons;
#endif
int num_icons;
unsigned int user_time;
unsigned char opacity;
Eina_Bool opacity_changed : 1; // prevent fetching opacity next prop change
struct
{
int left;
int right;
int top;
int bottom;
int left_start_y;
int left_end_y;
int right_start_y;
int right_end_y;
int top_start_x;
int top_end_x;
int bottom_start_x;
int bottom_end_x;
} strut;
unsigned char ping : 1;
struct
{
unsigned char request : 1;
unsigned char alarm : 1;
unsigned int wait;
unsigned int serial;
double send_time;
} sync;
/* NetWM Window state */
struct
{
unsigned char modal : 1;
unsigned char sticky : 1;
unsigned char maximized_v : 1;
unsigned char maximized_h : 1;
unsigned char shaded : 1;
unsigned char skip_taskbar : 1;
unsigned char skip_pager : 1;
unsigned char hidden : 1;
unsigned char fullscreen : 1;
E_Stacking stacking;
} state;
/* NetWM Window allowed actions */
struct
{
unsigned char move : 1;
unsigned char resize : 1;
unsigned char minimize : 1;
unsigned char shade : 1;
unsigned char stick : 1;
unsigned char maximized_h : 1;
unsigned char maximized_v : 1;
unsigned char fullscreen : 1;
unsigned char change_desktop : 1;
unsigned char close : 1;
} action;
E_Window_Type type;
E_Window_Type *extra_types;
int extra_types_num;
int startup_id;
struct
{
unsigned char name : 1;
unsigned char icon_name : 1;
unsigned char icon : 1;
unsigned char user_time : 1;
unsigned char strut : 1;
unsigned char type : 1;
unsigned char state : 1;
unsigned char opacity : 1;
/* No, fetch on new_client, shouldn't be changed after map.
unsigned char pid : 1;
*/
/* No, ignore this
unsigned char desktop : 1;
*/
} fetch;
struct
{
unsigned char state : 1;
} update;
} netwm;
/* Extra e stuff */
struct
{
struct
{
struct
{
int x, y;
unsigned char updated : 1;
} video_position;
Ecore_Window video_parent;
E_Client *video_parent_client;
Eina_List *video_child;
struct
{
Eina_Stringshare *name;
Eina_Stringshare **available_list;
Eina_Stringshare *set;
int num;
unsigned char wait_for_done : 1;
unsigned char use : 1;
} profile;
unsigned char centered : 1;
unsigned char video : 1;
} state;
struct
{
unsigned char state : 1;
unsigned char video_parent : 1;
unsigned char video_position : 1;
unsigned char profile : 1;
} fetch;
} e;
struct
{
struct
{
unsigned char soft_menu : 1;
unsigned char soft_menus : 1;
} fetch;
unsigned char soft_menu : 1;
unsigned char soft_menus : 1;
} qtopia;
struct
{
struct
{
unsigned char state : 1;
unsigned char vkbd : 1;
} fetch;
#ifdef E_COMP_X_H
Ecore_X_Virtual_Keyboard_State state;
#endif
unsigned char have_property : 1;
unsigned char vkbd : 1;
} vkbd;
struct
{
unsigned char visible : 1;
unsigned char pos : 1;
unsigned char size : 1;
unsigned char stack : 1;
unsigned char prop : 1;
unsigned char border : 1;
unsigned char reset_gravity : 1;
unsigned char shading : 1;
unsigned char shaded : 1;
unsigned char shape : 1;
unsigned char shape_input : 1;
unsigned char icon : 1;
Eina_Bool internal_props : 1;
Eina_Bool internal_state : 1;
Eina_Bool need_maximize : 1;
Eina_Bool need_unmaximize : 1;
} changes;
unsigned int visible : 1;
Eina_Bool hidden : 1; // set when window has been hidden by api and should not be shown
unsigned int await_hide_event;
unsigned int moving : 1;
unsigned int focused : 1;
unsigned int new_client : 1;
unsigned int re_manage : 1;
unsigned int placed : 1;
unsigned int shading : 1;
unsigned int shaded : 1;
unsigned int iconic : 1;
unsigned int deskshow : 1;
unsigned int sticky : 1;
unsigned int shaped_input : 1;
unsigned int need_shape_merge : 1;
unsigned int need_shape_export : 1;
unsigned int fullscreen : 1;
unsigned int need_fullscreen : 1;
unsigned int already_unparented : 1;
unsigned int need_reparent : 1;
unsigned int button_grabbed : 1;
unsigned int delete_requested : 1;
unsigned int ping_ok : 1;
unsigned int hung : 1;
unsigned int take_focus : 1;
unsigned int want_focus : 1;
unsigned int user_skip_winlist : 1;
E_Maximize maximized;
E_Fullscreen fullscreen_policy;
unsigned int borderless : 1;
unsigned char offer_resistance : 1;
Eina_Stringshare *bordername;
unsigned int lock_user_location : 1; /*DONE*/
unsigned int lock_client_location : 1; /*DONE*/
unsigned int lock_user_size : 1; /*DONE*/
unsigned int lock_client_size : 1; /*DONE*/
unsigned int lock_user_stacking : 1; /*DONE*/
unsigned int lock_client_stacking : 1; /*DONE*/
unsigned int lock_user_iconify : 1; /*DONE*/
unsigned int lock_client_iconify : 1; /*DONE*/
unsigned int lock_user_desk : 1;
unsigned int lock_client_desk : 1;
unsigned int lock_user_sticky : 1; /*DONE*/
unsigned int lock_client_sticky : 1; /*DONE*/
unsigned int lock_user_shade : 1; /*DONE*/
unsigned int lock_client_shade : 1; /*DONE*/
unsigned int lock_user_maximize : 1; /*DONE*/
unsigned int lock_client_maximize : 1; /*DONE*/
unsigned int lock_user_fullscreen : 1; /*DONE*/
unsigned int lock_client_fullscreen : 1; /*DONE*/
unsigned int lock_border : 1; /*DONE*/
unsigned int lock_close : 1; /*DONE*/
unsigned int lock_focus_in : 1; /*DONE*/
unsigned int lock_focus_out : 1; /*DONE*/
unsigned int lock_life : 1; /*DONE*/
unsigned int stolen : 1;
unsigned int internal : 1;
unsigned int internal_no_remember : 1;
unsigned int internal_no_reopen : 1;
Eina_Bool theme_shadow : 1;
Ecore_Evas *internal_ecore_evas;
double ping;
unsigned char changed : 1;
unsigned char icon_preference;
struct
{
int x, y;
int modified;
} shelf_fix;
Eina_List *stick_desks;
E_Menu *border_menu;
E_Config_Dialog *border_locks_dialog;
E_Config_Dialog *border_remember_dialog;
E_Config_Dialog *border_border_dialog;
E_Dialog *border_prop_dialog;
Eina_List *pending_resize;
struct
{
unsigned char start : 1;
int x, y;
} drag;
Ecore_Timer *raise_timer;
E_Client_Move_Intercept_Cb move_intercept_cb;
E_Remember *remember;
Efreet_Desktop *desktop;
E_Exec_Instance *exe_inst;
unsigned char comp_hidden : 1;
unsigned char post_move : 1;
unsigned char post_resize : 1;
unsigned char post_show : 1;
unsigned char during_lost : 1;
Ecore_Idle_Enterer *post_job;
E_Focus_Policy focus_policy_override;
Eina_Bool override : 1;
Eina_Bool input_only : 1;
Eina_Bool dialog : 1;
Eina_Bool tooltip : 1;
Eina_Bool redirected : 1;
Eina_Bool shape_changed : 1;
Eina_Bool layer_block : 1; // client is doing crazy stuff and should not be relayered in protocol
Eina_Bool ignored : 1; // client is comp-ignored
Eina_Bool no_shape_cut : 1; // client shape should not be cut
};
#define e_client_focus_policy_click(ec) \
((ec->focus_policy_override == E_FOCUS_CLICK) || (e_config->focus_policy == E_FOCUS_CLICK))
/* macro for finding misuse of changed flag */
#if 0
# define EC_CHANGED(EC) \
do { \
if (e_object_is_del(E_OBJECT(EC))) \
EINA_LOG_CRIT("CHANGED SET ON DELETED CLIENT!"); \
EC->changed = 1; \
INF("%s:%d - EC CHANGED: %p", __FILE__, __LINE__, EC); \
} while (0)
#else
# define EC_CHANGED(EC) EC->changed = 1
#endif
#define E_CLIENT_FOREACH(COMP, EC) \
for (EC = e_client_bottom_get(COMP); EC; EC = e_client_above_get(EC))
#define E_CLIENT_REVERSE_FOREACH(COMP, EC) \
for (EC = e_client_top_get(COMP); EC; EC = e_client_below_get(EC))
EAPI extern int E_EVENT_CLIENT_ADD;
EAPI extern int E_EVENT_CLIENT_REMOVE;
EAPI extern int E_EVENT_CLIENT_ZONE_SET;
EAPI extern int E_EVENT_CLIENT_DESK_SET;
EAPI extern int E_EVENT_CLIENT_RESIZE;
EAPI extern int E_EVENT_CLIENT_MOVE;
EAPI extern int E_EVENT_CLIENT_SHOW;
EAPI extern int E_EVENT_CLIENT_HIDE;
EAPI extern int E_EVENT_CLIENT_ICONIFY;
EAPI extern int E_EVENT_CLIENT_UNICONIFY;
EAPI extern int E_EVENT_CLIENT_STICK;
EAPI extern int E_EVENT_CLIENT_UNSTICK;
EAPI extern int E_EVENT_CLIENT_STACK;
EAPI extern int E_EVENT_CLIENT_FOCUS_IN;
EAPI extern int E_EVENT_CLIENT_FOCUS_OUT;
EAPI extern int E_EVENT_CLIENT_PROPERTY;
EAPI extern int E_EVENT_CLIENT_FULLSCREEN;
EAPI extern int E_EVENT_CLIENT_UNFULLSCREEN;
EINTERN void e_client_idler_before(void);
EINTERN Eina_Bool e_client_init(void);
EINTERN void e_client_shutdown(void);
EAPI E_Client *e_client_new(E_Comp *c, E_Pixmap *cp, int first_map, int internal);
EAPI void e_client_desk_set(E_Client *ec, E_Desk *desk);
EAPI Eina_Bool e_client_comp_grabbed_get(void);
EAPI E_Client *e_client_action_get(void);
EAPI E_Client *e_client_warping_get(void);
EAPI Eina_List *e_clients_immortal_list(const E_Comp *c);
EAPI void e_client_mouse_in(E_Client *ec, int x, int y);
EAPI void e_client_mouse_out(E_Client *ec, int x, int y);
EAPI void e_client_mouse_wheel(E_Client *ec, Evas_Point *output, E_Binding_Event_Wheel *ev);
EAPI void e_client_mouse_down(E_Client *ec, int button, Evas_Point *output, E_Binding_Event_Mouse_Button *ev);
EAPI void e_client_mouse_up(E_Client *ec, int button, Evas_Point *output, E_Binding_Event_Mouse_Button* ev);
EAPI void e_client_mouse_move(E_Client *ec, Evas_Point *output);
EAPI void e_client_res_change_geometry_save(E_Client *bd);
EAPI void e_client_res_change_geometry_restore(E_Client *ec);
EAPI void e_client_zone_set(E_Client *ec, E_Zone *zone);
EAPI void e_client_geometry_get(E_Client *ec, int *x, int *y, int *w, int *h);
EAPI E_Client *e_client_above_get(const E_Client *ec);
EAPI E_Client *e_client_below_get(const E_Client *ec);
EAPI E_Client *e_client_bottom_get(const E_Comp *c);
EAPI E_Client *e_client_top_get(const E_Comp *c);
EAPI unsigned int e_clients_count(E_Comp *c);
EAPI void e_client_move_intercept_cb_set(E_Client *ec, E_Client_Move_Intercept_Cb cb);
EAPI E_Client_Hook *e_client_hook_add(E_Client_Hook_Point hookpoint, E_Client_Hook_Cb func, const void *data);
EAPI void e_client_hook_del(E_Client_Hook *ch);
EAPI void e_client_focus_latest_set(E_Client *ec);
EAPI void e_client_raise_latest_set(E_Client *ec);
EAPI Eina_Bool e_client_focus_track_enabled(void);
EAPI void e_client_focus_track_freeze(void);
EAPI void e_client_focus_track_thaw(void);
EAPI void e_client_focus_set_with_pointer(E_Client *ec);
EAPI void e_client_activate(E_Client *ec, Eina_Bool just_do_it);
EAPI E_Client *e_client_focused_get(void);
EAPI Eina_List *e_client_focus_stack_get(void);
EAPI Eina_List *e_client_raise_stack_get(void);
EAPI Eina_List *e_client_lost_windows_get(E_Zone *zone);
EAPI void e_client_shade(E_Client *ec, E_Direction dir);
EAPI void e_client_unshade(E_Client *ec, E_Direction dir);
EAPI void e_client_maximize(E_Client *ec, E_Maximize max);
EAPI void e_client_unmaximize(E_Client *ec, E_Maximize max);
EAPI void e_client_fullscreen(E_Client *ec, E_Fullscreen policy);
EAPI void e_client_unfullscreen(E_Client *ec);
EAPI void e_client_iconify(E_Client *ec);
EAPI void e_client_uniconify(E_Client *ec);
EAPI void e_client_stick(E_Client *ec);
EAPI void e_client_unstick(E_Client *ec);
EAPI void e_client_pinned_set(E_Client *ec, Eina_Bool set);
EAPI void e_client_comp_hidden_set(E_Client *ec, Eina_Bool hidden);
EAPI void e_client_act_move_keyboard(E_Client *ec);
EAPI void e_client_act_resize_keyboard(E_Client *ec);
EAPI void e_client_act_move_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev);
EAPI void e_client_act_move_end(E_Client *ec, E_Binding_Event_Mouse_Button *ev EINA_UNUSED);
EAPI void e_client_act_resize_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev);
EAPI void e_client_act_resize_end(E_Client *ec, E_Binding_Event_Mouse_Button *ev EINA_UNUSED);
EAPI void e_client_act_menu_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev, int key);
EAPI void e_client_act_close_begin(E_Client *ec);
EAPI void e_client_act_kill_begin(E_Client *ec);
EAPI Evas_Object *e_client_icon_add(E_Client *ec, Evas *evas);
EAPI void e_client_ping(E_Client *cw);
EAPI void e_client_move_cancel(void);
EAPI void e_client_resize_cancel(void);
EAPI Eina_Bool e_client_resize_begin(E_Client *ec);
EAPI void e_client_frame_recalc(E_Client *ec);
EAPI void e_client_signal_move_begin(E_Client *ec, const char *sig, const char *src EINA_UNUSED);
EAPI void e_client_signal_move_end(E_Client *ec, const char *sig EINA_UNUSED, const char *src EINA_UNUSED);
EAPI void e_client_signal_resize_begin(E_Client *ec, const char *dir, const char *sig, const char *src EINA_UNUSED);
EAPI void e_client_signal_resize_end(E_Client *ec, const char *dir EINA_UNUSED, const char *sig EINA_UNUSED, const char *src EINA_UNUSED);
EAPI void e_client_resize_limit(E_Client *ec, int *w, int *h);
EAPI E_Client *e_client_under_pointer_get(E_Desk *desk, E_Client *exclude);
EAPI int e_client_pointer_warp_to_center_now(E_Client *ec);
EAPI int e_client_pointer_warp_to_center(E_Client *ec);
EAPI void e_client_redirected_set(E_Client *ec, Eina_Bool set);
EAPI Eina_Stringshare *e_client_name_get(const E_Client *ec);
EAPI Eina_Bool e_client_util_is_stacking(const E_Client *ec);
#include "e_client.x"
#endif

98
src/bin/e_client.x Normal file
View File

@ -0,0 +1,98 @@
/**
* Move window to coordinates that do not account client decorations yet.
*
* This call will consider given position does not account client
* decoration, so these values (e_comp_object_frame) will be
* accounted automatically. This is specially useful when it is a new
* client and has not be evaluated yet, in this case
* the frame will be zeroed and no information is known. It
* will mark pending requests so client will be accounted on
* evalutation phase.
*
* @parm x horizontal position to place window.
* @parm y vertical position to place window.
*
* @see e_client_move()
*/
static inline void
e_client_util_move_without_frame(E_Client *ec, int x, int y)
{
e_comp_object_frame_xy_adjust(ec->frame, x, y, &x, &y);
evas_object_move(ec->frame, x, y);
}
/**
* Resize window to values that do not account client decorations yet.
*
* This call will consider given size does not account client
* decoration, so these values (e_comp_object_frame) will be
* accounted automatically. This is specially useful when it is a new
* client and has not be evaluated yet, in this case
* e_comp_object_frame will be zeroed and no information is known. It
* will mark pending requests so client will be accounted on
* evalutation phase.
*
* @parm w horizontal window size.
* @parm h vertical window size.
*
* @see e_client_resize()
*/
static inline void
e_client_util_resize_without_frame(E_Client *ec, int w, int h)
{
e_comp_object_frame_wh_adjust(ec->frame, w, h, &w, &h);
evas_object_resize(ec->frame, w, h);
}
/**
* Move and resize window to values that do not account client decorations yet.
*
* This call will consider given values already accounts client
* decorations, so it will not be considered later. This will just
* work properly with clients that have being evaluated and client
* decorations are known (e_comp_object_frame).
*
* @parm x horizontal position to place window.
* @parm y vertical position to place window.
* @parm w horizontal window size.
* @parm h vertical window size.
*
* @see e_client_move_resize()
*/
static inline void
e_client_util_move_resize_without_frame(E_Client *ec, int x, int y, int w, int h)
{
e_client_util_move_without_frame(ec, x, y);
e_client_util_resize_without_frame(ec, w, h);
}
static inline Eina_Bool
e_client_util_ignored_get(const E_Client *ec)
{
return ec->override || ec->input_only || ec->ignored;
}
static inline Eina_Bool
e_client_util_desk_visible(const E_Client *ec, const E_Desk *desk)
{
return ec->sticky || (ec->desk == desk);
}
static inline Ecore_Window
e_client_util_pwin_get(const E_Client *ec)
{
return e_pixmap_parent_window_get(ec->pixmap);
}
static inline Ecore_Window
e_client_util_win_get(const E_Client *ec)
{
return e_pixmap_window_get(ec->pixmap);
}
static inline Eina_Bool
e_client_resizing_get(const E_Client *ec)
{
return (ec->resize_mode != E_POINTER_RESIZE_NONE);
}

View File

@ -9,12 +9,12 @@ static void _e_color_dialog_cb_csel_change(void *data, Evas_Object *obj);
/**
* Create a color selector dialog.
*
* @param con container to display on
* @param c compositor to display on
* @param color color to initialize to (or NULL for black).
* @param alpha_enabled if set, uses alpha and let user edit it.
*/
E_Color_Dialog *
e_color_dialog_new(E_Container *con, const E_Color *color, Eina_Bool alpha_enabled)
e_color_dialog_new(E_Comp *c, const E_Color *color, Eina_Bool alpha_enabled)
{
E_Color_Dialog *dia;
Evas_Object *o;
@ -22,7 +22,7 @@ e_color_dialog_new(E_Container *con, const E_Color *color, Eina_Bool alpha_enabl
dia = E_OBJECT_ALLOC(E_Color_Dialog, E_COLOR_DIALOG_TYPE, _e_color_dialog_free);
if (!dia) return NULL;
dia->dia = e_dialog_new(con, "E", "_color_dialog");
dia->dia = e_dialog_new(c, "E", "_color_dialog");
e_dialog_title_set(dia->dia, _("Color Selector"));
dia->color = calloc(1, sizeof(E_Color));

View File

@ -12,7 +12,6 @@ struct _E_Color_Dialog
{
E_Object e_obj_inherit;
E_Container *con;
E_Dialog *dia;
E_Color *color, *initial;
@ -25,7 +24,7 @@ struct _E_Color_Dialog
void *change_data;
};
EAPI E_Color_Dialog *e_color_dialog_new (E_Container *con, const E_Color *initial_color, Eina_Bool alpha_enabled);
EAPI E_Color_Dialog *e_color_dialog_new (E_Comp *c, const E_Color *initial_color, Eina_Bool alpha_enabled);
EAPI void e_color_dialog_show (E_Color_Dialog *dia);
EAPI void e_color_dialog_title_set (E_Color_Dialog *dia, const char *title);

File diff suppressed because it is too large Load Diff

View File

@ -1,210 +1,130 @@
#ifdef E_TYPEDEFS
typedef struct _E_Comp E_Comp;
typedef struct _E_Comp_Win E_Comp_Win;
typedef struct _E_Comp_Zone E_Comp_Zone;
typedef struct E_Event_Comp E_Event_Comp;
typedef struct _E_Comp_Data E_Comp_Data;
typedef struct _E_Comp_Client_Data E_Comp_Client_Data;
typedef struct _E_Comp_Demo_Style_Item E_Comp_Demo_Style_Item;
typedef enum
{
E_COMP_CANVAS_LAYER_BOTTOM = -100,
E_COMP_CANVAS_LAYER_BG = -1, // zone bg stuff
E_COMP_CANVAS_LAYER_DESKTOP = 0, // desktop objects: fileman, gadgets, shelves
E_COMP_CANVAS_LAYER_DESKTOP_TOP = 10, // raised desktop objects: gadgets, shelves
E_COMP_CANVAS_LAYER_LAYOUT = 100, // should be nothing else on this layer
E_COMP_CANVAS_LAYER_POPUP = 999, // popups
E_COMP_CANVAS_LAYER_MENU = 5000, // menus
E_COMP_CANVAS_LAYER_DESKLOCK = 9999, // desklock
E_COMP_CANVAS_LAYER_MAX = 32767 // EVAS_LAYER_MAX
} E_Comp_Canvas_Layer;
#define E_COMP_TYPE (int) 0xE0b01003
#define E_LAYER_COUNT 19
#define E_CLIENT_LAYER_COUNT 11
typedef enum _E_Layer
{
E_LAYER_DESKTOP = 0,
E_LAYER_BELOW = 50,
E_LAYER_NORMAL = 100,
E_LAYER_ABOVE = 150,
E_LAYER_EDGE = 200,
E_LAYER_FULLSCREEN = 250,
E_LAYER_EDGE_FULLSCREEN = 300,
E_LAYER_POPUP = 300,
E_LAYER_TOP = 350,
E_LAYER_DRAG = 400,
E_LAYER_PRIO = 450
E_LAYER_BOTTOM = -100,
E_LAYER_BG = -1, // zone bg stuff
E_LAYER_DESKTOP = 0, // desktop objects: fileman, gadgets, shelves
E_LAYER_DESKTOP_TOP = 10, // raised desktop objects: gadgets
E_LAYER_CLIENT_DESKTOP = 100, //shelves
E_LAYER_CLIENT_BELOW = 150,
E_LAYER_CLIENT_NORMAL = 200,
E_LAYER_CLIENT_ABOVE = 250,
E_LAYER_CLIENT_EDGE = 300,
E_LAYER_CLIENT_FULLSCREEN = 350,
E_LAYER_CLIENT_EDGE_FULLSCREEN = 400,
E_LAYER_CLIENT_POPUP = 450,
E_LAYER_CLIENT_TOP = 500,
E_LAYER_CLIENT_DRAG = 550,
E_LAYER_CLIENT_PRIO = 600,
E_LAYER_POPUP = 999, // popups
E_LAYER_MENU = 5000, // menus
E_LAYER_DESKLOCK = 9999, // desklock
E_LAYER_MAX = 32767 // EVAS_LAYER_MAX
} E_Layer;
typedef enum
{
E_COMP_CANVAS_STACK_UNDER = -1,
E_COMP_CANVAS_STACK_NONE = 0,
E_COMP_CANVAS_STACK_ABOVE = 1
} E_Comp_Canvas_Stack;
#else
#ifndef E_MOD_COMP_H
#define E_MOD_COMP_H
# include "e_comp_cfdata.h"
# include "e_comp_render_update.h"
struct _E_Comp
{
Ecore_X_Window win; // input overlay
E_Object e_obj_inherit;
Ecore_Window win; // input overlay
Ecore_Evas *ee;
Ecore_X_Window ee_win;
Ecore_Window ee_win;
Evas *evas;
Evas_Object *layout;
Evas_Object *bg_blank_object;
Eina_List *zones;
E_Manager *man;
E_Pointer *pointer;
Eina_List *clients;
unsigned int new_clients;
E_Comp_Data *comp_data;
E_Pixmap_Type comp_type; //for determining X/Wayland/
unsigned int num;
Eina_Stringshare *name;
struct {
Ecore_Window win;
Evas_Object *obj;
//Eina_Inlist *objs; /* E_Comp_Object; NOT to be exposed; seems pointless? */
Eina_Inlist *clients; /* E_Client, bottom to top */
unsigned int clients_count;
} layers[E_LAYER_COUNT];
struct
{
Evas_Object *rect;
Evas_Object *obj;
Ecore_Event_Handler *key_handler;
E_Comp_Object_Autoclose_Cb del_cb;
E_Comp_Object_Key_Cb key_cb;
void *data;
} autoclose;
Eina_List *debug_rects;
Eina_List *ignore_wins;
Eina_Inlist *wins;
Eina_List *wins_list;
Eina_List *updates;
Eina_List *post_updates;
Ecore_Animator *render_animator;
Ecore_Job *shape_job;
Ecore_Job *update_job;
Ecore_Timer *new_up_timer;
Evas_Object *fps_bg;
Evas_Object *fps_fg;
Ecore_Job *screen_job;
Ecore_Timer *nocomp_delay_timer;
Ecore_Timer *nocomp_override_timer;
int animating;
int render_overflow;
double frametimes[122];
int frameskip;
int nocomp_override; //number of times nocomp override has been requested
Ecore_X_Window block_win;
Ecore_Window block_win;
int block_count; //number of times block window has been requested
Ecore_X_Window cm_selection;
Ecore_Window cm_selection; //FIXME: move to comp_x ?
int depth;
Ecore_Cb grab_cb;
Ecore_Cb bindings_grab_cb;
Ecore_Cb bindings_ungrab_cb;
Eina_Bool gl : 1;
Eina_Bool grabbed : 1;
Eina_Bool nocomp : 1;
Eina_Bool nocomp_want : 1;
Eina_Bool wins_invalid : 1;
Eina_Bool saver : 1;
Eina_Bool shape_queue_blocked : 1;
};
struct _E_Comp_Zone
struct _E_Comp_Demo_Style_Item
{
E_Comp *comp;
E_Zone *zone; // never deref - just use for handle cmp's
Evas_Object *base;
Evas_Object *over;
int container_num;
int zone_num;
int x, y, w, h;
double bl;
Eina_Bool bloff;
Evas_Object *preview;
Evas_Object *frame;
Evas_Object *livethumb;
Evas_Object *layout;
Evas_Object *border;
Evas_Object *client;
};
struct _E_Comp_Win
{
EINA_INLIST;
E_Comp *c; // parent compositor
Ecore_X_Window win; // raw window - for menus etc.
E_Container_Shape *shape;
E_Border *bd; // if its a border - later
E_Popup *pop; // if its a popup - later
E_Menu *menu; // if it is a menu - later
int x, y, w, h; // geometry
Eina_Rectangle hidden; // hidden geometry (used when its unmapped and re-instated on map)
int pw, ph; // pixmap w/h
int border; // border width
Ecore_X_Pixmap pixmap; // the compositing pixmap
Ecore_X_Damage damage; // damage region
Ecore_X_Visual vis; // window visual
Ecore_X_Colormap cmap; // colormap of window
int depth; // window depth
Evas_Object *obj; // composite object
Evas_Object *zoomobj; // zoomap
Evas_Object *shobj; // shadow object
Evas_Object *effect_obj; // effects object
E_Object *eobj; // internal e object
E_Comp_Win *cw_above; // comp win that should always be stacked above this one
Eina_List *stack_below; // list of objects to keep stacked below this one
Eina_List *obj_mirror; // extra mirror objects
Ecore_X_Image *xim; // x image - software fallback
E_Comp_Render_Update *up; // update handler
E_Object_Delfn *dfn; // delete function handle for objects being tracked
Ecore_Timer *update_timeout; // max time between damage and "done" event
Ecore_Timer *ready_timeout; // max time on show (new window draw) to wait for window contents to be ready if sync protocol not handled. this is fallback.
int dmg_updates; // num of damage event updates since a redirect
Ecore_X_Pixmap cache_pixmap; // the cached pixmap (1/nth the dimensions)
int cache_w, cache_h; // cached pixmap size
int update_count; // how many updates have happened to this win
double last_visible_time; // last time window was visible
double last_draw_time; // last time window was damaged
int pending_count; // pending event count
unsigned int opacity; // opacity set with _NET_WM_WINDOW_OPACITY
Ecore_Timer *opacity_set_timer; // timer for setting opacity in ecore-x to avoid roundtrips
char *title, *name, *clas, *role; // fetched for override-redirect windowa
Ecore_X_Window_Type primary_type; // fetched for override-redirect windowa
unsigned char misses; // number of sync misses
Eina_Bool delete_pending : 1; // delete pendig
Eina_Bool hidden_override : 1; // hidden override
Eina_Bool animating : 1; // it's busy animating - defer hides/dels
Eina_Bool force : 1; // force del/hide even if animating
Eina_Bool defer_hide : 1; // flag to get hide to work on deferred hide
Eina_Bool delete_me : 1; // delete me!
Eina_Bool visible : 1; // is visible
Eina_Bool input_only : 1; // is input_only
Eina_Bool override : 1; // is override-redirect
Eina_Bool argb : 1; // is argb
Eina_Bool shaped : 1; // is shaped
Eina_Bool update : 1; // has updates to fetch
Eina_Bool redirected : 1; // has updates to fetch
Eina_Bool shape_changed : 1; // shape changed
Eina_Bool native : 1; // native
Eina_Bool drawme : 1; // drawme flag fo syncing rendering
Eina_Bool invalid : 1; // invalid depth used - just use as marker
Eina_Bool nocomp : 1; // nocomp applied
Eina_Bool nocomp_need_update : 1; // nocomp in effect, but this window updated while in nocomp mode
Eina_Bool needpix : 1; // need new pixmap
Eina_Bool needxim : 1; // need new xim
Eina_Bool real_hid : 1; // last hide was a real window unmap
Eina_Bool inhash : 1; // is in the windows hash
Eina_Bool show_ready : 1; // is this window ready for its first show
Eina_Bool geom_update : 1; // window needs geometry updated
Eina_Bool show_anim : 1; // ran show animation
Eina_Bool bg_win : 1; // window is the bg win for a container
Eina_Bool free_shape : 1; // container shape needs to be freed
Eina_Bool real_obj : 1; // real object (for dummy comp wins)
Eina_Bool not_in_layout : 1; // object is a dummy not in comp layout
Eina_Bool effect_clip : 1; //effect_obj is clipped
Eina_Bool effect_clip_able : 1; //effect_obj will be clipped for effects
};
struct E_Event_Comp
{
E_Comp_Win *cw;
};
extern EAPI int E_EVENT_COMP_SOURCE_VISIBILITY;
extern EAPI int E_EVENT_COMP_SOURCE_ADD;
extern EAPI int E_EVENT_COMP_SOURCE_DEL;
extern EAPI int E_EVENT_COMP_SOURCE_CONFIGURE;
extern EAPI int E_EVENT_COMP_SOURCE_STACK;
typedef enum
{
E_COMP_ENGINE_NONE = 0,
@ -213,67 +133,40 @@ typedef enum
} E_Comp_Engine;
EINTERN Eina_Bool e_comp_init(void);
EINTERN int e_comp_shutdown(void);
EINTERN Eina_Bool e_comp_manager_init(E_Manager *man);
EAPI const Eina_List *e_comp_list(void);
EAPI E_Comp *e_comp_new(void);
EAPI int e_comp_internal_save(void);
EINTERN int e_comp_shutdown(void);
EAPI void e_comp_render_queue(E_Comp *c);
EAPI void e_comp_shape_queue(E_Comp *c);
EAPI void e_comp_shape_queue_block(E_Comp *c, Eina_Bool block);
EAPI E_Comp_Config *e_comp_config_get(void);
EAPI const Eina_List *e_comp_list(void);
EAPI void e_comp_shadows_reset(void);
EAPI void e_comp_block_window_add(void);
EAPI void e_comp_block_window_del(void);
EAPI void e_comp_render_update(E_Comp *c);
EAPI void e_comp_zone_update(E_Comp_Zone *cz);
EAPI E_Comp *e_comp_get(const void *o);
EAPI Ecore_Window e_comp_top_window_at_xy_get(E_Comp *c, Evas_Coord x, Evas_Coord y);
EAPI void e_comp_util_wins_print(const E_Comp *c);
EAPI void e_comp_ignore_win_add(E_Pixmap_Type type, Ecore_Window win);
EAPI void e_comp_ignore_win_del(E_Pixmap_Type type, Ecore_Window win);
EAPI Eina_Bool e_comp_ignore_win_find(Ecore_Window win);
EAPI void e_comp_override_del(E_Comp *c);
EAPI void e_comp_override_add(E_Comp *c);
EAPI void e_comp_win_effect_set(E_Comp_Win *cw, const char *effect);
EAPI void e_comp_win_effect_params_set(E_Comp_Win *cw, int id, int *params, unsigned int count);
EAPI void e_comp_win_effect_start(E_Comp_Win *cw, Edje_Signal_Cb end_cb, const void *end_data);
EAPI void e_comp_win_effect_stop(E_Comp_Win *cw, Edje_Signal_Cb end_cb);
EAPI void e_comp_win_effect_clip(E_Comp_Win *cw);
EAPI void e_comp_win_effect_unclip(E_Comp_Win *cw);
EAPI E_Comp_Win *e_comp_win_find_client_win(Ecore_X_Window win);
EAPI E_Comp_Win *e_comp_win_find(Ecore_X_Window win);
EAPI const Eina_List *e_comp_win_list_get(E_Comp *c);
EAPI Evas_Object *e_comp_win_image_mirror_add(E_Comp_Win *cw);
EAPI void e_comp_win_hidden_set(E_Comp_Win *cw, Eina_Bool hidden);
EAPI void e_comp_win_opacity_set(E_Comp_Win *cw, unsigned int opacity);
EAPI E_Comp *e_comp_get(void *o);
EAPI void e_comp_populate(E_Comp *c);
EAPI Ecore_X_Window e_comp_top_window_at_xy_get(E_Comp *c, Evas_Coord x, Evas_Coord y, Eina_Bool vis, Ecore_X_Window *ignore, unsigned int ignore_num);
/* for injecting objects into the comp layout */
EAPI E_Comp_Win *e_comp_object_inject(E_Comp *c, Evas_Object *obj, E_Object *eobj, E_Layer layer);
/* for giving objects the comp theme and such without injecting into layout */
EAPI E_Comp_Win *e_comp_object_add(E_Comp *c, Evas_Object *obj, E_Object *eobj);
EAPI void e_comp_win_move(E_Comp_Win *cw, Evas_Coord x, Evas_Coord y);
EAPI void e_comp_win_resize(E_Comp_Win *cw, int w, int h);
EAPI void e_comp_win_moveresize(E_Comp_Win *cw, Evas_Coord x, Evas_Coord y, int w, int h);
EAPI void e_comp_win_hide(E_Comp_Win *cw);
EAPI void e_comp_win_show(E_Comp_Win *cw);
EAPI void e_comp_win_del(E_Comp_Win *cw);
EAPI void e_comp_win_reshadow(E_Comp_Win *cw);
EAPI void e_comp_ignore_win_add(Ecore_X_Window win);
#define E_LAYER_SET(obj, layer) e_comp_canvas_layer_set(obj, layer, 0, E_COMP_CANVAS_STACK_NONE)
#define E_LAYER_SET_UNDER(obj, layer) e_comp_canvas_layer_set(obj, layer, 0, E_COMP_CANVAS_STACK_UNDER)
#define E_LAYER_SET_ABOVE(obj, layer) e_comp_canvas_layer_set(obj, layer, 0, E_COMP_CANVAS_STACK_ABOVE)
#define E_LAYER_LAYOUT_ADD(obj, layer) e_comp_canvas_layer_set(obj, E_COMP_CANVAS_LAYER_LAYOUT, layer, E_COMP_CANVAS_STACK_NONE)
#define E_LAYER_LAYOUT_ADD_UNDER(obj, layer) e_comp_canvas_layer_set(obj, E_COMP_CANVAS_LAYER_LAYOUT, layer, E_COMP_CANVAS_STACK_UNDER)
#define E_LAYER_LAYOUT_ADD_ABOVE(obj, layer) e_comp_canvas_layer_set(obj, E_COMP_CANVAS_LAYER_LAYOUT, layer, E_COMP_CANVAS_STACK_ABOVE)
EAPI E_Comp_Win *e_comp_canvas_layer_set(Evas_Object *obj, E_Comp_Canvas_Layer comp_layer, E_Layer layer, E_Comp_Canvas_Stack stack);
EAPI void e_comp_block_window_add(void);
EAPI void e_comp_block_window_del(void);
EAPI E_Comp *e_comp_find_by_window(Ecore_Window win);
EAPI void e_comp_override_timed_pop(E_Comp *c);
EAPI unsigned int e_comp_e_object_layer_get(const E_Object *obj);
EAPI Eina_Bool e_comp_grab_input(E_Comp *c, Eina_Bool mouse, Eina_Bool kbd);
EAPI void e_comp_ungrab_input(E_Comp *c, Eina_Bool mouse, Eina_Bool kbd);
EAPI void e_comp_gl_set(Eina_Bool set);
EAPI Eina_Bool e_comp_gl_get(void);
EAPI E_Comp *e_comp_evas_find(const Evas *e);
EAPI void e_comp_button_bindings_grab_all(void);
EAPI void e_comp_button_bindings_ungrab_all(void);
EINTERN Evas_Object *e_comp_style_selector_create(Evas *evas, const char **source);
EAPI E_Config_Dialog *e_int_config_comp(E_Comp *comp, const char *params);
EAPI E_Config_Dialog *e_int_config_comp_match(E_Comp *comp, const char *params);
static inline E_Comp *
e_comp_util_evas_object_comp_get(Evas_Object *obj)
@ -282,35 +175,16 @@ e_comp_util_evas_object_comp_get(Evas_Object *obj)
}
static inline Eina_Bool
e_comp_evas_exists(void *o)
e_comp_util_client_is_fullscreen(const E_Client *ec)
{
E_Comp *c;
EINA_SAFETY_ON_NULL_RETURN_VAL(o, EINA_FALSE);
c = e_comp_get(o);
return c ? !!c->evas : EINA_FALSE;
if ((!ec->visible) || (ec->input_only))
return EINA_FALSE;
return ((ec->client.x == 0) && (ec->client.y == 0) &&
((ec->client.w) >= ec->comp->man->w) &&
((ec->client.h) >= ec->comp->man->h) &&
(!ec->argb) && (!ec->shaped)
);
}
static inline void
e_comp_win_ignore_events_set(E_Comp_Win *cw, Eina_Bool ignore)
{
EINA_SAFETY_ON_NULL_RETURN(cw);
ignore = !!ignore;
evas_object_pass_events_set(cw->effect_obj, ignore);
}
static inline unsigned int
e_comp_e_object_layer_effective_get(const E_Object *obj)
{
unsigned int layer;
layer = e_comp_e_object_layer_get(obj);
if ((layer > E_COMP_CANVAS_LAYER_LAYOUT) && (layer < E_COMP_CANVAS_LAYER_POPUP))
layer = E_COMP_CANVAS_LAYER_LAYOUT;
return layer;
}
EAPI void e_comp_util_wins_print(const E_Comp *c);
EAPI void e_comp_shape_queue(E_Comp *c);
#endif
#endif

579
src/bin/e_comp_canvas.c Normal file
View File

@ -0,0 +1,579 @@
#include "e.h"
static void
_e_comp_canvas_event_compositor_resize_free(void *data EINA_UNUSED, void *event)
{
E_Event_Compositor_Resize *ev = event;
e_object_unref(E_OBJECT(ev->comp));
free(ev);
}
///////////////////////////////////
static void
_e_comp_canvas_cb_first_frame(void *data, Evas *e, void *event_info EINA_UNUSED)
{
E_Comp *c = data;
double now = ecore_time_get();
switch (e_first_frame[0])
{
case 'A': abort();
case 'E':
case 'D': exit(-1);
case 'T': fprintf(stderr, "Startup time: '%f' - '%f' = '%f'\n", now, e_first_frame_start_time, now - e_first_frame_start_time);
break;
}
evas_event_callback_del_full(e, EVAS_CALLBACK_RENDER_POST, _e_comp_canvas_cb_first_frame, c);
}
static void
_e_comp_canvas_render_post(void *data, Evas *e EINA_UNUSED, void *event_info EINA_UNUSED)
{
E_Comp *c = data;
E_Client *ec;
//Evas_Event_Render_Post *ev = event_info;
//Eina_List *l;
//Eina_Rectangle *r;
//if (ev)
//{
//EINA_LIST_FOREACH(ev->updated_area, l, r)
//INF("POST RENDER: %d,%d %dx%d", r->x, r->y, r->w, r->h);
//}
EINA_LIST_FREE(c->post_updates, ec)
{
//INF("POST %p", ec);
if (!e_object_is_del(E_OBJECT(ec)))
e_pixmap_image_clear(ec->pixmap, 1);
}
}
///////////////////////////////////
static void
_e_comp_canvas_cb_mouse_in(E_Comp *c EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
E_Client *ec;
if (e_client_action_get()) return;
ec = e_client_focused_get();
if (ec && (!ec->border_menu)) e_focus_event_mouse_out(ec);
}
static void
_e_comp_canvas_cb_mouse_down(E_Comp *c, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
{
if (e_client_action_get()) return;
e_bindings_mouse_down_evas_event_handle(E_BINDING_CONTEXT_COMPOSITOR, E_OBJECT(c), event_info);
}
static void
_e_comp_canvas_cb_mouse_up(E_Comp *c, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
{
if (e_client_action_get()) return;
e_bindings_mouse_up_evas_event_handle(E_BINDING_CONTEXT_COMPOSITOR, E_OBJECT(c), event_info);
}
static void
_e_comp_canvas_cb_mouse_wheel(E_Comp *c, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
{
if (e_client_action_get()) return;
e_bindings_wheel_evas_event_handle(E_BINDING_CONTEXT_COMPOSITOR, E_OBJECT(c), event_info);
}
////////////////////////////////////
static int
_e_comp_canvas_cb_zone_sort(const void *data1, const void *data2)
{
const E_Zone *z1 = data1, *z2 = data2;
return z2->num - z1->num;
}
EAPI Eina_Bool
e_comp_canvas_init(E_Comp *c)
{
Evas_Object *o;
Eina_List *screens;
unsigned int layer;
c->evas = ecore_evas_get(c->ee);
if (e_first_frame)
evas_event_callback_add(c->evas, EVAS_CALLBACK_RENDER_POST, _e_comp_canvas_cb_first_frame, c);
ecore_evas_data_set(c->ee, "comp", c);
o = evas_object_rectangle_add(c->evas);
c->bg_blank_object = o;
evas_object_layer_set(o, E_LAYER_BOTTOM);
evas_object_move(o, 0, 0);
evas_object_resize(o, c->man->w, c->man->h);
evas_object_color_set(o, 255, 255, 255, 255);
evas_object_name_set(o, "comp->bg_blank_object");
evas_object_data_set(o, "e_comp", c);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, (Evas_Object_Event_Cb)_e_comp_canvas_cb_mouse_down, c);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, (Evas_Object_Event_Cb)_e_comp_canvas_cb_mouse_up, c);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_IN, (Evas_Object_Event_Cb)_e_comp_canvas_cb_mouse_in, c);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_WHEEL, (Evas_Object_Event_Cb)_e_comp_canvas_cb_mouse_wheel, c);
evas_object_show(o);
ecore_evas_name_class_set(c->ee, "E", "Comp_EE");
// ecore_evas_manual_render_set(c->ee, conf->lock_fps);
ecore_evas_show(c->ee);
evas_event_callback_add(c->evas, EVAS_CALLBACK_RENDER_POST, _e_comp_canvas_render_post, c);
c->ee_win = ecore_evas_window_get(c->ee);
for (layer = 0; layer <= e_comp_canvas_layer_map(E_LAYER_MAX); layer++)
{
Evas_Object *o2;
/* client layers have actual X windows backing them, so we wait */
if (e_comp_canvas_client_layer_map(e_comp_canvas_layer_map_to(layer)) != 9999)
continue;
o2 = c->layers[layer].obj = evas_object_rectangle_add(c->evas);
evas_object_layer_set(o2, e_comp_canvas_layer_map_to(layer));
evas_object_name_set(o2, "layer_obj");
}
screens = (Eina_List *)e_xinerama_screens_get();
if (screens)
{
E_Screen *scr;
Eina_List *l;
EINA_LIST_FOREACH(screens, l, scr)
{
e_zone_new(c, scr->screen, scr->escreen, scr->x, scr->y, scr->w, scr->h);
}
}
else
e_zone_new(c, 0, 0, 0, 0, c->man->w, c->man->h);
return EINA_TRUE;
}
EINTERN void
e_comp_canvas_clear(E_Comp *c)
{
evas_event_freeze(c->evas);
edje_freeze();
E_FREE_FUNC(c->fps_fg, evas_object_del);
E_FREE_FUNC(c->fps_bg, evas_object_del);
E_FREE_FUNC(c->autoclose.rect, evas_object_del);
E_FREE_FUNC(c->shape_job, ecore_job_del);
E_FREE_FUNC(c->pointer, e_object_del);
}
//////////////////////////////////////////////
EAPI void
e_comp_all_freeze(void)
{
Eina_List *l;
E_Manager *man;
EINA_LIST_FOREACH(e_manager_list(), l, man)
evas_event_freeze(man->comp->evas);
}
EAPI void
e_comp_all_thaw(void)
{
Eina_List *l;
E_Manager *man;
EINA_LIST_FOREACH(e_manager_list(), l, man)
evas_event_thaw(man->comp->evas);
}
EAPI E_Zone *
e_comp_zone_xy_get(const E_Comp *c, Evas_Coord x, Evas_Coord y)
{
const Eina_List *l;
E_Zone *zone;
EINA_SAFETY_ON_NULL_RETURN_VAL(c, NULL);
EINA_LIST_FOREACH(c->zones, l, zone)
if (E_INSIDE(x, y, zone->x, zone->y, zone->w, zone->h)) return zone;
return NULL;
}
EAPI E_Zone *
e_comp_zone_number_get(E_Comp *c, int num)
{
Eina_List *l = NULL;
E_Zone *zone = NULL;
E_OBJECT_CHECK_RETURN(c, NULL);
E_OBJECT_TYPE_CHECK_RETURN(c, E_COMP_TYPE, NULL);
EINA_LIST_FOREACH(c->zones, l, zone)
{
if ((int)zone->num == num) return zone;
}
return NULL;
}
EAPI E_Zone *
e_comp_zone_id_get(E_Comp *c, int id)
{
Eina_List *l = NULL;
E_Zone *zone = NULL;
E_OBJECT_CHECK_RETURN(c, NULL);
E_OBJECT_TYPE_CHECK_RETURN(c, E_COMP_TYPE, NULL);
EINA_LIST_FOREACH(c->zones, l, zone)
{
if (zone->id == id) return zone;
}
return NULL;
}
EAPI E_Comp *
e_comp_number_get(unsigned int num)
{
const Eina_List *l;
E_Comp *c;
EINA_LIST_FOREACH(e_comp_list(), l, c)
if (c->num == num) return c;
return NULL;
}
EAPI E_Desk *
e_comp_desk_window_profile_get(E_Comp *c, const char *profile)
{
Eina_List *l = NULL;
E_Zone *zone = NULL;
int x, y;
E_OBJECT_CHECK_RETURN(c, NULL);
E_OBJECT_TYPE_CHECK_RETURN(c, E_COMP_TYPE, NULL);
EINA_SAFETY_ON_NULL_RETURN_VAL(profile, NULL);
EINA_LIST_FOREACH(c->zones, l, zone)
{
for (x = 0; x < zone->desk_x_count; x++)
{
for (y = 0; y < zone->desk_y_count; y++)
{
E_Desk *desk = e_desk_at_xy_get(zone, x, y);
if (!e_util_strcmp(desk->window_profile, profile))
return desk;
}
}
}
return NULL;
}
EAPI void
e_comp_canvas_zone_update(E_Zone *zone)
{
Evas_Object *o;
const char *const over_styles[] =
{
"e/comp/screen/overlay/default",
"e/comp/screen/overlay/noeffects"
};
const char *const under_styles[] =
{
"e/comp/screen/base/default",
"e/comp/screen/base/noeffects"
};
E_Comp_Config *conf = e_comp_config_get();
if (zone->over && zone->base)
{
e_theme_edje_object_set(zone->base, "base/theme/comp",
under_styles[conf->disable_screen_effects]);
edje_object_part_swallow(zone->base, "e.swallow.background",
zone->transition_object ?: zone->bg_object);
e_theme_edje_object_set(zone->over, "base/theme/comp",
over_styles[conf->disable_screen_effects]);
return;
}
E_FREE_FUNC(zone->base, evas_object_del);
E_FREE_FUNC(zone->over, evas_object_del);
zone->base = o = edje_object_add(zone->comp->evas);
evas_object_repeat_events_set(o, 1);
evas_object_name_set(zone->base, "zone->base");
e_theme_edje_object_set(o, "base/theme/comp", under_styles[conf->disable_screen_effects]);
edje_object_part_swallow(zone->base, "e.swallow.background", zone->transition_object ?: zone->bg_object);
evas_object_move(o, zone->x, zone->y);
evas_object_resize(o, zone->w, zone->h);
evas_object_layer_set(o, E_LAYER_BG);
evas_object_show(o);
zone->over = o = edje_object_add(zone->comp->evas);
evas_object_layer_set(o, E_LAYER_MAX);
evas_object_raise(o);
evas_object_name_set(zone->over, "zone->over");
evas_object_pass_events_set(o, 1);
e_theme_edje_object_set(o, "base/theme/comp", over_styles[conf->disable_screen_effects]);
evas_object_move(o, zone->x, zone->y);
evas_object_resize(o, zone->w, zone->h);
evas_object_raise(o);
evas_object_show(o);
}
EAPI void
e_comp_canvas_update(E_Comp *c)
{
E_Event_Compositor_Resize *ev;
Eina_List *l, *screens, *zones = NULL, *ll;
E_Zone *zone;
E_Screen *scr;
int i;
Eina_Bool changed = EINA_FALSE;
screens = (Eina_List *)e_xinerama_screens_get();
if (screens)
{
zones = c->zones;
c->zones = NULL;
EINA_LIST_FOREACH(screens, l, scr)
{
zone = NULL;
EINA_LIST_FOREACH(zones, ll, zone)
{
if (zone->id == scr->escreen) break;
zone = NULL;
}
if (zone)
{
changed |= e_zone_move_resize(zone, scr->x, scr->y, scr->w, scr->h);
if (changed)
printf("@@@ FOUND ZONE %i %i [%p]\n", zone->num, zone->id, zone);
zones = eina_list_remove(zones, zone);
c->zones = eina_list_append(c->zones, zone);
zone->num = scr->screen;
}
else
{
zone = e_zone_new(c, scr->screen, scr->escreen,
scr->x, scr->y, scr->w, scr->h);
printf("@@@ NEW ZONE = %p\n", zone);
changed = EINA_TRUE;
}
if (changed)
printf("@@@ SCREENS: %i %i | %i %i %ix%i\n",
scr->screen, scr->escreen, scr->x, scr->y, scr->w, scr->h);
}
c->zones = eina_list_sort(c->zones, 0, _e_comp_canvas_cb_zone_sort);
if (zones)
{
E_Zone *spare_zone;
changed = EINA_TRUE;
spare_zone = eina_list_data_get(c->zones);
EINA_LIST_FREE(zones, zone)
{
E_Client *ec;
/* delete any shelves on this zone */
E_CLIENT_FOREACH(c, ec)
{
if (ec->zone == zone)
{
if (spare_zone)
e_client_zone_set(ec, spare_zone);
else
printf("EEEK! should not be here - but no\n"
"spare zones exist to move this\n"
"window to!!! help!\n");
}
}
e_object_del(E_OBJECT(zone));
}
}
if (changed) e_shelf_config_update();
}
else
{
E_Zone *z;
z = e_comp_zone_number_get(c, 0);
if (z)
{
changed |= e_zone_move_resize(z, 0, 0, c->man->w, c->man->h);
if (changed) e_shelf_zone_move_resize_handle(z);
}
}
if (!changed) return;
if (!starting)
{
ev = calloc(1, sizeof(E_Event_Compositor_Resize));
ev->comp = c;
e_object_ref(E_OBJECT(c));
ecore_event_add(E_EVENT_COMPOSITOR_RESIZE, ev, _e_comp_canvas_event_compositor_resize_free, NULL);
}
EINA_LIST_FOREACH(c->zones, l, zone)
{
E_FREE_FUNC(zone->base, evas_object_del);
E_FREE_FUNC(zone->over, evas_object_del);
if (zone->bloff)
{
if (!e_comp_config_get()->nofade)
{
if (e_backlight_mode_get(zone) != E_BACKLIGHT_MODE_NORMAL)
e_backlight_mode_set(zone, E_BACKLIGHT_MODE_NORMAL);
e_backlight_level_set(zone, e_config->backlight.normal, -1.0);
}
}
e_comp_canvas_zone_update(zone);
}
for (i = 0; i < 11; i++)
{
Eina_List *tmp = NULL;
E_Client *ec;
if (!c->layers[i].clients) continue;
/* Make temporary list as e_client_res_change_geometry_restore
* rearranges the order. */
EINA_INLIST_FOREACH(c->layers[i].clients, ec)
tmp = eina_list_append(tmp, ec);
EINA_LIST_FREE(tmp, ec)
{
e_client_res_change_geometry_save(ec);
e_client_res_change_geometry_restore(ec);
}
}
}
EAPI void
e_comp_canvas_fake_layers_init(E_Comp *comp)
{
unsigned int layer;
/* init layers */
for (layer = e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); layer <= e_comp_canvas_layer_map(E_LAYER_CLIENT_PRIO); layer++)
{
Evas_Object *o2;
o2 = comp->layers[layer].obj = evas_object_rectangle_add(comp->evas);
evas_object_layer_set(o2, e_comp_canvas_layer_map_to(layer));
evas_object_name_set(o2, "layer_obj");
}
}
EAPI void
e_comp_canvas_fps_toggle(void)
{
E_Comp_Config *conf = e_comp_config_get();
conf->fps_show = !conf->fps_show;
e_comp_internal_save();
E_LIST_FOREACH(e_comp_list(), e_comp_render_queue);
}
EAPI E_Layer
e_comp_canvas_layer_map_to(unsigned int layer)
{
switch (layer)
{
case 0: return E_LAYER_BOTTOM;
case 1: return E_LAYER_BG;
case 2: return E_LAYER_DESKTOP;
case 3: return E_LAYER_DESKTOP_TOP;
case 4: return E_LAYER_CLIENT_DESKTOP;
case 5: return E_LAYER_CLIENT_BELOW;
case 6: return E_LAYER_CLIENT_NORMAL;
case 7: return E_LAYER_CLIENT_ABOVE;
case 8: return E_LAYER_CLIENT_EDGE;
case 9: return E_LAYER_CLIENT_FULLSCREEN;
case 10: return E_LAYER_CLIENT_EDGE_FULLSCREEN;
case 11: return E_LAYER_CLIENT_POPUP;
case 12: return E_LAYER_CLIENT_TOP;
case 13: return E_LAYER_CLIENT_DRAG;
case 14: return E_LAYER_CLIENT_PRIO;
case 15: return E_LAYER_POPUP;
case 16: return E_LAYER_MENU;
case 17: return E_LAYER_DESKLOCK;
case 18: return E_LAYER_MAX;
default: break;
}
return -INT_MAX;
}
EAPI unsigned int
e_comp_canvas_layer_map(E_Layer layer)
{
switch (layer)
{
case E_LAYER_BOTTOM: return 0;
case E_LAYER_BG: return 1;
case E_LAYER_DESKTOP: return 2;
case E_LAYER_DESKTOP_TOP: return 3;
case E_LAYER_CLIENT_DESKTOP: return 4;
case E_LAYER_CLIENT_BELOW: return 5;
case E_LAYER_CLIENT_NORMAL: return 6;
case E_LAYER_CLIENT_ABOVE: return 7;
case E_LAYER_CLIENT_EDGE: return 8;
case E_LAYER_CLIENT_FULLSCREEN: return 9;
case E_LAYER_CLIENT_EDGE_FULLSCREEN: return 10;
case E_LAYER_CLIENT_POPUP: return 11;
case E_LAYER_CLIENT_TOP: return 12;
case E_LAYER_CLIENT_DRAG: return 13;
case E_LAYER_CLIENT_PRIO: return 14;
case E_LAYER_POPUP: return 15;
case E_LAYER_MENU: return 16;
case E_LAYER_DESKLOCK: return 17;
case E_LAYER_MAX: return 18;
default: break;
}
return 9999;
}
EAPI unsigned int
e_comp_canvas_client_layer_map(E_Layer layer)
{
switch (layer)
{
case E_LAYER_CLIENT_DESKTOP: return 0;
case E_LAYER_CLIENT_BELOW: return 1;
case E_LAYER_CLIENT_NORMAL: return 2;
case E_LAYER_CLIENT_ABOVE: return 3;
case E_LAYER_CLIENT_EDGE: return 4;
case E_LAYER_CLIENT_FULLSCREEN: return 5;
case E_LAYER_CLIENT_EDGE_FULLSCREEN: return 6;
case E_LAYER_CLIENT_POPUP: return 7;
case E_LAYER_CLIENT_TOP: return 8;
case E_LAYER_CLIENT_DRAG: return 9;
case E_LAYER_CLIENT_PRIO: return 10;
default: break;
}
return 9999;
}
EAPI E_Layer
e_comp_canvas_client_layer_map_nearest(int layer)
{
#define LAYER_MAP(X) \
if (layer <= X) return X
LAYER_MAP(E_LAYER_CLIENT_DESKTOP);
LAYER_MAP(E_LAYER_CLIENT_BELOW);
LAYER_MAP(E_LAYER_CLIENT_NORMAL);
LAYER_MAP(E_LAYER_CLIENT_ABOVE);
LAYER_MAP(E_LAYER_CLIENT_EDGE);
LAYER_MAP(E_LAYER_CLIENT_FULLSCREEN);
LAYER_MAP(E_LAYER_CLIENT_EDGE_FULLSCREEN);
LAYER_MAP(E_LAYER_CLIENT_POPUP);
LAYER_MAP(E_LAYER_CLIENT_TOP);
LAYER_MAP(E_LAYER_CLIENT_DRAG);
return E_LAYER_CLIENT_PRIO;
}

81
src/bin/e_comp_canvas.h Normal file
View File

@ -0,0 +1,81 @@
#ifdef E_TYPEDEFS
typedef struct _E_Event_Compositor_Resize E_Event_Compositor_Resize;
#else
#ifndef E_COMP_CANVAS_H
#define E_COMP_CANVAS_H
struct _E_Event_Compositor_Resize
{
E_Comp *comp;
};
extern EAPI int E_EVENT_COMPOSITOR_RESIZE;
EAPI Eina_Bool e_comp_canvas_init(E_Comp *c);
EINTERN void e_comp_canvas_clear(E_Comp *c);
EAPI void e_comp_all_freeze(void);
EAPI void e_comp_all_thaw(void);
EAPI E_Zone * e_comp_zone_xy_get(const E_Comp *c, Evas_Coord x, Evas_Coord y);
EAPI E_Zone * e_comp_zone_number_get(E_Comp *c, int num);
EAPI E_Zone * e_comp_zone_id_get(E_Comp *c, int id);
EAPI E_Comp * e_comp_number_get(unsigned int num);
EAPI E_Desk * e_comp_desk_window_profile_get(E_Comp *c, const char *profile);
EAPI void e_comp_canvas_zone_update(E_Zone *zone);
EAPI void e_comp_canvas_update(E_Comp *c);
EAPI void e_comp_canvas_fake_layers_init(E_Comp *comp);
EAPI void e_comp_canvas_fps_toggle(void);
EAPI E_Layer e_comp_canvas_layer_map_to(unsigned int layer);
EAPI unsigned int e_comp_canvas_layer_map(E_Layer layer);
EAPI unsigned int e_comp_canvas_client_layer_map(E_Layer layer);
EAPI E_Layer e_comp_canvas_client_layer_map_nearest(int layer);
/* the following functions are used for adjusting root window coordinates
* to/from canvas coordinates.
* this ensures correct positioning when running E as a nested compositor
*
* - use the "adjust" functions to go root->canvas
* - use the "unadjust" functions to go canvas->root
*/
static inline int
e_comp_canvas_x_root_unadjust(const E_Comp *c, int x)
{
int cx;
ecore_evas_geometry_get(c->ee, &cx, NULL, NULL, NULL);
return x + cx;
}
static inline int
e_comp_canvas_y_root_unadjust(const E_Comp *c, int y)
{
int cy;
ecore_evas_geometry_get(c->ee, NULL, &cy, NULL, NULL);
return y + cy;
}
static inline int
e_comp_canvas_x_root_adjust(const E_Comp *c, int x)
{
int cx;
ecore_evas_geometry_get(c->ee, &cx, NULL, NULL, NULL);
return x - cx;
}
static inline int
e_comp_canvas_y_root_adjust(const E_Comp *c, int y)
{
int cy;
ecore_evas_geometry_get(c->ee, NULL, &cy, NULL, NULL);
return y - cy;
}
#endif
#endif

View File

@ -17,8 +17,6 @@ e_comp_cfdata_edd_init(E_Config_DD **conf_edd, E_Config_DD **match_edd)
E_CONFIG_VAL(D, T, borderless, CHAR);
E_CONFIG_VAL(D, T, dialog, CHAR);
E_CONFIG_VAL(D, T, accepts_focus, CHAR);
E_CONFIG_VAL(D, T, vkbd, CHAR);
E_CONFIG_VAL(D, T, quickpanel, CHAR);
E_CONFIG_VAL(D, T, argb, CHAR);
E_CONFIG_VAL(D, T, fullscreen, CHAR);
E_CONFIG_VAL(D, T, modal, CHAR);

View File

@ -67,7 +67,6 @@ struct _E_Comp_Match
char dialog; // used for borders, 0 == don't use, 1 == dialog, -1 == not dialog
char accepts_focus; // used for borders, 0 == don't use, 1 == accepts focus, -1 == does not accept focus
char vkbd; // used for borders, 0 == don't use, 1 == is vkbd, -1 == not vkbd
char quickpanel; // used for borders, 0 == don't use, 1 == is quickpanel, -1 == not quickpanel
char argb; // used for borders, overrides, popups, menus, 0 == don't use, 1 == is argb, -1 == not argb
char fullscreen; // used for borders, 0 == don't use, 1 == is fullscreen, -1 == not fullscreen
char modal; // used for borders, 0 == don't use, 1 == is modal, -1 == not modal

3303
src/bin/e_comp_object.c Normal file

File diff suppressed because it is too large Load Diff

79
src/bin/e_comp_object.h Normal file
View File

@ -0,0 +1,79 @@
#ifdef E_TYPEDEFS
typedef struct E_Comp_Object_Frame E_Comp_Object_Frame;
typedef struct E_Event_Comp_Object E_Event_Comp_Object;
typedef void (*E_Comp_Object_Autoclose_Cb)(void *, Evas_Object *);
typedef Eina_Bool (*E_Comp_Object_Key_Cb)(void *, Ecore_Event_Key *);
typedef enum
{
E_COMP_OBJECT_TYPE_NONE,
E_COMP_OBJECT_TYPE_MENU,
E_COMP_OBJECT_TYPE_POPUP,
E_COMP_OBJECT_TYPE_LAST,
} E_Comp_Object_Type;
#else
#ifndef E_COMP_OBJECT_H
#define E_COMP_OBJECT_H
#define E_COMP_OBJECT_FRAME_RESHADOW "COMP_RESHADOW"
struct E_Event_Comp_Object
{
Evas_Object *comp_object;
};
struct E_Comp_Object_Frame
{
int l, r, t, b;
Eina_Bool calc : 1; // inset has been calculated
};
extern EAPI int E_EVENT_COMP_OBJECT_ADD;
EAPI void e_comp_object_zoomap_set(Evas_Object *obj, Eina_Bool enabled);
EAPI Evas_Object *e_comp_object_client_add(E_Client *ec);
EAPI Evas_Object *e_comp_object_util_mirror_add(Evas_Object *obj);
EAPI Evas_Object *e_comp_object_util_add(Evas_Object *obj, E_Comp_Object_Type type);
EAPI void e_comp_object_frame_xy_adjust(Evas_Object *obj, int x, int y, int *ax, int *ay);
EAPI void e_comp_object_frame_xy_unadjust(Evas_Object *obj, int x, int y, int *ax, int *ay);
EAPI void e_comp_object_frame_wh_adjust(Evas_Object *obj, int w, int h, int *aw, int *ah);
EAPI void e_comp_object_frame_wh_unadjust(Evas_Object *obj, int w, int h, int *aw, int *ah);
EAPI E_Client *e_comp_object_client_get(Evas_Object *obj);
EAPI E_Zone *e_comp_object_util_zone_get(Evas_Object *obj);
EAPI void e_comp_object_util_del_list_append(Evas_Object *obj, Evas_Object *to_del);
EAPI void e_comp_object_util_del_list_remove(Evas_Object *obj, Evas_Object *to_del);
EAPI void e_comp_object_util_autoclose(Evas_Object *obj, E_Comp_Object_Autoclose_Cb del_cb, E_Comp_Object_Key_Cb cb, const void *data);
EAPI void e_comp_object_util_center(Evas_Object *obj);
EAPI void e_comp_object_util_center_on(Evas_Object *obj, Evas_Object *on);
EAPI void e_comp_object_util_center_pos_get(Evas_Object *obj, int *x, int *y);
EAPI void e_comp_object_util_fullscreen(Evas_Object *obj);
EAPI void e_comp_object_frame_geometry_get(Evas_Object *obj, int *l, int *r, int *t, int *b);
EAPI Eina_Bool e_comp_object_frame_title_set(Evas_Object *obj, const char *name);
EAPI Eina_Bool e_comp_object_frame_exists(Evas_Object *obj);
EAPI void e_comp_object_frame_icon_update(Evas_Object *obj);
EAPI Eina_Bool e_comp_object_frame_theme_set(Evas_Object *obj, const char *name);
EAPI void e_comp_object_signal_emit(Evas_Object *obj, const char *sig, const char *src);
EAPI void e_comp_object_signal_callback_add(Evas_Object *obj, const char *sig, const char *src, Edje_Signal_Cb cb, const void *data);
EAPI void e_comp_object_signal_callback_del(Evas_Object *obj, const char *sig, const char *src, Edje_Signal_Cb cb);
EAPI void e_comp_object_signal_callback_del_full(Evas_Object *obj, const char *sig, const char *src, Edje_Signal_Cb cb, const void *data);
EAPI void e_comp_object_input_area_set(Evas_Object *obj, int x, int y, int w, int h);
EAPI void e_comp_object_damage(Evas_Object *obj, int x, int y, int w, int h);
EAPI void e_comp_object_render_update_add(Evas_Object *obj);
EAPI void e_comp_object_render_update_del(Evas_Object *obj);
EAPI void e_comp_object_shape_apply(Evas_Object *obj);
EAPI void e_comp_object_redirected_set(Evas_Object *obj, Eina_Bool set);
EAPI void e_comp_object_native_surface_set(Evas_Object *obj, Eina_Bool set);
EAPI void e_comp_object_dirty(Evas_Object *obj);
EAPI Eina_Bool e_comp_object_render(Evas_Object *obj);
EAPI void e_comp_object_effect_set(Evas_Object *obj, const char *effect);
EAPI void e_comp_object_effect_params_set(Evas_Object *obj, int id, int *params, unsigned int count);
EAPI void e_comp_object_effect_clip(Evas_Object *obj);
EAPI void e_comp_object_effect_unclip(Evas_Object *obj);
EAPI void e_comp_object_effect_start(Evas_Object *obj, Edje_Signal_Cb end_cb, const void *end_data);
EAPI void e_comp_object_effect_stop(Evas_Object *obj, Edje_Signal_Cb end_cb EINA_UNUSED);
#endif
#endif

View File

@ -1,248 +0,0 @@
#include "e.h"
#include "e_comp_render_update.h"
//////////////////////////////////////////////////////////////////////////
static void
_e_comp_tiles_alloc(E_Comp_Render_Update *up)
{
if (up->tiles) return;
up->tiles = calloc(up->tw * up->th, sizeof(unsigned char));
}
//////////////////////////////////////////////////////////////////////////
E_Comp_Render_Update *
e_comp_render_update_new(void)
{
E_Comp_Render_Update *up;
up = calloc(1, sizeof(E_Comp_Render_Update));
up->tsw = 32;
up->tsh = 32;
up->pol = E_COMP_RENDER_UPDATE_POLICY_RAW;
return up;
}
void
e_comp_render_update_free(E_Comp_Render_Update *up)
{
if (!up) return;
free(up->tiles);
free(up);
}
void
e_comp_render_update_policy_set(E_Comp_Render_Update *up,
E_Comp_Render_Update_Policy pol)
{
up->pol = pol;
}
void
e_comp_render_update_tile_size_set(E_Comp_Render_Update *up,
int tsw,
int tsh)
{
if ((up->tsw == tsw) && (up->tsh == tsh)) return;
up->tsw = tsw;
up->tsh = tsh;
e_comp_render_update_clear(up);
}
void
e_comp_render_update_resize(E_Comp_Render_Update *up,
int w,
int h)
{
unsigned char *ptiles, *p, *pp;
int ptw, pth, x, y;
if ((!up) || ((up->w == w) && (up->h == h))) return;
ptw = up->tw;
pth = up->th;
ptiles = up->tiles;
up->w = w;
up->h = h;
up->tw = (up->w + up->tsw - 1) / up->tsw;
up->th = (up->h + up->tsh - 1) / up->tsh;
up->tiles = NULL;
_e_comp_tiles_alloc(up);
if ((ptiles) && (up->tiles))
{
if (pth <= up->th)
{
for (y = 0; y < pth; y++)
{
p = up->tiles + (y * up->tw);
pp = ptiles + (y * ptw);
if (ptw <= up->tw)
for (x = 0; x < ptw; x++)
*p++ = *pp++;
else
for (x = 0; x < up->tw; x++)
*p++ = *pp++;
}
}
else
{
for (y = 0; y < up->th; y++)
{
p = up->tiles + (y * up->tw);
pp = ptiles + (y * ptw);
if (ptw <= up->tw)
for (x = 0; x < ptw; x++)
*p++ = *pp++;
else
for (x = 0; x < up->tw; x++)
*p++ = *pp++;
}
}
}
free(ptiles);
}
void
e_comp_render_update_add(E_Comp_Render_Update *up,
int x,
int y,
int w,
int h)
{
int tx, ty, txx, tyy, xx, yy;
unsigned char *t, *t2;
if ((w <= 0) || (h <= 0)) return;
if ((up->tw <= 0) || (up->th <= 0)) return;
_e_comp_tiles_alloc(up);
E_RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, up->w, up->h);
if ((w <= 0) || (h <= 0)) return;
switch (up->pol)
{
case E_COMP_RENDER_UPDATE_POLICY_RAW:
break;
case E_COMP_RENDER_UPDATE_POLICY_HALF_WIDTH_OR_MORE_ROUND_UP_TO_FULL_WIDTH:
if (w > (up->w / 2))
{
x = 0;
w = up->w;
}
break;
default:
break;
}
tx = x / up->tsw;
ty = y / up->tsh;
txx = (x + w - 1) / up->tsw;
tyy = (y + h - 1) / up->tsh;
t = up->tiles + (ty * up->tw) + tx;
for (yy = ty; yy <= tyy; yy++)
{
t2 = t;
for (xx = tx; xx <= txx; xx++)
{
*t2 = 1;
t2++;
}
t += up->tw;
}
}
E_Comp_Render_Update_Rect *
e_comp_render_update_rects_get(E_Comp_Render_Update *up)
{
E_Comp_Render_Update_Rect *r;
int ri = 0;
int x, y;
unsigned char *t, *t2, *t3;
if (!up->tiles) return NULL;
r = calloc((up->tw * up->th) + 1, sizeof(E_Comp_Render_Update_Rect));
if (!r) return NULL;
t = up->tiles;
for (y = 0; y < up->th; y++)
{
for (x = 0; x < up->tw; x++)
{
if (*t)
{
int can_expand_x = 1, can_expand_y = 1;
int xx = 0, yy = 0;
t2 = t + 1;
while (can_expand_x)
{
xx++;
if ((x + xx) >= up->tw) can_expand_x = 0;
else if (!*t2)
can_expand_x = 0;
if (can_expand_x) *t2 = 0;
t2++;
}
t3 = t;
while (can_expand_y)
{
int i;
yy++;
t3 += up->tw;
if ((y + yy) >= up->th) can_expand_y = 0;
if (can_expand_y)
{
t2 = t3;
for (i = 0; i < xx; i++)
{
if (!*t2)
{
can_expand_y = 0;
break;
}
t2++;
}
}
if (can_expand_y)
{
t2 = t3;
for (i = 0; i < xx; i++)
{
*t2 = 0;
t2++;
}
}
}
*t = 0;
r[ri].x = x * up->tsw;
r[ri].y = y * up->tsh;
r[ri].w = xx * up->tsw;
r[ri].h = yy * up->tsh;
if ((r[ri].x + r[ri].w) > up->w) r[ri].w = up->w - r[ri].x;
if ((r[ri].y + r[ri].h) > up->h) r[ri].h = up->h - r[ri].y;
if ((r[ri].w <= 0) || (r[ri].h <= 0)) r[ri].w = 0;
else ri++;
x += xx - 1;
t += xx - 1;
}
t++;
}
}
return r;
}
void
e_comp_render_update_clear(E_Comp_Render_Update *up)
{
if (up->tiles)
{
free(up->tiles);
up->tiles = NULL;
}
}

View File

@ -1,46 +0,0 @@
#ifdef E_TYPEDEFS
typedef struct _E_Comp_Render_Update E_Comp_Render_Update;
typedef struct _E_Comp_Render_Update_Rect E_Comp_Render_Update_Rect;
typedef enum _E_Comp_Render_Update_Policy
{
E_COMP_RENDER_UPDATE_POLICY_RAW,
E_COMP_RENDER_UPDATE_POLICY_HALF_WIDTH_OR_MORE_ROUND_UP_TO_FULL_WIDTH,
} E_Comp_Render_Update_Policy;
#else
#ifndef E_COMP_RENDER_UPDATE_H
#define E_COMP_RENDER_UPDATE_H
struct _E_Comp_Render_Update_Rect
{
int x, y, w, h;
};
struct _E_Comp_Render_Update
{
int w, h;
int tw, th;
int tsw, tsh;
unsigned char *tiles;
E_Comp_Render_Update_Policy pol;
};
E_Comp_Render_Update *e_comp_render_update_new(void);
void e_comp_render_update_free(E_Comp_Render_Update *up);
void e_comp_render_update_policy_set(E_Comp_Render_Update *up,
E_Comp_Render_Update_Policy pol);
void e_comp_render_update_tile_size_set(E_Comp_Render_Update *up,
int tsw,
int tsh);
void e_comp_render_update_resize(E_Comp_Render_Update *up,
int w,
int h);
void e_comp_render_update_add(E_Comp_Render_Update *up,
int x,
int y,
int w,
int h);
E_Comp_Render_Update_Rect *e_comp_render_update_rects_get(E_Comp_Render_Update *up);
void e_comp_render_update_clear(E_Comp_Render_Update *up);
#endif
#endif

View File

@ -1,8 +1,9 @@
#include "e.h"
#include "e_comp_wl.h"
#include "e_surface.h"
#include <sys/mman.h>
#define e_pixmap_parent_window_set(X, Y) e_pixmap_parent_window_set(X, (Ecore_Window)(uintptr_t)Y)
/* compositor function prototypes */
static void _seat_send_updated_caps(struct wl_seat *seat);
static void _move_resources(struct wl_list *dest, struct wl_list *src);
@ -59,7 +60,6 @@ static void _e_comp_wl_cb_bind(struct wl_client *client, void *data, unsigned in
static Eina_Bool _e_comp_wl_cb_read(void *data EINA_UNUSED, Ecore_Fd_Handler *hdl EINA_UNUSED);
static Eina_Bool _e_comp_wl_cb_idle(void *data EINA_UNUSED);
static Eina_Bool _e_comp_wl_cb_module_idle(void *data EINA_UNUSED);
static Eina_Bool _e_comp_wl_cb_keymap_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED);
/* compositor interface prototypes */
static void _e_comp_wl_cb_surface_create(struct wl_client *client, struct wl_resource *resource, unsigned int id);
@ -225,13 +225,11 @@ static const struct wl_pointer_grab_interface _e_drag_grab_interface =
/* local variables */
static Ecore_Idler *_module_idler = NULL;
static Eina_Hash *_e_wl_border_hash = NULL;
/* external variables */
EAPI E_Wayland_Compositor *_e_wl_comp;
/* external functions */
EINTERN Eina_Bool
EAPI Eina_Bool
e_comp_wl_init(void)
{
int fd = 0;
@ -274,7 +272,7 @@ e_comp_wl_init(void)
* NB: This is interesting....if we try to eglGetDisplay and pass in the
* wayland display, then EGL fails due to XCB not owning the event queue.
* If we pass it a NULL, it inits just fine */
_e_wl_comp->egl.display = eglGetDisplay((EGLNativeDisplayType)ecore_x_display_get());
_e_wl_comp->egl.display = eglGetDisplay(NULL);
if (_e_wl_comp->egl.display == EGL_NO_DISPLAY)
ERR("Could not get EGL display: %m");
else
@ -305,44 +303,6 @@ e_comp_wl_init(void)
ERR("Could not choose EGL config: %m");
eglTerminate(_e_wl_comp->egl.display);
}
/* if (!eglBindAPI(EGL_OPENGL_ES_API)) */
/* { */
/* ERR("Could not bind EGL API: %m"); */
/* eglTerminate(_e_wl_comp->egl.display); */
/* } */
/* exts = (const char *)eglQueryString(_e_wl_comp->egl.display, EGL_EXTENSIONS); */
/* if (!exts) */
/* { */
/* ERR("Could not get EGL Extensions: %m"); */
/* eglTerminate(_e_wl_comp->egl.display); */
/* } */
/* else */
/* { */
/* if (strstr(exts, "EGL_WL_bind_wayland_display")) */
/* { */
/* _e_wl_comp->egl.bind_display = */
/* (void *)eglGetProcAddress("eglBindWaylandDisplayWL"); */
/* _e_wl_comp->egl.unbind_display = */
/* (void *)eglGetProcAddress("eglUnbindWaylandDisplayWL"); */
/* } */
/* } */
/* if (_e_wl_comp->egl.bind_display) */
/* { */
/* EGLBoolean ret; */
/* ret = _e_wl_comp->egl.bind_display(_e_wl_comp->egl.display, */
/* _e_wl_comp->wl.display); */
/* if (!ret) */
/* { */
/* ERR("Could not bind EGL Wayland Display: %m"); */
/* _e_wl_comp->egl.bound = EINA_FALSE; */
/* } */
/* else */
/* _e_wl_comp->egl.bound = EINA_TRUE; */
/* } */
}
}
#endif
@ -354,11 +314,12 @@ e_comp_wl_init(void)
goto err;
}
#ifndef WAYLAND_ONLY
/* setup keymap_change event handler */
_e_wl_comp->kbd_handler =
ecore_event_handler_add(ECORE_X_EVENT_XKB_STATE_NOTIFY,
_e_comp_wl_cb_keymap_changed, NULL);
e_comp_wl_cb_keymap_changed, NULL);
#endif
/* get the displays event loop */
_e_wl_comp->wl.loop = wl_display_get_event_loop(_e_wl_comp->wl.display);
@ -382,9 +343,11 @@ e_comp_wl_init(void)
goto err;
}
wl_event_loop_dispatch(_e_wl_comp->wl.loop, 0);
#ifndef WAYLAND_ONLY
/* add an idler for deferred shell module loading */
_module_idler = ecore_idler_add(_e_comp_wl_cb_module_idle, NULL);
#endif
/* return success */
return EINA_TRUE;
@ -392,9 +355,10 @@ err:
/* remove kbd handler */
if (_e_wl_comp->kbd_handler)
ecore_event_handler_del(_e_wl_comp->kbd_handler);
#ifndef WAYLAND_ONLY
/* remove the module idler */
if (_module_idler) ecore_idler_del(_module_idler);
#endif
#ifdef HAVE_WAYLAND_EGL
/* unbind wayland display */
@ -452,8 +416,6 @@ e_comp_wl_shutdown(void)
E_FREE(_e_wl_comp);
}
E_FREE_FUNC(_e_wl_border_hash, eina_hash_free);
/* disable the loaded shell module */
/* TODO: we should have a config variable somewhere to store which
* shell we want to unload (tablet, mobile, etc) */
@ -461,27 +423,16 @@ e_comp_wl_shutdown(void)
e_module_disable(mod);
}
EAPI void
e_comp_wl_border_surface_add(Ecore_Window win, const E_Border *bd)
#ifdef WAYLAND_ONLY
EAPI int
e_comp_wl_input_read(int fd EINA_UNUSED, unsigned int mask EINA_UNUSED, void *data)
{
if (!_e_wl_border_hash)
_e_wl_border_hash = eina_hash_int32_new(NULL);
eina_hash_add(_e_wl_border_hash, &win, bd);
}
E_Wayland_Compositor *wl_comp = data;
EAPI void
e_comp_wl_border_surface_del(Ecore_Window win)
{
if (!_e_wl_border_hash) return;
eina_hash_del_by_key(_e_wl_border_hash, &win);
}
EAPI E_Border *
e_comp_wl_border_surface_find(Ecore_Window win)
{
if (!_e_wl_border_hash) return NULL;
return eina_hash_find(_e_wl_border_hash, &win);
wl_event_loop_dispatch(wl_comp->wl.input_loop, 0);
return 1;
}
#endif
EAPI void
wl_seat_init(struct wl_seat *seat)
@ -872,6 +823,44 @@ e_comp_wl_time_get(void)
return (tm.tv_sec * 1000 + tm.tv_usec / 1000);
}
EAPI void
e_comp_wl_mouse_button(struct wl_resource *resource, uint32_t serial, uint32_t timestamp, uint32_t button, uint32_t state_w)
{
switch (button)
{
case BTN_LEFT:
case BTN_MIDDLE:
case BTN_RIGHT:
wl_pointer_send_button(resource, serial, timestamp,
button, state_w);
break;
case 4:
if (state_w)
wl_pointer_send_axis(resource, timestamp,
WL_POINTER_AXIS_VERTICAL_SCROLL,
-wl_fixed_from_int(1));
break;
case 5:
if (state_w)
wl_pointer_send_axis(resource, timestamp,
WL_POINTER_AXIS_VERTICAL_SCROLL,
wl_fixed_from_int(1));
break;
case 6:
if (state_w)
wl_pointer_send_axis(resource, timestamp,
WL_POINTER_AXIS_HORIZONTAL_SCROLL,
-wl_fixed_from_int(1));
break;
case 7:
if (state_w)
wl_pointer_send_axis(resource, timestamp,
WL_POINTER_AXIS_HORIZONTAL_SCROLL,
wl_fixed_from_int(1));
break;
}
}
EAPI void
e_comp_wl_input_modifiers_update(unsigned int serial)
{
@ -1003,48 +992,9 @@ _default_grab_button(struct wl_pointer_grab *grab, uint32_t timestamp, uint32_t
serial = wl_display_next_serial(_e_wl_comp->wl.display);
wl_resource_for_each(res, lst)
{
switch (button)
{
case BTN_LEFT:
case BTN_MIDDLE:
case BTN_RIGHT:
wl_pointer_send_button(res, serial, timestamp,
button, state_w);
break;
case 4:
if (state_w)
wl_pointer_send_axis(res, timestamp,
WL_POINTER_AXIS_VERTICAL_SCROLL,
-wl_fixed_from_int(1));
break;
case 5:
if (state_w)
wl_pointer_send_axis(res, timestamp,
WL_POINTER_AXIS_VERTICAL_SCROLL,
wl_fixed_from_int(1));
break;
case 6:
if (state_w)
wl_pointer_send_axis(res, timestamp,
WL_POINTER_AXIS_HORIZONTAL_SCROLL,
-wl_fixed_from_int(1));
break;
case 7:
if (state_w)
wl_pointer_send_axis(res, timestamp,
WL_POINTER_AXIS_HORIZONTAL_SCROLL,
wl_fixed_from_int(1));
break;
e_comp_wl_mouse_button(res, serial, timestamp, button, state_w);
}
}
}
if (pointer->button_count == 0 &&
state == WL_POINTER_BUTTON_STATE_RELEASED)
wl_pointer_set_focus(pointer, pointer->current,
pointer->current_x, pointer->current_y);
}
static void
_default_grab_touch_down(struct wl_touch_grab *grab, uint32_t timestamp, int touch_id, wl_fixed_t sx, wl_fixed_t sy)
@ -1600,8 +1550,8 @@ _e_comp_wl_cb_module_idle(void *data EINA_UNUSED)
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
_e_comp_wl_cb_keymap_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
EAPI Eina_Bool
e_comp_wl_cb_keymap_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
{
struct xkb_keymap *keymap;
@ -1679,8 +1629,13 @@ _e_comp_wl_cb_surface_create(struct wl_client *client, struct wl_resource *resou
wl_resource_post_no_memory(resource);
return;
}
ews->id = id;
ews->wl.client = client;
ews->pixmap = e_pixmap_find(E_PIXMAP_TYPE_WL, id);
if (!ews->pixmap)
ews->pixmap = e_pixmap_new(E_PIXMAP_TYPE_WL, id);
e_pixmap_parent_window_set(ews->pixmap, ews);
e_pixmap_usable_set(ews->pixmap, 1);
/* initialize the destroy signal */
wl_signal_init(&ews->wl.destroy_signal);
@ -1726,6 +1681,8 @@ _e_comp_wl_cb_surface_destroy(struct wl_resource *resource)
E_Wayland_Surface *ews = NULL;
E_Wayland_Surface_Frame_Callback *cb = NULL, *ncb = NULL;
struct wl_pointer *pointer;
Eina_Inlist *l;
E_Wayland_Buffer *buffer;
/* try to get the surface from this resource */
if (!(ews = wl_resource_get_user_data(resource)))
@ -1745,6 +1702,10 @@ _e_comp_wl_cb_surface_destroy(struct wl_resource *resource)
{
if (ews->unmap) ews->unmap(ews);
}
if (ews->buffer_reference.buffer)
ews->buffer_reference.buffer->ews = NULL;
if (ews->pending.buffer)
ews->pending.buffer->ews = NULL;
/* loop any pending surface frame callbacks and destroy them */
wl_list_for_each_safe(cb, ncb, &ews->pending.frames, wl.link)
@ -1772,11 +1733,23 @@ _e_comp_wl_cb_surface_destroy(struct wl_resource *resource)
wl_list_for_each_safe(cb, ncb, &ews->wl.frames, wl.link)
wl_resource_destroy(cb->wl.resource);
EINA_INLIST_FOREACH_SAFE(ews->buffers, l, buffer)
{
buffer->ews = NULL;
ews->buffers = eina_inlist_remove(ews->buffers, EINA_INLIST_GET(buffer));
}
if (e_comp_get(NULL)->pointer->pixmap == ews->pixmap)
{
e_pointer_image_set(e_comp_get(NULL)->pointer, NULL, 0, 0, 0, 0);
}
e_pixmap_parent_window_set(ews->pixmap, NULL);
e_pixmap_free(ews->pixmap);
/* remove this surface from the compositor's list of surfaces */
_e_wl_comp->surfaces = eina_inlist_remove(_e_wl_comp->surfaces, EINA_INLIST_GET(ews));
/* free the allocated surface structure */
E_FREE(ews);
free(ews);
}
static void
@ -1999,6 +1972,7 @@ _e_comp_wl_input_keymap_get(void)
names.layout = strdup(kbd_layout->name);
}
#ifndef WAYLAND_ONLY
/* if we are running under X11, try to get the xkb rule names atom */
if (getenv("DISPLAY"))
{
@ -2023,7 +1997,7 @@ _e_comp_wl_input_keymap_get(void)
if ((data) && (len > 0))
{
names.rules = strdup((const char *)data);
names.rules = (char*)data;
data += strlen((const char *)data) + 1;
if (!names.model)
names.model = strdup((const char *)data);
@ -2032,6 +2006,7 @@ _e_comp_wl_input_keymap_get(void)
names.layout = strdup((const char *)data);
}
}
#endif
printf("Keymap\n");
printf("\tRules: %s\n", names.rules);
@ -2306,50 +2281,17 @@ _e_comp_wl_pointer_configure(E_Wayland_Surface *ews, Evas_Coord x, Evas_Coord y,
/* do we have a focused surface ? */
if (!input->wl.seat.pointer->focus) return;
if ((focus = wl_resource_get_user_data(input->wl.seat.pointer->focus)))
{
focus = wl_resource_get_user_data(input->wl.seat.pointer->focus);
if (!focus) return;
/* NB: Ideally, I wanted to use the e_pointer methods here so that
* the cursor would match the E theme, however Wayland currently
* provides NO Method to get the cursor name :( so we are stuck
* using the pixels from their cursor surface */
/* is it mapped ? */
if ((focus->mapped) && (focus->ee))
{
Ecore_Window win;
/* try to get the ecore_window */
if ((win = ecore_evas_window_get(focus->ee)))
{
E_Wayland_Buffer_Reference *ref;
struct wl_shm_buffer *shm_buffer;
void *pixels;
ref = &ews->buffer_reference;
shm_buffer = wl_shm_buffer_get(ref->buffer->wl.resource);
/* grab the pixels from the cursor surface */
if ((pixels = wl_shm_buffer_get_data(shm_buffer)))
{
Ecore_X_Cursor cur;
/* create the new X cursor with this image */
cur = ecore_x_cursor_new(win, pixels, w, h,
input->pointer.hot.x,
input->pointer.hot.y);
/* set the cursor on this window */
ecore_x_window_cursor_set(win, cur);
/* free the cursor */
ecore_x_cursor_free(cur);
}
else
ecore_x_window_cursor_set(win, 0);
}
}
}
if ((!focus->mapped) || (!focus->ec)) return;
e_pixmap_dirty(ews->pixmap);
e_pointer_image_set(focus->ec->comp->pointer, ews->pixmap, w, h, input->pointer.hot.x, input->pointer.hot.y);
}
static void
@ -2430,7 +2372,11 @@ _e_comp_wl_pointer_cb_cursor_set(struct wl_client *client, struct wl_resource *r
input->pointer.surface = ews;
/* if we don't have a pointer surface, we are done here */
if (!ews) return;
if (!ews)
{
e_pointer_hide(e_comp_get(NULL)->pointer);
return;
}
/* set the destroy listener */
wl_signal_add(&ews->wl.destroy_signal,
@ -2566,6 +2512,7 @@ _e_comp_wl_surface_buffer_reference(E_Wayland_Buffer_Reference *ref, E_Wayland_B
wl_signal_add(&buffer->wl.destroy_signal, &ref->destroy_listener);
}
//INF("CURRENT BUFFER SWAP: %p->%p", ref->buffer, buffer);
ref->buffer = buffer;
ref->destroy_listener.notify =
_e_comp_wl_surface_buffer_reference_cb_destroy;
@ -2611,12 +2558,32 @@ _e_comp_wl_surface_buffer_resource(struct wl_resource *resource)
}
static void
_e_comp_wl_surface_buffer_cb_destroy(struct wl_listener *listener, void *data EINA_UNUSED)
_e_comp_wl_surface_buffer_cb_destroy(struct wl_listener *listener, void *data)
{
E_Wayland_Buffer *buffer;
buffer = container_of(listener, E_Wayland_Buffer, wl.destroy_listener);
wl_signal_emit(&buffer->wl.destroy_signal, buffer);
if (buffer->ews)
{
if (buffer->ews->ec && buffer->ews->pixmap && (e_pixmap_resource_get(buffer->ews->pixmap) == data) &&
evas_object_visible_get(buffer->ews->ec->frame))
{
//INF("DESTROYED CURRENT BUFFER: %s", e_pixmap_dirty_get(buffer->ews->pixmap) ? "DIRTY" : "CLEAN");
e_pixmap_usable_set(buffer->ews->pixmap, 0);
if (!e_pixmap_image_exists(buffer->ews->pixmap))
{
e_pixmap_image_refresh(buffer->ews->pixmap);
}
e_pixmap_image_clear(buffer->ews->pixmap, 0);
e_comp_object_damage(buffer->ews->ec->frame, 0, 0, buffer->ews->ec->client.w, buffer->ews->ec->client.h);
e_comp_object_render(buffer->ews->ec->frame);
e_comp_object_render_update_del(buffer->ews->ec->frame);
}
buffer->ews->buffers = eina_inlist_remove(buffer->ews->buffers, EINA_INLIST_GET(buffer));
}
E_FREE(buffer);
}
@ -2637,10 +2604,27 @@ _e_comp_wl_surface_cb_attach(struct wl_client *client EINA_UNUSED, struct wl_res
if (!(ews = wl_resource_get_user_data(resource))) return;
if (buffer_resource)
{
buffer = _e_comp_wl_surface_buffer_resource(buffer_resource);
if (ews->ec && (!ews->buffer_reference.buffer))
{
e_pixmap_usable_set(ews->pixmap, 1);
}
}
/* reference any existing buffers */
_e_comp_wl_surface_buffer_reference(&ews->buffer_reference, buffer);
if (buffer)
{
if (!buffer->ews)
ews->buffers = eina_inlist_append(ews->buffers, EINA_INLIST_GET(buffer));
buffer->ews = ews;
}
//INF("ATTACHED NEW BUFFER");
e_pixmap_dirty(ews->pixmap);
//if (ews->ec)
//e_comp_object_damage(ews->ec->frame, 0, 0, ews->ec->client.w, ews->ec->client.h);
/* if we are setting a null buffer, then unmap the surface */
if (!buffer)
@ -2674,6 +2658,7 @@ _e_comp_wl_surface_cb_damage(struct wl_client *client EINA_UNUSED, struct wl_res
/* try to cast the resource data to our surface structure */
if (!(ews = wl_resource_get_user_data(resource))) return;
e_pixmap_image_clear(ews->pixmap, 1);
/* tell pixman to add this damage to pending */
pixman_region32_union_rect(&ews->pending.damage, &ews->pending.damage,
@ -2787,42 +2772,10 @@ _e_comp_wl_surface_cb_commit(struct wl_client *client EINA_UNUSED, struct wl_res
if (ews->unmap) ews->unmap(ews);
}
}
else
{
if (ews->obj)
{
E_Wayland_Buffer *buff;
struct wl_shm_buffer *shm_buffer;
void *data;
buff = ews->pending.buffer;
shm_buffer = wl_shm_buffer_get(buff->wl.resource);
bw = wl_shm_buffer_get_width(shm_buffer);
bh = wl_shm_buffer_get_height(shm_buffer);
/* grab the pixel data from the buffer */
data = wl_shm_buffer_get_data(shm_buffer);
/* send the pixel data to the smart object */
e_surface_image_set(ews->obj, bw, bh, data);
}
}
}
/* if we have a reference to a buffer, get it's size */
if (&ews->buffer_reference)
{
E_Wayland_Buffer *buff;
struct wl_shm_buffer *shm_buffer;
buff = ews->buffer_reference.buffer;
shm_buffer = wl_shm_buffer_get(buff->wl.resource);
bw = wl_shm_buffer_get_width(shm_buffer);
bh = wl_shm_buffer_get_height(shm_buffer);
}
e_pixmap_dirty(ews->pixmap);
e_pixmap_refresh(ews->pixmap);
e_pixmap_size_get(ews->pixmap, &bw, &bh);
/* if we have a new pending buffer, call configure */
if ((ews->configure) && (ews->pending.new_buffer))
@ -2849,6 +2802,8 @@ _e_comp_wl_surface_cb_commit(struct wl_client *client EINA_UNUSED, struct wl_res
pixman_region32_init(&ews->pending.damage);
/* get the extent of the damage region */
if (ews->ec)
{
rects = pixman_region32_rectangles(&ews->region.damage, &n);
while (n--)
{
@ -2857,7 +2812,8 @@ _e_comp_wl_surface_cb_commit(struct wl_client *client EINA_UNUSED, struct wl_res
r = &rects[n];
/* send damages to the image */
e_surface_damage_add(ews->obj, r->x1, r->y1, r->x2, r->y2);
e_comp_object_damage(ews->ec->frame, r->x1, r->y1, r->x2, r->y2);
}
}
/* tell pixman we are finished with this region */
@ -2898,8 +2854,8 @@ _e_comp_wl_surface_cb_commit(struct wl_client *client EINA_UNUSED, struct wl_res
rects = pixman_region32_extents(&ews->region.input);
/* update the smart object's input region */
if (ews->obj)
e_surface_input_set(ews->obj, rects->x1, rects->y1,
if (ews->ec)
e_comp_object_input_area_set(ews->ec->frame, rects->x1, rects->y1,
rects->x2, rects->y2);
}
@ -2909,6 +2865,10 @@ _e_comp_wl_surface_cb_commit(struct wl_client *client EINA_UNUSED, struct wl_res
/* clear list of pending frame callbacks */
wl_list_init(&ews->pending.frames);
ews->updates = 1;
_e_wl_comp->surfaces = eina_inlist_promote(_e_wl_comp->surfaces, EINA_INLIST_GET(ews));
/* TODO: schedule repaint ?? */
}

View File

@ -5,7 +5,6 @@
# define E_COMP_WL_H
# define WL_HIDE_DEPRECATED
# include <pixman.h>
# include <wayland-server.h>
# include <xkbcommon/xkbcommon.h>
@ -253,6 +252,7 @@ struct _E_Wayland_Surface_Frame_Callback
struct _E_Wayland_Buffer
{
EINA_INLIST;
struct
{
struct wl_resource *resource;
@ -267,6 +267,7 @@ struct _E_Wayland_Buffer
int w, h;
unsigned int busy_count;
E_Wayland_Surface *ews;
};
struct _E_Wayland_Buffer_Reference
@ -281,6 +282,7 @@ struct _E_Wayland_Surface
Ecore_Window id;
struct
{
struct wl_client *client;
struct wl_resource *surface;
struct wl_signal destroy_signal;
struct wl_list link, frames;
@ -311,18 +313,13 @@ struct _E_Wayland_Surface
pixman_region32_t damage, clip;
} region;
/* smart object for this surface */
Evas_Object *obj;
Ecore_Evas *ee;
Ecore_X_Window evas_win;
Evas *evas;
E_Border *bd;
Eina_List *bd_hooks;
E_Client *ec;
E_Pixmap *pixmap;
Eina_Inlist *buffers;
E_Wayland_Shell_Surface *shell_surface;
Eina_Bool mapped : 1;
Eina_Bool updates : 1; //surface has render updates
E_Wayland_Input *input;
@ -367,7 +364,7 @@ struct _E_Wayland_Shell_Surface
E_Wayland_Surface *surface, *parent;
E_Wayland_Shell_Surface_Type type, next_type;
char *title, *clas;
Eina_Stringshare *title, *clas;
Eina_Bool active : 1;
@ -476,6 +473,15 @@ struct _E_Wayland_Compositor
E_Wayland_Shell_Interface shell_interface;
#ifdef WAYLAND_ONLY
Eina_Bool focus : 1;
unsigned int output_pool;
struct xkb_rule_names xkb_names;
struct xkb_context *xkb_context;
#endif
Ecore_Event_Handler *kbd_handler;
Ecore_Fd_Handler *fd_handler;
Ecore_Idler *idler;
@ -485,8 +491,6 @@ struct _E_Wayland_Compositor
Eina_Inlist *surfaces;
Eina_List *seats;
struct wl_list outputs;
void (*ping_cb) (E_Wayland_Surface *ews, unsigned int serial);
};
@ -585,12 +589,12 @@ struct _E_Wayland_Plane
/* external variables */
extern EAPI E_Wayland_Compositor *_e_wl_comp;
EINTERN Eina_Bool e_comp_wl_init(void);
EAPI Eina_Bool e_comp_wl_init(void);
EINTERN void e_comp_wl_shutdown(void);
EAPI void e_comp_wl_border_surface_add(Ecore_Window win, const E_Border *bd);
EAPI void e_comp_wl_border_surface_del(Ecore_Window win);
EAPI E_Border *e_comp_wl_border_surface_find(Ecore_Window win);
#ifdef WAYLAND_ONLY
EAPI int e_comp_wl_input_read(int fd EINA_UNUSED, unsigned int mask EINA_UNUSED, void *data);
#endif
EAPI void wl_seat_init(struct wl_seat *seat);
EAPI void wl_seat_release(struct wl_seat *seat);
@ -621,5 +625,8 @@ EAPI void wl_seat_set_selection(struct wl_seat *seat, struct wl_data_source *sou
EAPI unsigned int e_comp_wl_time_get(void);
EAPI void e_comp_wl_input_modifiers_update(unsigned int serial);
EAPI void e_comp_wl_mouse_button(struct wl_resource *resource, uint32_t serial, uint32_t timestamp, uint32_t button, uint32_t state_w);
EAPI Eina_Bool e_comp_wl_cb_keymap_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED);
# endif
#endif

4998
src/bin/e_comp_x.c Normal file

File diff suppressed because it is too large Load Diff

113
src/bin/e_comp_x.h Normal file
View File

@ -0,0 +1,113 @@
#ifdef E_TYPEDEFS
# include <Ecore_X.h>
# include "e_atoms.h"
# include "e_hints.h"
# include "e_randr.h"
#else
# ifndef E_COMP_X_H
# define E_COMP_X_H
# include <Ecore_X.h>
# include "e_atoms.h"
# include "e_hints.h"
# include "e_randr.h"
struct _E_Comp_Client_Data
{
Ecore_X_Window lock_win;
Ecore_X_Damage damage; // damage region
Ecore_X_Visual vis; // window visual
Ecore_X_Colormap cmap; // colormap of window
#if 0 //NOT USED
Ecore_X_Pixmap cache_pixmap; // the cached pixmap (1/nth the dimensions)
int cache_w, cache_h; // cached pixmap size
#endif
Ecore_X_Image *xim; // x image - software fallback
Ecore_X_Sync_Alarm alarm;
Ecore_X_Sync_Counter sync_counter; // netwm sync counter
unsigned char misses; // number of sync misses
Ecore_X_Window_Attributes initial_attributes;
unsigned int move_counter; //reduce X calls when moving a window
unsigned int internal_props_set; //don't need to refetch our own internal props
struct
{
struct
{
struct
{
unsigned char conformant : 1;
} fetch;
unsigned char conformant : 1;
} conformant;
struct
{
struct
{
unsigned char state : 1;
struct
{
unsigned int major : 1;
unsigned int minor : 1;
} priority;
unsigned char quickpanel : 1;
unsigned char zone : 1;
} fetch;
Ecore_X_Illume_Quickpanel_State state;
struct
{
unsigned int major : 1;
unsigned int minor : 1;
} priority;
unsigned char quickpanel : 1;
int zone;
} quickpanel;
struct
{
struct
{
unsigned char drag : 1;
unsigned char locked : 1;
} fetch;
unsigned char drag : 1;
unsigned char locked : 1;
} drag;
struct
{
struct
{
unsigned char state : 1;
} fetch;
Ecore_X_Illume_Window_State state;
} win_state;
} illume;
Eina_Bool moving : 1;
Eina_Bool first_map : 1;
Eina_Bool change_icon : 1;
Eina_Bool need_reparent : 1;
Eina_Bool reparented : 1;
Eina_Bool deleted : 1;
Eina_Bool button_grabbed : 1;
Eina_Bool fetch_exe : 1;
Eina_Bool set_win_type : 1;
Eina_Bool frame_update : 1;
#ifdef COMP_X_SHAPE_INPUT_ERROR_CATCH
double last_input_time;
unsigned last_input_within_10;
#endif
};
EINTERN Eina_Bool e_comp_x_init(void);
EINTERN void e_comp_x_shutdown(void);
EAPI void e_alert_composite_win(Ecore_X_Window root, Ecore_X_Window win);
# endif
#endif

View File

@ -1,6 +1,6 @@
#include "e.h"
#if ((E18_PROFILE >= LOWRES_PDA) && (E18_PROFILE <= HIRES_PDA))
#if ((E19_PROFILE >= LOWRES_PDA) && (E19_PROFILE <= HIRES_PDA))
#define DEF_MENUCLICK 1.25
#else
#define DEF_MENUCLICK 0.25
@ -173,7 +173,8 @@ _e_config_edd_init(Eina_Bool old)
#define D _e_config_shelf_edd
E_CONFIG_VAL(D, T, name, STR);
E_CONFIG_VAL(D, T, id, INT);
E_CONFIG_VAL(D, T, container, INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(D, T, "container", manager, EET_T_INT);
E_CONFIG_VAL(D, T, manager /*container */, INT);
E_CONFIG_VAL(D, T, zone, INT);
E_CONFIG_VAL(D, T, layer, INT);
E_CONFIG_VAL(D, T, popup, UCHAR);
@ -202,7 +203,8 @@ _e_config_edd_init(Eina_Bool old)
#undef D
#define T E_Config_Desktop_Background
#define D _e_config_desktop_bg_edd
E_CONFIG_VAL(D, T, container, INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(D, T, "container", manager, EET_T_INT);
E_CONFIG_VAL(D, T, manager /*container */, INT);
E_CONFIG_VAL(D, T, zone, INT);
E_CONFIG_VAL(D, T, desk_x, INT);
E_CONFIG_VAL(D, T, desk_y, INT);
@ -213,7 +215,8 @@ _e_config_edd_init(Eina_Bool old)
#undef D
#define T E_Config_Desktop_Name
#define D _e_config_desktop_name_edd
E_CONFIG_VAL(D, T, container, INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(D, T, "container", manager, EET_T_INT);
E_CONFIG_VAL(D, T, manager /*container */, INT);
E_CONFIG_VAL(D, T, zone, INT);
E_CONFIG_VAL(D, T, desk_x, INT);
E_CONFIG_VAL(D, T, desk_y, INT);
@ -224,7 +227,7 @@ _e_config_edd_init(Eina_Bool old)
#undef D
#define T E_Config_Desktop_Window_Profile
#define D _e_config_desktop_window_profile_edd
E_CONFIG_VAL(D, T, container, INT);
E_CONFIG_VAL(D, T, manager, INT);
E_CONFIG_VAL(D, T, zone, INT);
E_CONFIG_VAL(D, T, desk_x, INT);
E_CONFIG_VAL(D, T, desk_y, INT);
@ -237,14 +240,6 @@ _e_config_edd_init(Eina_Bool old)
#define D _e_config_path_append_edd
E_CONFIG_VAL(D, T, dir, STR);
_e_config_theme_edd = E_CONFIG_DD_NEW("E_Config_Theme", E_Config_Theme);
#undef T
#undef D
#define T E_Config_Theme
#define D _e_config_theme_edd
E_CONFIG_VAL(D, T, category, STR);
E_CONFIG_VAL(D, T, file, STR);
_e_config_module_edd = E_CONFIG_DD_NEW("E_Config_Module", E_Config_Module);
#undef T
#undef D
@ -427,7 +422,6 @@ _e_config_edd_init(Eina_Bool old)
E_CONFIG_VAL(D, T, config_version, INT); /**/
E_CONFIG_VAL(D, T, config_type, UINT); /**/
E_CONFIG_VAL(D, T, show_splash, INT); /**/
E_CONFIG_VAL(D, T, init_default_theme, STR); /**/
E_CONFIG_VAL(D, T, desktop_default_background, STR); /**/
E_CONFIG_VAL(D, T, desktop_default_name, STR); /**/
E_CONFIG_VAL(D, T, desktop_default_window_profile, STR); /**/
@ -458,7 +452,6 @@ _e_config_edd_init(Eina_Bool old)
EET_DATA_DESCRIPTOR_ADD_LIST_STRING(D, T, "bad_modules", bad_modules);
E_CONFIG_LIST(D, T, font_fallbacks, _e_config_font_fallback_edd); /**/
E_CONFIG_LIST(D, T, font_defaults, _e_config_font_default_edd); /**/
E_CONFIG_LIST(D, T, themes, _e_config_theme_edd); /**/
E_CONFIG_LIST(D, T, mouse_bindings, _e_config_bindings_mouse_edd); /**/
E_CONFIG_LIST(D, T, key_bindings, _e_config_bindings_key_edd); /**/
E_CONFIG_LIST(D, T, edge_bindings, _e_config_bindings_edge_edd); /**/
@ -468,7 +461,6 @@ _e_config_edd_init(Eina_Bool old)
E_CONFIG_LIST(D, T, path_append_data, _e_config_path_append_edd); /**/
E_CONFIG_LIST(D, T, path_append_images, _e_config_path_append_edd); /**/
E_CONFIG_LIST(D, T, path_append_fonts, _e_config_path_append_edd); /**/
E_CONFIG_LIST(D, T, path_append_themes, _e_config_path_append_edd); /**/
E_CONFIG_LIST(D, T, path_append_init, _e_config_path_append_edd); /**/
E_CONFIG_LIST(D, T, path_append_icons, _e_config_path_append_edd); /**/
E_CONFIG_LIST(D, T, path_append_modules, _e_config_path_append_edd); /**/
@ -565,8 +557,8 @@ _e_config_edd_init(Eina_Bool old)
E_CONFIG_LIST(D, T, gadcons, _e_config_gadcon_edd);
E_CONFIG_LIST(D, T, shelves, _e_config_shelf_edd);
E_CONFIG_VAL(D, T, font_hinting, INT); /**/
E_CONFIG_VAL(D, T, desklock_personal_passwd, STR);
E_CONFIG_VAL(D, T, desklock_background, STR);
E_CONFIG_VAL(D, T, desklock_passwd, INT);
E_CONFIG_VAL(D, T, desklock_pin, INT);
E_CONFIG_LIST(D, T, desklock_backgrounds, _e_config_desklock_bg_edd); /**/
E_CONFIG_VAL(D, T, desklock_auth_method, INT);
E_CONFIG_VAL(D, T, desklock_login_box_zone, INT);
@ -1232,29 +1224,35 @@ e_config_load(void)
break;
}
}
CONFIG_VERSION_CHECK(13)
CONFIG_VERSION_CHECK(14)
{
E_Config_Theme *et;
E_Path_Dir *epd;
char buf[PATH_MAX], buf2[PATH_MAX], *f;
Eina_List *files;
Eina_List *files, *l;
Eina_Bool fail = EINA_FALSE;
E_Config_Shelf *cf_es;
E_Remember *rem;
char buf[PATH_MAX], buf2[PATH_MAX], *f;
CONFIG_VERSION_UPDATE_INFO(13);
// empty out theme elements of config
eina_stringshare_del(e_config->init_default_theme);
e_config->init_default_theme = NULL;
EINA_LIST_FREE(e_config->themes, et)
CONFIG_VERSION_UPDATE_INFO(14);
EINA_LIST_FOREACH(e_config->shelves, l, cf_es)
{
if (et->category) eina_stringshare_del(et->category);
if (et->file) eina_stringshare_del(et->file);
E_FREE(et);
}
EINA_LIST_FREE(e_config->path_append_themes, epd)
if (cf_es->popup)
{
if (epd->dir) eina_stringshare_del(epd->dir);
E_FREE(epd);
if (cf_es->layer)
cf_es->layer = E_LAYER_CLIENT_ABOVE;
else
cf_es->layer = E_LAYER_CLIENT_DESKTOP;
}
else if (!cf_es->layer)
cf_es->layer = E_LAYER_DESKTOP; //redundant, but whatever
cf_es->popup = 0;
}
/* E19 layer values are higher */
EINA_LIST_FOREACH(e_config->remembers, l, rem)
if (rem->apply & E_REMEMBER_APPLY_LAYER)
rem->prop.layer += 100;
// copy all of ~/.e/e/themes/* into ~/.elementary/themes
// and delete original data in ~/.e/e/themes
ecore_file_mkpath(elm_theme_user_dir_get());
@ -1274,6 +1272,32 @@ e_config_load(void)
ecore_file_recursive_rm(buf);
}
}
CONFIG_VERSION_CHECK(15)
{
E_Config_Module *em;
Eina_List *l;
Eina_Bool found = EINA_FALSE;
CONFIG_VERSION_UPDATE_INFO(15);
if (e_config->desklock_use_custom_desklock)
e_config->desklock_auth_method = E_DESKLOCK_AUTH_METHOD_EXTERNAL;
EINA_LIST_FOREACH(e_config->modules, l, em)
if (!strcmp(em->name, "lokker"))
{
found = EINA_TRUE;
break;
}
if (!found)
{
/* add new desklock module */
em = E_NEW(E_Config_Module, 1);
em->name = eina_stringshare_add("lokker");
em->enabled = 1;
em->delayed = 0;
e_config->modules = eina_list_append(e_config->modules, em);
}
}
}
if (!e_config->remember_internal_fm_windows)
e_config->remember_internal_fm_windows = !!(e_config->remember_internal_windows & E_REMEMBER_INTERNAL_FM_WINS);
@ -1458,11 +1482,6 @@ e_config_load(void)
/* FIXME: disabled auto apply because it causes problems */
e_config->cfgdlg_auto_apply = 0;
/* FIXME: desklock personalized password id disabled for security reasons */
e_config->desklock_auth_method = 0;
if (e_config->desklock_personal_passwd)
eina_stringshare_del(e_config->desklock_personal_passwd);
e_config->desklock_personal_passwd = NULL;
ecore_event_add(E_EVENT_CONFIG_LOADED, NULL, NULL, NULL);
}
@ -1696,17 +1715,15 @@ e_config_domain_system_load(const char *domain, E_Config_DD *edd)
static void
_e_config_mv_error(const char *from, const char *to)
{
if (!_e_config_error_dialog)
{
E_Dialog *dia;
dia = e_dialog_new(e_container_current_get(e_manager_current_get()),
"E", "_sys_error_logout_slow");
if (dia)
{
char buf[8192];
if (_e_config_error_dialog) return;
dia = e_dialog_new(NULL, "E", "_sys_error_logout_slow");
EINA_SAFETY_ON_NULL_RETURN(dia);
e_dialog_title_set(dia, _("Enlightenment Settings Write Problems"));
e_dialog_icon_set(dia, "dialog-error", 64);
snprintf(buf, sizeof(buf),
@ -1728,8 +1745,6 @@ _e_config_mv_error(const char *from, const char *to)
e_dialog_show(dia);
_e_config_error_dialog = dia;
}
}
}
EAPI int
e_config_profile_save(void)
@ -2090,7 +2105,6 @@ _e_config_free(E_Config *ecf)
E_Font_Fallback *eff;
E_Config_Module *em;
E_Font_Default *efd;
E_Config_Theme *et;
E_Color_Class *cc;
E_Path_Dir *epd;
E_Remember *rem;
@ -2132,12 +2146,6 @@ _e_config_free(E_Config *ecf)
if (efd->font) eina_stringshare_del(efd->font);
E_FREE(efd);
}
EINA_LIST_FREE(ecf->themes, et)
{
if (et->category) eina_stringshare_del(et->category);
if (et->file) eina_stringshare_del(et->file);
E_FREE(et);
}
EINA_LIST_FREE(ecf->path_append_data, epd)
{
if (epd->dir) eina_stringshare_del(epd->dir);
@ -2153,11 +2161,6 @@ _e_config_free(E_Config *ecf)
if (epd->dir) eina_stringshare_del(epd->dir);
E_FREE(epd);
}
EINA_LIST_FREE(ecf->path_append_themes, epd)
{
if (epd->dir) eina_stringshare_del(epd->dir);
E_FREE(epd);
}
EINA_LIST_FREE(ecf->path_append_init, epd)
{
if (epd->dir) eina_stringshare_del(epd->dir);
@ -2205,7 +2208,6 @@ _e_config_free(E_Config *ecf)
if (cc->name) eina_stringshare_del(cc->name);
E_FREE(cc);
}
if (ecf->init_default_theme) eina_stringshare_del(ecf->init_default_theme);
if (ecf->desktop_default_background) eina_stringshare_del(ecf->desktop_default_background);
if (ecf->desktop_default_name) eina_stringshare_del(ecf->desktop_default_name);
if (ecf->desktop_default_window_profile) eina_stringshare_del(ecf->desktop_default_window_profile);
@ -2223,8 +2225,6 @@ _e_config_free(E_Config *ecf)
if (ecf->transition_change) eina_stringshare_del(ecf->transition_change);
if (ecf->input_method) eina_stringshare_del(ecf->input_method);
if (ecf->exebuf_term_cmd) eina_stringshare_del(ecf->exebuf_term_cmd);
if (ecf->desklock_personal_passwd) eina_stringshare_del(ecf->desklock_personal_passwd);
if (ecf->desklock_background) eina_stringshare_del(ecf->desklock_background);
if (ecf->icon_theme) eina_stringshare_del(ecf->icon_theme);
if (ecf->wallpaper_import_last_dev) eina_stringshare_del(ecf->wallpaper_import_last_dev);
if (ecf->wallpaper_import_last_path) eina_stringshare_del(ecf->wallpaper_import_last_path);
@ -2362,8 +2362,7 @@ _e_config_eet_close_handle(Eet_File *ef, char *file)
{
E_Dialog *dia;
dia = e_dialog_new(e_container_current_get(e_manager_current_get()),
"E", "_sys_error_logout_slow");
dia = e_dialog_new(NULL, "E", "_sys_error_logout_slow");
if (dia)
{
char buf[8192];

2381
src/bin/e_config.c.orig Normal file

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,6 @@
typedef struct _E_Config E_Config;
typedef struct _E_Config_Module E_Config_Module;
typedef struct _E_Config_Theme E_Config_Theme;
typedef struct _E_Config_Binding_Mouse E_Config_Binding_Mouse;
typedef struct _E_Config_Binding_Key E_Config_Binding_Key;
typedef struct _E_Config_Binding_Edge E_Config_Binding_Edge;
@ -48,7 +47,7 @@ typedef enum
/* increment this whenever a new set of config values are added but the users
* config doesn't need to be wiped - simply new values need to be put in
*/
#define E_CONFIG_FILE_GENERATION 13
#define E_CONFIG_FILE_GENERATION 15
#define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH * 1000000) + E_CONFIG_FILE_GENERATION)
#define E_CONFIG_BINDINGS_VERSION 0 // DO NOT INCREMENT UNLESS YOU WANT TO WIPE ALL BINDINGS!!!!!
@ -58,7 +57,6 @@ struct _E_Config
int config_version; // INTERNAL
E_Config_Profile_Type config_type; // INTERNAL
int show_splash; // GUI
const char *init_default_theme; // GUI
const char *desktop_default_background; // GUI
Eina_List *desktop_backgrounds; // GUI
const char *desktop_default_name;
@ -89,7 +87,6 @@ struct _E_Config
Eina_List *bad_modules; // GUI
Eina_List *font_fallbacks; // GUI
Eina_List *font_defaults; // GUI
Eina_List *themes; // GUI
/* NO LONGER SAVED WITH THIS STRUCT */
Eina_List *mouse_bindings; // GUI
@ -102,7 +99,6 @@ struct _E_Config
Eina_List *path_append_data; // GUI
Eina_List *path_append_images; // GUI
Eina_List *path_append_fonts; // GUI
Eina_List *path_append_themes; // GUI
Eina_List *path_append_init; // GUI
Eina_List *path_append_icons; // GUI
Eina_List *path_append_modules; // GUI
@ -206,8 +202,8 @@ struct _E_Config
Eina_List *shelves; // GUI
int font_hinting; // GUI
const char *desklock_personal_passwd; // GUI
const char *desklock_background; // OLD DON'T USE
int desklock_passwd; // GUI // hashed
int desklock_pin; // GUI // hashed
Eina_List *desklock_backgrounds; // GUI
int desklock_auth_method; // GUI
int desklock_login_box_zone; // GUI
@ -478,12 +474,6 @@ struct _E_Config_Module
int priority;
};
struct _E_Config_Theme
{
const char *category;
const char *file;
};
struct _E_Config_Binding_Mouse
{
int context;
@ -546,7 +536,7 @@ struct _E_Config_Binding_Acpi
struct _E_Config_Desktop_Background
{
int container;
int manager;
int zone;
int desk_x;
int desk_y;
@ -555,7 +545,7 @@ struct _E_Config_Desktop_Background
struct _E_Config_Desktop_Name
{
int container;
int manager;
int zone;
int desk_x;
int desk_y;
@ -564,7 +554,7 @@ struct _E_Config_Desktop_Name
struct _E_Config_Desktop_Window_Profile
{
int container;
int manager;
int zone;
int desk_x;
int desk_y;
@ -603,9 +593,9 @@ struct _E_Config_Shelf
{
const char *name;
int id;
int container, zone;
int layer;
unsigned char popup;
int manager, zone;
int layer; //E_Layer
unsigned char popup; //DEAD
int orient;
unsigned char fit_along;
unsigned char fit_size;

View File

@ -21,7 +21,7 @@ static Eina_List *_e_config_dialog_list = NULL;
/**
* Creates a new dialog
*
* @param con the container the dialog will be added too
* @param c the compositor the dialog will be added to
* @param title to display for the dialog
* @param name the name used to register the window in e
* @param class the call used to register the window in e
@ -32,14 +32,14 @@ static Eina_List *_e_config_dialog_list = NULL;
* @return returns the created dialog. Null on failure
*/
EAPI E_Config_Dialog *
e_config_dialog_new(E_Container *con, const char *title, const char *name, const char *class, const char *icon, int icon_size, E_Config_Dialog_View *view, void *data)
e_config_dialog_new(E_Comp *c, const char *title, const char *name, const char *class, const char *icon, int icon_size, E_Config_Dialog_View *view, void *data)
{
E_Config_Dialog *cfd;
cfd = E_OBJECT_ALLOC(E_Config_Dialog, E_CONFIG_DIALOG_TYPE,
_e_config_dialog_free);
cfd->view = view;
cfd->con = con;
cfd->comp = c;
cfd->title = eina_stringshare_add(title);
cfd->name = eina_stringshare_add(name);
cfd->class = eina_stringshare_add(class);
@ -106,22 +106,21 @@ e_config_dialog_find(const char *name, const char *class)
E_Zone *z;
z = e_util_zone_current_get(e_manager_current_get());
e_border_uniconify(cfd->dia->win->border);
e_client_uniconify(cfd->dia->win->client);
e_win_raise(cfd->dia->win);
if (z->container == cfd->dia->win->border->zone->container)
e_border_desk_set(cfd->dia->win->border, e_desk_current_get(z));
if (z->comp == cfd->dia->win->client->zone->comp)
e_client_desk_set(cfd->dia->win->client, e_desk_current_get(z));
else
{
if (!cfd->dia->win->border->sticky)
e_desk_show(cfd->dia->win->border->desk);
ecore_x_pointer_warp(cfd->dia->win->border->zone->container->win,
cfd->dia->win->border->zone->x + (cfd->dia->win->border->zone->w / 2),
cfd->dia->win->border->zone->y + (cfd->dia->win->border->zone->h / 2));
if (!cfd->dia->win->client->sticky)
e_desk_show(cfd->dia->win->client->desk);
e_util_pointer_center(cfd->dia->win->client);
}
e_border_unshade(cfd->dia->win->border, cfd->dia->win->border->shade.dir);
if (cfd->dia->win->client->shaded || cfd->dia->win->client->shading)
e_client_unshade(cfd->dia->win->client, cfd->dia->win->client->shade_dir);
if ((e_config->focus_setting == E_FOCUS_NEW_DIALOG) ||
(e_config->focus_setting == E_FOCUS_NEW_WINDOW))
e_border_focus_set(cfd->dia->win->border, 1, 1);
evas_object_focus_set(cfd->dia->win->client->frame, 1);
return 1;
}
}
@ -192,9 +191,9 @@ _e_config_dialog_go(E_Config_Dialog *cfd, E_Config_Dialog_CFData_Type type)
if (!pdia) /* creating window for the first time */
{
if ((cfd->view->normal_win) || (e_config->cfgdlg_normal_wins))
cfd->dia = e_dialog_normal_win_new(cfd->con, cfd->name, buf);
cfd->dia = e_dialog_normal_win_new(cfd->comp, cfd->name, buf);
else
cfd->dia = e_dialog_new(cfd->con, cfd->name, buf);
cfd->dia = e_dialog_new(cfd->comp, cfd->name, buf);
e_object_del_attach_func_set(E_OBJECT(cfd->dia),
_e_config_dialog_cb_dialog_del);
} /* window was created before - deleting content only */

View File

@ -41,7 +41,7 @@ struct _E_Config_Dialog
E_Config_Dialog_CFData_Type view_type;
E_Config_Dialog_View *view;
E_Config_Dialog_Data *cfdata;
E_Container *con;
E_Comp *comp;
const char *title;
const char *icon;
const char *name;
@ -55,7 +55,7 @@ struct _E_Config_Dialog
unsigned char cfg_changed_auto : 1;
};
EAPI E_Config_Dialog *e_config_dialog_new(E_Container *con, const char *title, const char *name, const char *class, const char *icon, int icon_size, E_Config_Dialog_View *view, void *data);
EAPI E_Config_Dialog *e_config_dialog_new(E_Comp *c, const char *title, const char *name, const char *class, const char *icon, int icon_size, E_Config_Dialog_View *view, void *data);
EAPI int e_config_dialog_find(const char *name, const char *class);
EAPI E_Config_Dialog *e_config_dialog_get(const char *name, const char *class);

View File

@ -5,7 +5,7 @@ static void _e_configure_menu_add(void *data, E_Menu *m);
static void _e_configure_efreet_desktop_cleanup(void);
static void _e_configure_efreet_desktop_update(void);
static Eina_Bool _e_configure_cb_efreet_desktop_cache_update(void *data, int type, void *event);
static void _e_configure_registry_item_full_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func)(E_Container * con, const char *params), void (*generic_func)(E_Container *con, const char *params), Efreet_Desktop *desktop, const char *params);
static void _e_configure_registry_item_full_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func)(E_Comp *c, const char *params), void (*generic_func)(E_Comp *c, const char *params), Efreet_Desktop *desktop, const char *params);
static void _e_configure_registry_item_free(E_Configure_It *eci);
static void _configure_job(void *data);
@ -19,7 +19,7 @@ static Ecore_Job *update_job = NULL;
static struct
{
void (*func)(const void *data, E_Container *con, const char *params, Efreet_Desktop *desktop);
void (*func)(const void *data, E_Comp *c, const char *params, Efreet_Desktop *desktop);
const char *data;
} custom_desktop_exec = { NULL, NULL };
@ -41,7 +41,7 @@ e_configure_init(void)
}
EAPI void
e_configure_registry_call(const char *path, E_Container *con, const char *params)
e_configure_registry_call(const char *path, E_Comp *c, const char *params)
{
E_Configure_Cat *ecat;
Eina_List *l;
@ -52,7 +52,7 @@ e_configure_registry_call(const char *path, E_Container *con, const char *params
cat = ecore_file_dir_get(path);
if (!cat) return;
item = ecore_file_file_get(path);
if (!con) con = e_container_current_get(e_manager_current_get());
if (!c) c = e_comp_get(NULL);
EINA_LIST_FOREACH(e_configure_registry, l, ecat)
if (!strcmp(cat, ecat->cat))
{
@ -64,16 +64,16 @@ e_configure_registry_call(const char *path, E_Container *con, const char *params
{
if (!params) params = eci->params;
if (eci->func) eci->func(con, params);
if (eci->func) eci->func(c, params);
else if (eci->generic_func)
eci->generic_func(con, params);
eci->generic_func(c, params);
else if (eci->desktop)
{
if (custom_desktop_exec.func)
custom_desktop_exec.func(custom_desktop_exec.data,
con, params, eci->desktop);
c, params, eci->desktop);
else
e_exec(e_util_zone_current_get(con->manager),
e_exec(e_util_zone_current_get(c->man),
eci->desktop, NULL, NULL, "config");
}
break;
@ -84,19 +84,19 @@ e_configure_registry_call(const char *path, E_Container *con, const char *params
}
EAPI void
e_configure_registry_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func)(E_Container * con, const char *params))
e_configure_registry_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func)(E_Comp *c, const char *params))
{
_e_configure_registry_item_full_add(path, pri, label, icon_file, icon, func, NULL, NULL, NULL);
}
EAPI void
e_configure_registry_generic_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, void (*generic_func)(E_Container *con, const char *params))
e_configure_registry_generic_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, void (*generic_func)(E_Comp *c, const char *params))
{
_e_configure_registry_item_full_add(path, pri, label, icon_file, icon, NULL, generic_func, NULL, NULL);
}
EAPI void
e_configure_registry_item_params_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func)(E_Container * con, const char *params), const char *params)
e_configure_registry_item_params_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func)(E_Comp *c, const char *params), const char *params)
{
_e_configure_registry_item_full_add(path, pri, label, icon_file, icon, func, NULL, NULL, params);
}
@ -222,7 +222,7 @@ e_configure_registry_category_del(const char *path)
*/
EAPI void
e_configure_registry_custom_desktop_exec_callback_set(void (*func)(const void *data, E_Container *con, const char *params, Efreet_Desktop *desktop), const void *data)
e_configure_registry_custom_desktop_exec_callback_set(void (*func)(const void *data, E_Comp *c, const char *params, Efreet_Desktop *desktop), const void *data)
{
custom_desktop_exec.func = func;
custom_desktop_exec.data = data;
@ -268,7 +268,7 @@ e_configure_registry_exists(const char *path)
static void
_e_configure_menu_module_item_cb(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
{
e_int_config_modules(m->zone->container, NULL);
e_int_config_modules(m->zone->comp, NULL);
}
static void
@ -461,7 +461,7 @@ _e_configure_compare_pri_cb(E_Configure_It *eci, E_Configure_It *eci2)
}
static void
_e_configure_registry_item_full_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func)(E_Container * con, const char *params), void (*generic_func)(E_Container *con, const char *params), Efreet_Desktop *desktop, const char *params)
_e_configure_registry_item_full_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func)(E_Comp *c, const char *params), void (*generic_func)(E_Comp *c, const char *params), Efreet_Desktop *desktop, const char *params)
{
Eina_List *l;
char *cat;

View File

@ -25,20 +25,20 @@ struct _E_Configure_It
const char *icon_file;
const char *icon;
const char *params;
E_Config_Dialog *(*func) (E_Container *con, const char *params);
void (*generic_func) (E_Container *con, const char *params);
E_Config_Dialog *(*func) (E_Comp *c, const char *params);
void (*generic_func) (E_Comp *c, const char *params);
Efreet_Desktop *desktop;
};
EAPI void e_configure_registry_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func) (E_Container *con, const char *params));
EAPI void e_configure_registry_item_params_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func) (E_Container *con, const char *params), const char *params);
EAPI void e_configure_registry_generic_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, void (*generic_func) (E_Container *con, const char *params));
EAPI void e_configure_registry_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func) (E_Comp *c, const char *params));
EAPI void e_configure_registry_item_params_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func) (E_Comp *c, const char *params), const char *params);
EAPI void e_configure_registry_generic_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, void (*generic_func) (E_Comp *c, const char *params));
EAPI void e_configure_registry_item_del(const char *path);
EAPI void e_configure_registry_category_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon);
EAPI void e_configure_registry_category_del(const char *path);
EAPI void e_configure_registry_call(const char *path, E_Container *con, const char *params);
EAPI void e_configure_registry_call(const char *path, E_Comp *c, const char *params);
EAPI int e_configure_registry_exists(const char *path);
EAPI void e_configure_registry_custom_desktop_exec_callback_set(void (*func) (const void *data, E_Container *con, const char *params, Efreet_Desktop *desktop), const void *data);
EAPI void e_configure_registry_custom_desktop_exec_callback_set(void (*func) (const void *data, E_Comp *c, const char *params, Efreet_Desktop *desktop), const void *data);
EINTERN void e_configure_init(void);
extern EAPI Eina_List *e_configure_registry;

View File

@ -33,7 +33,7 @@ e_confirm_dialog_show(const char *title, const char *icon, const char *text,
cd->del.func = del_func;
cd->del.data = del_data;
dia = e_dialog_new(e_container_current_get(e_manager_current_get()), "E", "_confirm_dialog");
dia = e_dialog_new(NULL, "E", "_confirm_dialog");
if (!dia)
{
e_object_del(E_OBJECT(cd));

File diff suppressed because it is too large Load Diff

View File

@ -1,157 +0,0 @@
#ifdef E_TYPEDEFS
typedef enum _E_Container_Shape_Change
{
E_CONTAINER_SHAPE_ADD,
E_CONTAINER_SHAPE_DEL,
E_CONTAINER_SHAPE_SHOW,
E_CONTAINER_SHAPE_HIDE,
E_CONTAINER_SHAPE_MOVE,
E_CONTAINER_SHAPE_RESIZE,
E_CONTAINER_SHAPE_RECTS,
E_CONTAINER_SHAPE_INPUT_RECTS
} E_Container_Shape_Change;
typedef struct _E_Container E_Container;
typedef struct _E_Border_List E_Border_List;
typedef struct _E_Container_Shape E_Container_Shape;
typedef struct _E_Container_Shape_Callback E_Container_Shape_Callback;
typedef struct _E_Event_Container_Resize E_Event_Container_Resize;
typedef void (*E_Container_Shape_Cb)(void *data, E_Container_Shape *es, E_Container_Shape_Change ch);
#else
#ifndef E_CONTAINER_H
#define E_CONTAINER_H
#define E_CONTAINER_TYPE (int) 0xE0b01003
#define E_CONTAINER_SHAPE_TYPE (int) 0xE0b01004
#define E_CONTAINER_LAYER_COUNT 12
struct _E_Container
{
E_Object e_obj_inherit;
Ecore_X_Window win;
int x, y, w, h;
char visible : 1;
E_Manager *manager;
unsigned int num;
const char *name;
Ecore_Evas *bg_ecore_evas;
Evas *bg_evas;
Evas_Object *bg_blank_object;
Ecore_X_Window bg_win;
Ecore_X_Window event_win;
Eina_List *shapes;
Eina_List *shape_change_cb;
Eina_List *zones;
unsigned int clients;
struct {
Ecore_X_Window win;
Eina_List *clients; /* E_Border */
} layers[E_CONTAINER_LAYER_COUNT];
Ecore_X_Window scratch_win;
};
struct _E_Border_List
{
E_Container *container;
Eina_Array client_array;
int pos;
};
struct _E_Container_Shape
{
E_Object e_obj_inherit;
E_Container *con;
E_Comp_Win *comp_win;
int x, y, w, h;
unsigned char visible : 1;
struct {
int x, y, w, h;
} solid_rect;
int shape_rects_num;
Eina_Rectangle *shape_rects;
int shape_input_rects_num;
Eina_Rectangle *shape_input_rects;
};
struct _E_Container_Shape_Callback
{
E_Container_Shape_Cb func;
void *data;
};
struct _E_Event_Container_Resize
{
E_Container *container;
};
EINTERN int e_container_init(void);
EINTERN int e_container_shutdown(void);
EAPI E_Container *e_container_new(E_Manager *man);
EAPI void e_container_show(E_Container *con);
EAPI void e_container_hide(E_Container *con);
EAPI E_Container *e_container_current_get(E_Manager *man);
EAPI E_Container *e_container_number_get(E_Manager *man, int num);
EAPI void e_container_move(E_Container *con, int x, int y);
EAPI void e_container_resize(E_Container *con, int w, int h);
EAPI void e_container_move_resize(E_Container *con, int x, int y, int w, int h);
EAPI void e_container_raise(E_Container *con);
EAPI void e_container_lower(E_Container *con);
EAPI E_Border_List *e_container_border_list_first(E_Container *con);
EAPI E_Border_List *e_container_border_list_last(E_Container *con);
EAPI E_Border *e_container_border_list_next(E_Border_List *list);
EAPI E_Border *e_container_border_list_prev(E_Border_List *list);
EAPI void e_container_border_list_free(E_Border_List *list);
EAPI E_Zone *e_container_zone_at_point_get(E_Container *con, int x, int y);
EAPI E_Zone *e_container_zone_number_get(E_Container *con, int num);
EAPI E_Zone *e_container_zone_id_get(E_Container *con, int id);
EAPI E_Desk *e_container_desk_window_profile_get(E_Container *con, const char *profile);
EAPI E_Container_Shape *e_container_shape_add(E_Container *con);
EAPI void e_container_shape_show(E_Container_Shape *es);
EAPI void e_container_shape_hide(E_Container_Shape *es);
EAPI void e_container_shape_move(E_Container_Shape *es, int x, int y);
EAPI void e_container_shape_resize(E_Container_Shape *es, int w, int h);
EAPI Eina_List *e_container_shape_list_get(E_Container *con);
EAPI void e_container_shape_geometry_get(E_Container_Shape *es, int *x, int *y, int *w, int *h);
EAPI E_Container *e_container_shape_container_get(E_Container_Shape *es);
EAPI void e_container_shape_change_callback_add(E_Container *con, E_Container_Shape_Cb func, void *data);
EAPI void e_container_shape_change_callback_del(E_Container *con, E_Container_Shape_Cb func, void *data);
EAPI void e_container_shape_rects_set(E_Container_Shape *es, Eina_Rectangle *rects, int num);
EAPI void e_container_shape_input_rects_set(E_Container_Shape *es, Eina_Rectangle *rects, int num);
EAPI void e_container_shape_solid_rect_set(E_Container_Shape *es, int x, int y, int w, int h);
EAPI void e_container_shape_solid_rect_get(E_Container_Shape *es, int *x, int *y, int *w, int *h);
EAPI int e_container_borders_count(E_Container *con);
EAPI void e_container_border_add(E_Border *bd);
EAPI void e_container_border_remove(E_Border *bd);
EAPI void e_container_window_raise(E_Container *con, Ecore_X_Window win, E_Layer layer);
EAPI void e_container_window_lower(E_Container *con, Ecore_X_Window win, E_Layer layer);
EAPI E_Border *e_container_border_raise(E_Border *bd);
EAPI E_Border *e_container_border_lower(E_Border *bd);
EAPI void e_container_border_stack_above(E_Border *bd, E_Border *above);
EAPI void e_container_border_stack_below(E_Border *bd, E_Border *below);
EAPI void e_container_all_freeze(void);
EAPI void e_container_all_thaw(void);
EAPI E_Container *e_container_evas_object_container_get(Evas_Object *obj);
extern EAPI int E_EVENT_CONTAINER_RESIZE;
#endif
#endif

View File

@ -13,10 +13,11 @@ static void _e_desk_event_desk_deskshow_free(void *data, void *ev);
static void _e_desk_event_desk_name_change_free(void *data, void *ev);
static void _e_desk_show_begin(E_Desk *desk, int dx, int dy);
static void _e_desk_hide_begin(E_Desk *desk, int dx, int dy);
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
static void _e_desk_event_desk_window_profile_change_free(void *data, void *ev);
static void _e_desk_window_profile_change_protocol_set(void);
#endif
static E_Desk_Flip_Cb _e_desk_flip_cb = NULL;
static void *_e_desk_flip_data = NULL;
EAPI int E_EVENT_DESK_SHOW = 0;
EAPI int E_EVENT_DESK_BEFORE_SHOW = 0;
@ -49,9 +50,7 @@ e_desk_new(E_Zone *zone, int x, int y)
E_Desk *desk;
Eina_List *l;
E_Config_Desktop_Name *cfname;
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
E_Config_Desktop_Window_Profile *cfprof;
#endif
char name[40];
int ok = 0;
@ -68,8 +67,8 @@ e_desk_new(E_Zone *zone, int x, int y)
/* Get current desktop's name */
EINA_LIST_FOREACH(e_config->desktop_names, l, cfname)
{
if ((cfname->container >= 0) &&
((int)zone->container->num != cfname->container)) continue;
if ((cfname->manager >= 0) &&
((int)zone->comp->num != cfname->manager)) continue;
if ((cfname->zone >= 0) &&
((int)zone->num != cfname->zone)) continue;
if ((cfname->desk_x != desk->x) || (cfname->desk_y != desk->y))
@ -84,13 +83,12 @@ e_desk_new(E_Zone *zone, int x, int y)
snprintf(name, sizeof(name), _(e_config->desktop_default_name), x, y);
desk->name = eina_stringshare_add(name);
}
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
/* Get window profile name for current desktop */
ok = 0;
EINA_LIST_FOREACH(e_config->desktop_window_profiles, l, cfprof)
{
if ((cfprof->container >= 0) &&
((int)zone->container->num != cfprof->container)) continue;
if ((cfprof->manager >= 0) &&
((int)zone->comp->num != cfprof->manager)) continue;
if ((cfprof->zone >= 0) &&
((int)zone->num != cfprof->zone)) continue;
if ((cfprof->desk_x != desk->x) || (cfprof->desk_y != desk->y))
@ -105,10 +103,22 @@ e_desk_new(E_Zone *zone, int x, int y)
desk->window_profile = eina_stringshare_add
(e_config->desktop_default_window_profile);
}
#endif
return desk;
}
EAPI E_Client *
e_desk_client_top_visible_get(const E_Desk *desk)
{
E_Client *ec;
E_OBJECT_CHECK_RETURN(desk, NULL);
E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, NULL);
E_CLIENT_REVERSE_FOREACH(e_comp_get(desk), ec)
if (e_client_util_desk_visible(ec, desk) && evas_object_visible_get(ec->frame)) return ec;
return NULL;
}
EAPI void
e_desk_name_set(E_Desk *desk, const char *name)
{
@ -127,14 +137,14 @@ e_desk_name_set(E_Desk *desk, const char *name)
}
EAPI void
e_desk_name_add(int container, int zone, int desk_x, int desk_y, const char *name)
e_desk_name_add(int manager, int zone, int desk_x, int desk_y, const char *name)
{
E_Config_Desktop_Name *cfname;
e_desk_name_del(container, zone, desk_x, desk_y);
e_desk_name_del(manager, zone, desk_x, desk_y);
cfname = E_NEW(E_Config_Desktop_Name, 1);
cfname->container = container;
cfname->manager = manager;
cfname->zone = zone;
cfname->desk_x = desk_x;
cfname->desk_y = desk_y;
@ -144,14 +154,14 @@ e_desk_name_add(int container, int zone, int desk_x, int desk_y, const char *nam
}
EAPI void
e_desk_name_del(int container, int zone, int desk_x, int desk_y)
e_desk_name_del(int manager, int zone, int desk_x, int desk_y)
{
Eina_List *l = NULL;
E_Config_Desktop_Name *cfname = NULL;
EINA_LIST_FOREACH(e_config->desktop_names, l, cfname)
{
if ((cfname->container == container) && (cfname->zone == zone) &&
if ((cfname->manager == manager) && (cfname->zone == zone) &&
(cfname->desk_x == desk_x) && (cfname->desk_y == desk_y))
{
e_config->desktop_names =
@ -166,20 +176,17 @@ e_desk_name_del(int container, int zone, int desk_x, int desk_y)
EAPI void
e_desk_name_update(void)
{
Eina_List *m, *c, *z, *l;
E_Manager *man;
E_Container *con;
const Eina_List *z, *l;
E_Comp *c;
E_Zone *zone;
E_Desk *desk;
E_Config_Desktop_Name *cfname;
int d_x, d_y, ok;
char name[40];
EINA_LIST_FOREACH(e_manager_list(), m, man)
EINA_LIST_FOREACH(e_comp_list(), l, c)
{
EINA_LIST_FOREACH(man->containers, c, con)
{
EINA_LIST_FOREACH(con->zones, z, zone)
EINA_LIST_FOREACH(c->zones, z, zone)
{
for (d_x = 0; d_x < zone->desk_x_count; d_x++)
{
@ -190,8 +197,8 @@ e_desk_name_update(void)
EINA_LIST_FOREACH(e_config->desktop_names, l, cfname)
{
if ((cfname->container >= 0) &&
((int)con->num != cfname->container)) continue;
if ((cfname->manager >= 0) &&
((int)c->num != cfname->manager)) continue;
if ((cfname->zone >= 0) &&
((int)zone->num != cfname->zone)) continue;
if ((cfname->desk_x != d_x) ||
@ -213,7 +220,6 @@ e_desk_name_update(void)
}
}
}
}
EAPI void
e_desk_show(E_Desk *desk)
@ -236,7 +242,6 @@ e_desk_show(E_Desk *desk)
ecore_event_add(E_EVENT_DESK_BEFORE_SHOW, eev,
_e_desk_event_desk_before_show_free, NULL);
ecore_x_window_shadow_tree_flush();
for (x = 0; x < desk->zone->desk_x_count; x++)
{
for (y = 0; y < desk->zone->desk_y_count; y++)
@ -328,8 +333,7 @@ e_desk_show(E_Desk *desk)
EAPI void
e_desk_deskshow(E_Zone *zone)
{
E_Border *bd;
E_Border_List *bl;
E_Client *ec;
E_Desk *desk;
E_Event_Desk_Show *ev;
@ -337,32 +341,28 @@ e_desk_deskshow(E_Zone *zone)
E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
desk = e_desk_current_get(zone);
bl = e_container_border_list_first(zone->container);
ecore_x_window_shadow_tree_flush();
while ((bd = e_container_border_list_next(bl)))
{
if (bd->desk == desk)
E_CLIENT_FOREACH(zone->comp, ec)
{
if (e_client_util_ignored_get(ec)) continue;
if (ec->desk != desk) continue;
if (desk->deskshow_toggle)
{
if (bd->deskshow)
if (ec->deskshow)
{
bd->deskshow = 0;
e_border_uniconify(bd);
ec->deskshow = 0;
e_client_uniconify(ec);
}
}
else
{
if (bd->iconic) continue;
if (bd->client.netwm.state.skip_taskbar) continue;
if (bd->user_skip_winlist) continue;
bd->deskshow = 1;
e_border_iconify(bd);
if (ec->iconic) continue;
if (ec->netwm.state.skip_taskbar) continue;
if (ec->user_skip_winlist) continue;
ec->deskshow = 1;
e_client_iconify(ec);
}
}
}
desk->deskshow_toggle = desk->deskshow_toggle ? 0 : 1;
e_container_border_list_free(bl);
desk->deskshow_toggle = !desk->deskshow_toggle;
ev = E_NEW(E_Event_Desk_Show, 1);
ev->desk = desk;
e_object_ref(E_OBJECT(desk));
@ -370,40 +370,40 @@ e_desk_deskshow(E_Zone *zone)
_e_desk_event_desk_deskshow_free, NULL);
}
EAPI E_Border *
EAPI E_Client *
e_desk_last_focused_focus(E_Desk *desk)
{
Eina_List *l = NULL;
E_Border *bd, *bds = NULL;
E_Client *ec, *ecs = NULL;
EINA_LIST_FOREACH(e_border_focus_stack_get(), l, bd)
EINA_LIST_FOREACH(e_client_focus_stack_get(), l, ec)
{
if ((!bd->iconic) && (bd->visible) &&
((bd->desk == desk) || ((bd->zone == desk->zone) && bd->sticky)) &&
(bd->client.icccm.accepts_focus || bd->client.icccm.take_focus) &&
(bd->client.netwm.type != ECORE_X_WINDOW_TYPE_DOCK) &&
(bd->client.netwm.type != ECORE_X_WINDOW_TYPE_TOOLBAR) &&
(bd->client.netwm.type != ECORE_X_WINDOW_TYPE_MENU) &&
(bd->client.netwm.type != ECORE_X_WINDOW_TYPE_SPLASH) &&
(bd->client.netwm.type != ECORE_X_WINDOW_TYPE_DESKTOP))
if ((!ec->iconic) && (ec->visible) &&
((ec->desk == desk) || ((ec->zone == desk->zone) && ec->sticky)) &&
(ec->icccm.accepts_focus || ec->icccm.take_focus) &&
(ec->netwm.type != E_WINDOW_TYPE_DOCK) &&
(ec->netwm.type != E_WINDOW_TYPE_TOOLBAR) &&
(ec->netwm.type != E_WINDOW_TYPE_MENU) &&
(ec->netwm.type != E_WINDOW_TYPE_SPLASH) &&
(ec->netwm.type != E_WINDOW_TYPE_DESKTOP))
{
/* this was the window last focused in this desktop */
if (!bd->lock_focus_out)
if (!ec->lock_focus_out)
{
if (bd->sticky)
if (ec->sticky)
{
bds = bd;
ecs = ec;
continue;
}
e_border_focus_set_with_pointer(bd);
return bd;
e_client_focus_set_with_pointer(ec);
return ec;
}
}
}
if (bds)
if (ecs)
{
e_border_focus_set_with_pointer(bds);
return bds;
e_client_focus_set_with_pointer(ecs);
return ecs;
}
return NULL;
}
@ -532,7 +532,6 @@ e_desk_prev(E_Zone *zone)
e_desk_show(e_desk_at_xy_get(zone, x, y));
}
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
EAPI void
e_desk_window_profile_set(E_Desk *desk,
const char *profile)
@ -552,7 +551,7 @@ e_desk_window_profile_set(E_Desk *desk,
}
EAPI void
e_desk_window_profile_add(int container,
e_desk_window_profile_add(int manager,
int zone,
int desk_x,
int desk_y,
@ -560,20 +559,19 @@ e_desk_window_profile_add(int container,
{
E_Config_Desktop_Window_Profile *cfprof;
e_desk_window_profile_del(container, zone, desk_x, desk_y);
e_desk_window_profile_del(manager, zone, desk_x, desk_y);
cfprof = E_NEW(E_Config_Desktop_Window_Profile, 1);
cfprof->container = container;
cfprof->manager = manager;
cfprof->zone = zone;
cfprof->desk_x = desk_x;
cfprof->desk_y = desk_y;
if (profile) cfprof->profile = eina_stringshare_add(profile);
else cfprof->profile = NULL;
cfprof->profile = eina_stringshare_add(profile);
e_config->desktop_window_profiles = eina_list_append(e_config->desktop_window_profiles, cfprof);
}
EAPI void
e_desk_window_profile_del(int container,
e_desk_window_profile_del(int manager,
int zone,
int desk_x,
int desk_y)
@ -583,7 +581,7 @@ e_desk_window_profile_del(int container,
EINA_LIST_FOREACH(e_config->desktop_window_profiles, l, cfprof)
{
if (!((cfprof->container == container) &&
if (!((cfprof->manager == manager) &&
(cfprof->zone == zone) &&
(cfprof->desk_x == desk_x) &&
(cfprof->desk_y == desk_y)))
@ -591,8 +589,8 @@ e_desk_window_profile_del(int container,
e_config->desktop_window_profiles =
eina_list_remove_list(e_config->desktop_window_profiles, l);
if (cfprof->profile) eina_stringshare_del(cfprof->profile);
E_FREE(cfprof);
eina_stringshare_del(cfprof->profile);
free(cfprof);
break;
}
}
@ -600,9 +598,8 @@ e_desk_window_profile_del(int container,
EAPI void
e_desk_window_profile_update(void)
{
Eina_List *m, *c, *z, *l;
E_Manager *man;
E_Container *con;
const Eina_List *z, *l;
E_Comp *c;
E_Zone *zone;
E_Desk *desk;
E_Config_Desktop_Window_Profile *cfprof;
@ -613,11 +610,9 @@ e_desk_window_profile_update(void)
if (!(e_config->use_desktop_window_profile))
return;
EINA_LIST_FOREACH(e_manager_list(), m, man)
EINA_LIST_FOREACH(e_comp_list(), l, c)
{
EINA_LIST_FOREACH(man->containers, c, con)
{
EINA_LIST_FOREACH(con->zones, z, zone)
EINA_LIST_FOREACH(c->zones, z, zone)
{
for (d_x = 0; d_x < zone->desk_x_count; d_x++)
{
@ -628,8 +623,8 @@ e_desk_window_profile_update(void)
EINA_LIST_FOREACH(e_config->desktop_window_profiles, l, cfprof)
{
if ((cfprof->container >= 0) &&
((int)con->num != cfprof->container)) continue;
if ((cfprof->manager >= 0) &&
((int)c->num != cfprof->manager)) continue;
if ((cfprof->zone >= 0) &&
((int)zone->num != cfprof->zone)) continue;
if ((cfprof->desk_x != d_x) ||
@ -649,9 +644,56 @@ e_desk_window_profile_update(void)
}
}
}
EAPI void
e_desk_flip_cb_set(E_Desk_Flip_Cb cb, const void *data)
{
_e_desk_flip_cb = cb;
_e_desk_flip_data = (void*)data;
}
#endif
EAPI void
e_desk_flip_end(E_Desk *desk)
{
E_Event_Desk_After_Show *ev;
E_Client *ec;
ev = E_NEW(E_Event_Desk_After_Show, 1);
ev->desk = desk;
e_object_ref(E_OBJECT(ev->desk));
ecore_event_add(E_EVENT_DESK_AFTER_SHOW, ev,
_e_desk_event_desk_after_show_free, NULL);
e_comp_shape_queue(e_comp_get(desk));
if (!e_config->focus_last_focused_per_desktop) return;
if ((e_config->focus_policy == E_FOCUS_MOUSE) ||
(e_config->focus_policy == E_FOCUS_SLOPPY))
{
ec = e_client_focused_get();
/* only set focus/warp pointer if currently focused window
* is on same screen (user hasn't switched screens during transition)
*/
if (ec && ec->desk && (ec->desk->zone != desk->zone))
return;
}
ec = e_desk_last_focused_focus(desk);
if ((e_config->focus_policy != E_FOCUS_MOUSE) && (!ec))
{
/* we didn't previously have a focused window on this desk
* but we should, so this is probably the first time the
* user has flipped to this desk. let's be helpful and
* focus a random window!
*/
E_CLIENT_REVERSE_FOREACH(e_comp_get(desk), ec)
{
/* start with top and go down... */
if (e_client_util_ignored_get(ec)) continue;
if (!e_client_util_desk_visible(ec, desk)) continue;
if (ec->iconic) continue;
evas_object_focus_set(ec->frame, 1);
}
}
}
static void
_e_desk_free(E_Desk *desk)
@ -704,97 +746,61 @@ _e_desk_event_desk_deskshow_free(void *data __UNUSED__, void *event)
static void
_e_desk_event_desk_name_change_free(void *data __UNUSED__, void *event)
{
E_Event_Desk_Name_Change *ev;
ev = event;
E_Event_Desk_Name_Change *ev = event;
e_object_unref(E_OBJECT(ev->desk));
free(ev);
}
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
static void
_e_desk_event_desk_window_profile_change_free(void *data __UNUSED__, void *event)
{
E_Event_Desk_Window_Profile_Change *ev;
ev = event;
E_Event_Desk_Window_Profile_Change *ev = event;
e_object_unref(E_OBJECT(ev->desk));
E_FREE(ev);
}
#endif
static Eina_Bool
_e_desk_transition_setup(E_Border *bd, int dx, int dy, int state)
_e_desk_transition_setup(E_Client *ec, int dx, int dy, int state)
{
e_comp_win_effect_set(bd->cw, e_config->desk_flip_animate_type ?: "none");
e_comp_object_effect_set(ec->frame, e_config->desk_flip_animate_type ?: "none");
if (e_config->desk_flip_animate_type)
{
/* set geoms */
e_comp_win_effect_params_set(bd->cw, 1, (int[]){bd->x - bd->zone->x, bd->y - bd->zone->y, bd->w, bd->h, bd->zone->w, bd->zone->h, dx, dy}, 8);
e_comp_win_effect_params_set(bd->cw, 0, (int[]){state}, 1);
e_comp_object_effect_params_set(ec->frame, 1, (int[]){ec->x - ec->zone->x, ec->y - ec->zone->y, ec->w, ec->h, ec->zone->w, ec->zone->h, dx, dy}, 8);
e_comp_object_effect_params_set(ec->frame, 0, (int[]){state}, 1);
}
return !!e_config->desk_flip_animate_type;
}
static void
_e_desk_show_end_serious(E_Desk *desk)
{
E_Event_Desk_After_Show *ev;
ev = E_NEW(E_Event_Desk_After_Show, 1);
ev->desk = desk;
e_object_ref(E_OBJECT(ev->desk));
ecore_event_add(E_EVENT_DESK_AFTER_SHOW, ev,
_e_desk_event_desk_after_show_free, NULL);
if (!e_config->focus_last_focused_per_desktop) return;
if ((e_config->focus_policy == E_FOCUS_MOUSE) ||
(e_config->focus_policy == E_FOCUS_SLOPPY))
{
E_Border *bd;
bd = e_border_focused_get();
/* only set focus/warp pointer if currently focused window
* is on same screen (user hasn't switched screens during transition)
*/
if (bd && bd->desk && (bd->desk->zone != desk->zone))
return;
}
e_desk_last_focused_focus(desk);
}
static void
_e_desk_show_end(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
{
E_Border *bd = data;
E_Client *ec = data;
bd->desk->animate_count--;
e_border_comp_hidden_set(bd, bd->shaded);
if (bd->desk != e_desk_current_get(bd->zone)) return;
e_comp_win_effect_unclip(bd->cw);
if (!bd->visible) e_border_show(bd);
if (bd->desk->animate_count) return;
_e_desk_show_end_serious(bd->desk);
ec->desk->animate_count--;
e_client_comp_hidden_set(ec, ec->shaded);
e_comp_object_effect_unclip(ec->frame);
ec->hidden = 0;
if (!ec->visible) evas_object_show(ec->frame);
if (ec->desk != e_desk_current_get(ec->zone)) return;
if (!ec->desk->animate_count) e_desk_flip_end(ec->desk);
}
static void
_e_desk_hide_end(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
{
E_Border *bd = data;
E_Client *ec = data;
bd->desk->animate_count--;
e_border_comp_hidden_set(bd, bd->shaded);
e_border_hide(bd, 2);
if (bd->desk->animate_count) return;
ecore_x_window_shadow_tree_flush();
ec->desk->animate_count--;
ec->hidden = 1;
evas_object_hide(ec->frame);
}
static void
_e_desk_show_begin(E_Desk *desk, int dx, int dy)
{
E_Border_List *bl;
E_Border *bd;
E_Client *ec;
if (dx < 0) dx = -1;
if (dx > 0) dx = 1;
@ -802,36 +808,43 @@ _e_desk_show_begin(E_Desk *desk, int dx, int dy)
if (dy > 0) dy = 1;
desk->animate_count = 0;
bl = e_container_border_list_first(desk->zone->container);
while ((bd = e_container_border_list_next(bl)))
if (_e_desk_flip_cb && e_config->desk_flip_animate_type)
{
if ((bd->desk->zone != desk->zone) || (bd->iconic)) continue;
if (bd->moving)
_e_desk_flip_cb(_e_desk_flip_data, desk, dx, dy, 1);
return;
}
E_CLIENT_FOREACH(desk->zone->comp, ec)
{
e_border_desk_set(bd, desk);
e_border_show(bd);
if ((ec->desk->zone != desk->zone) || (ec->iconic) || e_client_util_ignored_get(ec)) continue;
if (ec->moving)
{
e_client_desk_set(ec, desk);
evas_object_show(ec->frame);
continue;
}
if ((bd->desk != desk) || (bd->sticky)) continue;
if (_e_desk_transition_setup(bd, dx, dy, 1))
if ((ec->desk != desk) || (ec->sticky)) continue;
if (starting)
ec->hidden = 0;
else if (_e_desk_transition_setup(ec, dx, dy, 1))
{
e_comp_win_effect_stop(bd->cw, _e_desk_hide_end);
e_comp_win_effect_start(bd->cw, _e_desk_show_end, bd);
e_comp_object_effect_stop(ec->frame, _e_desk_hide_end);
e_comp_object_effect_start(ec->frame, _e_desk_show_end, ec);
desk->animate_count++;
e_border_comp_hidden_set(bd, EINA_TRUE);
}
e_border_show(bd);
else
ec->hidden = 0;
e_client_comp_hidden_set(ec, ec->hidden);
evas_object_show(ec->frame);
}
if ((!e_config->desk_flip_animate_type) || (!desk->animate_count))
_e_desk_show_end_serious(desk);
e_container_border_list_free(bl);
e_desk_flip_end(desk);
}
static void
_e_desk_hide_begin(E_Desk *desk, int dx, int dy)
{
E_Border_List *bl;
E_Border *bd;
E_Client *ec;
if (dx < 0) dx = -1;
if (dx > 0) dx = 1;
@ -839,28 +852,31 @@ _e_desk_hide_begin(E_Desk *desk, int dx, int dy)
if (dy > 0) dy = 1;
desk->animate_count = 0;
bl = e_container_border_list_first(desk->zone->container);
while ((bd = e_container_border_list_next(bl)))
if (_e_desk_flip_cb && e_config->desk_flip_animate_type)
{
if ((bd->desk->zone != desk->zone) || (bd->iconic)) continue;
if (bd->moving) continue;
if ((bd->desk != desk) || (bd->sticky)) continue;
if (_e_desk_transition_setup(bd, -dx, -dy, 0))
_e_desk_flip_cb(_e_desk_flip_data, desk, dx, dy, 0);
return;
}
E_CLIENT_FOREACH(desk->zone->comp, ec)
{
e_comp_win_effect_stop(bd->cw, _e_desk_show_end);
e_comp_win_effect_start(bd->cw, _e_desk_hide_end, bd);
if ((ec->desk->zone != desk->zone) || (ec->iconic) || e_client_util_ignored_get(ec)) continue;
if (ec->moving) continue;
if ((ec->desk != desk) || (ec->sticky)) continue;
if ((!starting) && _e_desk_transition_setup(ec, -dx, -dy, 0))
{
e_comp_object_effect_stop(ec->frame, _e_desk_show_end);
e_comp_object_effect_start(ec->frame, _e_desk_hide_end, ec);
desk->animate_count++;
e_border_comp_hidden_set(bd, EINA_TRUE);
}
else
e_border_hide(bd, 2);
{
ec->hidden = 1;
evas_object_hide(ec->frame);
}
e_client_comp_hidden_set(ec, EINA_TRUE);
}
if (!e_config->desk_flip_animate_type)
ecore_x_window_shadow_tree_flush();
e_container_border_list_free(bl);
}
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
static void
_e_desk_window_profile_change_protocol_set(void)
{
@ -868,10 +884,5 @@ _e_desk_window_profile_change_protocol_set(void)
E_Manager *man;
EINA_LIST_FOREACH(e_manager_list(), l, man)
{
ecore_x_e_window_profile_supported_set
(man->root, e_config->use_desktop_window_profile);
ecore_x_e_window_profile_supported_set(man->root, e_config->use_desktop_window_profile);
}
}
#endif

View File

@ -7,6 +7,8 @@ typedef struct _E_Event_Desk_After_Show E_Event_Desk_After_Show;
typedef struct _E_Event_Desk_Name_Change E_Event_Desk_Name_Change;
typedef struct _E_Event_Desk_Window_Profile_Change E_Event_Desk_Window_Profile_Change;
typedef void (*E_Desk_Flip_Cb)(void *data, E_Desk *desk, int dx, int dy, Eina_Bool show);
#else
#ifndef E_DESK_H
#define E_DESK_H
@ -30,7 +32,7 @@ struct _E_Desk
int x, y;
unsigned char visible : 1;
unsigned int deskshow_toggle : 1;
int fullscreen_borders;
Eina_List *fullscreen_clients;
Evas_Object *bg_object;
@ -66,12 +68,13 @@ EINTERN int e_desk_init(void);
EINTERN int e_desk_shutdown(void);
EAPI E_Desk *e_desk_new(E_Zone *zone, int x, int y);
EAPI void e_desk_name_set(E_Desk *desk, const char *name);
EAPI void e_desk_name_add(int container, int zone, int desk_x, int desk_y, const char *name);
EAPI void e_desk_name_del(int container, int zone, int desk_x, int desk_y);
EAPI void e_desk_name_add(int manager, int zone, int desk_x, int desk_y, const char *name);
EAPI void e_desk_name_del(int manager, int zone, int desk_x, int desk_y);
EAPI void e_desk_name_update(void);
EAPI void e_desk_show(E_Desk *desk);
EAPI void e_desk_deskshow(E_Zone *zone);
EAPI E_Border *e_desk_last_focused_focus(E_Desk *desk);
EAPI E_Client *e_desk_last_focused_focus(E_Desk *desk);
EAPI E_Client *e_desk_client_top_visible_get(const E_Desk *desk);
EAPI E_Desk *e_desk_current_get(E_Zone *zone);
EAPI E_Desk *e_desk_at_xy_get(E_Zone *zone, int x, int y);
EAPI E_Desk *e_desk_at_pos_get(E_Zone *zone, int pos);
@ -82,21 +85,20 @@ EAPI void e_desk_row_add(E_Zone *zone);
EAPI void e_desk_row_remove(E_Zone *zone);
EAPI void e_desk_col_add(E_Zone *zone);
EAPI void e_desk_col_remove(E_Zone *zone);
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
EAPI void e_desk_window_profile_set(E_Desk *desk, const char *profile);
EAPI void e_desk_window_profile_add(int container, int zone, int desk_x, int desk_y, const char *profile);
EAPI void e_desk_window_profile_del(int container, int zone, int desk_x, int desk_y);
EAPI void e_desk_window_profile_add(int manager, int zone, int desk_x, int desk_y, const char *profile);
EAPI void e_desk_window_profile_del(int manager, int zone, int desk_x, int desk_y);
EAPI void e_desk_window_profile_update(void);
#endif
EAPI void e_desk_flip_cb_set(E_Desk_Flip_Cb cb, const void *data);
EAPI void e_desk_flip_end(E_Desk *desk);
extern EAPI int E_EVENT_DESK_SHOW;
extern EAPI int E_EVENT_DESK_BEFORE_SHOW;
extern EAPI int E_EVENT_DESK_AFTER_SHOW;
extern EAPI int E_EVENT_DESK_DESKSHOW;
extern EAPI int E_EVENT_DESK_NAME_CHANGE;
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
extern EAPI int E_EVENT_DESK_WINDOW_PROFILE_CHANGE;
#endif
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,8 @@
#ifdef E_TYPEDEFS
typedef struct _E_Event_Desklock E_Event_Desklock;
typedef Eina_Bool (*E_Desklock_Show_Cb)(void);
typedef void (*E_Desklock_Hide_Cb)(void);
typedef enum _E_Desklock_Background_Method {
E_DESKLOCK_BACKGROUND_METHOD_THEME_DESKLOCK = 0,
@ -8,6 +10,15 @@ typedef enum _E_Desklock_Background_Method {
E_DESKLOCK_BACKGROUND_METHOD_WALLPAPER,
E_DESKLOCK_BACKGROUND_METHOD_CUSTOM,
} E_Desklock_Background_Method;
typedef enum
{
E_DESKLOCK_AUTH_METHOD_SYSTEM = 0,
E_DESKLOCK_AUTH_METHOD_PERSONAL = 1,
E_DESKLOCK_AUTH_METHOD_EXTERNAL = 2,
E_DESKLOCK_AUTH_METHOD_PIN = 3,
} E_Desklock_Auth_Method;
#else
#ifndef E_DESKLOCK_H
#define E_DESKLOCK_H
@ -26,7 +37,33 @@ EAPI int e_desklock_show_autolocked(void);
EAPI void e_desklock_hide(void);
EAPI Eina_Bool e_desklock_state_get(void);
EAPI void e_desklock_create_callback_set(E_Desklock_Show_Cb cb);
EAPI void e_desklock_destroy_callback_set(E_Desklock_Hide_Cb cb);
EAPI Eina_Stringshare *e_desklock_user_wallpaper_get(E_Zone *zone);
EAPI void e_desklock_show_hook_add(E_Desklock_Show_Cb cb);
EAPI void e_desklock_show_hook_del(E_Desklock_Show_Cb cb);
EAPI void e_desklock_hide_hook_add(E_Desklock_Hide_Cb cb);
EAPI void e_desklock_hide_hook_del(E_Desklock_Hide_Cb cb);
extern EAPI int E_EVENT_DESKLOCK;
static inline Eina_Bool
e_desklock_is_external(void)
{
return e_config->desklock_auth_method == E_DESKLOCK_AUTH_METHOD_EXTERNAL;
}
static inline Eina_Bool
e_desklock_is_personal(void)
{
return e_config->desklock_auth_method == E_DESKLOCK_AUTH_METHOD_PERSONAL;
}
static inline Eina_Bool
e_desklock_is_system(void)
{
return e_config->desklock_auth_method == E_DESKLOCK_AUTH_METHOD_SYSTEM;
}
#endif
#endif

View File

@ -1,7 +1,13 @@
#include "e.h"
#define SMART_NAME "e_deskmirror"
#define INTERNAL_ENTRY E_Smart_Data *sd; sd = evas_object_smart_data_get(obj); if (!sd) return;
#define API_ENTRY(X) E_Smart_Data *sd; \
sd = evas_object_smart_data_get(X); \
if ((!X) || (!sd) || (e_util_strcmp(evas_object_type_get(X), SMART_NAME))) return
typedef struct E_Smart_Data
{
Evas *e;
@ -30,10 +36,12 @@ typedef struct Mirror
{
EINA_INLIST;
E_Smart_Data *sd;
E_Comp_Win *cw;
E_Client *ec;
Evas_Object *comp_object;
Evas_Object *mirror;
int x, y, w, h;
Eina_Bool frame : 1;
Eina_Bool added : 1;
} Mirror;
typedef struct Mirror_Border
@ -44,17 +52,58 @@ typedef struct Mirror_Border
Evas_Object *obj;
} Mirror_Border;
/* local subsystem globals */
static Evas_Smart *_e_deskmirror_smart = NULL;
static Evas_Smart *_mirror_border_smart = NULL;
static Evas_Smart *_mirror_client_smart = NULL;
static void _e_deskmirror_mirror_setup(Mirror *m);
static void _comp_object_hide(Mirror *m, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
static void _comp_object_show(Mirror *m, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
static void _comp_object_stack(Mirror *m, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED);
static void _comp_object_configure(Mirror *m, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
static Eina_Bool
_e_deskmirror_visible_get(E_Smart_Data *sd, Mirror *m)
{
Eina_Bool visible = evas_object_visible_get(m->comp_object);
if (m->ec)
{
visible = m->ec->visible;
/* iconic flips meaning of visible flag at this point
* where "this point" is defined as being during the show
* callback for a client
*/
if (m->sd->handlers && m->ec->iconic)
visible = !m->ec->visible;
if (visible)
{
visible = (sd->desk == m->ec->desk) || (m->ec->sticky);
if (sd->pager)
visible = !m->ec->netwm.state.skip_pager;
if (visible && sd->taskbar)
visible = !m->ec->netwm.state.skip_taskbar;
}
}
if ((m->w < 1) || (m->h < 1)) visible = EINA_FALSE;
return visible;
}
static void
_mirror_visible_apply(Mirror *m)
{
if (_e_deskmirror_visible_get(m->sd, m))
evas_object_show(m->mirror);
else
evas_object_hide(m->mirror);
}
/* local subsystem functions */
static void
_mirror_scale_set(Mirror *m, float sc)
{
Edje_Message_Float_Set msg;
Mirror_Border *mb;
/* FIXME: broken */
return;
if (!m->frame) return;
mb = evas_object_smart_data_get(m->mirror);
@ -106,6 +155,7 @@ static void
_e_deskmirror_smart_del(Evas_Object *obj)
{
INTERNAL_ENTRY;
e_object_unref(E_OBJECT(sd->desk));
if (sd->desk_delfn)
{
e_object_delfn_del(E_OBJECT(sd->desk), sd->desk_delfn);
@ -114,6 +164,9 @@ _e_deskmirror_smart_del(Evas_Object *obj)
}
E_FREE_LIST(sd->handlers, ecore_event_handler_del);
eina_hash_free(sd->mirror_hash);
evas_object_del(sd->clip);
evas_object_del(sd->bgpreview);
evas_object_del(sd->layout);
free(sd);
}
@ -174,23 +227,41 @@ _e_deskmirror_smart_clip_unset(Evas_Object *obj)
////////////////////////////////////////////////////////
static void
_e_deskmirror_mirror_frame_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
_e_deskmirror_mirror_frame_recalc_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
Mirror_Border *mb = data;
Mirror *m = data;
Mirror_Border *mb;
if (mb->m->cw->bd && (!e_object_is_del(E_OBJECT(mb->m->cw->bd))))
if (m->frame)
{
mb = evas_object_smart_data_get(m->mirror);
if (mb->m->ec && (!e_object_is_del(E_OBJECT(mb->m->ec))))
{
if (e_comp_object_frame_exists(obj)) return;
evas_object_smart_member_del(mb->mirror);
mb->m->mirror = mb->mirror;
mb->mirror = NULL;
mb->m->frame = 0;
}
else
mb->m->cw = NULL;
mb->m->comp_object = NULL;
evas_object_del(mb->obj);
e_layout_pack(m->sd->layout, m->mirror);
}
else
{
if (m->ec && (!e_object_is_del(E_OBJECT(m->ec))))
{
if (!e_comp_object_frame_exists(obj)) return;
e_layout_unpack(m->mirror);
_e_deskmirror_mirror_setup(m);
}
}
}
static void
_mirror_border_smart_add(Evas_Object *obj)
_mirror_client_smart_add(Evas_Object *obj)
{
Mirror_Border *mb;
@ -200,7 +271,7 @@ _mirror_border_smart_add(Evas_Object *obj)
}
static void
_mirror_border_signal_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *emission, const char *src)
_mirror_client_signal_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *emission, const char *src)
{
Mirror_Border *mb = data;
edje_object_signal_emit(mb->frame, emission, src);
@ -209,19 +280,18 @@ _mirror_border_signal_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *e
}
static void
_mirror_border_smart_del(Evas_Object *obj)
_mirror_client_smart_del(Evas_Object *obj)
{
Mirror_Border *mb = evas_object_smart_data_get(obj);
if (mb->m->cw && mb->m->cw->bd)
{
evas_object_event_callback_del_full(mb->m->cw->bd->bg_object, EVAS_CALLBACK_DEL, _e_deskmirror_mirror_frame_del_cb, mb);
edje_object_signal_callback_del_full(mb->m->cw->bd->bg_object, "*", "*", _mirror_border_signal_cb, mb);
}
if (mb->m->comp_object && mb->m->ec)
e_comp_object_signal_callback_del_full(mb->m->ec->frame, "*", "*", _mirror_client_signal_cb, mb);
evas_object_del(mb->frame);
evas_object_del(mb->mirror);
free(mb);
}
static void
_mirror_border_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
_mirror_client_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
{
Mirror_Border *mb = evas_object_smart_data_get(obj);
@ -229,64 +299,59 @@ _mirror_border_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
}
static void
_mirror_border_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
_mirror_client_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
{
Mirror_Border *mb = evas_object_smart_data_get(obj);
evas_object_resize(mb->frame, w, h);
}
static void
_mirror_border_smart_show(Evas_Object *obj)
_mirror_client_smart_show(Evas_Object *obj)
{
Mirror_Border *mb = evas_object_smart_data_get(obj);
evas_object_show(mb->frame);
evas_object_show(mb->mirror);
}
static void
_mirror_border_smart_hide(Evas_Object *obj)
_mirror_client_smart_hide(Evas_Object *obj)
{
Mirror_Border *mb = evas_object_smart_data_get(obj);
evas_object_hide(mb->frame);
evas_object_hide(mb->mirror);
}
static void
_mirror_border_smart_color_set(Evas_Object *obj, int r, int g, int b, int a)
_mirror_client_smart_color_set(Evas_Object *obj, int r, int g, int b, int a)
{
Mirror_Border *mb = evas_object_smart_data_get(obj);
evas_object_color_set(mb->frame, r, g, b, a);
evas_object_color_set(mb->mirror, r, g, b, a);
}
static void
_mirror_border_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
_mirror_client_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
{
Mirror_Border *mb = evas_object_smart_data_get(obj);
evas_object_clip_set(mb->frame, clip);
evas_object_clip_set(mb->mirror, clip);
}
static void
_mirror_border_smart_clip_unset(Evas_Object *obj)
_mirror_client_smart_clip_unset(Evas_Object *obj)
{
Mirror_Border *mb = evas_object_smart_data_get(obj);
evas_object_clip_unset(mb->frame);
evas_object_clip_unset(mb->mirror);
}
static void
_mirror_border_smart_init(void)
_mirror_client_smart_init(void)
{
static const Evas_Smart_Class sc =
{
"mirror_border", EVAS_SMART_CLASS_VERSION,
_mirror_border_smart_add, _mirror_border_smart_del, _mirror_border_smart_move, _mirror_border_smart_resize,
_mirror_border_smart_show, _mirror_border_smart_hide, _mirror_border_smart_color_set, _mirror_border_smart_clip_set,
_mirror_border_smart_clip_unset, NULL, NULL, NULL, NULL, NULL, NULL, NULL
_mirror_client_smart_add, _mirror_client_smart_del, _mirror_client_smart_move, _mirror_client_smart_resize,
_mirror_client_smart_show, _mirror_client_smart_hide, _mirror_client_smart_color_set, _mirror_client_smart_clip_set,
_mirror_client_smart_clip_unset, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
if (_mirror_border_smart) return;
_mirror_border_smart = evas_smart_class_new(&sc);
if (_mirror_client_smart) return;
_mirror_client_smart = evas_smart_class_new(&sc);
}
static void
@ -294,7 +359,7 @@ _e_deskmirror_smart_init(void)
{
static const Evas_Smart_Class sc =
{
"e_deskmirror", EVAS_SMART_CLASS_VERSION,
SMART_NAME, EVAS_SMART_CLASS_VERSION,
_e_deskmirror_smart_add, _e_deskmirror_smart_del, _e_deskmirror_smart_move, _e_deskmirror_smart_resize,
_e_deskmirror_smart_show, _e_deskmirror_smart_hide, _e_deskmirror_smart_color_set, _e_deskmirror_smart_clip_set,
_e_deskmirror_smart_clip_unset, NULL, NULL, NULL, NULL, NULL, NULL, NULL
@ -311,27 +376,10 @@ _e_deskmirror_delfn(E_Smart_Data *sd, void *desk EINA_UNUSED)
evas_object_del(sd->obj);
}
static Eina_Bool
_e_deskmirror_win_visible_get(E_Smart_Data *sd, E_Comp_Win *cw)
{
Eina_Bool visible = cw->visible;
if (cw->bd)
{
if (visible)
{
if (sd->pager)
visible = !cw->bd->client.netwm.state.skip_pager;
if (visible && sd->taskbar)
visible = !cw->bd->client.netwm.state.skip_taskbar;
}
}
return visible;
}
static void
_e_deskmirror_mirror_del(Mirror *m)
{
eina_hash_del_by_key(m->sd->mirror_hash, &m->cw);
eina_hash_del_by_key(m->sd->mirror_hash, &m->comp_object);
}
static void
@ -340,37 +388,19 @@ _e_deskmirror_mirror_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI
_e_deskmirror_mirror_del(data);
}
static void
_e_deskmirror_mirror_del_hash(Mirror *m)
{
m->sd->mirrors = eina_inlist_remove(m->sd->mirrors, EINA_INLIST_GET(m));
evas_object_event_callback_del_full(m->mirror, EVAS_CALLBACK_DEL, _e_deskmirror_mirror_del_cb, m);
evas_object_del(m->mirror);
free(m);
}
static void
_e_deskmirror_mirror_geometry_get(Mirror *m)
{
if (m->cw->bd)
{
m->x = m->cw->bd->x;
m->y = m->cw->bd->y;
m->w = m->cw->bd->w;
if (m->cw->bd->shaded)
m->h = m->cw->bd->client_inset.t;
else
m->h = m->cw->bd->h;
}
else if (m->cw->not_in_layout)
evas_object_geometry_get(m->cw->effect_obj, &m->x, &m->y, &m->w, &m->h);
else
e_layout_child_geometry_get(m->cw->effect_obj, &m->x, &m->y, &m->w, &m->h);
E_Zone *zone;
evas_object_geometry_get(m->comp_object, &m->x, &m->y, &m->w, &m->h);
zone = e_comp_object_util_zone_get(m->comp_object);
if (zone)
m->x -= zone->x, m->y -= zone->y;
/* double check here if we get zeroes */
if ((!m->w) || (!m->h))
{
m->w = m->cw->w, m->h = m->cw->h;
m->x = m->cw->x, m->y = m->cw->y;
ERR("ACK!");
}
}
@ -380,49 +410,64 @@ _e_deskmirror_mirror_reconfigure(Mirror *m)
_e_deskmirror_mirror_geometry_get(m);
e_layout_child_move(m->mirror, m->x, m->y);
e_layout_child_resize(m->mirror, m->w, m->h);
if (_e_deskmirror_win_visible_get(m->sd, m->cw) && m->w && m->h)
evas_object_show(m->mirror);
else
evas_object_hide(m->mirror);
_mirror_visible_apply(m);
}
static void
_e_deskmirror_mirror_del_hash(Mirror *m)
{
m->sd->mirrors = eina_inlist_remove(m->sd->mirrors, EINA_INLIST_GET(m));
evas_object_smart_callback_del_full(m->comp_object, "frame_recalc_done", _e_deskmirror_mirror_frame_recalc_cb, m);
evas_object_event_callback_del_full(m->comp_object, EVAS_CALLBACK_DEL, _e_deskmirror_mirror_del_cb, m);
evas_object_del(m->mirror);
evas_object_event_callback_del_full(m->comp_object, EVAS_CALLBACK_SHOW, (Evas_Object_Event_Cb)_comp_object_show, m);
evas_object_event_callback_del_full(m->comp_object, EVAS_CALLBACK_HIDE, (Evas_Object_Event_Cb)_comp_object_hide, m);
evas_object_event_callback_del_full(m->comp_object, EVAS_CALLBACK_RESTACK, (Evas_Object_Event_Cb)_comp_object_stack, m);
evas_object_event_callback_del_full(m->comp_object, EVAS_CALLBACK_RESIZE, (Evas_Object_Event_Cb)_comp_object_configure, m);
evas_object_event_callback_del_full(m->comp_object, EVAS_CALLBACK_MOVE, (Evas_Object_Event_Cb)_comp_object_configure, m);
free(m);
}
static Evas_Object *
_mirror_border_new(Mirror *m)
_mirror_client_new(Mirror *m)
{
Evas_Object *o;
Mirror_Border *mb;
char buf[4096];
_mirror_border_smart_init();
o = evas_object_smart_add(m->sd->e, _mirror_border_smart);
_mirror_client_smart_init();
o = evas_object_smart_add(m->sd->e, _mirror_client_smart);
mb = evas_object_smart_data_get(o);
mb->m = m;
mb->frame = edje_object_add(m->sd->e);
evas_object_name_set(mb->frame, "mirror_border");
snprintf(buf, sizeof(buf), "e/deskmirror/frame/%s", m->cw->bd->client.border.name);
snprintf(buf, sizeof(buf), "e/deskmirror/frame/%s", m->ec->border.name);
e_theme_edje_object_set(mb->frame, "base/theme/borders", buf);
if (e_util_border_shadow_state_get(m->cw->bd))
if (e_util_client_shadow_state_get(m->ec))
edje_object_signal_emit(mb->frame, "e,state,shadow,on", "e");
else
edje_object_signal_emit(mb->frame, "e,state,shadow,off", "e");
edje_object_signal_callback_add(mb->m->cw->bd->bg_object, "*", "*", _mirror_border_signal_cb, mb);
if (e_border_focused_get() == mb->m->cw->bd)
if (m->comp_object)
{
e_comp_object_signal_callback_add(mb->m->comp_object, "*", "*", _mirror_client_signal_cb, mb);
evas_object_event_callback_add(m->comp_object, EVAS_CALLBACK_DEL, _e_deskmirror_mirror_del_cb, m);
}
if (mb->m->ec->focused)
edje_object_signal_emit(mb->frame, "e,state,focused", "e");
if (mb->m->cw->bd->shaded)
if (mb->m->ec->shaded)
edje_object_signal_emit(mb->frame, "e,state,shaded", "e");
if (mb->m->cw->bd->maximized)
if (mb->m->ec->maximized)
edje_object_signal_emit(mb->frame, "e,action,maximize", "e");
if (mb->m->cw->bd->sticky)
if (mb->m->ec->sticky)
edje_object_signal_emit(mb->frame, "e,state,sticky", "e");
mb->mirror = m->mirror;
evas_object_smart_member_add(mb->frame, o);
evas_object_name_set(mb->mirror, "mirror");
evas_object_smart_member_add(mb->mirror, o);
edje_object_part_swallow(mb->frame, "e.swallow.client", m->mirror);
edje_object_part_text_set(mb->frame, "e.text.title", m->cw->bd->client.netwm.name ?: m->cw->bd->client.icccm.name);
edje_object_part_text_set(mb->frame, "e.text.title", e_client_name_get(m->ec));
if (m->sd->h)
_mirror_scale_set(m, (double)m->sd->h / (double)m->sd->desk->zone->h);
evas_object_event_callback_add(m->cw->bd->bg_object, EVAS_CALLBACK_DEL, _e_deskmirror_mirror_frame_del_cb, mb);
return o;
}
@ -430,151 +475,207 @@ static void
_e_deskmirror_mirror_setup(Mirror *m)
{
if (!m->mirror) return;
if (m->cw->bd && m->cw->bd->bg_object)
evas_object_event_callback_del_full(m->comp_object, EVAS_CALLBACK_DEL, _e_deskmirror_mirror_del_cb, m);
if (m->ec && e_comp_object_frame_exists(m->comp_object))
{
m->mirror = _mirror_border_new(m);
m->mirror = _mirror_client_new(m);
m->frame = 1;
}
else
evas_object_pass_events_set(m->mirror, 1);
{
evas_object_pass_events_set(m->mirror, !m->ec);
evas_object_event_callback_add(m->comp_object, EVAS_CALLBACK_DEL, _e_deskmirror_mirror_del_cb, m);
}
if (m->ec) evas_object_data_set(m->mirror, "E_Client", m->ec);
evas_object_precise_is_inside_set(m->mirror, m->ec && m->ec->shaped);
e_layout_pack(m->sd->layout, m->mirror);
evas_object_event_callback_add(m->mirror, EVAS_CALLBACK_DEL, _e_deskmirror_mirror_del_cb, m);
_e_deskmirror_mirror_reconfigure(m);
if (m->sd->handlers) // no handlers = we're setting up = there's no possible listeners
{
_comp_object_stack(m, NULL, m->comp_object, NULL);
if (!m->added)
evas_object_smart_callback_call(m->sd->obj, "mirror_add", m->mirror);
}
m->added = 1;
}
static Eina_Bool
_comp_object_check(Mirror *m)
{
int w, h;
evas_object_geometry_get(m->comp_object, NULL, NULL, &w, &h);
if ((w < 2) || (h < 2)) return EINA_FALSE;
m->mirror = e_comp_object_util_mirror_add(m->comp_object);
if (m->mirror) evas_object_layer_set(m->mirror, evas_object_layer_get(m->comp_object));
_e_deskmirror_mirror_setup(m);
return EINA_TRUE;
}
static void
_comp_object_hide(Mirror *m, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
_mirror_visible_apply(m);
}
static void
_comp_object_show(Mirror *m, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
if (!m->mirror)
{
if (!_comp_object_check(m)) return;
}
_mirror_visible_apply(m);
}
static void
_comp_object_stack(Mirror *m, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
Evas_Object *comp_object;
if (!m->mirror)
{
if (!_comp_object_check(m)) return;
}
comp_object = evas_object_below_get(obj);
while (comp_object)
{
Mirror *m2;
m2 = eina_hash_find(m->sd->mirror_hash, &comp_object);
if (m2 && m2->mirror)
{
e_layout_child_raise_above(m->mirror, m2->mirror);
return;
}
comp_object = evas_object_below_get(comp_object);
}
e_layout_child_lower(m->mirror);
}
static void
_comp_object_configure(Mirror *m, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
if (!m->mirror)
{
if (!_comp_object_check(m)) return;
}
_e_deskmirror_mirror_reconfigure(m);
}
static Mirror *
_e_deskmirror_mirror_add(E_Smart_Data *sd, E_Comp_Win *cw)
_e_deskmirror_mirror_add(E_Smart_Data *sd, Evas_Object *obj)
{
Mirror *m;
Evas_Object *o = NULL;
E_Client *ec;
int w, h;
if (cw->bd)
if (sd->desk->zone != e_comp_object_util_zone_get(obj)) return NULL;
ec = e_comp_object_client_get(obj);
if (ec)
{
if ((cw->bd->zone != sd->desk->zone) || ((cw->bd->desk != sd->desk) && (!cw->bd->sticky)))
if ((ec->desk != sd->desk) && (!ec->sticky))
return NULL;
if (ec->input_only || ec->ignored)
return NULL;
}
else
{
int x, y;
E_Shelf *es;
if (!sd->desk->visible) return NULL;
if (cw->not_in_layout)
evas_object_geometry_get(cw->effect_obj, &x, &y, NULL, NULL);
else
e_layout_child_geometry_get(cw->effect_obj, &x, &y, NULL, NULL);
if (!E_INSIDE(x, y, sd->desk->zone->x, sd->desk->zone->y, sd->desk->zone->w, sd->desk->zone->h)) return NULL;
}
if ((cw->w > 1) && (cw->h > 1))
if (sd->pager || sd->taskbar) return NULL;
es = evas_object_data_get(obj, "E_Shelf");
if (es)
{
o = e_comp_win_image_mirror_add(cw);
if (!o) return NULL;
if (!e_shelf_desk_visible(es, sd->desk)) return NULL;
}
else
{
if (sd->desk != e_desk_current_get(sd->desk->zone)) return NULL;
}
}
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
if ((w > 1) && (h > 1))
{
o = e_comp_object_util_mirror_add(obj);
}
m = calloc(1, sizeof(Mirror));
m->cw = cw;
m->comp_object = obj;
m->ec = ec;
m->sd = sd;
m->mirror = o;
if (o) evas_object_layer_set(o, evas_object_layer_get(obj));
evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, (Evas_Object_Event_Cb)_comp_object_show, m);
evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE, (Evas_Object_Event_Cb)_comp_object_hide, m);
evas_object_event_callback_add(obj, EVAS_CALLBACK_RESTACK, (Evas_Object_Event_Cb)_comp_object_stack, m);
evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, (Evas_Object_Event_Cb)_comp_object_configure, m);
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, (Evas_Object_Event_Cb)_comp_object_configure, m);
evas_object_smart_callback_add(obj, "frame_recalc_done", _e_deskmirror_mirror_frame_recalc_cb, m);
sd->mirrors = eina_inlist_append(sd->mirrors, EINA_INLIST_GET(m));
eina_hash_direct_add(sd->mirror_hash, &m->cw, m);
eina_hash_add(sd->mirror_hash, &obj, m);
_e_deskmirror_mirror_setup(m);
return m;
}
static Eina_Bool
_comp_source_add(E_Smart_Data *sd, int type EINA_UNUSED, E_Event_Comp *ev)
_comp_object_add(E_Smart_Data *sd, int type EINA_UNUSED, E_Event_Comp_Object *ev)
{
if (eina_hash_find(sd->mirror_hash, &ev->cw)) return ECORE_CALLBACK_RENEW;
_e_deskmirror_mirror_add(sd, ev->cw);
if (eina_hash_find(sd->mirror_hash, &ev->comp_object)) return ECORE_CALLBACK_RENEW;
_e_deskmirror_mirror_add(sd, ev->comp_object);
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
_comp_source_visible(E_Smart_Data *sd, int type EINA_UNUSED, E_Event_Comp *ev)
_client_desk_set(E_Smart_Data *sd, int type EINA_UNUSED, E_Event_Client_Desk_Set *ev)
{
Mirror *m;
m = eina_hash_find(sd->mirror_hash, &ev->cw);
if (!m) return ECORE_CALLBACK_RENEW;
if (!m->mirror)
{
if ((m->cw->w < 2) || (m->cw->h < 2)) return ECORE_CALLBACK_RENEW;
m->mirror = e_comp_win_image_mirror_add(m->cw);
_e_deskmirror_mirror_setup(m);
}
if (_e_deskmirror_win_visible_get(m->sd, m->cw))
evas_object_show(m->mirror);
else
evas_object_hide(m->mirror);
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
_comp_source_stack(E_Smart_Data *sd, int type EINA_UNUSED, E_Event_Comp *ev)
{
Mirror *m, *m2;
E_Comp_Win *cw;
m = eina_hash_find(sd->mirror_hash, &ev->cw);
if (!m) return ECORE_CALLBACK_RENEW;
if (!m->mirror)
{
if ((m->cw->w < 2) || (m->cw->h < 2)) return ECORE_CALLBACK_RENEW;
m->mirror = e_comp_win_image_mirror_add(m->cw);
_e_deskmirror_mirror_setup(m);
}
if (!EINA_INLIST_GET(ev->cw)->next)
e_layout_child_raise(m->mirror);
else if (!EINA_INLIST_GET(ev->cw)->prev)
e_layout_child_lower(m->mirror);
else
{
EINA_INLIST_FOREACH(EINA_INLIST_GET(ev->cw)->next, cw)
{
m2 = eina_hash_find(sd->mirror_hash, &cw);
if ((!m2) || (!m2->mirror)) continue;
e_layout_child_lower_below(m->mirror, m2->mirror);
return ECORE_CALLBACK_RENEW;
}
e_layout_child_raise(m->mirror);
}
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
_comp_source_configure(E_Smart_Data *sd, int type EINA_UNUSED, E_Event_Comp *ev)
{
Mirror *m;
m = eina_hash_find(sd->mirror_hash, &ev->cw);
m = eina_hash_find(sd->mirror_hash, &ev->ec->frame);
if (m)
{
if (!m->mirror)
/* ev->desk is previous desk */
if ((ev->desk == sd->desk) && (!ev->ec->sticky))
eina_hash_del_by_key(sd->mirror_hash, &ev->ec->frame);
}
if (sd->desk == ev->ec->desk)
_e_deskmirror_mirror_add(sd, ev->ec->frame);
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
_client_property(E_Smart_Data *sd, int type EINA_UNUSED, E_Event_Client_Property *ev)
{
if ((m->cw->w < 2) || (m->cw->h < 2)) return ECORE_CALLBACK_RENEW;
m->mirror = e_comp_win_image_mirror_add(m->cw);
_e_deskmirror_mirror_setup(m);
}
_e_deskmirror_mirror_reconfigure(m);
}
Mirror *m;
if (!(ev->property & E_CLIENT_PROPERTY_NETWM_STATE)) return ECORE_CALLBACK_RENEW;
m = eina_hash_find(sd->mirror_hash, &ev->ec->frame);
if (m) _mirror_visible_apply(m);
return ECORE_CALLBACK_RENEW;
}
/* externally accessible functions */
EAPI Evas_Object *
e_deskmirror_add(E_Desk *desk)
e_deskmirror_add(E_Desk *desk, Eina_Bool pager, Eina_Bool taskbar)
{
E_Smart_Data *sd;
Evas_Object *o;
Evas_Object *o, *l;
Evas *e;
E_Comp_Win *cw;
e = e_comp_get(desk)->evas;
_e_deskmirror_smart_init();
o = evas_object_smart_add(e, _e_deskmirror_smart);
e_object_ref(E_OBJECT(desk));
sd = evas_object_smart_data_get(o);
sd->pager = !!pager;
sd->taskbar = !!taskbar;
sd->desk = desk;
sd->mirror_hash = eina_hash_pointer_new((Eina_Free_Cb)_e_deskmirror_mirror_del_hash);
sd->desk_delfn = e_object_delfn_add(E_OBJECT(desk), (Ecore_End_Cb)_e_deskmirror_delfn, sd);
sd->bgpreview = e_widget_bgpreview_desk_add(e, desk->zone, desk->x, desk->y);
evas_object_pass_events_set(sd->bgpreview, 1);
evas_object_clip_set(sd->bgpreview, sd->clip);
evas_object_smart_member_add(sd->bgpreview, o);
evas_object_show(sd->bgpreview);
@ -584,25 +685,78 @@ e_deskmirror_add(E_Desk *desk)
evas_object_smart_member_add(sd->layout, o);
evas_object_show(sd->layout);
e_comp_object_util_center_on(o, sd->desk->zone->bg_clip_object);
e_layout_freeze(sd->layout);
EINA_INLIST_FOREACH(e_comp_get(desk)->wins, cw)
l = evas_object_bottom_get(e_comp_get(desk)->evas);
do
{
Mirror *m;
m = _e_deskmirror_mirror_add(sd, cw);
if (m) e_layout_child_raise(m->mirror);
}
if (evas_object_data_get(l, "comp_object"))
_e_deskmirror_mirror_add(sd, l);
l = evas_object_above_get(l);
} while (l);
e_layout_thaw(sd->layout);
E_LIST_HANDLER_APPEND(sd->handlers, E_EVENT_COMP_SOURCE_ADD, _comp_source_add, sd);
E_LIST_HANDLER_APPEND(sd->handlers, E_EVENT_COMP_SOURCE_CONFIGURE, _comp_source_configure, sd);
E_LIST_HANDLER_APPEND(sd->handlers, E_EVENT_COMP_SOURCE_STACK, _comp_source_stack, sd);
E_LIST_HANDLER_APPEND(sd->handlers, E_EVENT_COMP_SOURCE_VISIBILITY, _comp_source_visible, sd);
E_LIST_HANDLER_APPEND(sd->handlers, E_EVENT_COMP_OBJECT_ADD, (Ecore_Event_Handler_Cb)_comp_object_add, sd);
E_LIST_HANDLER_APPEND(sd->handlers, E_EVENT_CLIENT_PROPERTY, (Ecore_Event_Handler_Cb)_client_property, sd);
E_LIST_HANDLER_APPEND(sd->handlers, E_EVENT_CLIENT_DESK_SET, (Ecore_Event_Handler_Cb)_client_desk_set, sd);
return o;
}
EAPI Evas_Object *
e_deskmirror_mirror_find(Evas_Object *deskmirror, Evas_Object *comp_object)
{
Mirror *m;
EINA_SAFETY_ON_NULL_RETURN_VAL(deskmirror, NULL);
EINA_SAFETY_ON_NULL_RETURN_VAL(comp_object, NULL);
API_ENTRY(deskmirror) NULL;
m = eina_hash_find(sd->mirror_hash, &comp_object);
return m ? m->mirror : NULL;
}
EAPI Eina_List *
e_deskmirror_mirror_list(Evas_Object *deskmirror)
{
Eina_List *l = NULL;
Mirror *m;
EINA_SAFETY_ON_NULL_RETURN_VAL(deskmirror, NULL);
API_ENTRY(deskmirror) NULL;
EINA_INLIST_FOREACH(sd->mirrors, m)
{
if (m->mirror)
l = eina_list_append(l, m->mirror);
}
return l;
}
EAPI void
e_deskmirror_coord_canvas_to_virtual(Evas_Object *obj, Evas_Coord cx, Evas_Coord cy, Evas_Coord *vx, Evas_Coord *vy)
{
API_ENTRY(obj);
e_layout_coord_canvas_to_virtual(sd->layout, cx, cy, vx, vy);
}
EAPI void
e_deskmirror_coord_virtual_to_canvas(Evas_Object *obj, Evas_Coord vx, Evas_Coord vy, Evas_Coord *cx, Evas_Coord *cy)
{
API_ENTRY(obj);
e_layout_coord_virtual_to_canvas(sd->layout, vx, vy, cx, cy);
}
EAPI E_Desk *
e_deskmirror_desk_get(Evas_Object *obj)
{
API_ENTRY(obj) NULL;
return sd->desk;
}
EAPI void
e_deskmirror_util_wins_print(Evas_Object *obj)
{
@ -613,15 +767,14 @@ e_deskmirror_util_wins_print(Evas_Object *obj)
sd = evas_object_smart_data_get(obj);
EINA_INLIST_FOREACH(sd->mirrors, m)
{
if (m->cw->bd)
fprintf(stderr, "MIRROR BD: %p - %u '%s:%s'\n", m->cw, m->cw->win, m->cw->bd->client.icccm.name, m->cw->bd->client.icccm.class);
else if (m->cw->pop)
fprintf(stderr, "MIRROR POP: %p - %s\n", m->cw, m->cw->pop->name);
else if (m->cw->menu)
fprintf(stderr, "MIRROR MENU: %p - %s\n", m->cw, m->cw->menu->header.title);
else if (m->cw->real_obj)
fprintf(stderr, "MIRROR OBJ: %p - %s\n", m->cw, evas_object_name_get(m->cw->obj));
if (m->ec)
{
if (m->ec->override)
fprintf(stderr, "MIRROR OVERRIDE: %p - %p%s\n", m->comp_object, m->ec, m->ec->input_only ? " INPUT" : "");
else
fprintf(stderr, "MIRROR WIN: %p - %u%s\n", m->cw, m->cw->win, m->cw->input_only ? " INPUT" : "");
fprintf(stderr, "MIRROR EC: %p - %p '%s:%s'\n", m->comp_object, m->ec, m->ec->icccm.name, m->ec->icccm.class);
}
else
fprintf(stderr, "MIRROR OBJ: %p\n", m->comp_object);
}
}

Some files were not shown because too many files have changed in this diff Show More