365 lines
9.2 KiB
C
365 lines
9.2 KiB
C
#include <e.h>
|
|
#include <X11/Xlib.h>
|
|
|
|
#define D_(str) dgettext(PACKAGE, str)
|
|
|
|
#ifndef E_MOD_MAIN_H
|
|
#define E_MOD_MAIN_H
|
|
|
|
#define MOD_CONFIG_FILE_EPOCH 0x0001
|
|
#define MOD_CONFIG_FILE_GENERATION 0x0001
|
|
#define MOD_CONFIG_FILE_VERSION \
|
|
((MOD_CONFIG_FILE_EPOCH << 16) | MOD_CONFIG_FILE_GENERATION)
|
|
|
|
#define AUTOHIDE_NONE 0
|
|
#define AUTOHIDE_NORMAL 1
|
|
#define AUTOHIDE_FULLSCREEN 2
|
|
#define AUTOHIDE_OVERLAP 3
|
|
|
|
#define ITEM_MOUSE_WHEEL(_item, ev) \
|
|
if(_item && _item->cb_mouse_wheel) \
|
|
_item->cb_mouse_wheel(_item, ev); \
|
|
|
|
#define ITEM_DRAG_START(_item) \
|
|
if(_item && _item->cb_drag_start) \
|
|
_item->cb_drag_start(_item); \
|
|
|
|
#define ITEM_FREE(_item) \
|
|
if(_item && _item->cb_free) \
|
|
_item->cb_free(_item); \
|
|
_item = NULL; \
|
|
|
|
|
|
typedef struct _Config Config;
|
|
typedef struct _Config_Item Config_Item;
|
|
typedef struct _Config_Box Config_Box;
|
|
typedef struct _Config_Gadcon Config_Gadcon;
|
|
typedef struct _Ng Ng;
|
|
typedef struct _Ngi_Item Ngi_Item;
|
|
typedef struct _Ngi_Item_Launcher Ngi_Item_Launcher;
|
|
typedef struct _Ngi_Item_Taskbar Ngi_Item_Taskbar;
|
|
typedef struct _Ngi_Item_Gadcon Ngi_Item_Gadcon;
|
|
typedef struct _Ngi_Win Ngi_Win;
|
|
typedef struct _Ngi_Box Ngi_Box;
|
|
|
|
struct _Config
|
|
{
|
|
int version;
|
|
|
|
E_Module *module;
|
|
Eina_List *instances;
|
|
E_Menu *menu;
|
|
|
|
Eina_List *items;
|
|
char *theme_path;
|
|
|
|
int use_composite;
|
|
E_Config_Dialog *cfd;
|
|
Eina_List *handlers;
|
|
};
|
|
|
|
struct _Config_Item
|
|
{
|
|
Ng *ng;
|
|
|
|
int show_label;
|
|
int show_background;
|
|
int container;
|
|
int zone;
|
|
int orient;
|
|
int size;
|
|
int window_size;
|
|
int autohide;
|
|
int autohide_show_urgent;
|
|
int hide_below_windows;
|
|
float zoomfactor;
|
|
float zoom_range;
|
|
float hide_timeout;
|
|
float zoom_duration;
|
|
int alpha;
|
|
int mouse_over_anim;
|
|
|
|
enum { above_all, below_fullscreen } stacking;
|
|
|
|
int lock_deskswitch;
|
|
int ecomorph_features;
|
|
|
|
int rflxn_alpha;
|
|
float rflxn_foc;
|
|
float rflxn_dist;
|
|
float rflxn_rot;
|
|
|
|
Eina_List *boxes;
|
|
|
|
E_Config_Dialog *config_dialog;
|
|
};
|
|
|
|
struct _Config_Box
|
|
{
|
|
enum { launcher, taskbar, gadcon } type;
|
|
|
|
int taskbar_skip_dialogs;
|
|
int taskbar_adv_bordermenu;
|
|
int taskbar_show_iconified;
|
|
int taskbar_show_desktop;
|
|
int taskbar_append_right;
|
|
int taskbar_group_apps;
|
|
|
|
const char *launcher_app_dir;
|
|
int launcher_lock_dnd;
|
|
|
|
Eina_List *gadcon_items;
|
|
|
|
Ngi_Box *box;
|
|
};
|
|
|
|
struct _Config_Gadcon
|
|
{
|
|
const char *name;
|
|
};
|
|
|
|
|
|
|
|
struct _Ngi_Win
|
|
{
|
|
Ng *ng;
|
|
E_Popup *popup;
|
|
Ecore_X_Window input;
|
|
XRectangle rect;
|
|
E_Win *fake_iwin;
|
|
E_Object *drop_win;
|
|
};
|
|
|
|
|
|
|
|
struct _Ng
|
|
{
|
|
Ngi_Win *win;
|
|
Evas *evas;
|
|
Eina_List *boxes;
|
|
|
|
Config_Item *cfg;
|
|
|
|
E_Zone *zone;
|
|
|
|
Evas_Object *o_bg;
|
|
Evas_Object *o_proxy;
|
|
Evas_Object *o_icons;
|
|
Evas_Object *o_frame;
|
|
Evas_Object *o_label;
|
|
|
|
Evas_Object *clip;
|
|
Evas_Object *bg_clip;
|
|
|
|
unsigned char changed : 1;
|
|
|
|
int pos; /* mouse position */
|
|
int size; /* current icon size */
|
|
|
|
enum { unzoomed, zooming, zoomed, unzooming } state;
|
|
enum { hidden, hiding, showing, show } hide_state;
|
|
int hide;
|
|
|
|
double zoom;
|
|
double start_zoom;
|
|
double start_hide;
|
|
|
|
Eina_List *items_show;
|
|
Eina_List *items_remove;
|
|
|
|
Ngi_Item *item_active;
|
|
|
|
int hide_step;
|
|
|
|
int w, h, start;
|
|
int horizontal;
|
|
|
|
int mouse_in;
|
|
int show_bar;
|
|
|
|
int dnd;
|
|
Ngi_Item *item_drag;
|
|
|
|
Eina_List *handlers;
|
|
|
|
Ecore_Animator *animator;
|
|
Ecore_Timer *mouse_in_timer;
|
|
Ecore_Timer *menu_wait_timer;
|
|
Ecore_Timer *effect_timer;
|
|
|
|
struct
|
|
{
|
|
int clip_separator;
|
|
int separator_width;
|
|
int item_spacing;
|
|
int edge_offset;
|
|
int bg_offset;
|
|
int reflection_offset;
|
|
double keep_overlay_pos;
|
|
double fade_duration;
|
|
} opt;
|
|
};
|
|
|
|
struct _Ngi_Item
|
|
{
|
|
Ngi_Box *box;
|
|
|
|
Evas_Object *obj;
|
|
Evas_Object *over;
|
|
|
|
const char *label;
|
|
|
|
unsigned int mouse_down;
|
|
int pos;
|
|
double displace;
|
|
double scale;
|
|
|
|
struct
|
|
{
|
|
unsigned char start : 1;
|
|
unsigned char dnd : 1;
|
|
int x, y;
|
|
int dx, dy;
|
|
} drag;
|
|
|
|
void (*cb_free) (Ngi_Item *it);
|
|
void (*cb_mouse_down) (Ngi_Item *it, Ecore_Event_Mouse_Button *ev);
|
|
void (*cb_mouse_up) (Ngi_Item *it, Ecore_Event_Mouse_Button *ev);
|
|
void (*cb_mouse_in) (Ngi_Item *it);
|
|
void (*cb_mouse_out) (Ngi_Item *it);
|
|
void (*cb_drag_start) (Ngi_Item *it);
|
|
|
|
double start_time;
|
|
|
|
int delete_me;
|
|
};
|
|
|
|
struct _Ngi_Item_Launcher
|
|
{
|
|
Ngi_Item base;
|
|
|
|
Evas_Object *o_icon;
|
|
Evas_Object *o_proxy;
|
|
|
|
Efreet_Desktop *app;
|
|
};
|
|
|
|
|
|
struct _Ngi_Item_Taskbar
|
|
{
|
|
Ngi_Item base;
|
|
|
|
Evas_Object *o_icon;
|
|
Evas_Object *o_proxy;
|
|
|
|
E_Border *border;
|
|
|
|
unsigned int border_was_fullscreen;
|
|
unsigned int urgent;
|
|
const char *class; /* store icccm.class...*/
|
|
};
|
|
|
|
struct _Ngi_Item_Gadcon
|
|
{
|
|
Ngi_Item base;
|
|
|
|
Evas_Object *o_icon;
|
|
Evas_Object *o_proxy;
|
|
|
|
E_Gadcon *gadcon;
|
|
Config_Gadcon *cfg_gadcon;
|
|
|
|
};
|
|
|
|
|
|
struct _Ngi_Box
|
|
{
|
|
Ng *ng;
|
|
Config_Box *cfg;
|
|
Eina_List *handlers;
|
|
Eina_List *items;
|
|
Ecore_Timer *dnd_timer;
|
|
E_Drop_Handler *drop_handler;
|
|
Ngi_Item *item_drop;
|
|
Evas_Object *separator;
|
|
Evas_Coord pos, w;
|
|
|
|
E_Order *apps;
|
|
|
|
E_Config_Dialog *cfd;
|
|
};
|
|
|
|
EAPI extern E_Module_Api e_modapi;
|
|
EAPI void *e_modapi_init (E_Module *m);
|
|
EAPI int e_modapi_shutdown (E_Module *m);
|
|
EAPI int e_modapi_save (E_Module *m);
|
|
EAPI int e_modapi_about (E_Module *m);
|
|
EAPI int e_modapi_config (E_Module *m);
|
|
|
|
EAPI E_Config_Dialog *ngi_instances_config(E_Container *con, const char *params);
|
|
|
|
|
|
|
|
Ng *ngi_new (Config_Item *ci);
|
|
void ngi_free (Ng *ng);
|
|
void ngi_reposition (Ng *ng);
|
|
void ngi_input_extents_calc (Ng *ng);
|
|
void ngi_freeze (Ng *ng);
|
|
void ngi_thaw (Ng *ng);
|
|
void ngi_animate (Ng *ng);
|
|
void ngi_mouse_in (Ng *ng);
|
|
void ngi_mouse_out (Ng *ng);
|
|
Ngi_Item * ngi_item_at_position_get (Ng *ng);
|
|
void ngi_bar_lock (Ng *ng, int lock);
|
|
|
|
void ngi_win_show (Ngi_Win *win);
|
|
void ngi_win_hide (Ngi_Win *win);
|
|
void ngi_win_position_calc (Ngi_Win *win);
|
|
|
|
Ngi_Box *ngi_box_new (Ng *ng);
|
|
void ngi_box_free (Ngi_Box *box);
|
|
|
|
void ngi_configure_module (Config_Item *ci);
|
|
void ngi_configure_box (Ngi_Box *box);
|
|
|
|
void ngi_item_init_defaults (Ngi_Item *it);
|
|
void ngi_item_label_set(Ngi_Item *it, const char *label);
|
|
|
|
|
|
void ngi_item_free (Ngi_Item *it);
|
|
void ngi_item_show (Ngi_Item *it, int instant);
|
|
void ngi_item_remove (Ngi_Item *it);
|
|
void ngi_item_del_icon (Ngi_Item *it);
|
|
void ngi_item_mouse_down (Ngi_Item *it, Ecore_Event_Mouse_Button *ev);
|
|
void ngi_item_mouse_up (Ngi_Item *it, Ecore_Event_Mouse_Button *ev);
|
|
void ngi_item_mouse_in (Ngi_Item *it);
|
|
void ngi_item_mouse_out (Ngi_Item *it);
|
|
void ngi_item_signal_emit (Ngi_Item *it, char *sig);
|
|
void ngi_item_activate (Ng *ng);
|
|
|
|
void ngi_launcher_new (Ng *ng, Config_Box *cfg_box);
|
|
void ngi_launcher_remove (Ngi_Box *box);
|
|
|
|
void ngi_taskbar_init (void);
|
|
void ngi_taskbar_new (Ng *ng, Config_Box *cfg_box);
|
|
void ngi_taskbar_remove (Ngi_Box *box);
|
|
|
|
void ngi_gadcon_init (void);
|
|
void ngi_gadcon_shutdown (void);
|
|
void ngi_gadcon_new (Ng *ng, Config_Box *cfg_box);
|
|
void ngi_gadcon_remove (Ngi_Box *box);
|
|
void ngi_gadcon_config (Ngi_Box *box);
|
|
|
|
void ngi_border_menu_show (Ngi_Box *box, E_Border *bd,
|
|
Evas_Coord x, Evas_Coord y,
|
|
int dir, Ecore_X_Time timestamp);
|
|
|
|
Eina_Bool ngi_object_theme_set(Evas_Object *obj, const char *part);
|
|
|
|
extern Config *ngi_config;
|
|
extern E_Config_DD *ngi_conf_edd;
|
|
extern E_Config_DD *ngi_conf_item_edd;
|
|
extern E_Config_DD *ngi_conf_box_edd;
|
|
extern E_Config_DD *ngi_conf_gadcon_edd;
|
|
#endif
|