Page MenuHomePhabricator

Gadget Design
Updated 954 Days AgoPublic

Key Points

These are either hard requirements or points for consideration.

  • Sensible unification of "shelf" and "desktop"/"overlay” locations
    • "shelf" should be subset of "desktop" which only allows movement on one axis
    • "shelf" should be flexible enough to inject into random places
    • "desktop" and "overlay" should be the same code as much as possible. (Example: Pin window to desktop / overlay.)
  • Make it possible to have gadget in the title bar of an application with a remember policie (Yeah, server side decoration)
  • Gadget "security" policies?
    • Need something like this for lockscreen gadgets...
  • Gadget utilities:
    • Popups (gadcon popup)
    • Menus (gadcon client menu append)
  • Seamless DND between locations
  • Coherent location populating methodology
    • incremental or all at once?
    • how to handle new gadgets on a fixed size location?
    • how to handle new gadgets on a variable size location?
    • Gadget add/remove should NOT trigger full refresh of all gadgets
  • Well thought-out gadget SIZING policies
    • Holy shit ibar
    • And pager
      • Seriously.
  • Should be able to manually refresh individual gadgets
    • Used for things like RSS readers, weather widgets, etc. NOT for fixing display bugs
  • **NO** custom gadget locations
    • "shelf" and "desktop"/"overlay" locations ONLY (with all of those three being essentially just differently parametrized versions of the same common type?)
  • Theme notification of location?
    • "desktop" vs "shelf" signals, orientation
  • Inset/plain look should probably be location-wide for "shelf" types, maybe allow alternating?
  • Gadgets may declare themselves as "single instance" as some are not able (or not useful) to have more than one;
  • Unified way to identify the gadget (the current id method sucks big time, which complicates saving/loading);
  • Easy persistence of gadget data (which soundcard am I showing? what's the clock display format? etc)
  • It would be nice to have a keyboard shortcut that toggles showing all gadgets from the desktop on a layer above all windows, a keybinding to toggle showing the desktop would be equally sufficient i.e. would hide all windows, then restore them to there screen and stack position. Alternatively rather then just having shelf and desktop you could implement shelf desktop and gadget layer but i'm sure most people would be happy for the layer to mirror the desktop. (Just my thoughts, Simon Lees - Simotek)
  • Would also be nice if gadgets were sandboxed (without costing efficiency) so there didn't need to be a whitelist of ones that won't kill e. (Just Gadgets not all modules) (Simotek) [If it would cost efficiency, one could just as well use separate processes and windows with ”pin to desktop”. :]
  • In a extra ideal world a gadget would be any window with the below all flag set, this may not be easy to implement and maybe over simplified but it would mean we could use applications like conky straight out of the box (simotek)
  • Gadget popups - even if they steal mouse input, dont steal wheel events - in particular to make possible to adjust backlight or volume by scrolling over the gadget, while the popup is shown (@jabol240)
  • Gadget popups - let's place a tiny "pin it" button in every popup we have - user can click it to make the popup persist on top like a window, rather than disappear on any mouseclick outside. BTW, second click on this button should simply close the popup rather than unpin it (@jabol240)
  • We could consider having our gadgets editable/moveable only in an edit mode, thus have all mouse buttons available for use as actions; I think Cinnamon works like this (@jabol240)

Base Gadgets

These are the gadgets which must exist for a release of Enlightenment to occur with a new gadget system.

  • Clock (With support for timezone per instance, displaying a small city or country name below the clock) (Nice to have: #1 display 3 months in the popup: previous--current--next. #2 change month with mouse wheel #3 change month by dragging with mouse,@jabol240)
  • Battery (maybe power saving in general?)
  • Backlight
  • Pager
  • Mixer (this needs paprefs & pavucontrol type features)
  • Connections gadget (connection manager popup, apart from some other refinements, desperately needs separate Connect and Disconnect buttons. Currently the labels serve both purposes I believe. So I click the label to connect but at times it takes ages for connman to connect, and there's no indication that the process is underway, or stopped, or what. So after some time I will click the label again, and again - but that will likely make it cancel the connecting or disconnect, because the label serves also as the disconnect button. Now having separate Connect and Disconnect buttons, and ideally some feedback as to what is going on, will make it whole lot better. Also, could we use for example middle click on the Gadget to Restart all interfaces, this is heavily used. Or include it in the bottom line of the popup too.@jabol240)
    • Wifi
    • LTE/4G
    • Ethernet
  • Bluetooth
  • System info (configurable on what to display when on shelf -displays everything when clicked)
    • CPU usage + freq
    • Mem/system stats
    • Temperatures for GPU & CPU
  • Taskbar/launcher/iconifieds (IN ONE FUCKING GADGET FFS)
  • Menu launcher
  • Keyboard

Candidate Gadgets

These are gadgets which might be worthwhile to add to the base gadgets depending on time/demand/usefulness.

  • Generic ”any window as a gadget”
    • like ”pin to desktop”, but with that window becoming a first-class member, allowing pinning to the "overlay", "shelf". (Made easy if "desktop", "overlay" and "shelf" are mostly the same thing.)
    • requires giving those windows the same automatic session persistence treatment as internal windows have right now.
    • → This instantly gives us all gadgets of all other DEs, if they can be run in a window. (E.g. Plasma widgets can, with plasma_windowed.)
      • Lack of transparency might be a problem.
  • RSS tracker (erssd!)
  • Weather
  • E restart button
  • Screenshot button
  • Notification holder (I would like a ticker like notifaction that sits in the shelf and shows the whole message for a moment and then minimizes to just the icon. Incrementing a number if more notifaction from the same type arrive. Stefan)
  • Filemanager viewer thingy?
  • Quick Memo.
  • Clipboard.
  • Dialer (mobile only profile?)
  • Photo Frame
  • Firewall (Something basic and maybe smart enough to be location aware ie. Disable itself when in your home/secure place, Enable anywhere else)
  • Backup
  • Network manager
  • Password manager lock/unlock (ideally something that can with/as a ssh-agent/gpg-agent)
  • Editable gadget with an icon of your choice, to execute a command of your choice on a mouse event of your choice,@jabol240
  • one popup for multiple controls, resembling what GNOME3 has got. For example, settings like Backlight or Keyboard - you don't really need them visible on the Shelf, but they could be still within easy reach if placed in such a popup,@jabol240
  • ???
Last Author
Last Edited
Jan 7 2017, 6:43 AM
jabol240, cedric, felipealmeida