Commit Graph

14712 Commits

Author SHA1 Message Date
Mike Blumenkrantz 84a3eb7af0 make current backlight value internally exported
display system backends should be handling this in the event of changes, and being able to set it directly makes that easier
2014-01-21 17:06:27 -05:00
Mike Blumenkrantz 215c0409e0 feature: handle xrandr backlight using a single, accurate handler
there's an event from ecore-x which tells us when this property has changed, which means we no longer have to be constantly checking to see if other apps have changed it
2014-01-21 16:48:09 -05:00
Mike Blumenkrantz d2f9a2efbf cleanup frame icon upon failing to use it 2014-01-21 09:32:02 -05:00
Carsten Haitzler 9b4b003c40 make example/syntac for app action useful. 2014-01-21 21:30:17 +09:00
Carsten Haitzler b399b6a9ca e shot - allow params to share/save now (also specify quality and screen) 2014-01-21 21:21:13 +09:00
Mike Blumenkrantz bec5d1fe51 backlight update loop cleanups
* do null check before adding to device list

* use name length from ecore_x_randr_output_name_get()
2014-01-20 22:21:40 -05:00
Mike Blumenkrantz 3addb45e79 fix fullscreen client place/adjust 2014-01-20 21:33:11 -05:00
Mike Blumenkrantz 0be9442140 only call ecore_x_randr_output_backlight_available() once in backlight 2014-01-20 21:30:38 -05:00
Mike Blumenkrantz a310de50c8 block backlight updating during animation
updating backlight in this context causes my backlight to never return to normal levels, and blocking it doesn't seem to be unreasonable here
2014-01-20 21:05:51 -05:00
Mike Blumenkrantz 3ae9e394ec add back first_draw_delay timer for X clients
this is a safety timer to handle the case of "what happens if a new client only ever sends one damage during its startup"
2014-01-20 19:03:50 -05:00
Mike Blumenkrantz 69d3e02638 ignore first damage for X clients
when not dealing with a re_manage client (persisting from previous E instance), we're almost definitely going to get multiple full-window damages as a new client starts up. the first damage USUALLY results in a garbage render, so ignoring it makes the first frame become actual window content (good!) or a transparent rect until the client finishes drawing (not good!), which is at least an improvement over showing random pixels
2014-01-20 19:01:04 -05:00
Mike Blumenkrantz 30d6b2e196 remove the black frame render fallback
I think the timing on resizes is perfect now, so we should never need to see this
2014-01-20 18:58:53 -05:00
Mike Blumenkrantz 097331864a clear non-pending updates on resize
this smooths out resizes a barely noticeable amount since these updates (the pending-pending updates) are no longer relevant
2014-01-20 18:58:26 -05:00
Mike Blumenkrantz 4615db497c remove damage from show interceptor
this is a bit broken since an actual damage might not have occurred yet. moderately sure I added it for testing at one point and then never removed it
2014-01-20 18:56:37 -05:00
Mike Blumenkrantz e148451d4f check for pending render updates before doing a black frame 2014-01-20 17:34:12 -05:00
Mike Blumenkrantz 36edca0773 remove unnecessary damage from resize 2014-01-20 17:28:16 -05:00
Mike Blumenkrantz d0713cddb4 fix shading animations
yeeeep it's that simple. should probably move these to edje at some point
2014-01-20 17:27:31 -05:00
Mike Blumenkrantz 52bb6e38e3 unify and improve winlist directional focusing 2014-01-20 16:58:29 -05:00
Mike Blumenkrantz b4a9c55115 attempt to revert focus when iconifying a client 2014-01-20 16:43:47 -05:00
Mike Blumenkrantz 6ef655d2dd feature: blanking options for wakeup on events (urgent + notify) 2014-01-20 16:08:14 -05:00
Mike Blumenkrantz aefaaea57b unify client borderless checks to use util function 2014-01-20 15:12:40 -05:00
Mike Blumenkrantz 8fe70c3d2a fix client geometry when toggling borderless state 2014-01-20 15:12:23 -05:00
Mike Blumenkrantz ed51fa2b96 add client util function for detecting borderless state 2014-01-20 15:11:53 -05:00
Mike Blumenkrantz 02f6dcdf2a set a layer for syscon popup
still working on keyboard....

