Compare commits
148 Commits
Author | SHA1 | Date |
---|---|---|
kikadf | 6f403f4930 | |
maxerba | 456713da90 | |
kikadf | d712789c9a | |
Marcel Hollerbach | 928cf22f3e | |
Marcel Hollerbach | f1d43c42a3 | |
Marcel Hollerbach | 5cc6f31035 | |
Marcel Hollerbach | 9778dc9738 | |
Carsten Haitzler | 319b307c59 | |
Carsten Haitzler | cc7faeccf7 | |
Carsten Haitzler | fe0945600a | |
Carsten Haitzler | 47e9eae4ed | |
Carsten Haitzler | 2e30f391fb | |
Carsten Haitzler | 05e150ad43 | |
Christopher Michael | a5d004a49b | |
Carsten Haitzler | 2294ea9f8a | |
Carsten Haitzler | 3c46a6796a | |
Carsten Haitzler | 88d7e3b836 | |
Carsten Haitzler | c93c976069 | |
Carsten Haitzler | aaf317b61d | |
Carsten Haitzler | 225cbac56f | |
Carsten Haitzler | bea94314bd | |
Carsten Haitzler | db3ea64dd3 | |
Carsten Haitzler | c2869268d8 | |
Carsten Haitzler | 5980468f7f | |
Carsten Haitzler | daabedaac1 | |
Carsten Haitzler | 130535af97 | |
Carsten Haitzler | a39341d4a6 | |
Carsten Haitzler | 3d4789531d | |
Carsten Haitzler | 70a5f83cf7 | |
Carsten Haitzler | 2bc9efc261 | |
Carsten Haitzler | 2b095b67d1 | |
Carsten Haitzler | 91e797eab7 | |
Carsten Haitzler | b312bb3aa6 | |
Carsten Haitzler | cdad184547 | |
Carsten Haitzler | bfd175e985 | |
Carsten Haitzler | b23eedae98 | |
maxerba | 1933f745f2 | |
Carsten Haitzler | 7dcf43051f | |
Carsten Haitzler | dbcc56014c | |
Simon Tischer | c823c9e97c | |
Simon Tischer | f0470e0cfd | |
Carsten Haitzler | 9b0379693d | |
Christopher Michael | bc15cd91e8 | |
Carsten Haitzler | 495506924c | |
Carsten Haitzler | a3ae31ce3f | |
Carsten Haitzler | d30f3fcfc3 | |
Carsten Haitzler | 9720f05cc5 | |
Carsten Haitzler | c1d913ff91 | |
Carsten Haitzler | e14073ac20 | |
Carsten Haitzler | f8a89ce6c8 | |
Carsten Haitzler | d0a1539ee1 | |
Carsten Haitzler | 14313ac0ce | |
Carsten Haitzler | 4b13181f3f | |
Carsten Haitzler | 82bea2f0a3 | |
Carsten Haitzler | 601a23954a | |
Carsten Haitzler | 843efc94fd | |
Carsten Haitzler | 01c64f95f0 | |
Carsten Haitzler | 1cd1bded2c | |
Carsten Haitzler | 4d08f166b9 | |
Carsten Haitzler | 53e7c9999f | |
Carsten Haitzler | 632ed6f6cf | |
Carsten Haitzler | 3846dc81f0 | |
Carsten Haitzler | d4bada44bc | |
l05o | dceb969857 | |
Carsten Haitzler | d641d418c7 | |
Carsten Haitzler | f374da2ef0 | |
Carsten Haitzler | 60d94f771c | |
Carsten Haitzler | fc13afced0 | |
Carsten Haitzler | 5e793df529 | |
Carsten Haitzler | c6612a7d8a | |
maxerba | 915875051f | |
Carsten Haitzler | 0d0c49e616 | |
Carsten Haitzler | 422c0b6765 | |
Carsten Haitzler | cfefb25647 | |
Carsten Haitzler | 0ac04f0545 | |
Carsten Haitzler | 4c6dd08e25 | |
Carsten Haitzler | 877fde5eaa | |
Carsten Haitzler | d869db87ce | |
Carsten Haitzler | 7c6adbd6fe | |
Carsten Haitzler | 51e09f2a77 | |
Carsten Haitzler | 027a810e84 | |
Carsten Haitzler | a1600a137f | |
Carsten Haitzler | 5cf747d45d | |
Carsten Haitzler | 5ad1680a7d | |
Spam Me | e0ccb08d0a | |
Carsten Haitzler | c8b1077de6 | |
Alastair Poole | b413ee5d03 | |
Carsten Haitzler | e4768d53f0 | |
Carsten Haitzler | 582cbf8af8 | |
maxerba | f9b5d44681 | |
Carsten Haitzler | d24370afb6 | |
Carsten Haitzler | 7e6736e743 | |
Carsten Haitzler | 1fe64f8b01 | |
Carsten Haitzler | ff90c852a7 | |
Carsten Haitzler | 19724dc3e8 | |
Carsten Haitzler | bb8874930b | |
Carsten Haitzler | 1051c77d31 | |
Carsten Haitzler | f81387470f | |
Carsten Haitzler | 5d430a3fa6 | |
Carsten Haitzler | 6f59af7e9f | |
Alastair Poole | 0fc17828f6 | |
Carsten Haitzler | 9e23feb482 | |
Carsten Haitzler | 6bdd1abbe2 | |
Simon Lees | 3331e87184 | |
Carsten Haitzler | 6dac5c5cd0 | |
maxerba | d61b06aa77 | |
Carsten Haitzler | fd7b1e4b37 | |
Carsten Haitzler | bffe5a426c | |
maxerba | 8368850157 | |
Carsten Haitzler | 12cbf43ae2 | |
Carsten Haitzler | e8c5e18fdf | |
Carsten Haitzler | 2eb76774ef | |
Carsten Haitzler | 6ed1e61996 | |
Carsten Haitzler | b4a05429d0 | |
Carsten Haitzler | 93fa4e6393 | |
Carsten Haitzler | 6fe4d9c9b7 | |
Marcel Hollerbach | 349acb214d | |
Carsten Haitzler | 18a86f2f64 | |
Carsten Haitzler | aa93a66b5f | |
maxerba | 244e479bc3 | |
Carsten Haitzler | cef95a0189 | |
Carsten Haitzler | ea97371770 | |
Carsten Haitzler | 921f5208e7 | |
Christopher Michael | 6d2b5e9144 | |
Carsten Haitzler | b84fc34d08 | |
Carsten Haitzler | dcc02e3bd2 | |
Carsten Haitzler | 264b59c42f | |
Carsten Haitzler | 29e1a12da3 | |
Carsten Haitzler | 58462390be | |
Carsten Haitzler | f615a2120d | |
Carsten Haitzler | 6ad07d07c2 | |
Carsten Haitzler | b6da0ac873 | |
Marcel Hollerbach | f7708c6e74 | |
Carsten Haitzler | 47767cf645 | |
Marcel Hollerbach | 841c8f477f | |
Carsten Haitzler | aff854b2ea | |
maxerba | a471788444 | |
Carsten Haitzler | 61584a5f57 | |
Marcel Hollerbach | 1f69e41daa | |
Marcel Hollerbach | 2d86d75139 | |
Carsten Haitzler | e2e1b1956d | |
Carsten Haitzler | 0f17a85674 | |
Carsten Haitzler | 32e65c1f21 | |
Carsten Haitzler | 0603300828 | |
Carsten Haitzler | ba156d2f46 | |
Carsten Haitzler | 0404e68632 | |
Carsten Haitzler | 45bd61df30 | |
maxerba | 73cf441836 |
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"project_id" : "enlightenment-git",
|
||||
"projects" : "enlightenment-git",
|
||||
"conduit_uri" : "https://phab.enlightenment.org/",
|
||||
"phabricator.uri" : "https://phab.enlightenment.org/"
|
||||
}
|
59
INSTALL
|
@ -1,59 +0,0 @@
|
|||
** COMPILING and INSTALLING **
|
||||
------------------------------
|
||||
|
||||
Meson is the build system used for this project. For more information please
|
||||
see:
|
||||
|
||||
http://mesonbuild.com
|
||||
|
||||
----
|
||||
|
||||
Normal compilation in /usr/local:
|
||||
|
||||
meson . build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
For meson build generic options:
|
||||
|
||||
meson --help
|
||||
|
||||
For a list of project specific options supported:
|
||||
|
||||
cat meson_options.txt
|
||||
|
||||
To set 1 or more project specific options:
|
||||
|
||||
meson --prefix=/path/to -Doption=value [-Dother=value2] [...] . build
|
||||
|
||||
To display current configuration:
|
||||
|
||||
meson configure build
|
||||
|
||||
The above will only work after at least the following is done:
|
||||
|
||||
meson . build
|
||||
|
||||
** QUICK AND DIRTY HELP **
|
||||
--------------------------
|
||||
|
||||
How to clean out the build and config and start fresh:
|
||||
|
||||
rm -rf build
|
||||
|
||||
How to make a dist tarball and check its build:
|
||||
(must do it from git tree clone and commit all changes to git first)
|
||||
|
||||
ninja -C build dist
|
||||
|
||||
How to change prefix:
|
||||
|
||||
meson --prefix=/path/to/prefix . build
|
||||
|
||||
How to install in a specific destination directory for packaging:
|
||||
|
||||
DESTDIR=/path/to/destdir ninja -C build install
|
||||
|
||||
How to build with verbose output (full commands run):
|
||||
|
||||
ninja -C build -v
|
47
README
|
@ -1,47 +0,0 @@
|
|||
Enlightenment
|
||||
-------------
|
||||
|
||||
Please report bugs and submit patches at https://phab.enlightenment.org
|
||||
|
||||
REQUIREMENTS
|
||||
------------
|
||||
|
||||
Must:
|
||||
* efl
|
||||
* libpam (On Linux)
|
||||
|
||||
Highly suggested:
|
||||
* libexif (exif metadata display support)
|
||||
* evas_generic_loaders (All loaders)
|
||||
* bluez5 (BT support and l2ping tool)
|
||||
* connman
|
||||
* bc (For everything calculator)
|
||||
* pulseaudio
|
||||
* acpid (Unless your system doesn't have ACPI at all)
|
||||
* packagekit (For packagekit module updates status)
|
||||
* udisks2
|
||||
* gdb (If you want automatic bactraces in ~/.e-crashdump.txt)
|
||||
|
||||
COMPILING AND INSTALLING
|
||||
------------------------
|
||||
|
||||
For sample configuration options please look in the ./confs/ directory
|
||||
for scripts that pass in commonly used options.
|
||||
|
||||
Please see the INSTALL file: https://git.enlightenment.org/core/enlightenment.git/tree/INSTALL
|
||||
|
||||
NOTE: Users of DR16 will need to rename the $prefix/bin/enlightenment
|
||||
file prior to installing this release or it will be overwritten.
|
||||
|
||||
NOTE: If you do not want security issues make sure sysactions.conf is in
|
||||
/etc/enlightenment (not PREFIX/etc/enlightenment) as this is the first place
|
||||
it looks at. This file is intended to be customized by packagers and
|
||||
system integrators to match your policies and scripts/tools.
|
||||
|
||||
NOTE: To enable wayland support (still considered experimental and not for
|
||||
regular end users) use the meson -Dwl=true option. To run enlightenment in
|
||||
wayland mode, just log on on ant vt and run enlightenment_start. If you
|
||||
wish to debug and see all the output try using something like screen then
|
||||
attaching to the remote screen session by sshing in etc.
|
||||
|
||||
|
|
@ -0,0 +1,225 @@
|
|||
![Enlightenment](/data/readme/enlightenment.png)
|
||||
# Enlightenment
|
||||
|
||||
![Screenshot](/data/readme/screenshot.png)
|
||||
|
||||
-----
|
||||
|
||||
*Please report bugs/issues at*
|
||||
[git.enlightenment.org](https://git.enlightenment.org/enlightenment/enlightenment/issues)
|
||||
|
||||
-----
|
||||
|
||||
Enlightenment is a Window Manager, Compositor and basic "Desktop
|
||||
Shell". It replaces your GUI environment that runs your day to day
|
||||
graphical Desktop. It includes a built-in File Manager, Application
|
||||
Launcher, Shelves, Settings Dialogs, Menus, Audio Mixer Controls, Network
|
||||
Control front-end (for Connman), Battery Monitoring, CPU Frequency
|
||||
Controls, Screen Blanking and Backlight controls, Screenshotting and
|
||||
editing, Clock and Calendar, Temperature Guages, Mpris2 Music Controls,
|
||||
Packagekit Update Front-end, Bluetooth controls for BlueZ 5, Screen
|
||||
resolution and layout controls and much much more.
|
||||
|
||||
Enlightenment is one of the lowest resource environments around
|
||||
relative to its featureset.
|
||||
|
||||
Enlightenment is primarly developed for X11, but does have an
|
||||
experimental Wayland mode that will have issues, so only try it if
|
||||
you are adventurous or willing to work on it.
|
||||
|
||||
For more information please see
|
||||
[Enlightenment's About Page](https://www.enlightenment.org/about-enlightenment).
|
||||
|
||||
![Screenshot 2](/data/readme/screenshot2.png)
|
||||
![Screenshot 3](/data/readme/screenshot3.png)
|
||||
![Screenshot 4](/data/readme/screenshot4.png)
|
||||
![Screenshot 5](/data/readme/screenshot5.png)
|
||||
![Screenshot 6](/data/readme/screenshot6.png)
|
||||
|
||||
-----
|
||||
|
||||
Things that need doing:
|
||||
|
||||
[TODO](TODO.md)
|
||||
|
||||
-----
|
||||
|
||||
## Requirements
|
||||
|
||||
Must:
|
||||
|
||||
* [efl](https://git.enlightenment.org/enlightenment/efl)
|
||||
* libpam (Required on Linux, not BSD)
|
||||
|
||||
Highly suggested:
|
||||
|
||||
* libexif (exif metadata display support)
|
||||
* bluez5 (BT support and l2ping tool)
|
||||
* connman
|
||||
* bc (For everything calculator)
|
||||
* pulseaudio
|
||||
* acpid (Unless your system doesn't have ACPI at all)
|
||||
* packagekit (For packagekit module updates status)
|
||||
* udisks2
|
||||
* gdb (If you want automatic bactraces in ~/.e-crashdump.txt)
|
||||
|
||||
-----
|
||||
|
||||
## Compiling and Installing
|
||||
|
||||
Meson is the build system used for this project. For more information
|
||||
please see [mesonbuild.com](https://mesonbuild.com)
|
||||
|
||||
You will need normal build tooling installed such as a compiler (gcc
|
||||
or clang for example), pkg-config, ninja, any relevant package-dev or
|
||||
package-devel packages if your distribution splits out development
|
||||
headers (e.g. libc6-dev) etc.
|
||||
|
||||
Depending on where dependencies (like efl) are installed, you might have to
|
||||
set your `PKG_CONFIG_PATH` environment variable like:
|
||||
```sh
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig
|
||||
```
|
||||
|
||||
Also note that some distributions like to add extra arch directories
|
||||
to your library locations so you might have to have more like:
|
||||
```sh
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig
|
||||
```
|
||||
|
||||
You will need to ensure that the destination library directory (e.g.
|
||||
`/usr/local/lib` is in your /etc/ld.so.conf or /etc/ld.so.conf.d/
|
||||
files and after installing anything that installs libraries you
|
||||
re-run `ldconfig`. Please see relevant documentation on ldconfig and
|
||||
ld.so.conf for your distribution.
|
||||
|
||||
You might also want to add the destination bin dir to your environment
|
||||
variable PATH (see documentation on your shell PATH variable) such as:
|
||||
```sh
|
||||
export PATH=/usr/local/bin:/usr/bin:/bin
|
||||
```
|
||||
|
||||
Normal compilation in /usr/local:
|
||||
```sh
|
||||
meson . build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
```
|
||||
|
||||
For meson build generic options:
|
||||
```sh
|
||||
meson --help
|
||||
```
|
||||
|
||||
For a list of project specific options supported:
|
||||
```sh
|
||||
cat meson_options.txt
|
||||
```
|
||||
|
||||
To set 1 or more project specific options:
|
||||
```sh
|
||||
meson --prefix=/path/to -Doption=value [-Dother=value2] [...] . build
|
||||
```
|
||||
|
||||
To display current configuration:
|
||||
```sh
|
||||
meson configure build
|
||||
```
|
||||
|
||||
The above will only work after at least the following is done:
|
||||
```sh
|
||||
meson . build
|
||||
```
|
||||
|
||||
### Quick build help
|
||||
|
||||
How to clean out the build and config and start fresh:
|
||||
```sh
|
||||
rm -rf build
|
||||
```
|
||||
|
||||
How to make a dist tarball and check its build:
|
||||
(must do it from git tree clone and commit all changes to git first)
|
||||
```sh
|
||||
ninja -C build dist
|
||||
```
|
||||
|
||||
How to change prefix:
|
||||
```sh
|
||||
meson --prefix=/path/to/prefix . build
|
||||
```
|
||||
|
||||
How to install in a specific destination directory for packaging:
|
||||
```sh
|
||||
DESTDIR=/path/to/destdir ninja -C build install
|
||||
```
|
||||
|
||||
How to build with verbose output (full commands run):
|
||||
```sh
|
||||
ninja -C build -v
|
||||
```
|
||||
-----
|
||||
|
||||
**NOTE:** Once Enlightenment is started by `enlightenment_start`, all
|
||||
output logs are put in `~/.e-log.log`. The previous log for the
|
||||
previous execution of Enlightenment will be moved to `~/.e-log.log.old`.
|
||||
|
||||
-----
|
||||
|
||||
**NOTE:** If you install enlightenment to the default compile prefix
|
||||
(`/usr/local`) then you might want to ensure the session file is
|
||||
accessible to your login manager (assuming you use one) by doing
|
||||
something like:
|
||||
|
||||
```sh
|
||||
sudo ln -s /usr/local/share/xsessions/enlightenment.desktop /usr/share/xsessions/enlightenment.desktop
|
||||
```
|
||||
|
||||
You can also just set up a custom launcher script. Edit the
|
||||
`~/.xinitrc` file in your home directory and have it have this content:
|
||||
|
||||
```sh
|
||||
#!/bin/sh
|
||||
exec /usr/local/bin/enlightenment_start >& ~/.xsession-errors
|
||||
```
|
||||
|
||||
(`exec` tells the shell to replace itself with the following command
|
||||
and `>& ~/.xsession-errors` ensures all output is logged to the
|
||||
`~/.xsession-errors` file).
|
||||
|
||||
You may also want your `~/.xsession` file to be the same, so make a link:
|
||||
|
||||
```sh
|
||||
ln -s .xinitrc .xsession
|
||||
```
|
||||
|
||||
This assumes `/usr/local` as well and just modify based on your
|
||||
install prefix location.
|
||||
|
||||
If you do not use a login manager you can just log into a text console
|
||||
and run `startx` after the above `.xinitrc` file is set up.
|
||||
|
||||
-----
|
||||
|
||||
**NOTE:** If you do not want security issues make sure `sysactions.conf` is in
|
||||
`/etc/enlightenment` (not `PREFIX/etc/enlightenment`) as this is the first
|
||||
place it looks at. This file is intended to be customized by packagers and
|
||||
system integrators to match your policies and scripts/tools. This also
|
||||
applies to `system.conf` in the same directory.
|
||||
|
||||
-----
|
||||
|
||||
**NOTE:** To enable Wayland support (still considered experimental and not for
|
||||
regular end users) use the meson `-Dwl=true option`. To run Enlightenment in
|
||||
Wayland mode, just login on any text VT and run `enlightenment_start`. If you
|
||||
wish to debug and see all the output try using something like screen then
|
||||
attaching to the remote screen session by sshing in etc.
|
||||
|
||||
-----
|
||||
|
||||
**NOTE:** Nvidia support - do *not* enable Wayland support if you have
|
||||
Nvidia cards and use Nvidia drivers. You will need to use **full**
|
||||
OpenGL+GLX with EFL instead of the default OpenGL-ES/EGL for those to not
|
||||
have problems and this conflicts with any **DRM** and **Wayland** support.
|
||||
You will
|
||||
|
|
@ -1,4 +1,3 @@
|
|||
TODO:
|
||||
* need a better "extra" that allows shot-module like sharing of:
|
||||
* themes
|
||||
* wallpapers
|
||||
|
@ -51,9 +50,9 @@ TODO:
|
|||
* bt tethering
|
||||
* usb tehtering
|
||||
* wifi tethering
|
||||
* S fix vkbd to work in wl - e_kbd_send.c - look at ecore_wl2_input.c
|
||||
* S clean up some old actions that are handled better by newer ones
|
||||
* S like suspend intelligently is better than regular suspend but
|
||||
* fix vkbd to work in wl - e_kbd_send.c - look at ecore_wl2_input.c
|
||||
* clean up some old actions that are handled better by newer ones
|
||||
* like suspend intelligently is better than regular suspend but
|
||||
suspend now is very explicit and worth keeping
|
||||
* clock - add event/alarm/appointment tracking and notifications etc.
|
||||
* this perhaps can be merged with the cron front-end
|
||||
|
@ -77,12 +76,10 @@ TODO:
|
|||
* face auth (howdy / pam-face / pam-face-authentication / pam-facial-auth)
|
||||
* yubikey
|
||||
* usb drive (pam_usb)
|
||||
* support setting up fingerprint as auth (fprint-enroll)
|
||||
* support setting up smartcard as auth
|
||||
* support setting up face auth (howdy / pam-face / pam-face-authentication / pam-facial-auth)
|
||||
* support setting up yubikey as auth
|
||||
* support setting up usb drive for auth (pam_usb)
|
||||
* support fprint auth for polkit agent (ugh)
|
||||
* wifi/bt net: associate app/desktop(s) or actions to run when:
|
||||
* bt device comes or goes (alongside lock device feature)
|
||||
* wifi appears or disappears
|
||||
|
@ -246,8 +243,10 @@ TODO:
|
|||
* display other devices in above list separately
|
||||
* handle string capacity values like Full, High, Normal, Low, Critical...
|
||||
* randr: get auto layout to handle screens laid out like:
|
||||
```
|
||||
[dp2-2][dp2-1] <- 2 external monitors
|
||||
[edp-1] <- laptop main display
|
||||
```
|
||||
* randr: when losing a zone/screen, put windows in purgatory and then have
|
||||
purgatory screens available via pager to drag onto a current screen,
|
||||
or the specific virtual desktops from purgator to be accessible even
|
||||
|
@ -293,15 +292,15 @@ TODO:
|
|||
* look into libratbag too for gaming mouse stuff if its worth using it or
|
||||
just doing the same
|
||||
stuff ourselves as we will probably have to via libinput
|
||||
* S some kind of game mode and detection that will do things like:
|
||||
* S disable screen dimming/blanking
|
||||
* S set cpu to max performance
|
||||
* S lower priority/nice of non-game processes or even sigstop procs
|
||||
* S disable notifications
|
||||
* S explicit toggle and possible auto-detect of games running
|
||||
* some kind of game mode and detection that will do things like:
|
||||
* disable screen dimming/blanking
|
||||
* set cpu to max performance
|
||||
* lower priority/nice of non-game processes or even sigstop procs
|
||||
* disable notifications
|
||||
* explicit toggle and possible auto-detect of games running
|
||||
* per app environment launch config - allow different TZ, LOCALE etc.
|
||||
per app and set up env appropriately
|
||||
* apps - ability to flag apps as "single run" so launchgin again from
|
||||
* apps - ability to flag apps as "single run" so launching again from
|
||||
menu/ibar will just focus the current window/jump to it etc.
|
||||
* back-end e system process for monitoring/polling and launching etc.
|
||||
* split e up into front vs back-end with back-end doing things like
|
||||
|
@ -323,7 +322,6 @@ TODO:
|
|||
* need to allow a CONT every now and again to unblock buffers
|
||||
* set backlight and dim timeout per powersave level
|
||||
* battery - set powersave levels based on ac or battery level
|
||||
* efl: flat theme redo
|
||||
* efl/eo: start using efl loop as core loop
|
||||
* begin to move some login out into efl threads+loops
|
||||
* to change ui - callsync/async back to ui/main loop
|
||||
|
@ -334,12 +332,6 @@ TODO:
|
|||
* have edje object stash
|
||||
* mixer: improve ui in emixer
|
||||
* emixer - support selecting recording dev for apps like pavucontrol
|
||||
* look at showing vu bars per recoridng or maybe output devices
|
||||
* offer ability to show vu output in mixer gadget
|
||||
* weather
|
||||
* forecasts will due feb 2021. yahoo shutting down free api.
|
||||
given all the changes needed to do a new api...
|
||||
may as well write a whole new weather gadget.
|
||||
* free api:
|
||||
* https://api.met.no/weatherapi/locationforecast/2.0/documentation
|
||||
* a dependency of this (so we can provide lat/lon)
|
||||
* bring in forecasts into core e
|
|
@ -1,5 +1,5 @@
|
|||
group "E_Config" struct {
|
||||
value "config_version" int: 1000033;
|
||||
value "config_version" int: 1000035;
|
||||
value "config_type" uint: 0; // this profile seems to just be super minimalist
|
||||
value "desktop_default_name" string: "%i-%i";
|
||||
value "desktop_default_window_profile" string: "";
|
||||
|
@ -164,6 +164,7 @@ group "E_Config" struct {
|
|||
value "theme_default_border_style" string: "default";
|
||||
value "desk_auto_switch" int: 0;
|
||||
value "thumb_nice" int: 0;
|
||||
value "gesture_open_input_devices" int: 0;
|
||||
value "screen_limits" int: 0;
|
||||
value "menu_favorites_show" int: 1;
|
||||
value "menu_apps_show" int: 1;
|
||||
|
@ -207,6 +208,7 @@ group "E_Config" struct {
|
|||
value "backlight.timer" double: 30.0;
|
||||
value "backlight.battery_timer" double: 20.0;
|
||||
value "backlight.idle_dim" uchar: 1;
|
||||
value "backlight.ddc" uchar: 0;
|
||||
value "device_desktop" int: 0;
|
||||
value "device_auto_mount" int: 0;
|
||||
value "device_auto_open" int: 0;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
group "E_Config" struct {
|
||||
value "config_version" int: 1000033;
|
||||
value "config_version" int: 1000035;
|
||||
value "config_type" uint: 3;
|
||||
value "desktop_default_name" string: "%i-%i";
|
||||
value "desktop_default_window_profile" string: "standard";
|
||||
|
@ -164,6 +164,7 @@ group "E_Config" struct {
|
|||
value "theme_default_border_style" string: "default";
|
||||
value "desk_auto_switch" int: 0;
|
||||
value "thumb_nice" int: 0;
|
||||
value "gesture_open_input_devices" int: 0;
|
||||
value "screen_limits" int: 0;
|
||||
value "menu_favorites_show" int: 1;
|
||||
value "menu_apps_show" int: 1;
|
||||
|
@ -200,6 +201,7 @@ group "E_Config" struct {
|
|||
value "backlight.timer" double: 30.0;
|
||||
value "backlight.battery_timer" double: 20.0;
|
||||
value "backlight.idle_dim" uchar: 1;
|
||||
value "backlight.ddc" uchar: 1;
|
||||
value "deskenv.load_xrdb" uchar: 1;
|
||||
value "deskenv.load_xmodmap" uchar: 1;
|
||||
value "deskenv.load_gnome" uchar: 0;
|
||||
|
|
|
@ -15,18 +15,6 @@ group "E_Config_Bindings" struct {
|
|||
value "action" string: "backlight_adjust";
|
||||
value "params" string: "10";
|
||||
}
|
||||
group "E_Config_Binding_Acpi" struct {
|
||||
value "context" int: 0;
|
||||
value "type" int: 22;
|
||||
value "status" int: 0;
|
||||
value "action" string: "dim_screen";
|
||||
}
|
||||
group "E_Config_Binding_Acpi" struct {
|
||||
value "context" int: 0;
|
||||
value "type" int: 22;
|
||||
value "status" int: 1;
|
||||
value "action" string: "undim_screen";
|
||||
}
|
||||
group "E_Config_Binding_Acpi" struct {
|
||||
value "context" int: 0;
|
||||
value "type" int: 3;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
group "E_Config" struct {
|
||||
value "config_version" int: 1000033;
|
||||
value "config_version" int: 1000035;
|
||||
value "config_type" uint: 3;
|
||||
value "desktop_default_name" string: "%i-%i";
|
||||
value "desktop_default_window_profile" string: "standard";
|
||||
|
@ -164,6 +164,7 @@ group "E_Config" struct {
|
|||
value "theme_default_border_style" string: "default";
|
||||
value "desk_auto_switch" int: 0;
|
||||
value "thumb_nice" int: 0;
|
||||
value "gesture_open_input_devices" int: 0;
|
||||
value "screen_limits" int: 0;
|
||||
value "menu_favorites_show" int: 1;
|
||||
value "menu_apps_show" int: 1;
|
||||
|
@ -200,6 +201,7 @@ group "E_Config" struct {
|
|||
value "backlight.timer" double: 30.0;
|
||||
value "backlight.battery_timer" double: 20.0;
|
||||
value "backlight.idle_dim" uchar: 1;
|
||||
value "backlight.ddc" uchar: 1;
|
||||
value "deskenv.load_xrdb" uchar: 1;
|
||||
value "deskenv.load_xmodmap" uchar: 1;
|
||||
value "deskenv.load_gnome" uchar: 0;
|
||||
|
|
|
@ -15,18 +15,6 @@ group "E_Config_Bindings" struct {
|
|||
value "action" string: "backlight_adjust";
|
||||
value "params" string: "10";
|
||||
}
|
||||
group "E_Config_Binding_Acpi" struct {
|
||||
value "context" int: 0;
|
||||
value "type" int: 22;
|
||||
value "status" int: 0;
|
||||
value "action" string: "dim_screen";
|
||||
}
|
||||
group "E_Config_Binding_Acpi" struct {
|
||||
value "context" int: 0;
|
||||
value "type" int: 22;
|
||||
value "status" int: 1;
|
||||
value "action" string: "undim_screen";
|
||||
}
|
||||
group "E_Config_Binding_Acpi" struct {
|
||||
value "context" int: 0;
|
||||
value "type" int: 3;
|
||||
|
|
|
@ -1,19 +1,21 @@
|
|||
[Desktop Entry]
|
||||
Type=Link
|
||||
Name=Tiling (Standard Enlightenment)
|
||||
Name[ca]=Mosaic (Standard Enlightenment)
|
||||
Name[de]=Kacheln (Vorgabe Enlightenment)
|
||||
Name[fi]=Limittävä (Tavallinen Enlightenment)
|
||||
Name[fr]=Pavage (Enlightenment standard)
|
||||
Name[it]=Tiling (a piastrelle)
|
||||
Name[ms]=Penjubinan (Enlightenment Piawai)
|
||||
Name[ru]=Мозаичный режим (Стандартный Enlightenment)
|
||||
Name[tr]=Döşeme (Standard Enlightenment)
|
||||
Comment=Tiling window management configuration for devices with keyboards and mice<br>like your average PC Desktop, Laptop or Netbook<br>with Enlightenment's traditional keyboard bindings<br>and mouse controls.<br>Default tiling bindings are: Win-key + Space, arrows, and left mouse button.<br>See the module settings for more information.
|
||||
Comment[ca]=Mosaic per la configuració de la gestió de finestres per dispositius amb teclats i ratolins <br>com ara PC d'escriptori, portàtil o netbook<br>amb associacions de tecles típiques d'Enlightenment<br>Tecles d'accés ràpid per defecte són: Tecla Win + Espai, fletxes i botó esquerre del ratolí <br>Veure la configuració del mòdul per obtenir més informació.
|
||||
Comment[fr]=Gestion de la juxtaposition des fenêtres pour les machines avec clavier<br>et souris comme les PC de bureau et les portables,<br>offrant raccourcis et contrôles traditionnels.<br>Les raccourcis de pavage par défaut sont :<br>Win+Barre d'espace ou flèches, et bouton gauche de la souris.<br>Voir la configuration du module pour plus d'informations.
|
||||
Comment[it]=Configurazione con finestre in griglia per dispositivi con tastiere e mouse<br>come i normali PC Desktop, Laptop o Netbook<br>con le tradizionali scorciatoie di tastiera e controlli<br>del mouse di Enlightenment.<br>Le associazioni di tasti predefinite proprie di questa modalità sono:<br>Tasto-windows + spazio, frecce, e tasto sinistro del mouse.<br>Vedere le impostazioni del modulo Tiling per maggiori informazioni.
|
||||
Comment[ms]=Konfigurasi pengurusan tetingkap berjubin untuk peranti dengan papan kekunci dan tetikus<br>seperti Komputer Desktop, Komputer Riba atau Netbook anda<br>dengan pengikatan papan kekunci tradisional Enlightenment<br>dan kawalan tetikus.<br>Pengikatan penjubinan lalai adalah: Win-key + Space, anak panah, dan butang tetikus kiri.<br>Sila rujuk tetapan modul untuk maklumat lanjut.
|
||||
Comment[ru]=Конфигурация с мозаичным режимом управления окнами<br>пригодная для устройств с клавиатурой и мышью,<br>таких как обычный компьютер или ноутбук,<br>с традиционными для Enlightenment'а сочетаниями<br>клавиш и управлением мышью.<br>Комбинации клавиш для мозаичного режима по умолчанию:<br>Кнопка Win + пробел, стрелки и левая кнопка мыши.
|
||||
Comment[tr]=Enlightenment'in klavye ve fare kontrol bağlayıcıları ile kullanılan, ortalama <br>PC masaüstü, dizüstü ve netbook gibi klavye ve fare aygıtları bulunan cihazlar <br>için pencere döşeme yönetimi yapılandırması. Öntanımlı döşeme bağlayıcıları:<br>Win Tuşu + Boşluk, ok tuşları ve sol fare tuşu.<br>Daha fazla bilgi için modül ayarlarına bakınız.
|
||||
Icon=enlightenment-tiling
|
||||
[Desktop Entry]
|
||||
Type=Link
|
||||
Name=Tiling (Standard Enlightenment)
|
||||
Name[ca]=Mosaic (Standard Enlightenment)
|
||||
Name[de]=Kacheln (Vorgabe Enlightenment)
|
||||
Name[fi]=Limittävä (Tavallinen Enlightenment)
|
||||
Name[fr]=Pavage (Enlightenment standard)
|
||||
Name[it]=Griglia (Enlightenment standard)
|
||||
Name[ms]=Penjubinan (Enlightenment Piawai)
|
||||
Name[pt]=Mosaico (Enlightenment padrão)
|
||||
Name[ru]=Мозаичный режим (Стандартный Enlightenment)
|
||||
Name[tr]=Döşeme (Standard Enlightenment)
|
||||
Comment=Tiling window management configuration for devices with keyboards and mice<br>like your average PC Desktop, Laptop or Netbook<br>with Enlightenment's traditional keyboard bindings<br>and mouse controls.<br>Default tiling bindings are: Win-key + Space, arrows, and left mouse button.<br>See the module settings for more information.
|
||||
Comment[ca]=Mosaic per la configuració de la gestió de finestres per dispositius amb teclats i ratolins <br>com ara PC d'escriptori, portàtil o netbook<br>amb associacions de tecles típiques d'Enlightenment<br>Tecles d'accés ràpid per defecte són: Tecla Win + Espai, fletxes i botó esquerre del ratolí <br>Veure la configuració del mòdul per obtenir més informació.
|
||||
Comment[fr]=Gestion de la juxtaposition des fenêtres pour les machines avec clavier<br>et souris comme les PC de bureau et les portables,<br>offrant raccourcis et contrôles traditionnels.<br>Les raccourcis de pavage par défaut sont :<br>Win+Barre d'espace ou flèches, et bouton gauche de la souris.<br>Voir la configuration du module pour plus d'informations.
|
||||
Comment[it]=Configurazione con finestre in griglia per dispositivi con tastiere e mouse<br>come i normali PC Desktop, Laptop o Netbook<br>con le tradizionali scorciatoie di tastiera e controlli<br>del mouse di Enlightenment.<br>Le associazioni di tasti predefinite proprie di questa modalità sono:<br>Tasto-windows + spazio, frecce, e tasto sinistro del mouse.<br>Vedere le impostazioni del modulo Tiling per maggiori informazioni.
|
||||
Comment[pt]=Configuração de gestão de janelas em mosaico para dispositivos com teclados e ratos<br>como os computadores de secretária ou portáteis com as tradicionais<br>combinações de teclas e controlos de rato do Enlightenment.<br>As combinações padrão em mosaico são:<br>Tecla Win-key + Espaço, setas, e botão esquerdo do rato.<br>Veja as definições do módulo para mais informações.
|
||||
Comment[ms]=Konfigurasi pengurusan tetingkap berjubin untuk peranti dengan papan kekunci dan tetikus<br>seperti Komputer Desktop, Komputer Riba atau Netbook anda<br>dengan pengikatan papan kekunci tradisional Enlightenment<br>dan kawalan tetikus.<br>Pengikatan penjubinan lalai adalah: Win-key + Space, anak panah, dan butang tetikus kiri.<br>Sila rujuk tetapan modul untuk maklumat lanjut.
|
||||
Comment[ru]=Конфигурация с мозаичным режимом управления окнами<br>пригодная для устройств с клавиатурой и мышью,<br>таких как обычный компьютер или ноутбук,<br>с традиционными для Enlightenment'а сочетаниями<br>клавиш и управлением мышью.<br>Комбинации клавиш для мозаичного режима по умолчанию:<br>Кнопка Win + пробел, стрелки и левая кнопка мыши.
|
||||
Comment[tr]=Enlightenment'in klavye ve fare kontrol bağlayıcıları ile kullanılan, ortalama <br>PC masaüstü, dizüstü ve netbook gibi klavye ve fare aygıtları bulunan cihazlar <br>için pencere döşeme yönetimi yapılandırması. Öntanımlı döşeme bağlayıcıları:<br>Win Tuşu + Boşluk, ok tuşları ve sol fare tuşu.<br>Daha fazla bilgi için modül ayarlarına bakınız.
|
||||
Icon=enlightenment-tiling
|
||||
|
|
|
@ -2,7 +2,8 @@ install_data([ 'enlightenment.png',
|
|||
'test.png',
|
||||
'test.jpg',
|
||||
'test.edj',
|
||||
'test.svg'
|
||||
'test.svg',
|
||||
'wayland.png'
|
||||
],
|
||||
install_dir: join_paths(dir_data, 'enlightenment/data/images')
|
||||
)
|
||||
|
|
After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 1.1 MiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 552 KiB |
After Width: | Height: | Size: 1.3 MiB |
After Width: | Height: | Size: 772 KiB |
After Width: | Height: | Size: 211 KiB |
|
@ -1,17 +1,2 @@
|
|||
desktop_config = configuration_data()
|
||||
desktop_config.set('prefix', dir_prefix)
|
||||
desktop_config.set('VERSION', e_version_rev)
|
||||
e_desktop = configure_file(input : 'enlightenment.desktop.in',
|
||||
output : 'enlightenment.desktop',
|
||||
configuration: desktop_config
|
||||
)
|
||||
|
||||
if config_h.has('HAVE_WAYLAND') == true
|
||||
install_data(e_desktop,
|
||||
install_dir : join_paths(dir_data, 'wayland-sessions'))
|
||||
endif
|
||||
|
||||
if config_h.has('HAVE_WAYLAND_ONLY') == false
|
||||
install_data(e_desktop,
|
||||
install_dir : join_paths(dir_data, 'xsessions'))
|
||||
endif
|
||||
subdir('x')
|
||||
subdir('wl')
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Enlightenment (Wayland)
|
||||
Name[ca]=Enlightenment (Wayland)
|
||||
Name[de]=Enlightenment (Wayland)
|
||||
Name[el]=Enlightenment (Wayland)
|
||||
Name[eo]=Enlightenment (Wayland)
|
||||
Name[fi]=Enlightenment (Wayland)
|
||||
Name[fr]=Enlightenment (Wayland)
|
||||
Name[gl]=Enlightenment (Wayland)
|
||||
Name[ja]=Enlightenment (Wayland)
|
||||
Name[ko]=Enlightenment (Wayland)
|
||||
Name[ms]=Enlightenment (Wayland)
|
||||
Name[pl]=Enlightenment (Wayland)
|
||||
Name[ru]=Enlightenment (Wayland)
|
||||
Name[sr]=Просвећење (Wayland)
|
||||
Name[tr]=Enlightenment (Wayland)
|
||||
Comment=Log in using Enlightenment (Version @VERSION@)
|
||||
Comment[ca]=Iniciar sessió amb Enlightenment (Versió @VERSION@)
|
||||
Comment[da]=Log ind med Enlightenment (Version @VERSION@)
|
||||
Comment[de]=Anmelden und Enlightenment verwenden (Version @VERSION@)
|
||||
Comment[el]=Είσοδος με το Enlightenment (Έκδοση @VERSION@)
|
||||
Comment[eo]=Ensaluti pere de Enlightenment (Versio @VERSION@)
|
||||
Comment[es]=Iniciar sesión usando Enlightenment (Versión @VERSION@)
|
||||
Comment[fi]=Kirjaudu käyttäen Enlightenmentiä (versio @VERSION@)
|
||||
Comment[fr]=Ouvrir une session Enlightenment (Version @VERSION@)
|
||||
Comment[gl]=Iniciar sesión usando Enlightenment (Versión @VERSION@)
|
||||
Comment[it]=Accedi con Enlightenment (Versione @VERSION@)
|
||||
Comment[ko]=Enlightenment 로그인(버전 @VERSION@)
|
||||
Comment[ms]=Daftar masuk menggunakan Enligtenment (Versi @VERSION@)
|
||||
Comment[pt]=Iniciar sessão no Enlightenment (Versão @VERSION@)
|
||||
Comment[ru]=Войти используя Enlightenment (Версия @VERSION@)
|
||||
Comment[sr]=Пријавите се за коришћење Просвећења (издања @VERSION@)
|
||||
Comment[tr]=Enlightenment kullanarak giriş yaın (Version @VERSION@)
|
||||
Icon=@prefix@/share/enlightenment/data/images/enlightenment.png
|
||||
TryExec=@prefix@/bin/enlightenment_start
|
||||
Exec=env E_WL_FORCE=drm E_COMP_ENGINE=gl @prefix@/bin/enlightenment_start
|
||||
DesktopNames=Enlightenment
|
|
@ -0,0 +1,12 @@
|
|||
desktop_config = configuration_data()
|
||||
desktop_config.set('prefix', dir_prefix)
|
||||
desktop_config.set('VERSION', e_version_rev)
|
||||
e_desktop = configure_file(
|
||||
input : 'enlightenment.desktop.in',
|
||||
output : 'enlightenment.desktop',
|
||||
configuration : desktop_config)
|
||||
|
||||
if config_h.has('HAVE_WAYLAND') == true
|
||||
install_data(e_desktop,
|
||||
install_dir : join_paths(dir_data, 'wayland-sessions'))
|
||||
endif
|
|
@ -1,5 +1,5 @@
|
|||
[Desktop Entry]
|
||||
Type=Application
|
||||
Type=XSession
|
||||
Name=Enlightenment
|
||||
Name[ca]=Enlightenment
|
||||
Name[de]=Enlightenment
|
|
@ -0,0 +1,12 @@
|
|||
desktop_config = configuration_data()
|
||||
desktop_config.set('prefix', dir_prefix)
|
||||
desktop_config.set('VERSION', e_version_rev)
|
||||
e_desktop = configure_file(
|
||||
input : 'enlightenment.desktop.in',
|
||||
output : 'enlightenment.desktop',
|
||||
configuration : desktop_config)
|
||||
|
||||
if config_h.has('HAVE_WAYLAND_ONLY') == false
|
||||
install_data(e_desktop,
|
||||
install_dir : join_paths(dir_data, 'xsessions'))
|
||||
endif
|
|
@ -1,6 +1,6 @@
|
|||
##### project
|
||||
project('enlightenment', 'c',
|
||||
version : '0.24.99',
|
||||
version : '0.25.99',
|
||||
license : 'BSD 2 clause',
|
||||
default_options: [ 'buildtype=release', 'c_std=gnu99', 'warning_level=2' ],
|
||||
meson_version : '>= 0.47.0')
|
||||
|
@ -30,7 +30,7 @@ else
|
|||
config_h.set('E_RELEASE_BUILD' , '1')
|
||||
endif
|
||||
|
||||
efl_version = '>= 1.25.99'
|
||||
efl_version = '>= 1.26.0'
|
||||
|
||||
add_global_arguments('-DHAVE_CONFIG_H=1', language: 'c')
|
||||
dir_prefix = get_option('prefix')
|
||||
|
@ -105,7 +105,7 @@ suid_ldflags = []
|
|||
dep_crypt = []
|
||||
if freebsd == true or host_machine.system().startswith('pcbsd')
|
||||
dep_crypt = cc.find_library('crypt', required: true)
|
||||
if cc.links('', args: '-fPIE', link_args: '-pie') == true
|
||||
if cc.links('', args: ['-fPIE', '-pie']) == true
|
||||
suid_cflags = '-fPIE'
|
||||
suid_ldflags = '-pie'
|
||||
endif
|
||||
|
@ -293,6 +293,7 @@ dep_ecore_con = dependency('ecore-con' , required: true)
|
|||
dep_ecore_input = dependency('ecore-input' , required: true)
|
||||
dep_ecore_input_evas = dependency('ecore-input-evas', required: true)
|
||||
dep_ecore_evas = dependency('ecore-evas' , required: true)
|
||||
dep_ecore_audio = dependency('ecore-audio' , required: true)
|
||||
dep_evas = dependency('evas' , required: true)
|
||||
dep_edje = dependency('edje' , required: true)
|
||||
dep_efreet = dependency('efreet' , required: true)
|
||||
|
|
68
po/de.po
|
@ -27,7 +27,7 @@ msgstr ""
|
|||
"Project-Id-Version: Enlightenment\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-04-19 16:15+0200\n"
|
||||
"PO-Revision-Date: 2020-04-18 14:50+0200\n"
|
||||
"PO-Revision-Date: 2022-05-06 11:31+0200\n"
|
||||
"Last-Translator: Simon Tischer <simon@t-tischer.de>\n"
|
||||
"Language-Team: E17-de\n"
|
||||
"Language: de\n"
|
||||
|
@ -35,7 +35,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Poedit 2.3\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
"X-Poedit-Basepath: ../src\n"
|
||||
"X-Poedit-KeywordsList: N_;_\n"
|
||||
"X-Poedit-SearchPath-0: .\n"
|
||||
|
@ -4738,11 +4738,11 @@ msgstr "Sprechblase"
|
|||
|
||||
#: src/modules/shot/e_mod_edit.c:1978
|
||||
msgid "Kaboom splat"
|
||||
msgstr "Kaboom! Patch!"
|
||||
msgstr "Kaboom! Patsch!"
|
||||
|
||||
#: src/modules/shot/e_mod_edit.c:1979
|
||||
msgid "Pow explode"
|
||||
msgstr "Zack! Explosion!"
|
||||
msgstr "Zack! Explosion"
|
||||
|
||||
#: src/modules/shot/e_mod_edit.c:1987
|
||||
msgid "Color"
|
||||
|
@ -5487,15 +5487,17 @@ msgid_plural ""
|
|||
">The default keys which must be held to activate these bindings<ps/>is '%s'. "
|
||||
"Configure the modifiers for this binding below."
|
||||
msgstr[0] ""
|
||||
"Enlightenment nutzt mausgesteuerte Aktionen für Fenster. <br> Diese Aktionen "
|
||||
"beinhalten:<br>* <b>Bewegen</b> (Linke Taste)<br>* <b>Größe ändern</b> "
|
||||
"(Mittlere Taste)<br>* <b>Menu öffnen</b> (Rechte Taste)<br> Die standard "
|
||||
"Taste um diese Aktionen bei klick zu aktivieren<br> ist %s."
|
||||
"Voreingestellte Enlightenment Maus-Aktionen <br> Die voreingestellten "
|
||||
"Aktionen beinhalten:<br>* <b>Bewegen</b> (Linke Taste)<br>* <b>Größe ändern</"
|
||||
"b> (Mittlere Taste)<br>* <b>Menu öffnen</b> (Rechte Taste)<br> Die Tastatur-"
|
||||
"Taste, die gedrückt werden muß, damit dies aktiv ist,<br> ist %s. Die "
|
||||
"Einstellungen dieser Tasten-Aktionen können unten eingestellt werden."
|
||||
msgstr[1] ""
|
||||
"Enlightenment nutzt mausgesteuerte Aktionen für Fenster. <br> Diese Aktionen "
|
||||
"beinhalten:<br>* <b>Bewegen</b> (Linke Taste)<br>* <b>Größe ändern</b> "
|
||||
"(Mittlere Taste)<br>* <b>Menu öffnen</b> (Rechte Taste)<br> Die standard "
|
||||
"Tasten um diese Aktionen bei klick zu aktivieren<br> sind %s.<br>"
|
||||
"Voreingestellte Enlightenment Maus-Aktionen <br> Die voreingestellten "
|
||||
"Aktionen beinhalten:<br>* <b>Bewegen</b> (Linke Taste)<br>* <b>Größe ändern</"
|
||||
"b> (Mittlere Taste)<br>* <b>Menu öffnen</b> (Rechte Taste)<br> Die Tastatur-"
|
||||
"Tasten, die gedrückt werden müssen, damit dies aktiv ist,<br> sind %s. Die "
|
||||
"Einstellungen dieser Tasten-Aktionen können unten eingestellt werden."
|
||||
|
||||
#: src/modules/wizard/page_150.c:28
|
||||
msgid "Compositing"
|
||||
|
@ -5862,7 +5864,7 @@ msgid ""
|
|||
"correctly installed and running"
|
||||
msgstr ""
|
||||
"Fehler bei der Initialisierung von D-Bus! Prüfen Sie, ob D-Bus korrekt "
|
||||
"installiert ist und auch läuft."
|
||||
"installiert ist und auch läuft"
|
||||
|
||||
#: src/modules/luncher/config.c:172
|
||||
msgid "Create new Luncher source"
|
||||
|
@ -6163,11 +6165,11 @@ msgstr "Keine Sortirung"
|
|||
|
||||
#: src/modules/everything/evry_config.c:506
|
||||
msgid "By usage"
|
||||
msgstr "nach Verwendung"
|
||||
msgstr "Nach Verwendung"
|
||||
|
||||
#: src/modules/everything/evry_config.c:509
|
||||
msgid "Most used"
|
||||
msgstr "nach meist verwendet"
|
||||
msgstr "Nach am Meisten verwendet"
|
||||
|
||||
#: src/modules/everything/evry_config.c:512
|
||||
msgid "Last used"
|
||||
|
@ -7113,7 +7115,7 @@ msgstr "Die Tastenbelegung die Sie eingegeben haben wird bereits verwendet!"
|
|||
#: src/modules/quickaccess/e_mod_quickaccess.c:833 src/bin/e_shelf.c:2384
|
||||
#: src/bin/e_bryce.c:813
|
||||
msgid "Autohide"
|
||||
msgstr "autom. ausblenden"
|
||||
msgstr "Autom. ausblenden"
|
||||
|
||||
#: src/modules/quickaccess/e_mod_quickaccess.c:839
|
||||
msgid "Hide Instead Of Raise"
|
||||
|
@ -9479,7 +9481,7 @@ msgstr "Gadget Leiste"
|
|||
|
||||
#: src/bin/e_bryce.c:807
|
||||
msgid "Autosize"
|
||||
msgstr "autom. Größe"
|
||||
msgstr "Autom. Größe"
|
||||
|
||||
#: src/bin/e_bryce.c:819
|
||||
msgid "Bar Settings"
|
||||
|
@ -9540,9 +9542,9 @@ msgid ""
|
|||
"<hilight>Backspace</hilight> or <hilight>Delete</hilight> to remove all "
|
||||
"gadgets from this screen"
|
||||
msgstr ""
|
||||
"Zum Beenden auf <hilight>Esc</hilight> drücken oder auf den Hintergrund "
|
||||
"klicken. <ps/><hilight>Rücktaste</hilight> oder <hilight>Entf.</hilight>, "
|
||||
"entfernt alle Gadgets von diesem Bildschirm."
|
||||
"Zum Beenden <hilight>Esc</hilight> drücken oder auf den Hintergrund klicken. "
|
||||
"<ps/><hilight>Rücklöschen</hilight> oder <hilight>Entf.</hilight> entfernt "
|
||||
"alle Gadgets von diesem Bildschirm"
|
||||
|
||||
#: src/bin/e_color_dialog.c:25
|
||||
msgid "Color Selector"
|
||||
|
@ -10030,7 +10032,7 @@ msgstr ""
|
|||
|
||||
#: src/bin/e_module.c:237
|
||||
msgid "Module does not contain all needed functions"
|
||||
msgstr "Das Modul enthält nicht alle benötigten Funktionen."
|
||||
msgstr "Das Modul enthält nicht alle benötigten Funktionen"
|
||||
|
||||
#: src/bin/e_module.c:252
|
||||
#, c-format
|
||||
|
@ -10701,7 +10703,7 @@ msgstr "Zu unterer Arbeitsfläche wechseln"
|
|||
|
||||
#: src/bin/e_actions.c:3414
|
||||
msgid "Flip Desktop By..."
|
||||
msgstr "Arbeitsfläche um ... wechseln"
|
||||
msgstr "Arbeitsfläche ...mal wechseln"
|
||||
|
||||
#: src/bin/e_actions.c:3420
|
||||
msgid "Flip To Previous Desktop"
|
||||
|
@ -10717,15 +10719,15 @@ msgstr "Modulablage anzeigen"
|
|||
|
||||
#: src/bin/e_actions.c:3436
|
||||
msgid "Flip Desktop To..."
|
||||
msgstr "Zu Arbeitsfläche ... wechseln"
|
||||
msgstr "Zu Arbeitsfläche ... wechseln."
|
||||
|
||||
#: src/bin/e_actions.c:3441
|
||||
msgid "Switch Desktop To... On Screen..."
|
||||
msgstr "Zu Arbeitsfläche ... auf Bildschirm ... wechseln"
|
||||
msgstr "Zu Arbeitsfläche ... auf Bildschirm ... wechseln."
|
||||
|
||||
#: src/bin/e_actions.c:3447
|
||||
msgid "Flip Desktop Linearly..."
|
||||
msgstr "Linear zu Arbeitsfläche wechseln um... "
|
||||
msgstr "Linear zu Arbeitsfläche wechseln um..."
|
||||
|
||||
#: src/bin/e_actions.c:3453
|
||||
msgid "Switch To Desktop 0"
|
||||
|
@ -10777,7 +10779,7 @@ msgstr "Zu Arbeitsfläche 11 wechseln"
|
|||
|
||||
#: src/bin/e_actions.c:3477
|
||||
msgid "Switch To Desktop..."
|
||||
msgstr "Zu Arbeitsfläche ... wechseln"
|
||||
msgstr "Zu Arbeitsfläche ... wechseln."
|
||||
|
||||
#: src/bin/e_actions.c:3483
|
||||
msgid "Flip Desktop Left (All Screens)"
|
||||
|
@ -10809,7 +10811,7 @@ msgstr "Arbeitsfläche linear nach ... klappen (alle Bildschirme)"
|
|||
|
||||
#: src/bin/e_actions.c:3509
|
||||
msgid "Flip Desktop In Direction..."
|
||||
msgstr "Arbeitsfläche in Richtung ... klappen"
|
||||
msgstr "Arbeitsfläche in Richtung ... wechseln."
|
||||
|
||||
#: src/bin/e_actions.c:3514
|
||||
msgid "Switch To Desktop 0 (All Screens)"
|
||||
|
@ -10881,7 +10883,7 @@ msgstr "Maus auf Bildschirm 1 verschieben"
|
|||
|
||||
#: src/bin/e_actions.c:3557
|
||||
msgid "Send Mouse To Screen..."
|
||||
msgstr "Maus auf Bildschirm ... verschieben"
|
||||
msgstr "Mauszeiger auf Bildschirm ... verschieben"
|
||||
|
||||
#: src/bin/e_actions.c:3563
|
||||
msgid "Send Mouse Forward 1 Screen"
|
||||
|
@ -10893,16 +10895,16 @@ msgstr "Maus einen Bildschirm zurückschieben"
|
|||
|
||||
#: src/bin/e_actions.c:3567
|
||||
msgid "Send Mouse Forward/Back Screens..."
|
||||
msgstr "Maus ... Bildschirme weiter/zurückschieben"
|
||||
msgstr "Maus ... Bildschirme weiter/zurückschieben."
|
||||
|
||||
#: src/bin/e_actions.c:3572
|
||||
msgid "Dim"
|
||||
msgstr "abdunkeln"
|
||||
msgstr "Abdunkeln"
|
||||
|
||||
# better ideas, anyone?
|
||||
#: src/bin/e_actions.c:3575
|
||||
msgid "Undim"
|
||||
msgstr "aufhellen"
|
||||
msgstr "Aufhellen"
|
||||
|
||||
#: src/bin/e_actions.c:3578
|
||||
msgid "Backlight Set"
|
||||
|
@ -11539,12 +11541,12 @@ msgstr "Klicken Sie auf ein Objekt, an dem eine Ausrichtung erfolgen soll."
|
|||
|
||||
#: src/bin/e_int_client_menu.c:1203
|
||||
msgid "On window..."
|
||||
msgstr "auf Fenster..."
|
||||
msgstr "Auf Fenster..."
|
||||
|
||||
#: src/bin/e_int_client_menu.c:1214 src/bin/e_int_client_menu.c:1225
|
||||
#: src/bin/e_int_client_menu.c:1236 src/bin/e_int_client_menu.c:1247
|
||||
msgid "Of window..."
|
||||
msgstr "von Fenster ..."
|
||||
msgstr "Von Fenster ..."
|
||||
|
||||
#: src/bin/e_int_client_menu.c:1274
|
||||
#, c-format
|
||||
|
|
|
@ -23,7 +23,7 @@ e_about_new(void)
|
|||
snprintf
|
||||
(buf, sizeof(buf), "%s%s",
|
||||
_(
|
||||
"<title>Copyright © 2000-2021, by the Enlightenment "
|
||||
"<title>Copyright © 2000-2022, by the Enlightenment "
|
||||
"Development Team</><ps/>"
|
||||
"<ps/>"
|
||||
"We hope you enjoy using this software as much as we enjoyed "
|
||||
|
|
|
@ -3285,15 +3285,18 @@ ACT_FN_GO(window_focus, EINA_UNUSED)
|
|||
}
|
||||
if (dir == -1) /* next */
|
||||
{
|
||||
if (ec_next) e_client_focus_set_with_pointer(ec_next);
|
||||
else if (ec_first) e_client_focus_set_with_pointer(ec_first);
|
||||
if (ec_next) goto do_focus;
|
||||
else if (ec_first) ec_next = ec_first;
|
||||
else return;
|
||||
}
|
||||
else if (dir == -2)
|
||||
{
|
||||
if (ec_prev) e_client_focus_set_with_pointer(ec_prev);
|
||||
else if (ec_last) e_client_focus_set_with_pointer(ec_last);
|
||||
if (ec_prev) ec_next = ec_prev;
|
||||
else if (ec_last) ec_next = ec_last;
|
||||
else return;
|
||||
}
|
||||
return;
|
||||
else return;
|
||||
goto do_focus;
|
||||
}
|
||||
|
||||
cx = ec_orig->x + (ec_orig->w / 2);
|
||||
|
@ -3368,8 +3371,18 @@ ACT_FN_GO(window_focus, EINA_UNUSED)
|
|||
ec_next = ec;
|
||||
distance = d;
|
||||
}
|
||||
do_focus:
|
||||
if (!ec_next) return;
|
||||
|
||||
if (ec_next) e_client_focus_set_with_pointer(ec_next);
|
||||
ec = ec_next;
|
||||
if (ec->iconic) e_client_uniconify(ec);
|
||||
if (ec->shaded) e_client_unshade(ec, ec->shade_dir);
|
||||
if (!ec->lock_user_stacking)
|
||||
{
|
||||
evas_object_raise(ec->frame);
|
||||
e_client_raise_latest_set(ec);
|
||||
}
|
||||
e_client_focus_set_with_pointer(ec);
|
||||
}
|
||||
|
||||
/* local subsystem globals */
|
||||
|
|
|
@ -254,7 +254,8 @@ _backlight_devices_device_set(Backlight_Device *bd, double val)
|
|||
// fprintf(stderr, "BL: ddc bklight %1.3f @ %1.3f\n", bd->val, ecore_time_get());
|
||||
if (bd->ddc_max) fval = bd->val * (double)bd->ddc_max;
|
||||
else fval = bd->val * 100.0;
|
||||
e_system_send("ddc-val-set", "%s %i %i", bd->dev + 4, 0x10, (int)(fval)); // backlight val in e_system_ddc.c
|
||||
if (e_config->backlight.ddc)
|
||||
e_system_send("ddc-val-set", "%s %i %i", bd->dev + 4, 0x10, (int)(fval)); // backlight val in e_system_ddc.c
|
||||
ecore_event_add(E_EVENT_BACKLIGHT_CHANGE, NULL, NULL, NULL);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -400,8 +400,8 @@ _e_client_mouse_action_end(E_Client *ec)
|
|||
E_FREE_FUNC(ec->cur_mouse_action, e_object_unref);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_client_revert_focus(E_Client *ec)
|
||||
E_API void
|
||||
e_client_revert_focus(E_Client *ec)
|
||||
{
|
||||
E_Client *pec;
|
||||
E_Desk *desk;
|
||||
|
@ -433,12 +433,17 @@ _e_client_revert_focus(E_Client *ec)
|
|||
}
|
||||
}
|
||||
}
|
||||
else if ((ec->parent) &&
|
||||
(ec->parent->desk == desk) && (ec->parent->modal == ec))
|
||||
else if ((ec->parent) && (ec->parent->desk == desk))
|
||||
{
|
||||
evas_object_focus_set(ec->parent->frame, 1);
|
||||
E_Client *goal_ec = NULL;
|
||||
if (ec->parent->modal != ec && ec->parent->modal) {
|
||||
goal_ec = ec->parent->modal;
|
||||
} else {
|
||||
goal_ec = ec->parent;
|
||||
}
|
||||
evas_object_focus_set(goal_ec->frame, 1);
|
||||
if (e_config->raise_on_revert_focus)
|
||||
evas_object_raise(ec->parent->frame);
|
||||
evas_object_raise(goal_ec->frame);
|
||||
}
|
||||
else if (e_config->focus_revert_on_hide_or_close)
|
||||
{
|
||||
|
@ -459,6 +464,14 @@ _e_client_revert_focus(E_Client *ec)
|
|||
static void
|
||||
_e_client_free(E_Client *ec)
|
||||
{
|
||||
if (focused == ec)
|
||||
{
|
||||
focused = NULL;
|
||||
#ifndef HAVE_WAYLAND_ONLY
|
||||
if (e_comp->comp_type != E_PIXMAP_TYPE_WL)
|
||||
ecore_x_window_focus(e_comp->root);
|
||||
#endif
|
||||
}
|
||||
if (ec->desk)
|
||||
ec->desk->fullscreen_clients = eina_list_remove(ec->desk->fullscreen_clients, ec);
|
||||
if (ec->restore_zone_id)
|
||||
|
@ -573,6 +586,8 @@ _e_client_free(E_Client *ec)
|
|||
if (ec->stack.prev) ec->stack.prev->stack.next = ec->stack.next;
|
||||
if (ec->stack.next) ec->stack.next->stack.prev = ec->stack.prev;
|
||||
|
||||
E_FREE_FUNC(ec->ignore_first_unmap_clear_timer, ecore_timer_del);
|
||||
|
||||
ec->e.state.profile.wait_desk = NULL;
|
||||
evas_object_del(ec->frame);
|
||||
E_OBJECT(ec)->references--;
|
||||
|
@ -644,7 +659,7 @@ _e_client_del(E_Client *ec)
|
|||
evas_object_hide(ec->internal_elm_win);
|
||||
|
||||
if (ec->focused)
|
||||
_e_client_revert_focus(ec);
|
||||
e_client_revert_focus(ec);
|
||||
if (ec->frame) evas_object_focus_set(ec->frame, 0);
|
||||
|
||||
E_FREE_FUNC(ec->ping_poller, ecore_poller_del);
|
||||
|
@ -1560,7 +1575,7 @@ _e_client_cb_evas_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN
|
|||
if (!ec->hidden)
|
||||
{
|
||||
if (ec->focused)
|
||||
_e_client_revert_focus(ec);
|
||||
e_client_revert_focus(ec);
|
||||
}
|
||||
ec->want_focus = ec->take_focus = 0;
|
||||
|
||||
|
@ -4520,6 +4535,7 @@ e_client_fullscreen(E_Client *ec, E_Fullscreen policy)
|
|||
evas_object_layer_set(ec->frame, E_LAYER_CLIENT_FULLSCREEN);
|
||||
|
||||
ec->fullscreen = 1;
|
||||
ec->fullscreen_time = ecore_time_get();
|
||||
ec->unfullscreen_forced = 0;
|
||||
#ifndef HAVE_WAYLAND_ONLY
|
||||
if ((eina_list_count(e_comp->zones) > 1) ||
|
||||
|
@ -4642,7 +4658,7 @@ e_client_iconify(E_Client *ec)
|
|||
{
|
||||
if (!ec->new_client)
|
||||
{
|
||||
_e_client_revert_focus(ec);
|
||||
e_client_revert_focus(ec);
|
||||
evas_object_hide(ec->frame);
|
||||
}
|
||||
e_client_urgent_set(ec, ec->icccm.urgent);
|
||||
|
|
|
@ -302,6 +302,7 @@ struct E_Client
|
|||
|
||||
unsigned char ignore_first_unmap;
|
||||
E_Pointer_Mode resize_mode;
|
||||
Ecore_Timer *ignore_first_unmap_clear_timer;
|
||||
|
||||
struct
|
||||
{
|
||||
|
@ -693,6 +694,8 @@ struct E_Client
|
|||
int x, y;
|
||||
} drag;
|
||||
|
||||
double fullscreen_time;
|
||||
|
||||
Ecore_Timer *raise_timer;
|
||||
E_Client_Move_Intercept_Cb move_intercept_cb;
|
||||
E_Remember *remember;
|
||||
|
@ -815,6 +818,7 @@ E_API Eina_Bool e_client_focus_track_enabled(void);
|
|||
E_API void e_client_focus_track_freeze(void);
|
||||
E_API void e_client_focus_track_thaw(void);
|
||||
E_API void e_client_refocus(void);
|
||||
E_API void e_client_revert_focus(E_Client *ec);
|
||||
E_API void e_client_focus_set_with_pointer(E_Client *ec);
|
||||
E_API void e_client_activate(E_Client *ec, Eina_Bool just_do_it);
|
||||
E_API E_Client *e_client_focused_get(void);
|
||||
|
|
|
@ -434,6 +434,7 @@ e_client_volume_object_add(E_Client *ec, Evas *evas)
|
|||
if (edje_object_part_exists(bx, "e.swallow.volume"))
|
||||
{
|
||||
o = elm_slider_add(e_comp->elm);
|
||||
elm_object_focus_allow_set(o, EINA_FALSE);
|
||||
elm_slider_min_max_set(o, ec->volume_min,
|
||||
ec->volume_max);
|
||||
elm_slider_span_size_set(o, ec->volume_max
|
||||
|
|
|
@ -756,6 +756,68 @@ _e_comp_shapes_update_object_checker_function_thingy(Evas_Object *o)
|
|||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_tiler_obj_visible(Evas_Object *o)
|
||||
{
|
||||
Evas_Object *o2;
|
||||
|
||||
if (!evas_object_visible_get(o)) return EINA_FALSE;
|
||||
o2 = evas_object_clip_get(o);
|
||||
if (!o2) return EINA_TRUE;
|
||||
return _tiler_obj_visible(o2);
|
||||
}
|
||||
|
||||
static void
|
||||
_tiler_add_input_sub(Evas_Object *par, Eina_Tiler *tb)
|
||||
{
|
||||
Eina_List *objs = evas_object_smart_members_get(par);
|
||||
Evas_Coord x, y, w, h;
|
||||
Evas_Object *o;
|
||||
const char *type;
|
||||
void *sd;
|
||||
|
||||
EINA_LIST_FREE(objs, o)
|
||||
{
|
||||
if (evas_object_clipees_has(o)) continue;
|
||||
if ((_tiler_obj_visible(o)) &&
|
||||
(!evas_object_pass_events_get(o)))
|
||||
{
|
||||
type = evas_object_type_get(o);
|
||||
|
||||
if (type)
|
||||
{
|
||||
if (!strcmp(type, "rectangle"))
|
||||
{
|
||||
if (!evas_object_clipees_has(o))
|
||||
{
|
||||
evas_object_geometry_get(o, &x, &y, &w, &h);
|
||||
eina_tiler_rect_add(tb, &(Eina_Rectangle){x, y, w, h});
|
||||
}
|
||||
}
|
||||
else if ((!strcmp(type, "image")) ||
|
||||
(!strcmp(type, "text")) ||
|
||||
(!strcmp(type, "textblock"))
|
||||
)
|
||||
{
|
||||
const char *name = evas_object_name_get(o);
|
||||
|
||||
evas_object_geometry_get(o, &x, &y, &w, &h);
|
||||
if ((name) && (!strcmp(name, "cw->obj")))
|
||||
eina_tiler_rect_del(tb, &(Eina_Rectangle){x, y, w, h});
|
||||
else
|
||||
eina_tiler_rect_add(tb, &(Eina_Rectangle){x, y, w, h});
|
||||
}
|
||||
else if ((!strcmp(type, "edje")) ||
|
||||
(!strcmp(type, "e_zoomap")))
|
||||
{
|
||||
sd = evas_object_smart_data_get(o);
|
||||
if (sd) _tiler_add_input_sub(o, tb);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_comp_shapes_update_comp_client_shape_comp_helper(E_Client *ec, Eina_Tiler *tb, Eina_List **rl)
|
||||
{
|
||||
|
@ -823,6 +885,7 @@ _e_comp_shapes_update_comp_client_shape_comp_helper(E_Client *ec, Eina_Tiler *tb
|
|||
eina_tiler_rect_del(tb, &(Eina_Rectangle){x, y, w, h});
|
||||
SHAPE_INF("DEL: %d,%d@%dx%d", x, y, w, h);
|
||||
}
|
||||
_tiler_add_input_sub(ec->frame, tb);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -849,6 +912,8 @@ _e_comp_shapes_update_comp_client_shape_comp_helper(E_Client *ec, Eina_Tiler *tb
|
|||
eina_tiler_rect_del(tb, &(Eina_Rectangle){ec->client.x, ec->client.y, ec->client.w, ec->client.h});
|
||||
SHAPE_INF("DEL: %d,%d@%dx%d", ec->client.x, ec->client.y, ec->client.w, ec->client.h);
|
||||
}
|
||||
|
||||
_tiler_add_input_sub(ec->frame, tb);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -749,7 +749,7 @@ _e_comp_object_shadow_setup(E_Comp_Object *cw)
|
|||
else
|
||||
edje_object_part_swallow(cw->shobj, "e.swallow.content", cw->obj);
|
||||
}
|
||||
if (cw->input_objs)
|
||||
if ((cw->input_objs) || ((cw->ec) && (cw->ec->shaped)))
|
||||
evas_object_pass_events_set(cw->obj, 1);
|
||||
else
|
||||
evas_object_pass_events_set(cw->obj, 0);
|
||||
|
@ -972,7 +972,7 @@ _e_comp_object_pixels_get(void *data, Evas_Object *obj)
|
|||
}
|
||||
if (e_object_is_del(E_OBJECT(ec))) return;
|
||||
/* shaped clients get precise mouse events to handle transparent pixels */
|
||||
evas_object_precise_is_inside_set(cw->obj, ec->shaped || ec->shaped_input);
|
||||
evas_object_precise_is_inside_set(cw->obj, ec->shaped);
|
||||
|
||||
//INF("%p PX(%dx%d) EC(%dx%d) CW(%dx%d)", ec, pw, ph, ec->w, ec->h, cw->w, cw->h);
|
||||
//e_comp_object_frame_wh_adjust(cw->smart_obj, pw, ph, &pw, &ph);
|
||||
|
@ -1877,8 +1877,9 @@ _e_comp_intercept_focus(void *data, Evas_Object *obj, Eina_Bool focus)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (e_client_focused_get() == ec)
|
||||
if (e_client_focused_get() == ec) {
|
||||
e_client_focused_set(NULL);
|
||||
}
|
||||
}
|
||||
evas_object_focus_set(obj, focus);
|
||||
}
|
||||
|
@ -2352,8 +2353,9 @@ _e_comp_smart_hide(Evas_Object *obj)
|
|||
edje_object_play_set(cw->frame_object, 0);
|
||||
}
|
||||
/* ensure focus-out */
|
||||
if (cw->ec->focused)
|
||||
evas_object_focus_set(cw->ec->frame, 0);
|
||||
if (cw->ec->focused) {
|
||||
e_client_revert_focus(cw->ec);
|
||||
}
|
||||
e_comp_render_queue(); //force nocomp recheck
|
||||
e_comp_shape_queue();
|
||||
}
|
||||
|
|
|
@ -534,59 +534,12 @@ _e_comp_wl_evas_cb_multi_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *o
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_comp_wl_client_priority_adjust(int pid, int set, int adj, Eina_Bool use_adj, Eina_Bool adj_child, Eina_Bool do_child)
|
||||
{
|
||||
Eina_List *files;
|
||||
char *file, buff[PATH_MAX];
|
||||
FILE *f;
|
||||
int pid2, ppid;
|
||||
int num_read;
|
||||
int n;
|
||||
|
||||
if (use_adj)
|
||||
n = (getpriority(PRIO_PROCESS, pid) + adj);
|
||||
else
|
||||
n = set;
|
||||
|
||||
setpriority(PRIO_PROCESS, pid, n);
|
||||
|
||||
if (adj_child)
|
||||
use_adj = EINA_TRUE;
|
||||
|
||||
if (!do_child) return;
|
||||
|
||||
files = ecore_file_ls("/proc");
|
||||
EINA_LIST_FREE(files, file)
|
||||
{
|
||||
if (!isdigit(file[0]))
|
||||
continue;
|
||||
|
||||
snprintf(buff, sizeof(buff), "/proc/%s/stat", file);
|
||||
if ((f = fopen(buff, "r")))
|
||||
{
|
||||
pid2 = -1;
|
||||
ppid = -1;
|
||||
num_read = fscanf(f, "%i %*s %*s %i %*s", &pid2, &ppid);
|
||||
fclose(f);
|
||||
if (num_read == 2 && ppid == pid)
|
||||
_e_comp_wl_client_priority_adjust(pid2, set,
|
||||
adj, use_adj,
|
||||
adj_child, do_child);
|
||||
}
|
||||
|
||||
free(file);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_comp_wl_client_priority_raise(E_Client *ec)
|
||||
{
|
||||
if (ec->netwm.pid <= 0) return;
|
||||
if (ec->netwm.pid == getpid()) return;
|
||||
_e_comp_wl_client_priority_adjust(ec->netwm.pid,
|
||||
e_config->priority - 1, -1,
|
||||
EINA_FALSE, EINA_TRUE, EINA_FALSE);
|
||||
e_pid_nice_priority_fg(ec->netwm.pid);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -594,8 +547,7 @@ _e_comp_wl_client_priority_normal(E_Client *ec)
|
|||
{
|
||||
if (ec->netwm.pid <= 0) return;
|
||||
if (ec->netwm.pid == getpid()) return;
|
||||
_e_comp_wl_client_priority_adjust(ec->netwm.pid, e_config->priority, 1,
|
||||
EINA_FALSE, EINA_TRUE, EINA_FALSE);
|
||||
e_pid_nice_priority_bg(ec->netwm.pid);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
|
|
|
@ -962,7 +962,7 @@ _e_comp_wl_clipboard_create(void)
|
|||
E_API void
|
||||
e_comp_wl_data_device_send_enter(E_Client *ec)
|
||||
{
|
||||
struct wl_resource *data_device_res, *offer_res;
|
||||
struct wl_resource *data_device_res = NULL, *offer_res = NULL;
|
||||
uint32_t serial;
|
||||
int x, y;
|
||||
|
||||
|
|
|
@ -657,58 +657,6 @@ _e_comp_x_add_fail_job(void *d EINA_UNUSED)
|
|||
"GPU to use OpenGL with compositing."));
|
||||
}
|
||||
|
||||
static void
|
||||
_pri_adj(int pid, int set, int adj, Eina_Bool use_adj, Eina_Bool adj_children, Eina_Bool do_children)
|
||||
{
|
||||
int newpri = set;
|
||||
|
||||
if (use_adj) newpri = getpriority(PRIO_PROCESS, pid) + adj;
|
||||
setpriority(PRIO_PROCESS, pid, newpri);
|
||||
// shouldn't need to do this as default ionice class is "none" (0), and
|
||||
// this inherits io priority FROM nice level
|
||||
// ioprio_set(IOPRIO_WHO_PROCESS, pid,
|
||||
// IOPRIO_PRIO_VALUE(2, 5));
|
||||
if (do_children)
|
||||
{
|
||||
Eina_List *files;
|
||||
char *file, buf[PATH_MAX];
|
||||
FILE *f;
|
||||
int pid2, ppid;
|
||||
|
||||
// yes - this is /proc specific... so this may not work on some
|
||||
// os's - works on linux. too bad for others.
|
||||
files = ecore_file_ls("/proc");
|
||||
EINA_LIST_FREE(files, file)
|
||||
{
|
||||
if (isdigit(file[0]))
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "/proc/%s/stat", file);
|
||||
f = fopen(buf, "r");
|
||||
if (f)
|
||||
{
|
||||
pid2 = -1;
|
||||
ppid = -1;
|
||||
if (fscanf(f, "%i %*s %*s %i %*s", &pid2, &ppid) == 2)
|
||||
{
|
||||
fclose(f);
|
||||
if (ppid == pid)
|
||||
{
|
||||
if (adj_children)
|
||||
_pri_adj(pid2, set, adj, EINA_TRUE,
|
||||
adj_children, do_children);
|
||||
else
|
||||
_pri_adj(pid2, set, adj, use_adj,
|
||||
adj_children, do_children);
|
||||
}
|
||||
}
|
||||
else fclose(f);
|
||||
}
|
||||
}
|
||||
free(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static E_Client *
|
||||
_e_comp_x_client_find_by_alarm(Ecore_X_Sync_Alarm al)
|
||||
{
|
||||
|
@ -953,12 +901,7 @@ _e_comp_x_client_pri_raise(E_Client *ec)
|
|||
{
|
||||
if (ec->netwm.pid <= 0) return;
|
||||
if (ec->netwm.pid == getpid()) return;
|
||||
_pri_adj(ec->netwm.pid,
|
||||
e_config->priority - 1, -1, EINA_FALSE,
|
||||
// EINA_TRUE, EINA_TRUE);
|
||||
EINA_TRUE, EINA_FALSE);
|
||||
// printf("WIN: pid %i, title %s (HI!!!!!!!!!!!!!!!!!!)\n",
|
||||
// ec->netwm.pid, e_client_util_name_get(ec));
|
||||
e_pid_nice_priority_fg(ec->netwm.pid);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -966,12 +909,7 @@ _e_comp_x_client_pri_norm(E_Client *ec)
|
|||
{
|
||||
if (ec->netwm.pid <= 0) return;
|
||||
if (ec->netwm.pid == getpid()) return;
|
||||
_pri_adj(ec->netwm.pid,
|
||||
e_config->priority, 1, EINA_FALSE,
|
||||
// EINA_TRUE, EINA_TRUE);
|
||||
EINA_TRUE, EINA_FALSE);
|
||||
// printf("WIN: pid %i, title %s (NORMAL)\n",
|
||||
// ec->netwm.pid, e_client_util_name_get(ec));
|
||||
e_pid_nice_priority_bg(ec->netwm.pid);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2510,6 +2448,7 @@ _e_comp_x_mapping_change(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_E
|
|||
E_Client *ec;
|
||||
|
||||
if (_e_comp_x_mapping_change_disabled) return ECORE_CALLBACK_RENEW;
|
||||
printf("COMPX: _e_comp_x_mapping_change\n");
|
||||
e_comp_canvas_keys_ungrab();
|
||||
EINA_LIST_FOREACH(e_comp->clients, l, ec)
|
||||
{
|
||||
|
@ -2601,34 +2540,60 @@ _e_comp_x_powersave(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
|||
static void
|
||||
_e_comp_x_mouse_in_job(void *d EINA_UNUSED)
|
||||
{
|
||||
E_Client *ecf = e_client_focused_get();
|
||||
|
||||
// if we're fullscreen and see a mout out within a short time of having
|
||||
// set this client ot fullscreen - it's a "false flag" that is a bi-product
|
||||
// of things moving around while becoming fullscreen, so ignore it
|
||||
if ((ecf) && (ecf != mouse_client))
|
||||
{
|
||||
if ((ecf->fullscreen) &&
|
||||
(ecore_time_get() - ecf->fullscreen_time) < 0.2) // 0.2sec enough
|
||||
goto done;
|
||||
}
|
||||
if (mouse_client)
|
||||
e_client_mouse_in(mouse_client, e_comp_canvas_x_root_adjust(mouse_in_coords.x), e_comp_canvas_y_root_adjust(mouse_in_coords.y));
|
||||
done:
|
||||
mouse_in_job = NULL;
|
||||
}
|
||||
|
||||
static E_Client *
|
||||
_e_comp_x_e_client_obj_get(Evas_Object *o)
|
||||
{
|
||||
Evas_Object *par;
|
||||
|
||||
if (evas_object_data_get(o, "comp_object"))
|
||||
return e_comp_object_client_get(o);
|
||||
par = evas_object_smart_parent_get(o);
|
||||
if (!par) return NULL;
|
||||
return _e_comp_x_e_client_obj_get(par);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_e_comp_x_mouse_in_fix_check_timer_cb(void *data EINA_UNUSED)
|
||||
{
|
||||
E_Client *ec = NULL, *cec;
|
||||
E_Client *ec = NULL;
|
||||
Eina_List *l, *in_list;
|
||||
Evas_Object *o;
|
||||
int x, y;
|
||||
|
||||
mouse_in_fix_check_timer = NULL;
|
||||
if (e_grabinput_key_win_get() || e_grabinput_mouse_win_get())
|
||||
return EINA_FALSE;
|
||||
ecore_evas_pointer_xy_get(e_comp->ee, &x, &y);
|
||||
E_CLIENT_REVERSE_FOREACH(cec)
|
||||
|
||||
in_list = evas_tree_objects_at_xy_get(e_comp->evas, NULL, x, y);
|
||||
EINA_LIST_FOREACH(in_list, l, o)
|
||||
{
|
||||
/* If a border was specified which should be excluded from the list
|
||||
* (because it will be closed shortly for example), skip */
|
||||
if ((!e_client_util_desk_visible(cec, e_desk_current_get(e_zone_current_get())))) continue;
|
||||
if (!evas_object_visible_get(cec->frame)) continue;
|
||||
if (!E_INSIDE(x, y, cec->x, cec->y, cec->w, cec->h))
|
||||
continue;
|
||||
/* If the layer is higher, the position of the window is higher
|
||||
* (always on top vs always below) */
|
||||
if (!ec || (cec->layer > ec->layer))
|
||||
ec = cec;
|
||||
ec = _e_comp_x_e_client_obj_get(o);
|
||||
if (ec)
|
||||
{
|
||||
if ((!e_client_util_desk_visible
|
||||
(ec, e_desk_current_get(e_zone_current_get())))) continue;
|
||||
break;
|
||||
}
|
||||
}
|
||||
eina_list_free(in_list);
|
||||
if (ec)
|
||||
{
|
||||
mouse_client = ec;
|
||||
|
@ -2690,6 +2655,12 @@ _e_comp_x_mouse_out(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_
|
|||
return ECORE_CALLBACK_PASS_ON;
|
||||
ec = _e_comp_x_client_find_by_window(ev->win);
|
||||
if (!ec) return ECORE_CALLBACK_RENEW;
|
||||
// if we're fullscreen and see a mout out within a short time of having
|
||||
// set this client ot fullscreen - it's a "false flag" that is a bi-product
|
||||
// of things moving around while becoming fullscreen, so ignore it
|
||||
if ((ec->fullscreen) &&
|
||||
(ecore_time_get() - ec->fullscreen_time) < 0.2) // 0.2sec enough
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
if (_e_comp_x_client_data_get(ec)->deleted) return ECORE_CALLBACK_RENEW;
|
||||
if (mouse_client == ec)
|
||||
{
|
||||
|
@ -2854,6 +2825,8 @@ _e_comp_x_focus_out(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_
|
|||
return ECORE_CALLBACK_PASS_ON;
|
||||
else if (ev->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL)
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
else if (ev->detail == ECORE_X_EVENT_DETAIL_POINTER)
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
else if (ev->mode == ECORE_X_EVENT_MODE_GRAB)
|
||||
{
|
||||
|
@ -2872,10 +2845,12 @@ _e_comp_x_focus_out(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_
|
|||
{
|
||||
/* for firefox/thunderbird (xul) menu walking */
|
||||
/* NB: why did i disable this before? */
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
/* why only filter these out for an ungrab? skip all ungrabs...
|
||||
if (ev->detail == ECORE_X_EVENT_DETAIL_INFERIOR)
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
else if (ev->detail == ECORE_X_EVENT_DETAIL_POINTER)
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
return ECORE_CALLBACK_PASS_ON; */
|
||||
}
|
||||
else if (ev->mode == ECORE_X_EVENT_MODE_WHILE_GRABBED)
|
||||
{
|
||||
|
@ -2883,8 +2858,10 @@ _e_comp_x_focus_out(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_
|
|||
return ECORE_CALLBACK_PASS_ON;
|
||||
else if (ev->detail == ECORE_X_EVENT_DETAIL_INFERIOR)
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
else if (ev->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR)
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
evas_object_focus_set(ec->frame, 0);
|
||||
e_client_revert_focus(ec);
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
|
@ -3461,6 +3438,41 @@ _e_comp_x_hook_client_post_new_client(void *d EINA_UNUSED, E_Client *ec)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_comp_x_frame_extents_adjust(E_Client *ec, int exl, int exr, int ext, int exb)
|
||||
{
|
||||
unsigned int extentscurrent;
|
||||
unsigned int extentsall = exl | exr | ext | exb;
|
||||
int insl = 0, insr = 0, inst = 0, insb = 0;
|
||||
|
||||
e_comp_object_frame_geometry_get(ec->frame, &insl, &insr, &inst, &insb);
|
||||
extentscurrent = insl | insr | inst | insb;
|
||||
|
||||
extentsall = !!extentsall;
|
||||
extentscurrent = !!extentscurrent;
|
||||
if ((!e_comp_object_frame_exists(ec->frame)) &&
|
||||
(( extentsall && extentscurrent) ||
|
||||
(!extentsall && extentscurrent) ||
|
||||
( extentsall && !extentscurrent)))
|
||||
{
|
||||
e_comp_object_frame_geometry_set(ec->frame, -exl, -exr, -ext, -exb);
|
||||
if (ec->override &&
|
||||
(ec->x == ec->comp_data->initial_attributes.x) &&
|
||||
(ec->y == ec->comp_data->initial_attributes.y))
|
||||
e_comp_object_frame_xy_adjust(ec->frame, ec->x, ec->y, &ec->x, &ec->y);
|
||||
}
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_cb_e_comp_x_ignore_first_unmap_clear_timer(void *data)
|
||||
{
|
||||
E_Client *ec = data;
|
||||
|
||||
ec->ignore_first_unmap_clear_timer = NULL;
|
||||
if (ec->ignore_first_unmap > 0) ec->ignore_first_unmap--;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_comp_x_hook_client_pre_frame_assign(void *d EINA_UNUSED, E_Client *ec)
|
||||
{
|
||||
|
@ -3512,6 +3524,10 @@ _e_comp_x_hook_client_pre_frame_assign(void *d EINA_UNUSED, E_Client *ec)
|
|||
}
|
||||
if (!ec->internal)
|
||||
ecore_x_window_save_set_add(win);
|
||||
ec->ignore_first_unmap++;
|
||||
E_FREE_FUNC(ec->ignore_first_unmap_clear_timer, ecore_timer_del);
|
||||
ec->ignore_first_unmap_clear_timer = ecore_timer_add
|
||||
(0.2, _cb_e_comp_x_ignore_first_unmap_clear_timer, ec);
|
||||
ecore_x_window_reparent(win, pwin, 0, 0);
|
||||
e_pixmap_alias(ep, E_PIXMAP_TYPE_X, pwin);
|
||||
|
||||
|
@ -4838,34 +4854,18 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec)
|
|||
*/
|
||||
if (count >= 4)
|
||||
{
|
||||
unsigned int extentscurrent;
|
||||
unsigned int extentsall =
|
||||
extents[0] | extents[1] | extents[2] | extents[3];
|
||||
int insl = 0, insr = 0, inst = 0, insb = 0;
|
||||
e_comp_object_frame_geometry_get(ec->frame, &insl, &insr,
|
||||
&inst, &insb);
|
||||
extentscurrent = insl | insr | inst | insb;
|
||||
|
||||
extentsall = !!extentsall;
|
||||
extentscurrent = !!extentscurrent;
|
||||
if ((!e_comp_object_frame_exists(ec->frame)) &&
|
||||
(( extentsall && extentscurrent) ||
|
||||
(!extentsall && extentscurrent) ||
|
||||
( extentsall && !extentscurrent)))
|
||||
{
|
||||
e_comp_object_frame_geometry_set(ec->frame,
|
||||
-extents[0],
|
||||
-extents[1],
|
||||
-extents[2],
|
||||
-extents[3]);
|
||||
if (ec->override &&
|
||||
(ec->x == ec->comp_data->initial_attributes.x) &&
|
||||
(ec->y == ec->comp_data->initial_attributes.y))
|
||||
e_comp_object_frame_xy_adjust(ec->frame, ec->x, ec->y, &ec->x, &ec->y);
|
||||
}
|
||||
// printf("GTK-FRM: get %i %i %i %i\n",
|
||||
// extents[0], extents[1], extents[2], extents[3]);
|
||||
_e_comp_x_frame_extents_adjust
|
||||
(ec, extents[0], extents[1], extents[2], extents[3]);
|
||||
}
|
||||
free(extents);
|
||||
}
|
||||
else
|
||||
{
|
||||
// printf("GTK-FRM: get fail\n");
|
||||
_e_comp_x_frame_extents_adjust(ec, 0, 0, 0, 0);
|
||||
}
|
||||
cd->fetch_gtk_frame_extents = 0;
|
||||
}
|
||||
ec->changes.prop = 0;
|
||||
|
@ -5193,6 +5193,11 @@ _e_comp_x_hook_client_del(void *d EINA_UNUSED, E_Client *ec)
|
|||
else
|
||||
#endif
|
||||
{
|
||||
// work around broken clients that withdraw windows and don't
|
||||
// remove WM_STATE themselves... like qt6 + telegram and media
|
||||
// window popups.
|
||||
ecore_x_window_prop_property_del(e_client_util_win_get(ec),
|
||||
ECORE_X_ATOM_WM_STATE);
|
||||
if (e_pixmap_free(ec->pixmap))
|
||||
e_pixmap_client_set(ec->pixmap, NULL);
|
||||
ec->pixmap = NULL;
|
||||
|
@ -5754,6 +5759,9 @@ _e_comp_x_manage_windows(void)
|
|||
evas_object_geometry_set(ec->frame, ec->client.x, ec->client.y, ec->client.w, ec->client.h);
|
||||
}
|
||||
ec->ignore_first_unmap = 1;
|
||||
E_FREE_FUNC(ec->ignore_first_unmap_clear_timer, ecore_timer_del);
|
||||
ec->ignore_first_unmap_clear_timer = ecore_timer_add
|
||||
(0.2, _cb_e_comp_x_ignore_first_unmap_clear_timer, ec);
|
||||
if (ec->override || (!ec->icccm.fetch.hints))
|
||||
evas_object_show(ec->frame);
|
||||
_e_comp_x_client_stack(ec);
|
||||
|
|
|
@ -200,28 +200,35 @@ _handle_dev_prop(int dev_slot, const char *dev, const char *prop, Device_Flags d
|
|||
{
|
||||
// 7 val, 8 bit bit 0 = off, >0 mouse button reported
|
||||
// TR, BR, TL, BL, F1, F2, F3
|
||||
// 0, 0, 0, 0, 1, 2, 3 <- tap to click
|
||||
// 1, 1, 1, 0, 1, 3, 2 <- tap to click
|
||||
unsigned char *val = ecore_x_input_device_property_get
|
||||
(dev_slot, prop, &num, &fmt, &size);
|
||||
const char tapval[7] = { 1, 1, 1, 0, 1, 3, 2 };
|
||||
const char notapval[7] = { 0, 0, 0, 0, 0, 0, 0 };
|
||||
Eina_Bool have_tapval = EINA_FALSE;
|
||||
Eina_Bool have_notapval = EINA_FALSE;
|
||||
int i;
|
||||
|
||||
if (num >= 7)
|
||||
{
|
||||
have_tapval = EINA_TRUE;
|
||||
for (i = 0; i < 7; i++) if (val[i] != tapval[i]) have_tapval = EINA_FALSE;
|
||||
have_notapval = EINA_TRUE;
|
||||
for (i = 0; i < 7; i++) if (val[i] != notapval[i]) have_notapval = EINA_FALSE;
|
||||
}
|
||||
if ((val) && (size == 8) && (num >= 7) &&
|
||||
(((e_config->touch_tap_to_click) &&
|
||||
((val[4] != 1) || (val[5] != 2) || (val[6] != 3))) ||
|
||||
((!e_config->touch_tap_to_click) &&
|
||||
((val[4] != 0) || (val[5] != 0) || (val[6] != 0)))))
|
||||
(((e_config->touch_tap_to_click) && (!have_tapval)) ||
|
||||
((!e_config->touch_tap_to_click) && (!have_notapval))))
|
||||
{
|
||||
if (e_config->touch_tap_to_click)
|
||||
{
|
||||
val[4] = 1;
|
||||
val[5] = 2;
|
||||
val[6] = 3;
|
||||
for (i = 0; i < 7; i++) val[i] = tapval[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
val[4] = 0;
|
||||
val[5] = 0;
|
||||
val[6] = 0;
|
||||
for (i = 0; i < 7; i++) val[i] = notapval[i];
|
||||
}
|
||||
printf("DEV: change [%s] [%s] -> %i %i %i\n", dev, prop, val[4], val[5], val[6]);
|
||||
printf("DEV: change [%s] [%s] -> %i %i %i %i %i %i %i\n", dev, prop, val[0], val[1], val[2], val[3], val[4], val[5], val[6]);
|
||||
ecore_x_input_device_property_set
|
||||
(dev_slot, prop, val, num, fmt, size);
|
||||
}
|
||||
|
|
|
@ -122,6 +122,24 @@ _e_config_profile_name_get(Eet_File *ef)
|
|||
s = eina_stringshare_add_length(data, data_len);
|
||||
free(data);
|
||||
}
|
||||
if (s)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
char buf2[PATH_MAX];
|
||||
|
||||
e_user_dir_snprintf(buf, sizeof(buf), "config/%s", s);
|
||||
if (!ecore_file_is_dir(buf))
|
||||
{
|
||||
snprintf(buf2, sizeof(buf2), "config/%s", s);
|
||||
e_prefix_data_concat_static(buf, buf2);
|
||||
if (!ecore_file_is_dir(buf))
|
||||
{
|
||||
printf("CF: warning - profile [%s] dir does not exist in user or system dirs\n", s);
|
||||
eina_stringshare_del(s);
|
||||
s = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
|
@ -172,7 +190,7 @@ _e_config_pending_file_del(const char *path)
|
|||
|
||||
eina_hash_del(_e_config_pending_files, path, ef);
|
||||
eina_lock_release(&_e_config_pending_files_lock);
|
||||
err = eet_close(ef);
|
||||
err = eet_sync_sync(ef);
|
||||
switch (err)
|
||||
{
|
||||
case EET_ERROR_NONE:
|
||||
|
@ -237,6 +255,7 @@ _e_config_pending_file_del(const char *path)
|
|||
erstr = _("The error is unknown to Enlightenment.");
|
||||
break;
|
||||
}
|
||||
eet_close(ef);
|
||||
if (!ok) printf("CF: Write Error: %s\n", erstr);
|
||||
}
|
||||
else
|
||||
|
@ -879,6 +898,8 @@ _e_config_edd_init(Eina_Bool old)
|
|||
|
||||
E_CONFIG_VAL(D, T, thumb_nice, INT);
|
||||
|
||||
E_CONFIG_VAL(D, T, gesture_open_input_devices, UCHAR);
|
||||
|
||||
E_CONFIG_VAL(D, T, menu_icons_hide, UCHAR);
|
||||
E_CONFIG_VAL(D, T, menu_favorites_show, INT);
|
||||
E_CONFIG_VAL(D, T, menu_apps_show, INT);
|
||||
|
@ -942,6 +963,7 @@ _e_config_edd_init(Eina_Bool old)
|
|||
E_CONFIG_VAL(D, T, backlight.battery_timer, DOUBLE);
|
||||
E_CONFIG_VAL(D, T, backlight.sysdev, STR);
|
||||
E_CONFIG_VAL(D, T, backlight.idle_dim, UCHAR);
|
||||
E_CONFIG_VAL(D, T, backlight.ddc, UCHAR);
|
||||
|
||||
E_CONFIG_VAL(D, T, deskenv.load_xrdb, UCHAR);
|
||||
E_CONFIG_VAL(D, T, deskenv.load_xmodmap, UCHAR);
|
||||
|
@ -1042,19 +1064,24 @@ e_config_init(void)
|
|||
|
||||
for (i = 1; i <= _e_config_revisions; i++)
|
||||
{
|
||||
e_user_dir_snprintf(buf, sizeof(buf), "config/profile.%i.cfg", i);
|
||||
e_user_dir_snprintf(buf, sizeof(buf), "config/profile.cfg.%i", i);
|
||||
ef = eet_open(buf, EET_FILE_MODE_READ);
|
||||
if (ef)
|
||||
{
|
||||
printf("CF: warning - falling back to %s\n", buf);
|
||||
_e_config_profile = _e_config_profile_name_get(ef);
|
||||
eet_close(ef);
|
||||
ef = NULL;
|
||||
if (_e_config_profile) break;
|
||||
printf("CF: warning - fallback to %s can't read profile\n", buf);
|
||||
}
|
||||
else if (ecore_file_exists(buf))
|
||||
printf("CF: warning - fallback to %s failing to open\n", buf);
|
||||
}
|
||||
if (!_e_config_profile)
|
||||
{
|
||||
/* use system if no user profile config */
|
||||
printf("CF: fallback to system profile config file\n");
|
||||
e_prefix_data_concat_static(buf, "data/config/profile.cfg");
|
||||
ef = eet_open(buf, EET_FILE_MODE_READ);
|
||||
}
|
||||
|
@ -1064,6 +1091,8 @@ e_config_init(void)
|
|||
_e_config_profile = _e_config_profile_name_get(ef);
|
||||
eet_close(ef);
|
||||
ef = NULL;
|
||||
if (!_e_config_profile)
|
||||
printf("CF: warning - can't read profile\n");
|
||||
}
|
||||
if (!_e_config_profile)
|
||||
{
|
||||
|
@ -1624,52 +1653,10 @@ e_config_load(void)
|
|||
e_config_save_queue();
|
||||
}
|
||||
CONFIG_VERSION_CHECK(22)
|
||||
{
|
||||
Eina_List *l;
|
||||
E_Config_Module *em, *module;
|
||||
Eina_Bool ibar_en = EINA_FALSE, luncher_en = EINA_FALSE;
|
||||
|
||||
CONFIG_VERSION_UPDATE_INFO(22);
|
||||
|
||||
EINA_LIST_FOREACH(e_config->modules, l, em)
|
||||
{
|
||||
if (!em->enabled) continue;
|
||||
if (eina_streq(em->name, "ibar"))
|
||||
ibar_en = EINA_TRUE;
|
||||
else if (eina_streq(em->name, "luncher"))
|
||||
luncher_en = EINA_TRUE;
|
||||
}
|
||||
if (ibar_en && !luncher_en)
|
||||
{
|
||||
module = E_NEW(E_Config_Module, 1);
|
||||
module->name = eina_stringshare_add("luncher");
|
||||
module->enabled = 1;
|
||||
e_config->modules = eina_list_append(e_config->modules, module);
|
||||
}
|
||||
e_config_save_queue();
|
||||
{ // added luncher - not around anymore
|
||||
}
|
||||
CONFIG_VERSION_CHECK(23)
|
||||
{
|
||||
Eina_List *l;
|
||||
E_Config_Module *em, *module;
|
||||
Eina_Bool sysinfo_en = EINA_FALSE;
|
||||
|
||||
CONFIG_VERSION_UPDATE_INFO(23);
|
||||
|
||||
EINA_LIST_FOREACH(e_config->modules, l, em)
|
||||
{
|
||||
if (!em->enabled) continue;
|
||||
if (eina_streq(em->name, "sysinfo"))
|
||||
sysinfo_en = EINA_TRUE;
|
||||
}
|
||||
if (!sysinfo_en)
|
||||
{
|
||||
module = E_NEW(E_Config_Module, 1);
|
||||
module->name = eina_stringshare_add("sysinfo");
|
||||
module->enabled = 1;
|
||||
e_config->modules = eina_list_append(e_config->modules, module);
|
||||
}
|
||||
e_config_save_queue();
|
||||
{ // added sysinfo - not around anymore
|
||||
}
|
||||
CONFIG_VERSION_CHECK(24)
|
||||
{
|
||||
|
@ -1808,6 +1795,12 @@ e_config_load(void)
|
|||
e_config->scale.set_xapp_dpi = 1;
|
||||
e_config_save_queue();
|
||||
}
|
||||
CONFIG_VERSION_CHECK(35)
|
||||
{
|
||||
CONFIG_VERSION_UPDATE_INFO(35);
|
||||
e_config->backlight.ddc = 1;
|
||||
e_config_save_queue();
|
||||
}
|
||||
}
|
||||
elm_config_profile_set(_e_config_profile);
|
||||
if (!e_config->remember_internal_fm_windows)
|
||||
|
@ -1912,6 +1905,8 @@ e_config_load(void)
|
|||
E_CONFIG_LIMIT(e_config->desk_auto_switch, 0, 1);
|
||||
|
||||
E_CONFIG_LIMIT(e_config->screen_limits, 0, 2);
|
||||
E_CONFIG_LIMIT(e_config->thumb_nice, -20, 20);
|
||||
E_CONFIG_LIMIT(e_config->gesture_open_input_devices, 0, 1);
|
||||
|
||||
E_CONFIG_LIMIT(e_config->dpms_enable, 0, 1);
|
||||
E_CONFIG_LIMIT(e_config->dpms_standby_enable, 0, 1);
|
||||
|
@ -1992,6 +1987,7 @@ e_config_load(void)
|
|||
E_CONFIG_LIMIT(e_config->backlight.normal, 0.05, 1.0);
|
||||
E_CONFIG_LIMIT(e_config->backlight.dim, 0.05, 1.0);
|
||||
E_CONFIG_LIMIT(e_config->backlight.idle_dim, 0, 1);
|
||||
E_CONFIG_LIMIT(e_config->backlight.ddc, 0, 1);
|
||||
|
||||
E_CONFIG_LIMIT(e_config->keyboard.repeat_delay, -1, 1000); // 1 second
|
||||
E_CONFIG_LIMIT(e_config->keyboard.repeat_rate, -1, 1000); // 1 second
|
||||
|
@ -2205,16 +2201,21 @@ e_config_domain_load(const char *domain, E_Config_DD *edd)
|
|||
|
||||
for (i = 1; i <= _e_config_revisions; i++)
|
||||
{
|
||||
e_user_dir_snprintf(buf, sizeof(buf), "config/%s/%s.%i.cfg",
|
||||
e_user_dir_snprintf(buf, sizeof(buf), "config/%s/%s.cfg.%i",
|
||||
_e_config_profile, domain, i);
|
||||
ef = eet_open(buf, EET_FILE_MODE_READ);
|
||||
if (ef)
|
||||
{
|
||||
printf("CF: warning - falling back to %s\n", buf);
|
||||
data = eet_data_read(ef, edd, "config");
|
||||
eet_close(ef);
|
||||
if (data) return data;
|
||||
printf("CF: warning - fallback to %s can't read config\n", buf);
|
||||
}
|
||||
else if (ecore_file_exists(buf))
|
||||
printf("CF: warning - fallback to %s failing to open\n", buf);
|
||||
}
|
||||
printf("CF: fallback to system config config file for [%s]\n", domain);
|
||||
return e_config_domain_system_load(domain, edd);
|
||||
}
|
||||
|
||||
|
@ -2234,6 +2235,7 @@ e_config_domain_system_load(const char *domain, E_Config_DD *edd)
|
|||
eet_close(ef);
|
||||
return data;
|
||||
}
|
||||
printf("CF: system config load for %s failed\n", buf);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
|
|
@ -47,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 34
|
||||
#define E_CONFIG_FILE_GENERATION 35
|
||||
#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!!!!!
|
||||
|
@ -291,6 +291,8 @@ struct _E_Config
|
|||
|
||||
int thumb_nice;
|
||||
|
||||
unsigned char gesture_open_input_devices; // GUI
|
||||
|
||||
int ping_clients_interval; // GUI
|
||||
|
||||
int thumbscroll_enable; // GUI
|
||||
|
@ -371,6 +373,7 @@ struct _E_Config
|
|||
double battery_timer; // GUI
|
||||
const char *sysdev; // GUI
|
||||
unsigned char idle_dim; // GUI
|
||||
unsigned char ddc; // GUI
|
||||
} backlight;
|
||||
|
||||
struct
|
||||
|
|
|
@ -454,8 +454,9 @@ e_desk_last_focused_focus(E_Desk *desk)
|
|||
evas_object_raise(ecs->frame);
|
||||
return ecs;
|
||||
}
|
||||
if (e_client_focused_get())
|
||||
if (e_client_focused_get()) {
|
||||
evas_object_focus_set(e_client_focused_get()->frame, 0);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -318,6 +318,7 @@ _desklock_show_internal(Eina_Bool suspend)
|
|||
|
||||
if (getenv("E_START_MANAGER")) kill(getppid(), SIGUSR2);
|
||||
_e_desklock_state = EINA_TRUE;
|
||||
e_sys_locked_set(_e_desklock_state);
|
||||
e_bindings_disabled_set(1);
|
||||
e_screensaver_update();
|
||||
e_dpms_force_update();
|
||||
|
@ -386,6 +387,7 @@ _desklock_hide_internal(void)
|
|||
}
|
||||
|
||||
_e_desklock_state = EINA_FALSE;
|
||||
e_sys_locked_set(_e_desklock_state);
|
||||
e_bindings_disabled_set(0);
|
||||
ev = E_NEW(E_Event_Desklock, 1);
|
||||
ev->on = 0;
|
||||
|
|
|
@ -79,6 +79,7 @@ _e_deskmirror_visible_get(E_Smart_Data *sd, Mirror *m)
|
|||
*/
|
||||
if (m->sd->handlers && m->ec->iconic)
|
||||
visible = evas_object_visible_get(m->ec->frame);
|
||||
if (m->ec->iconic) visible = EINA_FALSE;
|
||||
if (visible)
|
||||
{
|
||||
visible = (sd->desk == m->ec->desk) || (m->ec->sticky && (!m->ec->hidden));
|
||||
|
@ -592,7 +593,7 @@ _e_deskmirror_mirror_setup(Mirror *m)
|
|||
evas_object_pass_events_set(m->mirror, !m->ec);
|
||||
}
|
||||
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 || m->ec->shaped_input));
|
||||
evas_object_precise_is_inside_set(m->mirror, m->ec && (m->ec->shaped));
|
||||
e_layout_pack(m->sd->layout, m->mirror);
|
||||
_e_deskmirror_mirror_reconfigure(m);
|
||||
if (m->sd->handlers) // no handlers = we're setting up = there's no possible listeners
|
||||
|
|
|
@ -104,6 +104,7 @@ _e_exec_recent_exists_filter(void)
|
|||
{
|
||||
_e_exec_recent->files =
|
||||
eina_list_remove_list(_e_exec_recent->files, l);
|
||||
eina_stringshare_del(fl->file);
|
||||
free(fl);
|
||||
}
|
||||
}
|
||||
|
@ -160,7 +161,7 @@ _e_exec_recent_load(void)
|
|||
}
|
||||
fl->file = eina_stringshare_add(buf);
|
||||
fl->timestamp = (double)timi / 100.0;
|
||||
_e_exec_recent->files = eina_list_prepend(_e_exec_recent->files, fl);
|
||||
_e_exec_recent->files = eina_list_append(_e_exec_recent->files, fl);
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
|
|
|
@ -35,8 +35,9 @@ e_focus_event_mouse_out(E_Client *ec)
|
|||
{
|
||||
if (!ec->lock_focus_in)
|
||||
{
|
||||
if (ec->focused)
|
||||
evas_object_focus_set(ec->frame, 0);
|
||||
if (ec->focused) {
|
||||
e_client_revert_focus(ec);
|
||||
}
|
||||
}
|
||||
}
|
||||
E_FREE_FUNC(ec->raise_timer, ecore_timer_del);
|
||||
|
|
|
@ -1821,7 +1821,6 @@ e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu_gadget
|
|||
else if ((!gcc->style) &&
|
||||
(!e_util_strcmp(gcc->client_class->default_style, E_GADCON_CLIENT_STYLE_PLAIN)))
|
||||
e_menu_item_toggle_set(mi, 1);
|
||||
e_menu_item_disabled_set(mi, mi->toggle);
|
||||
e_menu_item_callback_set(mi, _e_gadcon_client_cb_menu_style_plain, gcc);
|
||||
|
||||
mi = e_menu_item_new(mo);
|
||||
|
@ -1834,7 +1833,6 @@ e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu_gadget
|
|||
else if ((!gcc->style) &&
|
||||
(!e_util_strcmp(gcc->client_class->default_style, E_GADCON_CLIENT_STYLE_INSET)))
|
||||
e_menu_item_toggle_set(mi, 1);
|
||||
e_menu_item_disabled_set(mi, mi->toggle);
|
||||
e_menu_item_callback_set(mi, _e_gadcon_client_cb_menu_style_inset, gcc);
|
||||
|
||||
mi = e_menu_item_new(menu_gadget);
|
||||
|
|
|
@ -22,6 +22,7 @@ typedef struct {
|
|||
static int gesture_capable_devices = 0;
|
||||
static E_Bindings_Swipe_Live_Update live_update;
|
||||
static void* live_update_data;
|
||||
static Eina_List *handlers = NULL;
|
||||
|
||||
static Swipe_Stats*
|
||||
_find_swipe_gesture_recognizition(Elput_Device *dev)
|
||||
|
@ -208,10 +209,41 @@ _shutdown_for_x11(void)
|
|||
elput_shutdown();
|
||||
}
|
||||
|
||||
static int
|
||||
_detect_vm(void)
|
||||
{
|
||||
static int on_vm = -1;
|
||||
int ret;
|
||||
|
||||
if (on_vm >= 0) return on_vm;
|
||||
ret = system("systemd-detect-virt");
|
||||
if (ret == 0) on_vm = 1;
|
||||
else if (ret == 1) on_vm = 0;
|
||||
else
|
||||
{
|
||||
ret = system("hostnamectl status | grep 'Chassis: vm'");
|
||||
if (ret == 0) on_vm = 1;
|
||||
else if (ret == 1) on_vm = 0;
|
||||
// fallback to assuming not on vm
|
||||
else on_vm = 0;
|
||||
}
|
||||
return on_vm;
|
||||
}
|
||||
|
||||
E_API int
|
||||
e_gesture_init(void)
|
||||
{
|
||||
// we have some bizarre bug on vbox -> this causes xorg to stop displaying
|
||||
// the screen output even though it's rendered and you can grab it through
|
||||
// screenshots, xrandr reports a perfectly well configured display.
|
||||
// somehow using elput to get input devices from logind causes xorg
|
||||
// internally to not handle e's first restart after wizard - as if
|
||||
// the xserver goes into some bixarre internal state - it doesn't report
|
||||
// any errors though. this works around that by just avoiding the gesture
|
||||
// support on vm's - they wont have touchpads anyway as they will emulate
|
||||
// a normal mouse mostly... :)
|
||||
if (_detect_vm()) return 1;
|
||||
|
||||
if (e_comp->comp_type == E_PIXMAP_TYPE_X)
|
||||
{
|
||||
_init_for_x11();
|
||||
|
@ -219,10 +251,10 @@ e_gesture_init(void)
|
|||
|
||||
active_gestures = eina_hash_pointer_new(_stats_free);
|
||||
|
||||
ecore_event_handler_add(ELPUT_EVENT_SWIPE_BEGIN, _swipe_cb, NULL);
|
||||
ecore_event_handler_add(ELPUT_EVENT_SWIPE_UPDATE, _swipe_cb, NULL);
|
||||
ecore_event_handler_add(ELPUT_EVENT_SWIPE_END, _swipe_cb, NULL);
|
||||
ecore_event_handler_add(ELPUT_EVENT_SEAT_CAPS, _debug, NULL);
|
||||
E_LIST_HANDLER_APPEND(handlers, ELPUT_EVENT_SWIPE_BEGIN, _swipe_cb, NULL);
|
||||
E_LIST_HANDLER_APPEND(handlers, ELPUT_EVENT_SWIPE_UPDATE, _swipe_cb, NULL);
|
||||
E_LIST_HANDLER_APPEND(handlers, ELPUT_EVENT_SWIPE_END, _swipe_cb, NULL);
|
||||
E_LIST_HANDLER_APPEND(handlers, ELPUT_EVENT_SEAT_CAPS, _debug, NULL);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -230,6 +262,21 @@ e_gesture_init(void)
|
|||
E_API int
|
||||
e_gesture_shutdown(void)
|
||||
{
|
||||
Ecore_Event_Handler *hand;
|
||||
|
||||
if (_detect_vm()) return 1;
|
||||
|
||||
if (active_gestures)
|
||||
{
|
||||
eina_hash_free(active_gestures);
|
||||
active_gestures = NULL;
|
||||
}
|
||||
|
||||
EINA_LIST_FREE(handlers, hand)
|
||||
{
|
||||
ecore_event_handler_del(hand);
|
||||
}
|
||||
|
||||
if (e_comp->comp_type == E_PIXMAP_TYPE_X)
|
||||
{
|
||||
_shutdown_for_x11();
|
||||
|
|
|
@ -174,6 +174,7 @@ e_icon_file_set(Evas_Object *obj, const char *file)
|
|||
|
||||
if ((sd->url) && (!strcmp(sd->url, file))) return;
|
||||
/* smart code here */
|
||||
sd->edje = EINA_FALSE;
|
||||
_e_icon_obj_prepare(obj, sd);
|
||||
/* FIXME: 64x64 - unhappy about this. use icon size */
|
||||
sd->loading = 0;
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
"terminology.desktop",
|
||||
"xterm.desktop",
|
||||
"rxvt.desktop",
|
||||
"gnome-terminal.desktop",
|
||||
"konsole.desktop",
|
||||
"Alacritty.desktop",
|
||||
"cool-retro-term.desktop",
|
||||
"kitty.desktop",
|
||||
"urxvt.desktop",
|
||||
"terminator.desktop",
|
||||
"termite.desktop",
|
||||
"qterminal.desktop",
|
||||
"xfce4-terminal.desktop",
|
||||
"lxterminal.desktop",
|
||||
"com.gexperts.Tilix.desktop",
|
||||
"deepin-terminal.desktop",
|
|
@ -155,6 +155,7 @@
|
|||
#include "e_comp_x_randr.h"
|
||||
#include "e_watchdog.h"
|
||||
#include "e_gesture.h"
|
||||
#include "e_sound.h"
|
||||
|
||||
#ifdef HAVE_WAYLAND
|
||||
# include "e_comp_wl.h"
|
||||
|
|
|
@ -72,6 +72,7 @@ e_int_client_prop(E_Client *ec)
|
|||
if (ec->border_prop_dialog) return;
|
||||
|
||||
dia = e_dialog_new(NULL, "E", "_window_props");
|
||||
e_dialog_resizable_set(dia, 1);
|
||||
e_object_del_attach_func_set(E_OBJECT(dia), _ec_cb_dialog_del);
|
||||
|
||||
_create_data(dia, ec);
|
||||
|
@ -455,30 +456,30 @@ _ec_icccm_create(E_Dialog *dia, void *data EINA_UNUSED)
|
|||
e_widget_toolbook_page_append(otb, NULL, _("General"), o, 1, 1, 1, 1, 0.5, 0.0);
|
||||
|
||||
o = e_widget_table_add(e_win_evas_win_get(evas), 0);
|
||||
STR_ENTRY(_("Minimum Size"), 0, 6, icccm.min);
|
||||
STR_ENTRY(_("Maximum Size"), 0, 7, icccm.max);
|
||||
STR_ENTRY(_("Base Size"), 0, 8, icccm.base);
|
||||
STR_ENTRY(_("Resize Steps"), 0, 9, icccm.step);
|
||||
STR_ENTRY(_("Minimum Size"), 0, 0, icccm.min);
|
||||
STR_ENTRY(_("Maximum Size"), 0, 1, icccm.max);
|
||||
STR_ENTRY(_("Base Size"), 0, 2, icccm.base);
|
||||
STR_ENTRY(_("Resize Steps"), 0, 3, icccm.step);
|
||||
e_widget_toolbook_page_append(otb, NULL, _("Sizing"), o, 1, 1, 1, 1, 0.5, 0.0);
|
||||
|
||||
o = e_widget_table_add(e_win_evas_win_get(evas), 0);
|
||||
STR_ENTRY(_("Aspect Ratio"), 2, 0, icccm.aspect);
|
||||
STR_ENTRY(_("Initial State"), 2, 1, icccm.initial_state);
|
||||
STR_ENTRY(_("State"), 2, 2, icccm.state);
|
||||
STR_ENTRY(_("Window ID"), 2, 3, icccm.window_id);
|
||||
STR_ENTRY(_("Window Group"), 2, 4, icccm.window_group);
|
||||
STR_ENTRY(_("Transient For"), 2, 5, icccm.transient_for);
|
||||
STR_ENTRY(_("Client Leader"), 2, 6, icccm.client_leader);
|
||||
STR_ENTRY(_("Gravity"), 2, 7, icccm.gravity);
|
||||
STR_ENTRY(_("Command"), 2, 8, icccm.command);
|
||||
STR_ENTRY(_("Aspect Ratio"), 0, 0, icccm.aspect);
|
||||
STR_ENTRY(_("Initial State"), 0, 1, icccm.initial_state);
|
||||
STR_ENTRY(_("State"), 0, 2, icccm.state);
|
||||
STR_ENTRY(_("Window ID"), 0, 3, icccm.window_id);
|
||||
STR_ENTRY(_("Window Group"), 0, 4, icccm.window_group);
|
||||
STR_ENTRY(_("Transient For"), 0, 5, icccm.transient_for);
|
||||
STR_ENTRY(_("Client Leader"), 0, 6, icccm.client_leader);
|
||||
STR_ENTRY(_("Gravity"), 0, 7, icccm.gravity);
|
||||
STR_ENTRY(_("Command"), 0, 8, icccm.command);
|
||||
e_widget_toolbook_page_append(otb, NULL, _("States"), o, 1, 1, 1, 1, 0.5, 0.0);
|
||||
|
||||
o = e_widget_table_add(e_win_evas_win_get(evas), 0);
|
||||
CHK_ENTRY(_("Take Focus"), 0, 11, icccm.take_focus);
|
||||
CHK_ENTRY(_("Accepts Focus"), 0, 12, icccm.accepts_focus);
|
||||
CHK_ENTRY(_("Urgent"), 0, 13, icccm.urgent);
|
||||
CHK_ENTRY(_("Request Delete"), 2, 11, icccm.delete_request);
|
||||
CHK_ENTRY(_("Request Position"), 2, 12, icccm.request_pos);
|
||||
CHK_ENTRY(_("Take Focus"), 0, 0, icccm.take_focus);
|
||||
CHK_ENTRY(_("Accepts Focus"), 0, 1, icccm.accepts_focus);
|
||||
CHK_ENTRY(_("Urgent"), 0, 2, icccm.urgent);
|
||||
CHK_ENTRY(_("Request Delete"), 2, 0, icccm.delete_request);
|
||||
CHK_ENTRY(_("Request Position"), 2, 1, icccm.request_pos);
|
||||
e_widget_toolbook_page_append(otb, NULL, _("Settings"), o, 1, 1, 1, 1, 0.5, 0.0);
|
||||
e_widget_toolbook_page_show(otb, 0);
|
||||
|
||||
|
@ -501,19 +502,19 @@ _ec_netwm_create(E_Dialog *dia, void *data EINA_UNUSED)
|
|||
evas = evas_object_evas_get(dia->win);
|
||||
otb = e_widget_toolbook_add(evas, 48 * e_scale, 48 * e_scale);
|
||||
o = e_widget_table_add(e_win_evas_win_get(evas), 0);
|
||||
STR_ENTRY(_("Name"), 0, 1, netwm.name);
|
||||
STR_ENTRY(_("Icon Name"), 0, 2, netwm.icon_name);
|
||||
STR_ENTRY(_("Stacking"), 0, 3, netwm.stacking);
|
||||
STR_ENTRY(_("Name"), 0, 0, netwm.name);
|
||||
STR_ENTRY(_("Icon Name"), 0, 1, netwm.icon_name);
|
||||
STR_ENTRY(_("Stacking"), 0, 2, netwm.stacking);
|
||||
e_widget_toolbook_page_append(otb, NULL, _("General"), o, 1, 1, 1, 1, 0.5, 0.0);
|
||||
|
||||
o = e_widget_table_add(e_win_evas_win_get(evas), 0);
|
||||
CHK_ENTRY(_("Modal"), 0, 4, netwm.modal);
|
||||
CHK_ENTRY(_("Sticky"), 0, 5, netwm.sticky);
|
||||
CHK_ENTRY(_("Shaded"), 0, 6, netwm.shaded);
|
||||
CHK_ENTRY(_("Skip Taskbar"), 0, 7, netwm.skip_taskbar);
|
||||
CHK_ENTRY(_("Skip Pager"), 0, 8, netwm.skip_pager);
|
||||
CHK_ENTRY(_("Hidden"), 0, 9, netwm.hidden);
|
||||
CHK_ENTRY(_("Fullscreen"), 0, 10, netwm.fullscreen);
|
||||
CHK_ENTRY(_("Modal"), 0, 0, netwm.modal);
|
||||
CHK_ENTRY(_("Sticky"), 0, 1, netwm.sticky);
|
||||
CHK_ENTRY(_("Shaded"), 0, 2, netwm.shaded);
|
||||
CHK_ENTRY(_("Skip Taskbar"), 2, 0, netwm.skip_taskbar);
|
||||
CHK_ENTRY(_("Skip Pager"), 2, 1, netwm.skip_pager);
|
||||
CHK_ENTRY(_("Hidden"), 2, 2, netwm.hidden);
|
||||
CHK_ENTRY(_("Fullscreen"), 2, 3, netwm.fullscreen);
|
||||
e_widget_toolbook_page_append(otb, NULL, _("Settings"), o, 1, 1, 1, 1, 0.5, 0.0);
|
||||
e_widget_toolbook_page_show(otb, 0);
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ struct _Main_Data
|
|||
E_Menu *enlightenment;
|
||||
E_Menu *config;
|
||||
E_Menu *lost_clients;
|
||||
E_Menu *inhibitors;
|
||||
};
|
||||
|
||||
/* local subsystem functions */
|
||||
|
@ -63,6 +64,7 @@ static void _e_int_menus_desk_item_cb(void *data, E_Menu *m, E_Menu_Item
|
|||
static void _e_int_menus_item_label_set(Efreet_Menu *entry, E_Menu_Item *mi);
|
||||
static Efreet_Menu *_e_int_menus_apps_thread_new(E_Menu *m, const char *dir);
|
||||
static Eina_Bool _e_int_menus_efreet_desktop_cache_update(void *d, int type, void *e);
|
||||
static void _e_int_menus_inhibit_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
//static void _e_int_menus_apps_drag_finished(E_Drag *drag, int dropped EINA_UNUSED);
|
||||
|
||||
/* local subsystem globals */
|
||||
|
@ -194,6 +196,16 @@ e_int_menus_main_new(void)
|
|||
e_util_menu_item_theme_icon_set(mi, "preferences-desktop");
|
||||
e_menu_item_submenu_set(mi, subm);
|
||||
|
||||
if ((e_msgbus_data) && (e_msgbus_data->screensaver_inhibits))
|
||||
{
|
||||
subm = e_int_menus_inhibitors_new();
|
||||
dat->inhibitors = subm;
|
||||
mi = e_menu_item_new(m);
|
||||
e_menu_item_label_set(mi, _("Blanking Block"));
|
||||
e_util_menu_item_theme_icon_set(mi, "preferences-screen-normal");
|
||||
e_menu_item_submenu_set(mi, subm);
|
||||
}
|
||||
|
||||
subm = e_int_menus_clients_new();
|
||||
dat->clients = subm;
|
||||
mi = e_menu_item_new(m);
|
||||
|
@ -418,6 +430,46 @@ e_int_menus_lost_clients_new(void)
|
|||
return m;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_int_menus_inhibit_cb(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED)
|
||||
{
|
||||
uintptr_t cookie = (uintptr_t)data;
|
||||
|
||||
e_msgbus_screensaver_inhibit_remove((unsigned int)cookie);
|
||||
}
|
||||
|
||||
E_API E_Menu *
|
||||
e_int_menus_inhibitors_new(void)
|
||||
{
|
||||
E_Menu *m;
|
||||
E_Menu_Item *mi;
|
||||
Eina_List *l;
|
||||
E_Msgbus_Data_Screensaver_Inhibit *inhibit;
|
||||
char buf[1024];
|
||||
|
||||
m = e_menu_new();
|
||||
if (!((e_msgbus_data) && (e_msgbus_data->screensaver_inhibits)))
|
||||
return NULL;
|
||||
EINA_LIST_FOREACH(e_msgbus_data->screensaver_inhibits, l, inhibit)
|
||||
{
|
||||
mi = e_menu_item_new(m);
|
||||
if ((inhibit->application) && (inhibit->reason))
|
||||
snprintf(buf, sizeof(buf), "%s (%s)", inhibit->application, inhibit->reason);
|
||||
else if (inhibit->application)
|
||||
snprintf(buf, sizeof(buf), "%s", inhibit->application);
|
||||
else if (inhibit->reason)
|
||||
snprintf(buf, sizeof(buf), "(%s)", inhibit->reason);
|
||||
else
|
||||
snprintf(buf, sizeof(buf), "???");
|
||||
e_menu_item_label_set(mi, buf);
|
||||
e_menu_item_check_set(mi, 1);
|
||||
e_menu_item_toggle_set(mi, 1);
|
||||
e_menu_item_callback_set(mi, _e_int_menus_inhibit_cb,
|
||||
(void *)((uintptr_t)inhibit->cookie));
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
E_API E_Int_Menu_Augmentation *
|
||||
e_int_menus_menu_augmentation_add_sorted(const char *menu,
|
||||
const char *sort_key,
|
||||
|
@ -593,6 +645,7 @@ _e_int_menus_main_del_hook(void *obj)
|
|||
if (dat->lost_clients) e_object_del(E_OBJECT(dat->lost_clients));
|
||||
if (dat->enlightenment) e_object_del(E_OBJECT(dat->enlightenment));
|
||||
if (dat->config) e_object_del(E_OBJECT(dat->config));
|
||||
if (dat->inhibitors) e_object_del(E_OBJECT(dat->inhibitors));
|
||||
free(dat);
|
||||
|
||||
_e_int_menus_augmentation_del(m, _e_int_menus_augmentation_find("main/0"));
|
||||
|
|
|
@ -67,6 +67,7 @@ E_API E_Menu *e_int_menus_all_apps_new(void);
|
|||
E_API E_Menu *e_int_menus_config_new(void);
|
||||
E_API E_Menu *e_int_menus_lost_clients_new(void);
|
||||
E_API E_Menu *e_int_menus_shelves_new(void);
|
||||
E_API E_Menu *e_int_menus_inhibitors_new(void);
|
||||
|
||||
E_API E_Int_Menu_Augmentation *e_int_menus_menu_augmentation_add(const char *menu,
|
||||
void (*func_add) (void *data, E_Menu *m),
|
||||
|
|
|
@ -865,11 +865,7 @@ _e_intl_locale_system_locales_get(void)
|
|||
|
||||
locales = NULL;
|
||||
/* FIXME: Maybe needed for other BSD OS, or even Solaris */
|
||||
#ifdef __OpenBSD__
|
||||
output = popen("ls /usr/share/locale", "r");
|
||||
#else
|
||||
output = popen("locale -a", "r");
|
||||
#endif
|
||||
if (output)
|
||||
{
|
||||
char line[32];
|
||||
|
|
|
@ -800,6 +800,10 @@ main(int argc, char **argv)
|
|||
TS("E_Powersave Init Done");
|
||||
_e_main_shutdown_push(e_powersave_shutdown);
|
||||
|
||||
TS("E_Sound Init");
|
||||
e_sound_init();
|
||||
_e_main_shutdown_push(e_sound_shutdown);
|
||||
|
||||
TS("Screens Init");
|
||||
if (!_e_main_screens_init())
|
||||
{
|
||||
|
@ -1059,10 +1063,13 @@ main(int argc, char **argv)
|
|||
e_comp_canvas_keys_grab();
|
||||
TS("E_Comp_Canvas Keys Grab Done");
|
||||
#ifdef HAVE_ELPUT
|
||||
TS("E_Gesture Init");
|
||||
e_gesture_init();
|
||||
TS("E_Gesture Init Done");
|
||||
_e_main_shutdown_push(e_gesture_shutdown);
|
||||
if (e_config->gesture_open_input_devices)
|
||||
{
|
||||
TS("E_Gesture Init");
|
||||
e_gesture_init();
|
||||
TS("E_Gesture Init Done");
|
||||
_e_main_shutdown_push(e_gesture_shutdown);
|
||||
}
|
||||
#endif
|
||||
|
||||
TS("Run Startup Apps");
|
||||
|
@ -1113,7 +1120,7 @@ main(int argc, char **argv)
|
|||
E_LIST_FOREACH(e_comp->zones, e_comp_canvas_zone_restarted);
|
||||
}
|
||||
|
||||
// e_watchdog_begin();
|
||||
e_watchdog_begin();
|
||||
TS("MAIN LOOP AT LAST");
|
||||
if (!setjmp(x_fatal_buff))
|
||||
{
|
||||
|
@ -1122,7 +1129,7 @@ main(int argc, char **argv)
|
|||
}
|
||||
else
|
||||
CRI("FATAL: X Died. Connection gone. Abbreviated Shutdown\n");
|
||||
// e_watchdog_end();
|
||||
e_watchdog_end();
|
||||
e_main_loop_running = EINA_FALSE;
|
||||
|
||||
inloop = EINA_FALSE;
|
||||
|
@ -1247,7 +1254,7 @@ _e_main_parse_arguments(int argc, char **argv)
|
|||
(!strcmp(argv[i], "--version")))
|
||||
{
|
||||
printf(_("Version: %s\n"), PACKAGE_VERSION);
|
||||
_e_main_shutdown(0);
|
||||
_e_main_shutdown(11);
|
||||
}
|
||||
else if ((!strcmp(argv[i], "-h")) ||
|
||||
(!strcmp(argv[i], "-help")) ||
|
||||
|
@ -1256,31 +1263,31 @@ _e_main_parse_arguments(int argc, char **argv)
|
|||
printf
|
||||
(_(
|
||||
"Options:\n"
|
||||
"\t-display DISPLAY\n"
|
||||
"\t\tConnect to display named DISPLAY.\n"
|
||||
"\t\tEG: -display :1.0\n"
|
||||
"\t-fake-xinerama-screen WxH+X+Y\n"
|
||||
"\t\tAdd a FAKE xinerama screen (instead of the real ones)\n"
|
||||
"\t\tgiven the geometry. Add as many as you like. They all\n"
|
||||
"\t\treplace the real xinerama screens, if any. This can\n"
|
||||
"\t\tbe used to simulate xinerama.\n"
|
||||
"\t\tEG: -fake-xinerama-screen 800x600+0+0 -fake-xinerama-screen 800x600+800+0\n"
|
||||
"\t-profile CONF_PROFILE\n"
|
||||
"\t\tUse the configuration profile CONF_PROFILE instead of the user selected default or just \"default\".\n"
|
||||
"\t-good\n"
|
||||
"\t\tBe good.\n"
|
||||
"\t-evil\n"
|
||||
"\t\tBe evil.\n"
|
||||
"\t-psychotic\n"
|
||||
"\t\tBe psychotic.\n"
|
||||
"\t-locked\n"
|
||||
"\t\tStart with desklock on, so password will be asked.\n"
|
||||
"\t-i-really-know-what-i-am-doing-and-accept-full-responsibility-for-it\n"
|
||||
"\t\tIf you need this help, you don't need this option.\n"
|
||||
"\t-version\n"
|
||||
" -display DISPLAY\n"
|
||||
" Connect to display named DISPLAY.\n"
|
||||
" EG: -display :1.0\n"
|
||||
" -fake-xinerama-screen WxH+X+Y\n"
|
||||
" Add a FAKE xinerama screen (instead of the real ones)\n"
|
||||
" given the geometry. Add as many as you like. They all\n"
|
||||
" replace the real xinerama screens, if any. This can\n"
|
||||
" be used to simulate xinerama.\n"
|
||||
" EG: -fake-xinerama-screen 800x600+0+0 -fake-xinerama-screen 800x600+800+0\n"
|
||||
" -profile CONF_PROFILE\n"
|
||||
" Use the configuration profile CONF_PROFILE instead of the user selected default or just \"default\".\n"
|
||||
" -good\n"
|
||||
" Be good.\n"
|
||||
" -evil\n"
|
||||
" Be evil.\n"
|
||||
" -psychotic\n"
|
||||
" Be psychotic.\n"
|
||||
" -locked\n"
|
||||
" Start with desklock on, so password will be asked.\n"
|
||||
" -i-really-know-what-i-am-doing-and-accept-full-responsibility-for-it\n"
|
||||
" If you need this help, you don't need this option.\n"
|
||||
" -version\n"
|
||||
)
|
||||
);
|
||||
_e_main_shutdown(0);
|
||||
_e_main_shutdown(11);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1561,13 +1568,13 @@ _e_main_path_shutdown(void)
|
|||
static int
|
||||
_e_main_screens_init(void)
|
||||
{
|
||||
TS("\tscreens: client");
|
||||
TS(" screens: client");
|
||||
if (!e_client_init()) return 0;
|
||||
TS("E_Screensaver Init");
|
||||
if (!e_screensaver_init()) return 0;
|
||||
TS("\tscreens: client volume");
|
||||
TS(" screens: client volume");
|
||||
if (!e_client_volume_init()) return 0;
|
||||
TS("\tscreens: win");
|
||||
TS(" screens: win");
|
||||
if (!e_win_init()) return 0;
|
||||
TS("Compositor Init");
|
||||
if (!e_comp_init())
|
||||
|
|
|
@ -786,6 +786,7 @@ _e_module_whitelist_check(void)
|
|||
"policy_mobile",
|
||||
"geolocation",
|
||||
"xwayland",
|
||||
"procstats",
|
||||
NULL // end marker
|
||||
};
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
#include "e.h"
|
||||
|
||||
#define PATH "/org/enlightenment/wm/RemoteObject"
|
||||
|
||||
/* local subsystem functions */
|
||||
static void _e_msgbus_request_name_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define E_BUS "org.enlightenment.wm.service"
|
||||
#define E_IFACE "org.enlightenment.wm.Core"
|
||||
#define E_PATH "/org/enlightenment/wm/RemoteObject"
|
||||
static void _e_msgbus_core_request_name_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending);
|
||||
static Eldbus_Message *_e_msgbus_core_version_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
|
||||
static Eldbus_Message *_e_msgbus_core_restart_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
|
||||
static Eldbus_Message *_e_msgbus_core_shutdown_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
|
||||
|
||||
static const Eldbus_Method core_methods[] =
|
||||
static const Eldbus_Method _e_core_methods[] =
|
||||
{
|
||||
{ "Version", NULL, ELDBUS_ARGS({"s", "version"}), _e_msgbus_core_version_cb, 0 },
|
||||
{ "Restart", NULL, NULL, _e_msgbus_core_restart_cb, 0 },
|
||||
|
@ -17,65 +17,103 @@ static const Eldbus_Method core_methods[] =
|
|||
{ NULL, NULL, NULL, NULL, 0}
|
||||
};
|
||||
|
||||
static const Eldbus_Service_Interface_Desc core_desc = {
|
||||
"org.enlightenment.wm.Core", core_methods, NULL, NULL, NULL, NULL
|
||||
static const Eldbus_Service_Interface_Desc _e_core_desc = {
|
||||
E_IFACE, _e_core_methods, NULL, NULL, NULL, NULL
|
||||
};
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define SCREENSAVER_BUS "org.freedesktop.ScreenSaver"
|
||||
#define SCREENSAVER_IFACE "org.freedesktop.ScreenSaver"
|
||||
#define SCREENSAVER_PATH "/org/freedesktop/ScreenSaver"
|
||||
#define SCREENSAVER_PATH2 "/ScreenSaver"
|
||||
static void _e_msgbus_screensaver_request_name_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending);
|
||||
static void _e_msgbus_screensaver_inhibit_free(E_Msgbus_Data_Screensaver_Inhibit *inhibit);
|
||||
static void _e_msgbus_screensaver_owner_change_cb(void *data EINA_UNUSED, const char *bus, const char *old_id, const char *new_id);
|
||||
static Eldbus_Message *_e_msgbus_screensaver_inhibit_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
|
||||
static Eldbus_Message *_e_msgbus_screensaver_uninhibit_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
|
||||
static Eldbus_Message *_e_msgbus_screensaver_getactive_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
|
||||
|
||||
static const Eldbus_Method _screensaver_core_methods[] =
|
||||
{
|
||||
{ "Inhibit", ELDBUS_ARGS({"s", "application_name"}, {"s", "reason_for_inhibit"}), ELDBUS_ARGS({"u", "cookie"}), _e_msgbus_screensaver_inhibit_cb, 0 },
|
||||
{ "UnInhibit", ELDBUS_ARGS({"u", "cookie"}), NULL, _e_msgbus_screensaver_uninhibit_cb, 0 },
|
||||
{ "GetActive", NULL, ELDBUS_ARGS({"b", "active"}), _e_msgbus_screensaver_getactive_cb, 0 },
|
||||
{ NULL, NULL, NULL, NULL, 0}
|
||||
};
|
||||
|
||||
/* local subsystem globals */
|
||||
static E_Msgbus_Data *_e_msgbus_data = NULL;
|
||||
static const Eldbus_Service_Interface_Desc _screensaver_core_desc = {
|
||||
SCREENSAVER_IFACE, _screensaver_core_methods, NULL, NULL, NULL, NULL
|
||||
};
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
E_API E_Msgbus_Data *e_msgbus_data = NULL;
|
||||
|
||||
/* externally accessible functions */
|
||||
EINTERN int
|
||||
e_msgbus_init(void)
|
||||
{
|
||||
_e_msgbus_data = E_NEW(E_Msgbus_Data, 1);
|
||||
e_msgbus_data = E_NEW(E_Msgbus_Data, 1);
|
||||
|
||||
eldbus_init();
|
||||
|
||||
_e_msgbus_data->conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
|
||||
if (!_e_msgbus_data->conn)
|
||||
e_msgbus_data->conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
|
||||
if (!e_msgbus_data->conn)
|
||||
{
|
||||
WRN("Cannot get ELDBUS_CONNECTION_TYPE_SESSION");
|
||||
return 0;
|
||||
}
|
||||
e_msgbus_data->e_iface = eldbus_service_interface_register
|
||||
(e_msgbus_data->conn, E_PATH, &_e_core_desc);
|
||||
eldbus_name_request(e_msgbus_data->conn, E_BUS, 0,
|
||||
_e_msgbus_core_request_name_cb, NULL);
|
||||
|
||||
_e_msgbus_data->iface = eldbus_service_interface_register
|
||||
(_e_msgbus_data->conn, PATH, &core_desc);
|
||||
eldbus_name_request(_e_msgbus_data->conn,
|
||||
"org.enlightenment.wm.service",
|
||||
0, _e_msgbus_request_name_cb, NULL);
|
||||
e_msgbus_data->screensaver_iface = eldbus_service_interface_register
|
||||
(e_msgbus_data->conn, SCREENSAVER_PATH, &_screensaver_core_desc);
|
||||
e_msgbus_data->screensaver_iface2 = eldbus_service_interface_register
|
||||
(e_msgbus_data->conn, SCREENSAVER_PATH2, &_screensaver_core_desc);
|
||||
eldbus_name_request(e_msgbus_data->conn, SCREENSAVER_BUS, 0,
|
||||
_e_msgbus_screensaver_request_name_cb, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
||||
EINTERN int
|
||||
e_msgbus_shutdown(void)
|
||||
{
|
||||
if (_e_msgbus_data->iface)
|
||||
eldbus_service_object_unregister(_e_msgbus_data->iface);
|
||||
if (_e_msgbus_data->conn)
|
||||
E_Msgbus_Data_Screensaver_Inhibit *inhibit;
|
||||
|
||||
if (e_msgbus_data->screensaver_iface2)
|
||||
eldbus_service_object_unregister(e_msgbus_data->screensaver_iface2);
|
||||
if (e_msgbus_data->screensaver_iface)
|
||||
eldbus_service_object_unregister(e_msgbus_data->screensaver_iface);
|
||||
if (e_msgbus_data->e_iface)
|
||||
eldbus_service_object_unregister(e_msgbus_data->e_iface);
|
||||
if (e_msgbus_data->conn)
|
||||
{
|
||||
eldbus_name_release(_e_msgbus_data->conn,
|
||||
"org.enlightenment.wm.service",
|
||||
NULL, NULL);
|
||||
eldbus_connection_unref(_e_msgbus_data->conn);
|
||||
eldbus_name_release(e_msgbus_data->conn, E_BUS, NULL, NULL);
|
||||
eldbus_connection_unref(e_msgbus_data->conn);
|
||||
}
|
||||
eldbus_shutdown();
|
||||
|
||||
E_FREE(_e_msgbus_data);
|
||||
_e_msgbus_data = NULL;
|
||||
EINA_LIST_FREE(e_msgbus_data->screensaver_inhibits, inhibit)
|
||||
_e_msgbus_screensaver_inhibit_free(inhibit);
|
||||
|
||||
E_FREE(e_msgbus_data);
|
||||
return 1;
|
||||
}
|
||||
|
||||
E_API Eldbus_Service_Interface *
|
||||
e_msgbus_interface_attach(const Eldbus_Service_Interface_Desc *desc)
|
||||
{
|
||||
if (!_e_msgbus_data->iface) return NULL;
|
||||
return eldbus_service_interface_register(_e_msgbus_data->conn, PATH, desc);
|
||||
if (!e_msgbus_data->e_iface) return NULL;
|
||||
return eldbus_service_interface_register(e_msgbus_data->conn, E_PATH, desc);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
static void
|
||||
_e_msgbus_request_name_cb(void *data EINA_UNUSED, const Eldbus_Message *msg,
|
||||
Eldbus_Pending *pending EINA_UNUSED)
|
||||
_e_msgbus_core_request_name_cb(void *data EINA_UNUSED,
|
||||
const Eldbus_Message *msg,
|
||||
Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
unsigned int flag;
|
||||
|
||||
|
@ -84,23 +122,21 @@ _e_msgbus_request_name_cb(void *data EINA_UNUSED, const Eldbus_Message *msg,
|
|||
ERR("Could not request bus name");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "u", &flag))
|
||||
{
|
||||
ERR("Could not get arguments on on_name_request");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(flag & ELDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER))
|
||||
WRN("Name already in use\n");
|
||||
WRN("Enlightenment core name already in use\n");
|
||||
}
|
||||
|
||||
/* Core Handlers */
|
||||
static Eldbus_Message *
|
||||
_e_msgbus_core_version_cb(const Eldbus_Service_Interface *iface EINA_UNUSED,
|
||||
const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(reply, NULL);
|
||||
eldbus_message_arguments_append(reply, "s", VERSION);
|
||||
return reply;
|
||||
|
@ -127,3 +163,171 @@ _e_msgbus_core_shutdown_cb(const Eldbus_Service_Interface *iface EINA_UNUSED,
|
|||
e_sys_action_do(E_SYS_EXIT, NULL);
|
||||
return eldbus_message_method_return_new(msg);
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
static void
|
||||
_e_msgbus_screensaver_request_name_cb(void *data EINA_UNUSED,
|
||||
const Eldbus_Message *msg,
|
||||
Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
unsigned int flag;
|
||||
|
||||
if (eldbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
ERR("Could not request bus name");
|
||||
return;
|
||||
}
|
||||
if (!eldbus_message_arguments_get(msg, "u", &flag))
|
||||
{
|
||||
ERR("Could not get arguments on on_name_request");
|
||||
return;
|
||||
}
|
||||
if (!(flag & ELDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER))
|
||||
WRN("Screensaver name already in use\n");
|
||||
}
|
||||
|
||||
static void
|
||||
_e_msgbus_screensaver_inhibit_free(E_Msgbus_Data_Screensaver_Inhibit *inhibit)
|
||||
{
|
||||
printf("INH: inhibit remove %i [%s] [%s] [%s]\n", inhibit->cookie, inhibit->application, inhibit->reason, inhibit->sender);
|
||||
if (inhibit->application) eina_stringshare_del(inhibit->application);
|
||||
if (inhibit->reason) eina_stringshare_del(inhibit->reason);
|
||||
if (inhibit->sender)
|
||||
{
|
||||
eldbus_name_owner_changed_callback_del(e_msgbus_data->conn,
|
||||
inhibit->sender,
|
||||
_e_msgbus_screensaver_owner_change_cb,
|
||||
NULL);
|
||||
eina_stringshare_del(inhibit->sender);
|
||||
}
|
||||
free(inhibit);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_msgbus_screensaver_owner_change_cb(void *data EINA_UNUSED, const char *bus EINA_UNUSED, const char *old_id, const char *new_id)
|
||||
{
|
||||
Eina_List *l, *ll;
|
||||
E_Msgbus_Data_Screensaver_Inhibit *inhibit;
|
||||
Eina_Bool removed = EINA_FALSE;
|
||||
|
||||
printf("INH: owner change... [%s] [%s] [%s]\n", bus, old_id, new_id);
|
||||
if ((new_id) && (!new_id[0]))
|
||||
{
|
||||
EINA_LIST_FOREACH_SAFE(e_msgbus_data->screensaver_inhibits, l, ll, inhibit)
|
||||
{
|
||||
if ((inhibit->sender) && (!strcmp(inhibit->sender, old_id)))
|
||||
{
|
||||
_e_msgbus_screensaver_inhibit_free(inhibit);
|
||||
e_msgbus_data->screensaver_inhibits =
|
||||
eina_list_remove_list
|
||||
(e_msgbus_data->screensaver_inhibits, l);
|
||||
removed = EINA_TRUE;
|
||||
}
|
||||
}
|
||||
if ((removed) && (!e_msgbus_data->screensaver_inhibits))
|
||||
{
|
||||
// stop inhibiting SS
|
||||
e_screensaver_update();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_e_msgbus_screensaver_inhibit_cb(const Eldbus_Service_Interface *iface EINA_UNUSED,
|
||||
const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = NULL;
|
||||
static unsigned int cookie = 1;
|
||||
const char *application_name = NULL, *reason_for_inhibit = NULL;
|
||||
E_Msgbus_Data_Screensaver_Inhibit *inhibit;
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "ss",
|
||||
&application_name, &reason_for_inhibit))
|
||||
{
|
||||
ERR("Can't get application_name and reason_for_inhibit");
|
||||
goto err;
|
||||
}
|
||||
inhibit = E_NEW(E_Msgbus_Data_Screensaver_Inhibit, 1);
|
||||
if (inhibit)
|
||||
{
|
||||
cookie++;
|
||||
inhibit->application = eina_stringshare_add(application_name);
|
||||
inhibit->reason = eina_stringshare_add(reason_for_inhibit);
|
||||
inhibit->sender = eina_stringshare_add(eldbus_message_sender_get(msg));
|
||||
if (inhibit->sender)
|
||||
eldbus_name_owner_changed_callback_add(e_msgbus_data->conn,
|
||||
inhibit->sender,
|
||||
_e_msgbus_screensaver_owner_change_cb,
|
||||
NULL, EINA_FALSE);
|
||||
inhibit->cookie = cookie;
|
||||
printf("INH: inhibit [%s] [%s] [%s] -> %i\n", inhibit->application, inhibit->reason, inhibit->sender, inhibit->cookie);
|
||||
e_msgbus_data->screensaver_inhibits =
|
||||
eina_list_append(e_msgbus_data->screensaver_inhibits, inhibit);
|
||||
reply = eldbus_message_method_return_new(msg);
|
||||
if (reply)
|
||||
eldbus_message_arguments_append(reply, "u", inhibit->cookie);
|
||||
}
|
||||
if ((e_msgbus_data->screensaver_inhibits) &&
|
||||
(eina_list_count(e_msgbus_data->screensaver_inhibits) == 1))
|
||||
{
|
||||
// start inhibiting SS
|
||||
e_screensaver_deactivate();
|
||||
e_screensaver_update();
|
||||
}
|
||||
err:
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_e_msgbus_screensaver_uninhibit_cb(const Eldbus_Service_Interface *iface EINA_UNUSED,
|
||||
const Eldbus_Message *msg)
|
||||
{
|
||||
unsigned int cookie = 0;
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "u", &cookie))
|
||||
return NULL;
|
||||
e_msgbus_screensaver_inhibit_remove(cookie);
|
||||
return eldbus_message_method_return_new(msg);
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_e_msgbus_screensaver_getactive_cb(const Eldbus_Service_Interface *iface EINA_UNUSED,
|
||||
const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = NULL;
|
||||
|
||||
reply = eldbus_message_method_return_new(msg);
|
||||
printf("INH: getactive = %i\n", e_screensaver_on_get());
|
||||
if (reply)
|
||||
eldbus_message_arguments_append(reply, "b", e_screensaver_on_get());
|
||||
return reply;
|
||||
}
|
||||
|
||||
E_API void
|
||||
e_msgbus_screensaver_inhibit_remove(unsigned int cookie)
|
||||
{
|
||||
Eina_Bool removed = EINA_FALSE;
|
||||
Eina_List *l;
|
||||
E_Msgbus_Data_Screensaver_Inhibit *inhibit;
|
||||
|
||||
EINA_LIST_FOREACH(e_msgbus_data->screensaver_inhibits, l, inhibit)
|
||||
{
|
||||
if (inhibit->cookie == cookie)
|
||||
{
|
||||
_e_msgbus_screensaver_inhibit_free(inhibit);
|
||||
e_msgbus_data->screensaver_inhibits =
|
||||
eina_list_remove_list
|
||||
(e_msgbus_data->screensaver_inhibits, l);
|
||||
removed = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((removed) && (!e_msgbus_data->screensaver_inhibits))
|
||||
{
|
||||
// stop inhibiting SS
|
||||
e_screensaver_update();
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#ifdef E_TYPEDEFS
|
||||
|
||||
typedef struct _E_Msgbus_Data E_Msgbus_Data;
|
||||
typedef struct _E_Msgbus_Data E_Msgbus_Data;
|
||||
typedef struct _E_Msgbus_Data_Screensaver_Inhibit E_Msgbus_Data_Screensaver_Inhibit;
|
||||
|
||||
#else
|
||||
#ifndef E_MSGBUS_H
|
||||
|
@ -10,13 +11,27 @@ typedef struct _E_Msgbus_Data E_Msgbus_Data;
|
|||
|
||||
struct _E_Msgbus_Data
|
||||
{
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Service_Interface *iface;
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Service_Interface *e_iface;
|
||||
Eldbus_Service_Interface *screensaver_iface;
|
||||
Eldbus_Service_Interface *screensaver_iface2;
|
||||
Eina_List *screensaver_inhibits;
|
||||
};
|
||||
|
||||
struct _E_Msgbus_Data_Screensaver_Inhibit
|
||||
{
|
||||
const char *application;
|
||||
const char *reason;
|
||||
const char *sender;
|
||||
unsigned int cookie;
|
||||
};
|
||||
|
||||
EINTERN int e_msgbus_init(void);
|
||||
EINTERN int e_msgbus_shutdown(void);
|
||||
E_API Eldbus_Service_Interface *e_msgbus_interface_attach(const Eldbus_Service_Interface_Desc *desc);
|
||||
E_API void e_msgbus_screensaver_inhibit_remove(unsigned int cookie);
|
||||
|
||||
E_API extern E_Msgbus_Data *e_msgbus_data;
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
typedef struct _Notification_Data
|
||||
{
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Service_Interface *iface;
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Service_Interface *iface;
|
||||
E_Notification_Notify_Cb notify_cb;
|
||||
E_Notification_Close_Cb close_cb;
|
||||
void *data;
|
||||
|
@ -15,15 +15,28 @@ static Notification_Data *n_data = NULL;
|
|||
static void
|
||||
_notification_free(E_Notification_Notify *notify)
|
||||
{
|
||||
int i;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN(notify);
|
||||
eina_stringshare_del(notify->app_name);
|
||||
eina_stringshare_del(notify->body);
|
||||
eina_stringshare_del(notify->icon.icon);
|
||||
if (notify->icon.icon_path)
|
||||
eina_stringshare_del(notify->icon.icon_path);
|
||||
eina_stringshare_del(notify->summary);
|
||||
if (notify->icon.raw.data)
|
||||
free(notify->icon.raw.data);
|
||||
if (notify->app_name) eina_stringshare_del(notify->app_name);
|
||||
if (notify->body) eina_stringshare_del(notify->body);
|
||||
if (notify->icon.icon) eina_stringshare_del(notify->icon.icon);
|
||||
if (notify->icon.icon_path) eina_stringshare_del(notify->icon.icon_path);
|
||||
if (notify->summary) eina_stringshare_del(notify->summary);
|
||||
if (notify->icon.raw.data) free(notify->icon.raw.data);
|
||||
if (notify->category) eina_stringshare_del(notify->category);
|
||||
if (notify->desktop_entry) eina_stringshare_del(notify->desktop_entry);
|
||||
if (notify->sound_file) eina_stringshare_del(notify->sound_file);
|
||||
if (notify->sound_name) eina_stringshare_del(notify->sound_name);
|
||||
if (notify->actions)
|
||||
{
|
||||
for (i = 0; notify->actions[i].action; i++)
|
||||
{
|
||||
eina_stringshare_del(notify->actions[i].action);
|
||||
eina_stringshare_del(notify->actions[i].label);
|
||||
}
|
||||
free(notify->actions);
|
||||
}
|
||||
free(notify);
|
||||
}
|
||||
|
||||
|
@ -31,12 +44,15 @@ static void
|
|||
hints_dict_iter(void *data, const void *key, Eldbus_Message_Iter *var)
|
||||
{
|
||||
E_Notification_Notify *n = data;
|
||||
if (!strcmp(key, "image-data") || !strcmp(key, "image_data"))
|
||||
|
||||
if ((!strcmp(key, "image-data")) || (!strcmp(key, "image_data")) ||
|
||||
(!strcmp(key, "icon_data")))
|
||||
{
|
||||
Eldbus_Message_Iter *st, *data_iter;
|
||||
int w, h, r, bits, channels;
|
||||
Eina_Bool alpha;
|
||||
unsigned char *raw_data;
|
||||
|
||||
if (!eldbus_message_iter_arguments_get(var, "(iiibiiay)", &st))
|
||||
return;
|
||||
if (!eldbus_message_iter_arguments_get(st, "iiibiiay", &w, &h, &r,
|
||||
|
@ -54,173 +70,318 @@ hints_dict_iter(void *data, const void *key, Eldbus_Message_Iter *var)
|
|||
n->icon.raw.data = malloc(sizeof(char) * n->icon.raw.data_size);
|
||||
EINA_SAFETY_ON_NULL_RETURN(n->icon.raw.data);
|
||||
memcpy(n->icon.raw.data, raw_data, sizeof(char) * n->icon.raw.data_size);
|
||||
}
|
||||
else if (!strcmp(key, "urgency"))
|
||||
{
|
||||
unsigned char urgency;
|
||||
eldbus_message_iter_arguments_get(var, "y", &urgency);
|
||||
if (urgency < 3)
|
||||
n->urgency = urgency;
|
||||
printf("NOT: image-data=%ix%i,a=%i\n", w, h, alpha);
|
||||
}
|
||||
else if (!strcmp(key, "image-path") || !strcmp(key, "image_path"))
|
||||
{
|
||||
eldbus_message_iter_arguments_get(var, "s", &n->icon.icon_path);
|
||||
n->icon.icon_path = eina_stringshare_add(n->icon.icon_path);
|
||||
printf("NOT: image-path=[%s]\n", n->icon.icon_path);
|
||||
// path to image file
|
||||
}
|
||||
else if (!strcmp(key, "urgency"))
|
||||
{
|
||||
unsigned char urgency;
|
||||
|
||||
eldbus_message_iter_arguments_get(var, "y", &urgency);
|
||||
if (urgency < 3) n->urgency = urgency;
|
||||
printf("NOT: urgency=%i\n", n->urgency);
|
||||
// 0=low, 1=normal, 2=critical
|
||||
}
|
||||
else if (!strcmp(key, "category"))
|
||||
{ // XXX: store category
|
||||
const char *val = NULL;
|
||||
|
||||
eldbus_message_iter_arguments_get(var, "s", &val);
|
||||
printf("NOT: category=[%s]\n", val);
|
||||
// "device" A generic device-related notification that doesn't fit into any other category.
|
||||
// "device.added" A device, such as a USB device, was added to the system.
|
||||
// "device.error" A device had some kind of error.
|
||||
// "device.removed" A device, such as a USB device, was removed from the system.
|
||||
// "email" A generic e-mail-related notification that doesn't fit into any other category.
|
||||
// "email.arrived" A new e-mail notification.
|
||||
// "email.bounced" A notification stating that an e-mail has bounced.
|
||||
// "im" A generic instant message-related notification that doesn't fit into any other category.
|
||||
// "im.error" An instant message error notification.
|
||||
// "im.received" A received instant message notification.
|
||||
// "network" A generic network notification that doesn't fit into any other category.
|
||||
// "network.connected" A network connection notification, such as successful sign-on to a network service. This should not be confused with device.added for new network devices.
|
||||
// "network.disconnected" A network disconnected notification. This should not be confused with device.removed for disconnected network devices.
|
||||
// "network.error" A network-related or connection-related error.
|
||||
// "presence" A generic presence change notification that doesn't fit into any other category, such as going away or idle.
|
||||
// "presence.offline" An offline presence change notification.
|
||||
// "presence.online" An online presence change notification.
|
||||
// "transfer" A generic file transfer or download notification that doesn't fit into any other category.
|
||||
// "transfer.complete" A file transfer or download complete notification.
|
||||
// "transfer.error" A file transfer or download error.
|
||||
if (val) n->category = eina_stringshare_add(val);
|
||||
}
|
||||
else if (!strcmp(key, "desktop-entry"))
|
||||
{
|
||||
const char *val = NULL;
|
||||
|
||||
eldbus_message_iter_arguments_get(var, "s", &val);
|
||||
printf("NOT: desktop-entry=[%s]\n", val);
|
||||
// if rage.desktop -> "rage"
|
||||
// if terminology.desktop -> "terminology"
|
||||
if (val) n->desktop_entry = eina_stringshare_add(val);
|
||||
}
|
||||
else if (!strcmp(key, "icon-actions"))
|
||||
{
|
||||
Eina_Bool val = 0;
|
||||
|
||||
eldbus_message_iter_arguments_get(var, "b", &val);
|
||||
printf("NOT: icon-actions=%i\n", val);
|
||||
// 1 == interpret action identifier == named icon in icon naming standards
|
||||
n->icon_actions = val;
|
||||
}
|
||||
else if (!strcmp(key, "resident"))
|
||||
{
|
||||
Eina_Bool val = 0;
|
||||
|
||||
eldbus_message_iter_arguments_get(var, "b", &val);
|
||||
printf("NOT: resident=%i\n", val);
|
||||
// 1== remove notification when action invoked - no timeout
|
||||
n->resident = val;
|
||||
}
|
||||
else if (!strcmp(key, "suppress-sound"))
|
||||
{
|
||||
Eina_Bool val = 0;
|
||||
|
||||
eldbus_message_iter_arguments_get(var, "b", &val);
|
||||
printf("NOT: suppress-sound=%i\n", val);
|
||||
// 1== remove notification when action invoked - no timeout
|
||||
n->suppress_sound = val;
|
||||
}
|
||||
else if (!strcmp(key, "sound-file"))
|
||||
{
|
||||
const char *val = NULL;
|
||||
|
||||
eldbus_message_iter_arguments_get(var, "s", &val);
|
||||
printf("NOT: sound-file=[%s]\n", val);
|
||||
// path to sound file to play
|
||||
if (val) n->sound_file = eina_stringshare_add(val);
|
||||
}
|
||||
else if (!strcmp(key, "sound-name"))
|
||||
{
|
||||
const char *val = NULL;
|
||||
|
||||
eldbus_message_iter_arguments_get(var, "s", &val);
|
||||
printf("NOT: sound-file=[%s]\n", val);
|
||||
// sound naming spec to play
|
||||
// http://0pointer.de/public/sound-naming-spec.html
|
||||
if (val) n->sound_name = eina_stringshare_add(val);
|
||||
}
|
||||
else if (!strcmp(key, "transient"))
|
||||
{
|
||||
Eina_Bool val = 0;
|
||||
|
||||
eldbus_message_iter_arguments_get(var, "b", &val);
|
||||
printf("NOT: transient=%i\n", val);
|
||||
n->transient = val;
|
||||
}
|
||||
else if (!strcmp(key, "x"))
|
||||
{
|
||||
int val = 0;
|
||||
|
||||
eldbus_message_iter_arguments_get(var, "i", &val);
|
||||
printf("NOT: x=%i\n", val);
|
||||
n->x = val;
|
||||
n->have_xy = EINA_TRUE;
|
||||
}
|
||||
else if (!strcmp(key, "y"))
|
||||
{
|
||||
int val = 0;
|
||||
|
||||
eldbus_message_iter_arguments_get(var, "i", &val);
|
||||
printf("NOT: y=%i\n", val);
|
||||
n->y = val;
|
||||
n->have_xy = EINA_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* this function should be external in edje for use in cases such as this module.
|
||||
*
|
||||
* happily, it was decided that the function would not be external so that it could
|
||||
* be duplicated into the module in full.
|
||||
*/
|
||||
|
||||
static int
|
||||
_text_escape(Eina_Strbuf *txt, const char *text)
|
||||
_tag_len(const char *txt)
|
||||
{
|
||||
const char *escaped;
|
||||
int advance;
|
||||
const char *s;
|
||||
Eina_Bool backslash = EINA_FALSE;
|
||||
Eina_Bool inquote = EINA_FALSE, indblquote = EINA_FALSE;
|
||||
|
||||
escaped = evas_textblock_string_escape_get(text, &advance);
|
||||
if (!escaped)
|
||||
if (txt[0] != '<') return 0;
|
||||
for (s = txt; *s; s++)
|
||||
{
|
||||
eina_strbuf_append_char(txt, text[0]);
|
||||
advance = 1;
|
||||
if (!backslash)
|
||||
{
|
||||
if (*s == '\\') backslash = EINA_TRUE;
|
||||
else
|
||||
{
|
||||
if (inquote)
|
||||
{
|
||||
if (*s == '\'') inquote = EINA_FALSE;
|
||||
}
|
||||
else if (indblquote)
|
||||
{
|
||||
if (*s == '"') indblquote = EINA_FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (*s == '>')
|
||||
{
|
||||
s++;
|
||||
break;
|
||||
}
|
||||
else if (*s == '\'') inquote = EINA_TRUE;
|
||||
else if (*s == '\"') indblquote = EINA_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else backslash = EINA_FALSE;
|
||||
}
|
||||
else
|
||||
eina_strbuf_append(txt, escaped);
|
||||
return advance;
|
||||
return s - txt;
|
||||
}
|
||||
|
||||
/* hardcoded list of allowed tags based on
|
||||
* https://people.gnome.org/~mccann/docs/notification-spec/notification-spec-latest.html#markup
|
||||
*/
|
||||
static const char *tags[] =
|
||||
static char *
|
||||
_path_get(const char *txt)
|
||||
{
|
||||
"<b",
|
||||
"<i",
|
||||
"<u",
|
||||
//"<a", FIXME: we can't actually display these right now
|
||||
//"<img",
|
||||
};
|
||||
Eina_Strbuf *buf;
|
||||
char *ret;
|
||||
const char *s;
|
||||
Eina_Bool backslash = EINA_FALSE;
|
||||
Eina_Bool inquote = EINA_FALSE, indblquote = EINA_FALSE;
|
||||
|
||||
static const char *
|
||||
_get_tag(const char *c)
|
||||
{
|
||||
unsigned int i;
|
||||
if (txt[0] == '>') return NULL;
|
||||
|
||||
if (c[1] != '>') return NULL;
|
||||
for (i = 0; i < EINA_C_ARRAY_LENGTH(tags); i++)
|
||||
if (tags[i][1] == c[0]) return tags[i];
|
||||
return NULL;
|
||||
buf = eina_strbuf_new();
|
||||
if (!buf) return NULL;
|
||||
|
||||
for (s = txt; *s; s++)
|
||||
{
|
||||
if (!backslash)
|
||||
{
|
||||
if (*s == '\\') backslash = EINA_TRUE;
|
||||
else
|
||||
{
|
||||
if (inquote)
|
||||
{
|
||||
if (*s == '\'') inquote = EINA_FALSE;
|
||||
else eina_strbuf_append_char(buf, *s);
|
||||
}
|
||||
else if (indblquote)
|
||||
{
|
||||
if (*s == '"') indblquote = EINA_FALSE;
|
||||
else eina_strbuf_append_char(buf, *s);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (*s == '>') break;
|
||||
else if (*s == ' ') break;
|
||||
else if (*s == '\'') inquote = EINA_TRUE;
|
||||
else if (*s == '\"') indblquote = EINA_TRUE;
|
||||
else eina_strbuf_append_char(buf, *s);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
eina_strbuf_append_char(buf, *s);
|
||||
backslash = EINA_FALSE;
|
||||
}
|
||||
}
|
||||
ret = eina_strbuf_string_steal(buf);
|
||||
eina_strbuf_free(buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
char *
|
||||
static char *
|
||||
_nedje_text_escape(const char *text)
|
||||
{
|
||||
Eina_Strbuf *txt;
|
||||
char *ret;
|
||||
const char *text_end;
|
||||
size_t text_len;
|
||||
Eina_Array *arr;
|
||||
const char *cur_tag = NULL;
|
||||
int taglen;
|
||||
|
||||
if (!text) return NULL;
|
||||
|
||||
txt = eina_strbuf_new();
|
||||
text_len = strlen(text);
|
||||
arr = eina_array_new(3);
|
||||
if (!txt) return NULL;
|
||||
|
||||
text_end = text + strlen(text);
|
||||
|
||||
text_end = text + text_len;
|
||||
while (text < text_end)
|
||||
{
|
||||
int advance;
|
||||
|
||||
if ((text[0] == '<') && text[1])
|
||||
taglen = _tag_len(text);
|
||||
if (taglen == 0)
|
||||
{
|
||||
const char *tag, *popped;
|
||||
Eina_Bool closing = EINA_FALSE;
|
||||
|
||||
if (text[1] == '/') //closing tag
|
||||
{
|
||||
closing = EINA_TRUE;
|
||||
tag = _get_tag(text + 2);
|
||||
}
|
||||
else
|
||||
tag = _get_tag(text + 1);
|
||||
if (closing)
|
||||
{
|
||||
if (cur_tag && (tag != cur_tag))
|
||||
{
|
||||
/* tag mismatch: autoclose all failure tags
|
||||
* not technically required by the spec,
|
||||
* but it makes me feel better about myself
|
||||
*/
|
||||
do
|
||||
{
|
||||
popped = eina_array_pop(arr);
|
||||
if (eina_array_count(arr))
|
||||
cur_tag = eina_array_data_get(arr, eina_array_count(arr) - 1);
|
||||
else
|
||||
cur_tag = NULL;
|
||||
eina_strbuf_append_printf(txt, "</%c>", popped[1]);
|
||||
} while (cur_tag && (popped != tag));
|
||||
advance = 4;
|
||||
}
|
||||
else if (cur_tag)
|
||||
{
|
||||
/* tag match: just pop */
|
||||
popped = eina_array_pop(arr);
|
||||
if (eina_array_count(arr))
|
||||
cur_tag = eina_array_data_get(arr, eina_array_count(arr) - 1);
|
||||
else
|
||||
cur_tag = NULL;
|
||||
eina_strbuf_append_printf(txt, "</%c>", popped[1]);
|
||||
advance = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* no current tag: escape */
|
||||
advance = _text_escape(txt, text);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tag)
|
||||
{
|
||||
cur_tag = tag;
|
||||
eina_array_push(arr, tag);
|
||||
eina_strbuf_append_printf(txt, "<%c>", tag[1]);
|
||||
advance = 3;
|
||||
}
|
||||
else
|
||||
advance = _text_escape(txt, text);
|
||||
}
|
||||
}
|
||||
else if (text[0] == '&')
|
||||
{
|
||||
const char *s;
|
||||
|
||||
s = strchr(text, ';');
|
||||
if (s)
|
||||
s = evas_textblock_escape_string_range_get(text, s + 1);
|
||||
if (s)
|
||||
{
|
||||
eina_strbuf_append_char(txt, text[0]);
|
||||
advance = 1;
|
||||
}
|
||||
else
|
||||
advance = _text_escape(txt, text);
|
||||
eina_strbuf_append_char(txt, text[0]);
|
||||
text++;
|
||||
}
|
||||
else
|
||||
advance = _text_escape(txt, text);
|
||||
{
|
||||
if (!strncmp(text, "<b>", 3)) eina_strbuf_append(txt, "<b>");
|
||||
else if (!strncmp(text, "</b>", 4)) eina_strbuf_append(txt, "</b>");
|
||||
else if (!strncmp(text, "<i>", 3)) eina_strbuf_append(txt, "<i>");
|
||||
else if (!strncmp(text, "</i>", 4)) eina_strbuf_append(txt, "</i>");
|
||||
else if (!strncmp(text, "<u>", 3)) eina_strbuf_append(txt, "<u>");
|
||||
else if (!strncmp(text, "</u>", 4)) eina_strbuf_append(txt, "</u>");
|
||||
else if (!strncmp(text, "<a ", 3))
|
||||
{
|
||||
eina_strbuf_append(txt, "<link>");
|
||||
eina_strbuf_append_n(txt, text, taglen);
|
||||
}
|
||||
else if (!strncmp(text, "</a>", 3))
|
||||
{
|
||||
eina_strbuf_append(txt, "</a></link>");
|
||||
}
|
||||
else if (!strncmp(text, "<img src=", 9))
|
||||
{
|
||||
Evas_Object *o;
|
||||
int w = 0, h = 0;
|
||||
char *path;
|
||||
|
||||
text += advance;
|
||||
path = _path_get(text + 9);
|
||||
if ((path) && (strlen(path) > 0))
|
||||
{
|
||||
o = evas_object_image_add(e_comp->evas);
|
||||
evas_object_image_file_set(o, path, NULL);
|
||||
evas_object_image_size_get(o, &w, &h);
|
||||
printf("NOT: imgpath=%s %ix%i\n", path, w, h);
|
||||
if ((w > 0) && (h > 0))
|
||||
{
|
||||
double neww = w, newh = h;
|
||||
|
||||
if (neww > 200.0)
|
||||
{
|
||||
double oldw = neww;
|
||||
|
||||
neww = 200.0;
|
||||
newh = (newh * neww) / oldw;
|
||||
}
|
||||
if (newh > 100.0)
|
||||
{
|
||||
double oldh = newh;
|
||||
|
||||
newh = 100.0;
|
||||
neww = (neww * newh) / oldh;
|
||||
}
|
||||
neww *= e_scale;
|
||||
newh *= e_scale;
|
||||
w = neww + 0.5;
|
||||
h = newh + 0.5;
|
||||
eina_strbuf_append_printf
|
||||
(txt, "<item absize=%ix%i href=", w, h);
|
||||
eina_strbuf_append_n(txt, text + 9, taglen - 9);
|
||||
eina_strbuf_append(txt, "</item>");
|
||||
}
|
||||
evas_object_del(o);
|
||||
}
|
||||
free(path);
|
||||
}
|
||||
text += taglen;
|
||||
}
|
||||
}
|
||||
|
||||
eina_array_free(arr);
|
||||
ret = eina_strbuf_string_steal(txt);
|
||||
printf("NOT: body -> [%s]\n", ret);
|
||||
eina_strbuf_free(txt);
|
||||
return ret;
|
||||
}
|
||||
|
@ -231,28 +392,30 @@ notify_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Messag
|
|||
E_Notification_Notify *n;
|
||||
Eldbus_Message_Iter *actions_iter, *hints_iter;
|
||||
Eldbus_Message *reply;
|
||||
char *txt;
|
||||
char *txt, *txt2;
|
||||
int num;
|
||||
|
||||
if (!n_data->notify_cb)
|
||||
return NULL;
|
||||
if (!n_data->notify_cb) return NULL;
|
||||
|
||||
n = E_OBJECT_ALLOC(E_Notification_Notify, E_NOTIFICATION_TYPE, _notification_free);
|
||||
n->urgency = E_NOTIFICATION_NOTIFY_URGENCY_NORMAL;
|
||||
if (!eldbus_message_arguments_get(msg, "susssasa{sv}i", &n->app_name,
|
||||
&n->replaces_id, &n->icon.icon, &n->summary,
|
||||
&n->body, &actions_iter, &hints_iter,
|
||||
&n->timeout))
|
||||
if (!eldbus_message_arguments_get(msg, "susssasa{sv}i",
|
||||
&n->app_name, &n->replaces_id,
|
||||
&n->icon.icon, &n->summary, &n->body,
|
||||
&actions_iter, &hints_iter, &n->timeout))
|
||||
{
|
||||
ERR("Reading message.");
|
||||
e_object_del(E_OBJECT(n));
|
||||
return NULL;
|
||||
}
|
||||
if (e_screensaver_on_get() && e_config->screensaver_wake_on_notify)
|
||||
{
|
||||
{ // XXX: this is an attempt to wake the screen? should be an option
|
||||
int x, y;
|
||||
|
||||
ecore_evas_pointer_xy_get(e_comp->ee, &x, &y);
|
||||
ecore_evas_pointer_warp(e_comp->ee, x, y);
|
||||
}
|
||||
// walk hints
|
||||
eldbus_message_iter_dict_iterate(hints_iter, "sv", hints_dict_iter, n);
|
||||
n->app_name = eina_stringshare_add(n->app_name);
|
||||
n->icon.icon = eina_stringshare_add(n->icon.icon);
|
||||
|
@ -261,22 +424,43 @@ notify_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Messag
|
|||
n->body = eina_stringshare_add(txt);
|
||||
free(txt);
|
||||
|
||||
num = 0;
|
||||
while (eldbus_message_iter_get_and_next(actions_iter, 's', &txt))
|
||||
{
|
||||
if (eldbus_message_iter_get_and_next(actions_iter, 's', &txt2))
|
||||
{ // XXX: add actions to notification
|
||||
E_Notification_Notify_Action *actions;
|
||||
|
||||
printf("NOT: act=[%s] [%s]\n", txt, txt2);
|
||||
num++;
|
||||
actions = realloc(n->actions, (num + 1) * sizeof(E_Notification_Notify));
|
||||
if (actions)
|
||||
{
|
||||
n->actions = actions;
|
||||
n->actions[num - 1].action = eina_stringshare_add(txt);
|
||||
n->actions[num - 1].label = eina_stringshare_add(txt2);
|
||||
n->actions[num].action = NULL;
|
||||
n->actions[num].label = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
e_object_ref(E_OBJECT(n));
|
||||
n->id = n_data->notify_cb(n_data->data, n);
|
||||
reply = eldbus_message_method_return_new(msg);
|
||||
eldbus_message_arguments_append(reply, "u", n->id);
|
||||
e_object_unref(E_OBJECT(n));
|
||||
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
close_notification_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
unsigned id;
|
||||
if (!eldbus_message_arguments_get(msg, "u", &id))
|
||||
return NULL;
|
||||
if (n_data->close_cb)
|
||||
n_data->close_cb(n_data->data, id);
|
||||
unsigned int id;
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "u", &id)) return NULL;
|
||||
if (n_data->close_cb) n_data->close_cb(n_data->data, id);
|
||||
return eldbus_message_method_return_new(msg);
|
||||
}
|
||||
|
||||
|
@ -291,8 +475,10 @@ capabilities_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_
|
|||
eldbus_message_iter_arguments_append(main_iter, "as", &array);
|
||||
|
||||
for (i = 0; n_data->server_info->capabilities[i]; i++)
|
||||
eldbus_message_iter_arguments_append(array, "s",
|
||||
n_data->server_info->capabilities[i]);
|
||||
{
|
||||
eldbus_message_iter_arguments_append
|
||||
(array, "s", n_data->server_info->capabilities[i]);
|
||||
}
|
||||
eldbus_message_iter_container_close(main_iter, array);
|
||||
return reply;
|
||||
}
|
||||
|
@ -301,23 +487,32 @@ static Eldbus_Message *
|
|||
server_info_cb(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
eldbus_message_arguments_append(reply, "ssss", n_data->server_info->name,
|
||||
n_data->server_info->vendor,
|
||||
n_data->server_info->version,
|
||||
n_data->server_info->spec_version);
|
||||
eldbus_message_arguments_append(reply, "ssss",
|
||||
n_data->server_info->name,
|
||||
n_data->server_info->vendor,
|
||||
n_data->server_info->version,
|
||||
n_data->server_info->spec_version);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static const Eldbus_Method methods[] = {
|
||||
{ "Notify",
|
||||
ELDBUS_ARGS({"s", "app_name"}, {"u", "replaces_id"}, {"s", "app_icon"}, {"s", "summary"}, {"s", "body"}, {"as", "actions"}, {"a{sv}", "hints"}, {"i", "expire_timeout"}),
|
||||
ELDBUS_ARGS({"u", "id"}), notify_cb, 0 },
|
||||
{ "CloseNotification", ELDBUS_ARGS({"u", "id"}), NULL, close_notification_cb, 0 },
|
||||
{ "GetCapabilities", NULL, ELDBUS_ARGS({"as", "capabilities"}),
|
||||
capabilities_cb, 0 },
|
||||
{ "GetServerInformation", NULL,
|
||||
ELDBUS_ARGS({"s", "name"}, {"s", "vendor"}, {"s", "version"}, {"s", "spec_version"}),
|
||||
server_info_cb, 0 },
|
||||
ELDBUS_ARGS({"s", "app_name"}, {"u", "replaces_id"}, {"s", "app_icon"}, {"s", "summary"}, {"s", "body"}, {"as", "actions"}, {"a{sv}", "hints"}, {"i", "expire_timeout"}),
|
||||
ELDBUS_ARGS({"u", "id"}),
|
||||
notify_cb, 0 },
|
||||
{ "CloseNotification",
|
||||
ELDBUS_ARGS({"u", "id"}),
|
||||
NULL,
|
||||
close_notification_cb, 0 },
|
||||
{ "GetCapabilities",
|
||||
NULL,
|
||||
ELDBUS_ARGS({"as", "capabilities"}),
|
||||
capabilities_cb, 0 },
|
||||
{ "GetServerInformation",
|
||||
NULL,
|
||||
ELDBUS_ARGS({"s", "name"}, {"s", "vendor"}, {"s", "version"}, {"s", "spec_version"}),
|
||||
server_info_cb, 0 },
|
||||
|
||||
{ NULL, NULL, NULL, NULL, 0 }
|
||||
};
|
||||
|
||||
|
@ -332,6 +527,7 @@ static const Eldbus_Signal signals[] = {
|
|||
{ "NotificationClosed", ELDBUS_ARGS({"u", "id"}, {"u", "reason"}), 0 },
|
||||
[SIGNAL_ACTION_INVOKED] =
|
||||
{ "ActionInvoked", ELDBUS_ARGS({"u", "id"}, {"s", "action_key"}), 0 },
|
||||
|
||||
{ NULL, NULL, 0}
|
||||
};
|
||||
|
||||
|
@ -347,8 +543,8 @@ E_API Eina_Bool
|
|||
e_notification_server_register(const E_Notification_Server_Info *server_info, E_Notification_Notify_Cb n_cb, E_Notification_Close_Cb close_cb, const void *data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(server_info, EINA_FALSE);
|
||||
if (n_data)
|
||||
return EINA_FALSE;
|
||||
|
||||
if (n_data) return EINA_FALSE;
|
||||
n_data = calloc(1, sizeof(Notification_Data));
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(n_data, EINA_FALSE);
|
||||
|
||||
|
@ -359,8 +555,7 @@ e_notification_server_register(const E_Notification_Server_Info *server_info, E_
|
|||
n_data->data = (void *)data;
|
||||
n_data->server_info = server_info;
|
||||
eldbus_name_request(n_data->conn, BUS,
|
||||
ELDBUS_NAME_REQUEST_FLAG_REPLACE_EXISTING, NULL, NULL);
|
||||
|
||||
ELDBUS_NAME_REQUEST_FLAG_REPLACE_EXISTING, NULL, NULL);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
|
@ -381,7 +576,17 @@ e_notification_notify_close(E_Notification_Notify *notify, E_Notification_Notify
|
|||
EINA_SAFETY_ON_NULL_RETURN(notify);
|
||||
EINA_SAFETY_ON_FALSE_RETURN(reason <= E_NOTIFICATION_NOTIFY_CLOSED_REASON_UNDEFINED);
|
||||
eldbus_service_signal_emit(n_data->iface, SIGNAL_NOTIFICATION_CLOSED,
|
||||
notify->id, reason);
|
||||
notify->id, reason);
|
||||
}
|
||||
|
||||
E_API void
|
||||
e_notification_notify_action(E_Notification_Notify *notify, const char *action)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN(n_data);
|
||||
EINA_SAFETY_ON_NULL_RETURN(notify);
|
||||
if (!action) action = "";
|
||||
eldbus_service_signal_emit(n_data->iface, SIGNAL_ACTION_INVOKED,
|
||||
notify->id, action);
|
||||
}
|
||||
|
||||
E_API Evas_Object *
|
||||
|
@ -491,6 +696,7 @@ notification_client_dbus_send(E_Notification_Notify *notify, E_Notification_Clie
|
|||
{
|
||||
Eldbus_Message_Iter *st, *data_iter;
|
||||
int i;
|
||||
|
||||
eldbus_message_iter_arguments_append(hints, "{sv}", &entry);
|
||||
eldbus_message_iter_arguments_append(entry, "s", "image-data");
|
||||
var = eldbus_message_iter_container_new(entry, 'v', "(iiibiiay)");
|
||||
|
@ -533,8 +739,7 @@ notification_client_dbus_send(E_Notification_Notify *notify, E_Notification_Clie
|
|||
|
||||
p = eldbus_connection_send(conn, msg, client_notify_cb, data, 5000);
|
||||
EINA_SAFETY_ON_NULL_GOTO(p, error);
|
||||
if (cb)
|
||||
eldbus_pending_data_set(p, "cb", cb);
|
||||
if (cb) eldbus_pending_data_set(p, "cb", cb);
|
||||
eldbus_pending_data_set(p, "conn", conn);
|
||||
|
||||
return EINA_TRUE;
|
||||
|
@ -547,8 +752,7 @@ error:
|
|||
static void
|
||||
normalize_notify(E_Notification_Notify *notify)
|
||||
{
|
||||
if (!notify->timeout)
|
||||
notify->timeout = -1;
|
||||
if (!notify->timeout) notify->timeout = -1;
|
||||
}
|
||||
|
||||
E_API Eina_Bool
|
||||
|
@ -562,11 +766,12 @@ e_notification_client_send(E_Notification_Notify *notify, E_Notification_Client_
|
|||
|
||||
if (!n_data)
|
||||
{
|
||||
fprintf(stderr, "UNHANDLED NOTIFICATION:\nSummary: %s\nBody: %s\n", notify->summary, notify->body);
|
||||
fprintf(stderr, "UNHANDLED NOTIFICATION:\nSummary: %s\nBody: %s\n",
|
||||
notify->summary, notify->body);
|
||||
return notification_client_dbus_send(notify, cb, data);
|
||||
}
|
||||
|
||||
//local
|
||||
// local
|
||||
copy = malloc(sizeof(E_Notification_Notify));
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(copy, EINA_FALSE);
|
||||
memcpy(copy, notify, sizeof(E_Notification_Notify));
|
||||
|
@ -579,8 +784,7 @@ e_notification_client_send(E_Notification_Notify *notify, E_Notification_Client_
|
|||
copy->icon.icon_path = eina_stringshare_add(notify->icon.icon_path);
|
||||
|
||||
id = n_data->notify_cb(n_data->data, copy);
|
||||
if (cb)
|
||||
cb((void *)data, id);
|
||||
if (cb) cb((void *)data, id);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,35 +7,39 @@
|
|||
|
||||
typedef enum _E_Notification_Notify_Urgency
|
||||
{
|
||||
E_NOTIFICATION_NOTIFY_URGENCY_LOW,
|
||||
E_NOTIFICATION_NOTIFY_URGENCY_NORMAL,
|
||||
E_NOTIFICATION_NOTIFY_URGENCY_CRITICAL
|
||||
E_NOTIFICATION_NOTIFY_URGENCY_LOW = 0,
|
||||
E_NOTIFICATION_NOTIFY_URGENCY_NORMAL = 1,
|
||||
E_NOTIFICATION_NOTIFY_URGENCY_CRITICAL = 2
|
||||
} E_Notification_Notify_Urgency;
|
||||
|
||||
typedef enum _E_Notification_Notify_Closed_Reason
|
||||
{
|
||||
E_NOTIFICATION_NOTIFY_CLOSED_REASON_EXPIRED, /** The notification expired. */
|
||||
E_NOTIFICATION_NOTIFY_CLOSED_REASON_DISMISSED, /** The notification was dismissed by the user. */
|
||||
E_NOTIFICATION_NOTIFY_CLOSED_REASON_REQUESTED, /** The notification was closed by a call to CloseNotification method. */
|
||||
E_NOTIFICATION_NOTIFY_CLOSED_REASON_UNDEFINED /** Undefined/reserved reasons. */
|
||||
E_NOTIFICATION_NOTIFY_CLOSED_REASON_EXPIRED = 1,
|
||||
E_NOTIFICATION_NOTIFY_CLOSED_REASON_DISMISSED = 2,
|
||||
E_NOTIFICATION_NOTIFY_CLOSED_REASON_REQUESTED = 3,
|
||||
E_NOTIFICATION_NOTIFY_CLOSED_REASON_UNDEFINED = 4
|
||||
} E_Notification_Notify_Closed_Reason;
|
||||
|
||||
typedef struct _E_Notification_Notify_Action
|
||||
{
|
||||
const char *action;
|
||||
const char *label;
|
||||
} E_Notification_Notify_Action;
|
||||
|
||||
typedef struct _E_Notification_Notify
|
||||
{
|
||||
E_Object e_obj_inherit;
|
||||
unsigned int id;
|
||||
const char *app_name;
|
||||
unsigned replaces_id;
|
||||
unsigned int replaces_id;
|
||||
const char *summary;
|
||||
const char *body;
|
||||
int timeout;
|
||||
int timeout; // time in ms
|
||||
E_Notification_Notify_Urgency urgency;
|
||||
struct
|
||||
{
|
||||
struct {
|
||||
const char *icon;
|
||||
const char *icon_path;
|
||||
struct
|
||||
{
|
||||
struct {
|
||||
int width;
|
||||
int height;
|
||||
int rowstride;
|
||||
|
@ -46,6 +50,17 @@ typedef struct _E_Notification_Notify
|
|||
int data_size;
|
||||
} raw;
|
||||
} icon;
|
||||
const char *category;
|
||||
const char *desktop_entry;
|
||||
const char *sound_file;
|
||||
const char *sound_name;
|
||||
int x, y;
|
||||
Eina_Bool have_xy;
|
||||
Eina_Bool icon_actions;
|
||||
Eina_Bool resident;
|
||||
Eina_Bool suppress_sound;
|
||||
Eina_Bool transient;
|
||||
E_Notification_Notify_Action *actions;
|
||||
} E_Notification_Notify;
|
||||
|
||||
typedef unsigned int (*E_Notification_Notify_Cb)(void *data, E_Notification_Notify *n);
|
||||
|
@ -80,7 +95,9 @@ E_API Evas_Object *e_notification_notify_raw_image_get(E_Notification_Notify *no
|
|||
|
||||
//client
|
||||
typedef void (*E_Notification_Client_Send_Cb)(void *data, unsigned int id);
|
||||
|
||||
E_API Eina_Bool e_notification_client_send(E_Notification_Notify *notify, E_Notification_Client_Send_Cb cb, const void *data);
|
||||
E_API void e_notification_notify_action(E_Notification_Notify *notify, const char *action);
|
||||
E_API Eina_Bool e_notification_util_send(const char *summary, const char *body);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -16,10 +16,13 @@ static Eina_Bool init = EINA_FALSE;
|
|||
static inline void
|
||||
_e_pointer_theme_buf(E_Pointer *ptr, char cursor[1024])
|
||||
{
|
||||
const char *type = ptr->type;
|
||||
|
||||
if (!type) type = "default";
|
||||
if (ptr->color)
|
||||
snprintf(cursor, 1024, "e/pointer/enlightenment/%s/color", ptr->type);
|
||||
snprintf(cursor, 1024, "e/pointer/enlightenment/%s/color", type);
|
||||
else
|
||||
snprintf(cursor, 1024, "e/pointer/enlightenment/%s/mono", ptr->type);
|
||||
snprintf(cursor, 1024, "e/pointer/enlightenment/%s/mono", type);
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
@ -388,26 +391,17 @@ _e_pointer_cb_free(E_Pointer *ptr)
|
|||
free(ptr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Fallback to x11 setting the correct cursor and shape.
|
||||
*
|
||||
* Not rendering any application rendered canvas, only works for x11 compositors
|
||||
*/
|
||||
static void
|
||||
_e_pointer_x11_setup(E_Pointer *ptr, const char *cursor)
|
||||
_e_pointer_x11_fallback_to_x11_pointer(E_Pointer *ptr)
|
||||
{
|
||||
if (ptr->e_cursor && (e_comp->comp_type != E_PIXMAP_TYPE_WL))
|
||||
{
|
||||
/* create a pointer canvas if we need to */
|
||||
if ((!ptr->buffer_evas) && ptr->win) _e_pointer_canvas_add(ptr);
|
||||
if (ptr->buffer_o_ptr && (ptr->buffer_o_ptr != ptr->o_ptr))
|
||||
{
|
||||
e_theme_edje_object_set(ptr->buffer_o_ptr, "base/theme/pointer", cursor);
|
||||
edje_object_part_swallow(ptr->buffer_o_ptr, "e.swallow.hotspot", ptr->buffer_o_hot);
|
||||
if (!init)
|
||||
{
|
||||
edje_object_signal_emit(ptr->o_ptr, "e,state,init", "e");
|
||||
edje_object_message_signal_process(ptr->o_ptr);
|
||||
init = EINA_TRUE;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
EINA_SAFETY_ON_FALSE_RETURN((e_comp->comp_type != E_PIXMAP_TYPE_WL));
|
||||
|
||||
// Remove any application rendered pointer canvas, x11 is going to render
|
||||
if (ptr->buffer_evas) _e_pointer_canvas_del(ptr);
|
||||
#ifndef HAVE_WAYLAND_ONLY
|
||||
if (!e_comp_util_has_x()) return;
|
||||
|
@ -456,6 +450,43 @@ _e_pointer_x11_setup(E_Pointer *ptr, const char *cursor)
|
|||
#endif
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_e_pointer_theme_object_setup(Evas_Object *edje, const char *cursor, Evas_Object *hotspot)
|
||||
{
|
||||
/* try to set the edje object theme */
|
||||
if (!e_theme_edje_object_set(edje, "base/theme/pointer", cursor))
|
||||
return EINA_FALSE;
|
||||
if (!edje_object_part_swallow(edje, "e.swallow.hotspot", hotspot))
|
||||
return EINA_FALSE;
|
||||
if (!init)
|
||||
{
|
||||
edje_object_signal_emit(edje, "e,state,init", "e");
|
||||
edje_object_message_signal_process(edje);
|
||||
init = EINA_TRUE;
|
||||
}
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_pointer_x11_setup(E_Pointer *ptr, const char *cursor)
|
||||
{
|
||||
EINA_SAFETY_ON_FALSE_RETURN((e_comp->comp_type != E_PIXMAP_TYPE_WL));
|
||||
if (ptr->e_cursor)
|
||||
{
|
||||
/* create a pointer canvas if we need to */
|
||||
if ((!ptr->buffer_evas) && ptr->win) _e_pointer_canvas_add(ptr);
|
||||
if (ptr->buffer_o_ptr && (ptr->buffer_o_ptr != ptr->o_ptr))
|
||||
{
|
||||
if (!_e_pointer_theme_object_setup(ptr->buffer_o_ptr, cursor, ptr->buffer_o_hot))
|
||||
{
|
||||
_e_pointer_x11_fallback_to_x11_pointer(ptr);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
_e_pointer_x11_fallback_to_x11_pointer(ptr);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_pointer_type_set(E_Pointer *ptr, const char *type)
|
||||
{
|
||||
|
@ -483,18 +514,17 @@ _e_pointer_type_set(E_Pointer *ptr, const char *type)
|
|||
if ((!ptr->buffer_evas) && ptr->win) _e_pointer_canvas_add(ptr);
|
||||
_e_pointer_theme_buf(ptr, cursor);
|
||||
|
||||
/* try to set the edje object theme */
|
||||
if (!e_theme_edje_object_set(ptr->o_ptr, "base/theme/pointer", cursor))
|
||||
cursor[0] = 0;
|
||||
edje_object_part_swallow(ptr->o_ptr, "e.swallow.hotspot", ptr->o_hot);
|
||||
if (!init)
|
||||
if (!_e_pointer_theme_object_setup(ptr->o_ptr, cursor, ptr->o_hot))
|
||||
{
|
||||
edje_object_signal_emit(ptr->o_ptr, "e,state,init", "e");
|
||||
edje_object_message_signal_process(ptr->o_ptr);
|
||||
init = EINA_TRUE;
|
||||
if (e_comp->comp_type != E_PIXMAP_TYPE_WL)
|
||||
{
|
||||
_e_pointer_x11_setup(ptr, cursor);
|
||||
}
|
||||
else
|
||||
{
|
||||
_e_pointer_theme_object_setup(ptr->o_ptr, "default", ptr->o_hot);
|
||||
}
|
||||
}
|
||||
_e_pointer_x11_setup(ptr, cursor);
|
||||
if (!cursor[0]) return;
|
||||
|
||||
_hot_update(ptr);
|
||||
|
||||
|
@ -504,7 +534,17 @@ _e_pointer_type_set(E_Pointer *ptr, const char *type)
|
|||
evas_object_show(ptr->o_ptr);
|
||||
}
|
||||
else
|
||||
_e_pointer_x11_setup(ptr, NULL);
|
||||
{
|
||||
if (e_comp->comp_type != E_PIXMAP_TYPE_WL)
|
||||
{
|
||||
_e_pointer_x11_fallback_to_x11_pointer(ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
CRI("WL must always use the application pointer!!!");
|
||||
_e_pointer_theme_object_setup(ptr->o_ptr, "default", ptr->o_hot);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EINTERN int
|
||||
|
@ -846,7 +886,7 @@ e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y)
|
|||
int px, py;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN(ptr);
|
||||
EINA_SAFETY_ON_NULL_RETURN(ptr->o_ptr);
|
||||
EINA_SAFETY_ON_NULL_GOTO(ptr->o_ptr, misst);
|
||||
|
||||
ecore_evas_cursor_get(ptr->ee, &o, NULL, &px, &py);
|
||||
if (o)
|
||||
|
@ -882,6 +922,10 @@ e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y)
|
|||
ptr->client.ec = ec;
|
||||
ptr->client.x = x;
|
||||
ptr->client.y = y;
|
||||
|
||||
return;
|
||||
misst:
|
||||
INF("The ptr object of pointer %p is missing.", ptr);
|
||||
}
|
||||
|
||||
E_API void
|
||||
|
@ -922,7 +966,9 @@ e_pointer_reset(E_Pointer *ptr)
|
|||
E_FREE_LIST(ptr->stack, _e_pointer_stack_free);
|
||||
|
||||
eina_stringshare_del(ptr->type);
|
||||
ptr->type = NULL;
|
||||
eina_stringshare_del(ptr->deferred_type);
|
||||
ptr->deferred_type = NULL;
|
||||
|
||||
/* reset pointer to default */
|
||||
e_pointer_type_push(ptr, ptr, "default");
|
||||
|
|
|
@ -114,6 +114,10 @@ e_screensaver_update(void)
|
|||
(!((e_util_fullscreen_current_any()) &&
|
||||
(e_config->no_dpms_on_fullscreen)))))
|
||||
timeout = 0;
|
||||
if (e_msgbus_data)
|
||||
{
|
||||
if (e_msgbus_data->screensaver_inhibits) timeout = 0;
|
||||
}
|
||||
|
||||
if (_e_screensaver_timeout != timeout)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
#include <e.h>
|
||||
|
||||
#include <Ecore_Audio.h>
|
||||
|
||||
static int _can_sound_out = -1;
|
||||
static Eo *_sound_out = NULL;
|
||||
static int _outs = 0;
|
||||
static Ecore_Timer *_outs_end_timer = NULL;
|
||||
|
||||
static void
|
||||
_cb_out_fail(void *data EINA_UNUSED, const Efl_Event *event)
|
||||
{
|
||||
efl_unref(event->object);
|
||||
_sound_out = NULL;
|
||||
_can_sound_out = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_out_ready(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
|
||||
{
|
||||
_can_sound_out = 1;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_cb_outs_end_timer(void *data EINA_UNUSED)
|
||||
{
|
||||
efl_unref(_sound_out);
|
||||
_sound_out = NULL;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
_out_end(void)
|
||||
{
|
||||
if (_outs > 0) _outs--;
|
||||
if (_outs == 0)
|
||||
{
|
||||
if (_outs_end_timer) ecore_timer_del(_outs_end_timer);
|
||||
_outs_end_timer = ecore_timer_add(2.0, _cb_outs_end_timer, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_in_stopped(void *data EINA_UNUSED, const Efl_Event *event)
|
||||
{
|
||||
efl_unref(event->object);
|
||||
_out_end();
|
||||
}
|
||||
|
||||
E_API int
|
||||
e_sound_init(void)
|
||||
{
|
||||
ecore_audio_init();
|
||||
return 1;
|
||||
}
|
||||
|
||||
E_API int
|
||||
e_sound_shutdown(void)
|
||||
{
|
||||
if (_outs_end_timer)
|
||||
{
|
||||
ecore_timer_del(_outs_end_timer);
|
||||
_outs_end_timer = NULL;
|
||||
}
|
||||
if (_sound_out)
|
||||
{
|
||||
efl_unref(_sound_out);
|
||||
_sound_out = NULL;
|
||||
}
|
||||
ecore_audio_shutdown();
|
||||
return 1;
|
||||
}
|
||||
|
||||
E_API void
|
||||
e_sound_file_play(const char *file, double vol)
|
||||
{
|
||||
Eo *in;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
if (_can_sound_out == 0) return;
|
||||
if (!_sound_out)
|
||||
_sound_out = efl_add_ref
|
||||
(ECORE_AUDIO_OUT_PULSE_CLASS, NULL,
|
||||
efl_event_callback_add(efl_added,
|
||||
ECORE_AUDIO_OUT_PULSE_EVENT_CONTEXT_FAIL,
|
||||
_cb_out_fail, NULL),
|
||||
efl_event_callback_add(efl_added,
|
||||
ECORE_AUDIO_OUT_PULSE_EVENT_CONTEXT_READY,
|
||||
_cb_out_ready, NULL)
|
||||
);
|
||||
if (!_sound_out) return;
|
||||
|
||||
if (_outs_end_timer)
|
||||
{
|
||||
ecore_timer_del(_outs_end_timer);
|
||||
_outs_end_timer = NULL;
|
||||
}
|
||||
_outs++;
|
||||
snprintf(buf, sizeof(buf), "sound-file[%s]", file);
|
||||
in = efl_add_ref(ECORE_AUDIO_IN_SNDFILE_CLASS, NULL,
|
||||
efl_name_set(efl_added, buf),
|
||||
efl_event_callback_add(efl_added,
|
||||
ECORE_AUDIO_IN_EVENT_IN_STOPPED,
|
||||
_cb_in_stopped, NULL));
|
||||
if (!in)
|
||||
{
|
||||
_out_end();
|
||||
return;
|
||||
}
|
||||
if (!ecore_audio_obj_source_set(in, file))
|
||||
{
|
||||
efl_unref(in);
|
||||
_out_end();
|
||||
return;
|
||||
}
|
||||
ecore_audio_obj_volume_set(in, vol);
|
||||
if (!ecore_audio_obj_out_input_attach(_sound_out, in))
|
||||
{
|
||||
efl_unref(in);
|
||||
_out_end();
|
||||
return;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
#ifdef E_TYPEDEFS
|
||||
|
||||
#else
|
||||
#ifndef E_SOUND_H
|
||||
#define E_SOUND_H
|
||||
E_API int e_sound_init(void);
|
||||
E_API int e_sound_shutdown(void);
|
||||
E_API void e_sound_file_play(const char *file, double vol);
|
||||
#endif
|
||||
#endif
|
|
@ -566,6 +566,32 @@ main(int argc, char **argv)
|
|||
env_set("E_START", argv[0]);
|
||||
putenv("E_START_MANAGER=1");
|
||||
|
||||
if ((!getenv("DISPLAY")) && (!getenv("E_WL_FORCE")))
|
||||
{
|
||||
printf("***************************************************************\n");
|
||||
printf("* You are probably starting Enlightenment in wayland DRM/KMS *\n");
|
||||
printf("***************************************************************\n");
|
||||
printf(" \n");
|
||||
printf(" Wayland support is experimental. It may work for you. \n");
|
||||
printf(" It may not. If you wish you help out then please do, but \n");
|
||||
printf(" for a proper experience use Enlightenment in X11. \n");
|
||||
printf(" \n");
|
||||
printf(" If you do not want this pause and message, please set \n");
|
||||
printf(" the following environment variable: \n");
|
||||
printf(" \n");
|
||||
printf(" E_WL_FORCE=drm \n");
|
||||
printf(" \n");
|
||||
printf(" Example: \n");
|
||||
printf(" \n");
|
||||
printf(" E_WL_FORCE=drm enlightenment_start \n");
|
||||
printf(" \n");
|
||||
printf(" If you wish to set software or GL rendering too then also: \n");
|
||||
printf(" \n");
|
||||
printf(" E_WL_FORCE=drm E_COMP_ENGINE=gl enlightenment_start \n");
|
||||
printf(" E_WL_FORCE=drm E_COMP_ENGINE=sw enlightenment_start \n");
|
||||
printf(" \n");
|
||||
sleep(10);
|
||||
}
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if ((!strcmp(argv[i], "-h")) || (!strcmp(argv[i], "-help")) ||
|
||||
|
|
103
src/bin/e_sys.c
|
@ -48,6 +48,7 @@ static const int E_LOGOUT_WAIT_TIME = 3.0;
|
|||
static Ecore_Timer *action_timeout = NULL;
|
||||
|
||||
static Eldbus_Proxy *login1_manger_proxy = NULL;
|
||||
static Eldbus_Proxy *login1_session_proxy = NULL;
|
||||
|
||||
static int _e_sys_comp_waiting = 0;
|
||||
|
||||
|
@ -380,12 +381,75 @@ _e_sys_systemd_signal_prepare_sleep(void *data EINA_UNUSED, const Eldbus_Message
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_sys_systemd_signal_session_lock(void *data EINA_UNUSED, const Eldbus_Message *msg EINA_UNUSED)
|
||||
{
|
||||
printf("SSS: systemd said to lock\n");
|
||||
if (!e_desklock_state_get())
|
||||
{
|
||||
e_desklock_show(EINA_FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_sys_systemd_signal_session_unlock(void *data EINA_UNUSED, const Eldbus_Message *msg EINA_UNUSED)
|
||||
{
|
||||
printf("SSS: systemd said to unlock\n");
|
||||
if (e_desklock_state_get())
|
||||
{
|
||||
e_desklock_hide();
|
||||
}
|
||||
}
|
||||
|
||||
static Eina_Bool _e_sys_session_locked = EINA_FALSE;
|
||||
|
||||
E_API void
|
||||
e_sys_locked_set(Eina_Bool locked)
|
||||
{
|
||||
Eldbus_Message *m;
|
||||
|
||||
if (_e_sys_session_locked == locked) return;
|
||||
_e_sys_session_locked = locked;
|
||||
if (!login1_session_proxy) return;
|
||||
m = eldbus_proxy_method_call_new(login1_session_proxy, "SetLockedHint");
|
||||
eldbus_message_arguments_append(m, "b", _e_sys_session_locked);
|
||||
eldbus_proxy_send(login1_manger_proxy, m, NULL, NULL, -1);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_sys_systemd_getsession_cb(void *data EINA_UNUSED, const Eldbus_Message *m, Eldbus_Pending *p EINA_UNUSED)
|
||||
{
|
||||
const char *path = NULL;
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Object *obj;
|
||||
Eldbus_Message *m2;
|
||||
|
||||
if (eldbus_message_error_get(m, NULL, NULL)) return;
|
||||
if (!eldbus_message_arguments_get(m, "o", &path)) return;
|
||||
|
||||
printf("SSS: session path [%s]\n", path);
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
|
||||
obj = eldbus_object_get(conn, "org.freedesktop.login1", path);
|
||||
login1_session_proxy = eldbus_proxy_get(obj,
|
||||
"org.freedesktop.login1.Session");
|
||||
eldbus_proxy_signal_handler_add(login1_session_proxy, "Lock",
|
||||
_e_sys_systemd_signal_session_lock,
|
||||
NULL);
|
||||
eldbus_proxy_signal_handler_add(login1_session_proxy, "Unlock",
|
||||
_e_sys_systemd_signal_session_unlock,
|
||||
NULL);
|
||||
m2 = eldbus_proxy_method_call_new(login1_session_proxy, "SetLockedHint");
|
||||
eldbus_message_arguments_append(m2, "b", _e_sys_session_locked);
|
||||
eldbus_proxy_send(login1_manger_proxy, m2, NULL, NULL, -1);
|
||||
}
|
||||
|
||||
/* externally accessible functions */
|
||||
EINTERN int
|
||||
e_sys_init(void)
|
||||
{
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Object *obj;
|
||||
Eldbus_Message *m;
|
||||
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
|
||||
obj = eldbus_object_get(conn, "org.freedesktop.login1",
|
||||
|
@ -402,6 +466,33 @@ e_sys_init(void)
|
|||
_e_sys_systemd_exists_cb, NULL);
|
||||
_e_sys_systemd_handle_inhibit();
|
||||
|
||||
if (login1_manger_proxy)
|
||||
{
|
||||
char buf[256];
|
||||
int fd;
|
||||
ssize_t siz;
|
||||
|
||||
fd = open("/proc/self/sessionid", O_RDONLY);
|
||||
if (fd >= 0)
|
||||
{
|
||||
siz = read(fd, buf, 255);
|
||||
close(fd);
|
||||
if ((siz > 0) && (siz < 255))
|
||||
{
|
||||
buf[siz] = 0;
|
||||
m = eldbus_proxy_method_call_new
|
||||
(login1_manger_proxy, "GetSession");
|
||||
if (m)
|
||||
{
|
||||
eldbus_message_arguments_append(m, "s", buf);
|
||||
eldbus_proxy_send(login1_manger_proxy, m,
|
||||
_e_sys_systemd_getsession_cb,
|
||||
NULL, -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
E_EVENT_SYS_SUSPEND = ecore_event_type_new();
|
||||
E_EVENT_SYS_HIBERNATE = ecore_event_type_new();
|
||||
E_EVENT_SYS_RESUME = ecore_event_type_new();
|
||||
|
@ -429,6 +520,18 @@ e_sys_shutdown(void)
|
|||
_e_sys_resume_delay_timer = NULL;
|
||||
_e_sys_screensaver_unignore_timer = NULL;
|
||||
_e_sys_acpi_handler = NULL;
|
||||
if (login1_session_proxy)
|
||||
{
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Object *obj;
|
||||
|
||||
obj = eldbus_proxy_object_get(login1_session_proxy);
|
||||
conn = eldbus_object_connection_get(obj);
|
||||
eldbus_proxy_unref(login1_session_proxy);
|
||||
eldbus_object_unref(obj);
|
||||
eldbus_connection_unref(conn);
|
||||
login1_session_proxy = NULL;
|
||||
}
|
||||
if (login1_manger_proxy)
|
||||
{
|
||||
Eldbus_Connection *conn;
|
||||
|
|
|
@ -48,6 +48,7 @@ E_API E_Sys_Con_Action *e_sys_con_extra_action_register(const char *label,
|
|||
E_API void e_sys_con_extra_action_unregister(E_Sys_Con_Action *sca);
|
||||
E_API const Eina_List *e_sys_con_extra_action_list_get(void);
|
||||
E_API Eina_Bool e_sys_on_the_way_out_get(void);
|
||||
E_API void e_sys_locked_set(Eina_Bool locked);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -358,6 +358,19 @@ main(int argc,
|
|||
|
||||
/* local subsystem functions */
|
||||
#ifdef HAVE_EEZE_MOUNT
|
||||
|
||||
static Eina_Bool
|
||||
check_is_num_to_comma(const char *s)
|
||||
{
|
||||
const char *p;
|
||||
|
||||
for (p = s; *p && (*p != ','); p++)
|
||||
{
|
||||
if (!((*p >= '0') && (*p <= '9'))) return EINA_FALSE;
|
||||
}
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
mountopts_check(const char *opts)
|
||||
{
|
||||
|
@ -400,6 +413,8 @@ mountopts_check(const char *opts)
|
|||
{
|
||||
p += 4;
|
||||
errno = 0;
|
||||
|
||||
if (!check_is_num_to_comma(p)) return EINA_FALSE;
|
||||
muid = strtoul(p, &end, 10);
|
||||
if (muid == ULONG_MAX) return EINA_FALSE;
|
||||
if (errno) return EINA_FALSE;
|
||||
|
@ -414,13 +429,53 @@ mountopts_check(const char *opts)
|
|||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
check_is_alpha_num(char c)
|
||||
{
|
||||
if (((c >= '0') && (c <= '9')) ||
|
||||
((c >= 'a') && (c <= 'z')) ||
|
||||
((c >= 'A') && (c <= 'Z'))) return EINA_TRUE;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
check_uuid(const char *uuid)
|
||||
{
|
||||
const char *p;
|
||||
|
||||
for (p = uuid; p[0]; p++)
|
||||
if ((!isalnum(*p)) && (*p != '-')) return EINA_FALSE;
|
||||
{
|
||||
if ((!check_is_alpha_num(*p)) && (*p != '-')) return EINA_FALSE;
|
||||
}
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
check_sane_path(const char *path)
|
||||
{
|
||||
const char *forbidden_ch = "`~!#$%^&*()[]{}|\\;'\"<>?";
|
||||
const char *p;
|
||||
|
||||
if (strstr(path, "..")) return EINA_FALSE; // just don't allow .. anywhere
|
||||
for (p = forbidden_ch; *p; p++) // no invalid chars like above
|
||||
{
|
||||
if (strchr(path, *p)) return EINA_FALSE;
|
||||
}
|
||||
for (p = path; *p; p++) // nothing in lower ascii ctrl chars or high ascii
|
||||
{
|
||||
if ((*p <= ' ') || (*p >= 0x7f)) return EINA_FALSE;
|
||||
}
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
check_sane_dev(const char *dev)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if (strncmp(dev, "/dev/", 5)) return EINA_FALSE; // not a /dev file
|
||||
if (!check_sane_path(dev)) return EINA_FALSE;
|
||||
if (stat(dev, &st)) return EINA_FALSE; // must actually exist
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
|
@ -428,9 +483,9 @@ static Eina_Bool
|
|||
mount_args_check(int argc, char **argv, const char *action)
|
||||
{
|
||||
Eina_Bool opts = EINA_FALSE;
|
||||
struct stat st;
|
||||
const char *node;
|
||||
char buf[PATH_MAX];
|
||||
struct stat st;
|
||||
|
||||
if (!strcmp(action, "mount"))
|
||||
{
|
||||
|
@ -451,9 +506,9 @@ mount_args_check(int argc, char **argv, const char *action)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (strncmp(argv[4], "/dev/", 5)) return EINA_FALSE;
|
||||
if (stat(argv[4], &st)) return EINA_FALSE;
|
||||
if (!check_sane_dev(argv[4])) return EINA_FALSE;
|
||||
}
|
||||
if (!check_sane_path(argv[5])) return EINA_FALSE;
|
||||
|
||||
node = strrchr(argv[5], '/');
|
||||
if (!node) return EINA_FALSE;
|
||||
|
@ -468,8 +523,7 @@ mount_args_check(int argc, char **argv, const char *action)
|
|||
/path/to/umount /dev/$devnode
|
||||
*/
|
||||
if (argc != 3) return EINA_FALSE;
|
||||
if (strncmp(argv[2], "/dev/", 5)) return EINA_FALSE;
|
||||
if (stat(argv[2], &st)) return EINA_FALSE;
|
||||
if (!check_sane_dev(argv[2])) return EINA_FALSE;
|
||||
node = strrchr(argv[2], '/');
|
||||
if (!node) return EINA_FALSE;
|
||||
if (!node[1]) return EINA_FALSE;
|
||||
|
@ -488,8 +542,7 @@ mount_args_check(int argc, char **argv, const char *action)
|
|||
/path/to/eject /dev/$devnode
|
||||
*/
|
||||
if (argc != 3) return EINA_FALSE;
|
||||
if (strncmp(argv[2], "/dev/", 5)) return EINA_FALSE;
|
||||
if (stat(argv[2], &st)) return EINA_FALSE;
|
||||
if (!check_sane_dev(argv[2])) return EINA_FALSE;
|
||||
node = strrchr(argv[2], '/');
|
||||
if (!node) return EINA_FALSE;
|
||||
if (!node[1]) return EINA_FALSE;
|
||||
|
@ -545,10 +598,8 @@ auth_action_ok(char *a,
|
|||
*/
|
||||
ret = auth_etc_enlightenment_sysactions(a, usr, grp);
|
||||
if (ret == 1) return 1;
|
||||
else if (ret == -1)
|
||||
return 0;
|
||||
/* the DEFAULT - allow */
|
||||
return 1;
|
||||
else if (ret == -1) return 0;
|
||||
return 0; // no sysactions.conf file found - just say no. bad system
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -134,7 +134,23 @@ e_theme_border_find(const char *border)
|
|||
E_API Eina_List *
|
||||
e_theme_border_list(void)
|
||||
{
|
||||
return e_theme_collection_items_find(NULL, "e/widgets/border");
|
||||
Eina_List *list, *l;
|
||||
const char *s;
|
||||
|
||||
list = e_theme_collection_items_find(NULL, "e/widgets/border");
|
||||
// XXX: a horrible hack due to history and bad group naming choices
|
||||
// but filter out volume as a border because it is the volume gadget
|
||||
// thing not a border
|
||||
EINA_LIST_FOREACH(list, l, s)
|
||||
{
|
||||
if (!strcmp(s, "volume"))
|
||||
{
|
||||
list = eina_list_remove_list(list, l);
|
||||
eina_stringshare_del(s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
E_API int
|
||||
|
|
|
@ -146,8 +146,12 @@ static void
|
|||
_update_machid_get(void)
|
||||
{
|
||||
FILE *f;
|
||||
char buf[4096], *c;
|
||||
static const char appid[] = "EnL+7',xkDv&!@*)df%@#hcs$;l%o$fc#^$%&%$FDFeJ$%c^$#";
|
||||
static const char hex[] = "0123456789abcdef";
|
||||
char buf[4096], buf2[4096 + 1024], *c;
|
||||
unsigned char sha[20];
|
||||
size_t len;
|
||||
int i;
|
||||
|
||||
f = fopen("/etc/machine-id", "r");
|
||||
if (!f) f = fopen("/var/lib/dbus/machine-id", "r");
|
||||
|
@ -159,7 +163,7 @@ _update_machid_get(void)
|
|||
if (f)
|
||||
{
|
||||
len = fread(buf, 1, sizeof(buf) - 1, f);
|
||||
if (len > 10)
|
||||
if ((len > 10) && (len < 4000))
|
||||
{
|
||||
buf[len] = 0;
|
||||
for (c = buf; *c; c++)
|
||||
|
@ -170,6 +174,14 @@ _update_machid_get(void)
|
|||
break;
|
||||
}
|
||||
}
|
||||
snprintf(buf2, sizeof(buf2), "{{%s}}/{{%s}}", buf, appid);
|
||||
e_sha1_sum((unsigned char *)buf2, strlen(buf2), sha);
|
||||
for (i = 0; i < 20; i++)
|
||||
{
|
||||
buf[(i * 2) + 0] = hex[((sha[i] >> 4) & 0xf)];
|
||||
buf[(i * 2) + 1] = hex[((sha[i] ) & 0xf)];
|
||||
}
|
||||
buf[(i * 2)] = 0;
|
||||
machid = strdup(buf);
|
||||
fclose(f);
|
||||
return;
|
||||
|
@ -187,7 +199,6 @@ _update_machid_get(void)
|
|||
t = ecore_time_unix_get();
|
||||
fprintf(f, "%1.16f-%i-%i\n", t, rand(), rand());
|
||||
fclose(f);
|
||||
_update_machid_get();
|
||||
return;
|
||||
}
|
||||
// this just is all a wash - just use this
|
||||
|
@ -259,6 +270,7 @@ e_update_init(void)
|
|||
_update_timeout_cb(NULL);
|
||||
e_config->update.check = 1;
|
||||
}
|
||||
_update_machid_get();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -1174,10 +1174,7 @@ e_util_terminal_desktop_get(void)
|
|||
{
|
||||
const char *terms[] =
|
||||
{
|
||||
"terminology.desktop",
|
||||
"rxvt.desktop",
|
||||
"gnome-terminal.desktop",
|
||||
"konsole.desktop",
|
||||
#include "e_inc_terms.h"
|
||||
NULL
|
||||
};
|
||||
const char *s;
|
||||
|
@ -1591,3 +1588,151 @@ e_username_get(void)
|
|||
if (pw) return pw->pw_name;
|
||||
return "";
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int pid;
|
||||
int pri_set, pri_adj;
|
||||
int pri_only_filter;
|
||||
Eina_Bool do_adj : 1;
|
||||
Eina_Bool do_adj_children : 1;
|
||||
Eina_Bool do_children : 1;
|
||||
} E_Pri_Set_Adj_Data;
|
||||
|
||||
static void
|
||||
_pri_adj(int pid, int pri_set, int pri_adj, int pri_only_filter,
|
||||
Eina_Bool do_adj, Eina_Bool do_adj_children, Eina_Bool do_children)
|
||||
{
|
||||
Eina_List *files;
|
||||
char *file, buf[PATH_MAX];
|
||||
int pid2, ppid, newpri, ret;
|
||||
FILE *f;
|
||||
|
||||
newpri = getpriority(PRIO_PROCESS, pid) + pri_adj;
|
||||
if ((pri_only_filter == -99) || (pri_only_filter != newpri))
|
||||
{
|
||||
if (do_adj) newpri += pri_adj;
|
||||
else newpri = pri_set;
|
||||
if (newpri > 19) newpri = 19;
|
||||
// printf("PRI: %i -> %i (adj=%i, adj_ch=%i ch=%i)\n", pid, newpri, do_adj, do_adj_children, do_children);
|
||||
ret = setpriority(PRIO_PROCESS, pid, newpri);
|
||||
// if (ret < 0) printf("PRI: ret = %i | %s\n", ret, strerror(errno));
|
||||
}
|
||||
// shouldn't need to do this as default ionice class is "none" (0), and
|
||||
// this inherits io priority FROM nice level
|
||||
// ioprio_set(IOPRIO_WHO_PROCESS, pid,
|
||||
// IOPRIO_PRIO_VALUE(2, 5));
|
||||
if (do_children)
|
||||
{
|
||||
// yes - this is /proc specific... so this may not work on some
|
||||
// os's - works on linux. too bad for others.
|
||||
files = ecore_file_ls("/proc");
|
||||
EINA_LIST_FREE(files, file)
|
||||
{
|
||||
if (isdigit(file[0]))
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "/proc/%s/stat", file);
|
||||
f = fopen(buf, "r");
|
||||
if (f)
|
||||
{
|
||||
pid2 = ppid = -1;
|
||||
ret = fscanf(f, "%i %*s %*s %i %*s", &pid2, &ppid);
|
||||
fclose(f);
|
||||
if (ret == 2)
|
||||
{
|
||||
if (ppid == pid)
|
||||
{
|
||||
if (do_adj_children)
|
||||
_pri_adj(pid2, pri_set, pri_adj,
|
||||
pri_only_filter,
|
||||
EINA_TRUE,
|
||||
do_adj_children,
|
||||
do_children);
|
||||
else
|
||||
_pri_adj(pid2, pri_set, pri_adj,
|
||||
pri_only_filter,
|
||||
do_adj,
|
||||
do_adj_children,
|
||||
do_children);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
free(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_pid_nice_priority_set_adjust_thread(void *data,
|
||||
Ecore_Thread *eth EINA_UNUSED)
|
||||
{
|
||||
E_Pri_Set_Adj_Data *dat = data;
|
||||
|
||||
// printf("PRI: --------\n");
|
||||
_pri_adj(dat->pid, dat->pri_set, dat->pri_adj, dat->pri_only_filter,
|
||||
dat->do_adj, dat->do_adj_children, dat->do_children);
|
||||
free(dat);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_pid_nice_priority_set_adjust(int pid, int pri_set, int pri_adj,
|
||||
int pri_only_filter,
|
||||
Eina_Bool do_adj, Eina_Bool do_adj_children,
|
||||
Eina_Bool do_children)
|
||||
{
|
||||
E_Pri_Set_Adj_Data *dat = calloc(1, sizeof(E_Pri_Set_Adj_Data));
|
||||
|
||||
if (!dat) return;
|
||||
dat->pid = pid;
|
||||
dat->pri_set = pri_set;
|
||||
dat->pri_adj = pri_adj;
|
||||
dat->pri_only_filter = pri_only_filter;
|
||||
dat->do_adj = do_adj;
|
||||
dat->do_adj_children = do_adj_children;
|
||||
dat->do_children = do_children;
|
||||
ecore_thread_run(_e_pid_nice_priority_set_adjust_thread, NULL, NULL, dat);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_e_pid_nice_priority_lower_can(void)
|
||||
{
|
||||
#ifdef RLIMIT_NICE
|
||||
static int checked = -1;
|
||||
struct rlimit rlim;
|
||||
|
||||
again:
|
||||
if (checked == 0) return EINA_FALSE;
|
||||
else if (checked == 1) return EINA_TRUE;
|
||||
|
||||
checked = 1;
|
||||
if (getrlimit(RLIMIT_NICE, &rlim) == 0)
|
||||
{
|
||||
// if we can't lower pri to at least 20 (nice 0 ...) then assume
|
||||
// we can only raise nice level never lower it
|
||||
if (rlim.rlim_cur < 20) checked = 0;
|
||||
}
|
||||
goto again; // set checked now - try again
|
||||
#endif
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
E_API void
|
||||
e_pid_nice_priority_fg(int pid)
|
||||
{
|
||||
int pri = e_config->priority - 1;
|
||||
|
||||
if (!_e_pid_nice_priority_lower_can()) pri = e_config->priority;
|
||||
_e_pid_nice_priority_set_adjust(pid, pri, -1, -99, // only these procs
|
||||
EINA_FALSE, EINA_FALSE, EINA_FALSE);
|
||||
}
|
||||
|
||||
E_API void
|
||||
e_pid_nice_priority_bg(int pid)
|
||||
{
|
||||
int pri = e_config->priority;
|
||||
|
||||
if (!_e_pid_nice_priority_lower_can()) pri = e_config->priority;
|
||||
_e_pid_nice_priority_set_adjust(pid, pri, 1, -99, // only these procs
|
||||
EINA_FALSE, EINA_FALSE, EINA_FALSE);
|
||||
}
|
||||
|
|
|
@ -72,6 +72,9 @@ E_API Ecore_Exe *e_util_exe_safe_run(const char *cmd, void *data);
|
|||
|
||||
E_API const char *e_username_get(void);
|
||||
|
||||
E_API void e_pid_nice_priority_fg(int pid);
|
||||
E_API void e_pid_nice_priority_bg(int pid);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
E_UTIL_ACTION_NONE,
|
||||
|
|
|
@ -8,7 +8,7 @@ static void
|
|||
_cb_watchdog_thread_pingpong_pipe(void *data EINA_UNUSED, void *buf, unsigned int bytes)
|
||||
{
|
||||
unsigned long long *seq = buf;
|
||||
unsigned long long seq_num = bytes / sizeof(int);
|
||||
unsigned long long seq_num = bytes / sizeof(unsigned long long);
|
||||
|
||||
if (seq_num < 1)
|
||||
{
|
||||
|
@ -26,7 +26,7 @@ _cb_watchdog_thread_pingpong(void *data EINA_UNUSED, Ecore_Thread *thread)
|
|||
while (!ecore_thread_check(thread))
|
||||
{
|
||||
// send ping
|
||||
seq_new = malloc(sizeof(unsigned long));
|
||||
seq_new = malloc(sizeof(unsigned long long));
|
||||
if (seq_new)
|
||||
{
|
||||
seq++;
|
||||
|
@ -54,8 +54,9 @@ _cb_watchdog_thread_pingpong(void *data EINA_UNUSED, Ecore_Thread *thread)
|
|||
static void
|
||||
_cb_watchdog_thread_pingpong_reply(void *data EINA_UNUSED, Ecore_Thread *thread EINA_UNUSED, void *msg)
|
||||
{
|
||||
// repluy back to mainloop with same ping number
|
||||
// reply back to mainloop with same ping number
|
||||
unsigned long long *seq = msg;
|
||||
|
||||
ecore_pipe_write(_watchdog_pipe, seq, sizeof(unsigned long long));
|
||||
free(seq);
|
||||
}
|
||||
|
|
|
@ -77,15 +77,21 @@ _e_xkb_save_group(void *data)
|
|||
static Eina_Bool
|
||||
_xkb_new_keyboard(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
|
||||
{
|
||||
Ecore_X_Event_Xkb *ev = event;
|
||||
|
||||
if (skip_new_keyboard > 0)
|
||||
{
|
||||
skip_new_keyboard --;
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
// skip just "xmodmap" changes
|
||||
if ((ev) && (ev->map_notify)) return ECORE_CALLBACK_PASS_ON;
|
||||
printf("XKB: EV: _xkb_new_keyboard\n");
|
||||
//we have to restore our settings here
|
||||
e_xkb_reconfig();
|
||||
e_xkb_update(e_config->xkb.cur_group);
|
||||
e_deskenv_xmodmap_run();
|
||||
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
@ -104,6 +110,7 @@ _xkb_new_state(void* data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
|||
static Eina_Bool
|
||||
_xkb_keymap(void* data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
|
||||
{
|
||||
printf("XKB: EV: _xkb_keymap\n");
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
#endif
|
||||
|
@ -134,6 +141,7 @@ e_xkb_init(E_Pixmap_Type comp_type)
|
|||
}
|
||||
#endif
|
||||
if (e_config->xkb.dont_touch_my_damn_keyboard) return 1;
|
||||
printf("XKB: e_xkb_init\n");
|
||||
|
||||
_e_xkb_type_reconfig(comp_type);
|
||||
|
||||
|
@ -173,6 +181,7 @@ _e_x_xkb_reconfig(void)
|
|||
Eina_Strbuf *buf;
|
||||
|
||||
if (e_config->xkb.dont_touch_my_damn_keyboard) return;
|
||||
printf("XKB: _e_x_xkb_reconfig\n");
|
||||
if ((!e_config->xkb.used_layouts) && (!e_config->xkb.used_options) && (!e_config->xkb.default_model)) return;
|
||||
if (!getenv("DISPLAY")) return;
|
||||
|
||||
|
@ -256,6 +265,7 @@ static void
|
|||
_e_x_xkb_update(int cur_group)
|
||||
{
|
||||
if (e_config->xkb.dont_touch_my_damn_keyboard) return;
|
||||
printf("XKB: _e_x_xkb_update\n");
|
||||
if ((!e_config->xkb.used_layouts) && (!e_config->xkb.used_options) && (!e_config->xkb.default_model)) return;
|
||||
if (!getenv("DISPLAY")) return;
|
||||
if (cur_group != _e_xkb_cur_group)
|
||||
|
@ -354,6 +364,7 @@ _e_wl_xkb_reconfig(void)
|
|||
static void
|
||||
_e_xkb_type_reconfig(E_Pixmap_Type comp_type)
|
||||
{
|
||||
printf("XKB: _e_xkb_type_reconfig\n");
|
||||
if (comp_type == E_PIXMAP_TYPE_X)
|
||||
_e_x_xkb_reconfig();
|
||||
else if (comp_type == E_PIXMAP_TYPE_WL)
|
||||
|
@ -391,6 +402,7 @@ e_xkb_layout_next(void)
|
|||
E_Config_XKB_Layout *cl;
|
||||
|
||||
if (e_config->xkb.dont_touch_my_damn_keyboard) return;
|
||||
printf("XKB: e_xkb_layout_next\n");
|
||||
if (!e_config->xkb.used_layouts) return;
|
||||
l = eina_list_nth_list(e_config->xkb.used_layouts, e_config->xkb.cur_group);
|
||||
l = eina_list_next(l);
|
||||
|
@ -413,6 +425,7 @@ e_xkb_layout_prev(void)
|
|||
E_Config_XKB_Layout *cl;
|
||||
|
||||
if (e_config->xkb.dont_touch_my_damn_keyboard) return;
|
||||
printf("XKB: e_xkb_layout_prev\n");
|
||||
if (!e_config->xkb.used_layouts) return;
|
||||
l = eina_list_nth_list(e_config->xkb.used_layouts, e_config->xkb.cur_group);
|
||||
l = eina_list_prev(l);
|
||||
|
@ -438,6 +451,7 @@ e_xkb_layout_get(void)
|
|||
unsigned int n = 0;
|
||||
|
||||
if (e_config->xkb.dont_touch_my_damn_keyboard) return NULL;
|
||||
printf("XKB: e_xkb_layout_get\n");
|
||||
if (e_config->xkb.current_layout) return e_config->xkb.current_layout;
|
||||
if (_e_xkb_cur_group >= 0)
|
||||
n = _e_xkb_cur_group;
|
||||
|
@ -453,6 +467,7 @@ e_xkb_layout_set(const E_Config_XKB_Layout *cl)
|
|||
|
||||
EINA_SAFETY_ON_NULL_RETURN(cl);
|
||||
if (e_config->xkb.dont_touch_my_damn_keyboard) return;
|
||||
printf("XKB: e_xkb_layout_set\n");
|
||||
if (e_config_xkb_layout_eq(e_config->xkb.current_layout, cl)) return;
|
||||
cl2 = e_config_xkb_layout_dup(e_config->xkb.current_layout);
|
||||
e_config_xkb_layout_free(e_config->xkb.current_layout);
|
||||
|
|
|
@ -25,6 +25,7 @@ deps_e = [
|
|||
dep_ecore_con,
|
||||
dep_ecore_input,
|
||||
dep_ecore_input_evas,
|
||||
dep_ecore_audio,
|
||||
dep_evas,
|
||||
dep_efreet,
|
||||
dep_efreet_mime,
|
||||
|
@ -59,6 +60,7 @@ requires_e = ' '.join([
|
|||
'ecore-con',
|
||||
'ecore-input',
|
||||
'ecore-input-evas',
|
||||
'ecore-audio',
|
||||
'evas',
|
||||
'efreet',
|
||||
'efreet-mime',
|
||||
|
@ -224,6 +226,7 @@ src = [
|
|||
'e_zoomap.c',
|
||||
'e_zone.c',
|
||||
'e_gesture.c',
|
||||
'e_sound.c',
|
||||
'efx/efx_bumpmapping.c',
|
||||
'efx/efx.c',
|
||||
'efx/efx_fade.c',
|
||||
|
@ -403,7 +406,8 @@ hdr = [
|
|||
'e_xsettings.h',
|
||||
'e_zoomap.h',
|
||||
'e_zone.h',
|
||||
'e_gesture.h'
|
||||
'e_gesture.h',
|
||||
'e_sound.h'
|
||||
]
|
||||
|
||||
if config_h.has('HAVE_WAYLAND') == true
|
||||
|
|
|
@ -153,7 +153,7 @@ _cb_worker_message(void *data EINA_UNUSED, Ecore_Thread *th EINA_UNUSED, void *m
|
|||
|
||||
if (lig->max > 0)
|
||||
{
|
||||
val = ((1000 * lig->val) + 500) / lig->max;
|
||||
val = (1000 * lig->val) / lig->max;
|
||||
if (val < 0) val = 0;
|
||||
else if (val > 1000) val = 1000;
|
||||
}
|
||||
|
|
|
@ -3,15 +3,17 @@ Encoding=UTF-8
|
|||
Type=Application
|
||||
Name=Fingerprint Password Settings
|
||||
Name[de]=Fingerprint Passwort Einstellungen
|
||||
Name[fr]=Reconnaissance des empreintes digitales
|
||||
Name[it]=Impostazioni impronte digitali
|
||||
Name[fr]=Reconnaissance par empreinte digitale
|
||||
Name[it]=Impostazioni autenticazione con impronta digitale
|
||||
Name[pt]=Definições de palavras-passe de impressão digital
|
||||
Icon=enlightenment_fprint
|
||||
Exec=enlightenment_fprint
|
||||
Comment=Tool to set up or modify fingerprint authentication
|
||||
Comment[fr]=Outil pour configurer ou modifier l'authentification par empreintes digitales.
|
||||
Comment[fr]=Outil pour configurer ou modifier l'authentification par empreintes digitales
|
||||
Comment[it]=Utilità per impostare o modificare l'autenticazione mediante sensore di impronte digitali
|
||||
Comment[pt]=Ferramenta para configurar ou modificar a autenticação das impressões digitais
|
||||
GenericName=GUI for Fingerprint Authentication
|
||||
GenericName[fr]=Interface d'authentification par empreintes digitales
|
||||
GenericName[it]=Interfaccia autenticazione con impronta digitale
|
||||
Categories=Settings;DesktopSettings;
|
||||
StartupWMClass=enlightenment_fprint
|
||||
|
|
|
@ -154,6 +154,94 @@ get_command(void *data, Efreet_Desktop *desktop EINA_UNUSED, char *command, int
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static Efreet_Desktop *
|
||||
_terminal_get(const char *defaults_list)
|
||||
{
|
||||
Efreet_Desktop *tdesktop = NULL;
|
||||
Efreet_Ini *ini;
|
||||
const char *s;
|
||||
|
||||
ini = efreet_ini_new(defaults_list);
|
||||
if ((ini) && (ini->data) &&
|
||||
(efreet_ini_section_set(ini, "Default Applications")) &&
|
||||
(ini->section))
|
||||
{
|
||||
s = efreet_ini_string_get(ini, "x-scheme-handler/terminal");
|
||||
if (s) tdesktop = efreet_util_desktop_file_id_find(s);
|
||||
}
|
||||
if (ini) efreet_ini_free(ini);
|
||||
return tdesktop;
|
||||
}
|
||||
|
||||
static char **
|
||||
terminal_open(void)
|
||||
{
|
||||
const char *terms[] =
|
||||
{
|
||||
#include "e_inc_terms.h"
|
||||
NULL
|
||||
};
|
||||
const char *s;
|
||||
char buf[PATH_MAX], **ret;
|
||||
Efreet_Desktop *tdesktop = NULL, *td;
|
||||
Eina_List *l;
|
||||
int i;
|
||||
|
||||
s = efreet_data_home_get();
|
||||
if (s)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%s/mimeapps.list",
|
||||
efreet_config_home_get());
|
||||
tdesktop = _terminal_get(buf);
|
||||
}
|
||||
if (tdesktop) goto have_desktop;
|
||||
EINA_LIST_FOREACH(efreet_data_dirs_get(), l, s)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%s/applications/defaults.list", s);
|
||||
tdesktop = _terminal_get(buf);
|
||||
if (tdesktop) goto have_desktop;
|
||||
}
|
||||
|
||||
for (i = 0; terms[i]; i++)
|
||||
{
|
||||
tdesktop = efreet_util_desktop_file_id_find(terms[i]);
|
||||
if (tdesktop) goto have_desktop;
|
||||
}
|
||||
if (!tdesktop)
|
||||
{
|
||||
l = efreet_util_desktop_category_list("TerminalEmulator");
|
||||
if (l)
|
||||
{
|
||||
// just take first one since above list doesn't work.
|
||||
tdesktop = l->data;
|
||||
EINA_LIST_FREE(l, td)
|
||||
{
|
||||
// free/unref the desktosp we are not going to use
|
||||
if (td != tdesktop) efreet_desktop_free(td);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!tdesktop) return NULL;
|
||||
have_desktop:
|
||||
if (!tdesktop->exec)
|
||||
{
|
||||
efreet_desktop_free(tdesktop);
|
||||
return NULL;
|
||||
}
|
||||
ret = malloc(sizeof(char *) * 2);
|
||||
if (!ret) return NULL;
|
||||
ret[0] = strdup(tdesktop->exec);
|
||||
ret[1] = NULL;
|
||||
if (!ret[0])
|
||||
{
|
||||
free(ret);
|
||||
efreet_desktop_free(tdesktop);
|
||||
return NULL;
|
||||
}
|
||||
efreet_desktop_free(tdesktop);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static char **
|
||||
mime_open(const char *mime, const char *const *argv, int argc)
|
||||
{
|
||||
|
@ -178,10 +266,38 @@ mime_open(const char *mime, const char *const *argv, int argc)
|
|||
ret = calloc(eina_list_count(cmds) + 1, sizeof(char *));
|
||||
if (ret)
|
||||
{
|
||||
unsigned int i = 0;
|
||||
unsigned int i = 0, j;
|
||||
|
||||
EINA_LIST_FREE(cmds, c)
|
||||
{
|
||||
ret[i] = c; /* was strdup by efreet_desktop_command_get() */
|
||||
if (desktop->terminal)
|
||||
{
|
||||
Eina_Strbuf *buf = eina_strbuf_new();
|
||||
char **tcmds = terminal_open();
|
||||
|
||||
if ((tcmds) && (buf))
|
||||
{
|
||||
for (j = 0; tcmds[j]; j++)
|
||||
{
|
||||
eina_strbuf_append(buf, tcmds[j]);
|
||||
eina_strbuf_append(buf, " ");
|
||||
}
|
||||
eina_strbuf_append(buf, "-e ");
|
||||
eina_strbuf_append(buf, c);
|
||||
ret[i] = eina_strbuf_string_steal(buf);
|
||||
}
|
||||
if (tcmds)
|
||||
{
|
||||
for (j = 0; tcmds[j]; j++) free(tcmds[j]);
|
||||
free(tcmds);
|
||||
}
|
||||
if (buf) eina_strbuf_free(buf);
|
||||
free(c);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret[i] = c; /* was strdup by efreet_desktop_command_get() */
|
||||
}
|
||||
i++;
|
||||
}
|
||||
ret[i] = NULL;
|
||||
|
@ -192,7 +308,6 @@ mime_open(const char *mime, const char *const *argv, int argc)
|
|||
free(c);
|
||||
}
|
||||
}
|
||||
|
||||
eina_list_free(files);
|
||||
|
||||
return ret;
|
||||
|
@ -294,97 +409,6 @@ single_command_open(const char *command, const char *const *argv, int argc)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static Efreet_Desktop *
|
||||
_terminal_get(const char *defaults_list)
|
||||
{
|
||||
Efreet_Desktop *tdesktop = NULL;
|
||||
Efreet_Ini *ini;
|
||||
const char *s;
|
||||
|
||||
ini = efreet_ini_new(defaults_list);
|
||||
if ((ini) && (ini->data) &&
|
||||
(efreet_ini_section_set(ini, "Default Applications")) &&
|
||||
(ini->section))
|
||||
{
|
||||
s = efreet_ini_string_get(ini, "x-scheme-handler/terminal");
|
||||
if (s) tdesktop = efreet_util_desktop_file_id_find(s);
|
||||
}
|
||||
if (ini) efreet_ini_free(ini);
|
||||
return tdesktop;
|
||||
}
|
||||
|
||||
static char **
|
||||
terminal_open(void)
|
||||
{
|
||||
const char *terms[] =
|
||||
{
|
||||
"terminology.desktop",
|
||||
"rxvt.desktop",
|
||||
"gnome-terimnal.desktop",
|
||||
"konsole.desktop",
|
||||
NULL
|
||||
};
|
||||
const char *s;
|
||||
char buf[PATH_MAX], **ret;
|
||||
Efreet_Desktop *tdesktop = NULL, *td;
|
||||
Eina_List *l;
|
||||
int i;
|
||||
|
||||
s = efreet_data_home_get();
|
||||
if (s)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%s/mimeapps.list",
|
||||
efreet_config_home_get());
|
||||
tdesktop = _terminal_get(buf);
|
||||
}
|
||||
if (tdesktop) goto have_desktop;
|
||||
EINA_LIST_FOREACH(efreet_data_dirs_get(), l, s)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%s/applications/defaults.list", s);
|
||||
tdesktop = _terminal_get(buf);
|
||||
if (tdesktop) goto have_desktop;
|
||||
}
|
||||
|
||||
for (i = 0; terms[i]; i++)
|
||||
{
|
||||
tdesktop = efreet_util_desktop_file_id_find(terms[i]);
|
||||
if (tdesktop) goto have_desktop;
|
||||
}
|
||||
if (!tdesktop)
|
||||
{
|
||||
l = efreet_util_desktop_category_list("TerminalEmulator");
|
||||
if (l)
|
||||
{
|
||||
// just take first one since above list doesn't work.
|
||||
tdesktop = l->data;
|
||||
EINA_LIST_FREE(l, td)
|
||||
{
|
||||
// free/unref the desktosp we are not going to use
|
||||
if (td != tdesktop) efreet_desktop_free(td);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!tdesktop) return NULL;
|
||||
have_desktop:
|
||||
if (!tdesktop->exec)
|
||||
{
|
||||
efreet_desktop_free(tdesktop);
|
||||
return NULL;
|
||||
}
|
||||
ret = malloc(sizeof(char *) * 2);
|
||||
if (!ret) return NULL;
|
||||
ret[0] = strdup(tdesktop->exec);
|
||||
ret[1] = NULL;
|
||||
if (!ret[0])
|
||||
{
|
||||
free(ret);
|
||||
efreet_desktop_free(tdesktop);
|
||||
return NULL;
|
||||
}
|
||||
efreet_desktop_free(tdesktop);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static char **
|
||||
browser_open(const char *const *argv, int argc)
|
||||
{
|
||||
|
@ -508,7 +532,7 @@ main(int argc, char *argv[])
|
|||
ECORE_GETOPT_VALUE_NONE
|
||||
};
|
||||
int args;
|
||||
char **cmds;
|
||||
char **cmds = NULL;
|
||||
|
||||
args = ecore_getopt_parse(&options, values, argc, argv);
|
||||
if (args < 0)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
executable('enlightenment_open',
|
||||
[ 'e_open.c' ],
|
||||
include_directories: include_directories('../../../..'),
|
||||
include_directories: include_directories('../../../..', '../..'),
|
||||
dependencies : [ dep_eina, dep_ecore, dep_efreet, dep_efreet_mime ],
|
||||
install_dir : dir_bin,
|
||||
install : true
|
||||
|
|
|
@ -52,6 +52,7 @@ OPTIONS:
|
|||
-window-uniconify OPT1 Request uniconify of window with xwin id OPT1
|
||||
-window-maximize OPT1 Request maximize of window with xwin id OPT1
|
||||
-window-unmaximize OPT1 Request unmaximize of window with xwin id OPT1
|
||||
-window-sendtodesktop OPT1 OPT2 OPT3 OPT4 Send window to ZONE DESK_X DESK_Y
|
||||
|
||||
Note: This is a new implementation of enlightenment_remote,
|
||||
for more information about it see the '--help-new' option.
|
||||
|
@ -175,6 +176,16 @@ ERGMST(){
|
|||
unset result value
|
||||
}
|
||||
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: ERCIIII
|
||||
# DESCRIPTION: eremote call with int, int, int, int parameter
|
||||
# PARAMETERS: interface/method call, int, int, int, int
|
||||
# RETURNS:
|
||||
#===============================================================================
|
||||
ERCIIII(){
|
||||
dbus-send --print-reply=literal --dest=org.enlightenment.wm.service /org/enlightenment/wm/RemoteObject "$1" int32:"$2" int32:"$3" int32:"$4" int32:"$5"
|
||||
}
|
||||
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: ERCIIIS
|
||||
# DESCRIPTION: eremote call with int, int, int, string parameter
|
||||
|
@ -441,6 +452,13 @@ er_window_unmaximize(){
|
|||
ERCI org.enlightenment.wm.Window.Unmaximize "$2"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# E Window sendtodesktop
|
||||
#-------------------------------------------------------------------------------
|
||||
er_window_sendtodesktop(){
|
||||
ERCIIII org.enlightenment.wm.Window.SendToDesktop "$2" "$3" "$4" "$5"
|
||||
}
|
||||
|
||||
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: Main
|
||||
|
@ -545,6 +563,9 @@ case "$1" in
|
|||
-window-unmaximize)
|
||||
er_window_unmaximize "$@"
|
||||
;;
|
||||
-window-sendtodesktop)
|
||||
er_window_sendtodesktop "$@"
|
||||
;;
|
||||
|
||||
# This entry needs to be always the last option of the list (*)
|
||||
-h|-help|--help|--h|*)
|
||||
|
|
|
@ -36,7 +36,10 @@ cb_obj_prop_entry(void *data, const void *key, Eldbus_Message_Iter *var)
|
|||
{
|
||||
Eina_Bool val = EINA_FALSE;
|
||||
if (eldbus_message_iter_arguments_get(var, "b", &val))
|
||||
o->connected = val;
|
||||
{
|
||||
o->connected = val;
|
||||
printf("BZ: change connected for %s to %i\n", o->address, o->connected);
|
||||
}
|
||||
}
|
||||
else if (!strcmp(skey, "Trusted"))
|
||||
{
|
||||
|
|
|
@ -294,7 +294,7 @@ ebluez5_instances_update(void)
|
|||
static void
|
||||
_device_prop_clean(Config_Device *dev)
|
||||
{
|
||||
if ((!dev->unlock) && (!dev->force_connect))
|
||||
if (!dev->unlock)
|
||||
{
|
||||
ebluez5_config->devices = eina_list_remove(ebluez5_config->devices, dev);
|
||||
eina_stringshare_del(dev->addr);
|
||||
|
@ -332,27 +332,6 @@ ebluez5_device_prop_find(const char *address)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ebluez5_device_prop_force_connect_set(const char *address, Eina_Bool enable)
|
||||
{
|
||||
Config_Device *dev;
|
||||
|
||||
if (!address) return;
|
||||
dev = ebluez5_device_prop_find(address);
|
||||
if (dev)
|
||||
{
|
||||
dev->force_connect = enable;
|
||||
_device_prop_clean(dev);
|
||||
return;
|
||||
}
|
||||
if (enable)
|
||||
{
|
||||
dev = _device_prop_new(address);
|
||||
dev->force_connect = enable;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ebluez5_device_prop_unlock_set(const char *address, Eina_Bool enable)
|
||||
{
|
||||
|
@ -405,7 +384,6 @@ e_modapi_init(E_Module *m)
|
|||
#define T Config_Device
|
||||
#define D conf_device_edd
|
||||
E_CONFIG_VAL(D, T, addr, STR);
|
||||
E_CONFIG_VAL(D, T, force_connect, UCHAR);
|
||||
E_CONFIG_VAL(D, T, unlock, UCHAR);
|
||||
|
||||
conf_edd = E_CONFIG_DD_NEW("Config", Config);
|
||||
|
@ -438,6 +416,7 @@ e_modapi_shutdown(E_Module *m EINA_UNUSED)
|
|||
Config_Adapter *ad;
|
||||
Config_Device *dev;
|
||||
|
||||
e_gadcon_provider_unregister(&_gc_class);
|
||||
if (zero_adapters_check_timer)
|
||||
{
|
||||
ecore_timer_del(zero_adapters_check_timer);
|
||||
|
|
|
@ -32,7 +32,6 @@ typedef struct _Config_Device Config_Device;
|
|||
struct _Config_Device
|
||||
{
|
||||
const char *addr;
|
||||
Eina_Bool force_connect;
|
||||
Eina_Bool unlock;
|
||||
};
|
||||
|
||||
|
|
|
@ -43,21 +43,12 @@ _devices_eval(void)
|
|||
if (o->paired)
|
||||
{
|
||||
Eina_Bool need_ping = EINA_FALSE;
|
||||
Obj *adapter = bz_obj_find(o->adapter);
|
||||
|
||||
dev = _devices_conifg_find(o->address);
|
||||
if (dev)
|
||||
if ((dev) && (adapter) && (adapter->powered))
|
||||
{
|
||||
printf("=== dev: %s|%s [%s]\n", dev->addr, o->address, o->name);
|
||||
if ((dev->force_connect) && (!o->connected))
|
||||
{
|
||||
printf("=== %s force con, not conn, ping ok=%i\n", o->address, o->ping_ok);
|
||||
if (o->ping_ok)
|
||||
{
|
||||
printf("=== %s force con, not conn, ping ok=%i\n", o->address, o->ping_ok);
|
||||
bz_obj_connect(o);
|
||||
}
|
||||
else need_ping = EINA_TRUE;
|
||||
}
|
||||
if (dev->unlock)
|
||||
{
|
||||
printf("=== unlock...\n");
|
||||
|
@ -303,24 +294,6 @@ _cb_unlock_stop(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
|||
_unflip(o, obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_force_connect_start(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Obj *o = data;
|
||||
ebluez5_device_prop_force_connect_set(o->address, EINA_TRUE);
|
||||
ebluez5_popup_adapter_change(o);
|
||||
_unflip(o, obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_force_connect_stop(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Obj *o = data;
|
||||
ebluez5_device_prop_force_connect_set(o->address, EINA_FALSE);
|
||||
ebluez5_popup_adapter_change(o);
|
||||
_unflip(o, obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_flip(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
|
@ -582,23 +555,6 @@ _cb_dev_content_get(void *data, Evas_Object *obj,
|
|||
}
|
||||
elm_box_pack_end(bx, bt);
|
||||
evas_object_show(bt);
|
||||
|
||||
if ((dev) && (dev->force_connect))
|
||||
{
|
||||
bt = util_button_icon_add(obj, "bt-force-connect-off",
|
||||
_("Stop this device from being forcefully connected"));
|
||||
evas_object_data_set(bt, "genlist", obj);
|
||||
evas_object_smart_callback_add(bt, "clicked", _cb_force_connect_stop, o);
|
||||
}
|
||||
else
|
||||
{
|
||||
bt = util_button_icon_add(obj, "bt-force-connect-on",
|
||||
_("Force this device to be connected when detected"));
|
||||
evas_object_data_set(bt, "genlist", obj);
|
||||
evas_object_smart_callback_add(bt, "clicked", _cb_force_connect_start, o);
|
||||
}
|
||||
elm_box_pack_end(bx, bt);
|
||||
evas_object_show(bt);
|
||||
}
|
||||
if (o->connected)
|
||||
{
|
||||
|
|
|
@ -30,7 +30,6 @@ static void _binding_change_cb(void *data);
|
|||
static void _action_change_cb(void *data);
|
||||
static void _delete_all_edge_binding_cb(void *data, void *data2);
|
||||
static void _delete_edge_binding_cb(void *data, void *data2);
|
||||
static void _restore_edge_binding_defaults_cb(void *data, void *data2);
|
||||
static void _add_edge_binding_cb(void *data, void *data2);
|
||||
static void _modify_edge_binding_cb(void *data, void *data2);
|
||||
|
||||
|
@ -270,8 +269,6 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
|||
cfdata->gui.o_del_all = ob;
|
||||
e_widget_disabled_set(ob, 1);
|
||||
e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 0, 1, 0);
|
||||
ob = e_widget_button_add(evas, _("Restore Default Bindings"), "enlightenment", _restore_edge_binding_defaults_cb, cfdata, NULL);
|
||||
e_widget_frametable_object_append(of, ob, 0, 3, 2, 1, 1, 0, 1, 0);
|
||||
e_widget_list_object_append(ol, of, 1, 1, 0.5);
|
||||
|
||||
ot = e_widget_table_add(e_win_evas_win_get(evas), 0);
|
||||
|
@ -498,53 +495,6 @@ _delete_edge_binding_cb(void *data, void *data2 EINA_UNUSED)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_restore_edge_binding_defaults_cb(void *data, void *data2 EINA_UNUSED)
|
||||
{
|
||||
E_Config_Bindings *ecb;
|
||||
Eina_Stringshare *prof;
|
||||
E_Config_Dialog_Data *cfdata = data;
|
||||
|
||||
ecb = e_config_domain_system_load("e_bindings", e_config_descriptor_find("E_Config_Bindings"));
|
||||
if (!ecb)
|
||||
{
|
||||
const char *type;
|
||||
|
||||
prof = eina_stringshare_ref(e_config_profile_get());
|
||||
switch (e_config->config_type)
|
||||
{
|
||||
case E_CONFIG_PROFILE_TYPE_DESKTOP:
|
||||
type = "standard";
|
||||
break;
|
||||
case E_CONFIG_PROFILE_TYPE_MOBILE:
|
||||
type = "mobile";
|
||||
break;
|
||||
//case E_CONFIG_PROFILE_TYPE_TABLET: FIXME - not used
|
||||
default:
|
||||
type = "default";
|
||||
break;
|
||||
}
|
||||
e_config_profile_set(type);
|
||||
ecb = e_config_domain_system_load("e_bindings", e_config_descriptor_find("E_Config_Bindings"));
|
||||
e_config_profile_set(prof);
|
||||
eina_stringshare_del(prof);
|
||||
}
|
||||
if (!ecb) return;
|
||||
E_FREE_LIST(cfdata->binding.edge, e_config_binding_edge_free);
|
||||
cfdata->binding.edge = ecb->edge_bindings, ecb->edge_bindings = NULL;
|
||||
e_config_bindings_free(ecb);
|
||||
|
||||
eina_stringshare_del(cfdata->locals.cur);
|
||||
cfdata->locals.cur = NULL;
|
||||
|
||||
_update_edge_binding_list(cfdata);
|
||||
_update_buttons(cfdata);
|
||||
|
||||
e_widget_ilist_unselect(cfdata->gui.o_action_list);
|
||||
e_widget_entry_clear(cfdata->gui.o_params);
|
||||
e_widget_disabled_set(cfdata->gui.o_params, 1);
|
||||
}
|
||||
|
||||
/**************** Updates ***********/
|
||||
static void
|
||||
_update_action_list(E_Config_Dialog_Data *cfdata)
|
||||
|
|
|
@ -24,6 +24,7 @@ struct _E_Config_Dialog_Data
|
|||
double error;
|
||||
double length;
|
||||
unsigned int fingers;
|
||||
int gesture_open_input_devices;
|
||||
} locals;
|
||||
struct
|
||||
{
|
||||
|
@ -75,6 +76,15 @@ _auto_apply_changes(E_Config_Dialog_Data *cfdata)
|
|||
E_Action_Group *actg;
|
||||
E_Action_Description *actd;
|
||||
|
||||
if (cfdata->locals.gesture_open_input_devices != e_config->gesture_open_input_devices)
|
||||
{
|
||||
E_Action *act;
|
||||
|
||||
e_config->gesture_open_input_devices = cfdata->locals.gesture_open_input_devices;
|
||||
act = e_action_find("restart");
|
||||
if ((act) && (act->func.go)) act->func.go(NULL, NULL);
|
||||
}
|
||||
|
||||
if ((!cfdata->locals.cur) || (!cfdata->locals.cur[0]) ||
|
||||
(!cfdata->locals.action) || (!cfdata->locals.action[0])) return;
|
||||
|
||||
|
@ -133,6 +143,7 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
cfdata->locals.source = eina_stringshare_add("");
|
||||
cfdata->locals.cur = NULL;
|
||||
cfdata->locals.dia = NULL;
|
||||
cfdata->locals.gesture_open_input_devices = e_config->gesture_open_input_devices;
|
||||
cfdata->binding.swipe = NULL;
|
||||
|
||||
EINA_LIST_FOREACH(e_bindings->swipe_bindings, l, bi)
|
||||
|
@ -912,7 +923,7 @@ _help_swipe_bindings_cb(void *data EINA_UNUSED, void *data2 EINA_UNUSED)
|
|||
static Evas_Object *
|
||||
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
Evas_Object *o, *ol, *ot, *of, *ob;
|
||||
Evas_Object *o, *ol, *ot, *of, *ob, *oc;
|
||||
|
||||
cfdata->evas = evas;
|
||||
o = e_widget_list_add(evas, 0, 0);
|
||||
|
@ -963,6 +974,9 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
|||
|
||||
e_widget_list_object_append(o, ol, 1, 1, 0.5);
|
||||
|
||||
oc = e_widget_check_add(evas, _("Open input devices"), &(cfdata->locals.gesture_open_input_devices));
|
||||
e_widget_list_object_append(o, oc, 1, 1, 0.5);
|
||||
|
||||
_update_swipe_binding_list(cfdata);
|
||||
_fill_actions_list(cfdata);
|
||||
|
||||
|
|
|
@ -289,7 +289,7 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
|||
grp++;
|
||||
}
|
||||
e_widget_toolbook_page_append(otb, NULL, _("Keyboard Layout"), ol,
|
||||
1, 1, 1, 0, 0.0, 0.0);
|
||||
1, 1, 1, 1, 0.0, 0.0);
|
||||
|
||||
/* Login */
|
||||
ol = e_widget_list_add(evas, 0, 0);
|
||||
|
|
|
@ -17,6 +17,7 @@ struct _E_Config_Dialog_Data
|
|||
Evas_Object *backlight_slider_fade;
|
||||
|
||||
int enable_idle_dim;
|
||||
int ddc;
|
||||
|
||||
double backlight_normal;
|
||||
double backlight_dim;
|
||||
|
@ -56,6 +57,7 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
cfdata->backlight_dim = e_config->backlight.dim * 100.0;
|
||||
cfdata->backlight_transition = e_config->backlight.transition;
|
||||
cfdata->enable_idle_dim = e_config->backlight.idle_dim;
|
||||
cfdata->ddc = e_config->backlight.ddc;
|
||||
cfdata->backlight_timeout = e_config->backlight.timer;
|
||||
cfdata->backlight_battery_timeout = e_config->backlight.battery_timer;
|
||||
}
|
||||
|
@ -87,6 +89,7 @@ _apply_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
|
|||
e_config->backlight.timer = lround(cfdata->backlight_timeout);
|
||||
e_config->backlight.battery_timer = lround(cfdata->backlight_battery_timeout);
|
||||
e_config->backlight.idle_dim = cfdata->enable_idle_dim;
|
||||
e_config->backlight.ddc = cfdata->ddc;
|
||||
|
||||
e_backlight_mode_set(NULL, E_BACKLIGHT_MODE_NORMAL);
|
||||
e_backlight_level_set(NULL, e_config->backlight.normal, -1.0);
|
||||
|
@ -121,7 +124,8 @@ _advanced_check_changed(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *
|
|||
(!EINA_DBL_EQ(e_config->backlight.transition, cfdata->backlight_transition)) ||
|
||||
(!EINA_DBL_EQ(e_config->backlight.timer, cfdata->backlight_timeout)) ||
|
||||
(!EINA_DBL_EQ(e_config->backlight.battery_timer, cfdata->backlight_battery_timeout)) ||
|
||||
(e_config->backlight.idle_dim != cfdata->enable_idle_dim);
|
||||
(e_config->backlight.idle_dim != cfdata->enable_idle_dim) ||
|
||||
(e_config->backlight.ddc != cfdata->ddc);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -152,6 +156,9 @@ _advanced_create_widgets(E_Config_Dialog *cfd EINA_UNUSED, Evas *evas, E_Config_
|
|||
&(cfdata->backlight_dim), NULL, 100);
|
||||
e_widget_list_object_append(o, ob, 1, 1, 0.5);
|
||||
|
||||
ob = e_widget_check_add(evas, _("Desktop Monitor Support (DDC)"), &(cfdata->ddc));
|
||||
e_widget_list_object_append(o, ob, 1, 1, 0.5);
|
||||
|
||||
ob = e_widget_check_add(evas, _("Idle Fade Time"), &(cfdata->enable_idle_dim));
|
||||
e_widget_list_object_append(o, ob, 1, 1, 0.5);
|
||||
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f second(s)"), 5.0, 300.0, 1.0, 0,
|
||||
|
|
|
@ -649,11 +649,7 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
e_lang_list = e_intl_language_list();
|
||||
|
||||
/* Get list of all locales and start making map */
|
||||
#ifdef __OpenBSD__
|
||||
output = popen("ls /usr/share/locale", "r");
|
||||
#else
|
||||
output = popen("locale -a", "r");
|
||||
#endif
|
||||
if ( output )
|
||||
{
|
||||
char line[32];
|
||||
|
|
|
@ -7,7 +7,7 @@ Name[el]=Everything (Starter)
|
|||
Name[eo]=Ĉio (lanĉilo)
|
||||
Name[es]=Everything (Lanzador)
|
||||
Name[fi]=Everything (Käynnistin)
|
||||
Name[fr]=Omni
|
||||
Name[fr]=Omni (Everything)
|
||||
Name[gl]=Everything (Iniciador)
|
||||
Name[it]=Everything
|
||||
Name[ms]=Segalanya (Pemula)
|
||||
|
@ -23,7 +23,7 @@ Comment[el]=Το άρθρωμα της εκτέλεση εντολής παρέ
|
|||
Comment[eo]=La modulo de lanĉo de komandoj provizas dialogon de lanĉilo de aplikaĵoj.
|
||||
Comment[es]=El módulo de ejecutar comandos provee un diálogo para ejecutar aplicaciones.
|
||||
Comment[fi]='Aja komento'-moduuli tuo käytettäväksi ikkunan sovellusten käynnistämiseen.
|
||||
Comment[fr]=Fournit une fenêtre de commande pour lancer des applications.
|
||||
Comment[fr]=Fournit une boîte de dialogue pour lancer des applications.
|
||||
Comment[gl]=Este módulo ofrece un diálogo para iniciar aplicativos.
|
||||
Comment[hu]=A parancs futtató modul egy alkalmazásindítót biztosít a számunkra.
|
||||
Comment[it]=Questo modulo fornisce una finestra di dialogo per l'esecuzione di comandi.
|
||||
|
|
|
@ -259,12 +259,139 @@ _e_fwin_client_hook_focus_unset(void *d EINA_UNUSED, E_Client *ec)
|
|||
evas_object_focus_set(fwin->cur_page->fm_obj, 1);
|
||||
}
|
||||
|
||||
typedef struct _E_Fwin_Mime_Handler
|
||||
{
|
||||
const char *mime;
|
||||
Efreet_Desktop *desktop;
|
||||
E_Fm2_Mime_Handler *handler;
|
||||
} E_Fwin_Mime_Handler;
|
||||
|
||||
static Ecore_Event_Handler *_e_fwin_efreet_desktop_update_handler = NULL;
|
||||
static Eina_List *_e_fwin_mime_all_handlers_list = NULL;
|
||||
|
||||
static int
|
||||
_e_fwin_cb_dir_mime_handler_test(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *path)
|
||||
{
|
||||
const char *rp;
|
||||
|
||||
rp = e_fm2_real_path_get(obj);
|
||||
if ((rp) && (!strcmp(path, rp))) return 1;
|
||||
if (rp) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fwin_cb_dir_mime_handler(void *data, Evas_Object *obj, const char *path)
|
||||
{
|
||||
E_Fwin_Mime_Handler *h = data;
|
||||
Eina_Stringshare *rp;
|
||||
Eina_List *files = NULL;
|
||||
const char *f;
|
||||
|
||||
rp = e_fm2_real_path_get(obj);
|
||||
if ((rp) && (rp == path) &&
|
||||
(!evas_object_data_del(obj, "fileman_terminal_realpath")))
|
||||
{
|
||||
files = eina_list_append(files, eina_stringshare_add(rp));
|
||||
}
|
||||
else
|
||||
{
|
||||
Eina_List *selected;
|
||||
E_Fm2_Icon_Info *ici;
|
||||
|
||||
selected = e_fm2_selected_list_get(obj);
|
||||
EINA_LIST_FREE(selected, ici)
|
||||
{
|
||||
files = eina_list_append(files, eina_stringshare_add(ici->file));
|
||||
}
|
||||
}
|
||||
|
||||
e_exec(e_zone_current_get(), h->desktop, NULL, files, "fileman");
|
||||
EINA_LIST_FREE(files, f) eina_stringshare_del(f);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fwin_mime_all_handlers_fill(void)
|
||||
{
|
||||
E_Fwin_Mime_Handler *h;
|
||||
Eina_List *desktops, *mimes;
|
||||
Efreet_Desktop *desktop;
|
||||
|
||||
desktops = efreet_util_desktop_name_glob_list("*");
|
||||
EINA_LIST_FREE(desktops, desktop)
|
||||
{
|
||||
const char *m, *mime = eina_hash_find
|
||||
(desktop->x, "X-Enlightenment-Action-Mime");
|
||||
if (!mime) continue;
|
||||
|
||||
mimes = efreet_desktop_string_list_parse(mime);
|
||||
EINA_LIST_FREE(mimes, m)
|
||||
{
|
||||
h = calloc(1, sizeof(E_Fwin_Mime_Handler));
|
||||
if (!h) continue;
|
||||
h->mime = eina_stringshare_add(m);
|
||||
h->desktop = desktop;
|
||||
efreet_desktop_ref(desktop);
|
||||
h->handler = e_fm2_mime_handler_new
|
||||
(desktop->name, desktop->icon,
|
||||
_e_fwin_cb_dir_mime_handler, h,
|
||||
_e_fwin_cb_dir_mime_handler_test, h);
|
||||
e_fm2_mime_handler_mime_add(h->handler, h->mime);
|
||||
_e_fwin_mime_all_handlers_list =
|
||||
eina_list_append(_e_fwin_mime_all_handlers_list, h);
|
||||
eina_stringshare_del(m);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fwin_mime_all_handlers_clear(void)
|
||||
{
|
||||
E_Fwin_Mime_Handler *h;
|
||||
|
||||
EINA_LIST_FREE(_e_fwin_mime_all_handlers_list, h)
|
||||
{
|
||||
efreet_desktop_free(h->desktop);
|
||||
e_fm2_mime_handler_mime_del(h->handler, h->mime);
|
||||
e_fm2_mime_handler_free(h->handler);
|
||||
eina_stringshare_del(h->mime);
|
||||
free(h);
|
||||
}
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_e_fwin_cb_efreet_cache_update(void *data EINA_UNUSED, int type EINA_UNUSED, void *ev EINA_UNUSED)
|
||||
{
|
||||
_e_fwin_mime_all_handlers_clear();
|
||||
_e_fwin_mime_all_handlers_fill();
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fwin_mime_all_handlers_init(void)
|
||||
{
|
||||
_e_fwin_efreet_desktop_update_handler =
|
||||
ecore_event_handler_add(EFREET_EVENT_DESKTOP_CACHE_UPDATE,
|
||||
_e_fwin_cb_efreet_cache_update, NULL);
|
||||
_e_fwin_mime_all_handlers_fill();
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fwin_mime_all_handlers_shutdown(void)
|
||||
{
|
||||
_e_fwin_mime_all_handlers_clear();
|
||||
ecore_event_handler_del(_e_fwin_efreet_desktop_update_handler);
|
||||
}
|
||||
|
||||
/* externally accessible functions */
|
||||
int
|
||||
e_fwin_init(void)
|
||||
{
|
||||
focus_out_hook = e_client_hook_add(E_CLIENT_HOOK_FOCUS_UNSET, _e_fwin_client_hook_focus_unset, NULL);
|
||||
fwin_class = eina_stringshare_add("e_fwin");
|
||||
|
||||
_e_fwin_mime_all_handlers_init();
|
||||
|
||||
tdesktop = e_util_terminal_desktop_get();
|
||||
if (!tdesktop) return 1;
|
||||
dir_handler = e_fm2_mime_handler_new(_("Open Terminal here"),
|
||||
|
@ -272,6 +399,7 @@ e_fwin_init(void)
|
|||
_e_fwin_cb_dir_handler, NULL,
|
||||
_e_fwin_cb_dir_handler_test, NULL);
|
||||
e_fm2_mime_handler_mime_add(dir_handler, "inode/directory");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -283,16 +411,26 @@ e_fwin_shutdown(void)
|
|||
EINA_LIST_FREE(fwins, fwin)
|
||||
e_object_del(E_OBJECT(fwin));
|
||||
|
||||
eina_stringshare_replace(&fwin_class, NULL);
|
||||
if (dir_handler)
|
||||
{
|
||||
e_fm2_mime_handler_mime_del(dir_handler, "inode/directory");
|
||||
e_fm2_mime_handler_free(dir_handler);
|
||||
dir_handler = NULL;
|
||||
}
|
||||
if (tdesktop)
|
||||
{
|
||||
efreet_desktop_free(tdesktop);
|
||||
tdesktop = NULL;
|
||||
}
|
||||
efreet_desktop_free(tdesktop);
|
||||
|
||||
tdesktop = NULL;
|
||||
dir_handler = NULL;
|
||||
_e_fwin_mime_all_handlers_shutdown();
|
||||
|
||||
eina_stringshare_replace(&fwin_class, NULL);
|
||||
if (focus_out_hook)
|
||||
{
|
||||
e_client_hook_del(focus_out_hook);
|
||||
focus_out_hook = NULL;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -1078,7 +1216,7 @@ _e_fwin_page_favorites_add(E_Fwin_Page *page)
|
|||
e_widget_scrollframe_focus_object_set(o, page->flist);
|
||||
|
||||
page->flist_frame = o;
|
||||
evas_object_size_hint_min_set(o, 128, 0);
|
||||
evas_object_size_hint_min_set(o, 128 * e_scale, 0);
|
||||
edje_object_part_swallow(page->fwin->bg_obj, "e.swallow.favorites", o);
|
||||
}
|
||||
|
||||
|
|
|
@ -163,7 +163,10 @@ _e_mod_menu_populate_item(void *data, Eio_File *handler EINA_UNUSED, const Eina_
|
|||
return;
|
||||
}
|
||||
}
|
||||
mime = efreet_mime_type_get(mi->label);
|
||||
mime = efreet_mime_special_type_get(path);
|
||||
|
||||
if (!mime) mime = efreet_mime_globs_type_get(path);
|
||||
if (!mime) mime = efreet_mime_fallback_type_get(path);
|
||||
if (!mime) return;
|
||||
if (!strncmp(mime, "image/", 6))
|
||||
{
|
||||
|
@ -406,7 +409,10 @@ _e_mod_menu_recent_cb(void *data EINA_UNUSED,
|
|||
|
||||
if (file)
|
||||
{
|
||||
const char *mime = efreet_mime_type_get(file);
|
||||
const char *mime = efreet_mime_special_type_get(file);
|
||||
|
||||
if (!mime) mime = efreet_mime_globs_type_get(file);
|
||||
if (!mime) mime = efreet_mime_fallback_type_get(file);
|
||||
|
||||
if (mime)
|
||||
{
|
||||
|
@ -437,13 +443,12 @@ _e_mod_menu_recent_cb(void *data EINA_UNUSED,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
_e_mod_menu_populate_recent_cb(void *data EINA_UNUSED,
|
||||
_e_mod_menu_populate_recent_cb(void *data EINA_UNUSED,
|
||||
E_Menu *m EINA_UNUSED,
|
||||
E_Menu_Item *mi EINA_UNUSED)
|
||||
{
|
||||
Eina_List *l;
|
||||
Eina_List *l, *ll;
|
||||
Eina_List *files = (Eina_List *)e_exec_recent_files_get();
|
||||
E_Exec_Recent_File *fl;
|
||||
E_Menu *subm;
|
||||
|
@ -459,7 +464,10 @@ _e_mod_menu_populate_recent_cb(void *data EINA_UNUSED,
|
|||
fname = ecore_file_file_get(fl->file);
|
||||
if (fname)
|
||||
{
|
||||
const char *mime = efreet_mime_type_get(fl->file);
|
||||
const char *mime = efreet_mime_special_type_get(fl->file);
|
||||
|
||||
if (!mime) mime = efreet_mime_globs_type_get(fl->file);
|
||||
if (!mime) mime = efreet_mime_fallback_type_get(fl->file);
|
||||
|
||||
mi2 = e_menu_item_new(subm);
|
||||
e_menu_item_label_set(mi2, fname);
|
||||
|
@ -469,19 +477,25 @@ _e_mod_menu_populate_recent_cb(void *data EINA_UNUSED,
|
|||
e_menu_item_callback_set(mi2, _e_mod_menu_recent_cb, NULL);
|
||||
if (mime)
|
||||
{
|
||||
const char *icon = NULL;
|
||||
char buf[1024];
|
||||
const char *icon_file, *edje_file;
|
||||
const E_Config_Mime_Icon *minf;
|
||||
|
||||
snprintf(buf, sizeof(buf), "e/icons/fileman/mime/%s", mime);
|
||||
edje_file = e_theme_edje_file_get("base/theme/icons", buf);
|
||||
if (edje_file)
|
||||
EINA_LIST_FOREACH(e_config->mime_icons, ll, minf)
|
||||
{
|
||||
e_menu_item_icon_edje_set(mi2, edje_file, buf);
|
||||
if (!strcmp(minf->mime, mime))
|
||||
{
|
||||
icon = minf->icon;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((icon) && (!strcmp(icon, "THUMB")))
|
||||
e_menu_item_icon_file_set(mi2, fl->file);
|
||||
else
|
||||
{
|
||||
icon_file = efreet_mime_type_icon_get(mime, e_config->icon_theme, 48);
|
||||
e_menu_item_icon_file_set(mi2, icon_file);
|
||||
snprintf(buf, sizeof(buf), "fileman/mime/%s", mime);
|
||||
if (!e_util_menu_item_theme_icon_set(mi2, buf))
|
||||
e_util_menu_item_theme_icon_set(mi2, "fileman/mime/unknown");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -489,7 +503,6 @@ _e_mod_menu_populate_recent_cb(void *data EINA_UNUSED,
|
|||
e_menu_thaw(subm);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
_e_mod_fileman_add_recent(E_Menu *m,
|
||||
Eina_Bool need_separator)
|
||||
|
|
|
@ -1948,10 +1948,21 @@ _ibar_cb_icon_move(void *data, Evas *e, Evas_Object *obj, void *event_info EINA_
|
|||
if (!zone)
|
||||
zone = eina_list_data_get(e_comp->zones);
|
||||
}
|
||||
if (chx - (len / 2) < zone->x)
|
||||
if ((ic->ibar->inst->orient == E_GADCON_ORIENT_LEFT) ||
|
||||
(ic->ibar->inst->orient == E_GADCON_ORIENT_CORNER_LT) ||
|
||||
(ic->ibar->inst->orient == E_GADCON_ORIENT_CORNER_LB))
|
||||
sig = "e,origin,left";
|
||||
else if ((chx + (len / 2) > cw) || ((chx + (len / 2) > zone->x + zone->w)))
|
||||
else if ((ic->ibar->inst->orient == E_GADCON_ORIENT_RIGHT) ||
|
||||
(ic->ibar->inst->orient == E_GADCON_ORIENT_CORNER_RT) ||
|
||||
(ic->ibar->inst->orient == E_GADCON_ORIENT_CORNER_RB))
|
||||
sig = "e,origin,right";
|
||||
else
|
||||
{
|
||||
if (chx - (len / 2) < zone->x)
|
||||
sig = "e,origin,left";
|
||||
else if ((chx + (len / 2) > cw) || ((chx + (len / 2) > zone->x + zone->w)))
|
||||
sig = "e,origin,right";
|
||||
}
|
||||
_ibar_icon_signal_emit(ic, sig, "e");
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ Comment[de]=Ein Modul, dass einen Mixer zum Ändern der Lautstärke bereit stell
|
|||
Comment[eo]=Modulo de sonmiksilo por sxanĝi la sonfortecon.
|
||||
Comment[es]=Un módulo que proporciona un mezclador para cambiar el volumen.
|
||||
Comment[fi]=Tämä moduuli tuo käyttöön mikserin äänenvoimakkuuksien säätämistä varten
|
||||
Comment[fr]=Fournit un mélangeur pour régler le volume.
|
||||
Comment[fr]=Un module pour paramétrer le volume et les flux.
|
||||
Comment[gl]=Un módulo que fornece un control para cambiar o volume.
|
||||
Comment[it]=Un modulo che fornisce un mixer per regolare il volume.
|
||||
Comment[ms]=Modul untuk sediakan penadun bagi volum yang berubah.
|
||||
|
|
|
@ -62,12 +62,15 @@ _e_msgbus_window_list_cb(const Eldbus_Service_Interface *iface EINA_UNUSED,
|
|||
EINA_LIST_FOREACH(e_comp->clients, l, ec)
|
||||
{
|
||||
Eldbus_Message_Iter *s;
|
||||
const char *name;
|
||||
|
||||
if (e_client_util_ignored_get(ec)) continue;
|
||||
|
||||
eldbus_message_iter_arguments_append(array, "(si)", &s);
|
||||
if (!s) continue;
|
||||
eldbus_message_iter_arguments_append(s, "si", ec->icccm.name,
|
||||
name = ec->icccm.name;
|
||||
if (!name) name = "";
|
||||
eldbus_message_iter_arguments_append(s, "si", name,
|
||||
e_client_util_win_get(ec));
|
||||
eldbus_message_iter_container_close(array, s);
|
||||
}
|
||||
|
|