2005-01-09 11:02:18 -08:00
|
|
|
#include "e.h"
|
|
|
|
#include "e_mod_main.h"
|
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
/* gadcon requirements */
|
2006-05-31 09:19:11 -07:00
|
|
|
static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style);
|
2012-06-25 03:48:42 -07:00
|
|
|
static void _gc_shutdown(E_Gadcon_Client *gcc);
|
|
|
|
static void _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient __UNUSED__);
|
2012-07-27 01:25:22 -07:00
|
|
|
static const char *_gc_label(const E_Gadcon_Client_Class *client_class __UNUSED__);
|
|
|
|
static Evas_Object *_gc_icon(const E_Gadcon_Client_Class *client_class __UNUSED__, Evas *evas);
|
|
|
|
static const char *_gc_id_new(const E_Gadcon_Client_Class *client_class __UNUSED__);
|
2010-06-29 08:19:48 -07:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
/* and actually define the gadcon class that this module provides (just 1) */
|
|
|
|
static const E_Gadcon_Client_Class _gadcon_class =
|
|
|
|
{
|
|
|
|
GADCON_CLIENT_CLASS_VERSION,
|
2012-06-25 03:48:42 -07:00
|
|
|
"pager",
|
|
|
|
{
|
|
|
|
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL,
|
|
|
|
e_gadcon_site_is_not_toolbar
|
|
|
|
},
|
2006-08-08 23:38:35 -07:00
|
|
|
E_GADCON_CLIENT_STYLE_INSET
|
2006-04-20 04:30:25 -07:00
|
|
|
};
|
2005-01-09 11:02:18 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
/* actual module specifics */
|
2012-06-25 03:48:42 -07:00
|
|
|
typedef struct _Instance Instance;
|
|
|
|
typedef struct _Pager Pager;
|
|
|
|
typedef struct _Pager_Desk Pager_Desk;
|
|
|
|
typedef struct _Pager_Win Pager_Win;
|
2006-04-20 04:30:25 -07:00
|
|
|
typedef struct _Pager_Popup Pager_Popup;
|
2005-01-09 11:02:18 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
struct _Instance
|
2005-01-09 11:02:18 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
E_Gadcon_Client *gcc;
|
2012-06-25 03:48:42 -07:00
|
|
|
Evas_Object *o_pager; /* table */
|
|
|
|
Pager *pager;
|
2006-04-20 04:30:25 -07:00
|
|
|
};
|
2005-02-01 10:21:46 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
struct _Pager
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Instance *inst;
|
2008-01-06 17:30:02 -08:00
|
|
|
E_Drop_Handler *drop_handler;
|
2012-06-25 03:48:42 -07:00
|
|
|
Pager_Popup *popup;
|
|
|
|
Evas_Object *o_table;
|
|
|
|
E_Zone *zone;
|
|
|
|
int xnum, ynum;
|
|
|
|
Eina_List *desks;
|
2013-08-14 04:53:03 -07:00
|
|
|
Pager_Desk *active_pd;
|
2012-06-25 03:48:42 -07:00
|
|
|
unsigned char dragging : 1;
|
|
|
|
unsigned char just_dragged : 1;
|
|
|
|
Evas_Coord dnd_x, dnd_y;
|
|
|
|
Pager_Desk *active_drop_pd;
|
2012-08-13 23:35:32 -07:00
|
|
|
Eina_Bool invert : 1;
|
2006-04-20 04:30:25 -07:00
|
|
|
};
|
2005-01-09 11:02:18 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
struct _Pager_Desk
|
2005-01-09 11:02:18 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Pager *pager;
|
|
|
|
E_Desk *desk;
|
|
|
|
Eina_List *wins;
|
2009-04-28 08:29:56 -07:00
|
|
|
Evas_Object *o_desk;
|
|
|
|
Evas_Object *o_layout;
|
2012-07-11 01:50:52 -07:00
|
|
|
Evas_Object *o_bg;
|
2012-06-25 03:48:42 -07:00
|
|
|
int xpos, ypos, urgent;
|
|
|
|
int current : 1;
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
Pager *from_pager;
|
|
|
|
unsigned char in_pager : 1;
|
|
|
|
unsigned char start : 1;
|
|
|
|
int x, y, dx, dy, button;
|
|
|
|
} drag;
|
2006-04-20 04:30:25 -07:00
|
|
|
};
|
2005-01-09 11:02:18 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
struct _Pager_Win
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
E_Border *border;
|
|
|
|
Pager_Desk *desk;
|
|
|
|
Evas_Object *o_window;
|
|
|
|
Evas_Object *o_icon;
|
2007-07-15 01:28:11 -07:00
|
|
|
unsigned char skip_winlist : 1;
|
2012-06-25 03:48:42 -07:00
|
|
|
struct
|
|
|
|
{
|
|
|
|
Pager *from_pager;
|
|
|
|
unsigned char start : 1;
|
|
|
|
unsigned char in_pager : 1;
|
|
|
|
unsigned char desktop : 1;
|
|
|
|
int x, y, dx, dy, button;
|
|
|
|
} drag;
|
2006-04-20 04:30:25 -07:00
|
|
|
};
|
2005-12-17 03:21:54 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
struct _Pager_Popup
|
2005-01-09 11:02:18 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
E_Popup *popup;
|
|
|
|
Pager *pager;
|
|
|
|
Evas_Object *o_bg;
|
|
|
|
Ecore_Timer *timer;
|
2007-04-04 02:55:40 -07:00
|
|
|
unsigned char urgent : 1;
|
2006-04-20 04:30:25 -07:00
|
|
|
};
|
2005-01-09 11:02:18 -08:00
|
|
|
|
2012-08-10 06:29:35 -07:00
|
|
|
static void _pager_desk_livethumb_setup(Pager_Desk *pd);
|
2012-06-25 03:48:42 -07:00
|
|
|
static void _pager_cb_obj_moveresize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__);
|
|
|
|
static void _button_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
|
|
|
|
static void _pager_inst_cb_menu_configure(void *data __UNUSED__, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__);
|
|
|
|
static void _pager_inst_cb_menu_virtual_desktops_dialog(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__);
|
|
|
|
static void _pager_instance_drop_zone_recalc(Instance *inst);
|
2012-08-10 06:29:35 -07:00
|
|
|
static Eina_Bool _pager_cb_event_bg_update(void *data __UNUSED__, int type __UNUSED__, void *event);
|
2012-06-25 03:48:42 -07:00
|
|
|
static Eina_Bool _pager_cb_event_border_resize(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_move(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_add(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_remove(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_iconify(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_uniconify(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_stick(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_unstick(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_desk_set(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_stack(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_icon_change(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_urgent_change(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_focus_in(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_focus_out(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_border_property(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_zone_desk_count_set(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_desk_show(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_desk_name_change(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_cb_event_container_resize(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static void _pager_window_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
|
|
|
|
static void _pager_window_cb_mouse_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
|
|
|
|
static void _pager_window_cb_mouse_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
|
|
|
|
static void *_pager_window_cb_drag_convert(E_Drag *drag, const char *type);
|
|
|
|
static void _pager_window_cb_drag_finished(E_Drag *drag, int dropped);
|
|
|
|
static void _pager_drop_cb_enter(void *data, const char *type __UNUSED__, void *event_info);
|
|
|
|
static void _pager_drop_cb_move(void *data, const char *type __UNUSED__, void *event_info);
|
|
|
|
static void _pager_drop_cb_leave(void *data, const char *type __UNUSED__, void *event_info __UNUSED__);
|
|
|
|
static void _pager_drop_cb_drop(void *data, const char *type, void *event_info);
|
|
|
|
static void _pager_inst_cb_scroll(void *data);
|
|
|
|
static void _pager_update_drop_position(Pager *p, Evas_Coord x, Evas_Coord y);
|
|
|
|
static void _pager_desk_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
|
|
|
|
static void _pager_desk_cb_mouse_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
|
|
|
|
static void _pager_desk_cb_mouse_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
|
|
|
|
static void _pager_desk_cb_drag_finished(E_Drag *drag, int dropped);
|
|
|
|
static void _pager_desk_cb_mouse_wheel(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
|
|
|
|
static Eina_Bool _pager_popup_cb_timeout(void *data);
|
2012-08-13 23:35:32 -07:00
|
|
|
static Pager *_pager_new(Evas *evas, E_Zone *zone, E_Gadcon *gc);
|
2012-06-25 03:48:42 -07:00
|
|
|
static void _pager_free(Pager *p);
|
2012-08-13 23:35:32 -07:00
|
|
|
static void _pager_fill(Pager *p, E_Gadcon *gc);
|
2012-06-25 03:48:42 -07:00
|
|
|
static void _pager_empty(Pager *p);
|
2012-08-13 23:35:32 -07:00
|
|
|
static Pager_Desk *_pager_desk_new(Pager *p, E_Desk *desk, int xpos, int ypos, Eina_Bool invert);
|
2012-06-25 03:48:42 -07:00
|
|
|
static void _pager_desk_free(Pager_Desk *pd);
|
|
|
|
static Pager_Desk *_pager_desk_at_coord(Pager *p, Evas_Coord x, Evas_Coord y);
|
|
|
|
static void _pager_desk_select(Pager_Desk *pd);
|
|
|
|
static Pager_Desk *_pager_desk_find(Pager *p, E_Desk *desk);
|
|
|
|
static void _pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2);
|
|
|
|
static Pager_Win *_pager_window_new(Pager_Desk *pd, E_Border *border);
|
|
|
|
static void _pager_window_free(Pager_Win *pw);
|
|
|
|
static void _pager_window_move(Pager_Win *pw);
|
|
|
|
static Pager_Win *_pager_window_find(Pager *p, E_Border *border);
|
|
|
|
static Pager_Win *_pager_desk_window_find(Pager_Desk *pd, E_Border *border);
|
|
|
|
static Pager_Popup *_pager_popup_new(E_Zone *zone, int keyaction);
|
|
|
|
static void _pager_popup_free(Pager_Popup *pp);
|
|
|
|
static Pager_Popup *_pager_popup_find(E_Zone *zone);
|
2007-12-14 14:30:44 -08:00
|
|
|
static E_Config_Dialog *_pager_config_dialog(E_Container *con, const char *params);
|
2006-04-20 04:30:25 -07:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
/* functions for pager popup on key actions */
|
2012-06-25 03:48:42 -07:00
|
|
|
static int _pager_popup_show(void);
|
|
|
|
static void _pager_popup_hide(int switch_desk);
|
|
|
|
static Eina_Bool _pager_popup_cb_mouse_down(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_popup_cb_mouse_up(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_popup_cb_mouse_move(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_popup_cb_mouse_wheel(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static void _pager_popup_desk_switch(int x, int y);
|
|
|
|
static void _pager_popup_modifiers_set(int mod);
|
|
|
|
static Eina_Bool _pager_popup_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static Eina_Bool _pager_popup_cb_key_up(void *data __UNUSED__, int type __UNUSED__, void *event);
|
|
|
|
static void _pager_popup_cb_action_show(E_Object *obj __UNUSED__, const char *params __UNUSED__, Ecore_Event_Key *ev __UNUSED__);
|
|
|
|
static void _pager_popup_cb_action_switch(E_Object *obj __UNUSED__, const char *params, Ecore_Event_Key *ev);
|
2008-01-06 17:30:02 -08:00
|
|
|
|
|
|
|
/* variables for pager popup on key actions */
|
|
|
|
static E_Action *act_popup_show = NULL;
|
|
|
|
static E_Action *act_popup_switch = NULL;
|
|
|
|
static Ecore_X_Window input_window = 0;
|
2008-10-22 04:49:33 -07:00
|
|
|
static Eina_List *handlers = NULL;
|
2008-01-06 17:30:02 -08:00
|
|
|
static Pager_Popup *act_popup = NULL; /* active popup */
|
|
|
|
static int hold_count = 0;
|
|
|
|
static int hold_mod = 0;
|
|
|
|
static E_Desk *current_desk = NULL;
|
2006-04-20 04:30:25 -07:00
|
|
|
static E_Config_DD *conf_edd = NULL;
|
2008-10-22 04:49:33 -07:00
|
|
|
static Eina_List *pagers = NULL;
|
2006-04-20 04:30:25 -07:00
|
|
|
|
|
|
|
Config *pager_config = NULL;
|
|
|
|
|
|
|
|
static E_Gadcon_Client *
|
2006-05-31 09:19:11 -07:00
|
|
|
_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
|
2005-01-09 11:02:18 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
Pager *p;
|
|
|
|
Evas_Object *o;
|
|
|
|
E_Gadcon_Client *gcc;
|
|
|
|
Instance *inst;
|
|
|
|
Evas_Coord x, y, w, h;
|
2012-06-25 03:48:42 -07:00
|
|
|
const char *drop[] =
|
|
|
|
{
|
|
|
|
"enlightenment/pager_win", "enlightenment/border",
|
|
|
|
"enlightenment/vdesktop"
|
|
|
|
};
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
inst = E_NEW(Instance, 1);
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2012-08-13 23:35:32 -07:00
|
|
|
p = _pager_new(gc->evas, gc->zone, gc);
|
2006-04-20 04:30:25 -07:00
|
|
|
p->inst = inst;
|
|
|
|
inst->pager = p;
|
|
|
|
o = p->o_table;
|
2006-12-30 15:32:25 -08:00
|
|
|
gcc = e_gadcon_client_new(gc, name, id, style, o);
|
2006-04-20 04:30:25 -07:00
|
|
|
gcc->data = inst;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
inst->gcc = gcc;
|
|
|
|
inst->o_pager = o;
|
|
|
|
|
|
|
|
evas_object_geometry_get(o, &x, &y, &w, &h);
|
2008-01-06 17:30:02 -08:00
|
|
|
p->drop_handler =
|
2012-06-25 03:48:42 -07:00
|
|
|
e_drop_handler_add(E_OBJECT(inst->gcc), p,
|
|
|
|
_pager_drop_cb_enter, _pager_drop_cb_move,
|
|
|
|
_pager_drop_cb_leave, _pager_drop_cb_drop,
|
|
|
|
drop, 3, x, y, w, h);
|
2006-04-20 04:30:25 -07:00
|
|
|
evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE,
|
2012-06-25 03:48:42 -07:00
|
|
|
_pager_cb_obj_moveresize, inst);
|
2006-04-20 04:30:25 -07:00
|
|
|
evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE,
|
2012-06-25 03:48:42 -07:00
|
|
|
_pager_cb_obj_moveresize, inst);
|
2006-04-20 04:30:25 -07:00
|
|
|
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
|
2012-06-25 03:48:42 -07:00
|
|
|
_button_cb_mouse_down, inst);
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->instances = eina_list_append(pager_config->instances, inst);
|
2006-04-20 04:30:25 -07:00
|
|
|
return gcc;
|
2005-01-09 11:02:18 -08:00
|
|
|
}
|
|
|
|
|
2007-12-14 14:30:44 -08:00
|
|
|
static void
|
2006-04-20 04:30:25 -07:00
|
|
|
_gc_shutdown(E_Gadcon_Client *gcc)
|
2005-02-01 10:21:46 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
Instance *inst;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
inst = gcc->data;
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->instances = eina_list_remove(pager_config->instances, inst);
|
2008-01-06 17:30:02 -08:00
|
|
|
e_drop_handler_del(inst->pager->drop_handler);
|
2006-04-20 04:30:25 -07:00
|
|
|
_pager_free(inst->pager);
|
2012-12-06 06:12:55 -08:00
|
|
|
free(inst);
|
2005-02-01 10:21:46 -08:00
|
|
|
}
|
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
static void
|
2010-06-29 08:22:18 -07:00
|
|
|
_gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient __UNUSED__)
|
2005-01-09 11:02:18 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
Instance *inst;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
inst = gcc->data;
|
2012-08-13 23:35:32 -07:00
|
|
|
if (inst->pager->invert)
|
|
|
|
e_gadcon_client_aspect_set(gcc,
|
|
|
|
inst->pager->ynum * inst->pager->zone->w,
|
|
|
|
inst->pager->xnum * inst->pager->zone->h);
|
|
|
|
else
|
|
|
|
e_gadcon_client_aspect_set(gcc,
|
|
|
|
inst->pager->xnum * inst->pager->zone->w,
|
|
|
|
inst->pager->ynum * inst->pager->zone->h);
|
2006-04-20 04:30:25 -07:00
|
|
|
e_gadcon_client_min_size_set(gcc, 16, 16);
|
2005-02-01 10:21:46 -08:00
|
|
|
}
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2011-11-14 13:46:57 -08:00
|
|
|
static const char *
|
2012-07-27 01:25:22 -07:00
|
|
|
_gc_label(const E_Gadcon_Client_Class *client_class __UNUSED__)
|
2006-05-09 06:02:48 -07:00
|
|
|
{
|
|
|
|
return _("Pager");
|
|
|
|
}
|
|
|
|
|
|
|
|
static Evas_Object *
|
2012-07-27 01:25:22 -07:00
|
|
|
_gc_icon(const E_Gadcon_Client_Class *client_class __UNUSED__, Evas *evas)
|
2006-05-09 06:02:48 -07:00
|
|
|
{
|
|
|
|
Evas_Object *o;
|
2010-06-29 08:19:48 -07:00
|
|
|
char buf[PATH_MAX];
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2006-05-09 06:02:48 -07:00
|
|
|
o = edje_object_add(evas);
|
2007-03-24 16:12:23 -07:00
|
|
|
snprintf(buf, sizeof(buf), "%s/e-module-pager.edj",
|
2012-06-25 03:48:42 -07:00
|
|
|
e_module_dir_get(pager_config->module));
|
2006-05-09 06:02:48 -07:00
|
|
|
edje_object_file_set(o, buf, "icon");
|
|
|
|
return o;
|
|
|
|
}
|
2007-09-15 17:02:53 -07:00
|
|
|
|
|
|
|
static const char *
|
2012-07-27 01:25:22 -07:00
|
|
|
_gc_id_new(const E_Gadcon_Client_Class *client_class)
|
2007-09-15 17:02:53 -07:00
|
|
|
{
|
2012-08-22 00:32:12 -07:00
|
|
|
static char buf[4096];
|
2012-06-21 03:42:04 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
snprintf(buf, sizeof(buf), "%s.%d", client_class->name,
|
2012-06-22 00:21:51 -07:00
|
|
|
eina_list_count(pager_config->instances) + 1);
|
|
|
|
return buf;
|
2007-09-15 17:02:53 -07:00
|
|
|
}
|
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
static Pager *
|
2012-08-13 23:35:32 -07:00
|
|
|
_pager_new(Evas *evas, E_Zone *zone, E_Gadcon *gc)
|
2005-02-01 10:21:46 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
Pager *p;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
p = E_NEW(Pager, 1);
|
2008-01-06 17:30:02 -08:00
|
|
|
p->inst = NULL;
|
|
|
|
p->popup = NULL;
|
2006-04-20 04:30:25 -07:00
|
|
|
p->o_table = e_table_add(evas);
|
|
|
|
e_table_homogenous_set(p->o_table, 1);
|
|
|
|
p->zone = zone;
|
2012-08-13 23:35:32 -07:00
|
|
|
_pager_fill(p, gc);
|
2008-10-22 04:49:33 -07:00
|
|
|
pagers = eina_list_append(pagers, p);
|
2006-04-20 04:30:25 -07:00
|
|
|
return p;
|
2005-02-07 03:29:36 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2006-04-20 04:30:25 -07:00
|
|
|
_pager_free(Pager *p)
|
2005-02-07 03:29:36 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
_pager_empty(p);
|
|
|
|
evas_object_del(p->o_table);
|
2008-10-22 04:49:33 -07:00
|
|
|
pagers = eina_list_remove(pagers, p);
|
2012-12-06 06:12:55 -08:00
|
|
|
free(p);
|
2005-02-07 03:29:36 -08:00
|
|
|
}
|
|
|
|
|
2005-02-01 10:21:46 -08:00
|
|
|
static void
|
2012-08-13 23:35:32 -07:00
|
|
|
_pager_fill(Pager *p, E_Gadcon *gc)
|
2005-02-01 10:21:46 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
int x, y;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2012-08-13 23:35:32 -07:00
|
|
|
if (gc)
|
|
|
|
{
|
|
|
|
switch (gc->orient)
|
|
|
|
{
|
|
|
|
|
|
|
|
case E_GADCON_ORIENT_TOP:
|
|
|
|
case E_GADCON_ORIENT_BOTTOM:
|
|
|
|
case E_GADCON_ORIENT_CORNER_TL:
|
|
|
|
case E_GADCON_ORIENT_CORNER_TR:
|
|
|
|
case E_GADCON_ORIENT_CORNER_BL:
|
|
|
|
case E_GADCON_ORIENT_CORNER_BR:
|
|
|
|
case E_GADCON_ORIENT_HORIZ:
|
2012-08-14 01:41:39 -07:00
|
|
|
case E_GADCON_ORIENT_FLOAT:
|
2012-08-13 23:35:32 -07:00
|
|
|
p->invert = EINA_FALSE;
|
|
|
|
break;
|
|
|
|
case E_GADCON_ORIENT_VERT:
|
|
|
|
case E_GADCON_ORIENT_LEFT:
|
|
|
|
case E_GADCON_ORIENT_RIGHT:
|
|
|
|
case E_GADCON_ORIENT_CORNER_LT:
|
|
|
|
case E_GADCON_ORIENT_CORNER_RT:
|
|
|
|
case E_GADCON_ORIENT_CORNER_LB:
|
|
|
|
case E_GADCON_ORIENT_CORNER_RB:
|
|
|
|
default:
|
|
|
|
p->invert = EINA_TRUE;
|
|
|
|
}
|
|
|
|
}
|
2006-04-20 04:30:25 -07:00
|
|
|
e_zone_desk_count_get(p->zone, &(p->xnum), &(p->ynum));
|
2012-08-13 23:35:32 -07:00
|
|
|
if (p->ynum != 1) p->invert = EINA_FALSE;
|
2012-07-03 03:40:39 -07:00
|
|
|
e_table_freeze(p->o_table);
|
2006-04-20 04:30:25 -07:00
|
|
|
for (x = 0; x < p->xnum; x++)
|
2005-03-17 22:39:21 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
for (y = 0; y < p->ynum; y++)
|
|
|
|
{
|
|
|
|
Pager_Desk *pd;
|
|
|
|
E_Desk *desk;
|
2005-10-11 10:22:39 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
desk = e_desk_at_xy_get(p->zone, x, y);
|
2012-11-12 06:45:59 -08:00
|
|
|
if (desk)
|
2012-06-25 03:48:42 -07:00
|
|
|
{
|
2012-11-12 06:45:59 -08:00
|
|
|
pd = _pager_desk_new(p, desk, x, y, p->invert);
|
|
|
|
if (pd)
|
|
|
|
{
|
|
|
|
p->desks = eina_list_append(p->desks, pd);
|
|
|
|
if (desk == e_desk_current_get(desk->zone))
|
|
|
|
_pager_desk_select(pd);
|
|
|
|
}
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
|
|
|
}
|
2005-03-17 22:39:21 -08:00
|
|
|
}
|
2012-07-03 03:40:39 -07:00
|
|
|
e_table_thaw(p->o_table);
|
2005-02-01 10:21:46 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2006-04-20 04:30:25 -07:00
|
|
|
_pager_empty(Pager *p)
|
2005-02-01 10:21:46 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
while (p->desks)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
_pager_desk_free(p->desks->data);
|
|
|
|
p->desks = eina_list_remove_list(p->desks, p->desks);
|
2006-04-20 04:30:25 -07:00
|
|
|
}
|
2005-01-09 11:02:18 -08:00
|
|
|
}
|
|
|
|
|
2012-08-10 06:29:35 -07:00
|
|
|
static void
|
|
|
|
_pager_desk_livethumb_setup(Pager_Desk *pd)
|
|
|
|
{
|
|
|
|
const char *bgfile;
|
|
|
|
Evas *e;
|
|
|
|
Evas_Object *o;
|
|
|
|
|
|
|
|
e = evas_object_evas_get(pd->pager->o_table);
|
|
|
|
|
|
|
|
if (!pd->o_bg)
|
|
|
|
{
|
|
|
|
pd->o_bg = e_livethumb_add(e);
|
2012-08-10 21:40:30 -07:00
|
|
|
e_livethumb_vsize_set(pd->o_bg, pd->desk->zone->w / 16, pd->desk->zone->h / 16);
|
|
|
|
// edje_extern_object_aspect_set(pd->o_bg, EDJE_ASPECT_CONTROL_NEITHER,
|
|
|
|
// pd->desk->zone->w / 16, pd->desk->zone->h / 16);
|
2012-08-10 06:29:35 -07:00
|
|
|
edje_object_part_swallow(pd->o_desk, "e.background", pd->o_bg);
|
|
|
|
}
|
|
|
|
|
|
|
|
o = e_livethumb_thumb_get(pd->o_bg);
|
|
|
|
if (!o) o = edje_object_add(e_livethumb_evas_get(pd->o_bg));
|
|
|
|
bgfile = e_bg_file_get(pd->desk->zone->container->num, pd->desk->zone->num, pd->desk->x, pd->desk->y);
|
|
|
|
edje_object_file_set(o, bgfile, "e/desktop/background");
|
|
|
|
e_livethumb_thumb_set(pd->o_bg, o);
|
2012-12-21 02:20:05 -08:00
|
|
|
eina_stringshare_del(bgfile);
|
2012-08-10 06:29:35 -07:00
|
|
|
}
|
|
|
|
|
2005-01-14 07:24:29 -08:00
|
|
|
static Pager_Desk *
|
2012-08-13 23:35:32 -07:00
|
|
|
_pager_desk_new(Pager *p, E_Desk *desk, int xpos, int ypos, Eina_Bool invert)
|
2005-01-09 11:02:18 -08:00
|
|
|
{
|
2009-04-28 08:29:56 -07:00
|
|
|
Pager_Desk *pd;
|
2009-05-13 04:38:12 -07:00
|
|
|
Evas_Object *o, *evo;
|
2005-05-13 06:34:21 -07:00
|
|
|
E_Border_List *bl;
|
2009-04-28 08:29:56 -07:00
|
|
|
E_Border *bd;
|
2012-07-03 03:40:39 -07:00
|
|
|
int w, h;
|
2012-08-10 06:29:35 -07:00
|
|
|
Evas *e;
|
2005-02-01 10:21:46 -08:00
|
|
|
|
2012-11-12 06:45:59 -08:00
|
|
|
if (!desk) return NULL;
|
2005-02-01 10:21:46 -08:00
|
|
|
pd = E_NEW(Pager_Desk, 1);
|
2005-02-10 04:03:09 -08:00
|
|
|
if (!pd) return NULL;
|
|
|
|
|
2005-02-07 03:29:36 -08:00
|
|
|
pd->xpos = xpos;
|
|
|
|
pd->ypos = ypos;
|
2007-12-14 14:30:44 -08:00
|
|
|
pd->urgent = 0;
|
2005-02-01 10:21:46 -08:00
|
|
|
pd->desk = desk;
|
2005-01-14 07:24:29 -08:00
|
|
|
e_object_ref(E_OBJECT(desk));
|
2006-04-20 04:30:25 -07:00
|
|
|
pd->pager = p;
|
2005-01-09 11:02:18 -08:00
|
|
|
|
2012-08-10 06:29:35 -07:00
|
|
|
e = evas_object_evas_get(p->o_table);
|
|
|
|
o = edje_object_add(e);
|
2006-04-20 04:30:25 -07:00
|
|
|
pd->o_desk = o;
|
2005-04-22 22:16:25 -07:00
|
|
|
e_theme_edje_object_set(o, "base/theme/modules/pager",
|
2012-06-25 03:48:42 -07:00
|
|
|
"e/modules/pager/desk");
|
2012-07-11 03:53:07 -07:00
|
|
|
edje_object_part_text_set(o, "e.text.label", desk->name);
|
2008-01-10 23:33:57 -08:00
|
|
|
if (pager_config->show_desk_names)
|
2012-07-11 03:53:07 -07:00
|
|
|
edje_object_signal_emit(o, "e,name,show", "e");
|
2009-04-28 08:29:56 -07:00
|
|
|
|
2012-08-10 21:40:30 -07:00
|
|
|
if (pager_config->disable_live_preview)
|
|
|
|
edje_object_signal_emit(pd->o_desk, "e,preview,off", "e");
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_pager_desk_livethumb_setup(pd);
|
|
|
|
edje_object_signal_emit(pd->o_desk, "e,preview,on", "e");
|
|
|
|
}
|
2012-07-11 01:50:52 -07:00
|
|
|
|
2012-07-03 03:40:39 -07:00
|
|
|
edje_object_size_min_calc(o, &w, &h);
|
2012-08-13 23:35:32 -07:00
|
|
|
if (invert)
|
|
|
|
e_table_pack(p->o_table, o, ypos, xpos, 1, 1);
|
|
|
|
else
|
|
|
|
e_table_pack(p->o_table, o, xpos, ypos, 1, 1);
|
2012-07-03 03:40:39 -07:00
|
|
|
e_table_pack_options_set(o, 1, 1, 1, 1, 0.5, 0.5, w, h, -1, -1);
|
2009-05-13 04:38:12 -07:00
|
|
|
|
|
|
|
evo = (Evas_Object *)edje_object_part_object_get(o, "e.eventarea");
|
2010-06-29 08:19:48 -07:00
|
|
|
if (!evo) evo = o;
|
2009-05-13 04:38:12 -07:00
|
|
|
|
|
|
|
evas_object_event_callback_add(evo, EVAS_CALLBACK_MOUSE_DOWN,
|
2009-04-28 08:29:56 -07:00
|
|
|
_pager_desk_cb_mouse_down, pd);
|
2009-05-13 04:38:12 -07:00
|
|
|
evas_object_event_callback_add(evo, EVAS_CALLBACK_MOUSE_UP,
|
2009-04-28 08:29:56 -07:00
|
|
|
_pager_desk_cb_mouse_up, pd);
|
2009-05-13 04:38:12 -07:00
|
|
|
evas_object_event_callback_add(evo, EVAS_CALLBACK_MOUSE_MOVE,
|
2009-04-28 08:29:56 -07:00
|
|
|
_pager_desk_cb_mouse_move, pd);
|
2009-05-13 04:38:12 -07:00
|
|
|
evas_object_event_callback_add(evo, EVAS_CALLBACK_MOUSE_WHEEL,
|
2009-04-28 08:29:56 -07:00
|
|
|
_pager_desk_cb_mouse_wheel, pd);
|
2005-03-17 22:39:21 -08:00
|
|
|
evas_object_show(o);
|
2005-10-11 10:22:39 -07:00
|
|
|
|
2012-08-10 06:29:35 -07:00
|
|
|
o = e_layout_add(e);
|
2006-04-20 04:30:25 -07:00
|
|
|
pd->o_layout = o;
|
|
|
|
|
|
|
|
e_layout_virtual_size_set(o, desk->zone->w, desk->zone->h);
|
2008-01-10 23:33:57 -08:00
|
|
|
edje_object_part_swallow(pd->o_desk, "e.swallow.content", pd->o_layout);
|
2006-04-20 04:30:25 -07:00
|
|
|
evas_object_show(o);
|
|
|
|
|
2005-05-13 06:34:21 -07:00
|
|
|
bl = e_container_border_list_first(desk->zone->container);
|
|
|
|
while ((bd = e_container_border_list_next(bl)))
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Pager_Win *pw;
|
2005-10-11 10:22:39 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if ((bd->new_client) || (bd->zone != desk->zone) ||
|
|
|
|
((bd->desk != desk) && (!bd->sticky)))
|
|
|
|
continue;
|
|
|
|
pw = _pager_window_new(pd, bd);
|
|
|
|
if (pw) pd->wins = eina_list_append(pd->wins, pw);
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
2005-05-13 06:34:21 -07:00
|
|
|
e_container_border_list_free(bl);
|
2005-02-01 10:21:46 -08:00
|
|
|
return pd;
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
2005-01-09 11:02:18 -08:00
|
|
|
|
2005-01-14 07:24:29 -08:00
|
|
|
static void
|
2005-03-18 08:30:49 -08:00
|
|
|
_pager_desk_free(Pager_Desk *pd)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
Pager_Win *w;
|
2005-02-01 10:21:46 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
evas_object_del(pd->o_desk);
|
2012-07-13 03:25:51 -07:00
|
|
|
evas_object_del(pd->o_bg);
|
2006-04-20 04:30:25 -07:00
|
|
|
evas_object_del(pd->o_layout);
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FREE(pd->wins, w)
|
|
|
|
_pager_window_free(w);
|
2005-09-24 22:30:09 -07:00
|
|
|
e_object_unref(E_OBJECT(pd->desk));
|
2012-12-06 06:12:55 -08:00
|
|
|
free(pd);
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
static Pager_Desk *
|
|
|
|
_pager_desk_at_coord(Pager *p, Evas_Coord x, Evas_Coord y)
|
|
|
|
{
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2010-06-25 01:57:32 -07:00
|
|
|
Pager_Desk *pd;
|
2006-04-20 04:30:25 -07:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(p->desks, l, pd)
|
2006-04-20 04:30:25 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Evas_Coord dx, dy, dw, dh;
|
2006-04-20 04:30:25 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
evas_object_geometry_get(pd->o_desk, &dx, &dy, &dw, &dh);
|
|
|
|
if (E_INSIDE(x, y, dx, dy, dw, dh)) return pd;
|
2006-04-20 04:30:25 -07:00
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_pager_desk_select(Pager_Desk *pd)
|
|
|
|
{
|
|
|
|
if (pd->current) return;
|
2013-08-14 04:53:03 -07:00
|
|
|
if (pd->pager->active_pd)
|
2010-06-25 01:57:32 -07:00
|
|
|
{
|
2013-08-14 04:53:03 -07:00
|
|
|
pd->pager->active_pd->current = 0;
|
|
|
|
edje_object_signal_emit(pd->pager->active_pd->o_desk, "e,state,unselected", "e");
|
2006-04-20 04:30:25 -07:00
|
|
|
}
|
2013-08-14 04:53:03 -07:00
|
|
|
pd->current = 1;
|
|
|
|
evas_object_raise(pd->o_desk);
|
|
|
|
edje_object_signal_emit(pd->o_desk, "e,state,selected", "e");
|
|
|
|
pd->pager->active_pd = pd;
|
2006-04-20 04:30:25 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static Pager_Desk *
|
|
|
|
_pager_desk_find(Pager *p, E_Desk *desk)
|
|
|
|
{
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2010-06-25 01:57:32 -07:00
|
|
|
Pager_Desk *pd;
|
2006-04-20 04:30:25 -07:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(p->desks, l, pd)
|
2010-06-29 08:19:48 -07:00
|
|
|
if (pd->desk == desk) return pd;
|
2006-04-20 04:30:25 -07:00
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2007-07-15 01:28:11 -07:00
|
|
|
static void
|
|
|
|
_pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2)
|
|
|
|
{
|
|
|
|
int c;
|
2009-04-28 08:29:56 -07:00
|
|
|
E_Zone *zone1, *zone2;
|
|
|
|
E_Desk *desk1, *desk2;
|
|
|
|
Pager_Win *pw;
|
|
|
|
Eina_List *l;
|
2007-07-15 01:28:11 -07:00
|
|
|
|
2007-12-14 14:30:44 -08:00
|
|
|
if ((!pd1) || (!pd2) || (!pd1->desk) || (!pd2->desk)) return;
|
2007-07-15 01:28:11 -07:00
|
|
|
if (pd1 == pd2) return;
|
|
|
|
|
|
|
|
desk1 = pd1->desk;
|
|
|
|
desk2 = pd2->desk;
|
|
|
|
zone1 = pd1->desk->zone;
|
|
|
|
zone2 = pd2->desk->zone;
|
|
|
|
|
|
|
|
/* Move opened windows from on desk to the other */
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pd1->wins, l, pw)
|
2007-07-15 01:28:11 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if ((!pw) || (!pw->border) || (pw->border->iconic)) continue;
|
|
|
|
e_border_desk_set(pw->border, desk2);
|
2007-07-15 01:28:11 -07:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pd2->wins, l, pw)
|
2007-07-15 01:28:11 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if ((!pw) || (!pw->border) || (pw->border->iconic)) continue;
|
|
|
|
e_border_desk_set(pw->border, desk1);
|
2007-07-15 01:28:11 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Modify desktop names in the config */
|
|
|
|
for (l = e_config->desktop_names, c = 0; l && c < 2; l = l->next)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
E_Config_Desktop_Name *tmp_dn;
|
|
|
|
|
|
|
|
tmp_dn = l->data;
|
|
|
|
if (!tmp_dn) continue;
|
|
|
|
if ((tmp_dn->desk_x == desk1->x) &&
|
|
|
|
(tmp_dn->desk_y == desk1->y) &&
|
|
|
|
(tmp_dn->zone == (int)desk1->zone->num))
|
|
|
|
{
|
|
|
|
tmp_dn->desk_x = desk2->x;
|
|
|
|
tmp_dn->desk_y = desk2->y;
|
|
|
|
tmp_dn->zone = desk2->zone->num;
|
|
|
|
c++;
|
|
|
|
}
|
|
|
|
else if ((tmp_dn->desk_x == desk2->x) &&
|
|
|
|
(tmp_dn->desk_y == desk2->y) &&
|
|
|
|
(tmp_dn->zone == (int)desk2->zone->num))
|
|
|
|
{
|
|
|
|
tmp_dn->desk_x = desk1->x;
|
|
|
|
tmp_dn->desk_y = desk1->y;
|
|
|
|
tmp_dn->zone = desk1->zone->num;
|
|
|
|
c++;
|
|
|
|
}
|
2007-07-15 01:28:11 -07:00
|
|
|
}
|
|
|
|
if (c > 0) e_config_save();
|
|
|
|
e_desk_name_update();
|
|
|
|
|
|
|
|
/* Modify desktop backgrounds in the config */
|
|
|
|
for (l = e_config->desktop_backgrounds, c = 0; l && c < 2; l = l->next)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
E_Config_Desktop_Background *tmp_db;
|
|
|
|
|
|
|
|
tmp_db = l->data;
|
|
|
|
if (!tmp_db) continue;
|
|
|
|
if ((tmp_db->desk_x == desk1->x) &&
|
|
|
|
(tmp_db->desk_y == desk1->y) &&
|
|
|
|
(tmp_db->zone == (int)desk1->zone->num))
|
|
|
|
{
|
|
|
|
tmp_db->desk_x = desk2->x;
|
|
|
|
tmp_db->desk_y = desk2->y;
|
|
|
|
tmp_db->zone = desk2->zone->num;
|
|
|
|
c++;
|
|
|
|
}
|
|
|
|
else if ((tmp_db->desk_x == desk2->x) &&
|
|
|
|
(tmp_db->desk_y == desk2->y) &&
|
|
|
|
(tmp_db->zone == (int)desk2->zone->num))
|
|
|
|
{
|
|
|
|
tmp_db->desk_x = desk1->x;
|
|
|
|
tmp_db->desk_y = desk1->y;
|
|
|
|
tmp_db->zone = desk1->zone->num;
|
|
|
|
c++;
|
|
|
|
}
|
2007-07-15 01:28:11 -07:00
|
|
|
}
|
|
|
|
if (c > 0) e_config_save();
|
|
|
|
|
|
|
|
/* If the current desktop has been switched, force to update of the screen */
|
2007-12-14 14:30:44 -08:00
|
|
|
if (desk2 == e_desk_current_get(zone2))
|
2007-07-15 01:28:11 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
desk2->visible = 0;
|
|
|
|
e_desk_show(desk2);
|
2007-07-15 01:28:11 -07:00
|
|
|
}
|
2007-12-14 14:30:44 -08:00
|
|
|
if (desk1 == e_desk_current_get(zone1))
|
2007-07-15 01:28:11 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
desk1->visible = 0;
|
|
|
|
e_desk_show(desk1);
|
2007-07-15 01:28:11 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
static Pager_Win *
|
2005-03-18 08:30:49 -08:00
|
|
|
_pager_window_new(Pager_Desk *pd, E_Border *border)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2009-04-28 08:29:56 -07:00
|
|
|
Pager_Win *pw;
|
2005-01-14 07:24:29 -08:00
|
|
|
Evas_Object *o;
|
2009-04-28 08:29:56 -07:00
|
|
|
int visible;
|
2005-02-01 10:21:46 -08:00
|
|
|
|
2007-07-15 01:28:11 -07:00
|
|
|
if (!border) return NULL;
|
2005-03-18 08:30:49 -08:00
|
|
|
pw = E_NEW(Pager_Win, 1);
|
|
|
|
if (!pw) return NULL;
|
2005-02-10 04:03:09 -08:00
|
|
|
|
2005-03-18 08:30:49 -08:00
|
|
|
pw->border = border;
|
2005-01-14 07:24:29 -08:00
|
|
|
e_object_ref(E_OBJECT(border));
|
2005-10-11 10:22:39 -07:00
|
|
|
|
2010-06-29 08:19:48 -07:00
|
|
|
visible = ((!border->iconic) && (!border->client.netwm.state.skip_pager));
|
2007-07-15 01:28:11 -07:00
|
|
|
pw->skip_winlist = border->client.netwm.state.skip_pager;
|
2005-03-18 08:30:49 -08:00
|
|
|
pw->desk = pd;
|
2005-01-14 07:24:29 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
o = edje_object_add(evas_object_evas_get(pd->pager->o_table));
|
|
|
|
pw->o_window = o;
|
2005-04-22 22:16:25 -07:00
|
|
|
e_theme_edje_object_set(o, "base/theme/modules/pager",
|
2012-06-25 03:48:42 -07:00
|
|
|
"e/modules/pager/window");
|
2012-07-11 23:26:27 -07:00
|
|
|
if (visible) evas_object_show(o);
|
2005-09-09 22:20:58 -07:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
e_layout_pack(pd->o_layout, pw->o_window);
|
|
|
|
e_layout_child_raise(pw->o_window);
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
|
2009-04-28 08:29:56 -07:00
|
|
|
_pager_window_cb_mouse_down, pw);
|
2012-06-25 03:48:42 -07:00
|
|
|
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP,
|
2009-04-28 08:29:56 -07:00
|
|
|
_pager_window_cb_mouse_up, pw);
|
2012-06-25 03:48:42 -07:00
|
|
|
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE,
|
2009-04-28 08:29:56 -07:00
|
|
|
_pager_window_cb_mouse_move, pw);
|
2012-07-11 23:26:27 -07:00
|
|
|
|
|
|
|
o = e_border_icon_add(border, evas_object_evas_get(pd->pager->o_table));
|
|
|
|
if (o)
|
|
|
|
{
|
|
|
|
pw->o_icon = o;
|
|
|
|
evas_object_show(o);
|
|
|
|
edje_object_part_swallow(pw->o_window, "e.swallow.icon", o);
|
|
|
|
}
|
|
|
|
|
2011-11-23 05:03:02 -08:00
|
|
|
if (border->client.icccm.urgent && !border->focused)
|
2007-04-04 02:55:40 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if (!(border->iconic))
|
|
|
|
edje_object_signal_emit(pd->o_desk, "e,state,urgent", "e");
|
|
|
|
edje_object_signal_emit(pw->o_window, "e,state,urgent", "e");
|
2007-04-04 02:55:40 -07:00
|
|
|
}
|
2007-07-15 01:28:11 -07:00
|
|
|
|
2005-09-09 22:20:58 -07:00
|
|
|
evas_object_show(o);
|
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
_pager_window_move(pw);
|
2005-03-18 08:30:49 -08:00
|
|
|
return pw;
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
|
|
|
|
2005-01-16 19:46:07 -08:00
|
|
|
static void
|
2005-03-18 08:30:49 -08:00
|
|
|
_pager_window_free(Pager_Win *pw)
|
2005-01-16 19:46:07 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
if ((pw->drag.from_pager) && (pw->desk->pager->dragging))
|
2007-02-02 18:44:59 -08:00
|
|
|
pw->desk->pager->dragging = 0;
|
2006-04-20 04:30:25 -07:00
|
|
|
if (pw->o_window) evas_object_del(pw->o_window);
|
|
|
|
if (pw->o_icon) evas_object_del(pw->o_icon);
|
2005-03-18 08:30:49 -08:00
|
|
|
e_object_unref(E_OBJECT(pw->border));
|
2012-12-06 06:12:55 -08:00
|
|
|
free(pw);
|
2005-01-16 19:46:07 -08:00
|
|
|
}
|
|
|
|
|
2005-01-14 07:24:29 -08:00
|
|
|
static void
|
2006-04-20 04:30:25 -07:00
|
|
|
_pager_window_move(Pager_Win *pw)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
e_layout_child_move(pw->o_window,
|
|
|
|
pw->border->x - pw->border->zone->x,
|
2010-01-10 18:58:47 -08:00
|
|
|
pw->border->y - pw->border->zone->y);
|
2007-02-02 18:44:59 -08:00
|
|
|
e_layout_child_resize(pw->o_window, pw->border->w, pw->border->h);
|
2005-01-16 19:46:07 -08:00
|
|
|
}
|
|
|
|
|
2005-03-18 08:30:49 -08:00
|
|
|
static Pager_Win *
|
2006-04-20 04:30:25 -07:00
|
|
|
_pager_window_find(Pager *p, E_Border *border)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Eina_List *l;
|
2010-06-25 01:57:32 -07:00
|
|
|
Pager_Desk *pd;
|
2005-10-11 10:22:39 -07:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(p->desks, l, pd)
|
2005-03-18 08:30:49 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Pager_Win *pw;
|
2005-10-11 10:22:39 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
pw = _pager_desk_window_find(pd, border);
|
|
|
|
if (pw) return pw;
|
2005-03-18 08:30:49 -08:00
|
|
|
}
|
|
|
|
return NULL;
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
2005-01-10 12:54:20 -08:00
|
|
|
|
2005-03-18 08:30:49 -08:00
|
|
|
static Pager_Win *
|
2006-04-20 04:30:25 -07:00
|
|
|
_pager_desk_window_find(Pager_Desk *pd, E_Border *border)
|
2005-01-09 11:02:18 -08:00
|
|
|
{
|
2009-04-28 08:29:56 -07:00
|
|
|
Eina_List *l;
|
2010-06-25 01:57:32 -07:00
|
|
|
Pager_Win *pw;
|
2005-10-11 10:22:39 -07:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pd->wins, l, pw)
|
2010-06-29 08:19:48 -07:00
|
|
|
if (pw->border == border) return pw;
|
2005-10-11 10:22:39 -07:00
|
|
|
|
2005-03-18 08:30:49 -08:00
|
|
|
return NULL;
|
2005-01-09 11:02:18 -08:00
|
|
|
}
|
|
|
|
|
2013-06-12 01:38:46 -07:00
|
|
|
static void
|
|
|
|
_pager_popup_cb_del(void *obj)
|
|
|
|
{
|
|
|
|
Pager_Popup *pp = e_object_data_get(obj);
|
|
|
|
_pager_free(pp->pager);
|
|
|
|
free(pp);
|
|
|
|
}
|
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
static Pager_Popup *
|
2008-01-06 17:30:02 -08:00
|
|
|
_pager_popup_new(E_Zone *zone, int keyaction)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
Pager_Popup *pp;
|
2009-04-22 19:24:59 -07:00
|
|
|
Evas_Coord w, h, zx, zy, zw, zh;
|
2007-12-14 14:30:44 -08:00
|
|
|
int x, y, height, width;
|
2006-04-20 04:30:25 -07:00
|
|
|
E_Desk *desk;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
pp = E_NEW(Pager_Popup, 1);
|
|
|
|
if (!pp) return NULL;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
/* Show popup */
|
2007-12-14 14:30:44 -08:00
|
|
|
pp->popup = e_popup_new(zone, 0, 0, 1, 1);
|
2013-05-20 00:59:50 -07:00
|
|
|
e_popup_ignore_events_set(pp->popup, 1);
|
2006-04-20 04:30:25 -07:00
|
|
|
if (!pp->popup)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2012-12-06 06:12:55 -08:00
|
|
|
free(pp);
|
2012-06-25 03:48:42 -07:00
|
|
|
return NULL;
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
2006-04-20 04:30:25 -07:00
|
|
|
|
2012-08-13 23:35:32 -07:00
|
|
|
pp->pager = _pager_new(pp->popup->evas, zone, NULL);
|
2013-06-12 01:38:46 -07:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
pp->pager->popup = pp;
|
|
|
|
pp->urgent = 0;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2007-12-14 14:30:44 -08:00
|
|
|
e_zone_desk_count_get(zone, &x, &y);
|
2008-01-06 17:30:02 -08:00
|
|
|
|
|
|
|
if (keyaction)
|
|
|
|
height = pager_config->popup_act_height * y;
|
|
|
|
else
|
|
|
|
height = pager_config->popup_height * y;
|
|
|
|
|
2010-06-29 08:19:48 -07:00
|
|
|
width = height * (zone->w * x) / (zone->h * y);
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
evas_object_move(pp->pager->o_table, 0, 0);
|
2007-12-14 14:30:44 -08:00
|
|
|
evas_object_resize(pp->pager->o_table, width, height);
|
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
pp->o_bg = edje_object_add(pp->popup->evas);
|
2009-04-28 08:29:56 -07:00
|
|
|
e_theme_edje_object_set(pp->o_bg, "base/theme/modules/pager",
|
2012-06-25 03:48:42 -07:00
|
|
|
"e/modules/pager/popup");
|
2007-12-14 14:30:44 -08:00
|
|
|
desk = e_desk_current_get(zone);
|
2006-04-20 04:30:25 -07:00
|
|
|
if (desk)
|
2008-01-10 23:33:57 -08:00
|
|
|
edje_object_part_text_set(pp->o_bg, "e.text.label", desk->name);
|
2006-04-20 04:30:25 -07:00
|
|
|
evas_object_show(pp->o_bg);
|
2007-12-14 14:30:44 -08:00
|
|
|
|
|
|
|
edje_extern_object_min_size_set(pp->pager->o_table, width, height);
|
2008-01-10 23:33:57 -08:00
|
|
|
edje_object_part_swallow(pp->o_bg, "e.swallow.content", pp->pager->o_table);
|
2006-04-20 04:30:25 -07:00
|
|
|
edje_object_size_min_calc(pp->o_bg, &w, &h);
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
evas_object_move(pp->o_bg, 0, 0);
|
|
|
|
evas_object_resize(pp->o_bg, w, h);
|
2013-02-18 05:43:47 -08:00
|
|
|
e_popup_content_set(pp->popup, pp->o_bg);
|
2009-04-22 19:24:59 -07:00
|
|
|
e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh);
|
|
|
|
zx -= zone->x;
|
|
|
|
zy -= zone->y;
|
|
|
|
e_popup_move_resize(pp->popup,
|
2012-06-25 03:48:42 -07:00
|
|
|
zx + ((zw - w) / 2), zy + ((zh - h) / 2), w, h);
|
2013-06-12 01:38:46 -07:00
|
|
|
E_OBJECT_DEL_SET(pp->popup, _pager_popup_cb_del);
|
|
|
|
e_object_data_set(E_OBJECT(pp->popup), pp);
|
2006-04-20 04:30:25 -07:00
|
|
|
e_popup_show(pp->popup);
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
pp->timer = NULL;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2006-05-31 09:19:11 -07:00
|
|
|
return pp;
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
static void
|
|
|
|
_pager_popup_free(Pager_Popup *pp)
|
2006-03-28 16:35:16 -08:00
|
|
|
{
|
2013-06-12 01:38:46 -07:00
|
|
|
E_FREE_FUNC(pp->timer, ecore_timer_del);
|
2006-04-20 04:30:25 -07:00
|
|
|
e_object_del(E_OBJECT(pp->popup));
|
|
|
|
}
|
2006-03-28 16:35:16 -08:00
|
|
|
|
2007-12-14 14:30:44 -08:00
|
|
|
static Pager_Popup *
|
|
|
|
_pager_popup_find(E_Zone *zone)
|
|
|
|
{
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2010-06-25 01:57:32 -07:00
|
|
|
Pager *p;
|
|
|
|
|
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
|
|
|
if ((p->popup) && (p->zone == zone))
|
|
|
|
return p->popup;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2005-03-18 08:30:49 -08:00
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_obj_moveresize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
Instance *inst;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
inst = data;
|
|
|
|
_pager_instance_drop_zone_recalc(inst);
|
|
|
|
}
|
2005-10-11 10:22:39 -07:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_button_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
|
2006-04-20 04:30:25 -07:00
|
|
|
{
|
|
|
|
Instance *inst;
|
|
|
|
Evas_Event_Mouse_Down *ev;
|
2012-08-15 00:22:04 -07:00
|
|
|
E_Menu *m;
|
|
|
|
E_Menu_Item *mi;
|
|
|
|
int cx, cy;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
inst = data;
|
|
|
|
ev = event_info;
|
2012-08-15 00:22:04 -07:00
|
|
|
if (ev->button != 3) return;
|
2012-12-12 06:56:59 -08:00
|
|
|
if (inst->gcc->menu) return;
|
2012-06-25 03:48:42 -07:00
|
|
|
|
2012-08-15 00:22:04 -07:00
|
|
|
m = e_menu_new();
|
|
|
|
mi = e_menu_item_new(m);
|
|
|
|
e_menu_item_label_set(mi, _("Settings"));
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "configure");
|
|
|
|
e_menu_item_callback_set(mi, _pager_inst_cb_menu_configure, NULL);
|
2012-06-25 03:48:42 -07:00
|
|
|
|
2012-08-15 00:22:04 -07:00
|
|
|
m = e_gadcon_client_util_menu_items_append(inst->gcc, m, 0);
|
|
|
|
if (e_configure_registry_exists("screen/virtual_desktops"))
|
|
|
|
{
|
|
|
|
mi = e_menu_item_new_relative(m, NULL);
|
|
|
|
e_menu_item_label_set(mi, _("Virtual Desktops Settings"));
|
|
|
|
e_util_menu_item_theme_icon_set(mi, "preferences-desktop");
|
|
|
|
e_menu_item_callback_set(mi, _pager_inst_cb_menu_virtual_desktops_dialog, inst);
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
|
|
|
|
2012-08-15 00:22:04 -07:00
|
|
|
e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &cx, &cy,
|
|
|
|
NULL, NULL);
|
|
|
|
e_menu_activate_mouse(m, e_util_zone_current_get(e_manager_current_get()),
|
|
|
|
cx + ev->output.x, cy + ev->output.y, 1, 1,
|
|
|
|
E_MENU_POP_DIRECTION_DOWN, ev->timestamp);
|
|
|
|
evas_event_feed_mouse_up(inst->gcc->gadcon->evas, ev->button,
|
|
|
|
EVAS_BUTTON_NONE, ev->timestamp, NULL);
|
2005-09-06 00:29:47 -07:00
|
|
|
}
|
|
|
|
|
2005-01-09 11:02:18 -08:00
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_inst_cb_menu_configure(void *data __UNUSED__, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2005-02-01 10:21:46 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
if (!pager_config) return;
|
|
|
|
if (pager_config->config_dialog) return;
|
|
|
|
/* FIXME: pass zone config item */
|
|
|
|
_config_pager_module(NULL);
|
|
|
|
}
|
2005-01-16 19:46:07 -08:00
|
|
|
|
2007-12-14 14:30:44 -08:00
|
|
|
static E_Config_Dialog *
|
2010-08-19 08:20:05 -07:00
|
|
|
_pager_config_dialog(E_Container *con __UNUSED__, const char *params __UNUSED__)
|
2007-12-14 14:30:44 -08:00
|
|
|
{
|
2008-01-09 23:40:25 -08:00
|
|
|
if (!pager_config) return NULL;
|
|
|
|
if (pager_config->config_dialog) return NULL;
|
2007-12-14 14:30:44 -08:00
|
|
|
/* FIXME: pass zone config item */
|
2008-01-06 18:31:52 -08:00
|
|
|
_config_pager_module(NULL);
|
2007-12-14 14:30:44 -08:00
|
|
|
return pager_config->config_dialog;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_inst_cb_menu_virtual_desktops_dialog(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
|
2006-11-19 00:58:05 -08:00
|
|
|
{
|
|
|
|
Instance *inst;
|
2007-02-02 18:44:59 -08:00
|
|
|
|
2006-11-19 00:58:05 -08:00
|
|
|
inst = data;
|
2012-06-25 03:48:42 -07:00
|
|
|
e_configure_registry_call("screen/virtual_desktops",
|
2009-04-28 08:29:56 -07:00
|
|
|
inst->gcc->gadcon->zone->container, NULL);
|
2006-11-19 00:58:05 -08:00
|
|
|
}
|
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
static void
|
|
|
|
_pager_instance_drop_zone_recalc(Instance *inst)
|
|
|
|
{
|
|
|
|
Evas_Coord x, y, w, h;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2010-11-08 12:11:45 -08:00
|
|
|
e_gadcon_client_viewport_geometry_get(inst->gcc, &x, &y, &w, &h);
|
2008-01-06 17:30:02 -08:00
|
|
|
e_drop_handler_geometry_set(inst->pager->drop_handler, x, y, w, h);
|
2006-04-20 04:30:25 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
_pager_cb_config_updated(void)
|
|
|
|
{
|
2012-07-11 01:50:52 -07:00
|
|
|
Pager *p;
|
|
|
|
Pager_Desk *pd;
|
|
|
|
Eina_List *l, *ll;
|
2006-04-20 04:30:25 -07:00
|
|
|
if (!pager_config) return;
|
2012-07-11 01:50:52 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2012-07-11 23:26:27 -07:00
|
|
|
EINA_LIST_FOREACH(p->desks, ll, pd)
|
|
|
|
{
|
|
|
|
if (pager_config->disable_live_preview)
|
2012-08-10 21:40:30 -07:00
|
|
|
{
|
|
|
|
if (pd->o_bg) evas_object_del(pd->o_bg);
|
|
|
|
pd->o_bg = NULL;
|
|
|
|
edje_object_signal_emit(pd->o_desk, "e,preview,off", "e");
|
|
|
|
}
|
2012-07-11 23:26:27 -07:00
|
|
|
else
|
2012-08-10 21:40:30 -07:00
|
|
|
{
|
|
|
|
_pager_desk_livethumb_setup(pd);
|
|
|
|
edje_object_signal_emit(pd->o_desk, "e,preview,on", "e");
|
|
|
|
}
|
2012-07-11 23:26:27 -07:00
|
|
|
if (pd->current)
|
|
|
|
edje_object_signal_emit(pd->o_desk, "e,state,selected", "e");
|
|
|
|
else
|
|
|
|
edje_object_signal_emit(pd->o_desk, "e,state,unselected", "e");
|
|
|
|
if (pager_config->show_desk_names)
|
|
|
|
edje_object_signal_emit(pd->o_desk, "e,name,show", "e");
|
|
|
|
else
|
|
|
|
edje_object_signal_emit(pd->o_desk, "e,name,hide", "e");
|
|
|
|
}
|
2005-02-01 10:21:46 -08:00
|
|
|
}
|
2005-01-09 11:02:18 -08:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_resize(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2005-01-10 14:26:34 -08:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Border_Resize *ev = event;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l, *l2;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2005-02-01 10:21:46 -08:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2005-01-15 13:15:06 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Pager_Desk *pd;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->zone != ev->border->zone) continue;
|
|
|
|
EINA_LIST_FOREACH(p->desks, l2, pd)
|
|
|
|
{
|
|
|
|
Pager_Win *pw;
|
2005-09-06 21:47:14 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
|
|
|
if (pw) _pager_window_move(pw);
|
|
|
|
}
|
2005-01-15 13:15:06 -08:00
|
|
|
}
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_move(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Border_Move *ev = event;
|
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager_Win *pw;
|
|
|
|
Pager_Desk *pd;
|
|
|
|
Pager *p;
|
2005-01-10 14:26:34 -08:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2005-01-15 13:15:06 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Eina_List *l2;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->zone != ev->border->zone) continue;
|
|
|
|
EINA_LIST_FOREACH(p->desks, l2, pd)
|
|
|
|
{
|
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
|
|
|
if (pw) _pager_window_move(pw);
|
|
|
|
}
|
2005-01-15 13:15:06 -08:00
|
|
|
}
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2009-04-28 08:29:56 -07:00
|
|
|
if ((act_popup) && (act_popup->pager->zone == ev->border->zone))
|
2008-01-06 17:30:02 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
EINA_LIST_FOREACH(act_popup->pager->desks, l, pd)
|
|
|
|
{
|
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
|
|
|
if (pw) _pager_window_move(pw);
|
|
|
|
}
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-01-10 14:26:34 -08:00
|
|
|
}
|
2005-01-14 07:24:29 -08:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_add(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Border_Add *ev = event;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2005-02-01 10:21:46 -08:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2005-03-21 15:05:40 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Pager_Desk *pd;
|
|
|
|
Pager_Win *pw;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if ((p->zone != ev->border->zone) ||
|
|
|
|
(_pager_window_find(p, ev->border)))
|
|
|
|
continue;
|
|
|
|
pd = _pager_desk_find(p, ev->border->desk);
|
2009-04-28 08:29:56 -07:00
|
|
|
if (!pd) continue;
|
|
|
|
pw = _pager_window_new(pd, ev->border);
|
|
|
|
if (pw) pd->wins = eina_list_append(pd->wins, pw);
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_remove(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Border_Remove *ev = event;
|
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2005-01-14 07:24:29 -08:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Eina_List *l2;
|
|
|
|
Pager_Desk *pd;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->zone != ev->border->zone) continue;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
EINA_LIST_FOREACH(p->desks, l2, pd)
|
|
|
|
{
|
|
|
|
Pager_Win *pw;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
2009-04-28 08:29:56 -07:00
|
|
|
if (!pw) continue;
|
|
|
|
pd->wins = eina_list_remove(pd->wins, pw);
|
|
|
|
_pager_window_free(pw);
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_iconify(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Border_Iconify *ev = event;
|
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2005-01-14 07:24:29 -08:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Eina_List *l2;
|
|
|
|
Pager_Desk *pd;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->zone != ev->border->zone) continue;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
EINA_LIST_FOREACH(p->desks, l2, pd)
|
|
|
|
{
|
|
|
|
Pager_Win *pw;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
2009-04-28 08:29:56 -07:00
|
|
|
if (!pw) continue;
|
|
|
|
if ((pw->drag.from_pager) && (pw->desk->pager->dragging))
|
|
|
|
pw->desk->pager->dragging = 0;
|
|
|
|
evas_object_hide(pw->o_window);
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_uniconify(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Border_Uniconify *ev = event;
|
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2005-01-14 07:24:29 -08:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Eina_List *l2;
|
|
|
|
Pager_Desk *pd;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->zone != ev->border->zone) continue;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
EINA_LIST_FOREACH(p->desks, l2, pd)
|
|
|
|
{
|
|
|
|
Pager_Win *pw;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
|
|
|
if ((pw) && (!pw->skip_winlist)) evas_object_show(pw->o_window);
|
|
|
|
}
|
2005-02-10 07:21:23 -08:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-02-10 07:21:23 -08:00
|
|
|
}
|
2005-01-27 06:24:07 -08:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_stick(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2005-02-10 07:21:23 -08:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Border_Stick *ev = event;
|
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2005-02-10 07:21:23 -08:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2005-02-10 07:21:23 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Eina_List *l2;
|
|
|
|
Pager_Desk *pd;
|
|
|
|
Pager_Win *pw;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->zone != ev->border->zone) continue;
|
|
|
|
pw = _pager_window_find(p, ev->border);
|
|
|
|
if (!pw) continue;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
EINA_LIST_FOREACH(p->desks, l2, pd)
|
2012-11-06 13:31:25 -08:00
|
|
|
if ((ev->border->desk != pd->desk) && (!_pager_desk_window_find(pd, ev->border)))
|
2012-06-25 03:48:42 -07:00
|
|
|
{
|
|
|
|
pw = _pager_window_new(pd, ev->border);
|
|
|
|
if (pw) pd->wins = eina_list_append(pd->wins, pw);
|
|
|
|
}
|
2005-02-10 07:21:23 -08:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-02-10 07:21:23 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_unstick(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2005-02-10 07:21:23 -08:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Border_Unstick *ev = event;
|
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2005-02-10 07:21:23 -08:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2005-02-10 07:21:23 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Pager_Desk *pd;
|
|
|
|
Eina_List *l2;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->zone != ev->border->zone) continue;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
EINA_LIST_FOREACH(p->desks, l2, pd)
|
|
|
|
if (ev->border->desk != pd->desk)
|
|
|
|
{
|
|
|
|
Pager_Win *pw;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
|
|
|
if (pw)
|
|
|
|
{
|
|
|
|
pd->wins = eina_list_remove(pd->wins, pw);
|
|
|
|
_pager_window_free(pw);
|
|
|
|
}
|
|
|
|
}
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
|
|
|
|
2008-01-06 18:31:52 -08:00
|
|
|
static void
|
2008-01-06 17:30:02 -08:00
|
|
|
_pager_window_desk_change(Pager *pager, E_Border *bd)
|
2005-01-14 07:24:29 -08:00
|
|
|
{
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2012-06-25 03:48:42 -07:00
|
|
|
Pager_Win *pw;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager_Desk *pd;
|
2005-10-11 10:22:39 -07:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
/* if this pager is not for the zone of the border */
|
|
|
|
if (pager->zone != bd->zone)
|
2005-03-19 04:33:24 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
/* look at all desks in the pager */
|
|
|
|
EINA_LIST_FOREACH(pager->desks, l, pd)
|
|
|
|
{
|
|
|
|
/* find this border in this desk */
|
|
|
|
pw = _pager_desk_window_find(pd, bd);
|
2009-04-28 08:29:56 -07:00
|
|
|
if (!pw) continue;
|
|
|
|
/* if it is found - remove it. it does not belong in this
|
|
|
|
* pager as it probably moves zones */
|
|
|
|
pd->wins = eina_list_remove(pd->wins, pw);
|
|
|
|
_pager_window_free(pw);
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
|
|
|
return;
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
|
|
|
/* and this pager zone is for this border */
|
|
|
|
/* see if the window is in this pager at all */
|
|
|
|
pw = _pager_window_find(pager, bd);
|
|
|
|
if (pw)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
/* is it sticky */
|
|
|
|
if (bd->sticky)
|
|
|
|
{
|
|
|
|
/* if its sticky and in this pager - its already everywhere, so abort
|
|
|
|
* doing anything else */
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
/* move it to the right desk */
|
|
|
|
/* find the pager desk of the target desk */
|
|
|
|
pd = _pager_desk_find(pager, bd->desk);
|
|
|
|
if (pd)
|
|
|
|
{
|
|
|
|
Pager_Win *pw2 = NULL;
|
|
|
|
E_Border *bd_above;
|
|
|
|
|
|
|
|
/* remove it from whatever desk it was on */
|
|
|
|
pw->desk->wins = eina_list_remove(pw->desk->wins, pw);
|
|
|
|
e_layout_unpack(pw->o_window);
|
|
|
|
|
|
|
|
/* add it to the one its MEANT to be on */
|
|
|
|
pw->desk = pd;
|
|
|
|
pd->wins = eina_list_append(pd->wins, pw);
|
|
|
|
e_layout_pack(pd->o_layout, pw->o_window);
|
|
|
|
|
|
|
|
bd_above = e_util_desk_border_above(pw->border);
|
|
|
|
if (bd_above)
|
|
|
|
pw2 = _pager_desk_window_find(pd, bd_above);
|
|
|
|
if (pw2)
|
|
|
|
e_layout_child_lower_below(pw->o_window, pw2->o_window);
|
|
|
|
else
|
|
|
|
e_layout_child_raise(pw->o_window);
|
|
|
|
|
|
|
|
_pager_window_move(pw);
|
|
|
|
}
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
2010-09-08 16:59:07 -07:00
|
|
|
/* the border isn't in this pager at all - it must have moved zones */
|
2008-01-06 17:30:02 -08:00
|
|
|
else
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if (!bd->sticky)
|
|
|
|
{
|
|
|
|
/* find the pager desk it needs to go to */
|
|
|
|
pd = _pager_desk_find(pager, bd->desk);
|
2012-11-06 13:31:25 -08:00
|
|
|
if ((pd) && (!_pager_desk_window_find(pd, bd)))
|
2012-06-25 03:48:42 -07:00
|
|
|
{
|
|
|
|
/* create it and add it */
|
|
|
|
pw = _pager_window_new(pd, bd);
|
|
|
|
if (pw)
|
|
|
|
{
|
|
|
|
Pager_Win *pw2 = NULL;
|
|
|
|
E_Border *bd_above;
|
|
|
|
|
|
|
|
pd->wins = eina_list_append(pd->wins, pw);
|
|
|
|
bd_above = e_util_desk_border_above(pw->border);
|
|
|
|
if (bd_above)
|
|
|
|
pw2 = _pager_desk_window_find(pd, bd_above);
|
|
|
|
if (pw2)
|
|
|
|
e_layout_child_lower_below(pw->o_window, pw2->o_window);
|
|
|
|
else
|
|
|
|
e_layout_child_raise(pw->o_window);
|
|
|
|
_pager_window_move(pw);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* go through all desks */
|
|
|
|
EINA_LIST_FOREACH(pager->desks, l, pd)
|
|
|
|
{
|
|
|
|
/* create it and add it */
|
2012-11-06 13:31:25 -08:00
|
|
|
if (_pager_desk_window_find(pd, bd)) continue;
|
2012-06-25 03:48:42 -07:00
|
|
|
pw = _pager_window_new(pd, bd);
|
|
|
|
if (pw)
|
|
|
|
{
|
|
|
|
Pager_Win *pw2 = NULL;
|
|
|
|
E_Border *bd_above;
|
|
|
|
|
|
|
|
pd->wins = eina_list_append(pd->wins, pw);
|
|
|
|
bd_above = e_util_desk_border_above(pw->border);
|
|
|
|
if (bd_above)
|
|
|
|
pw2 = _pager_desk_window_find(pd, bd_above);
|
|
|
|
if (pw2)
|
|
|
|
e_layout_child_lower_below(pw->o_window, pw2->o_window);
|
|
|
|
else
|
|
|
|
e_layout_child_raise(pw->o_window);
|
|
|
|
_pager_window_move(pw);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2005-01-15 05:11:56 -08:00
|
|
|
}
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_desk_set(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2008-01-06 17:30:02 -08:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Border_Desk_Set *ev = event;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
|
|
|
_pager_window_desk_change(p, ev->border);
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-01-14 07:24:29 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_stack(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2005-01-15 00:31:39 -08:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Border_Stack *ev = event;
|
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2005-02-01 10:21:46 -08:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2005-03-18 08:30:49 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Eina_List *l2;
|
|
|
|
Pager_Desk *pd;
|
|
|
|
|
|
|
|
if (p->zone != ev->border->zone) continue;
|
|
|
|
EINA_LIST_FOREACH(p->desks, l2, pd)
|
|
|
|
{
|
|
|
|
Pager_Win *pw, *pw2 = NULL;
|
|
|
|
|
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
|
|
|
if (pw)
|
|
|
|
{
|
2012-08-28 03:25:47 -07:00
|
|
|
E_Border *bd;
|
|
|
|
|
|
|
|
bd = e_util_desk_border_below(ev->border);
|
|
|
|
if (bd) pw2 = _pager_desk_window_find(pd, bd);
|
|
|
|
if (pw2)
|
2012-06-25 03:48:42 -07:00
|
|
|
{
|
2012-08-28 03:25:47 -07:00
|
|
|
e_layout_child_raise_above(pw->o_window, pw2->o_window);
|
|
|
|
continue;
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
2012-08-28 03:25:47 -07:00
|
|
|
bd = e_util_desk_border_above(ev->border);
|
|
|
|
if (bd) pw2 = _pager_desk_window_find(pd, bd);
|
|
|
|
if (pw2)
|
2012-06-25 03:48:42 -07:00
|
|
|
{
|
2012-08-28 03:25:47 -07:00
|
|
|
e_layout_child_lower_below(pw->o_window, pw2->o_window);
|
|
|
|
continue;
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2005-03-18 08:30:49 -08:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-03-18 08:30:49 -08:00
|
|
|
}
|
2005-02-01 10:21:46 -08:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_icon_change(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2005-03-20 03:49:32 -08:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Border_Icon_Change *ev = event;
|
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2005-03-20 03:49:32 -08:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2005-03-20 03:49:32 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Eina_List *l2;
|
|
|
|
Pager_Desk *pd;
|
|
|
|
|
|
|
|
if (p->zone != ev->border->zone) continue;
|
|
|
|
EINA_LIST_FOREACH(p->desks, l2, pd)
|
|
|
|
{
|
|
|
|
Pager_Win *pw;
|
|
|
|
|
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
|
|
|
if (pw)
|
|
|
|
{
|
|
|
|
Evas_Object *o;
|
|
|
|
|
|
|
|
if (pw->o_icon)
|
|
|
|
{
|
|
|
|
evas_object_del(pw->o_icon);
|
|
|
|
pw->o_icon = NULL;
|
|
|
|
}
|
2012-07-11 23:26:27 -07:00
|
|
|
o = e_border_icon_add(ev->border,
|
|
|
|
evas_object_evas_get(p->o_table));
|
|
|
|
if (o)
|
2012-06-25 03:48:42 -07:00
|
|
|
{
|
2012-07-11 23:26:27 -07:00
|
|
|
pw->o_icon = o;
|
|
|
|
evas_object_show(o);
|
|
|
|
edje_object_part_swallow(pw->o_window,
|
|
|
|
"e.swallow.icon", o);
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2005-03-20 03:49:32 -08:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-03-20 03:49:32 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_urgent_change(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2006-10-24 07:32:22 -07:00
|
|
|
{
|
2007-04-04 02:55:40 -07:00
|
|
|
E_Event_Border_Urgent_Change *ev;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l, *l2;
|
2007-12-14 14:30:44 -08:00
|
|
|
Pager_Popup *pp;
|
|
|
|
E_Zone *zone;
|
|
|
|
int urgent;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
|
|
|
Pager_Desk *pd;
|
|
|
|
Pager_Win *pw;
|
2006-10-24 07:32:22 -07:00
|
|
|
|
|
|
|
ev = event;
|
2007-12-14 14:30:44 -08:00
|
|
|
zone = ev->border->zone;
|
|
|
|
urgent = ev->border->client.icccm.urgent;
|
|
|
|
|
2010-11-11 09:58:23 -08:00
|
|
|
if (pager_config->popup_urgent && (pager_config->popup_urgent_focus ||
|
2012-06-25 03:48:42 -07:00
|
|
|
(!pager_config->popup_urgent_focus && !ev->border->focused)))
|
2007-12-14 14:30:44 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
pp = _pager_popup_find(zone);
|
2007-04-04 02:55:40 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if ((!pp) && (urgent) && !(ev->border->iconic))
|
|
|
|
{
|
|
|
|
pp = _pager_popup_new(zone, 0);
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if ((pp) && (!pager_config->popup_urgent_stick))
|
|
|
|
pp->timer = ecore_timer_add(pager_config->popup_urgent_speed,
|
|
|
|
_pager_popup_cb_timeout, pp);
|
|
|
|
if (pp) pp->urgent = 1;
|
|
|
|
}
|
2008-01-13 12:15:22 -08:00
|
|
|
}
|
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2008-01-13 12:15:22 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->zone != zone) continue;
|
|
|
|
|
|
|
|
EINA_LIST_FOREACH(p->desks, l2, pd)
|
|
|
|
{
|
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
|
|
|
if (pw)
|
|
|
|
{
|
|
|
|
if (urgent && !ev->border->focused)
|
|
|
|
{
|
|
|
|
if (!(ev->border->iconic))
|
|
|
|
{
|
|
|
|
if ((pd->pager) && (pd->pager->inst) &&
|
2009-04-28 08:29:56 -07:00
|
|
|
(!pager_config->popup_urgent))
|
2012-06-25 03:48:42 -07:00
|
|
|
e_gadcon_urgent_show(pd->pager->inst->gcc->gadcon);
|
|
|
|
edje_object_signal_emit(pd->o_desk,
|
|
|
|
"e,state,urgent", "e");
|
|
|
|
}
|
|
|
|
edje_object_signal_emit(pw->o_window,
|
|
|
|
"e,state,urgent", "e");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (!(ev->border->iconic))
|
|
|
|
edje_object_signal_emit(pd->o_desk,
|
|
|
|
"e,state,not_urgent", "e");
|
|
|
|
edje_object_signal_emit(pw->o_window,
|
|
|
|
"e,state,not_urgent", "e");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2006-10-24 07:32:22 -07:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2006-10-24 07:32:22 -07:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_focus_in(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2008-01-10 23:33:57 -08:00
|
|
|
{
|
|
|
|
E_Event_Border_Focus_In *ev;
|
2010-06-25 01:57:32 -07:00
|
|
|
Instance *inst;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l, *l2;
|
2008-01-10 23:33:57 -08:00
|
|
|
Pager_Popup *pp;
|
2010-06-25 01:57:32 -07:00
|
|
|
Pager_Desk *pd;
|
|
|
|
Pager_Win *pw;
|
2008-01-10 23:33:57 -08:00
|
|
|
E_Zone *zone;
|
|
|
|
|
|
|
|
ev = event;
|
|
|
|
zone = ev->border->zone;
|
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pager_config->instances, l, inst)
|
2008-01-10 23:33:57 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if (inst->pager->zone != zone) continue;
|
2008-01-10 23:33:57 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
EINA_LIST_FOREACH(inst->pager->desks, l2, pd)
|
|
|
|
{
|
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
|
|
|
if (pw)
|
|
|
|
{
|
|
|
|
edje_object_signal_emit(pw->o_window,
|
|
|
|
"e,state,focused", "e");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2008-01-10 23:33:57 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
pp = _pager_popup_find(zone);
|
2010-06-25 01:57:32 -07:00
|
|
|
if (!pp) return ECORE_CALLBACK_PASS_ON;
|
|
|
|
|
|
|
|
EINA_LIST_FOREACH(pp->pager->desks, l, pd)
|
2008-01-10 23:33:57 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
|
|
|
if (pw)
|
|
|
|
{
|
|
|
|
edje_object_signal_emit(pw->o_window,
|
|
|
|
"e,state,focused", "e");
|
|
|
|
break;
|
|
|
|
}
|
2008-01-10 23:33:57 -08:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2008-01-10 23:33:57 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_focus_out(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2008-01-10 23:33:57 -08:00
|
|
|
{
|
|
|
|
E_Event_Border_Focus_Out *ev;
|
2010-06-25 01:57:32 -07:00
|
|
|
Eina_List *l;
|
2008-01-10 23:33:57 -08:00
|
|
|
Pager_Popup *pp;
|
2010-06-25 01:57:32 -07:00
|
|
|
Pager_Desk *pd;
|
|
|
|
Pager_Win *pw;
|
|
|
|
Instance *inst;
|
2008-01-10 23:33:57 -08:00
|
|
|
E_Zone *zone;
|
|
|
|
|
|
|
|
ev = event;
|
|
|
|
zone = ev->border->zone;
|
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pager_config->instances, l, inst)
|
2008-01-10 23:33:57 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Eina_List *l2;
|
2008-01-10 23:33:57 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (inst->pager->zone != zone) continue;
|
2008-01-10 23:33:57 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
EINA_LIST_FOREACH(inst->pager->desks, l2, pd)
|
|
|
|
{
|
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
|
|
|
if (pw)
|
|
|
|
{
|
|
|
|
edje_object_signal_emit(pw->o_window,
|
|
|
|
"e,state,unfocused", "e");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2008-01-10 23:33:57 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
pp = _pager_popup_find(zone);
|
2010-06-25 01:57:32 -07:00
|
|
|
if (!pp) return ECORE_CALLBACK_PASS_ON;
|
|
|
|
|
|
|
|
EINA_LIST_FOREACH(pp->pager->desks, l, pd)
|
2008-01-10 23:33:57 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
|
|
|
if (pw)
|
|
|
|
{
|
|
|
|
edje_object_signal_emit(pw->o_window,
|
|
|
|
"e,state,unfocused", "e");
|
|
|
|
break;
|
|
|
|
}
|
2008-01-10 23:33:57 -08:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2008-01-10 23:33:57 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_border_property(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2007-06-09 21:34:23 -07:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Border_Property *ev = event;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l, *l2;
|
2007-12-14 14:30:44 -08:00
|
|
|
int found = 0;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
|
|
|
Pager_Win *pw;
|
|
|
|
Pager_Desk *pd;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2007-06-09 21:34:23 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->zone != ev->border->zone) continue;
|
|
|
|
|
|
|
|
EINA_LIST_FOREACH(p->desks, l2, pd)
|
|
|
|
{
|
|
|
|
pw = _pager_desk_window_find(pd, ev->border);
|
|
|
|
if (pw)
|
|
|
|
{
|
|
|
|
found = 1;
|
|
|
|
if (ev->border->client.netwm.state.skip_pager)
|
|
|
|
{
|
|
|
|
pd->wins = eina_list_remove(pd->wins, pw);
|
|
|
|
_pager_window_free(pw);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2007-06-09 21:34:23 -07:00
|
|
|
}
|
2010-06-24 09:19:12 -07:00
|
|
|
if (found) return ECORE_CALLBACK_PASS_ON;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2007-06-09 21:34:23 -07:00
|
|
|
/* If we did not find this window in the pager, then add it because
|
|
|
|
* the skip_pager state may have changed to 1 */
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2007-06-09 21:34:23 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if ((p->zone != ev->border->zone) ||
|
|
|
|
(_pager_window_find(p, ev->border)))
|
|
|
|
continue;
|
|
|
|
if (!ev->border->sticky)
|
|
|
|
{
|
|
|
|
pd = _pager_desk_find(p, ev->border->desk);
|
2012-11-06 13:31:25 -08:00
|
|
|
if ((pd) && (!_pager_desk_window_find(pd, ev->border)))
|
2012-06-25 03:48:42 -07:00
|
|
|
{
|
|
|
|
pw = _pager_window_new(pd, ev->border);
|
|
|
|
if (pw)
|
|
|
|
{
|
|
|
|
Pager_Win *pw2 = NULL;
|
|
|
|
E_Border *bd;
|
|
|
|
|
|
|
|
pd->wins = eina_list_append(pd->wins, pw);
|
|
|
|
bd = e_util_desk_border_above(pw->border);
|
|
|
|
if (bd)
|
|
|
|
pw2 = _pager_desk_window_find(pd, bd);
|
|
|
|
if (pw2)
|
|
|
|
e_layout_child_lower_below(pw->o_window, pw2->o_window);
|
|
|
|
else
|
|
|
|
e_layout_child_raise(pw->o_window);
|
|
|
|
_pager_window_move(pw);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
EINA_LIST_FOREACH(p->desks, l2, pd)
|
|
|
|
{
|
2012-11-06 13:31:25 -08:00
|
|
|
if (_pager_desk_window_find(pd, ev->border)) continue;
|
2012-06-25 03:48:42 -07:00
|
|
|
pw = _pager_window_new(pd, ev->border);
|
|
|
|
if (pw)
|
|
|
|
{
|
|
|
|
Pager_Win *pw2 = NULL;
|
|
|
|
E_Border *bd;
|
|
|
|
|
|
|
|
pd->wins = eina_list_append(pd->wins, pw);
|
|
|
|
bd = e_util_desk_border_above(pw->border);
|
|
|
|
if (bd)
|
|
|
|
pw2 = _pager_desk_window_find(pd, bd);
|
|
|
|
if (pw2)
|
|
|
|
e_layout_child_lower_below(pw->o_window, pw2->o_window);
|
|
|
|
else
|
|
|
|
e_layout_child_raise(pw->o_window);
|
|
|
|
_pager_window_move(pw);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2007-06-09 21:34:23 -07:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2007-06-09 21:34:23 -07:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-08-19 08:20:05 -07:00
|
|
|
_pager_cb_event_zone_desk_count_set(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
|
2005-03-18 08:30:49 -08:00
|
|
|
{
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2005-09-06 21:47:14 -07:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2005-06-13 12:49:11 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
_pager_empty(p);
|
2012-08-13 23:35:32 -07:00
|
|
|
_pager_fill(p, p->inst ? p->inst->gcc->gadcon : NULL);
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->inst) _gc_orient(p->inst->gcc, p->inst->gcc->gadcon->orient);
|
2005-01-16 19:46:07 -08:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-01-16 19:46:07 -08:00
|
|
|
}
|
2005-02-07 03:29:36 -08:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_desk_show(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2005-02-15 04:15:22 -08:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Desk_Show *ev = event;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2007-12-14 14:30:44 -08:00
|
|
|
Pager_Popup *pp;
|
2010-06-25 01:57:32 -07:00
|
|
|
Pager_Desk *pd;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2005-09-05 22:19:15 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->zone != ev->desk->zone) continue;
|
|
|
|
pd = _pager_desk_find(p, ev->desk);
|
|
|
|
if (pd) _pager_desk_select(pd);
|
2005-09-05 22:19:15 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->popup)
|
2009-04-28 08:29:56 -07:00
|
|
|
edje_object_part_text_set(p->popup->o_bg, "text", ev->desk->name);
|
2007-12-14 14:30:44 -08:00
|
|
|
}
|
|
|
|
|
2010-06-29 08:19:48 -07:00
|
|
|
if ((pager_config->popup) && (!act_popup))
|
2007-12-14 14:30:44 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if ((pp = _pager_popup_find(ev->desk->zone)))
|
2009-04-28 08:29:56 -07:00
|
|
|
ecore_timer_del(pp->timer);
|
2012-06-25 03:48:42 -07:00
|
|
|
else
|
2009-04-28 08:29:56 -07:00
|
|
|
pp = _pager_popup_new(ev->desk->zone, 0);
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (pp)
|
|
|
|
{
|
|
|
|
pp->timer = ecore_timer_add(pager_config->popup_speed,
|
|
|
|
_pager_popup_cb_timeout, pp);
|
|
|
|
}
|
2005-09-05 22:19:15 -07:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-02-15 04:15:22 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_desk_name_change(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2005-09-05 16:14:58 -07:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Desk_Name_Change *ev = event;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2005-10-11 10:22:39 -07:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2005-09-05 18:11:41 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Pager_Desk *pd;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->zone != ev->desk->zone) continue;
|
|
|
|
pd = _pager_desk_find(p, ev->desk);
|
|
|
|
if (pager_config->show_desk_names)
|
|
|
|
{
|
|
|
|
if (pd)
|
|
|
|
edje_object_part_text_set(pd->o_desk, "e.text.label",
|
2009-04-28 08:29:56 -07:00
|
|
|
ev->desk->name);
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
else
|
2009-04-28 08:29:56 -07:00
|
|
|
{
|
|
|
|
if (pd)
|
|
|
|
edje_object_part_text_set(pd->o_desk, "e.text.label", "");
|
|
|
|
}
|
2005-09-09 22:20:58 -07:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2005-03-17 22:39:21 -08:00
|
|
|
}
|
|
|
|
|
2012-08-10 06:29:35 -07:00
|
|
|
static Eina_Bool
|
|
|
|
_pager_cb_event_bg_update(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|
|
|
{
|
|
|
|
E_Event_Bg_Update *ev = event;
|
|
|
|
Eina_List *l, *ll;
|
|
|
|
Pager *p;
|
|
|
|
Pager_Desk *pd;
|
|
|
|
E_Manager *man;
|
|
|
|
E_Container *con;
|
|
|
|
E_Zone *zone;
|
|
|
|
E_Desk *desk;
|
|
|
|
|
|
|
|
if (ev->zone == -1)
|
|
|
|
{
|
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
|
|
|
EINA_LIST_FOREACH(p->desks, ll, pd)
|
|
|
|
_pager_desk_livethumb_setup(pd);
|
|
|
|
return ECORE_CALLBACK_RENEW;
|
|
|
|
}
|
|
|
|
man = e_manager_current_get();
|
|
|
|
con = eina_list_nth(man->containers, ev->container);
|
|
|
|
if (!con) return ECORE_CALLBACK_RENEW;
|
|
|
|
zone = eina_list_nth(con->zones, ev->zone);
|
|
|
|
if (!zone) return ECORE_CALLBACK_RENEW;
|
|
|
|
desk = e_desk_at_xy_get(zone, ev->desk_x, ev->desk_y);
|
|
|
|
if (!zone) return ECORE_CALLBACK_RENEW;
|
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
|
|
|
{
|
|
|
|
pd = _pager_desk_find(p, desk);
|
|
|
|
if (!pd) continue;
|
|
|
|
_pager_desk_livethumb_setup(pd);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
return ECORE_CALLBACK_RENEW;
|
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_cb_event_container_resize(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2006-05-04 21:47:57 -07:00
|
|
|
{
|
2010-06-25 01:57:32 -07:00
|
|
|
E_Event_Container_Resize *ev = event;
|
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2006-05-04 21:47:57 -07:00
|
|
|
|
2010-06-25 01:57:32 -07:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2006-05-04 21:47:57 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
Eina_List *l2;
|
|
|
|
Pager_Desk *pd;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->zone->container != ev->container) continue;
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
EINA_LIST_FOREACH(p->desks, l2, pd)
|
|
|
|
e_layout_virtual_size_set(pd->o_layout, pd->desk->zone->w,
|
|
|
|
pd->desk->zone->h);
|
2010-06-25 01:57:32 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (p->inst) _gc_orient(p->inst->gcc, p->inst->gcc->gadcon->orient);
|
|
|
|
/* TODO if (p->popup) */
|
2006-05-04 21:47:57 -07:00
|
|
|
}
|
2010-06-25 01:57:32 -07:00
|
|
|
|
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2006-05-04 21:47:57 -07:00
|
|
|
}
|
|
|
|
|
2005-09-09 22:20:58 -07:00
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_window_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
|
2005-09-09 22:20:58 -07:00
|
|
|
{
|
|
|
|
Evas_Event_Mouse_Down *ev;
|
|
|
|
Pager_Win *pw;
|
2005-10-11 10:22:39 -07:00
|
|
|
|
2005-09-09 22:20:58 -07:00
|
|
|
ev = event_info;
|
|
|
|
pw = data;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2005-09-09 22:20:58 -07:00
|
|
|
if (!pw) return;
|
2008-01-06 17:30:02 -08:00
|
|
|
if (pw->desk->pager->popup && !act_popup) return;
|
2008-01-13 12:15:22 -08:00
|
|
|
if (!pw->desk->pager->popup && ev->button == 3) return;
|
2012-06-25 03:48:42 -07:00
|
|
|
if (ev->button == (int)pager_config->btn_desk) return;
|
|
|
|
if ((ev->button == (int)pager_config->btn_drag) ||
|
|
|
|
(ev->button == (int)pager_config->btn_noplace))
|
|
|
|
{
|
|
|
|
Evas_Coord ox, oy;
|
|
|
|
|
|
|
|
evas_object_geometry_get(pw->o_window, &ox, &oy, NULL, NULL);
|
|
|
|
pw->drag.in_pager = 1;
|
|
|
|
pw->drag.x = ev->canvas.x;
|
|
|
|
pw->drag.y = ev->canvas.y;
|
|
|
|
pw->drag.dx = ox - ev->canvas.x;
|
|
|
|
pw->drag.dy = oy - ev->canvas.y;
|
|
|
|
pw->drag.start = 1;
|
|
|
|
pw->drag.button = ev->button;
|
2005-09-09 22:20:58 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_window_cb_mouse_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
|
2005-09-09 22:20:58 -07:00
|
|
|
{
|
|
|
|
Evas_Event_Mouse_Up *ev;
|
|
|
|
Pager_Win *pw;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2005-09-09 22:20:58 -07:00
|
|
|
ev = event_info;
|
|
|
|
pw = data;
|
|
|
|
if (!pw) return;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
|
|
|
p = pw->desk->pager;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
if (pw->desk->pager->popup && !act_popup) return;
|
2012-06-25 03:48:42 -07:00
|
|
|
if (ev->button == (int)pager_config->btn_desk) return;
|
|
|
|
if ((ev->button == (int)pager_config->btn_drag) ||
|
|
|
|
(ev->button == (int)pager_config->btn_noplace))
|
2007-12-14 14:30:44 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if (!pw->drag.from_pager)
|
|
|
|
{
|
2013-05-30 01:42:29 -07:00
|
|
|
edje_object_signal_emit(pw->desk->o_desk, "e,action,drag,out", "e");
|
|
|
|
e_comp_win_effect_unclip(pw->border->cw);
|
2012-06-25 03:48:42 -07:00
|
|
|
if (!pw->drag.start) p->just_dragged = 1;
|
|
|
|
pw->drag.in_pager = 0;
|
|
|
|
pw->drag.start = 0;
|
|
|
|
p->dragging = 0;
|
|
|
|
}
|
2006-04-20 04:30:25 -07:00
|
|
|
}
|
2005-09-09 22:20:58 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_window_cb_mouse_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
|
2005-09-09 22:20:58 -07:00
|
|
|
{
|
|
|
|
Evas_Event_Mouse_Move *ev;
|
|
|
|
Pager_Win *pw;
|
2007-12-14 14:30:44 -08:00
|
|
|
E_Drag *drag;
|
|
|
|
Evas_Object *o, *oo;
|
|
|
|
Evas_Coord x, y, w, h;
|
2012-06-25 03:48:42 -07:00
|
|
|
const char *drag_types[] =
|
|
|
|
{ "enlightenment/pager_win", "enlightenment/border" };
|
2007-12-14 14:30:44 -08:00
|
|
|
Evas_Coord dx, dy;
|
|
|
|
unsigned int resist = 0;
|
|
|
|
Evas_Coord mx, my, vx, vy;
|
|
|
|
Pager_Desk *pd;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2005-09-09 22:20:58 -07:00
|
|
|
ev = event_info;
|
|
|
|
pw = data;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2005-09-09 22:20:58 -07:00
|
|
|
if (!pw) return;
|
2008-01-14 07:23:49 -08:00
|
|
|
if (pw->border->lock_user_location) return;
|
2010-06-29 08:19:48 -07:00
|
|
|
if ((pw->desk->pager->popup) && (!act_popup)) return;
|
2006-03-28 16:35:16 -08:00
|
|
|
/* prevent drag for a few pixels */
|
2005-09-09 22:20:58 -07:00
|
|
|
if (pw->drag.start)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
dx = pw->drag.x - ev->cur.output.x;
|
|
|
|
dy = pw->drag.y - ev->cur.output.y;
|
|
|
|
if ((pw->desk) && (pw->desk->pager))
|
|
|
|
resist = pager_config->drag_resist;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (((unsigned int)(dx * dx) + (unsigned int)(dy * dy)) <=
|
|
|
|
(resist * resist)) return;
|
2006-03-28 16:35:16 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
pw->desk->pager->dragging = 1;
|
|
|
|
pw->drag.start = 0;
|
2013-05-30 01:42:29 -07:00
|
|
|
e_comp_win_effect_clip(pw->border->cw);
|
|
|
|
edje_object_signal_emit(pw->desk->o_desk, "e,action,drag,in", "e");
|
|
|
|
pw->desk->pager->active_drop_pd = pw->desk;
|
2006-03-28 16:35:16 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
/* dragging this win around inside the pager */
|
|
|
|
if (pw->drag.in_pager)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
/* m for mouse */
|
|
|
|
mx = ev->cur.canvas.x;
|
|
|
|
my = ev->cur.canvas.y;
|
|
|
|
|
|
|
|
/* find desk at pointer */
|
|
|
|
pd = _pager_desk_at_coord(pw->desk->pager, mx, my);
|
2013-05-30 01:42:29 -07:00
|
|
|
if (pd)
|
2012-06-25 03:48:42 -07:00
|
|
|
{
|
2013-05-30 01:42:29 -07:00
|
|
|
int zx, zy, zw, zh;
|
2012-06-25 03:48:42 -07:00
|
|
|
|
2013-05-30 01:42:29 -07:00
|
|
|
e_zone_useful_geometry_get(pd->desk->zone, &zx, &zy, &zw, &zh);
|
2012-06-25 03:48:42 -07:00
|
|
|
e_layout_coord_canvas_to_virtual(pd->o_layout,
|
|
|
|
mx + pw->drag.dx,
|
|
|
|
my + pw->drag.dy, &vx, &vy);
|
|
|
|
if (pd != pw->desk)
|
2013-05-30 01:42:29 -07:00
|
|
|
{
|
|
|
|
edje_object_signal_emit(pw->desk->o_desk, "e,action,drag,out", "e");
|
|
|
|
if (pd->desk != e_desk_current_get(pd->desk->zone))
|
|
|
|
e_border_hide(pw->border, 2);
|
|
|
|
else
|
2013-07-01 23:59:00 -07:00
|
|
|
{
|
|
|
|
e_comp_win_effect_unclip(pw->border->cw);
|
|
|
|
e_comp_win_effect_set(pw->border->cw, NULL);
|
|
|
|
e_border_show(pw->border);
|
|
|
|
}
|
2013-05-30 01:42:29 -07:00
|
|
|
e_border_desk_set(pw->border, pd->desk);
|
|
|
|
edje_object_signal_emit(pd->o_desk, "e,action,drag,in", "e");
|
|
|
|
pd->pager->active_drop_pd = pd;
|
|
|
|
}
|
|
|
|
mx = E_CLAMP(vx + zx, zx, zx + zw - pw->border->w);
|
|
|
|
my = E_CLAMP(vy + zy, zy, zy + zh - pw->border->h);
|
|
|
|
e_border_move(pw->border, mx, my);
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
evas_object_geometry_get(pw->o_window, &x, &y, &w, &h);
|
|
|
|
evas_object_hide(pw->o_window);
|
|
|
|
|
|
|
|
drag = e_drag_new(pw->desk->pager->zone->container,
|
|
|
|
x, y, drag_types, 2, pw, -1,
|
|
|
|
_pager_window_cb_drag_convert,
|
|
|
|
_pager_window_cb_drag_finished);
|
|
|
|
|
|
|
|
o = edje_object_add(drag->evas);
|
|
|
|
e_theme_edje_object_set(o, "base/theme/modules/pager",
|
|
|
|
"e/modules/pager/window");
|
|
|
|
evas_object_show(o);
|
|
|
|
|
2012-07-11 23:26:27 -07:00
|
|
|
oo = e_border_icon_add(pw->border, drag->evas);
|
|
|
|
if (oo)
|
2012-06-25 03:48:42 -07:00
|
|
|
{
|
2012-07-11 23:26:27 -07:00
|
|
|
evas_object_show(oo);
|
|
|
|
edje_object_part_swallow(o, "e.swallow.icon", oo);
|
2013-02-25 23:27:44 -08:00
|
|
|
e_popup_object_add(drag->pop, oo);
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
e_drag_object_set(drag, o);
|
|
|
|
e_drag_resize(drag, w, h);
|
|
|
|
e_drag_start(drag, x - pw->drag.dx, y - pw->drag.dy);
|
|
|
|
|
|
|
|
/* this prevents the desk from switching on drags */
|
|
|
|
pw->drag.from_pager = pw->desk->pager;
|
|
|
|
pw->drag.from_pager->dragging = 1;
|
|
|
|
pw->drag.in_pager = 0;
|
|
|
|
}
|
2006-03-28 16:35:16 -08:00
|
|
|
}
|
2005-09-09 22:20:58 -07:00
|
|
|
}
|
|
|
|
|
2007-01-02 22:14:04 -08:00
|
|
|
static void *
|
|
|
|
_pager_window_cb_drag_convert(E_Drag *drag, const char *type)
|
|
|
|
{
|
|
|
|
Pager_Win *pw;
|
|
|
|
|
|
|
|
pw = drag->data;
|
|
|
|
if (!strcmp(type, "enlightenment/pager_win")) return pw;
|
|
|
|
if (!strcmp(type, "enlightenment/border")) return pw->border;
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2005-09-09 22:20:58 -07:00
|
|
|
static void
|
|
|
|
_pager_window_cb_drag_finished(E_Drag *drag, int dropped)
|
|
|
|
{
|
|
|
|
Pager_Win *pw;
|
2007-12-14 14:30:44 -08:00
|
|
|
E_Container *cont;
|
|
|
|
E_Zone *zone;
|
|
|
|
E_Desk *desk;
|
|
|
|
int x, y, dx, dy;
|
2005-09-09 22:20:58 -07:00
|
|
|
|
|
|
|
pw = drag->data;
|
2006-03-28 16:35:16 -08:00
|
|
|
if (!pw) return;
|
2006-04-20 04:30:25 -07:00
|
|
|
evas_object_show(pw->o_window);
|
2006-03-28 16:35:16 -08:00
|
|
|
if (!dropped)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
int zx, zy, zw, zh;
|
2009-04-22 19:24:59 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
/* wasn't dropped (on pager). move it to position of mouse on screen */
|
|
|
|
cont = e_container_current_get(e_manager_current_get());
|
|
|
|
zone = e_zone_current_get(cont);
|
|
|
|
desk = e_desk_current_get(zone);
|
2006-03-28 16:35:16 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
e_border_zone_set(pw->border, zone);
|
2013-06-12 06:08:27 -07:00
|
|
|
if ((pw->border->desk != desk) && (desk == e_desk_current_get(zone)))
|
|
|
|
{
|
|
|
|
e_border_desk_set(pw->border, desk);
|
|
|
|
e_comp_win_effect_set(pw->border->cw, NULL);
|
|
|
|
}
|
2006-03-28 16:35:16 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
ecore_x_pointer_last_xy_get(&x, &y);
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
dx = (pw->border->w / 2);
|
|
|
|
dy = (pw->border->h / 2);
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh);
|
2009-04-22 19:24:59 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
/* offset so that center of window is on mouse, but keep within desk bounds */
|
|
|
|
if (dx < x)
|
|
|
|
{
|
|
|
|
x -= dx;
|
|
|
|
if ((pw->border->w < zw) &&
|
|
|
|
(x + pw->border->w > zx + zw))
|
|
|
|
x -= x + pw->border->w - (zx + zw);
|
|
|
|
}
|
|
|
|
else x = 0;
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (dy < y)
|
|
|
|
{
|
|
|
|
y -= dy;
|
|
|
|
if ((pw->border->h < zh) &&
|
|
|
|
(y + pw->border->h > zy + zh))
|
|
|
|
y -= y + pw->border->h - (zy + zh);
|
|
|
|
}
|
|
|
|
else y = 0;
|
|
|
|
e_border_move(pw->border, x, y);
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (!(pw->border->lock_user_stacking)) e_border_raise(pw->border);
|
2005-09-12 17:27:53 -07:00
|
|
|
}
|
2013-05-30 01:42:29 -07:00
|
|
|
if (pw->desk->pager->active_drop_pd)
|
|
|
|
{
|
|
|
|
edje_object_signal_emit(pw->desk->pager->active_drop_pd->o_desk, "e,action,drag,out", "e");
|
|
|
|
pw->desk->pager->active_drop_pd = NULL;
|
|
|
|
}
|
2010-07-13 19:05:47 -07:00
|
|
|
if (pw->drag.from_pager) pw->drag.from_pager->dragging = 0;
|
2006-04-20 04:30:25 -07:00
|
|
|
pw->drag.from_pager = NULL;
|
2013-05-30 01:42:29 -07:00
|
|
|
e_comp_win_effect_unclip(pw->border->cw);
|
2012-06-25 03:48:42 -07:00
|
|
|
if (act_popup)
|
2008-01-06 17:30:02 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
e_grabinput_get(input_window, 0, input_window);
|
|
|
|
if (!hold_count) _pager_popup_hide(1);
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
2005-09-12 17:27:53 -07:00
|
|
|
}
|
2005-09-09 22:20:58 -07:00
|
|
|
|
2005-04-23 06:13:57 -07:00
|
|
|
static void
|
2006-11-14 22:24:30 -08:00
|
|
|
_pager_inst_cb_scroll(void *data)
|
2005-04-23 06:13:57 -07:00
|
|
|
{
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2005-04-25 11:02:26 -07:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
p = data;
|
|
|
|
_pager_update_drop_position(p, p->dnd_x, p->dnd_y);
|
2005-05-15 15:16:00 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2008-01-06 17:30:02 -08:00
|
|
|
_pager_update_drop_position(Pager *p, Evas_Coord x, Evas_Coord y)
|
2005-05-15 15:16:00 -07:00
|
|
|
{
|
2012-12-11 01:54:50 -08:00
|
|
|
Pager_Desk *pd;
|
2005-05-15 15:16:00 -07:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
p->dnd_x = x;
|
|
|
|
p->dnd_y = y;
|
2010-11-09 13:14:38 -08:00
|
|
|
pd = _pager_desk_at_coord(p, x, y);
|
2008-10-05 10:45:13 -07:00
|
|
|
if (pd == p->active_drop_pd) return;
|
2012-12-11 01:54:50 -08:00
|
|
|
if (pd)
|
|
|
|
edje_object_signal_emit(pd->o_desk, "e,action,drag,in", "e");
|
|
|
|
if (p->active_drop_pd)
|
|
|
|
edje_object_signal_emit(p->active_drop_pd->o_desk, "e,action,drag,out", "e");
|
2008-01-06 17:30:02 -08:00
|
|
|
p->active_drop_pd = pd;
|
2006-11-14 22:24:30 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-12-11 01:19:15 -08:00
|
|
|
_pager_drop_cb_enter(void *data, const char *type __UNUSED__, void *event_info EINA_UNUSED)
|
2006-11-14 22:24:30 -08:00
|
|
|
{
|
2012-12-11 01:19:15 -08:00
|
|
|
Pager *p = data;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
|
|
|
/* FIXME this fixes a segv, but the case is not easy
|
2008-01-06 18:31:52 -08:00
|
|
|
* reproduceable. this makes no sense either since
|
|
|
|
* the same 'pager' is passed to e_drop_handler_add
|
2008-01-06 17:30:02 -08:00
|
|
|
* and it works without this almost all the time.
|
|
|
|
* so this must be an issue with e_dnd code... i guess */
|
2008-01-06 18:31:52 -08:00
|
|
|
if (act_popup) p = act_popup->pager;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
|
|
|
if (p->inst)
|
2012-12-11 01:19:15 -08:00
|
|
|
e_gadcon_client_autoscroll_cb_set(p->inst->gcc, _pager_inst_cb_scroll, p);
|
2006-11-14 22:24:30 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_drop_cb_move(void *data, const char *type __UNUSED__, void *event_info)
|
2006-11-14 22:24:30 -08:00
|
|
|
{
|
|
|
|
E_Event_Dnd_Move *ev;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2006-11-14 22:24:30 -08:00
|
|
|
|
|
|
|
ev = event_info;
|
2008-01-06 17:30:02 -08:00
|
|
|
p = data;
|
|
|
|
|
2008-01-06 18:31:52 -08:00
|
|
|
if (act_popup) p = act_popup->pager;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
|
|
|
_pager_update_drop_position(p, ev->x, ev->y);
|
|
|
|
|
|
|
|
if (p->inst)
|
2009-04-28 08:29:56 -07:00
|
|
|
e_gadcon_client_autoscroll_update(p->inst->gcc, ev->x, ev->y);
|
2005-05-15 15:16:00 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_drop_cb_leave(void *data, const char *type __UNUSED__, void *event_info __UNUSED__)
|
2005-05-15 15:16:00 -07:00
|
|
|
{
|
2012-12-11 04:48:49 -08:00
|
|
|
Pager *p = data;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2008-01-06 18:31:52 -08:00
|
|
|
if (act_popup) p = act_popup->pager;
|
2006-11-17 21:40:29 -08:00
|
|
|
|
2012-12-11 04:48:49 -08:00
|
|
|
if (p->active_drop_pd)
|
|
|
|
edje_object_signal_emit(p->active_drop_pd->o_desk, "e,action,drag,out", "e");
|
|
|
|
p->active_drop_pd = NULL;
|
2006-11-14 22:24:30 -08:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
if (p->inst) e_gadcon_client_autoscroll_cb_set(p->inst->gcc, NULL, NULL);
|
2005-05-15 15:16:00 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2008-01-06 17:30:02 -08:00
|
|
|
_pager_drop_cb_drop(void *data, const char *type, void *event_info)
|
2005-05-15 15:16:00 -07:00
|
|
|
{
|
|
|
|
E_Event_Dnd_Drop *ev;
|
2006-04-20 04:30:25 -07:00
|
|
|
Pager_Desk *pd;
|
2007-07-15 01:28:11 -07:00
|
|
|
Pager_Desk *pd2 = NULL;
|
2006-04-20 04:30:25 -07:00
|
|
|
E_Border *bd = NULL;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2006-03-28 16:35:16 -08:00
|
|
|
int dx = 0, dy = 0;
|
2006-04-20 04:30:25 -07:00
|
|
|
Pager_Win *pw = NULL;
|
2007-12-14 14:30:44 -08:00
|
|
|
Evas_Coord wx, wy, wx2, wy2;
|
|
|
|
Evas_Coord nx, ny;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2005-05-15 15:16:00 -07:00
|
|
|
|
|
|
|
ev = event_info;
|
2008-01-06 17:30:02 -08:00
|
|
|
p = data;
|
2006-09-17 20:49:45 -07:00
|
|
|
|
2008-01-06 18:31:52 -08:00
|
|
|
if (act_popup) p = act_popup->pager;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2010-11-09 13:14:38 -08:00
|
|
|
pd = _pager_desk_at_coord(p, ev->x, ev->y);
|
2006-04-20 04:30:25 -07:00
|
|
|
if (pd)
|
2006-03-28 16:35:16 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if (!strcmp(type, "enlightenment/pager_win"))
|
|
|
|
{
|
|
|
|
pw = (Pager_Win *)(ev->data);
|
|
|
|
if (pw)
|
|
|
|
{
|
|
|
|
bd = pw->border;
|
|
|
|
dx = pw->drag.dx;
|
|
|
|
dy = pw->drag.dy;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (!strcmp(type, "enlightenment/border"))
|
|
|
|
{
|
|
|
|
bd = ev->data;
|
|
|
|
e_layout_coord_virtual_to_canvas(pd->o_layout, bd->x, bd->y,
|
2009-04-28 08:29:56 -07:00
|
|
|
&wx, &wy);
|
2012-06-25 03:48:42 -07:00
|
|
|
e_layout_coord_virtual_to_canvas(pd->o_layout, bd->x + bd->w,
|
2009-04-28 08:29:56 -07:00
|
|
|
bd->y + bd->h, &wx2, &wy2);
|
2012-06-25 03:48:42 -07:00
|
|
|
dx = (wx - wx2) / 2;
|
|
|
|
dy = (wy - wy2) / 2;
|
|
|
|
}
|
|
|
|
else if (!strcmp(type, "enlightenment/vdesktop"))
|
|
|
|
{
|
|
|
|
pd2 = ev->data;
|
|
|
|
if (!pd2) return;
|
|
|
|
_pager_desk_switch(pd, pd2);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (bd)
|
|
|
|
{
|
2012-07-05 00:18:49 -07:00
|
|
|
E_Maximize max = bd->maximized;
|
2012-07-18 00:21:26 -07:00
|
|
|
E_Fullscreen fs = bd->fullscreen_policy;
|
2012-07-19 06:13:23 -07:00
|
|
|
Eina_Bool fullscreen = bd->fullscreen;
|
2013-05-30 01:42:29 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (bd->iconic) e_border_uniconify(bd);
|
2012-07-05 00:18:49 -07:00
|
|
|
if (bd->maximized)
|
|
|
|
e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
|
2012-07-19 06:13:23 -07:00
|
|
|
if (fullscreen) e_border_unfullscreen(bd);
|
2013-05-30 01:42:29 -07:00
|
|
|
if (pd->desk != e_desk_current_get(pd->desk->zone))
|
|
|
|
e_border_hide(bd, 2);
|
2013-06-12 23:30:36 -07:00
|
|
|
else
|
|
|
|
{
|
2013-06-28 06:44:25 -07:00
|
|
|
if ((pd->desk != bd->desk) && (pw))
|
2013-06-12 23:30:36 -07:00
|
|
|
e_comp_win_effect_set(pw->border->cw, NULL);
|
|
|
|
}
|
2012-06-25 03:48:42 -07:00
|
|
|
e_border_desk_set(bd, pd->desk);
|
2012-08-30 06:13:51 -07:00
|
|
|
e_border_raise(bd);
|
2013-06-28 06:44:25 -07:00
|
|
|
|
2013-05-30 01:42:29 -07:00
|
|
|
if ((!max) && (!fullscreen))
|
2012-06-25 03:48:42 -07:00
|
|
|
{
|
2013-05-30 01:42:29 -07:00
|
|
|
int zx, zy, zw, zh, mx, my;
|
2012-06-25 03:48:42 -07:00
|
|
|
|
|
|
|
e_layout_coord_canvas_to_virtual(pd->o_layout,
|
|
|
|
ev->x + dx,
|
|
|
|
ev->y + dy,
|
|
|
|
&nx, &ny);
|
|
|
|
e_zone_useful_geometry_get(pd->desk->zone,
|
2013-05-30 01:42:29 -07:00
|
|
|
&zx, &zy, &zw, &zh);
|
2012-06-25 03:48:42 -07:00
|
|
|
|
2013-05-30 01:42:29 -07:00
|
|
|
mx = E_CLAMP(nx + zx, zx, zx + zw - bd->w);
|
|
|
|
my = E_CLAMP(ny + zy, zy, zy + zh - bd->h);
|
|
|
|
e_border_move(bd, mx, my);
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
2012-07-05 00:18:49 -07:00
|
|
|
if (max) e_border_maximize(bd, max);
|
2012-07-19 06:13:23 -07:00
|
|
|
if (fullscreen) e_border_fullscreen(bd, fs);
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
2005-04-25 13:56:52 -07:00
|
|
|
}
|
2006-11-17 21:40:29 -08:00
|
|
|
|
2012-12-11 01:02:13 -08:00
|
|
|
EINA_LIST_FOREACH(p->desks, l, pd)
|
2006-04-20 04:30:25 -07:00
|
|
|
{
|
2012-12-11 01:02:13 -08:00
|
|
|
if (!p->active_drop_pd) break;
|
2012-06-25 03:48:42 -07:00
|
|
|
if (pd == p->active_drop_pd)
|
|
|
|
{
|
|
|
|
edje_object_signal_emit(pd->o_desk, "e,action,drag,out", "e");
|
|
|
|
p->active_drop_pd = NULL;
|
|
|
|
}
|
2006-04-20 04:30:25 -07:00
|
|
|
}
|
2006-11-14 22:24:30 -08:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
if (p->inst) e_gadcon_client_autoscroll_cb_set(p->inst->gcc, NULL, NULL);
|
2005-04-23 06:13:57 -07:00
|
|
|
}
|
2005-09-05 16:14:58 -07:00
|
|
|
|
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_desk_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
|
2005-09-05 16:14:58 -07:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
Evas_Event_Mouse_Down *ev;
|
|
|
|
Pager_Desk *pd;
|
2007-12-14 14:30:44 -08:00
|
|
|
Evas_Coord ox, oy;
|
2006-04-20 04:30:25 -07:00
|
|
|
|
|
|
|
ev = event_info;
|
|
|
|
pd = data;
|
2007-07-15 01:28:11 -07:00
|
|
|
if (!pd) return;
|
2010-06-29 08:19:48 -07:00
|
|
|
if ((!pd->pager->popup) && (ev->button == 3)) return;
|
2012-06-25 03:48:42 -07:00
|
|
|
if (ev->button == (int)pager_config->btn_desk)
|
2007-07-15 01:28:11 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
evas_object_geometry_get(pd->o_desk, &ox, &oy, NULL, NULL);
|
|
|
|
pd->drag.start = 1;
|
|
|
|
pd->drag.in_pager = 1;
|
|
|
|
pd->drag.dx = ox - ev->canvas.x;
|
|
|
|
pd->drag.dy = oy - ev->canvas.y;
|
|
|
|
pd->drag.x = ev->canvas.x;
|
|
|
|
pd->drag.y = ev->canvas.y;
|
|
|
|
pd->drag.button = ev->button;
|
2007-07-15 01:28:11 -07:00
|
|
|
}
|
2013-05-30 01:42:29 -07:00
|
|
|
else
|
|
|
|
{
|
|
|
|
pd->drag.dx = pd->drag.dy = pd->drag.x = pd->drag.y = 0;
|
|
|
|
}
|
|
|
|
pd->pager->just_dragged = 0;
|
2005-09-05 16:14:58 -07:00
|
|
|
}
|
|
|
|
|
2005-09-20 10:09:27 -07:00
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_desk_cb_mouse_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
|
2005-09-20 10:09:27 -07:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
Evas_Event_Mouse_Up *ev;
|
|
|
|
Pager_Desk *pd;
|
2007-04-04 02:55:40 -07:00
|
|
|
Pager *p;
|
2005-09-20 10:09:27 -07:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
ev = event_info;
|
|
|
|
pd = data;
|
2007-07-15 01:28:11 -07:00
|
|
|
|
|
|
|
if (!pd) return;
|
2007-04-04 02:55:40 -07:00
|
|
|
p = pd->pager;
|
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
/* FIXME: pd->pager->dragging is 0 when finishing a drag from desk to desk */
|
2007-01-21 13:36:17 -08:00
|
|
|
if ((ev->button == 1) && (!pd->pager->dragging) &&
|
2006-04-20 04:30:25 -07:00
|
|
|
(!pd->pager->just_dragged))
|
2005-09-20 10:09:27 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
current_desk = pd->desk;
|
|
|
|
e_desk_show(pd->desk);
|
|
|
|
pd->drag.start = 0;
|
|
|
|
pd->drag.in_pager = 0;
|
2013-05-30 01:42:29 -07:00
|
|
|
p->active_drop_pd = NULL;
|
2006-04-20 04:30:25 -07:00
|
|
|
}
|
2005-09-20 10:09:27 -07:00
|
|
|
|
2010-06-29 08:19:48 -07:00
|
|
|
if ((p->popup) && (p->popup->urgent)) _pager_popup_free(p->popup);
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
2010-06-29 08:19:48 -07:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_desk_cb_mouse_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
|
2006-04-20 04:30:25 -07:00
|
|
|
{
|
|
|
|
Evas_Event_Mouse_Move *ev;
|
|
|
|
Pager_Desk *pd;
|
2007-12-14 14:30:44 -08:00
|
|
|
Evas_Coord dx, dy;
|
|
|
|
unsigned int resist = 0;
|
|
|
|
E_Drag *drag;
|
|
|
|
Evas_Object *o, *oo, *o_icon;
|
|
|
|
Evas_Coord x, y, w, h;
|
|
|
|
const char *drag_types[] = { "enlightenment/vdesktop" };
|
|
|
|
Pager_Win *pw;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
ev = event_info;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
pd = data;
|
2007-07-15 01:28:11 -07:00
|
|
|
if (!pd) return;
|
|
|
|
/* prevent drag for a few pixels */
|
|
|
|
if (pd->drag.start)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
dx = pd->drag.x - ev->cur.output.x;
|
|
|
|
dy = pd->drag.y - ev->cur.output.y;
|
|
|
|
if ((pd->pager) && (pd->pager->inst))
|
|
|
|
resist = pager_config->drag_resist;
|
2007-07-15 01:28:11 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (((unsigned int)(dx * dx) + (unsigned int)(dy * dy)) <=
|
|
|
|
(resist * resist)) return;
|
2007-07-15 01:28:11 -07:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (pd->pager) pd->pager->dragging = 1;
|
|
|
|
pd->drag.start = 0;
|
2007-07-15 01:28:11 -07:00
|
|
|
}
|
|
|
|
|
2011-01-15 17:34:05 -08:00
|
|
|
if (pd->drag.in_pager && pd->pager)
|
2007-07-15 01:28:11 -07:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
evas_object_geometry_get(pd->o_desk, &x, &y, &w, &h);
|
|
|
|
drag = e_drag_new(pd->pager->zone->container,
|
|
|
|
x, y, drag_types, 1, pd, -1,
|
|
|
|
NULL, _pager_desk_cb_drag_finished);
|
2012-11-26 02:13:54 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
/* redraw the desktop theme above */
|
|
|
|
o = edje_object_add(drag->evas);
|
|
|
|
e_theme_edje_object_set(o, "base/theme/modules/pager",
|
|
|
|
"e/modules/pager/desk");
|
|
|
|
evas_object_show(o);
|
|
|
|
e_drag_object_set(drag, o);
|
|
|
|
|
|
|
|
/* and redraw is content */
|
|
|
|
oo = e_layout_add(drag->evas);
|
|
|
|
e_layout_virtual_size_set(oo, pd->pager->zone->w, pd->pager->zone->h);
|
|
|
|
edje_object_part_swallow(o, "e.swallow.content", oo);
|
2013-04-18 04:38:39 -07:00
|
|
|
e_popup_object_add(drag->pop, oo);
|
2012-06-25 03:48:42 -07:00
|
|
|
evas_object_show(oo);
|
|
|
|
|
|
|
|
EINA_LIST_FOREACH(pd->wins, l, pw)
|
|
|
|
{
|
|
|
|
int zx, zy;
|
|
|
|
|
|
|
|
if ((!pw) || (pw->border->iconic)
|
|
|
|
|| (pw->border->client.netwm.state.skip_pager))
|
|
|
|
continue;
|
|
|
|
|
|
|
|
o = edje_object_add(drag->evas);
|
|
|
|
e_theme_edje_object_set(o, "base/theme/modules/pager",
|
|
|
|
"e/modules/pager/window");
|
|
|
|
e_layout_pack(oo, o);
|
|
|
|
e_layout_child_raise(o);
|
|
|
|
e_zone_useful_geometry_get(pw->desk->desk->zone,
|
|
|
|
&zx, &zy, NULL, NULL);
|
|
|
|
e_layout_child_move(o, pw->border->x - zx, pw->border->y - zy);
|
|
|
|
e_layout_child_resize(o, pw->border->w, pw->border->h);
|
2013-04-18 04:38:39 -07:00
|
|
|
e_popup_object_add(drag->pop, o);
|
2012-06-25 03:48:42 -07:00
|
|
|
evas_object_show(o);
|
|
|
|
|
|
|
|
if ((o_icon = e_border_icon_add(pw->border, drag->evas)))
|
|
|
|
{
|
|
|
|
evas_object_show(o_icon);
|
|
|
|
edje_object_part_swallow(o, "e.swallow.icon", o_icon);
|
2013-02-25 23:27:44 -08:00
|
|
|
e_popup_object_add(drag->pop, o_icon);
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
e_drag_resize(drag, w, h);
|
|
|
|
e_drag_start(drag, x - pd->drag.dx, y - pd->drag.dy);
|
|
|
|
|
|
|
|
pd->drag.from_pager = pd->pager;
|
|
|
|
pd->drag.from_pager->dragging = 1;
|
|
|
|
pd->drag.in_pager = 0;
|
2007-07-15 01:28:11 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_pager_desk_cb_drag_finished(E_Drag *drag, int dropped)
|
|
|
|
{
|
|
|
|
Pager_Desk *pd;
|
2007-12-14 14:30:44 -08:00
|
|
|
Pager_Desk *pd2 = NULL;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2007-12-14 14:30:44 -08:00
|
|
|
E_Desk *desk;
|
|
|
|
E_Zone *zone;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager *p;
|
2007-07-15 01:28:11 -07:00
|
|
|
|
|
|
|
pd = drag->data;
|
|
|
|
if (!pd) return;
|
|
|
|
if (!dropped)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
/* wasn't dropped on pager, switch with current desktop */
|
|
|
|
if (!pd->desk) return;
|
|
|
|
zone = e_util_zone_current_get(e_manager_current_get());
|
|
|
|
desk = e_desk_current_get(zone);
|
2012-12-11 01:02:13 -08:00
|
|
|
EINA_LIST_FOREACH(pagers, l, p)
|
2012-06-25 03:48:42 -07:00
|
|
|
{
|
|
|
|
pd2 = _pager_desk_find(p, desk);
|
2012-12-11 01:02:13 -08:00
|
|
|
if (pd2) break;
|
2012-06-25 03:48:42 -07:00
|
|
|
}
|
|
|
|
_pager_desk_switch(pd, pd2);
|
2007-07-15 01:28:11 -07:00
|
|
|
}
|
|
|
|
if (pd->drag.from_pager)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
pd->drag.from_pager->dragging = 0;
|
|
|
|
pd->drag.from_pager->just_dragged = 0;
|
2007-07-15 01:28:11 -07:00
|
|
|
}
|
2013-05-30 01:42:29 -07:00
|
|
|
if (pd->pager->active_drop_pd)
|
|
|
|
{
|
|
|
|
edje_object_signal_emit(pd->pager->active_drop_pd->o_desk, "e,action,drag,out", "e");
|
|
|
|
pd->pager->active_drop_pd = NULL;
|
|
|
|
}
|
2007-07-15 01:28:11 -07:00
|
|
|
pd->drag.from_pager = NULL;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2009-04-28 08:29:56 -07:00
|
|
|
if (act_popup)
|
2008-01-06 17:30:02 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
e_grabinput_get(input_window, 0, input_window);
|
|
|
|
if (!hold_count) _pager_popup_hide(1);
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
2005-09-20 10:09:27 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_desk_cb_mouse_wheel(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
|
2005-09-20 10:09:27 -07:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
Evas_Event_Mouse_Wheel *ev;
|
|
|
|
Pager_Desk *pd;
|
2005-09-20 10:09:27 -07:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
ev = event_info;
|
|
|
|
pd = data;
|
2006-09-16 02:44:35 -07:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
if (pd->pager->popup) return;
|
2007-04-04 02:55:40 -07:00
|
|
|
|
2007-12-14 14:30:44 -08:00
|
|
|
if (pager_config->flip_desk)
|
2007-02-02 18:44:59 -08:00
|
|
|
e_zone_desk_linear_flip_by(pd->desk->zone, ev->z);
|
2006-04-20 04:30:25 -07:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2006-04-20 04:30:25 -07:00
|
|
|
_pager_popup_cb_timeout(void *data)
|
|
|
|
{
|
|
|
|
Pager_Popup *pp;
|
|
|
|
|
|
|
|
pp = data;
|
2010-07-12 07:02:15 -07:00
|
|
|
pp->timer = NULL;
|
2006-04-20 04:30:25 -07:00
|
|
|
_pager_popup_free(pp);
|
2010-05-16 17:41:28 -07:00
|
|
|
|
|
|
|
if (input_window)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
ecore_x_window_free(input_window);
|
|
|
|
e_grabinput_release(input_window, input_window);
|
|
|
|
input_window = 0;
|
2010-05-16 17:41:28 -07:00
|
|
|
}
|
2010-06-24 09:19:12 -07:00
|
|
|
|
|
|
|
return ECORE_CALLBACK_CANCEL;
|
2006-04-20 04:30:25 -07:00
|
|
|
}
|
2005-09-20 10:09:27 -07:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
/************************************************************************/
|
|
|
|
/* popup-on-keyaction functions */
|
|
|
|
static int
|
2012-05-18 06:02:20 -07:00
|
|
|
_pager_popup_show(void)
|
2008-01-06 17:30:02 -08:00
|
|
|
{
|
|
|
|
E_Zone *zone;
|
|
|
|
int x, y, w, h;
|
|
|
|
Pager_Popup *pp;
|
2012-06-25 03:48:42 -07:00
|
|
|
const char *drop[] =
|
|
|
|
{
|
|
|
|
"enlightenment/pager_win", "enlightenment/border",
|
|
|
|
"enlightenment/vdesktop"
|
|
|
|
};
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2010-06-29 08:19:48 -07:00
|
|
|
if ((act_popup) || (input_window)) return 0;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
|
|
|
zone = e_util_zone_current_get(e_manager_current_get());
|
|
|
|
|
|
|
|
pp = _pager_popup_find(zone);
|
|
|
|
if (pp) _pager_popup_free(pp);
|
|
|
|
|
|
|
|
input_window = ecore_x_window_input_new(zone->container->win, 0, 0, 1, 1);
|
|
|
|
ecore_x_window_show(input_window);
|
|
|
|
if (!e_grabinput_get(input_window, 0, input_window))
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
ecore_x_window_free(input_window);
|
|
|
|
input_window = 0;
|
|
|
|
return 0;
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2008-10-22 04:49:33 -07:00
|
|
|
handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(handlers, ecore_event_handler_add
|
|
|
|
(ECORE_EVENT_KEY_DOWN, _pager_popup_cb_key_down, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(handlers, ecore_event_handler_add
|
|
|
|
(ECORE_EVENT_KEY_UP, _pager_popup_cb_key_up, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(handlers, ecore_event_handler_add
|
|
|
|
(ECORE_EVENT_MOUSE_BUTTON_DOWN, _pager_popup_cb_mouse_down, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(handlers, ecore_event_handler_add
|
|
|
|
(ECORE_EVENT_MOUSE_BUTTON_UP, _pager_popup_cb_mouse_up, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(handlers, ecore_event_handler_add
|
|
|
|
(ECORE_EVENT_MOUSE_WHEEL, _pager_popup_cb_mouse_wheel, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(handlers, ecore_event_handler_add
|
|
|
|
(ECORE_EVENT_MOUSE_MOVE, _pager_popup_cb_mouse_move, NULL));
|
2008-01-06 17:30:02 -08:00
|
|
|
|
|
|
|
act_popup = _pager_popup_new(zone, 1);
|
|
|
|
|
|
|
|
e_popup_ignore_events_set(act_popup->popup, 1);
|
|
|
|
|
|
|
|
evas_object_geometry_get(act_popup->pager->o_table, &x, &y, &w, &h);
|
|
|
|
|
|
|
|
e_drop_handler_add(E_OBJECT(act_popup->popup), act_popup->pager,
|
2012-06-25 03:48:42 -07:00
|
|
|
_pager_drop_cb_enter, _pager_drop_cb_move,
|
|
|
|
_pager_drop_cb_leave, _pager_drop_cb_drop,
|
|
|
|
drop, 3, x, y, w, h);
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
current_desk = e_desk_current_get(zone);
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_pager_popup_hide(int switch_desk)
|
|
|
|
{
|
|
|
|
hold_count = 0;
|
|
|
|
hold_mod = 0;
|
|
|
|
while (handlers)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
ecore_event_handler_del(handlers->data);
|
|
|
|
handlers = eina_list_remove_list(handlers, handlers);
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
2010-05-16 17:41:28 -07:00
|
|
|
|
|
|
|
act_popup->timer = ecore_timer_add(0.1, _pager_popup_cb_timeout, act_popup);
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2010-06-29 08:19:48 -07:00
|
|
|
if ((switch_desk) && (current_desk)) e_desk_show(current_desk);
|
2010-05-16 17:41:28 -07:00
|
|
|
|
|
|
|
act_popup = NULL;
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_pager_popup_modifiers_set(int mod)
|
|
|
|
{
|
|
|
|
if (!act_popup) return;
|
|
|
|
hold_mod = mod;
|
|
|
|
hold_count = 0;
|
2009-03-16 09:24:43 -07:00
|
|
|
if (hold_mod & ECORE_EVENT_MODIFIER_SHIFT) hold_count++;
|
|
|
|
if (hold_mod & ECORE_EVENT_MODIFIER_CTRL) hold_count++;
|
|
|
|
if (hold_mod & ECORE_EVENT_MODIFIER_ALT) hold_count++;
|
|
|
|
if (hold_mod & ECORE_EVENT_MODIFIER_WIN) hold_count++;
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_pager_popup_desk_switch(int x, int y)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
int max_x, max_y, desk_x, desk_y;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager_Desk *pd;
|
|
|
|
Pager_Popup *pp = act_popup;
|
|
|
|
|
|
|
|
e_zone_desk_count_get(pp->pager->zone, &max_x, &max_y);
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
desk_x = current_desk->x + x;
|
|
|
|
desk_y = current_desk->y + y;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
|
|
|
if (desk_x < 0)
|
2008-01-08 08:26:14 -08:00
|
|
|
desk_x = max_x - 1;
|
|
|
|
else if (desk_x >= max_x)
|
2008-01-06 17:30:02 -08:00
|
|
|
desk_x = 0;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
if (desk_y < 0)
|
2008-01-08 08:26:14 -08:00
|
|
|
desk_y = max_y - 1;
|
|
|
|
else if (desk_y >= max_y)
|
2008-01-06 17:30:02 -08:00
|
|
|
desk_y = 0;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
current_desk = e_desk_at_xy_get(pp->pager->zone, desk_x, desk_y);
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
pd = _pager_desk_find(pp->pager, current_desk);
|
|
|
|
if (pd) _pager_desk_select(pd);
|
|
|
|
|
2008-01-13 12:15:22 -08:00
|
|
|
edje_object_part_text_set(pp->o_bg, "e.text.label", current_desk->name);
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
|
|
|
|
2008-01-06 18:31:52 -08:00
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_popup_cb_action_show(E_Object *obj __UNUSED__, const char *params __UNUSED__, Ecore_Event_Key *ev __UNUSED__)
|
2008-01-06 17:30:02 -08:00
|
|
|
{
|
|
|
|
if (_pager_popup_show())
|
|
|
|
_pager_popup_modifiers_set(ev->modifiers);
|
|
|
|
}
|
|
|
|
|
2008-01-06 18:31:52 -08:00
|
|
|
static void
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_popup_cb_action_switch(E_Object *obj __UNUSED__, const char *params, Ecore_Event_Key *ev)
|
2008-01-06 17:30:02 -08:00
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
int max_x, max_y, desk_x;
|
2010-06-29 08:19:48 -07:00
|
|
|
int x = 0, y = 0;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
if (!act_popup)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if (_pager_popup_show())
|
|
|
|
_pager_popup_modifiers_set(ev->modifiers);
|
|
|
|
else
|
|
|
|
return;
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
2010-05-01 11:22:28 -07:00
|
|
|
|
|
|
|
e_zone_desk_count_get(act_popup->pager->zone, &max_x, &max_y);
|
2010-12-22 14:41:26 -08:00
|
|
|
desk_x = current_desk->x /* + x <=this is always 0 */;
|
2010-05-01 11:22:28 -07:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
if (!strcmp(params, "left"))
|
|
|
|
x = -1;
|
|
|
|
else if (!strcmp(params, "right"))
|
|
|
|
x = 1;
|
|
|
|
else if (!strcmp(params, "up"))
|
|
|
|
y = -1;
|
|
|
|
else if (!strcmp(params, "down"))
|
|
|
|
y = 1;
|
2010-05-01 11:22:28 -07:00
|
|
|
else if (!strcmp(params, "next"))
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
x = 1;
|
|
|
|
if (desk_x == max_x - 1)
|
|
|
|
y = 1;
|
2010-05-01 11:22:28 -07:00
|
|
|
}
|
|
|
|
else if (!strcmp(params, "prev"))
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
x = -1;
|
|
|
|
if (desk_x == 0)
|
|
|
|
y = -1;
|
2010-05-01 11:22:28 -07:00
|
|
|
}
|
2012-06-25 03:48:42 -07:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
_pager_popup_desk_switch(x, y);
|
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_popup_cb_mouse_down(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2008-01-06 17:30:02 -08:00
|
|
|
{
|
2009-03-16 09:24:43 -07:00
|
|
|
Ecore_Event_Mouse_Button *ev;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager_Popup *pp = act_popup;
|
|
|
|
|
|
|
|
ev = event;
|
2010-06-24 09:19:12 -07:00
|
|
|
if (ev->window != input_window) return ECORE_CALLBACK_PASS_ON;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2009-03-16 09:24:43 -07:00
|
|
|
evas_event_feed_mouse_down(pp->popup->evas, ev->buttons,
|
2012-06-25 03:48:42 -07:00
|
|
|
0, ev->timestamp, NULL);
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_popup_cb_mouse_up(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2008-01-06 17:30:02 -08:00
|
|
|
{
|
2009-03-16 09:24:43 -07:00
|
|
|
Ecore_Event_Mouse_Button *ev;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager_Popup *pp = act_popup;
|
|
|
|
|
|
|
|
ev = event;
|
2010-06-24 09:19:12 -07:00
|
|
|
if (ev->window != input_window) return ECORE_CALLBACK_PASS_ON;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2009-03-16 09:24:43 -07:00
|
|
|
evas_event_feed_mouse_up(pp->popup->evas, ev->buttons,
|
2012-06-25 03:48:42 -07:00
|
|
|
0, ev->timestamp, NULL);
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_popup_cb_mouse_move(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2008-01-06 17:30:02 -08:00
|
|
|
{
|
2009-03-16 09:24:43 -07:00
|
|
|
Ecore_Event_Mouse_Move *ev;
|
2008-01-06 17:30:02 -08:00
|
|
|
Pager_Popup *pp = act_popup;
|
|
|
|
|
|
|
|
ev = event;
|
2009-03-16 09:24:43 -07:00
|
|
|
if (ev->window != input_window) return 1;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2008-01-06 18:31:52 -08:00
|
|
|
evas_event_feed_mouse_move(pp->popup->evas,
|
2012-06-25 03:48:42 -07:00
|
|
|
ev->x - pp->popup->x + pp->pager->zone->x,
|
|
|
|
ev->y - pp->popup->y + pp->pager->zone->y,
|
|
|
|
ev->timestamp, NULL);
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_popup_cb_mouse_wheel(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2008-01-07 16:30:21 -08:00
|
|
|
{
|
2009-03-16 09:24:43 -07:00
|
|
|
Ecore_Event_Mouse_Wheel *ev = event;
|
2008-01-07 16:30:21 -08:00
|
|
|
Pager_Popup *pp = act_popup;
|
2008-01-07 16:52:37 -08:00
|
|
|
int max_x;
|
2012-06-25 03:48:42 -07:00
|
|
|
|
2008-01-07 16:52:37 -08:00
|
|
|
e_zone_desk_count_get(pp->pager->zone, &max_x, NULL);
|
2008-01-07 16:30:21 -08:00
|
|
|
|
2008-01-07 22:01:24 -08:00
|
|
|
if (current_desk->x + ev->z >= max_x)
|
2008-01-07 16:45:12 -08:00
|
|
|
_pager_popup_desk_switch(1, 1);
|
2008-01-07 16:30:21 -08:00
|
|
|
else if (current_desk->x + ev->z < 0)
|
2008-01-07 16:45:12 -08:00
|
|
|
_pager_popup_desk_switch(-1, -1);
|
2008-01-07 16:30:21 -08:00
|
|
|
else
|
2008-01-07 16:45:12 -08:00
|
|
|
_pager_popup_desk_switch(ev->z, 0);
|
2008-01-07 16:30:21 -08:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2008-01-07 16:30:21 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_popup_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2008-01-06 17:30:02 -08:00
|
|
|
{
|
2009-03-16 09:24:43 -07:00
|
|
|
Ecore_Event_Key *ev;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
ev = event;
|
2010-06-24 09:19:12 -07:00
|
|
|
if (ev->window != input_window) return ECORE_CALLBACK_PASS_ON;
|
2009-04-28 08:29:56 -07:00
|
|
|
if (!strcmp(ev->key, "Up"))
|
2008-01-06 17:30:02 -08:00
|
|
|
_pager_popup_desk_switch(0, -1);
|
2009-03-16 09:24:43 -07:00
|
|
|
else if (!strcmp(ev->key, "Down"))
|
2008-01-06 17:30:02 -08:00
|
|
|
_pager_popup_desk_switch(0, 1);
|
2009-03-16 09:24:43 -07:00
|
|
|
else if (!strcmp(ev->key, "Left"))
|
2008-01-06 17:30:02 -08:00
|
|
|
_pager_popup_desk_switch(-1, 0);
|
2009-03-16 09:24:43 -07:00
|
|
|
else if (!strcmp(ev->key, "Right"))
|
2008-01-06 17:30:02 -08:00
|
|
|
_pager_popup_desk_switch(1, 0);
|
2009-03-16 09:24:43 -07:00
|
|
|
else if (!strcmp(ev->key, "Escape"))
|
2008-01-06 17:30:02 -08:00
|
|
|
_pager_popup_hide(0);
|
|
|
|
else
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
E_Config_Binding_Key *binding;
|
|
|
|
Eina_List *l;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2013-02-01 02:21:54 -08:00
|
|
|
EINA_LIST_FOREACH(e_bindings->key_bindings, l, binding)
|
2012-06-25 03:48:42 -07:00
|
|
|
{
|
|
|
|
E_Binding_Modifier mod = 0;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if ((binding->action) && (strcmp(binding->action, "pager_switch")))
|
2009-04-28 08:29:56 -07:00
|
|
|
continue;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT)
|
2009-04-28 08:29:56 -07:00
|
|
|
mod |= E_BINDING_MODIFIER_SHIFT;
|
2012-06-25 03:48:42 -07:00
|
|
|
if (ev->modifiers & ECORE_EVENT_MODIFIER_CTRL)
|
2009-04-28 08:29:56 -07:00
|
|
|
mod |= E_BINDING_MODIFIER_CTRL;
|
2012-06-25 03:48:42 -07:00
|
|
|
if (ev->modifiers & ECORE_EVENT_MODIFIER_ALT)
|
2009-04-28 08:29:56 -07:00
|
|
|
mod |= E_BINDING_MODIFIER_ALT;
|
2012-06-25 03:48:42 -07:00
|
|
|
if (ev->modifiers & ECORE_EVENT_MODIFIER_WIN)
|
2009-04-28 08:29:56 -07:00
|
|
|
mod |= E_BINDING_MODIFIER_WIN;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (binding->key && (!strcmp(binding->key, ev->keyname)) &&
|
2012-05-04 02:38:52 -07:00
|
|
|
((binding->modifiers == mod)))
|
2012-06-25 03:48:42 -07:00
|
|
|
{
|
|
|
|
E_Action *act;
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
act = e_action_find(binding->action);
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2012-06-25 03:48:42 -07:00
|
|
|
if (act)
|
|
|
|
{
|
|
|
|
if (act->func.go_key)
|
|
|
|
act->func.go_key(NULL, binding->params, ev);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2008-01-06 18:31:52 -08:00
|
|
|
}
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
static Eina_Bool
|
2010-06-29 08:19:48 -07:00
|
|
|
_pager_popup_cb_key_up(void *data __UNUSED__, int type __UNUSED__, void *event)
|
2008-01-06 17:30:02 -08:00
|
|
|
{
|
2009-03-16 09:24:43 -07:00
|
|
|
Ecore_Event_Key *ev;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
|
|
|
ev = event;
|
2010-06-24 09:19:12 -07:00
|
|
|
if (!(act_popup)) return ECORE_CALLBACK_PASS_ON;
|
2008-01-06 17:30:02 -08:00
|
|
|
|
|
|
|
if (hold_mod)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
if ((hold_mod & ECORE_EVENT_MODIFIER_SHIFT) &&
|
2009-04-28 08:29:56 -07:00
|
|
|
(!strcmp(ev->key, "Shift_L"))) hold_count--;
|
2012-06-25 03:48:42 -07:00
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_SHIFT) &&
|
|
|
|
(!strcmp(ev->key, "Shift_R")))
|
|
|
|
hold_count--;
|
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_CTRL) &&
|
|
|
|
(!strcmp(ev->key, "Control_L")))
|
|
|
|
hold_count--;
|
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_CTRL) &&
|
|
|
|
(!strcmp(ev->key, "Control_R")))
|
|
|
|
hold_count--;
|
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) &&
|
|
|
|
(!strcmp(ev->key, "Alt_L")))
|
|
|
|
hold_count--;
|
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) &&
|
|
|
|
(!strcmp(ev->key, "Alt_R")))
|
|
|
|
hold_count--;
|
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) &&
|
|
|
|
(!strcmp(ev->key, "Meta_L")))
|
|
|
|
hold_count--;
|
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) &&
|
|
|
|
(!strcmp(ev->key, "Meta_R")))
|
|
|
|
hold_count--;
|
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) &&
|
|
|
|
(!strcmp(ev->key, "Super_L")))
|
|
|
|
hold_count--;
|
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) &&
|
|
|
|
(!strcmp(ev->key, "Super_R")))
|
|
|
|
hold_count--;
|
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) &&
|
|
|
|
(!strcmp(ev->key, "Super_L")))
|
|
|
|
hold_count--;
|
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) &&
|
|
|
|
(!strcmp(ev->key, "Super_R")))
|
|
|
|
hold_count--;
|
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) &&
|
|
|
|
(!strcmp(ev->key, "Mode_switch")))
|
|
|
|
hold_count--;
|
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) &&
|
|
|
|
(!strcmp(ev->key, "Meta_L")))
|
|
|
|
hold_count--;
|
|
|
|
else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) &&
|
|
|
|
(!strcmp(ev->key, "Meta_R")))
|
|
|
|
hold_count--;
|
|
|
|
if ((hold_count <= 0) && (!act_popup->pager->dragging))
|
|
|
|
{
|
|
|
|
_pager_popup_hide(1);
|
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
|
|
|
}
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2010-06-24 09:19:12 -07:00
|
|
|
return ECORE_CALLBACK_PASS_ON;
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
/***************************************************************************/
|
|
|
|
/* module setup */
|
|
|
|
EAPI E_Module_Api e_modapi =
|
|
|
|
{
|
2009-04-28 08:29:56 -07:00
|
|
|
E_MODULE_API_VERSION, "Pager"
|
2006-04-20 04:30:25 -07:00
|
|
|
};
|
2005-09-20 10:09:27 -07:00
|
|
|
|
2006-06-06 08:33:44 -07:00
|
|
|
EAPI void *
|
2006-05-09 06:02:48 -07:00
|
|
|
e_modapi_init(E_Module *m)
|
2006-04-20 04:30:25 -07:00
|
|
|
{
|
|
|
|
conf_edd = E_CONFIG_DD_NEW("Pager_Config", Config);
|
|
|
|
#undef T
|
|
|
|
#undef D
|
|
|
|
#define T Config
|
|
|
|
#define D conf_edd
|
|
|
|
E_CONFIG_VAL(D, T, popup, UINT);
|
2007-04-04 02:55:40 -07:00
|
|
|
E_CONFIG_VAL(D, T, popup_speed, DOUBLE);
|
|
|
|
E_CONFIG_VAL(D, T, popup_urgent, UINT);
|
|
|
|
E_CONFIG_VAL(D, T, popup_urgent_stick, UINT);
|
|
|
|
E_CONFIG_VAL(D, T, popup_urgent_speed, DOUBLE);
|
2008-01-10 23:33:57 -08:00
|
|
|
E_CONFIG_VAL(D, T, show_desk_names, UINT);
|
2008-01-06 17:30:02 -08:00
|
|
|
E_CONFIG_VAL(D, T, popup_height, INT);
|
|
|
|
E_CONFIG_VAL(D, T, popup_act_height, INT);
|
2006-04-20 04:30:25 -07:00
|
|
|
E_CONFIG_VAL(D, T, drag_resist, UINT);
|
2006-11-19 00:58:05 -08:00
|
|
|
E_CONFIG_VAL(D, T, btn_drag, UCHAR);
|
|
|
|
E_CONFIG_VAL(D, T, btn_noplace, UCHAR);
|
2007-07-15 01:28:11 -07:00
|
|
|
E_CONFIG_VAL(D, T, btn_desk, UCHAR);
|
2007-06-09 21:34:23 -07:00
|
|
|
E_CONFIG_VAL(D, T, flip_desk, UCHAR);
|
2012-07-11 10:38:08 -07:00
|
|
|
E_CONFIG_VAL(D, T, disable_live_preview, UCHAR);
|
2005-09-20 10:09:27 -07:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
pager_config = e_config_domain_load("module.pager", conf_edd);
|
2005-09-20 10:09:27 -07:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
if (!pager_config)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
pager_config = E_NEW(Config, 1);
|
|
|
|
pager_config->popup = 1;
|
|
|
|
pager_config->popup_speed = 1.0;
|
|
|
|
pager_config->popup_urgent = 0;
|
|
|
|
pager_config->popup_urgent_stick = 0;
|
|
|
|
pager_config->popup_urgent_speed = 1.5;
|
2012-07-14 04:10:56 -07:00
|
|
|
pager_config->show_desk_names = 0;
|
2012-06-25 03:48:42 -07:00
|
|
|
pager_config->popup_height = 60;
|
|
|
|
pager_config->popup_act_height = 60;
|
|
|
|
pager_config->drag_resist = 3;
|
|
|
|
pager_config->btn_drag = 1;
|
|
|
|
pager_config->btn_noplace = 2;
|
2012-07-14 04:10:56 -07:00
|
|
|
pager_config->btn_desk = 2;
|
2012-06-25 03:48:42 -07:00
|
|
|
pager_config->flip_desk = 0;
|
2012-07-14 04:10:56 -07:00
|
|
|
pager_config->disable_live_preview = 1;
|
2005-09-20 10:09:27 -07:00
|
|
|
}
|
2006-04-20 04:30:25 -07:00
|
|
|
E_CONFIG_LIMIT(pager_config->popup, 0, 1);
|
2007-04-04 02:55:40 -07:00
|
|
|
E_CONFIG_LIMIT(pager_config->popup_speed, 0.1, 10.0);
|
|
|
|
E_CONFIG_LIMIT(pager_config->popup_urgent, 0, 1);
|
|
|
|
E_CONFIG_LIMIT(pager_config->popup_urgent_stick, 0, 1);
|
|
|
|
E_CONFIG_LIMIT(pager_config->popup_urgent_speed, 0.1, 10.0);
|
2008-01-10 23:33:57 -08:00
|
|
|
E_CONFIG_LIMIT(pager_config->show_desk_names, 0, 1);
|
2008-01-06 17:30:02 -08:00
|
|
|
E_CONFIG_LIMIT(pager_config->popup_height, 20, 200);
|
|
|
|
E_CONFIG_LIMIT(pager_config->popup_act_height, 20, 200);
|
2006-04-20 04:30:25 -07:00
|
|
|
E_CONFIG_LIMIT(pager_config->drag_resist, 0, 50);
|
2006-11-19 00:58:05 -08:00
|
|
|
E_CONFIG_LIMIT(pager_config->flip_desk, 0, 1);
|
2007-04-19 09:57:47 -07:00
|
|
|
E_CONFIG_LIMIT(pager_config->btn_drag, 0, 32);
|
|
|
|
E_CONFIG_LIMIT(pager_config->btn_noplace, 0, 32);
|
2007-07-15 01:28:11 -07:00
|
|
|
E_CONFIG_LIMIT(pager_config->btn_desk, 0, 32);
|
2012-07-11 10:38:08 -07:00
|
|
|
E_CONFIG_LIMIT(pager_config->disable_live_preview, 0, 1);
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_RESIZE, _pager_cb_event_border_resize, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_MOVE, _pager_cb_event_border_move, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_ADD, _pager_cb_event_border_add, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_REMOVE, _pager_cb_event_border_remove, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_ICONIFY, _pager_cb_event_border_iconify, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_UNICONIFY, _pager_cb_event_border_uniconify, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_STICK, _pager_cb_event_border_stick, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_UNSTICK, _pager_cb_event_border_unstick, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_DESK_SET, _pager_cb_event_border_desk_set, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_STACK, _pager_cb_event_border_stack, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_ICON_CHANGE, _pager_cb_event_border_icon_change, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_URGENT_CHANGE, _pager_cb_event_border_urgent_change, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_FOCUS_IN,
|
|
|
|
_pager_cb_event_border_focus_in, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_FOCUS_OUT,
|
|
|
|
_pager_cb_event_border_focus_out, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BORDER_PROPERTY, _pager_cb_event_border_property, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_ZONE_DESK_COUNT_SET, _pager_cb_event_zone_desk_count_set, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_DESK_SHOW, _pager_cb_event_desk_show, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_DESK_NAME_CHANGE, _pager_cb_event_desk_name_change, NULL));
|
2008-10-22 04:49:33 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
2012-06-25 03:48:42 -07:00
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_CONTAINER_RESIZE, _pager_cb_event_container_resize, NULL));
|
2012-08-03 10:21:31 -07:00
|
|
|
pager_config->handlers = eina_list_append
|
|
|
|
(pager_config->handlers, ecore_event_handler_add
|
|
|
|
(E_EVENT_BG_UPDATE, _pager_cb_event_bg_update, NULL));
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2006-05-09 06:02:48 -07:00
|
|
|
pager_config->module = m;
|
2006-05-31 09:19:11 -07:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
e_gadcon_provider_register(&_gadcon_class);
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2012-12-16 00:57:55 -08:00
|
|
|
e_configure_registry_item_add("extensions/pager", 40, _("Pager"), NULL,
|
2012-06-25 03:48:42 -07:00
|
|
|
"preferences-pager", _pager_config_dialog);
|
2008-01-06 18:31:52 -08:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
act_popup_show = e_action_add("pager_show");
|
|
|
|
if (act_popup_show)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
act_popup_show->func.go_key = _pager_popup_cb_action_show;
|
|
|
|
e_action_predef_name_set(N_("Pager"), N_("Show Pager Popup"),
|
2009-04-28 08:29:56 -07:00
|
|
|
"pager_show", "<none>", NULL, 0);
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
|
|
|
act_popup_switch = e_action_add("pager_switch");
|
|
|
|
if (act_popup_switch)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
act_popup_switch->func.go_key = _pager_popup_cb_action_switch;
|
|
|
|
e_action_predef_name_set(N_("Pager"), N_("Popup Desk Right"),
|
2009-04-28 08:29:56 -07:00
|
|
|
"pager_switch", "right", NULL, 0);
|
2012-06-25 03:48:42 -07:00
|
|
|
e_action_predef_name_set(N_("Pager"), N_("Popup Desk Left"),
|
|
|
|
"pager_switch", "left", NULL, 0);
|
|
|
|
e_action_predef_name_set(N_("Pager"), N_("Popup Desk Up"),
|
|
|
|
"pager_switch", "up", NULL, 0);
|
|
|
|
e_action_predef_name_set(N_("Pager"), N_("Popup Desk Down"),
|
|
|
|
"pager_switch", "down", NULL, 0);
|
|
|
|
e_action_predef_name_set(N_("Pager"), N_("Popup Desk Next"),
|
|
|
|
"pager_switch", "next", NULL, 0);
|
|
|
|
e_action_predef_name_set(N_("Pager"), N_("Popup Desk Previous"),
|
|
|
|
"pager_switch", "prev", NULL, 0);
|
2008-01-06 17:30:02 -08:00
|
|
|
}
|
2012-08-10 06:29:35 -07:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
return m;
|
2005-09-20 10:09:27 -07:00
|
|
|
}
|
2005-12-16 12:57:24 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
EAPI int
|
2010-08-19 08:20:05 -07:00
|
|
|
e_modapi_shutdown(E_Module *m __UNUSED__)
|
2005-12-16 12:57:24 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
e_gadcon_provider_unregister(&_gadcon_class);
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
if (pager_config->config_dialog)
|
|
|
|
e_object_del(E_OBJECT(pager_config->config_dialog));
|
|
|
|
while (pager_config->handlers)
|
|
|
|
{
|
2012-06-25 03:48:42 -07:00
|
|
|
ecore_event_handler_del(pager_config->handlers->data);
|
|
|
|
pager_config->handlers =
|
2009-04-28 08:29:56 -07:00
|
|
|
eina_list_remove_list(pager_config->handlers, pager_config->handlers);
|
2006-04-20 04:30:25 -07:00
|
|
|
}
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2008-01-06 18:31:52 -08:00
|
|
|
e_configure_registry_item_del("extensions/pager");
|
2007-12-14 14:30:44 -08:00
|
|
|
|
2008-01-06 17:30:02 -08:00
|
|
|
e_action_del("pager_show");
|
|
|
|
e_action_del("pager_switch");
|
|
|
|
|
2012-12-16 08:58:17 -08:00
|
|
|
e_action_predef_name_del("Pager", "Popup Desk Right");
|
|
|
|
e_action_predef_name_del("Pager", "Popup Desk Left");
|
|
|
|
e_action_predef_name_del("Pager", "Popup Desk Up");
|
|
|
|
e_action_predef_name_del("Pager", "Popup Desk Down");
|
|
|
|
e_action_predef_name_del("Pager", "Popup Desk Next");
|
|
|
|
e_action_predef_name_del("Pager", "Popup Desk Previous");
|
2008-01-06 17:30:02 -08:00
|
|
|
|
2007-02-02 18:44:59 -08:00
|
|
|
E_FREE(pager_config);
|
2006-04-20 04:30:25 -07:00
|
|
|
E_CONFIG_DD_FREE(conf_edd);
|
|
|
|
return 1;
|
2005-12-16 12:57:24 -08:00
|
|
|
}
|
|
|
|
|
2006-04-20 04:30:25 -07:00
|
|
|
EAPI int
|
2010-08-19 08:20:05 -07:00
|
|
|
e_modapi_save(E_Module *m __UNUSED__)
|
2005-12-16 12:57:24 -08:00
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
e_config_domain_save("module.pager", conf_edd, pager_config);
|
|
|
|
return 1;
|
|
|
|
}
|
2012-06-25 03:48:42 -07:00
|
|
|
|