T818
2014-01-20 11:18:47 -05:00
Carsten Haitzler cd431350a5 e sys - if logout has trouble - resume so user can see dialog 2014-01-20 15:23:30 +09:00
Mike Blumenkrantz b2a56b63b5 packagekit module description gets an upgrade
also because yet another person doesn't like helping me with news entries:

feature: packagekit module for package manager integration
2014-01-20 00:10:05 -05:00
Mike Blumenkrantz d42b24632e also update frame immediately during unmaximize 2014-01-20 00:08:25 -05:00
Mike Blumenkrantz ef2a96eb82 apply frame changes before entering/exiting fullscreen
T816
2014-01-20 00:03:51 -05:00
Mike Blumenkrantz bcee2e34aa break out client frame setting into helper function 2014-01-20 00:00:45 -05:00
Cedric BAIL 04f7b59e11 e: call the right function without depending on ld to figure it out (mostly wrongly).
As a side note, using an EAPI function from within a module is a call for disaster.
Their is no guarantee from ld that it will be the current top open .so, actually it
is most likely not going to be the case. So it will do a search for the symbol in the
current stack of open .so and the first one to match will be chosen.

I do think it basically prove that current model of Enlightenment module is fairly
borken and error prone. Hope to have time to fix that, but it will involve completely
breaking the API and ABI compatibility of E module.
2014-01-20 13:01:31 +09:00
Carsten Haitzler b48dc88f94 modules - add packagekit to the whitelist of ok modules 2014-01-20 12:04:19 +09:00
Davide Andreoli 7d406706da music-control: fix popup autoclose 2014-01-19 15:03:31 +01:00
Davide Andreoli 28b4375576 PackageKit: EINA_UNUSED++ to warnings-- 2014-01-19 14:55:53 +01:00
Davide Andreoli 4c6326e055 PackageKit: fix popup autoclose 2014-01-19 14:50:32 +01:00
Davide Andreoli d5a89ca177 Put the packagekit module inside the E tree.
The now old emodules/pacakgekit will be removed soon.
Note that you need to update elm as the theme is there.
2014-01-19 11:58:54 +01:00
Mike Blumenkrantz ec8424fb16 remove duplicate shaped client handling 2014-01-19 03:33:40 -05:00
Mike Blumenkrantz 8ce457889e ensure withdrawn state is always set
this is what was breaking shows on things like yakuake
2014-01-19 03:33:39 -05:00
Mike Blumenkrantz 32d4c2f2b9 fix X shape exporting when bounding box changes
this fixes rendering on shaped clients like yakuake and makes them render even more accurately than E18

PS. I hate shape extension.
2014-01-19 03:33:30 -05:00
Mike Blumenkrantz cbfee4f53e uncomment debug function 2014-01-19 00:45:41 -05:00
Mike Blumenkrantz 2e9c1e383d don't add/reset ibar menu hide timer when menu is active
T815
2014-01-18 15:19:42 -05:00
Mike Blumenkrantz 645a3f0b60 correctly fix conf_randr warnings 2014-01-18 15:16:46 -05:00
Mike Blumenkrantz a1d8fd1b6a revert previous "removed" warnings" commit chunk which added more warnings 2014-01-18 15:15:25 -05:00
Carsten Haitzler 35640f88b4 debug remove - sorry. 2014-01-18 19:57:39 +09:00
Carsten Haitzler 0ca6bd8b9d ibar icon menu - set pass events on bg obj until it is fully shown
this needs an elm theme update fyi.
2014-01-18 19:52:58 +09:00
ChunEon Park 7474036140 enlightenment - removed warnings. 2014-01-18 19:37:02 +09:00
Mike Blumenkrantz e757c67b31 hide ibar menu when its gadget menu is opened
one menu at a time.

