forked from enlightenment/enlightenment
patches that i said were in - commit. (see my reply emails)
also finish off a TODO item or 2 SVN revision: 23267
This commit is contained in:
parent
a69bc7767c
commit
97eec41ad9
25
TODO
25
TODO
|
@ -8,6 +8,11 @@ Some of the things (in very short form) that need to be done to E17...
|
|||
BUGS / FIXES
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
* BUG: change exe name in basic mode in eap editor and icon vanishes (don't
|
||||
extract existing icon and write out to tmp .png while rebuilding).
|
||||
* BUG: resolution (xrandr) changes seem to screw the shelf up a bit.
|
||||
* BUG: openoffice2's impress presentation fullscreen has sizing and
|
||||
configuration issues.
|
||||
* BUG: ghost windows happen if windows close when on another desktop or if
|
||||
windows are very short-lived
|
||||
* BUG: k3b has minimization issues when burning cds (it tries to unminimize
|
||||
|
@ -40,6 +45,19 @@ Some of the things (in very short form) that need to be done to E17...
|
|||
ESSENTIAL FEATURES
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
* on xrandr screen res change e moves and resizes windows to fit in the new
|
||||
resolution. this is good and bad. if some other app temporarily changes
|
||||
res this means everything gets squeezed. we need a "temporary resize due to
|
||||
res change" geometry state for apps where they get resized to a new pos/size
|
||||
and the old size/pos stored. on a move or resize etc. by a user this old
|
||||
geom is freed, but on a res change, e takes the old geom, if there, and
|
||||
tries to use it (then limiting geom to the new screen res as it cuurently
|
||||
does) otherwise it creates a new saved geom for the cur geom before
|
||||
limiting it. maximized windows are reset to their old size/pos then
|
||||
re-maximized too. old szie from unmaximize needs to have this check too
|
||||
on unmaximize as do fullscreen windows. NB: what if app moves/resizes
|
||||
itself during this - i assume for now all bets are off with prior geometry
|
||||
then.
|
||||
* language packs: need to have a tool to load/setup a language pack (which
|
||||
means .mo compiled files from a .po, an optional font and a config file that
|
||||
specifies the locale and font) and then install the font(s) either as a user
|
||||
|
@ -78,20 +96,17 @@ Some of the things (in very short form) that need to be done to E17...
|
|||
"NICE TO HAVE" FEATURES
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
* option to allow flipping desktops to wrap at virtual desktop grid edges
|
||||
* winlist and exebuf can let the mouse select items
|
||||
* option to NOT raise on focus in click to focus
|
||||
* switch to desktop of a new window if it opens on another desktop than the
|
||||
current one
|
||||
current one (optional too)
|
||||
* emit signal to submenu entries if they have a submenu shown for them or not
|
||||
* setup configs for gnome and kde (as options) if they are installed (eg
|
||||
run gnome-settings-daemon).
|
||||
* check engine can work on a given screen before using it
|
||||
* check evas engine can work on a given screen before using it
|
||||
* non opaque move/resize
|
||||
* add "osd" subsystem for things like volume controls on keybboards, etc.
|
||||
that overlay the screen
|
||||
* file icons on the desktop (people ask for it) - xdnd for these
|
||||
* "disable this gadget" menu option on gadcon clients
|
||||
* improve drag/resize of gadget items
|
||||
* pager should be able to be configured to control more than the current zone
|
||||
(select which zone they control)
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
|
||||
<TITLE>Enlightenment Developer Documentation</TITLE>
|
||||
<META NAME="GENERATOR" CONTENT="OpenOffice.org 1.1.3 (Linux)">
|
||||
<META NAME="CREATED" CONTENT="20041227;10170000">
|
||||
<META NAME="CHANGED" CONTENT="20041227;10253900">
|
||||
<STYLE>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">
|
||||
<title>Enlightenment Developer Documentation</title>
|
||||
<meta name="GENERATOR" content="OpenOffice.org 1.1.3 (Linux)">
|
||||
<meta name="CREATED" content="20041227;10170000">
|
||||
<meta name="CHANGED" content="20041227;10253900">
|
||||
<style>
|
||||
<!--
|
||||
@page { size: 8.5in 11in }
|
||||
TD P.western { font-size: 8pt }
|
||||
|
@ -20,44 +20,52 @@
|
|||
A.sdendnotesym-western { font-size: 8pt }
|
||||
A.sdendnotesym-cjk { font-family: "Bitstream Vera Sans"; font-size: 8pt }
|
||||
-->
|
||||
</STYLE>
|
||||
</HEAD>
|
||||
<BODY LANG="en-US" DIR="LTR">
|
||||
<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always">
|
||||
<COL WIDTH=256*>
|
||||
<TR>
|
||||
<TD WIDTH=100% VALIGN=TOP>
|
||||
<P CLASS="western" ALIGN=CENTER STYLE="margin-bottom: 0in"><IMG SRC="enlightenment.png" NAME="Graphic1" ALIGN=LEFT WIDTH=320 HEIGHT=320 BORDER=0><FONT FACE="Bitstream Vera Sans"><FONT SIZE=5><B>Enlightenment</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-bottom: 0in"><BR>
|
||||
</P>
|
||||
<P CLASS="western" ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 6pt">Version
|
||||
0.17.0 </FONT></FONT>
|
||||
</P>
|
||||
<P CLASS="western" STYLE="margin-bottom: 0in"><BR>
|
||||
</P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>What
|
||||
is Enlightenment?</B> </FONT></FONT>
|
||||
</P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Enlightenment
|
||||
is a Window Manager for X11. This is the latest incarnation of
|
||||
code of the Enlightenment window manager (often referred to in
|
||||
short as WM). This WM is built on the EFL (Enlightenment
|
||||
Foundation Libraries) that have been worked on very hard over the
|
||||
last few years. These libraries provide a sound base on which to
|
||||
build the WM and related tools, utilities, and applications.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Right
|
||||
now if you are just a "user" this code is NOT for you.
|
||||
You're on your own. If you are a developer wanting to work on the
|
||||
code - read on. But first we should take a break for some
|
||||
history... </FONT></FONT>
|
||||
</P>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<HR>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>A
|
||||
Brief History of Time... err Enlightenment</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">In
|
||||
</style>
|
||||
</head>
|
||||
<body dir="ltr" lang="en-US">
|
||||
<table style="page-break-before: always;" border="0" cellpadding="0"
|
||||
cellspacing="0" width="100%">
|
||||
<col width="256*"> <tbody>
|
||||
<tr>
|
||||
<td valign="top" width="100%">
|
||||
<p class="western" style="margin-bottom: 0in;" align="center"><img
|
||||
src="enlightenment.png" name="Graphic1" align="left" border="0"
|
||||
height="320" width="320"><font face="Bitstream Vera Sans"><font
|
||||
size="5"><b>Enlightenment</b></font></font></p>
|
||||
<p class="western" style="margin-bottom: 0in;"><br>
|
||||
</p>
|
||||
<p class="western" style="margin-bottom: 0in;" align="center"><font
|
||||
style="font-size: 6pt; font-family: sans-serif;">Version
|
||||
0.17.0</font><big><big><big><font face="Bitstream Vera Sans"><font
|
||||
style="font-size: 6pt;" size="1"><big><big><big><big> </big></big></big></big></font></font>
|
||||
</big></big></big></p>
|
||||
<p class="western" style="margin-bottom: 0in;"><br>
|
||||
</p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>What is Enlightenment?</b> </font> </p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;">Enlightenment is a Window
|
||||
Manager for X11. This is the latest incarnation of code of the
|
||||
Enlightenment window manager (often referred to in short as WM). This
|
||||
WM is built on the EFL (Enlightenment Foundation Libraries) that have
|
||||
been worked on very hard over the last few years. These libraries
|
||||
provide a sound base on which to build the WM and related tools,
|
||||
utilities, and applications.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;">Right now if you are just a
|
||||
"user" this code is NOT for you. You're on your own. If you are a
|
||||
developer wanting to work on the code - read on. But first we should
|
||||
take a break for some history... </font> </p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr style="font-family: sans-serif;">
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>A
|
||||
Brief History of Time... err Enlightenment</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">In
|
||||
the past E has undergone 1 major rewrite since release DR
|
||||
(Development Release) 0.1. This rewrite occurred for DR 0.14). DR
|
||||
0.17 heralds another major rewrite. We have to be honest here. The
|
||||
|
@ -76,8 +84,9 @@ and we are proud enough to probably say it's some of the better API's
|
|||
and code of any available in the world or used in any application or
|
||||
WM. It's not the best, but it's pretty good. In doing this rewrite
|
||||
and split, we aim to not make those mistakes again that happened
|
||||
before DR 0.17.0.</FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">With
|
||||
before DR 0.17.0.</font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">With
|
||||
Enlightenment and EFL's massive break-up into smaller sized chunks,
|
||||
many users will complain about “how hard it is to install”
|
||||
because there are so many libraries and inter-dependencies to handle.
|
||||
|
@ -95,64 +104,72 @@ existing infrastructures - or extend them cleanly as needed. Just
|
|||
because an infrastructure or system doesn't provide an accessor or
|
||||
way of doing something does NOT mean you can't or chouldn't add it.
|
||||
Choose a clean “correct” implementation over a nasty hack, all
|
||||
the time. You get the idea. Now, on to the style guide.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Enlightenment
|
||||
Stylin' straight from the top of ma dome</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Firstly
|
||||
the time. You get the idea. Now, on to the style guide.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Enlightenment
|
||||
Stylin' straight from the top of ma dome</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">Firstly
|
||||
comes naming. All functions are name spaced. The EFL libraries begin
|
||||
with library_something_something. It is object oriented naming so you
|
||||
will have system_subsystem_subsystem_object_verb() as a name. For
|
||||
example: e_config_load() or e_border_move() etc. All functions are
|
||||
all lower-case with underscores between "words". All
|
||||
all lower-case with underscores between "words". All
|
||||
functions that are accessed outside a file must have a prototype in
|
||||
the file's header. All files have their code file (e_file.c) and a
|
||||
header (e_file.h). The main "master" header (e.h) includes
|
||||
header (e_file.h). The main "master" header (e.h) includes
|
||||
all the smaller ones. All functions within that file are the same
|
||||
name as the file. i.e. e_frog.c contains functions called
|
||||
e_frog_something(). All internal functions only used within that file
|
||||
should be declared as static and should begin with an underscore.
|
||||
i.e. _e_frog_something(). All "local" globals (global to
|
||||
i.e. _e_frog_something(). All "local" globals (global to
|
||||
that file only) should be declared static and beginning with _e_frog
|
||||
just like functions. All static local functions should be at the end
|
||||
of the file. All static function prototypes should be first at the
|
||||
top of each file. All static local variables should come next, then
|
||||
followed by the accessible functions. Any system that has "state"
|
||||
followed by the accessible functions. Any system that has "state"
|
||||
should have an init and shutdown function. The init and shutdown
|
||||
functions should be called from e_main.c during startup and shutdown
|
||||
of the WM. It is encouraged that even systems that do not have state
|
||||
have an init and shutdown call pair, just in case in future they will
|
||||
gain state internally.</FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Any
|
||||
gain state internally.</font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">Any
|
||||
system that returns objects (allocated structures) should probably
|
||||
use the E_Object system as a parent. See examples on its use in the
|
||||
code. E_Object provides a simple object wrapper with reference
|
||||
counting, object pointer and type checking and safety that should,
|
||||
runtime, trap a lot of potential problems and let the programmer know
|
||||
about them. Use the object type checking macros for checking if an
|
||||
object passed into a function as a parameter is a valid object.</FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Keep
|
||||
object passed into a function as a parameter is a valid object.</font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">Keep
|
||||
to the indentation and spacing style thats there - it makes it easier
|
||||
to read if all the code matches. All functions called as "callbacks"
|
||||
should be called _e_system_cb_something. The "cb" denotes
|
||||
to read if all the code matches. All functions called as "callbacks"
|
||||
should be called _e_system_cb_something. The "cb" denotes
|
||||
that that function may get called by other code, maybe unpredictably,
|
||||
at any time in response to an event, timer, or something mostly out
|
||||
of the control of the program itself. Functions such as the free
|
||||
function for an object aren't the same kind of callback, since they
|
||||
are predictable and controllable, so they do not get "cb"
|
||||
in their name.</FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">So
|
||||
are predictable and controllable, so they do not get "cb"
|
||||
in their name.</font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">So
|
||||
that's the quick rundown on basic coding style. More will likely be
|
||||
added to this list, but the best way to put it all is "look at
|
||||
what's there and follow the same style".</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Tree
|
||||
Layout</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">The
|
||||
added to this list, but the best way to put it all is "look at
|
||||
what's there and follow the same style".</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Tree
|
||||
Layout</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">The
|
||||
E17 source tree is well structured, with a location for everything.
|
||||
In the top-level directory you will find a src directory that is the
|
||||
master directory for all the C source code for the WM and components.
|
||||
You will also find a doc and data directories. The doc directory
|
||||
contains all documentation (this document for example).</FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">The
|
||||
contains all documentation (this document for example).</font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">The
|
||||
data directory contains all cross-platform data needed for the WM to
|
||||
run as well as a basic default theme that it also needs to run.
|
||||
Currently the default theme is not complete at all and is no
|
||||
|
@ -161,8 +178,9 @@ only just enough to make it work and demonstrate an example of how to
|
|||
make a theme. There is also other data used for things like low-level
|
||||
error dialogs (used for example if the theme doesn't work) as well as
|
||||
a default font and other system data such as data for the splash
|
||||
screen displayed while Enlightenment starts up.</FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">The
|
||||
screen displayed while Enlightenment starts up.</font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">The
|
||||
src directory contains 3 main repositories of code. They are bin, lib
|
||||
and modules. The bin directory contains all the source code for the
|
||||
WM itself and any primary executables it uses during execution. The
|
||||
|
@ -175,10 +193,12 @@ Enlightenment too, so if a feature isn't used it doesn't have to use
|
|||
any resources at all. Each module lives in its own subdirectory with
|
||||
the code and special module specific data like images, Edje .eet
|
||||
files etc. that are specific to that module. See further on for more
|
||||
information on modules.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Design
|
||||
Ethos</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">As
|
||||
information on modules.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Design
|
||||
Ethos</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">As
|
||||
for design, Enlightenment doesn't strictly follow a conservative WM
|
||||
design. It does some things quite differently, with the aim of
|
||||
providing more features with simpler internal design to achieve more
|
||||
|
@ -198,9 +218,11 @@ seamlessly and all in sync by using window gravity and resizing of
|
|||
the virtual root container. It also allows the WM to simulate
|
||||
different resolutions very easily since it can control the virtual
|
||||
root window, which is not normally possible to do with the real root
|
||||
window.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Managers</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Managers
|
||||
window.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Managers</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">Managers
|
||||
are the basic unit of window management. One Manager object is
|
||||
created per root window to manage. For more people, even if they run
|
||||
Xinerama across multiple screens, there is only 1 root window, and
|
||||
|
@ -214,9 +236,11 @@ client gets to perform them, thus enabling it to be a WM. A Manager
|
|||
object actually creates a window the size of the root window it
|
||||
manages and covers the root window up completely. Each Manager object
|
||||
may contain 1 or more Container objects which in-turn create their
|
||||
own child windows of the Manager window.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Containers</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Container
|
||||
own child windows of the Manager window.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Containers</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">Container
|
||||
objects create their own windows to CONTAIN managed window frames,
|
||||
the desktop window (the desktop background is actually just a big
|
||||
window that is always kept below all frame windows that contains a
|
||||
|
@ -234,8 +258,9 @@ using an EDJE object for the background, the desktop wallpaper can be
|
|||
animated, react to events and input, scale intelligently (not just
|
||||
“stretch” or “tile”), where the desktop wallpaper designer
|
||||
can specify what elements of the wallpaper scale, align, where and
|
||||
how, if they tile, overlay, underlay each other, and how.</FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Currently
|
||||
how, if they tile, overlay, underlay each other, and how.</font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">Currently
|
||||
the Container only responds to configuration change events to change
|
||||
the background, which needs to be a path to an Edje .eet file that
|
||||
contains a Edje group of the key “desktop/background”. It will
|
||||
|
@ -251,22 +276,27 @@ convert into a Edje .eet file, which now retains the scaling, tiling
|
|||
and other preferences the user selected within the file. The user can
|
||||
now give this file to others and it will retain the same information,
|
||||
without them needing to know if the wallpaper needs to tile as a
|
||||
pattern, stretch etc.</FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">The
|
||||
pattern, stretch etc.</font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">The
|
||||
desktop canvas is also shared by many modules that may display things
|
||||
like battery meters, cpu load, launcher bars, drop shadows etc. on
|
||||
the desktop background. The desktop canvas lets this be a bit more
|
||||
organized than it would be with a “free for all” drawing to the
|
||||
root window under more conservative WM's.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Borders</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Borders
|
||||
root window under more conservative WM's.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Borders</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">Borders
|
||||
are the frame outside an application window that is controlled by the
|
||||
WM and that holds the application window within, and allows users to
|
||||
move, resize, shade, lower, close and otherwise control windows. This
|
||||
is currently buggy and not very useful and needs work in combination
|
||||
with the Manager system.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Menus</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Enlightenment
|
||||
with the Manager system.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Menus</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">Enlightenment
|
||||
has its own Menu widget code to allow for highly themable menus that
|
||||
match your WM's theme. These menus are intended to act as ways to
|
||||
launch programs, select actions to perform with context sensitive
|
||||
|
@ -277,9 +307,11 @@ let the user navigate with the keyboard, mouse wheel or mouse. It
|
|||
currently needs work to support shaped menu windows, be able to add,
|
||||
delete and modify menu items while the item is still realized, and a
|
||||
set of other things listed in the TODO list at the top of the
|
||||
e_menu.c source file.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Modules</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Modules
|
||||
e_menu.c source file.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Modules</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">Modules
|
||||
are a new and powerful way to extend E17 by being able to load and
|
||||
execute code during runtime that may be shipped with E17 or even
|
||||
developed after installation as enhancements and additions. This
|
||||
|
@ -289,10 +321,12 @@ loaded etc. It is possible to have “dormant” modules that are
|
|||
loaded but not enabled. They will use memory and resources for the
|
||||
module entry and the binary executable code loaded into memory, but
|
||||
nothing else. An enabled module will also use resources for objects,
|
||||
images, etc. etc.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Dropshadow
|
||||
Module</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
|
||||
images, etc. etc.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Dropshadow
|
||||
Module</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">This
|
||||
module demonstrates the Container shape system allowing a module to
|
||||
monitor obscuring shapes in a container. This lets the module, in
|
||||
this case, draw soft shadows under these obscuring shapes. It is a
|
||||
|
@ -301,10 +335,12 @@ visible elements on the screen you can click on or control directly
|
|||
with the mouse or keyboard. It could do with some optimization work
|
||||
with the blur algorithm, like clipping out the obscuring shape
|
||||
entirely from the blurring algorithm, and perhaps finding a way of
|
||||
blurring using a Gaussian blur that is faster.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>IBar
|
||||
Module</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">The
|
||||
blurring using a Gaussian blur that is faster.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>IBar
|
||||
Module</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">The
|
||||
IBar module is a template for doing a “launcher panel” in E17. It
|
||||
allows the user to manage a list of frequently used applications to
|
||||
go into the IBar's panel. It is an attempt to unify the configuration
|
||||
|
@ -317,8 +353,9 @@ in the list. It uses the Application interface to fetch a list of
|
|||
applications and monitor this list for changes on disk. The IBar also
|
||||
allows itself to be resized and dragged around the edges of the
|
||||
screen, set to fill a edge, auto-size to fit its contents, or be a
|
||||
fixed size.</FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">It
|
||||
fixed size.</font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">It
|
||||
needs work to be done on auto hide and auto show, so on an auto show
|
||||
it could signal other parts of E17, for example, to slide all windows
|
||||
out of the way, or other such features. It needs work to display
|
||||
|
@ -326,15 +363,19 @@ application names, descriptions and other such information as well.
|
|||
It also needs to support the icon size changing on the fly as well as
|
||||
saving and loading its configuration, On of the largest pieces of
|
||||
work is to support subdirectories in the bar's application list. How
|
||||
best to do this is still up in the air. For now this isn't supported.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Test
|
||||
Module</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
|
||||
best to do this is still up in the air. For now this isn't supported.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Test
|
||||
Module</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">This
|
||||
is just a test module for playing with new module features. It will
|
||||
not make its way into a final E17 release, but can be used as a bare
|
||||
skeleton for building a new module.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Applications</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
|
||||
skeleton for building a new module.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Applications</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">This
|
||||
subsystem is responsible for being able to list applications held in
|
||||
E17 specific application directories. This system can inform other
|
||||
parts of E17 and modules of changes, such as an application being
|
||||
|
@ -342,8 +383,9 @@ deleted or added, its name or icon changed, the order of applications
|
|||
in a directory changing, an application being executed or displaying
|
||||
its window, or finishing execution. It can share the application
|
||||
lists between multiple systems to save RAM and CPU and I/O in loading
|
||||
them multiple times.</FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">It
|
||||
them multiple times.</font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">It
|
||||
may be of surprise to find E17 is not loading the XML, .desktop
|
||||
entries etc. etc. than KDE and GNOME use. In all honesty that system
|
||||
is a little overcomplicated and hard to keep up with. It also is not
|
||||
|
@ -354,9 +396,11 @@ fully scalable and animated icons as well, with excellent compression
|
|||
abilities. The intent is to have external tools that can import and
|
||||
create such files FROM existing system databases of applications and
|
||||
monitor these for changes, reflecting those changes in Enlightenments
|
||||
application directories.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>IPC</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">IPC
|
||||
application directories.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>IPC</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">IPC
|
||||
(inter process communication) is provided in E17 as a mechanism for
|
||||
another application to send commands and requests to Enlightenment
|
||||
and receive responses with information. This mechanism is intended to
|
||||
|
@ -365,69 +409,89 @@ things via a communications channel built into the WM. E17 uses the
|
|||
Ecore IPC system to do this. So far it support no commands at all,
|
||||
but will accept clients connecting. Many commands need to be
|
||||
implemented here, such as being able to ask E17 to load or unload a
|
||||
module, change background, change focus mode, theme, restart etc.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Objects</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
|
||||
module, change background, change focus mode, theme, restart etc.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Objects</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">This
|
||||
provides a basic Object Oriented handling system for E17. Any major
|
||||
“object” in E17 should use this system for handling reference
|
||||
counting, destruction and creation of objects, as it provides safety
|
||||
mechanisms to check if an object has accidentally been destroyed and
|
||||
still has a pointer to it, keep references on objects intact etc.
|
||||
This should be used as much as possible, as well as the macros it
|
||||
provides for checking on entry points into subsystem functions etc.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Pointers</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
|
||||
provides for checking on entry points into subsystem functions etc.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Pointers</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">This
|
||||
subsystem handles setting of X mouse cursors in an abstract fashion.
|
||||
In theory E just looks at a cursor as RGBA pixel data. In future
|
||||
Ecore will be expanded to be able to set full color cursors in X as
|
||||
well as monochrome versions of them. Currently it is very simplistic
|
||||
loading a fixed PNG as a cursor. This needs to be improved.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Box</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
|
||||
loading a fixed PNG as a cursor. This needs to be improved.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Box</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">This
|
||||
is a basic Evas Smart Object that acts as a horizontal or vertical
|
||||
box layout container. It needs more features for layout, like better
|
||||
non homogeneous layout. This is a handy object that is sued by menus
|
||||
and the IBar module for starters.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Icons</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
|
||||
and the IBar module for starters.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Icons</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">This
|
||||
is an Evas Smart Object that creates a icon display object That
|
||||
handles scaling the icon sensibly within the object bounds, so the
|
||||
application doesn't have to handle trying to retain aspect ratio for
|
||||
the object. This is a simple smart object and indicative of possibly
|
||||
more in future to go into E17's code to save time and effort.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Paths</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
|
||||
more in future to go into E17's code to save time and effort.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Paths</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">This
|
||||
helps E17 find files in a list of paths/directories. There isn't a
|
||||
lot to say about this except that it works and may need some minimal
|
||||
expansion in future.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>User
|
||||
Information</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
|
||||
expansion in future.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>User
|
||||
Information</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">This
|
||||
returns information about a user such as their home directory. This
|
||||
will expand in future.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Virtual
|
||||
and Multiple Desktops</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
|
||||
is not implemented yet.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Error
|
||||
Dialogs</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
|
||||
will expand in future.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Virtual
|
||||
and Multiple Desktops</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">This
|
||||
is not implemented yet.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Error
|
||||
Dialogs</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">This
|
||||
displays very basic error dialogs right now, either as text in the
|
||||
console if E17 isn't ready to run graphically yet, or as text in a
|
||||
graphical dialog box. This needs to be made more robust, so it can
|
||||
display errors if it cannot find the font and images for the basic
|
||||
error dialog. It should also be expanded to support fully themed
|
||||
dialogs if the theme loads properly and properly supports theming of
|
||||
dialogs, so dialogs look good.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Initialization
|
||||
Splash Screen</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
|
||||
dialogs, so dialogs look good.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Initialization
|
||||
Splash Screen</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">This
|
||||
keeps the user amused while E17 starts up and launches all programs.
|
||||
For now it is artificially fixed to stay up for 4 seconds so you can
|
||||
enjoy its radiant splendor, as E17 starts so quickly you'd never see
|
||||
it, but in future it will stay up until the WM is all ready to go.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Configuration</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Loading
|
||||
it, but in future it will stay up until the WM is all ready to go.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Configuration</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">Loading
|
||||
and saving configuration is a big task. E17 uses EET directly as its
|
||||
underlying layer for saving and loading configuration. The E17 Config
|
||||
system simply loads all the initial configuration values, and saves
|
||||
|
@ -438,18 +502,22 @@ listener (the number of listeners needs to be reduced), so maybe
|
|||
loading config values in sections/groups and deferring a reload in a
|
||||
Ecore Job would limit the reloading effects. Also declaring config
|
||||
values and how to load and declare them is required. Maybe a big
|
||||
table with default values, min, max, step, descriptions etc.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>File
|
||||
Operations</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Files
|
||||
table with default values, min, max, step, descriptions etc.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>File
|
||||
Operations</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">Files
|
||||
need to be accessed, listed, found, examined as part of E17 running.
|
||||
This file has simplified, easy-to-use functions for doing anything
|
||||
related to files. This file will expand over time as more file
|
||||
operations are needed.</FONT></FONT></P>
|
||||
<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Miscellaneous
|
||||
Utilities</B></FONT></FONT></P>
|
||||
<P CLASS="western" STYLE="margin-left: 0.79in"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Things
|
||||
operations are needed.</font></p>
|
||||
<p style="font-family: sans-serif;" class="western"><font
|
||||
style="font-size: 8pt;"><b>Miscellaneous
|
||||
Utilities</b></font></p>
|
||||
<p class="western" style="margin-left: 0.79in; font-family: sans-serif;"><font
|
||||
style="font-size: 8pt;">Things
|
||||
that are useful in many places but do not have enough scope to have a
|
||||
file of their own go into this file.</FONT></FONT></P>
|
||||
</BODY>
|
||||
</HTML>
|
||||
file of their own go into this file.</font></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1035,6 +1035,42 @@ ACT_FN_GO(zone_desk_linear_flip_to)
|
|||
}
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
ACT_FN_GO(zone_deskshow_toggle)
|
||||
{
|
||||
E_Border *bd;
|
||||
E_Border_List *bl;
|
||||
E_Zone *zone;
|
||||
|
||||
zone = _e_actions_zone_get(obj);
|
||||
if (!zone) zone = e_util_zone_current_get(e_manager_current_get());
|
||||
if (zone)
|
||||
{
|
||||
bl = e_container_border_list_first(zone->container);
|
||||
while ((bd = e_container_border_list_next(bl)))
|
||||
{
|
||||
if (bd->desk == e_desk_current_get(bd->zone))
|
||||
{
|
||||
if (zone->deskshow_toggle)
|
||||
{
|
||||
if (bd->deskshow) e_border_uniconify(bd);
|
||||
bd->deskshow = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bd->iconic) continue;
|
||||
if (bd->client.netwm.state.skip_taskbar) continue;
|
||||
if (bd->user_skip_winlist) continue;
|
||||
e_border_iconify(bd);
|
||||
bd->deskshow = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
zone->deskshow_toggle = zone->deskshow_toggle ? 0 : 1;
|
||||
e_container_border_list_free(bl);
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
static void
|
||||
_e_actions_cb_menu_end(void *data, E_Menu *m)
|
||||
|
@ -1602,10 +1638,10 @@ e_actions_init(void)
|
|||
|
||||
/* zone_deskshow_toggle */
|
||||
ACT_GO(zone_deskshow_toggle);
|
||||
e_register_action_predef_name(_("Desktop"), _("Show the desktop"),
|
||||
e_register_action_predef_name(_("Desktop"), _("Show The Desktop"),
|
||||
"zone_deskshow_toggle", NULL,
|
||||
EDIT_RESTRICT_ACTION | EDIT_RESTRICT_PARAMS, 0);
|
||||
|
||||
|
||||
/* desk_linear_flip_to */
|
||||
ACT_GO(desk_flip_to);
|
||||
e_register_action_predef_name(_("Desktop"), _("Flip Desktop To..."),
|
||||
|
|
|
@ -528,6 +528,8 @@ _e_app_list_prepend_relative(E_App *add, E_App *before, E_App *parent)
|
|||
}
|
||||
if (before == NULL) fprintf(f, "%s\n", ecore_file_get_file(add->path));
|
||||
fclose(f);
|
||||
snprintf(buf, sizeof(buf), "%s/.eap.cache.cfg", parent->path);
|
||||
ecore_file_unlink(buf);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -572,6 +574,8 @@ _e_app_files_list_prepend_relative(Evas_List *files, E_App *before, E_App *paren
|
|||
}
|
||||
}
|
||||
fclose(f);
|
||||
snprintf(buf, sizeof(buf), "%s/.eap.cache.cfg", parent->path);
|
||||
ecore_file_unlink(buf);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -589,6 +593,8 @@ _e_app_files_download(Evas_List *files)
|
|||
snprintf(buf, sizeof(buf), "%s/%s", _e_apps_path_all,
|
||||
ecore_file_get_file(file));
|
||||
if (!ecore_file_download(file, buf, NULL, NULL, NULL)) continue;
|
||||
snprintf(buf, sizeof(buf), "%s/.eap.cache.cfg", _e_apps_path_all);
|
||||
ecore_file_unlink(buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -722,6 +728,8 @@ e_app_files_prepend_relative(Evas_List *files, E_App *before)
|
|||
fprintf(f, "%s\n", ecore_file_get_file(a->path));
|
||||
}
|
||||
fclose(f);
|
||||
snprintf(buf, sizeof(buf), "%s/.eap.cache.cfg", before->parent->path);
|
||||
ecore_file_unlink(buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -762,6 +770,8 @@ e_app_files_append(Evas_List *files, E_App *parent)
|
|||
fprintf(f, "%s\n", ecore_file_get_file(file));
|
||||
}
|
||||
fclose(f);
|
||||
snprintf(buf, sizeof(buf), "%s/.eap.cache.cfg", parent->path);
|
||||
ecore_file_unlink(buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -793,6 +803,8 @@ e_app_remove(E_App *a)
|
|||
a2 = l->data;
|
||||
e_app_remove(a2);
|
||||
}
|
||||
snprintf(buf, sizeof(buf), "%s/.eap.cache.cfg", a->parent->path);
|
||||
ecore_file_unlink(buf);
|
||||
_e_app_change(a, E_APP_DEL);
|
||||
a->parent = NULL;
|
||||
e_object_unref(E_OBJECT(a));
|
||||
|
@ -879,41 +891,51 @@ EAPI E_App *
|
|||
e_app_window_name_class_title_role_find(const char *name, const char *class,
|
||||
const char *title, const char *role)
|
||||
{
|
||||
Evas_List *l;
|
||||
Evas_List *l, *l_match = NULL;
|
||||
int ok, match = 0;
|
||||
E_App *a, *a_match = NULL;
|
||||
|
||||
if ((!name) && (!class) && (!title) && (!role))
|
||||
return NULL;
|
||||
|
||||
for (l = _e_apps_list; l; l = l->next)
|
||||
{
|
||||
E_App *a;
|
||||
int ok;
|
||||
|
||||
a = l->data;
|
||||
ok = 0;
|
||||
if ((a->win_name) || (a->win_class) || (a->win_title) || (a->win_role))
|
||||
{
|
||||
if ((!a->win_name) ||
|
||||
((a->win_name) && (name) && (e_util_glob_match(name, a->win_name))))
|
||||
ok++;
|
||||
if ((!a->win_class) ||
|
||||
((a->win_class) && (class) && (e_util_glob_match(class, a->win_class))))
|
||||
ok++;
|
||||
if ((!a->win_title) ||
|
||||
if ((a->win_name) && (a->win_class) && (name) && (class))
|
||||
{
|
||||
if ((e_util_glob_match(name, a->win_name)) &&
|
||||
(e_util_glob_match(class, a->win_class)))
|
||||
ok += 2;
|
||||
}
|
||||
else if ((a->win_class) && (class))
|
||||
{
|
||||
if (e_util_glob_match(class, a->win_class))
|
||||
ok += 2;
|
||||
}
|
||||
|
||||
if (//(!a->win_title) ||
|
||||
((a->win_title) && (title) && (e_util_glob_match(title, a->win_title))))
|
||||
ok++;
|
||||
if ((!a->win_role) ||
|
||||
if (//(!a->win_role) ||
|
||||
((a->win_role) && (role) && (e_util_glob_match(role, a->win_role))))
|
||||
ok++;
|
||||
}
|
||||
if (ok >= 4)
|
||||
if (ok > match)
|
||||
{
|
||||
_e_apps_list = evas_list_remove_list(_e_apps_list, l);
|
||||
_e_apps_list = evas_list_prepend(_e_apps_list, a);
|
||||
return a;
|
||||
match = ok;
|
||||
a_match = a;
|
||||
l_match = l;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
if ((a_match) && (l_match))
|
||||
{
|
||||
_e_apps_list = evas_list_remove_list(_e_apps_list, l);
|
||||
_e_apps_list = evas_list_prepend(_e_apps_list, a_match);
|
||||
}
|
||||
return a_match;
|
||||
}
|
||||
|
||||
EAPI E_App *
|
||||
|
@ -1315,6 +1337,8 @@ e_app_fields_save(E_App *a)
|
|||
{
|
||||
Evas_List *l;
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s/.eap.cache.cfg", a->parent->path);
|
||||
ecore_file_unlink(buf);
|
||||
_e_app_change(a->parent, E_APP_CHANGE);
|
||||
_e_app_change(a, E_APP_CHANGE);
|
||||
for (l = a->references; l; l = l->next)
|
||||
|
@ -1529,6 +1553,13 @@ _e_app_new_save(E_App *a)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (a->parent)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s/.eap.cache.cfg", a->parent->path);
|
||||
ecore_file_unlink(buf);
|
||||
}
|
||||
ecore_file_unlink(tmpn);
|
||||
return 1;
|
||||
}
|
||||
|
@ -2035,6 +2066,13 @@ _e_app_save_order(E_App *app)
|
|||
fprintf(f, "%s\n", ecore_file_get_file(a->path));
|
||||
}
|
||||
fclose(f);
|
||||
if (app->parent)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s/.eap.cache.cfg", app ->parent->path);
|
||||
ecore_file_unlink(buf);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -298,6 +298,16 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map, int internal)
|
|||
bd->client.netwm.state.skip_pager = 0;
|
||||
bd->client.netwm.state.fullscreen = 0;
|
||||
bd->client.netwm.state.stacking = E_STACKING_NONE;
|
||||
bd->client.netwm.action.move = 0;
|
||||
bd->client.netwm.action.resize = 0;
|
||||
bd->client.netwm.action.minimize = 0;
|
||||
bd->client.netwm.action.shade = 0;
|
||||
bd->client.netwm.action.stick = 0;
|
||||
bd->client.netwm.action.maximized_h = 0;
|
||||
bd->client.netwm.action.maximized_v = 0;
|
||||
bd->client.netwm.action.fullscreen = 0;
|
||||
bd->client.netwm.action.change_desktop = 0;
|
||||
bd->client.netwm.action.close = 0;
|
||||
bd->client.netwm.type = ECORE_X_WINDOW_TYPE_UNKNOWN;
|
||||
|
||||
{
|
||||
|
@ -305,6 +315,7 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map, int internal)
|
|||
Ecore_X_Atom *atoms;
|
||||
|
||||
atoms = ecore_x_window_prop_list(bd->client.win, &at_num);
|
||||
bd->client.icccm.fetch.command = 1;
|
||||
if (atoms)
|
||||
{
|
||||
/* icccm */
|
||||
|
@ -2919,6 +2930,14 @@ _e_border_free(E_Border *bd)
|
|||
if (bd->client.icccm.icon_name) free(bd->client.icccm.icon_name);
|
||||
if (bd->client.icccm.machine) free(bd->client.icccm.machine);
|
||||
if (bd->client.icccm.window_role) free(bd->client.icccm.window_role);
|
||||
if ((bd->client.icccm.command.argc > 0) && (bd->client.icccm.command.argv))
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < bd->client.icccm.command.argc; i++)
|
||||
free(bd->client.icccm.command.argv[i]);
|
||||
free(bd->client.icccm.command.argv);
|
||||
}
|
||||
if (bd->client.netwm.name) free(bd->client.netwm.name);
|
||||
if (bd->client.netwm.icon_name) free(bd->client.netwm.icon_name);
|
||||
e_object_del(E_OBJECT(bd->shape));
|
||||
|
@ -4500,6 +4519,11 @@ _e_border_eval(E_Border *bd)
|
|||
int change_urgent = 0;
|
||||
|
||||
/* fetch any info queued to be fetched */
|
||||
if (bd->client.icccm.fetch.client_leader)
|
||||
{
|
||||
bd->client.icccm.client_leader = ecore_x_icccm_client_leader_get(bd->client.win);
|
||||
bd->client.icccm.fetch.client_leader = 0;
|
||||
}
|
||||
if (bd->client.icccm.fetch.title)
|
||||
{
|
||||
if (bd->client.icccm.title) free(bd->client.icccm.title);
|
||||
|
@ -4553,78 +4577,6 @@ _e_border_eval(E_Border *bd)
|
|||
bd->changes.icon = 1;
|
||||
bd->client.icccm.fetch.name_class = 0;
|
||||
}
|
||||
if (bd->client.icccm.fetch.icon_name)
|
||||
{
|
||||
if (bd->client.icccm.icon_name) free(bd->client.icccm.icon_name);
|
||||
bd->client.icccm.icon_name = ecore_x_icccm_icon_name_get(bd->client.win);
|
||||
|
||||
bd->client.icccm.fetch.icon_name = 0;
|
||||
}
|
||||
if (bd->client.netwm.fetch.icon_name)
|
||||
{
|
||||
if (bd->client.netwm.icon_name) free(bd->client.netwm.icon_name);
|
||||
ecore_x_netwm_icon_name_get(bd->client.win, &bd->client.netwm.icon_name);
|
||||
|
||||
bd->client.netwm.fetch.icon_name = 0;
|
||||
}
|
||||
if (bd->client.netwm.fetch.icon)
|
||||
{
|
||||
if (bd->client.netwm.icons)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < bd->client.netwm.num_icons; i++)
|
||||
free(bd->client.netwm.icons[i].data);
|
||||
free(bd->client.netwm.icons);
|
||||
}
|
||||
if (!ecore_x_netwm_icons_get(bd->client.win,
|
||||
&bd->client.netwm.icons, &bd->client.netwm.num_icons))
|
||||
{
|
||||
printf("ERROR: Fetch icon from client\n");
|
||||
bd->client.netwm.icons = NULL;
|
||||
bd->client.netwm.num_icons = 0;
|
||||
}
|
||||
else
|
||||
bd->changes.icon = 1;
|
||||
bd->client.netwm.fetch.icon = 0;
|
||||
}
|
||||
if (bd->client.netwm.fetch.user_time)
|
||||
{
|
||||
ecore_x_netwm_user_time_get(bd->client.win, &bd->client.netwm.user_time);
|
||||
|
||||
bd->client.netwm.fetch.user_time = 0;
|
||||
}
|
||||
if (bd->client.netwm.fetch.strut)
|
||||
{
|
||||
if (!ecore_x_netwm_strut_partial_get(bd->client.win,
|
||||
&bd->client.netwm.strut.left,
|
||||
&bd->client.netwm.strut.right,
|
||||
&bd->client.netwm.strut.top,
|
||||
&bd->client.netwm.strut.bottom,
|
||||
&bd->client.netwm.strut.left_start_y,
|
||||
&bd->client.netwm.strut.left_end_y,
|
||||
&bd->client.netwm.strut.right_start_y,
|
||||
&bd->client.netwm.strut.right_end_y,
|
||||
&bd->client.netwm.strut.top_start_x,
|
||||
&bd->client.netwm.strut.top_end_x,
|
||||
&bd->client.netwm.strut.bottom_start_x,
|
||||
&bd->client.netwm.strut.bottom_end_x))
|
||||
{
|
||||
ecore_x_netwm_strut_get(bd->client.win,
|
||||
&bd->client.netwm.strut.left, &bd->client.netwm.strut.right,
|
||||
&bd->client.netwm.strut.top, &bd->client.netwm.strut.bottom);
|
||||
|
||||
bd->client.netwm.strut.left_start_y = 0;
|
||||
bd->client.netwm.strut.left_end_y = 0;
|
||||
bd->client.netwm.strut.right_start_y = 0;
|
||||
bd->client.netwm.strut.right_end_y = 0;
|
||||
bd->client.netwm.strut.top_start_x = 0;
|
||||
bd->client.netwm.strut.top_end_x = 0;
|
||||
bd->client.netwm.strut.bottom_start_x = 0;
|
||||
bd->client.netwm.strut.bottom_end_x = 0;
|
||||
}
|
||||
|
||||
bd->client.netwm.fetch.strut = 0;
|
||||
}
|
||||
if (bd->client.icccm.fetch.state)
|
||||
{
|
||||
bd->client.icccm.state = ecore_x_icccm_state_get(bd->client.win);
|
||||
|
@ -4676,8 +4628,33 @@ _e_border_eval(E_Border *bd)
|
|||
{
|
||||
if (bd->client.icccm.machine) free(bd->client.icccm.machine);
|
||||
bd->client.icccm.machine = ecore_x_icccm_client_machine_get(bd->client.win);
|
||||
if ((bd->client.icccm.client_leader) &&
|
||||
(!bd->client.icccm.machine))
|
||||
ecore_x_icccm_client_machine_get(bd->client.icccm.client_leader);
|
||||
bd->client.icccm.fetch.machine = 0;
|
||||
}
|
||||
if (bd->client.icccm.fetch.command)
|
||||
{
|
||||
if ((bd->client.icccm.command.argc > 0) && (bd->client.icccm.command.argv))
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < bd->client.icccm.command.argc; i++)
|
||||
free(bd->client.icccm.command.argv[i]);
|
||||
free(bd->client.icccm.command.argv);
|
||||
}
|
||||
bd->client.icccm.command.argc = 0;
|
||||
bd->client.icccm.command.argv = NULL;
|
||||
ecore_x_icccm_command_get(bd->client.win,
|
||||
&(bd->client.icccm.command.argc),
|
||||
&(bd->client.icccm.command.argv));
|
||||
if ((bd->client.icccm.client_leader) &&
|
||||
(!bd->client.icccm.command.argv))
|
||||
ecore_x_icccm_command_get(bd->client.icccm.client_leader,
|
||||
&(bd->client.icccm.command.argc),
|
||||
&(bd->client.icccm.command.argv));
|
||||
bd->client.icccm.fetch.command = 0;
|
||||
}
|
||||
if (bd->client.icccm.fetch.hints)
|
||||
{
|
||||
int accepts_focus = 1;
|
||||
|
@ -4789,16 +4766,84 @@ _e_border_eval(E_Border *bd)
|
|||
bd->client.icccm.transient_for = ecore_x_icccm_transient_for_get(bd->client.win);
|
||||
bd->client.icccm.fetch.transient_for = 0;
|
||||
}
|
||||
if (bd->client.icccm.fetch.client_leader)
|
||||
{
|
||||
bd->client.icccm.client_leader = ecore_x_icccm_client_leader_get(bd->client.win);
|
||||
bd->client.icccm.fetch.client_leader = 0;
|
||||
}
|
||||
if (bd->client.icccm.fetch.window_role)
|
||||
{
|
||||
bd->client.icccm.window_role = ecore_x_icccm_window_role_get(bd->client.win);
|
||||
bd->client.icccm.fetch.window_role = 0;
|
||||
}
|
||||
if (bd->client.icccm.fetch.icon_name)
|
||||
{
|
||||
if (bd->client.icccm.icon_name) free(bd->client.icccm.icon_name);
|
||||
bd->client.icccm.icon_name = ecore_x_icccm_icon_name_get(bd->client.win);
|
||||
|
||||
bd->client.icccm.fetch.icon_name = 0;
|
||||
}
|
||||
if (bd->client.netwm.fetch.icon_name)
|
||||
{
|
||||
if (bd->client.netwm.icon_name) free(bd->client.netwm.icon_name);
|
||||
ecore_x_netwm_icon_name_get(bd->client.win, &bd->client.netwm.icon_name);
|
||||
|
||||
bd->client.netwm.fetch.icon_name = 0;
|
||||
}
|
||||
if (bd->client.netwm.fetch.icon)
|
||||
{
|
||||
if (bd->client.netwm.icons)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < bd->client.netwm.num_icons; i++)
|
||||
free(bd->client.netwm.icons[i].data);
|
||||
free(bd->client.netwm.icons);
|
||||
}
|
||||
if (!ecore_x_netwm_icons_get(bd->client.win,
|
||||
&bd->client.netwm.icons, &bd->client.netwm.num_icons))
|
||||
{
|
||||
printf("ERROR: Fetch icon from client\n");
|
||||
bd->client.netwm.icons = NULL;
|
||||
bd->client.netwm.num_icons = 0;
|
||||
}
|
||||
else
|
||||
bd->changes.icon = 1;
|
||||
bd->client.netwm.fetch.icon = 0;
|
||||
}
|
||||
if (bd->client.netwm.fetch.user_time)
|
||||
{
|
||||
ecore_x_netwm_user_time_get(bd->client.win, &bd->client.netwm.user_time);
|
||||
|
||||
bd->client.netwm.fetch.user_time = 0;
|
||||
}
|
||||
if (bd->client.netwm.fetch.strut)
|
||||
{
|
||||
if (!ecore_x_netwm_strut_partial_get(bd->client.win,
|
||||
&bd->client.netwm.strut.left,
|
||||
&bd->client.netwm.strut.right,
|
||||
&bd->client.netwm.strut.top,
|
||||
&bd->client.netwm.strut.bottom,
|
||||
&bd->client.netwm.strut.left_start_y,
|
||||
&bd->client.netwm.strut.left_end_y,
|
||||
&bd->client.netwm.strut.right_start_y,
|
||||
&bd->client.netwm.strut.right_end_y,
|
||||
&bd->client.netwm.strut.top_start_x,
|
||||
&bd->client.netwm.strut.top_end_x,
|
||||
&bd->client.netwm.strut.bottom_start_x,
|
||||
&bd->client.netwm.strut.bottom_end_x))
|
||||
{
|
||||
ecore_x_netwm_strut_get(bd->client.win,
|
||||
&bd->client.netwm.strut.left, &bd->client.netwm.strut.right,
|
||||
&bd->client.netwm.strut.top, &bd->client.netwm.strut.bottom);
|
||||
|
||||
bd->client.netwm.strut.left_start_y = 0;
|
||||
bd->client.netwm.strut.left_end_y = 0;
|
||||
bd->client.netwm.strut.right_start_y = 0;
|
||||
bd->client.netwm.strut.right_end_y = 0;
|
||||
bd->client.netwm.strut.top_start_x = 0;
|
||||
bd->client.netwm.strut.top_end_x = 0;
|
||||
bd->client.netwm.strut.bottom_start_x = 0;
|
||||
bd->client.netwm.strut.bottom_end_x = 0;
|
||||
}
|
||||
|
||||
bd->client.netwm.fetch.strut = 0;
|
||||
}
|
||||
if (bd->changes.shape)
|
||||
{
|
||||
Ecore_X_Rectangle *rects;
|
||||
|
@ -5825,7 +5870,8 @@ _e_border_eval(E_Border *bd)
|
|||
grabbed = 1;
|
||||
e_object_ref(E_OBJECT(bd->cur_mouse_action));
|
||||
bd->cur_mouse_action->func.go(E_OBJECT(bd), NULL);
|
||||
e_border_raise(bd);
|
||||
if (e_config->border_raise_on_mouse_action)
|
||||
e_border_raise(bd);
|
||||
e_border_focus_set(bd, 1, 1);
|
||||
}
|
||||
bd->changes.visible = 0;
|
||||
|
@ -6361,7 +6407,10 @@ _e_border_resize_begin(E_Border *bd)
|
|||
int w, h;
|
||||
|
||||
if (!bd->lock_user_stacking)
|
||||
e_border_raise(bd);
|
||||
{
|
||||
if (e_config->border_raise_on_mouse_action)
|
||||
e_border_raise(bd);
|
||||
}
|
||||
if ((bd->shaded) || (bd->shading) ||
|
||||
(((bd->maximized & E_MAXIMIZE_TYPE) == E_MAXIMIZE_FULLSCREEN) && (!e_config->allow_manip)) ||
|
||||
(bd->fullscreen) || (bd->lock_user_size))
|
||||
|
@ -6463,7 +6512,10 @@ static int
|
|||
_e_border_move_begin(E_Border *bd)
|
||||
{
|
||||
if (!bd->lock_user_stacking)
|
||||
e_border_raise(bd);
|
||||
{
|
||||
if (e_config->border_raise_on_mouse_action)
|
||||
e_border_raise(bd);
|
||||
}
|
||||
if ((((bd->maximized & E_MAXIMIZE_TYPE) == E_MAXIMIZE_FULLSCREEN) && (!e_config->allow_manip)) ||
|
||||
(bd->fullscreen) || (bd->lock_user_location))
|
||||
return 0;
|
||||
|
|
|
@ -150,6 +150,7 @@ struct _E_Border
|
|||
unsigned char shaped : 1;
|
||||
unsigned char argb : 1;
|
||||
|
||||
/* ICCCM */
|
||||
struct {
|
||||
char *title;
|
||||
char *name;
|
||||
|
@ -177,6 +178,10 @@ struct _E_Border
|
|||
unsigned char urgent : 1;
|
||||
unsigned char delete_request : 1;
|
||||
unsigned char request_pos : 1;
|
||||
struct {
|
||||
int argc;
|
||||
char **argv;
|
||||
} command;
|
||||
struct {
|
||||
unsigned char title : 1;
|
||||
unsigned char name_class : 1;
|
||||
|
@ -189,8 +194,11 @@ struct _E_Border
|
|||
unsigned char client_leader : 1;
|
||||
unsigned char window_role : 1;
|
||||
unsigned char state : 1;
|
||||
unsigned char command : 1;
|
||||
} fetch;
|
||||
} icccm;
|
||||
|
||||
/* MWM */
|
||||
struct {
|
||||
Ecore_X_MWM_Hint_Func func;
|
||||
Ecore_X_MWM_Hint_Decor decor;
|
||||
|
@ -201,14 +209,16 @@ struct _E_Border
|
|||
unsigned char hints : 1;
|
||||
} fetch;
|
||||
} mwm;
|
||||
|
||||
/* NetWM */
|
||||
struct {
|
||||
pid_t pid;
|
||||
unsigned int desktop;
|
||||
char *name;
|
||||
char *icon_name;
|
||||
pid_t pid;
|
||||
unsigned int desktop;
|
||||
char *name;
|
||||
char *icon_name;
|
||||
Ecore_X_Icon *icons;
|
||||
int num_icons;
|
||||
unsigned int user_time;
|
||||
int num_icons;
|
||||
unsigned int user_time;
|
||||
struct {
|
||||
int left;
|
||||
int right;
|
||||
|
@ -247,6 +257,20 @@ struct _E_Border
|
|||
E_Stacking stacking;
|
||||
} state;
|
||||
|
||||
/* NetWM Window allowed actions */
|
||||
struct {
|
||||
unsigned char move : 1;
|
||||
unsigned char resize : 1;
|
||||
unsigned char minimize : 1;
|
||||
unsigned char shade : 1;
|
||||
unsigned char stick : 1;
|
||||
unsigned char maximized_h : 1;
|
||||
unsigned char maximized_v : 1;
|
||||
unsigned char fullscreen : 1;
|
||||
unsigned char change_desktop : 1;
|
||||
unsigned char close : 1;
|
||||
} action;
|
||||
|
||||
Ecore_X_Window_Type type;
|
||||
int startup_id;
|
||||
|
||||
|
|
|
@ -466,6 +466,10 @@ e_config_init(void)
|
|||
E_CONFIG_VAL(D, T, display_res_hz, INT);
|
||||
E_CONFIG_VAL(D, T, display_res_rotation, INT);
|
||||
|
||||
E_CONFIG_VAL(D, T, border_raise_on_mouse_action, INT);
|
||||
E_CONFIG_VAL(D, T, border_raise_on_focus, INT);
|
||||
E_CONFIG_VAL(D, T, desk_flip_wrap, INT);
|
||||
|
||||
e_config = e_config_domain_load("e", _e_config_edd);
|
||||
if (e_config)
|
||||
{
|
||||
|
@ -863,6 +867,9 @@ e_config_init(void)
|
|||
CFG_KEYBIND(E_BINDING_CONTEXT_ANY, "l",
|
||||
E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
|
||||
"desk_lock", NULL);
|
||||
CFG_KEYBIND(E_BINDING_CONTEXT_ANY, "d",
|
||||
E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
|
||||
"zone_deskshow_toggle", NULL);
|
||||
}
|
||||
{
|
||||
E_Config_Binding_Signal *eb;
|
||||
|
@ -1126,6 +1133,12 @@ e_config_init(void)
|
|||
}
|
||||
IFCFGEND;
|
||||
|
||||
IFCFG(0x0094); /* the version # where this value(s) was introduced */
|
||||
e_config->border_raise_on_mouse_action = 1;
|
||||
e_config->border_raise_on_focus = 1;
|
||||
e_config->desk_flip_wrap = 0;
|
||||
IFCFGEND;
|
||||
|
||||
#if 0 /* example of new config */
|
||||
IFCFG(0x0090); /* the version # where this value(s) was introduced */
|
||||
e_config->new_value = 10; /* set the value(s) */
|
||||
|
@ -1214,7 +1227,10 @@ e_config_init(void)
|
|||
E_CONFIG_LIMIT(e_config->display_res_height, 1, 8192);
|
||||
E_CONFIG_LIMIT(e_config->display_res_hz, 0, 250);
|
||||
E_CONFIG_LIMIT(e_config->display_res_rotation, 0, 0xff);
|
||||
|
||||
E_CONFIG_LIMIT(e_config->border_raise_on_mouse_action, 0, 1);
|
||||
E_CONFIG_LIMIT(e_config->border_raise_on_focus, 0, 1);
|
||||
E_CONFIG_LIMIT(e_config->desk_flip_wrap, 0, 1);
|
||||
|
||||
/* FIXME: disabled auto apply because it causes problems */
|
||||
e_config->cfgdlg_auto_apply = 0;
|
||||
|
||||
|
|
|
@ -229,6 +229,9 @@ struct _E_Config
|
|||
int display_res_height; // GUI
|
||||
int display_res_hz; // GUI
|
||||
int display_res_rotation; // GUI
|
||||
int border_raise_on_mouse_action; // GUI
|
||||
int border_raise_on_focus; // GUI
|
||||
int desk_flip_wrap; // GUI
|
||||
};
|
||||
|
||||
struct _E_Config_Module
|
||||
|
|
|
@ -263,8 +263,10 @@ e_desk_last_focused_focus(E_Desk *desk)
|
|||
{
|
||||
bd = l->data;
|
||||
if ((!bd->iconic) && (bd->visible) &&
|
||||
(((bd->desk == desk) ||
|
||||
((bd->sticky) && (bd->zone == desk->zone)))))
|
||||
(((bd->desk == desk)
|
||||
// Don't focus sticky windows as last focused win
|
||||
// || ((bd->sticky) && (bd->zone == desk->zone))
|
||||
)))
|
||||
{
|
||||
/* this was the window last focused in this desktop */
|
||||
e_border_focus_set(bd, 1, 1);
|
||||
|
|
|
@ -43,7 +43,10 @@ e_focus_event_mouse_in(E_Border* bd)
|
|||
if (e_config->auto_raise_delay == 0.0)
|
||||
{
|
||||
if (!bd->lock_user_stacking)
|
||||
e_border_raise(bd);
|
||||
{
|
||||
if (e_config->border_raise_on_focus)
|
||||
e_border_raise(bd);
|
||||
}
|
||||
}
|
||||
else
|
||||
bd->raise_timer = ecore_timer_add(e_config->auto_raise_delay, _e_focus_raise_timer, bd);
|
||||
|
@ -82,12 +85,18 @@ e_focus_event_mouse_down(E_Border* bd)
|
|||
if (!bd->lock_focus_out)
|
||||
e_border_focus_set(bd, 1, 1);
|
||||
if (!bd->lock_user_stacking)
|
||||
e_border_raise(bd);
|
||||
{
|
||||
if (e_config->border_raise_on_focus)
|
||||
e_border_raise(bd);
|
||||
}
|
||||
}
|
||||
else if (e_config->always_click_to_raise)
|
||||
{
|
||||
if (!bd->lock_user_stacking)
|
||||
e_border_raise(bd);
|
||||
{
|
||||
if (e_config->border_raise_on_focus)
|
||||
e_border_raise(bd);
|
||||
}
|
||||
}
|
||||
else if (e_config->always_click_to_focus)
|
||||
{
|
||||
|
@ -194,8 +203,7 @@ _e_focus_raise_timer(void* data)
|
|||
E_Border *bd;
|
||||
|
||||
bd = data;
|
||||
if (!bd->lock_user_stacking)
|
||||
e_border_raise(bd);
|
||||
if (!bd->lock_user_stacking) e_border_raise(bd);
|
||||
bd->raise_timer = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -906,6 +906,51 @@ _e_gadcon_client_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
e_gadcon_client_edit_begin(gcc);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_gadcon_client_cb_menu_remove(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
E_Gadcon_Client *gcc;
|
||||
E_Config_Gadcon *cf_gc;
|
||||
Evas_List *l;
|
||||
|
||||
gcc = data;
|
||||
for (l = e_config->gadcons; l; l = l->next)
|
||||
{
|
||||
cf_gc = l->data;
|
||||
if ((!cf_gc->name) || (!cf_gc->id) ||
|
||||
(!gcc->gadcon->name) || (!gcc->gadcon->id)) continue;
|
||||
if ((!strcmp(cf_gc->name, gcc->gadcon->name)) &&
|
||||
(!strcmp(cf_gc->id, gcc->gadcon->id)))
|
||||
{
|
||||
for (l = cf_gc->clients; l; l = l->next)
|
||||
{
|
||||
E_Config_Gadcon_Client *cf_gcc;
|
||||
|
||||
cf_gcc = l->data;
|
||||
if ((!cf_gcc->name) || (!cf_gcc->id) || (!gcc->name) ||
|
||||
(!gcc->id)) continue;
|
||||
if ((!strcmp(cf_gcc->name, gcc->name)) &&
|
||||
(!strcmp(cf_gcc->id, gcc->id)))
|
||||
{
|
||||
E_Gadcon *gc;
|
||||
|
||||
gc = gcc->gadcon;
|
||||
if (cf_gcc->name) evas_stringshare_del(cf_gcc->name);
|
||||
if (cf_gcc->id) evas_stringshare_del(cf_gcc->id);
|
||||
if (cf_gcc->style) evas_stringshare_del(cf_gcc->style);
|
||||
free(cf_gcc);
|
||||
cf_gc->clients = evas_list_remove_list(cf_gc->clients, l);
|
||||
e_gadcon_unpopulate(gc);
|
||||
e_gadcon_populate(gc);
|
||||
e_config_save_queue();
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu, int flags)
|
||||
{
|
||||
|
@ -963,6 +1008,14 @@ e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu, int f
|
|||
e_menu_item_label_set(mi, _("Begin editing"));
|
||||
e_util_menu_item_edje_icon_set(mi, "enlightenment/edit");
|
||||
e_menu_item_callback_set(mi, _e_gadcon_client_cb_menu_edit, gcc);
|
||||
|
||||
mi = e_menu_item_new(menu);
|
||||
e_menu_item_separator_set(mi, 1);
|
||||
|
||||
mi = e_menu_item_new(menu);
|
||||
e_menu_item_label_set(mi, _("Remove this gadget"));
|
||||
e_util_menu_item_edje_icon_set(mi, "enlightenment/remove");
|
||||
e_menu_item_callback_set(mi, _e_gadcon_client_cb_menu_remove, gcc);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -430,7 +430,15 @@ e_hints_window_init(E_Border *bd)
|
|||
/* It's ok not to have fetch flag, should only be set on startup
|
||||
* and not changed. */
|
||||
if (!ecore_x_netwm_pid_get(bd->client.win, &bd->client.netwm.pid))
|
||||
bd->client.netwm.pid = -1;
|
||||
{
|
||||
if (bd->client.icccm.client_leader)
|
||||
{
|
||||
if (!ecore_x_netwm_pid_get(bd->client.icccm.client_leader, &bd->client.netwm.pid))
|
||||
bd->client.netwm.pid = -1;
|
||||
}
|
||||
else
|
||||
bd->client.netwm.pid = -1;
|
||||
}
|
||||
|
||||
if (bd->client.netwm.state.sticky)
|
||||
{
|
||||
|
@ -555,6 +563,36 @@ e_hints_window_state_set(E_Border *bd)
|
|||
ecore_x_netwm_window_state_set(bd->client.win, state, num);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_hints_allowed_action_set(E_Border *bd)
|
||||
{
|
||||
Ecore_X_Action action[10];
|
||||
int num = 0;
|
||||
|
||||
if (bd->client.netwm.action.move)
|
||||
action[num++] = ECORE_X_ACTION_MOVE;
|
||||
if (bd->client.netwm.action.resize)
|
||||
action[num++] = ECORE_X_ACTION_RESIZE;
|
||||
if (bd->client.netwm.action.minimize)
|
||||
action[num++] = ECORE_X_ACTION_MINIMIZE;
|
||||
if (bd->client.netwm.action.shade)
|
||||
action[num++] = ECORE_X_ACTION_SHADE;
|
||||
if (bd->client.netwm.action.stick)
|
||||
action[num++] = ECORE_X_ACTION_STICK;
|
||||
if (bd->client.netwm.action.maximized_h)
|
||||
action[num++] = ECORE_X_ACTION_MAXIMIZE_HORZ;
|
||||
if (bd->client.netwm.action.maximized_v)
|
||||
action[num++] = ECORE_X_ACTION_MAXIMIZE_VERT;
|
||||
if (bd->client.netwm.action.fullscreen)
|
||||
action[num++] = ECORE_X_ACTION_FULLSCREEN;
|
||||
if (bd->client.netwm.action.change_desktop)
|
||||
action[num++] = ECORE_X_ACTION_CHANGE_DESKTOP;
|
||||
if (bd->client.netwm.action.close)
|
||||
action[num++] = ECORE_X_ACTION_CLOSE;
|
||||
|
||||
ecore_x_netwm_allowed_action_set(bd->client.win, action, num);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_hints_window_type_set(E_Border *bd)
|
||||
{
|
||||
|
@ -877,6 +915,98 @@ e_hints_window_state_get(E_Border *bd)
|
|||
}
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_hints_allowed_action_update(E_Border *bd, Ecore_X_Action action)
|
||||
{
|
||||
switch (action)
|
||||
{
|
||||
case ECORE_X_ACTION_MOVE:
|
||||
break;
|
||||
case ECORE_X_ACTION_RESIZE:
|
||||
break;
|
||||
case ECORE_X_ACTION_MINIMIZE:
|
||||
break;
|
||||
case ECORE_X_ACTION_SHADE:
|
||||
break;
|
||||
case ECORE_X_ACTION_STICK:
|
||||
break;
|
||||
case ECORE_X_ACTION_MAXIMIZE_HORZ:
|
||||
break;
|
||||
case ECORE_X_ACTION_MAXIMIZE_VERT:
|
||||
break;
|
||||
case ECORE_X_ACTION_FULLSCREEN:
|
||||
break;
|
||||
case ECORE_X_ACTION_CHANGE_DESKTOP:
|
||||
break;
|
||||
case ECORE_X_ACTION_CLOSE:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_hints_allowed_action_get(E_Border *bd)
|
||||
{
|
||||
Ecore_X_Action *action;
|
||||
unsigned int i;
|
||||
unsigned int num;
|
||||
|
||||
bd->client.netwm.action.move = 0;
|
||||
bd->client.netwm.action.resize = 0;
|
||||
bd->client.netwm.action.minimize = 0;
|
||||
bd->client.netwm.action.shade = 0;
|
||||
bd->client.netwm.action.stick = 0;
|
||||
bd->client.netwm.action.maximized_h = 0;
|
||||
bd->client.netwm.action.maximized_v = 0;
|
||||
bd->client.netwm.action.fullscreen = 0;
|
||||
bd->client.netwm.action.change_desktop = 0;
|
||||
bd->client.netwm.action.close = 0;
|
||||
|
||||
ecore_x_netwm_allowed_action_get(bd->client.win, &action, &num);
|
||||
if (action)
|
||||
{
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
switch (action[i])
|
||||
{
|
||||
case ECORE_X_ACTION_MOVE:
|
||||
bd->client.netwm.action.move = 1;
|
||||
break;
|
||||
case ECORE_X_ACTION_RESIZE:
|
||||
bd->client.netwm.action.resize = 1;
|
||||
break;
|
||||
case ECORE_X_ACTION_MINIMIZE:
|
||||
bd->client.netwm.action.minimize = 1;
|
||||
break;
|
||||
case ECORE_X_ACTION_SHADE:
|
||||
bd->client.netwm.action.shade = 1;
|
||||
break;
|
||||
case ECORE_X_ACTION_STICK:
|
||||
bd->client.netwm.action.stick = 1;
|
||||
break;
|
||||
case ECORE_X_ACTION_MAXIMIZE_HORZ:
|
||||
bd->client.netwm.action.maximized_h = 1;
|
||||
break;
|
||||
case ECORE_X_ACTION_MAXIMIZE_VERT:
|
||||
bd->client.netwm.action.maximized_v = 1;
|
||||
break;
|
||||
case ECORE_X_ACTION_FULLSCREEN:
|
||||
bd->client.netwm.action.fullscreen = 1;
|
||||
break;
|
||||
case ECORE_X_ACTION_CHANGE_DESKTOP:
|
||||
bd->client.netwm.action.change_desktop = 1;
|
||||
break;
|
||||
case ECORE_X_ACTION_CLOSE:
|
||||
bd->client.netwm.action.close = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
free(action);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
EAPI void
|
||||
e_hints_window_visible_set(E_Border *bd)
|
||||
{
|
||||
|
|
|
@ -42,7 +42,7 @@ struct _E_Config_Dialog_Data
|
|||
int apply_shade;
|
||||
int apply_zone;
|
||||
int apply_skip_winlist;
|
||||
int apply_run; // unused atm
|
||||
int apply_run;
|
||||
} remember;
|
||||
};
|
||||
|
||||
|
@ -292,7 +292,8 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
(cfdata->remember.apply_locks) || (cfdata->remember.apply_layer) ||
|
||||
(cfdata->remember.apply_border) || (cfdata->remember.apply_sticky) ||
|
||||
(cfdata->remember.apply_desktop) || (cfdata->remember.apply_shade) ||
|
||||
(cfdata->remember.apply_zone) || (cfdata->remember.apply_skip_winlist)))
|
||||
(cfdata->remember.apply_zone) || (cfdata->remember.apply_skip_winlist) ||
|
||||
(cfdata->remember.apply_run)))
|
||||
{
|
||||
if (cfdata->border->remember)
|
||||
{
|
||||
|
@ -486,9 +487,6 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
ob = e_widget_check_add(evas, _("Match only one window"), &(cfdata->remember.apply_first_only));
|
||||
e_widget_list_object_append(o, ob, 1, 1, 0.5);
|
||||
|
||||
of = e_widget_frametable_add(evas, _("Properties to remember"), 0);
|
||||
ob = e_widget_check_add(evas, _("Position"), &(cfdata->remember.apply_pos));
|
||||
e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 1);
|
||||
|
@ -512,5 +510,14 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
e_widget_frametable_object_append(of, ob, 1, 4, 1, 1, 1, 1, 1, 1);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
ob = e_widget_check_add(evas, _("Match only one window"), &(cfdata->remember.apply_first_only));
|
||||
e_widget_list_object_append(o, ob, 1, 1, 0.5);
|
||||
|
||||
if (cfdata->border->client.icccm.command.argv)
|
||||
{
|
||||
ob = e_widget_check_add(evas, _("Start this program on login"), &(cfdata->remember.apply_run));
|
||||
e_widget_list_object_append(o, ob, 1, 1, 0.5);
|
||||
}
|
||||
|
||||
return o;
|
||||
}
|
||||
|
|
|
@ -17,10 +17,11 @@ struct _E_Config_Dialog_Data
|
|||
/*- BASIC -*/
|
||||
int x;
|
||||
int y;
|
||||
int flip;
|
||||
// int flip;
|
||||
/*- ADVANCED -*/
|
||||
int use_edge_flip;
|
||||
double edge_flip_timeout;
|
||||
int flip_wrap;
|
||||
};
|
||||
|
||||
/* a nice easy setup function that does the dirty work */
|
||||
|
@ -52,6 +53,7 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
cfdata->y = e_config->zone_desks_y_count;
|
||||
cfdata->use_edge_flip = e_config->use_edge_flip;
|
||||
cfdata->edge_flip_timeout = e_config->edge_flip_timeout;
|
||||
cfdata->flip_wrap = e_config->desk_flip_wrap;
|
||||
}
|
||||
|
||||
static void *
|
||||
|
@ -131,6 +133,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
|
||||
e_config->use_edge_flip = cfdata->use_edge_flip;
|
||||
e_config->edge_flip_timeout = cfdata->edge_flip_timeout;
|
||||
e_config->desk_flip_wrap = cfdata->flip_wrap;
|
||||
|
||||
e_zone_update_flip_all();
|
||||
e_config_save_queue();
|
||||
|
@ -190,6 +193,9 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_slider_add(evas, 1, 0, _("%1.1f sec"), 0.0, 2.0, 0.05, 0, &(cfdata->edge_flip_timeout), NULL, 200);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_check_add(evas, _("Wrap desktops around when flipping"), &(cfdata->flip_wrap));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
return o;
|
||||
|
|
|
@ -25,6 +25,8 @@ struct _E_Config_Dialog_Data
|
|||
int window_resist;
|
||||
int gadget_resist;
|
||||
int allow_manip;
|
||||
int border_raise_on_mouse_action;
|
||||
int border_raise_on_focus;
|
||||
};
|
||||
|
||||
/* a nice easy setup function that does the dirty work */
|
||||
|
@ -65,6 +67,8 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
if (!cfdata->maximize_direction)
|
||||
cfdata->maximize_direction = E_MAXIMIZE_BOTH;
|
||||
cfdata->allow_manip = e_config->allow_manip;
|
||||
cfdata->border_raise_on_mouse_action = e_config->border_raise_on_mouse_action;
|
||||
cfdata->border_raise_on_focus = e_config->border_raise_on_focus;
|
||||
}
|
||||
|
||||
static void *
|
||||
|
@ -113,6 +117,8 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
e_config->gadget_resist = cfdata->gadget_resist;
|
||||
e_config->maximize_policy = cfdata->maximize_policy | cfdata->maximize_direction;
|
||||
e_config->allow_manip = cfdata->allow_manip;
|
||||
e_config->border_raise_on_mouse_action = cfdata->border_raise_on_mouse_action;
|
||||
e_config->border_raise_on_focus = cfdata->border_raise_on_focus;
|
||||
e_config_save_queue();
|
||||
return 1; /* Apply was OK */
|
||||
}
|
||||
|
@ -208,5 +214,12 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
of = e_widget_framelist_add(evas, _("Raise Window"), 0);
|
||||
ob = e_widget_check_add(evas, _("Raise when starting to move or resize"), &(cfdata->border_raise_on_mouse_action));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_check_add(evas, _("Raise when clicking to focus"), &(cfdata->border_raise_on_focus));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
|
|
@ -57,6 +57,8 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
for (l = e_config->gadcons; l; l = l->next)
|
||||
{
|
||||
cfdata->cf_gc = l->data;
|
||||
if ((!cfdata->cf_gc->name) || (!cfdata->cf_gc->id) ||
|
||||
(!cfdata->gc->name) || (!cfdata->gc->id)) continue;
|
||||
if ((!strcmp(cfdata->cf_gc->name, cfdata->gc->name)) &&
|
||||
(!strcmp(cfdata->cf_gc->id, cfdata->gc->id)))
|
||||
{
|
||||
|
|
|
@ -25,6 +25,7 @@ static int _e_int_menus_main_run_defer_cb (void *data);
|
|||
static void _e_int_menus_main_run (void *data, E_Menu *m, E_Menu_Item*mi);
|
||||
static int _e_int_menus_main_lock_defer_cb (void *data);
|
||||
static void _e_int_menus_main_lock (void *data, E_Menu *m, E_Menu_Item*mi);
|
||||
static void _e_int_menus_main_lock_showhide (void *data, E_Menu *m, E_Menu_Item*mi);
|
||||
static void _e_int_menus_main_restart (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_int_menus_main_exit (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_int_menus_apps_scan (E_Menu *m);
|
||||
|
@ -375,6 +376,15 @@ _e_int_menus_main_lock(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
ecore_idle_enterer_add(_e_int_menus_main_lock_defer_cb, m->zone);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_int_menus_main_showhide(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
E_Action *act;
|
||||
|
||||
act = e_action_find("zone_deskshow_toggle");
|
||||
if (act) act->func.go(m->zone, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_int_menus_main_fm(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
|
@ -520,6 +530,11 @@ _e_int_menus_desktops_pre_cb(void *data, E_Menu *m)
|
|||
e_util_menu_item_edje_icon_set(mi, "enlightenment/lock");
|
||||
e_menu_item_callback_set(mi, _e_int_menus_main_lock, NULL);
|
||||
|
||||
mi = e_menu_item_new(m);
|
||||
e_menu_item_label_set(mi, _("Show/Hide All Windows"));
|
||||
e_util_menu_item_edje_icon_set(mi, "enlightenment/showhide");
|
||||
e_menu_item_callback_set(mi, _e_int_menus_main_showhide, NULL);
|
||||
|
||||
mi = e_menu_item_new(m);
|
||||
e_menu_item_separator_set(mi, 1);
|
||||
|
||||
|
|
|
@ -538,7 +538,7 @@ main(int argc, char **argv)
|
|||
}
|
||||
_e_main_shutdown_push(e_app_shutdown);
|
||||
/* do remember stuff */
|
||||
if (!e_remember_init())
|
||||
if (!e_remember_init(after_restart ? E_STARTUP_RESTART: E_STARTUP_START))
|
||||
{
|
||||
e_error_message_show(_("Enlightenment cannot setup remember settings."));
|
||||
_e_main_shutdown(-1);
|
||||
|
|
|
@ -15,18 +15,25 @@ static void _e_remember_free(E_Remember *rem);
|
|||
/* externally accessible functions */
|
||||
|
||||
EAPI int
|
||||
e_remember_init(void)
|
||||
e_remember_init(E_Startup_Mode mode)
|
||||
{
|
||||
Evas_List *l;
|
||||
int after_restart = 0;
|
||||
|
||||
for (l = e_config->remembers; l; l = l->next)
|
||||
if (mode == E_STARTUP_START)
|
||||
{
|
||||
E_Remember *rem;
|
||||
|
||||
rem = l->data;
|
||||
if ((rem->apply & E_REMEMBER_APPLY_RUN) &&
|
||||
(rem->prop.command))
|
||||
e_util_head_exec(rem->prop.head, rem->prop.command);
|
||||
for (l = e_config->remembers; l; l = l->next)
|
||||
{
|
||||
E_Remember *rem;
|
||||
|
||||
rem = l->data;
|
||||
if ((rem->apply & E_REMEMBER_APPLY_RUN) &&
|
||||
(rem->prop.command))
|
||||
{
|
||||
printf("REMEMBER CMD: \"%s\"\n", rem->prop.command);
|
||||
e_util_head_exec(rem->prop.head, rem->prop.command);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -235,9 +242,44 @@ e_remember_update(E_Remember *rem, E_Border *bd)
|
|||
rem->prop.zone = bd->zone->num;
|
||||
|
||||
rem->prop.head = bd->zone->container->manager->num;
|
||||
/* FIXME: e17 doesn't fetch WM_COMMAND property yet
|
||||
if (rem->prop.command) evas_stringshare_del(rem->prop.command);
|
||||
*/
|
||||
|
||||
if ((bd->client.icccm.command.argc > 0) &&
|
||||
(bd->client.icccm.command.argv))
|
||||
{
|
||||
char buf[4096];
|
||||
int i, j, k;
|
||||
|
||||
buf[0] = 0;
|
||||
k = 0;
|
||||
for (i = 0; i < bd->client.icccm.command.argc; i++)
|
||||
{
|
||||
for (j = 0; bd->client.icccm.command.argv[i][j]; j++)
|
||||
{
|
||||
if (k >= (sizeof(buf) - 10))
|
||||
{
|
||||
buf[k] = 0;
|
||||
goto done;
|
||||
}
|
||||
if ((bd->client.icccm.command.argv == ' ') ||
|
||||
(bd->client.icccm.command.argv == '\t') ||
|
||||
(bd->client.icccm.command.argv == '\\') ||
|
||||
(bd->client.icccm.command.argv == '\"') ||
|
||||
(bd->client.icccm.command.argv == '\'') ||
|
||||
(bd->client.icccm.command.argv == '$') ||
|
||||
(bd->client.icccm.command.argv == '%'))
|
||||
{
|
||||
buf[k] = '\\';
|
||||
k++;
|
||||
}
|
||||
buf[k] = bd->client.icccm.command.argv[i][j];
|
||||
k++;
|
||||
}
|
||||
}
|
||||
buf[k] = 0;
|
||||
done:
|
||||
rem->prop.command = evas_stringshare_add(buf);
|
||||
}
|
||||
|
||||
|
||||
e_config_save_queue();
|
||||
}
|
||||
|
|
|
@ -91,7 +91,7 @@ struct _E_Remember
|
|||
} prop;
|
||||
};
|
||||
|
||||
EAPI int e_remember_init(void);
|
||||
EAPI int e_remember_init(E_Startup_Mode mode);
|
||||
EAPI int e_remember_shutdown(void);
|
||||
EAPI E_Remember *e_remember_new(void);
|
||||
EAPI int e_remember_usable_get(E_Remember *rem);
|
||||
|
|
|
@ -21,10 +21,10 @@ static void _e_zone_update_flip(E_Zone *zone);
|
|||
EAPI int E_EVENT_ZONE_DESK_COUNT_SET = 0;
|
||||
EAPI int E_EVENT_POINTER_WARP = 0;
|
||||
|
||||
#define E_ZONE_FLIP_UP(zone) ((zone)->desk_y_current > 0)
|
||||
#define E_ZONE_FLIP_RIGHT(zone) (((zone)->desk_x_current + 1) < (zone)->desk_x_count)
|
||||
#define E_ZONE_FLIP_DOWN(zone) (((zone)->desk_y_current + 1) < (zone)->desk_y_count)
|
||||
#define E_ZONE_FLIP_LEFT(zone) ((zone)->desk_x_current > 0)
|
||||
#define E_ZONE_FLIP_LEFT(zone) ((e_config->desk_flip_wrap && ((zone)->desk_x_count > 1)) || ((zone)->desk_x_current > 0))
|
||||
#define E_ZONE_FLIP_RIGHT(zone) ((e_config->desk_flip_wrap && ((zone)->desk_x_count > 1)) || (((zone)->desk_x_current + 1) < (zone)->desk_x_count))
|
||||
#define E_ZONE_FLIP_UP(zone) ((e_config->desk_flip_wrap && ((zone)->desk_y_count > 1)) || ((zone)->desk_y_current > 0))
|
||||
#define E_ZONE_FLIP_DOWN(zone) ((e_config->desk_flip_wrap && ((zone)->desk_y_count > 1)) || (((zone)->desk_y_current + 1) < (zone)->desk_y_count))
|
||||
|
||||
static int startup_id = 0;
|
||||
|
||||
|
@ -472,11 +472,21 @@ e_zone_desk_flip_to(E_Zone *zone, int x, int y)
|
|||
|
||||
E_OBJECT_CHECK(zone);
|
||||
E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
|
||||
|
||||
if (x < 0) x = 0;
|
||||
else if (x >= zone->desk_x_count) x = zone->desk_x_count - 1;
|
||||
if (y < 0) y = 0;
|
||||
else if (y >= zone->desk_y_count) y = zone->desk_y_count - 1;
|
||||
|
||||
if (e_config->desk_flip_wrap)
|
||||
{
|
||||
x = x % zone->desk_x_count;
|
||||
y = y % zone->desk_y_count;
|
||||
if (x < 0) x += zone->desk_x_count;
|
||||
if (y < 0) y += zone->desk_y_count;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (x < 0) x = 0;
|
||||
else if (x >= zone->desk_x_count) x = zone->desk_x_count - 1;
|
||||
if (y < 0) y = 0;
|
||||
else if (y >= zone->desk_y_count) y = zone->desk_y_count - 1;
|
||||
}
|
||||
desk = e_desk_at_xy_get(zone, x, y);
|
||||
if (desk) e_desk_show(desk);
|
||||
}
|
||||
|
@ -503,10 +513,8 @@ e_zone_desk_linear_flip_to(E_Zone *zone, int x)
|
|||
E_OBJECT_CHECK(zone);
|
||||
E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
|
||||
|
||||
if (x < 0) return;
|
||||
y = x / zone->desk_x_count;
|
||||
x = x - (y * zone->desk_x_count);
|
||||
if (y >= zone->desk_y_count) return;
|
||||
e_zone_desk_flip_to(zone, x, y);
|
||||
}
|
||||
|
||||
|
@ -927,53 +935,37 @@ _e_zone_cb_timer(void *data)
|
|||
case E_DIRECTION_UP:
|
||||
if (E_ZONE_FLIP_UP(zone))
|
||||
{
|
||||
current = e_desk_at_xy_get(zone, zone->desk_x_current, zone->desk_y_current - 1);
|
||||
if (current)
|
||||
{
|
||||
e_desk_show(current);
|
||||
ecore_x_pointer_warp(zone->container->win, x, zone->h - 2);
|
||||
ev->curr.x = x;
|
||||
ev->curr.y = zone->h - 2;
|
||||
}
|
||||
e_zone_desk_flip_by(zone, 0, -1);
|
||||
ecore_x_pointer_warp(zone->container->win, x, zone->h - 2);
|
||||
ev->curr.x = x;
|
||||
ev->curr.y = zone->h - 2;
|
||||
}
|
||||
break;
|
||||
case E_DIRECTION_RIGHT:
|
||||
if (E_ZONE_FLIP_RIGHT(zone))
|
||||
{
|
||||
current = e_desk_at_xy_get(zone, zone->desk_x_current + 1, zone->desk_y_current);
|
||||
if (current)
|
||||
{
|
||||
e_desk_show(current);
|
||||
ecore_x_pointer_warp(zone->container->win, 2, y);
|
||||
ev->curr.y = y;
|
||||
ev->curr.x = 2;
|
||||
}
|
||||
e_zone_desk_flip_by(zone, 1, 0);
|
||||
ecore_x_pointer_warp(zone->container->win, 2, y);
|
||||
ev->curr.y = y;
|
||||
ev->curr.x = 2;
|
||||
}
|
||||
break;
|
||||
case E_DIRECTION_DOWN:
|
||||
if (E_ZONE_FLIP_DOWN(zone))
|
||||
{
|
||||
current = e_desk_at_xy_get(zone, zone->desk_x_current, zone->desk_y_current + 1);
|
||||
if (current)
|
||||
{
|
||||
e_desk_show(current);
|
||||
ecore_x_pointer_warp(zone->container->win, x, 2);
|
||||
ev->curr.x = x;
|
||||
ev->curr.y = 2;
|
||||
}
|
||||
e_zone_desk_flip_by(zone, 0, 1);
|
||||
ecore_x_pointer_warp(zone->container->win, x, 2);
|
||||
ev->curr.x = x;
|
||||
ev->curr.y = 2;
|
||||
}
|
||||
break;
|
||||
case E_DIRECTION_LEFT:
|
||||
if (E_ZONE_FLIP_LEFT(zone))
|
||||
{
|
||||
current = e_desk_at_xy_get(zone, zone->desk_x_current - 1, zone->desk_y_current);
|
||||
if (current)
|
||||
{
|
||||
e_desk_show(current);
|
||||
ecore_x_pointer_warp(zone->container->win, zone->w - 2, y);
|
||||
ev->curr.y = y;
|
||||
ev->curr.x = zone->w - 2;
|
||||
}
|
||||
e_zone_desk_flip_by(zone, -1, 0);
|
||||
ecore_x_pointer_warp(zone->container->win, zone->w - 2, y);
|
||||
ev->curr.y = y;
|
||||
ev->curr.x = zone->w - 2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -337,9 +337,6 @@ _battery_cb_check(void *data)
|
|||
_battery_face_level_set(inst, ret->level);
|
||||
battery_config->battery_prev_battery = 0;
|
||||
}
|
||||
free(ret->reading);
|
||||
free(ret->time);
|
||||
free(ret);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -353,6 +350,12 @@ _battery_cb_check(void *data)
|
|||
battery_config->battery_check_mode = CHECK_NONE;
|
||||
}
|
||||
}
|
||||
if (ret)
|
||||
{
|
||||
free(ret->reading);
|
||||
free(ret->time);
|
||||
free(ret);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue