Compiles now, but still crashy.

This commit is contained in:
Jaime Thomas
2009-02-05 04:11:22 +00:00
parent b62590493a
commit 22a49f6d1b
20 changed files with 568 additions and 564 deletions

View File

@@ -1,44 +1,43 @@
/* vim: set sw=3 ts=3 sts=3 expandtab: */
#include "ecdb.h"
static void ecdb_handle_typebuf(Evas_Object *gui);
static void ecdb_handle_typebuf(Evas_Object *gui, Ewl_Widget *fl);
static void ecdb_cb_welcome_page_buttons_clicked(void *data, Evas_Object *o,
const char *emission, const char *source);
static void ecdb_filelist_show(void);
static void ecdb_page_hide(const char *pname);
static void ecdb_filelist_focus_handle(int action, Evas_Object *fl);
static void ecdb_filelist_show(Ecdb_Page *page);
static void ecdb_filelist_focus_handle(int action, Evas_Object *fl,
Evas_Object *gui);
static void ecdb_welcome_page_hide_finished(void *data, Evas_Object *o,
const char *emission,
const char *source);
/* XXX These need to be fixed when Ecdb_Page become the swallow,
* whereas it is the actual gui as well
*/
static void
ecdb_cb_enter(Ecore_Evas *ee)
{
Evas_Object *gui;
gui = evas_object_name_find(ecore_evas_get(ee), "gui");
edje_object_signal_emit(gui, "ecdb,window,enter", "ecdb");
edje_object_signal_emit(em->page->gui, "ecdb,window,enter", "ecdb");
}
static void
ecdb_cb_leave(Ecore_Evas *ee)
{
Evas_Object *gui;
gui = evas_object_name_find(ecore_evas_get(ee), "gui");
edje_object_signal_emit(gui, "ecdb,window,exit", "ecdb");
edje_object_signal_emit(em->page->gui, "ecdb,window,exit", "ecdb");
}
static void
ecdb_cb_resize(Ecore_Evas *ee)
{
int w, h;
Evas_Object *gui;
ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
gui = evas_object_name_find(ecore_evas_get(ee), "gui");
evas_object_resize(gui, w, h);
evas_object_resize(em->page->gui, w, h);
}
static void ecdb_filelist_focus_handle(int action, Evas_Object *fl)
static void ecdb_filelist_focus_handle(int action, Evas_Object *fl,
Evas_Object *gui)
{
static Evas_Object *old_focus;
Evas_Object *gui;
if (action == IN)
{
@@ -52,7 +51,6 @@ static void ecdb_filelist_focus_handle(int action, Evas_Object *fl)
evas_object_focus_set(old_focus, 1);
old_focus = NULL;
gui = evas_object_name_find(ecore_evas_get(em->main_win_ee), "gui");
edje_object_signal_emit(gui, "ecdb,filelist_overlay,deactivate", "ecdb");
edje_object_part_text_set(gui, "filelist_overlay_text", NULL);
}
@@ -60,27 +58,32 @@ static void ecdb_filelist_focus_handle(int action, Evas_Object *fl)
static void
_cb_filelist_mouse_in(void *data, Evas *e __UNUSED__, Evas_Object *eo,
void *ev_data __UNUSED__)
void *ev_data)
{
ecdb_filelist_focus_handle(IN, eo);
Ecdb_Page *page;
page = data;
ecdb_filelist_focus_handle(IN, eo, page->gui);
}
static void
_cb_filelist_mouse_out(void *data, Evas *e __UNUSED__, Evas_Object *eo,
void *ev_data __UNUSED__)
void *ev_data)
{
ecdb_filelist_focus_handle(OUT, eo);
Ecdb_Page *page;
page = data;
ecdb_filelist_focus_handle(OUT, eo, page->gui);
}
static void
_cb_filelist_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *eo,
void *ev_data __UNUSED__)
{
Evas_Object *gui = data;
Ecdb_Page *page = data;
evas_object_focus_set(eo, TRUE);
edje_object_signal_emit(gui, "ecdb,filelist_overlay,deactivate", "ecdb");
edje_object_part_text_set(gui, "filelist_overlay_text", NULL);
edje_object_signal_emit(page->gui, "ecdb,filelist_overlay,deactivate",
"ecdb");
edje_object_part_text_set(page->gui, "filelist_overlay_text", NULL);
}
@@ -89,17 +92,19 @@ _cb_filelist_key_down(void *data, Evas *e __UNUSED__,
Evas_Object *eo __UNUSED__, void *ev_data)
{
Evas_Event_Key_Down *ek = ev_data;
Evas_Object *gui = data;
Ecdb_Page *page = data;
if (!strcmp(ek->key, "Escape"))
{
edje_object_signal_emit(gui, "ecdb,filelist_overlay,deactivate", "ecdb");
edje_object_part_text_set(gui, "filelist_overlay_text", NULL);
edje_object_signal_emit(page->gui, "ecdb,filelist_overlay,deactivate",
"ecdb");
edje_object_part_text_set(page->gui, "filelist_overlay_text", NULL);
}
else if (!strcmp(ek->key, "Return"))
{
ecdb_handle_typebuf(gui);
ecdb_handle_typebuf(page->gui, evas_object_data_get(page->filelist,
"filelist"));
}
else if (!strcmp(ek->key, "BackSpace"))
@@ -108,7 +113,7 @@ _cb_filelist_key_down(void *data, Evas *e __UNUSED__,
const char *t;
char *text;
t = edje_object_part_text_get(gui, "filelist_overlay_text");
t = edje_object_part_text_get(page->gui, "filelist_overlay_text");
text = (t) ? (strdup(t)) : NULL;
if ((!text) || (!*text)) return;
@@ -119,10 +124,10 @@ _cb_filelist_key_down(void *data, Evas *e __UNUSED__,
if (len == 1)
{
edje_object_signal_emit(gui, "ecdb,filelist_overlay,deactivate",
edje_object_signal_emit(page->gui, "ecdb,filelist_overlay,deactivate",
"ecdb");
}
edje_object_part_text_set(gui, "filelist_overlay_text", text);
edje_object_part_text_set(page->gui, "filelist_overlay_text", text);
FREE(text);
}
@@ -132,7 +137,7 @@ _cb_filelist_key_down(void *data, Evas *e __UNUSED__,
const char *t, *append;
char *text;
t = edje_object_part_text_get(gui, "filelist_overlay_text");
t = edje_object_part_text_get(page->gui, "filelist_overlay_text");
text = (t) ? (strdup(t)) : NULL;
@@ -170,9 +175,10 @@ _cb_filelist_key_down(void *data, Evas *e __UNUSED__,
*/
if (strlen(text) == 1)
{
edje_object_signal_emit(gui, "ecdb,filelist_overlay,activate", "ecdb");
edje_object_signal_emit(page->gui, "ecdb,filelist_overlay,activate",
"ecdb");
}
edje_object_part_text_set(gui, "filelist_overlay_text", text);
edje_object_part_text_set(page->gui, "filelist_overlay_text", text);
FREE(text);
}
}
@@ -180,7 +186,6 @@ _cb_filelist_key_down(void *data, Evas *e __UNUSED__,
int
ecdb_create_main_gui(void)
{
Evas_Object *gui;
Evas_Coord mw, mh;
const char *scale, *engine;
@@ -229,21 +234,21 @@ ecdb_create_main_gui(void)
em->scalef = (scale) ? atof(scale) : 1.0;
edje_scale_set(em->scalef);
gui = edje_object_add(ecore_evas_get(em->main_win_ee));
edje_object_file_set(gui, em->theme_path, "ecdb/window");
edje_object_size_min_get(gui, &mw, &mh);
em->page = calloc(1, sizeof(Ecdb_Page));
em->page->gui = edje_object_add(ecore_evas_get(em->main_win_ee));
edje_object_file_set(em->page->gui, em->theme_path, "ecdb/window");
edje_object_size_min_get(em->page->gui, &mw, &mh);
if (mw <= 0) mw = 400;
if (mh <= 0) mh = 300;
mw = (int)((float)mw * em->scalef);
mh = (int)((float)mh * em->scalef);
evas_object_resize(gui, mw, mh);
evas_object_resize(em->page->gui, mw, mh);
ecore_evas_resize(em->main_win_ee, mw, mh);
ecore_evas_size_min_set(em->main_win_ee, mw, mh);
evas_object_name_set(gui, "gui");
evas_object_move(gui, 0, 0);
evas_object_show(gui);
evas_object_move(em->page->gui, 0, 0);
evas_object_show(em->page->gui);
ecdb_welcome_page_show();
ecdb_welcome_page_show(em->page);
return TRUE;
}
@@ -261,9 +266,8 @@ ecdb_set_main_theme(const char *theme_name)
}
void
ecdb_handle_typebuf(Evas_Object *gui)
ecdb_handle_typebuf(Evas_Object *gui, Ewl_Widget *fl)
{
Ewl_Widget *fl;
Ewl_Filelist_Filter *filter;
const char *ext;
@@ -272,8 +276,6 @@ ecdb_handle_typebuf(Evas_Object *gui)
return;
}
fl = ewl_widget_name_find("main_filelist");
/* Check for a 'cd' first */
if (!ecdb_match_keyword(ext, "cd", 2))
{
@@ -358,72 +360,56 @@ ecdb_handle_typebuf(Evas_Object *gui)
static void
ecdb_cb_welcome_page_buttons_clicked(void *data, Evas_Object *o,
const char *emission, const char *source)
const char *emission __UNUSED__,
const char *source)
{
Evas_Object *swallow, *gui;
gui = evas_object_name_find(ecore_evas_get(em->main_win_ee), "gui");
swallow = evas_object_name_find(ecore_evas_get(em->main_win_ee),
"main_filelist");
Ecdb_Page *page = data;
if (!strcmp(source, "ecdb/burn_data"))
{
swallow = evas_object_name_find(ecore_evas_get(em->main_win_ee),
"welcome_page");
edje_object_signal_emit(swallow, "ecdb,welcome_page,hide", "ecdb");
ecdb_burn_data_page_show();
ecdb_filelist_show();
edje_object_signal_emit(o, "ecdb,welcome_page,hide", "ecdb");
ecdb_burn_data_page_show(page);
ecdb_filelist_show(page);
}
else if (!strcmp(source, "ecdb/erase"))
{
swallow = evas_object_name_find(ecore_evas_get(em->main_win_ee),
"welcome_page");
edje_object_signal_emit(swallow, "ecdb,welcome_page,hide", "ecdb");
ecdb_erase_page_show();
edje_object_signal_emit(o, "ecdb,welcome_page,hide", "ecdb");
ecdb_erase_page_show(page);
}
else if (!strcmp(source, "ecdb/burn_image"))
{
ecdb_filelist_show();
swallow = evas_object_name_find(ecore_evas_get(em->main_win_ee),
"welcome_page");
edje_object_signal_emit(swallow, "ecdb,welcome_page,hide", "ecdb");
ecdb_burn_image_page_show();
ecdb_filelist_show(page);
edje_object_signal_emit(o, "ecdb,welcome_page,hide", "ecdb");
ecdb_burn_image_page_show(page);
}
else if (swallow)
else if (o)
{
edje_object_signal_emit(gui, "ecdb,filelist,hide", "ecdb");
edje_object_signal_emit(page->gui, "ecdb,filelist,hide", "ecdb");
}
printf("Action: %s\n", source);
}
void
ecdb_welcome_page_show(void)
ecdb_welcome_page_show(Ecdb_Page *page)
{
Evas_Object *gui, *swallow;
gui = evas_object_name_find(ecore_evas_get(em->main_win_ee), "gui");
swallow = evas_object_name_find(ecore_evas_get(em->main_win_ee),
"welcome_page");
if (!swallow)
if (!page->welcome)
{
Evas_Object *b;
Evas_Coord x, y, w, h;
swallow = edje_object_add(ecore_evas_get(em->main_win_ee));
evas_object_name_set(swallow, "welcome_page");
edje_object_file_set(swallow, em->theme_path, "ecdb/welcome_page");
edje_object_part_geometry_get(gui, "active_area", &x, &y, &w, &h);
evas_object_move(swallow, x, y);
evas_object_resize(swallow, w, h);
edje_object_part_swallow(gui, "action_area", swallow);
edje_object_signal_callback_add(swallow, "mouse,clicked,1", "ecdb/*",
ecdb_cb_welcome_page_buttons_clicked, NULL);
edje_object_signal_callback_add(swallow, "hide,finished", "welcome_page",
ecdb_page_hide_finished, NULL);
evas_object_show(swallow);
page->welcome = edje_object_add(ecore_evas_get(em->main_win_ee));
edje_object_file_set(page->welcome, em->theme_path, "ecdb/welcome_page");
edje_object_part_geometry_get(page->gui, "active_area", &x, &y, &w, &h);
evas_object_move(page->welcome, x, y);
evas_object_resize(page->welcome, w, h);
edje_object_part_swallow(page->gui, "action_area", page->welcome);
edje_object_signal_callback_add(page->welcome, "mouse,clicked,1",
"ecdb/*", ecdb_cb_welcome_page_buttons_clicked, page);
edje_object_signal_callback_add(page->welcome, "hide,finished",
"welcome_page", ecdb_welcome_page_hide_finished,
page->gui);
evas_object_show(page->welcome);
int i;
char *labels[] = {"Burn Data CD", "Burn Audio CD", "Burn Image",
@@ -432,133 +418,89 @@ ecdb_welcome_page_show(void)
"ecdb/erase"};
for (i = 0; i < 4; i++)
{
b = ecdb_button_add(swallow, ids[i]);
b = ecdb_button_add(page->welcome, ids[i]);
ecdb_button_label_set(b, labels[i]);
evas_object_show(b);
ecdb_button_icon_set(b, ids[i]);
}
}
else if (edje_object_part_swallow_get(gui, "action_area") != swallow)
else if (edje_object_part_swallow_get(page->gui, "action_area") !=
page->welcome)
{
/* All that is needed here? */
edje_object_part_swallow(gui, "action_area", swallow);
evas_object_show(swallow);
edje_object_part_swallow(page->gui, "action_area", page->welcome);
evas_object_show(page->welcome);
}
edje_object_signal_emit(gui, "ecdb,welcome_page,show", "ecdb");
edje_object_signal_emit(swallow, "ecdb,welcome_page,show", "ecdb");
edje_object_signal_emit(page->gui, "ecdb,welcome_page,show", "ecdb");
edje_object_signal_emit(page->welcome, "ecdb,welcome_page,show", "ecdb");
}
static void
ecdb_filelist_show(void)
ecdb_filelist_show(Ecdb_Page *page)
{
Evas_Object *gui, *swallow;
gui = evas_object_name_find(ecore_evas_get(em->main_win_ee), "gui");
swallow = evas_object_name_find(ecore_evas_get(em->main_win_ee),
"main_filelist");
if (!swallow)
if (!page->filelist)
{
Evas_Coord x, y, w, h;
Ewl_Widget *embed, *filelist;
embed = ewl_embed_new();
ewl_object_fill_policy_set(EWL_OBJECT(embed), EWL_FLAG_FILL_ALL);
swallow = ewl_embed_canvas_set(EWL_EMBED(embed),
page->filelist = ewl_embed_canvas_set(EWL_EMBED(embed),
ecore_evas_get(em->main_win_ee),
(void *)(long)ecore_evas_software_x11_window_get(em->main_win_ee));
ewl_embed_focus_set(EWL_EMBED(embed), TRUE);
ewl_widget_show(embed);
filelist = ewl_filelist_new();
ewl_widget_name_set(EWL_WIDGET(filelist), "main_filelist");
ewl_container_child_append(EWL_CONTAINER(embed), filelist);
ewl_filelist_directory_set(EWL_FILELIST(filelist), getenv("HOME"));
ewl_widget_show(filelist);
edje_object_part_geometry_get(gui, "filelist", &x, &y, &w, &h);
evas_object_name_set(swallow, "main_filelist");
evas_object_move(swallow, x, y);
evas_object_resize(swallow, w, h);
edje_object_part_swallow(gui, "filelist", swallow);
evas_object_event_callback_add(swallow, EVAS_CALLBACK_MOUSE_DOWN,
_cb_filelist_mouse_down, gui);
evas_object_event_callback_add(swallow, EVAS_CALLBACK_KEY_DOWN,
_cb_filelist_key_down, gui);
evas_object_event_callback_add(swallow, EVAS_CALLBACK_MOUSE_IN,
_cb_filelist_mouse_in, gui);
evas_object_event_callback_add(swallow, EVAS_CALLBACK_MOUSE_OUT,
_cb_filelist_mouse_out, gui);
evas_object_show(swallow);
edje_object_part_geometry_get(page->gui, "filelist", &x, &y, &w, &h);
evas_object_move(page->filelist, x, y);
evas_object_resize(page->filelist, w, h);
edje_object_part_swallow(page->gui, "filelist", page->filelist);
evas_object_event_callback_add(page->filelist, EVAS_CALLBACK_MOUSE_DOWN,
_cb_filelist_mouse_down, page);
evas_object_event_callback_add(page->filelist, EVAS_CALLBACK_KEY_DOWN,
_cb_filelist_key_down, page);
evas_object_event_callback_add(page->filelist, EVAS_CALLBACK_MOUSE_IN,
_cb_filelist_mouse_in, page);
evas_object_event_callback_add(page->filelist, EVAS_CALLBACK_MOUSE_OUT,
_cb_filelist_mouse_out, page);
evas_object_data_set(page->filelist, "filelist", filelist);
evas_object_show(page->filelist);
}
/* Assume here that it is the active projects job to hide itself and
* call this show function
*/
else if (edje_object_part_swallow_get(gui, "filelist") != swallow)
else if (edje_object_part_swallow_get(page->gui, "filelist") !=
page->filelist)
{
/* Is this all that is neccessary? */
edje_object_part_swallow(gui, "filelist", swallow);
evas_object_show(swallow);
edje_object_part_swallow(page->gui, "filelist", page->filelist);
evas_object_show(page->filelist);
}
edje_object_signal_emit(gui, "ecdb,filelist,visible", "ecdb");
edje_object_signal_emit(swallow, "ecdb,filelist,visible", "ecdb");
edje_object_signal_emit(page->gui, "ecdb,filelist,visible", "ecdb");
edje_object_signal_emit(page->filelist, "ecdb,filelist,visible", "ecdb");
}
/* This should be triggered by the theme, once it is done with its
* nice fancy animations
*/
static void
ecdb_page_hide(const char *pname)
{
Evas_Object *swallow, *gui;
swallow = evas_object_name_find(ecore_evas_get(em->main_win_ee), pname);
gui = evas_object_name_find(ecore_evas_get(em->main_win_ee), "gui");
if (gui)
{
edje_object_part_unswallow(gui, swallow);
evas_object_hide(swallow);
}
}
/* Hurrah! Fancyness */
void
ecdb_page_hide_finished(void *data, Evas_Object *o, const char *emission,
const char *source)
static void
ecdb_welcome_page_hide_finished(void *data, Evas_Object *o,
const char *emission __UNUSED__,
const char *source __UNUSED__)
{
ecdb_page_hide(source);
}
Evas_Object *gui;
void
ecdb_gui_controls_disable(const char **ids, int n)
{
Evas_Object *obj;
int i;
for (i = 0; i < n; i++)
{
obj = evas_object_name_find(ecore_evas_get(em->main_win_ee), ids[i]);
edje_object_signal_emit(obj, "ecdb,disable", "ecdb");
}
}
void
ecdb_gui_controls_enable(const char **ids, int n)
{
Evas_Object *obj;
int i;
for (i = 0; i < n; i++)
{
obj = evas_object_name_find(ecore_evas_get(em->main_win_ee), ids[i]);
edje_object_signal_emit(obj, "ecdb,enable", "ecdb");
}
gui = data;
edje_object_part_unswallow(gui, o);
evas_object_hide(o);
}
void