T744 maybe?
2014-01-17 19:07:11 -05:00
Mike Blumenkrantz a93880ade2 ibar menu now dynamically adds new clients
T744
2014-01-17 19:04:48 -05:00
Mike Blumenkrantz d65ef1412f try grouping phony execs together
this saves a little memory and also makes related eventing more useful
2014-01-17 19:02:56 -05:00
Mike Blumenkrantz 49b9a2ea2a break out ibar menu population into separate function 2014-01-17 18:27:55 -05:00
Mike Blumenkrantz 312a53e44a further reduce ibar menu hide delay, make delay even shorter when leaving menu
it seems that I always have this thing stuck open for a long period of time after moving my mouse out through it. I suspect that most times when a user moves the cursor out of the menu and does not immediately move it back or to the icon, the menu probably shouldn't hang around. likewise, when it moves out of the icon, maybe we give a little extra time to reach the menu, but not so much that it hangs around if the icon was exited through the side
2014-01-17 18:21:13 -05:00
Mike Blumenkrantz c9d71e4044 add slight delay to ibar menu mouseover showing
this gets really annoying when mousing over the bar quickly and menus start flying all over
2014-01-17 18:19:00 -05:00
Mike Blumenkrantz 92b65633a4 hide mouseover ibar menu after mouse has left
T744
2014-01-17 18:13:03 -05:00
Mike Blumenkrantz 34988ff214 pass events on ibar menu during hide 2014-01-17 18:09:35 -05:00
Mike Blumenkrantz 8f060a22d5 force adding client to raise stack on winlist select 2014-01-17 17:53:05 -05:00
Mike Blumenkrantz c66cdc1416 only add client to raise stack if focus tracking is enabled
focus tracking only gets frozen by winlist, at which point it's most likely that users also don't want the raise stack to be altered
2014-01-17 17:49:10 -05:00
Mike Blumenkrantz eee5bfea9c force X client adjust on frame change 2014-01-17 17:42:12 -05:00
Mike Blumenkrantz 4bebbf08d9 use right object to do frame unadjust when setting theme 2014-01-17 17:41:50 -05:00
Mike Blumenkrantz 43a8bbcc30 don't always raise clients on maximize 2014-01-17 17:41:30 -05:00
Mike Blumenkrantz 999f217f8b set pass events on deleted clients 2014-01-17 11:36:35 -05:00
Mike Blumenkrantz dd34319a19 only deactivate all menus on mouse down if active menu is present
T798
2014-01-17 11:21:20 -05:00
Mike Blumenkrantz 41429d188b fix fullscreen client crash
T796
2014-01-17 10:55:06 -05:00
Mike Blumenkrantz fda2442fe5 enforce correct geometry for client->saved.{x,y}
this is for CLIENT geometry and does NOT include the zone x/y
2014-01-16 20:27:07 -05:00
Mike Blumenkrantz ddc89ad46b reorder some startup stuff to not fail when ecore events haven't been initialized
eta until wayland-fb bug reports start rolling in: -5 minutes
2014-01-16 20:09:45 -05:00
Mike Blumenkrantz a12768c465 quick screensaver blocking hack for non-X instances 2014-01-16 20:09:12 -05:00
Mike Blumenkrantz ab2e108e54 allow client movement on one axis when vertical/horizontal maximized
T741
2014-01-16 15:47:35 -05:00
Mike Blumenkrantz 7e81ff6ec9 fix pager16 drag to desktop postioning
T777, T7888
2014-01-16 12:23:49 -05:00
Mike Blumenkrantz 1ad30b0705 show the compositor overlay window when nocomp mode ends 2014-01-16 12:09:51 -05:00
Mike Blumenkrantz 0c441dfa79 block shape cutting during nocomp 2014-01-16 12:09:29 -05:00
Mike Blumenkrantz 171ad26858 silence some gadcon popup error messages from ibar menu 2014-01-16 11:36:16 -05:00
Mike Blumenkrantz c50eeab227 don't do client stacking remember/event if not redirected 2014-01-16 11:36:16 -05:00
Mike Blumenkrantz 8f99680994 fix ibar menu mouseover crash when dragging 2014-01-16 11:36:13 -05:00
Mike Blumenkrantz a148402b45 reduce ibar mouse out timer length
also since this wasn't done correctly in the original message

