add new gadget system

see e_gadget.h
This commit is contained in:
Mike Blumenkrantz 2016-03-02 15:31:29 -05:00
parent d3fe687ada
commit d26c49b3ce
6 changed files with 2093 additions and 0 deletions

View File

@ -114,6 +114,7 @@ src/bin/e_focus.h \
src/bin/e_font.h \
src/bin/e_gadcon.h \
src/bin/e_gadcon_popup.h \
src/bin/e_gadget.h \
src/bin/e_grabinput.h \
src/bin/e_grab_dialog.h \
src/bin/e.h \
@ -276,6 +277,7 @@ src/bin/e_focus.c \
src/bin/e_font.c \
src/bin/e_gadcon.c \
src/bin/e_gadcon_popup.c \
src/bin/e_gadget.c \
src/bin/e_grabinput.c \
src/bin/e_grab_dialog.c \
src/bin/e_hints.c \

View File

@ -2147,11 +2147,14 @@ e_config_bindings_free(E_Config_Bindings *ecb)
static void
_e_config_save_cb(void *data EINA_UNUSED)
{
EINTERN void e_gadget_save(void);
e_config_profile_save();
e_module_save_all();
elm_config_save();
e_config_domain_save("e", _e_config_edd, e_config);
e_config_domain_save("e_bindings", _e_config_binding_edd, e_bindings);
e_gadget_save();
_e_config_save_defer = NULL;
}

1939
src/bin/e_gadget.c Normal file

File diff suppressed because it is too large Load Diff

140
src/bin/e_gadget.h Normal file
View File

