elfe: Change how to add widgets on desktop
longpress on a gadget item to drag it on desktop SVN revision: 57603
This commit is contained in:
parent
46e503affd
commit
6afc6e31ec
|
@ -1,2 +1,2 @@
|
|||
#!/bin/sh
|
||||
x-ui.sh --profile=illume-home --screen=480x800 --dpi=250
|
||||
x-ui.sh --profile=illume-home --screen=480x800 --dpi=140
|
|
@ -19,6 +19,8 @@ module_la_SOURCES = main.h \
|
|||
desktop_page.h \
|
||||
desktop_item.c \
|
||||
desktop_item.h \
|
||||
gadget_list.c \
|
||||
gadget_list.h \
|
||||
utils.c \
|
||||
utils.h \
|
||||
winlist.c \
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "utils.h"
|
||||
#include "elfe_config.h"
|
||||
#include "desktop.h"
|
||||
#include "gadget_list.h"
|
||||
|
||||
typedef struct _Elfe_Allapps Elfe_Allapps;
|
||||
typedef struct _Elfe_Grid_Item Elfe_Grid_Item;
|
||||
|
@ -88,6 +89,17 @@ _gl_longpress(void *data, Evas_Object *obj, void *event_info)
|
|||
"entry,longpressed", gitem->menu);
|
||||
}
|
||||
|
||||
static void
|
||||
_widget_longpress(void *data, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
const char *name = event_info;
|
||||
Elfe_Allapps *allapps = data;
|
||||
|
||||
printf("Send widget longpressed\n");
|
||||
evas_object_smart_callback_call(allapps->box,
|
||||
"gadget,longpressed", (void*)name);
|
||||
}
|
||||
|
||||
static void
|
||||
_item_selected(void *data, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
|
@ -326,7 +338,8 @@ elfe_allapps_add(Evas_Object *parent)
|
|||
evas_object_show(allapps->grid);
|
||||
|
||||
|
||||
allapps->widgets_list = elfe_desktop_gadget_list(allapps->pager);
|
||||
allapps->widgets_list = elfe_gadget_list_add(allapps->pager);
|
||||
evas_object_smart_callback_add(allapps->widgets_list, "list,longpressed", _widget_longpress, allapps);
|
||||
evas_object_show(allapps->widgets_list);
|
||||
|
||||
evas_object_show(allapps->box);
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "desktop_page.h"
|
||||
#include "elfe_config.h"
|
||||
#include "utils.h"
|
||||
|
||||
#define ELFE_DESKTOP_NUM 5
|
||||
#define ELFE_DESKTOP_PADDING_W 10
|
||||
|
@ -196,35 +197,23 @@ _gadget_selected_cb(void *data , Evas_Object *obj, void *event_info )
|
|||
|
||||
void
|
||||
elfe_desktop_app_add(Evas_Object *obj, Efreet_Menu *menu, Evas_Coord x, Evas_Coord y)
|
||||
{
|
||||
{
|
||||
Elfe_Desktop *desk = evas_object_data_get(obj, "elfe_desktop");
|
||||
Evas_Object *gad;
|
||||
gad = eina_list_nth(desk->gadgets, desk->current_desktop);
|
||||
elfe_desktop_page_item_app_add(gad, menu, x, y);
|
||||
}
|
||||
|
||||
Evas_Object *
|
||||
elfe_desktop_gadget_list(Evas_Object *obj)
|
||||
void
|
||||
elfe_desktop_gadget_add(Evas_Object *obj, const char *name, Evas_Coord x, Evas_Coord y)
|
||||
{
|
||||
Elfe_Desktop *desk = evas_object_data_get(obj, "elfe_desktop");
|
||||
Evas_Object *list;
|
||||
E_Gadcon_Client_Class *gcc = NULL;
|
||||
Eina_List *l;
|
||||
Evas_Object *icon = NULL, *end;
|
||||
const char *lbl = NULL;
|
||||
|
||||
list = elm_list_add(obj);
|
||||
EINA_LIST_FOREACH(e_gadcon_provider_list(), l, gcc)
|
||||
{
|
||||
if (gcc->func.label) lbl = gcc->func.label(gcc);
|
||||
if (!lbl) lbl = gcc->name;
|
||||
if (gcc->func.icon) icon = gcc->func.icon(gcc, evas_object_evas_get(obj));
|
||||
evas_object_size_hint_min_set(icon, 48, 48);
|
||||
elm_list_item_append(list, lbl, icon, NULL, _gadget_selected_cb, gcc);
|
||||
}
|
||||
return list;
|
||||
Elfe_Desktop *desk = evas_object_data_get(obj, "elfe_desktop");
|
||||
Evas_Object *gad;
|
||||
gad = eina_list_nth(desk->gadgets, desk->current_desktop);
|
||||
elfe_desktop_page_item_gadget_add(gad, name, x, y);
|
||||
}
|
||||
|
||||
|
||||
Evas_Object *
|
||||
elfe_desktop_add(Evas_Object *parent, E_Zone *zone)
|
||||
{
|
||||
|
|
|
@ -4,6 +4,5 @@
|
|||
#include <Elementary.h>
|
||||
|
||||
Evas_Object *elfe_desktop_add(Evas_Object *parent, E_Zone *zone);
|
||||
Evas_Object *elfe_desktop_gadget_list(Evas_Object *obj);
|
||||
|
||||
#endif /* _DESKTOP_H_ */
|
||||
|
|
|
@ -193,7 +193,7 @@ elfe_desktop_page_pos_is_free(Evas_Object *obj, int col, int row)
|
|||
}
|
||||
|
||||
void
|
||||
elfe_desktop_page_item_gadget_add(Evas_Object *obj, E_Gadcon_Client_Class *gcc,
|
||||
elfe_desktop_page_item_gadget_add(Evas_Object *obj, const char *name,
|
||||
Evas_Coord x, Evas_Coord y)
|
||||
{
|
||||
Elfe_Desktop_Page *page = evas_object_data_get(obj, "desktop_page");
|
||||
|
@ -207,7 +207,7 @@ elfe_desktop_page_item_gadget_add(Evas_Object *obj, E_Gadcon_Client_Class *gcc,
|
|||
if (eina_matrixsparse_data_idx_get(page->items, col, row)) return;
|
||||
|
||||
item = elfe_desktop_item_add(page->layout, col, row,
|
||||
gcc->name,
|
||||
name,
|
||||
ELFE_DESKTOP_ITEM_GADGET, page->gc);
|
||||
e_layout_pack(page->layout, item);
|
||||
_pos_to_geom(page, col, row, &ox, &oy, &ow, &oh);
|
||||
|
@ -220,7 +220,7 @@ elfe_desktop_page_item_gadget_add(Evas_Object *obj, E_Gadcon_Client_Class *gcc,
|
|||
ELFE_DESKTOP_ITEM_GADGET,
|
||||
col, row,
|
||||
0, 0, 0, 0,
|
||||
gcc->name);
|
||||
name);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
#include <e.h>
|
||||
#include <Elementary.h>
|
||||
|
||||
#include "elfe_config.h"
|
||||
#include "utils.h"
|
||||
|
||||
static void
|
||||
_list_longpress(void *data, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Evas_Object *ic;
|
||||
E_Gadcon_Client_Class *gcc = NULL;
|
||||
const char *name;
|
||||
Elm_List_Item *it = event_info;
|
||||
|
||||
printf("List longpressed\n");
|
||||
|
||||
name = elm_list_item_data_get(it);
|
||||
|
||||
evas_object_smart_callback_call(data,
|
||||
"list,longpressed", name);
|
||||
}
|
||||
|
||||
Evas_Object *
|
||||
elfe_gadget_list_add(Evas_Object *obj)
|
||||
{
|
||||
Evas_Object *list;
|
||||
E_Gadcon_Client_Class *gcc = NULL;
|
||||
Eina_List *l;
|
||||
Evas_Object *icon = NULL, *end;
|
||||
const char *lbl = NULL;
|
||||
|
||||
list = elm_list_add(obj);
|
||||
evas_object_smart_callback_add(list, "longpressed", _list_longpress, list);
|
||||
EINA_LIST_FOREACH(e_gadcon_provider_list(), l, gcc)
|
||||
{
|
||||
if (gcc->func.label) lbl = gcc->func.label(gcc);
|
||||
if (!lbl) lbl = gcc->name;
|
||||
if (gcc->func.icon) icon = gcc->func.icon(gcc, evas_object_evas_get(obj));
|
||||
evas_object_size_hint_min_set(icon, 48, 48);
|
||||
elm_list_item_append(list, lbl, icon, NULL, NULL, gcc->name);
|
||||
}
|
||||
return list;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
#ifndef _GADGET_LIST_H_
|
||||
#define _GADGET_LIST_H_
|
||||
|
||||
Evas_Object *elfe_gadget_list_add(Evas_Object *obj);
|
||||
|
||||
#endif /* _GADGET_LIST_H_ */
|
|
@ -1,8 +1,6 @@
|
|||
#ifndef _GADGETS_H_
|
||||
#define _GADGETS_H_
|
||||
#ifndef _GADGET_LIST_H_
|
||||
#define _GADGET_LIST_H_
|
||||
|
||||
#include <Elementary.h>
|
||||
Evas_Object *elfe_gadget_list_add(Evas_Object *obj);
|
||||
|
||||
Evas_Object *elfe_gadgets_zone_add(Evas_Object *parent, E_Zone *zone, int desktop, const char *desktop_name);
|
||||
void elfe_gadgets_gadget_add(Evas_Object *obj, E_Gadcon_Client_Class *gcc);
|
||||
#endif /* _GADGETS_H_ */
|
||||
#endif /* _GADGET_LIST_H_ */
|
||||
|
|
92
src/main.c
92
src/main.c
|
@ -5,6 +5,7 @@
|
|||
#include "desktop.h"
|
||||
#include "winlist.h"
|
||||
#include "utils.h"
|
||||
#include "gadget_list.h"
|
||||
|
||||
#define ELFE_HOME_WIN_TYPE 0xE0b0102f
|
||||
|
||||
|
@ -25,6 +26,7 @@ struct _Elfe_Home_Win
|
|||
Evas_Object *floating_icon;
|
||||
E_Zone *zone;
|
||||
Efreet_Menu *selected_app;
|
||||
const char *selected_gadget;
|
||||
};
|
||||
|
||||
typedef enum
|
||||
|
@ -157,23 +159,26 @@ _icon_mouse_move_cb(void *data,Evas *evas, Evas_Object *obj, void *event_info)
|
|||
|
||||
static void
|
||||
_icon_mouse_up_cb(void *data,Evas *evas, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
{
|
||||
|
||||
Elfe_Home_Win *hwin = data;
|
||||
Evas_Event_Mouse_Up *ev = event_info;
|
||||
|
||||
|
||||
evas_object_del(hwin->floating_icon);
|
||||
evas_object_event_callback_del(hwin->desktop, EVAS_CALLBACK_MOUSE_MOVE, _icon_mouse_move_cb);
|
||||
evas_object_event_callback_del(hwin->desktop, EVAS_CALLBACK_MOUSE_UP, _icon_mouse_up_cb);
|
||||
elfe_desktop_edit_mode_set(hwin->desktop, EINA_FALSE);
|
||||
|
||||
elfe_desktop_app_add(hwin->desktop, hwin->selected_app, ev->output.x, ev->output.y);
|
||||
if (hwin->selected_app)
|
||||
elfe_desktop_app_add(hwin->desktop, hwin->selected_app, ev->output.x, ev->output.y);
|
||||
else if (hwin->selected_gadget)
|
||||
elfe_desktop_gadget_add(hwin->desktop, hwin->selected_gadget, ev->output.x, ev->output.y);
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
_allapps_longpressed_cb(void *data , Evas_Object *obj, void *event_info)
|
||||
_app_longpressed_cb(void *data , Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Elfe_Home_Win *hwin = data;
|
||||
Efreet_Menu *entry = event_info;
|
||||
|
@ -191,7 +196,7 @@ _allapps_longpressed_cb(void *data , Evas_Object *obj, void *event_info)
|
|||
|
||||
o_edje = elm_layout_edje_get(hwin->layout);
|
||||
edje_object_signal_emit(o_edje, "appslist,toggle", "elfe");
|
||||
|
||||
|
||||
ic = elfe_utils_fdo_icon_add(o_edje, entry->icon, size);
|
||||
evas_object_show(ic);
|
||||
evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y);
|
||||
|
@ -209,6 +214,55 @@ _allapps_longpressed_cb(void *data , Evas_Object *obj, void *event_info)
|
|||
evas_object_event_callback_add(hwin->desktop, EVAS_CALLBACK_MOUSE_UP, _icon_mouse_up_cb, hwin);
|
||||
}
|
||||
|
||||
static void
|
||||
_gadget_longpressed_cb(void *data , Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Elfe_Home_Win *hwin = data;
|
||||
const char *name = event_info;
|
||||
Evas_Coord x, y;
|
||||
Evas_Object *o_edje;
|
||||
Evas_Coord ow, oh;
|
||||
Evas_Coord size = 0;
|
||||
Evas_Object *ic;
|
||||
E_Gadcon_Client_Class *gcc = NULL;
|
||||
|
||||
gcc = elfe_utils_gadcon_client_class_from_name(name);
|
||||
if (!gcc)
|
||||
{
|
||||
printf("error : unable to find gadcon client class from name : %s\n", name);
|
||||
return;
|
||||
}
|
||||
|
||||
evas_object_geometry_get(hwin->desktop, NULL, NULL, &ow, &oh);
|
||||
|
||||
size = MIN(ow, oh) / 5;
|
||||
|
||||
elfe_desktop_edit_mode_set(hwin->desktop, EINA_TRUE);
|
||||
|
||||
o_edje = elm_layout_edje_get(hwin->layout);
|
||||
edje_object_signal_emit(o_edje, "appslist,toggle", "elfe");
|
||||
|
||||
ic = gcc->func.icon(gcc, evas_object_evas_get(obj));
|
||||
if (!ic)
|
||||
ic = elfe_utils_fdo_icon_add(obj, NULL, 64);
|
||||
|
||||
evas_object_show(ic);
|
||||
evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y);
|
||||
evas_object_resize(ic, size, size);
|
||||
evas_object_move(ic, x - size / 2, y - size /2);
|
||||
hwin->floating_icon = ic;
|
||||
|
||||
evas_object_del(hwin->allapps);
|
||||
hwin->allapps = NULL;
|
||||
evas_object_pass_events_set(ic, EINA_TRUE);
|
||||
|
||||
hwin->selected_app = NULL;
|
||||
hwin->selected_gadget = name;
|
||||
|
||||
evas_object_event_callback_add(hwin->desktop, EVAS_CALLBACK_MOUSE_MOVE, _icon_mouse_move_cb, hwin);
|
||||
evas_object_event_callback_add(hwin->desktop, EVAS_CALLBACK_MOUSE_UP, _icon_mouse_up_cb, hwin);
|
||||
}
|
||||
|
||||
static void*
|
||||
_app_exec_cb(void *data, Efreet_Desktop *desktop, char *command, int remaining)
|
||||
{
|
||||
|
@ -258,7 +312,8 @@ static void _edje_signal_cb(void *data, Evas_Object *obj, const char *emission,
|
|||
if (!hwin->allapps)
|
||||
{
|
||||
hwin->allapps = elfe_allapps_add(hwin->layout);
|
||||
evas_object_smart_callback_add(hwin->allapps, "entry,longpressed", _allapps_longpressed_cb, hwin);
|
||||
evas_object_smart_callback_add(hwin->allapps, "entry,longpressed", _app_longpressed_cb, hwin);
|
||||
evas_object_smart_callback_add(hwin->allapps, "gadget,longpressed", _gadget_longpressed_cb, hwin);
|
||||
evas_object_smart_callback_add(hwin->allapps, "item,selected", _allapps_item_selected_cb, hwin);
|
||||
evas_object_show(hwin->allapps);
|
||||
elm_layout_content_set(hwin->layout, "apps-list-swallow", hwin->allapps);
|
||||
|
@ -266,30 +321,6 @@ static void _edje_signal_cb(void *data, Evas_Object *obj, const char *emission,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_desktop_longpressed_cb(void *data , Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Evas_Object *inwin;
|
||||
Elfe_Home_Win *hwin = data;
|
||||
Evas_Object *rect;
|
||||
Evas_Object *o_edje;
|
||||
Evas_Object *list;
|
||||
Eina_List *l;
|
||||
E_Gadcon_Client_Class *gcc;
|
||||
|
||||
|
||||
printf("longpressed ....\n");
|
||||
|
||||
o_edje = elm_layout_edje_get(hwin->layout);
|
||||
edje_object_signal_emit(o_edje, "inwin,show", "elfe");
|
||||
elm_layout_text_set(hwin->layout, "inwin.text.title", "Add to Desktop");
|
||||
|
||||
list = elfe_desktop_gadget_list(hwin->desktop);
|
||||
elm_layout_content_set(hwin->layout, "inwin.swallow.content", list);
|
||||
evas_object_show(list);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
_elfe_home_win_new(E_Zone *zone)
|
||||
{
|
||||
|
@ -368,7 +399,6 @@ _elfe_home_win_new(E_Zone *zone)
|
|||
|
||||
hwin->desktop = elfe_desktop_add(hwin->layout, hwin->zone);
|
||||
elm_layout_content_set(hwin->layout, "launcher.swallow", hwin->desktop);
|
||||
evas_object_smart_callback_add(hwin->desktop, "longpressed", _desktop_longpressed_cb, hwin);
|
||||
evas_object_smart_callback_add(hwin->desktop, "gadget,added", _gadget_added_cb, hwin);
|
||||
|
||||
|
||||
|
|
19
src/utils.c
19
src/utils.c
|
@ -13,6 +13,12 @@ elfe_utils_fdo_icon_add(Evas_Object *parent, const char *icon, int size)
|
|||
ic = elm_icon_add(parent);
|
||||
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1);
|
||||
|
||||
if (!icon)
|
||||
{
|
||||
elm_icon_file_set(ic, elfe_home_cfg->theme, "icon/application-default");
|
||||
return ic;
|
||||
}
|
||||
|
||||
if (icon && icon[0] == '/')
|
||||
{
|
||||
elm_icon_file_set(ic, icon, NULL);
|
||||
|
@ -77,3 +83,16 @@ elfe_utils_fdo_icon_path_get(Efreet_Menu *menu, int size)
|
|||
return NULL;
|
||||
|
||||
}
|
||||
|
||||
E_Gadcon_Client_Class *
|
||||
elfe_utils_gadcon_client_class_from_name(const char *name)
|
||||
{
|
||||
E_Gadcon_Client_Class *gcc = NULL;
|
||||
Eina_List *l;
|
||||
EINA_LIST_FOREACH(e_gadcon_provider_list(), l, gcc)
|
||||
{
|
||||
if (!strcmp(gcc->name, name))
|
||||
return gcc;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -3,4 +3,7 @@
|
|||
|
||||
Evas_Object *elfe_utils_fdo_icon_add(Evas_Object *parent, const char *icon, int size);
|
||||
const char *elfe_utils_fdo_icon_path_get(Efreet_Menu *menu, int size);
|
||||
#endif
|
||||
|
||||
E_Gadcon_Client_Class *elfe_utils_gadcon_client_class_from_name(const char *name);
|
||||
|
||||
#endif /* __UTILS_H__ */
|
||||
|
|
Loading…
Reference in New Issue