feature: ibar now optionaly triggers its menu on mouse in
2014-01-16 11:15:28 -05:00
Mike Blumenkrantz a1cfeaf988 s/e_theme_comp_border/e_theme_comp_frame/g 2014-01-16 11:15:08 -05:00
Mike Blumenkrantz 84b9e9f3ec fix comp style selector signals 2014-01-16 10:53:44 -05:00
Mike Blumenkrantz 8f36162c29 make fileman popups hide more aggressively
T750
2014-01-16 10:37:32 -05:00
Mike Blumenkrantz 68201a8d99 remove old hacks to work around back efm icon eventarea 2014-01-16 10:37:32 -05:00
Mike Blumenkrantz 774ea3efcb fix wizard scaling visuals 2014-01-16 10:37:32 -05:00
Carsten Haitzler f2a5a5f570 ibar - fix collection of segvs dealing with ibar icon menu invalid refs 2014-01-16 21:30:56 +09:00
Carsten Haitzler 00cb30ac6e window icon dnd - make sure icon is properly positioned under mouse 2014-01-16 21:05:57 +09:00
Mike Blumenkrantz f12cdee3ca adjust frame icon drag geometry
T776
2014-01-15 23:11:12 -05:00
Mike Blumenkrantz 18c74cb382 add e_comp_object_frame_icon_geometry_get 2014-01-15 23:11:07 -05:00
Mike Blumenkrantz b0d53be21d fix remember geometry updating
T791
2014-01-15 22:54:08 -05:00
Mike Blumenkrantz 2410660dd1 use current client position for post frame set any time changes.pos is set
T790
2014-01-15 21:14:38 -05:00
Mike Blumenkrantz 17291018db override/placed gets set on compositor side 2014-01-15 21:04:10 -05:00
Mike Blumenkrantz cb5c473786 check/set button for pager window drags
T789
2014-01-15 20:52:27 -05:00
Mike Blumenkrantz 37b6238d33 fix comp style display 2014-01-15 20:39:51 -05:00
Mike Blumenkrantz e58bf33d38 redo pager16 window dragging
T784, T777
2014-01-15 18:52:57 -05:00
Mike Blumenkrantz 25e39aaa2b block deskmirror client visibility changes during drags 2014-01-15 18:52:57 -05:00
Mike Blumenkrantz 4d72f840c9 fix void ptr arith warning 2014-01-15 18:52:57 -05:00
Mike Blumenkrantz a658e4c198 add e_drag_current_get 2014-01-15 18:52:57 -05:00
Mike Blumenkrantz a37bfe3d25 focus clients after pager drag to desktop 2014-01-15 18:52:57 -05:00
Mike Blumenkrantz fb18230b27 block comp queues during hide on shutdown 2014-01-15 18:52:57 -05:00
Chris Michael ab9d8b8d82 Remove unused variable.
Signed-off-by: Chris Michael <devilhorns@comcast.net>
2014-01-15 22:42:42 +00:00
Mike Blumenkrantz 064362234b use live objects for pager16 window drags 2014-01-15 17:01:45 -05:00
Mike Blumenkrantz 32fd2f1776 fix keyboard move/resize info display 2014-01-15 17:01:44 -05:00
Mike Blumenkrantz 30ef7b217a add e_deskmirror_mirror_copy 2014-01-15 17:01:41 -05:00
Mike Blumenkrantz a33fa26847 only set shape mask if client has been reparented 2014-01-15 14:03:50 -05:00
Mike Blumenkrantz 36e2b03376 X override clients are already placed 2014-01-15 13:51:54 -05:00
Mike Blumenkrantz 047bcd7818 fix netwm sync resizing to account for frame geometry
T778
2014-01-15 12:13:05 -05:00
Mike Blumenkrantz d095b392e9 set netwm sync alarm to right struct member
T778
2014-01-15 12:13:05 -05:00
Mike Blumenkrantz a084217ba9 don't hints on override clients
T772
2014-01-15 12:13:04 -05:00
Mike Blumenkrantz e8e2002804 always set icccm wm state when calling related hints function
T773
2014-01-15 12:13:04 -05:00
Mike Blumenkrantz 51bcc9ad0f remove shadow from client icon drags
T776
2014-01-15 12:13:04 -05:00
Mike Blumenkrantz bd83ae044f add comp settings to configure registry
it's always been in the settings menu, but I forgot to put it into the registry.