@ -0,0 +1,140 @@
#ifndef E_TYPEDEFS
#ifndef E_GADGET_H
# define E_GADGET_H
/** SMART CALLBACKS:
-------------------------------
* called by gadget site internals on gadget site object:
* have a gadget object as event_info
* {
"gadget_added"
- a new gadget was added to the gadget site by the user
"gadget_created"
- a gadget object was created on the site
"gadget_destroyed"
- a gadget object was destroyed on the site
"gadget_moved"
- a gadget is preparing to move from its current site
"gadget_removed"
- a gadget was removed from the gadget site by the user
- the gadget should remove its config when this is triggered
* }
* have NULL as event_info
* {
"gadget_site_anchor"
- the anchor of the gadget site changed
"gadget_site_gravity"
- the gravity of the gadget site changed
* }
* have E_Menu as event_info
* {
"gadget_site_owner_menu"
- the owner (parent object) of the site should add any owner-specific items
in this callback (eg. settings)
"gadget_site_style_menu"
- the owner (parent object) of the site should add any style-specific items
in this callback (eg. plain, inset)
* }
* have Evas_Object as event_info
* {
"gadget_site_popup"
- a popup has been triggered from the site; the site must remain visible until
the passed popup object has been hidden
- event_info is the Evas_Object of the popup
* }
-------------------------------
-------------------------------
* called externally on gadget site
"gadget_site_dropped"
- called on a target site when a gadget site is dropped on it
- event_info is the dropped site
- all gadgets on the dropped site will be moved to the target site
"gadget_site_style"
- called on a target site when its owner has executed a style change
- event_info is NULL
- triggers restyling of all contained gadgets
-------------------------------
-------------------------------
* called by gadget internals on gadget object:
"gadget_menu"
- called on a gadget object when the "gadget_menu" action has been triggered
- event_info is an E_Menu object
- if a configure callback has been passed with e_gadget_configure_cb_set(),
a "Settings" item will be automatically added with this callback
-------------------------------
-------------------------------
* called externally by gadget on gadget object:
"gadget_popup"
- called on a gadget object by the gadget when the gadget creates a popup which
requires that the gadget remain visible for the lifetime of the popup
- event_info is the Evas_Object of the popup
*/
typedef enum
{
E_GADGET_SITE_GRAVITY_NONE = 0,
E_GADGET_SITE_GRAVITY_LEFT,
E_GADGET_SITE_GRAVITY_RIGHT,
E_GADGET_SITE_GRAVITY_TOP,
E_GADGET_SITE_GRAVITY_BOTTOM,
E_GADGET_SITE_GRAVITY_CENTER,
} E_Gadget_Site_Gravity;
typedef enum
{
E_GADGET_SITE_ORIENT_NONE = 0,
E_GADGET_SITE_ORIENT_HORIZONTAL,
E_GADGET_SITE_ORIENT_VERTICAL,
} E_Gadget_Site_Orient;
typedef enum
{
E_GADGET_SITE_ANCHOR_NONE = 0,
E_GADGET_SITE_ANCHOR_LEFT = (1 << 0),
E_GADGET_SITE_ANCHOR_RIGHT = (1 << 1),
E_GADGET_SITE_ANCHOR_TOP = (1 << 2),
E_GADGET_SITE_ANCHOR_BOTTOM = (1 << 3),
} E_Gadget_Site_Anchor;
typedef Evas_Object *(*E_Gadget_Create_Cb)(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient);
typedef Evas_Object *(*E_Gadget_Configure_Cb)(Evas_Object *gadget);
typedef void (*E_Gadget_Wizard_End_Cb)(void *data, int id);
typedef void (*E_Gadget_Wizard_Cb)(E_Gadget_Wizard_End_Cb cb, void *data);
typedef void (*E_Gadget_Style_Cb)(Evas_Object *owner, Eina_Stringshare *name, Evas_Object *g);
EINTERN void e_gadget_init(void);
EINTERN void e_gadget_shutdown(void);
E_API Evas_Object *e_gadget_site_add(E_Gadget_Site_Orient orient, const char *name);
E_API Evas_Object *e_gadget_site_auto_add(E_Gadget_Site_Orient orient, const char *name);
E_API void e_gadget_site_del(Evas_Object *obj);
E_API E_Gadget_Site_Anchor e_gadget_site_anchor_get(Evas_Object *obj);
E_API void e_gadget_site_owner_setup(Evas_Object *obj, E_Gadget_Site_Anchor an, E_Gadget_Style_Cb cb);
E_API E_Gadget_Site_Orient e_gadget_site_orient_get(Evas_Object *obj);
E_API E_Gadget_Site_Gravity e_gadget_site_gravity_get(Evas_Object *obj);
E_API void e_gadget_site_gravity_set(Evas_Object *obj, E_Gadget_Site_Gravity gravity);
E_API void e_gadget_site_gadget_add(Evas_Object *obj, const char *type, Eina_Bool demo);
E_API Eina_List *e_gadget_site_gadgets_list(Evas_Object *obj);
E_API void e_gadget_configure_cb_set(Evas_Object *g, E_Gadget_Configure_Cb cb);
E_API void e_gadget_configure(Evas_Object *g);
E_API Evas_Object *e_gadget_site_get(Evas_Object *g);
E_API Eina_Stringshare *e_gadget_type_get(Evas_Object *g);
E_API void e_gadget_type_add(const char *type, E_Gadget_Create_Cb callback, E_Gadget_Wizard_Cb wizard);
E_API void e_gadget_type_del(const char *type);
E_API Eina_Iterator *e_gadget_type_iterator_get(void);
E_API Evas_Object *e_gadget_util_layout_style_init(Evas_Object *g, Evas_Object *style);
E_API void e_gadget_util_ctxpopup_place(Evas_Object *g, Evas_Object *ctx, Evas_Object *pos_obj);
E_API void e_gadget_util_allow_deny_ctxpopup(Evas_Object *g, const char *text, Evas_Smart_Cb allow_cb, Evas_Smart_Cb deny_cb, const void *data);
E_API Evas_Object *e_gadget_editor_add(Evas_Object *parent, Evas_Object *site);
E_API Evas_Object *e_gadget_site_edit(Evas_Object *site);
#endif
#endif

View File

@ -150,6 +150,7 @@
#include "e_utils.h"
#include "e_hints.h"
#include "e_comp_x_randr.h"
#include "e_gadget.h"
#ifdef HAVE_WAYLAND
# include "e_comp_wl.h"

View File

@ -909,6 +909,14 @@ main(int argc, char **argv)
TS("E_Remember Init Done");
_e_main_shutdown_push(e_remember_shutdown);
if (e_config->show_splash)
e_init_status_set(_("Setup Gadgets"));
TS("E_Gadget Init");
e_gadget_init();
TS("E_Gadget Init Done");
_e_main_shutdown_push((void*)e_gadget_shutdown);
if (e_config->show_splash)
e_init_status_set(_("Setup Gadcon"));
TS("E_Gadcon Init");