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:
Nicolas Aguirre 2011-03-08 22:01:19 +00:00
parent 46e503affd
commit 6afc6e31ec
12 changed files with 166 additions and 64 deletions

View File

@ -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

View File

@ -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 \

View File

@ -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);

View File

@ -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)
{

View File

@ -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_ */

View File

@ -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

43
src/gadget_list.c Normal file
View File

@ -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;
}

6
src/gadget_list.h Normal file
View File

@ -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_ */

View File

@ -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_ */

View File

@ -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);

View File

@ -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;
}

View File

@ -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__ */