T779
2014-01-15 12:13:04 -05:00
Carsten Haitzler 9fbb5def7f deskmirror - set scale factor nicely. 2014-01-15 20:13:47 +09:00
Sebastian Dransfeld 227072c553 randr: remove debug output 2014-01-15 07:06:14 +01:00
Sebastian Dransfeld 93cf4d877d randr: remove unused variable 2014-01-15 07:06:13 +01:00
Sebastian Dransfeld e215a3951e randr: Enable output from settings 2014-01-15 07:06:13 +01:00
Sebastian Dransfeld b140a13314 e_randr: rework 2014-01-15 07:06:13 +01:00
Sebastian Dransfeld ed520d31a1 e_acpi: Add function to get lid status
So we can know lid status without waiting for a lid event.
2014-01-15 07:06:13 +01:00
Mike Blumenkrantz 7656e10f04 don't need to check desklock state on lokker init 2014-01-15 01:02:06 -05:00
Mike Blumenkrantz 8491ceebc0 try locking new desklock interfaces on append if state == locked 2014-01-15 01:01:41 -05:00
Mike Blumenkrantz 4f116acdbf fix lokker install rule 2014-01-15 00:57:37 -05:00
Mike Blumenkrantz 51d111b3ee fix restacking on client lower 2014-01-15 00:09:33 -05:00
Mike Blumenkrantz b493c4dac1 bugfix: unset video flag when failing to find teamwork media 2014-01-14 23:38:39 -05:00
Mike Blumenkrantz 1da25bc254 force accuracy in pager16 aspecting
this was inherited from the original pager module where it didn't matter as much.

T771
2014-01-14 23:20:40 -05:00
Mike Blumenkrantz cd4ed6f4e8 fix bgpreview dynamic updating
T771
2014-01-14 22:50:28 -05:00
Mike Blumenkrantz 9c65093cb4 unblock client lowering
T770
2014-01-14 22:40:18 -05:00
Jean-Philippe Andre 7ffc096341 Mixer: Fix crash when closing mixer settings
app can already be NULL at this point, when called from _cb_win_del().
2014-01-15 12:37:59 +09:00
Mike Blumenkrantz 390b8a5bf5 feature: selective redirection toggling
this toggles redirection on compatible (X) clients while still mostly preserving window frame functionality
2014-01-14 20:29:00 -05:00
Mike Blumenkrantz 70d65978c7 add "Enable advanced compositing features" option
this is what I'll be using to conceal various features in the future which should not be used without some understanding of what they do (OR FACE THE CONSEQUENCES)
2014-01-14 20:29:00 -05:00
Mike Blumenkrantz df0173d24c feature: support XPRESENT extension to reduce compositing overhead
xorg 1.15 introduces this extension which has a magical event to notify when a pixmap's size changes, which means that the size never needs to be manually fetched
2014-01-14 20:29:00 -05:00
Mike Blumenkrantz 2ee8262ea5 block rendering while screensaver is active 2014-01-14 20:29:00 -05:00
Mike Blumenkrantz 9c5509b236 add versioning to remembers to prevent badness when new properties are added 2014-01-14 20:29:00 -05:00
Mike Blumenkrantz 56ae997976 deduplicate E_Remember edd
what if we weren't insane and didn't have the same exact code in 2 places?
2014-01-14 20:29:00 -05:00
Mike Blumenkrantz e54815a29f e menus no longer use comp shadows 2014-01-14 20:29:00 -05:00
Mike Blumenkrantz 0943d9f7cc remove resize callback on gadcon parent
this sometimes gets called after the gadcon is deleted which leads to a crash
2014-01-14 20:29:00 -05:00
Mike Blumenkrantz 6aedd4760d improve bgpreview widget to use livethumb with auto vsizing
this widget gets used in permanent locations now, so it needs to use less memory when possible
2014-01-14 20:29:00 -05:00
Mike Blumenkrantz 0b7e5dd371 teamwork protocol modification to work better in wayland
wayland surface ids are stupid, so we need to use uint64_t here to accurately get the window id
2014-01-14 20:29:00 -05:00
Mike Blumenkrantz b85934ef35 add urgency hint test 2014-01-14 20:29:00 -05:00
Mike Blumenkrantz 166ed0d234 feature: new focus option "raise on revert focus"
this option provides the functionality which was intended by the old and broken "raise on focus" option. it raises windows ONLY when reverting focus in cases not directly triggered by the user or any application
2014-01-14 20:28:59 -05:00
Mike Blumenkrantz c081cee34d remove e-specific theme config members 2014-01-14 20:28:59 -05:00
discomfitor 3b15315764 feature: add PIN-style desklock for lokker module
accessible from the normal screen lock dialog
2014-01-14 20:28:59 -05:00
Mike Blumenkrantz 235c369adf feature: make desklock hookable, break out current desklock into module, move pam stuff to separate file
after this commit, the new-but-invisible module "lokker" (or other custom loaded module) is in charge of creating all graphics for the lock screen, and it will be added to the user's config. failure to load a lockscreen module will just result in a black screen

desklock subsystem now handles all the pre/post lock stuff while the modules themselves are responsible for creating visuals and calling auth functions to determine whether to unlock the screen
2014-01-14 20:28:59 -05:00
discomfitor cb956069d5 feature: revive personal desklock passwords
these were previously disabled because hashing a password was too much work (I guess?), but now they're back. config dialog has changed accordingly
2014-01-14 20:28:59 -05:00
discomfitor bf7a2e8c47 add blocker rects for desklock
add a black rect to cover the screen during desklock
2014-01-14 20:28:59 -05:00
discomfitor a31e8a70fb break out desklock into display server-able hooks
if we're running in a non-X environment, we can't very well expect that using X calls to hide/show windows for desklock is going to work as expected. now a compositor backend can add a pre or post desklock hook to hide/show its clients as necessary
2014-01-14 20:28:59 -05:00
discomfitor 3948c1c910 fix fileman stealing focus
desktop fileman should only receive focus if there is no client currently visible on the active desktop
2014-01-14 20:28:59 -05:00
discomfitor a6a93c05b4 feature: function for getting top visible client on current desk
this is a pretty useful function overall, and I found that I was duplicating its functionality in a number of places, so I broke it out
2014-01-14 20:28:59 -05:00
discomfitor 3047ce85b8 not sure if keep... add retries for failure x clients
if a client's X attributes fail to be fetched on the first attempt, it's possible that we might succeed on a second attempt, which would prevent us from losing a client
2014-01-14 20:28:59 -05:00
Mike Blumenkrantz ed4c98f9f5 feature: e_comp_shape_queue_block for blocking shape changes
in some cases, it may be desirable to block shape cutting for an amount of time to reduce cpu calculations. this should be set when performing any non-interactive compositor effects
2014-01-14 20:28:59 -05:00
Mike Blumenkrantz b3ea9e9e9d feature: break out e_moveresize_client_extents for calculating client step sizes
if using an external moveresize implementation, this function is very handy
2014-01-14 20:28:59 -05:00
discomfitor b67d94210a feature: add layer_block client flag to bypass any layer/stacking checks and "just do it" for cool effects
this flag allows a client's layer to be changed instantly with no protocol-level checks or work, allowing compositor effects to do their work more easily
2014-01-14 20:28:59 -05:00
discomfitor 9150cf6812 feature: allow moveresize visuals to be replaced
the existing moveresize popup infrastructure is very limiting in that it requires you to create a popup. if you don't want to create a popup, now you don't have to.
2014-01-14 20:28:58 -05:00
Mike Blumenkrantz b0c6366203 feature: allow desk flip animations to be handled completely externally
by exposing desk flip as a hookable api, it becomes easy to write custom flip effects such as in the external "desksanity" module
2014-01-14 20:28:58 -05:00
Mike Blumenkrantz bac43480ff move deskmirror test over a little 2014-01-14 20:28:58 -05:00
Mike Blumenkrantz c667f7612f feature: E16-style live pager returns! window-only drags currently a little broken
p16 is a pager replacement module which uses deskmirror to show you live views of each desktop. it has a separate theme and reuses a lot of pager code.

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

pager and pager16 both provide the same gadget and cannot be loaded simultaneously
2014-01-14 20:28:58 -05:00
Mike Blumenkrantz b6e94d02ed don't recalc a gadcon on unpack if we're stopping, also don't recalc gadcons during stop when unpopulating
this caused a lot of slowdown, and even possible crashes, during restarts
2014-01-14 20:28:58 -05:00
Mike Blumenkrantz a5e52cbc2d add E_Win_Cb typedef
this is mostly cosmetic, but I thought it might be a little more descriptive?
2014-01-14 20:28:58 -05:00
Mike Blumenkrantz f637cbf08e deskmirror is now a fully-functional E api
* finish updating for E19 api

* fix visibility changing on sources

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

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

* also fix stacking
2014-01-14 20:28:58 -05:00