A lot of fixes and changes.. still needs a bit of work.. got some bugs to fixes. Wanted to get what I have in to cvs.
SVN revision: 34222v-1.6.0
parent
8b98342250
commit
c7e5687565
20 changed files with 1333 additions and 1436 deletions
@ -0,0 +1,249 @@ |
||||
#include "ephoto.h" |
||||
|
||||
static Ewl_Widget *add_atree(Ewl_Widget *c); |
||||
static Ewl_Widget *album_view_new(void *data, unsigned int row,
|
||||
unsigned int column); |
||||
static Ewl_Widget *album_header_fetch(void *data,
|
||||
unsigned int column); |
||||
static void *album_data_fetch(void *data, unsigned int row,
|
||||
unsigned int column); |
||||
static unsigned int album_data_count(void *data); |
||||
static void add_rc_menu(Ewl_Widget *w, void *event, void *data); |
||||
static void album_clicked(Ewl_Widget *w, void *event, void *data); |
||||
static void thumb_clicked(Ewl_Widget *w, void *event, void *data); |
||||
|
||||
void
|
||||
show_albums(Ewl_Widget *c) |
||||
{ |
||||
em->atree = add_atree(c); |
||||
ewl_object_maximum_w_set(EWL_OBJECT(em->atree), 180); |
||||
|
||||
populate_albums(NULL, NULL, NULL); |
||||
} |
||||
|
||||
static Ewl_Widget * |
||||
add_atree(Ewl_Widget *c) |
||||
{ |
||||
Ewl_Widget *tree; |
||||
Ewl_Model *model; |
||||
Ewl_View *view; |
||||
|
||||
model = ewl_model_new(); |
||||
ewl_model_data_fetch_set(model, album_data_fetch); |
||||
ewl_model_data_count_set(model, album_data_count); |
||||
|
||||
view = ewl_view_new(); |
||||
ewl_view_widget_fetch_set(view, album_view_new); |
||||
ewl_view_header_fetch_set(view, album_header_fetch); |
||||
|
||||
tree = ewl_tree_new(); |
||||
ewl_tree_headers_visible_set(EWL_TREE(tree), 0); |
||||
ewl_tree_fixed_rows_set(EWL_TREE(tree), 1); |
||||
ewl_tree_column_count_set(EWL_TREE(tree), 1); |
||||
ewl_mvc_model_set(EWL_MVC(tree), model); |
||||
ewl_mvc_view_set(EWL_MVC(tree), view); |
||||
ewl_mvc_selection_mode_set(EWL_MVC(tree), EWL_SELECTION_MODE_SINGLE); |
||||
ewl_object_fill_policy_set(EWL_OBJECT(tree), EWL_FLAG_FILL_ALL); |
||||
ewl_container_child_append(EWL_CONTAINER(c), tree); |
||||
ewl_widget_show(tree); |
||||
|
||||
return tree; |
||||
} |
||||
|
||||
static Ewl_Widget * |
||||
album_view_new(void *data, unsigned int row, unsigned int column) |
||||
{ |
||||
char *album; |
||||
Ewl_Widget *icon; |
||||
|
||||
album = data; |
||||
|
||||
icon = add_icon(NULL, album, PACKAGE_DATA_DIR "/images/image.png", 0,
|
||||
album_clicked, NULL); |
||||
ewl_icon_constrain_set(EWL_ICON(icon), 25); |
||||
ewl_box_orientation_set(EWL_BOX(icon), EWL_ORIENTATION_HORIZONTAL); |
||||
ewl_object_alignment_set(EWL_OBJECT(icon), EWL_FLAG_ALIGN_LEFT); |
||||
ewl_object_fill_policy_set(EWL_OBJECT(icon), EWL_FLAG_FILL_ALL); |
||||
ewl_widget_name_set(icon, album); |
||||
ewl_callback_append(icon, EWL_CALLBACK_SHOW, add_rc_menu, NULL); |
||||
|
||||
return icon; |
||||
} |
||||
|
||||
static Ewl_Widget * |
||||
album_header_fetch(void *data, unsigned int column) |
||||
{ |
||||
Ewl_Widget *label; |
||||
|
||||
label = add_label(NULL, "Albums"); |
||||
|
||||
return label; |
||||
} |
||||
|
||||
static void * |
||||
album_data_fetch(void *data, unsigned int row, unsigned int column) |
||||
{ |
||||
const char *album; |
||||
void *val = NULL; |
||||
|
||||
album = ecore_list_index_goto(em->albums, row); |
||||
if (album) |
||||
{ |
||||
val = (void *)album; |
||||
} |
||||
|
||||
return val; |
||||
} |
||||
|
||||
static unsigned int
|
||||
album_data_count(void *data) |
||||
{ |
||||
int val; |
||||
|
||||
val = ecore_list_count(em->albums); |
||||
|
||||
return val; |
||||
} |
||||
|
||||
static void album_clicked(Ewl_Widget *w, void *event, void *data) |
||||
{ |
||||
em->current_album = strdup(ewl_icon_label_get(EWL_ICON(w))); |
||||
populate_albums(NULL, NULL, NULL); |
||||
} |
||||
|
||||
static void
|
||||
rc_remove(Ewl_Widget *w, void *event, void *data) |
||||
{ |
||||
Ewl_Widget *icon; |
||||
|
||||
icon = data; |
||||
ephoto_db_delete_album(em->db, ewl_icon_label_get(EWL_ICON(icon))); |
||||
populate_albums(NULL, NULL, NULL); |
||||
} |
||||
|
||||
static void
|
||||
add_rc_menu(Ewl_Widget *w, void *event, void *data) |
||||
{ |
||||
Ewl_Widget *context; |
||||
|
||||
context = ewl_context_menu_new(); |
||||
ewl_context_menu_attach(EWL_CONTEXT_MENU(context), w); |
||||
|
||||
add_menu_item(context, "Remove Album", |
||||
PACKAGE_DATA_DIR "/images/remove.png",
|
||||
rc_remove, w); |
||||
} |
||||
|
||||
static void
|
||||
thumb_clicked(Ewl_Widget *w, void *event, void *data) |
||||
{ |
||||
const char *file; |
||||
char *point1; |
||||
|
||||
file = ewl_widget_name_get(w); |
||||
|
||||
ecore_dlist_first_goto(em->images); |
||||
while(ecore_dlist_current(em->images)) |
||||
{ |
||||
point1 = ecore_dlist_current(em->images); |
||||
if (!strcmp(point1, file)) break; |
||||
ecore_dlist_next(em->images); |
||||
} |
||||
|
||||
show_single_view(NULL, NULL, NULL); |
||||
} |
||||
|
||||
void
|
||||
populate_albums(Ewl_Widget *w, void *event, void *data) |
||||
{ |
||||
const char *album; |
||||
pthread_t thumb_worker, album_worker, image_worker; |
||||
int ret1, ret2; |
||||
|
||||
album = NULL; |
||||
|
||||
if (w) |
||||
{ |
||||
album = ewl_widget_name_get(w); |
||||
em->current_album = strdup(album); |
||||
} |
||||
|
||||
if (!ecore_list_empty_is(em->albums)) |
||||
{ |
||||
ecore_list_destroy(em->albums); |
||||
} |
||||
if (!ecore_list_empty_is(em->images)) |
||||
{ |
||||
ecore_dlist_destroy(em->images); |
||||
} |
||||
|
||||
em->albums = ecore_list_new(); |
||||
em->images = ecore_dlist_new(); |
||||
if(em->fbox) ewl_container_reset(EWL_CONTAINER(em->fbox)); |
||||
|
||||
ret1 = pthread_create(&album_worker, NULL, get_albums_pre, NULL); |
||||
ret2 = pthread_create(&image_worker, NULL, get_aimages_pre, NULL); |
||||
if (ret1 || ret2) |
||||
{ |
||||
printf("ERROR: Couldn't create thread!\n"); |
||||
return; |
||||
} |
||||
pthread_join(album_worker, NULL); |
||||
pthread_join(image_worker, NULL); |
||||
|
||||
ret1 = pthread_create(&thumb_worker, NULL, create_athumb, NULL); |
||||
if (ret1) |
||||
{ |
||||
printf("ERROR: Couldn't create thread!\n"); |
||||
return; |
||||
} |
||||
pthread_detach(thumb_worker); |
||||
|
||||
return; |
||||
} |
||||
|
||||
void * |
||||
create_athumb() |
||||
{ |
||||
Ewl_Widget *thumb; |
||||
char *imagef; |
||||
|
||||
while (ecore_dlist_current(em->images)) |
||||
{ |
||||
imagef = ecore_dlist_current(em->images); |
||||
|
||||
if (imagef) |
||||
{ |
||||
thumb = add_image(em->fbox, imagef, 1, |
||||
thumb_clicked, NULL); |
||||
ewl_image_constrain_set(EWL_IMAGE(thumb), |
||||
ewl_range_value_get(EWL_RANGE |
||||
(em->fthumb_size))); |
||||
ewl_object_alignment_set(EWL_OBJECT(thumb), |
||||
EWL_FLAG_ALIGN_CENTER); |
||||
ewl_widget_name_set(thumb, imagef); |
||||
} |
||||
ecore_dlist_next(em->images); |
||||
} |
||||
ewl_widget_configure(em->fbox_vbox); |
||||
|
||||
pthread_exit(NULL); |
||||
} |
||||
|
||||
void * |
||||
get_albums_pre() |
||||
{ |
||||
em->albums = ephoto_db_list_albums(em->db); |
||||
ecore_dlist_first_goto(em->albums); |
||||
ewl_mvc_data_set(EWL_MVC(em->atree), em->albums); |
||||
pthread_exit(NULL); |
||||
} |
||||
|
||||
void * |
||||
get_aimages_pre() |
||||
{ |
||||
em->images = ephoto_db_list_images(em->db, em->current_album); |
||||
ecore_dlist_first_goto(em->images); |
||||
pthread_exit(NULL); |
||||
} |
||||
|
@ -1,194 +0,0 @@ |
||||
#include "ephoto.h" |
||||
|
||||
static void destroy(Ewl_Widget *w, void *event, void *data); |
||||
|
||||
/*Ephoto Directory Tree*/ |
||||
static Ewl_Widget *add_dtree(Ewl_Widget *c); |
||||
|
||||
/*Ephoto MVC Callbacks*/ |
||||
static Ewl_Widget *directory_view_new(void *data, unsigned int row, unsigned int column); |
||||
static Ewl_Widget *directory_header_fetch(void *data, unsigned int column); |
||||
static void *directory_data_fetch(void *data, unsigned int row, unsigned int column); |
||||
static unsigned int directory_data_count(void *data); |
||||
|
||||
static void destroy(Ewl_Widget *w, void *event, void *data) |
||||
{ |
||||
ewl_widget_destroy(w); |
||||
em->bwin = NULL; |
||||
} |
||||
|
||||
void show_browser(Ewl_Widget *w, void *event, void *data) |
||||
{ |
||||
if (!em->bwin) |
||||
{ |
||||
em->bwin = add_window("Browser!", 200, 400, destroy, NULL); |
||||
|
||||
em->dtree = add_dtree(em->bwin); |
||||
ewl_object_maximum_w_set(EWL_OBJECT(em->dtree), 200); |
||||
|
||||
populate_directories(NULL, NULL, NULL); |
||||
} |
||||
} |
||||
|
||||
/*Create and Add a Tree to the Container c*/ |
||||
static Ewl_Widget *add_dtree(Ewl_Widget *c) |
||||
{ |
||||
Ewl_Widget *tree; |
||||
Ewl_Model *model; |
||||
Ewl_View *view; |
||||
|
||||
model = ewl_model_new(); |
||||
ewl_model_data_fetch_set(model, directory_data_fetch); |
||||
ewl_model_data_count_set(model, directory_data_count); |
||||
|
||||
view = ewl_view_new(); |
||||
ewl_view_widget_fetch_set(view, directory_view_new); |
||||
ewl_view_header_fetch_set(view, directory_header_fetch); |
||||
|
||||
tree = ewl_tree_new(); |
||||
ewl_tree_headers_visible_set(EWL_TREE(tree), 0); |
||||
ewl_tree_fixed_rows_set(EWL_TREE(tree), 1); |
||||
ewl_tree_column_count_set(EWL_TREE(tree), 1); |
||||
ewl_mvc_model_set(EWL_MVC(tree), model); |
||||
ewl_mvc_view_set(EWL_MVC(tree), view); |
||||
ewl_mvc_selection_mode_set(EWL_MVC(tree), EWL_SELECTION_MODE_NONE); |
||||
ewl_object_fill_policy_set(EWL_OBJECT(tree), EWL_FLAG_FILL_ALL); |
||||
ewl_container_child_append(EWL_CONTAINER(c), tree); |
||||
ewl_widget_show(tree); |
||||
|
||||
return tree; |
||||
} |
||||
|
||||
/* The view of the users directories */ |
||||
static Ewl_Widget *directory_view_new(void *data, unsigned int row, unsigned int column) |
||||
{ |
||||
char *current_directory, *directory; |
||||
int len; |
||||
Ewl_Widget *icon; |
||||
|
||||
len = strlen(em->current_directory); |
||||
current_directory = alloca(len + 1); |
||||
strcpy(current_directory, em->current_directory); |
||||
directory = data; |
||||
|
||||
icon = add_icon(NULL, basename(directory),
|
||||
PACKAGE_DATA_DIR "/images/folder.png", 0,
|
||||
populate_directories, NULL); |
||||
|
||||
ewl_icon_constrain_set(EWL_ICON(icon), 25); |
||||
ewl_box_orientation_set(EWL_BOX(icon), EWL_ORIENTATION_HORIZONTAL); |
||||
ewl_object_alignment_set(EWL_OBJECT(icon), EWL_FLAG_ALIGN_LEFT); |
||||
ewl_object_fill_policy_set(EWL_OBJECT(icon), EWL_FLAG_FILL_ALL); |
||||
if (!strncmp(directory, "..", 2)) |
||||
{ |
||||
ewl_icon_image_set(EWL_ICON(icon), PACKAGE_DATA_DIR "/images/go-up.png", NULL); |
||||
ewl_icon_constrain_set(EWL_ICON(icon), 25); |
||||
ewl_widget_name_set(icon, dirname(current_directory)); |
||||
} |
||||
else |
||||
{ |
||||
ewl_widget_name_set(icon, directory); |
||||
} |
||||
|
||||
return icon; |
||||
} |
||||
|
||||
/* The header for the tree */ |
||||
static Ewl_Widget *directory_header_fetch(void *data, unsigned int column) |
||||
{ |
||||
Ewl_Widget *label; |
||||
|
||||
label = add_label(NULL, "Directories"); |
||||
|
||||
return label; |
||||
} |
||||
|
||||
/*The directories that will be displayed*/ |
||||
static void *directory_data_fetch(void *data, unsigned int row, unsigned int column) |
||||
{ |
||||
const char *directory; |
||||
void *val = NULL; |
||||
|
||||
directory = ecore_list_index_goto(em->directories, row); |
||||
if (directory) |
||||
{ |
||||
val = (void *)directory; |
||||
} |
||||
|
||||
return val; |
||||
} |
||||
|
||||
/* The number of directories the view is displaying */ |
||||
static unsigned int directory_data_count(void *data) |
||||
{ |
||||
int val; |
||||
|
||||
val = ecore_list_count(em->directories); |
||||
|
||||
return val; |
||||
} |
||||
|
||||
/*Update the Image List*/ |
||||
void populate_directories(Ewl_Widget *w, void *event, void *data) |
||||
{ |
||||
const char *directory; |
||||
char *imagef; |
||||
Ewl_Widget *thumb; |
||||
|
||||
directory = NULL; |
||||
|
||||
if (w) |
||||
{ |
||||
directory = ewl_widget_name_get(w); |
||||
em->current_directory = strdup(directory); |
||||
} |
||||
if (!ecore_list_empty_is(em->directories)) |
||||
{ |
||||
ecore_list_destroy(em->directories); |
||||
} |
||||
|
||||
em->directories = ecore_list_new(); |
||||
em->directories = get_directories(em->current_directory); |
||||
|
||||
ecore_dlist_first_goto(em->directories); |
||||
ewl_mvc_data_set(EWL_MVC(em->dtree), em->directories); |
||||
|
||||
if (!ecore_list_empty_is(em->images)) |
||||
{ |
||||
ecore_dlist_destroy(em->images); |
||||
} |
||||
|
||||
em->images = ecore_dlist_new(); |
||||
em->images = get_images(em->current_directory); |
||||
|
||||
ecore_dlist_first_goto(em->images); |
||||
|
||||
ewl_container_reset(EWL_CONTAINER(em->fbox)); |
||||
while (ecore_dlist_current(em->images)) |
||||
{ |
||||
imagef = ecore_dlist_current(em->images); |
||||
if(imagef) |
||||
{ |
||||
thumb = add_image(em->fbox, imagef, 1,
|
||||
freebox_image_clicked, NULL); |
||||
ewl_image_constrain_set(EWL_IMAGE(thumb),
|
||||
ewl_range_value_get(EWL_RANGE(em->fthumb_size))); |
||||
ewl_object_alignment_set(EWL_OBJECT(thumb),
|
||||
EWL_FLAG_ALIGN_CENTER); |
||||
ewl_widget_name_set(thumb, imagef); |
||||
} |
||||
ecore_dlist_next(em->images); |
||||
} |
||||
ewl_widget_configure(em->fbox_vbox); |
||||
|
||||
ewl_mvc_data_set(EWL_MVC(em->ltree), em->images); |
||||
ecore_dlist_first_goto(em->images);
|
||||
|
||||
if (ecore_dlist_current(em->images))
|
||||
{ |
||||
ewl_image_file_path_set(EWL_IMAGE(em->simage),
|
||||
ecore_dlist_current(em->images)); |
||||
} |
||||
|
||||
return; |
||||
} |
@ -1,94 +0,0 @@ |
||||
#include "ephoto.h" |
||||
|
||||
/*Populate a List of Sub Directories Inside of Directory.*/ |
||||
Ecore_List *get_directories(const char *directory) |
||||
{ |
||||
Ecore_List *ls, *files; |
||||
char *file; |
||||
char path[PATH_MAX]; |
||||
|
||||
if (ecore_file_is_dir(directory)) |
||||
{ |
||||
ls = ecore_list_new(); |
||||
files = ecore_list_new(); |
||||
ecore_list_free_cb_set(files, free); |
||||
if (strcmp(directory, "/")) |
||||
{ |
||||
ecore_list_append(files, strdup("..")); |
||||
} |
||||
ls = ecore_file_ls(directory); |
||||
while (!ecore_list_empty_is(ls)) |
||||
{ |
||||
file = ecore_list_first_remove(ls); |
||||
if (strncmp(file, ".", 1)) |
||||
{ |
||||
if (strcmp(directory, "/")) |
||||
{ |
||||
snprintf(path, PATH_MAX, "%s/%s",
|
||||
directory, file); |
||||
} |
||||
else |
||||
{ |
||||
snprintf(path, PATH_MAX, "%s%s",
|
||||
directory, file); |
||||
} |
||||
} |
||||
if (ecore_file_is_dir(path)) |
||||
{ |
||||
ecore_list_append(files, strdup(path)); |
||||
} |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
files = NULL; |
||||
} |
||||
ecore_list_first_goto(files); |
||||
return files; |
||||
} |
||||
|
||||
/*Populate a List of Images Inside of Directory*/ |
||||
Ecore_List *get_images(const char *directory) |
||||
{ |
||||
Ecore_List *ls, *files; |
||||
char path[PATH_MAX], *file; |
||||
|
||||
if (ecore_file_is_dir(directory)) |
||||
{ |
||||
ls = ecore_list_new(); |
||||
files = ecore_dlist_new(); |
||||
ecore_dlist_free_cb_set(files, free); |
||||
|
||||
ls = ecore_file_ls(directory); |
||||
while (!ecore_list_empty_is(ls)) |
||||
{ |
||||
file = ecore_list_first_remove(ls); |
||||
if (strncmp(file, ".", 1)) |
||||
{ |
||||
const char *type; |
||||
|
||||
if (strcmp(directory, "/")) |
||||
{ |
||||
snprintf(path, PATH_MAX, "%s/%s", |
||||
directory, file); |
||||
} |
||||
else |
||||
{ |
||||
snprintf(path, PATH_MAX, "%s%s", |
||||
directory, file); |
||||
} |
||||
type = efreet_mime_type_get(strdup(path)); |
||||
if ((ecore_hash_get(em->types, type)) == "image") |
||||
{ |
||||
ecore_dlist_append(files, strdup(path)); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
files = NULL; |
||||
} |
||||
ecore_dlist_first_goto(files); |
||||
return files; |
||||
} |
@ -1,440 +0,0 @@ |
||||
#include "ephoto.h" |
||||
|
||||
/*Ephoto Image Manipulation*/ |
||||
static void add_standard_edit_tools(Ewl_Widget *c); |
||||
static void add_advanced_edit_tools(Ewl_Widget *c); |
||||
static void previous_image(Ewl_Widget *w, void *event, void *data); |
||||
static void next_image(Ewl_Widget *w, void *event, void *data); |
||||
static void zoom_in(Ewl_Widget *w, void *event, void *data); |
||||
static void zoom_out(Ewl_Widget *w, void *event, void *data); |
||||
static void flip_image_horizontal(Ewl_Widget *w, void *event, void *data); |
||||
static void flip_image_vertical(Ewl_Widget *w, void *event, void *data); |
||||
static void rotate_image_left(Ewl_Widget *w, void *event, void *data); |
||||
static void rotate_image_right(Ewl_Widget *w, void *event, void *data); |
||||
static void image_blur(Ewl_Widget *w, void *event, void *data); |
||||
static void image_sharpen(Ewl_Widget *w, void *event, void *data); |
||||
static void image_grayscale(Ewl_Widget *w, void *event, void *data); |
||||
static void image_sepia(Ewl_Widget *w, void *event, void *data); |
||||
static void close_channel(Ewl_Widget *w, void *event, void *data); |
||||
static void channel_mixer(Ewl_Widget *w, void *event, void *data); |
||||
|
||||
/*Add the edit view*/ |
||||
Ewl_Widget *add_edit_view(Ewl_Widget *c) |
||||
{ |
||||
Ewl_Widget *button, *vbox, *ibox, *hbox, *bhbox, *nb; |
||||
Ewl_Widget *standard, *advanced; |
||||
|
||||
em->edit_vbox = add_box(c, EWL_ORIENTATION_VERTICAL, 2); |
||||
ewl_object_fill_policy_set(EWL_OBJECT(em->edit_vbox), EWL_FLAG_FILL_ALL); |
||||
|
||||
hbox = add_box(em->edit_vbox, EWL_ORIENTATION_HORIZONTAL, 2); |
||||
ewl_object_fill_policy_set(EWL_OBJECT(hbox), EWL_FLAG_FILL_ALL); |
||||
|
||||
nb = ewl_notebook_new(); |
||||
ewl_object_fill_policy_set(EWL_OBJECT(nb), EWL_FLAG_FILL_VFILL | EWL_FLAG_FILL_HSHRINK); |
||||
ewl_container_child_append(EWL_CONTAINER(hbox), nb); |
||||
ewl_widget_show(nb); |
||||
|
||||
standard = add_box(nb, EWL_ORIENTATION_VERTICAL, 2); |
||||
ewl_object_maximum_w_set(EWL_OBJECT(standard), 172); |
||||
ewl_object_minimum_w_set(EWL_OBJECT(standard), 172); |
||||
ewl_object_fill_policy_set(EWL_OBJECT(standard), EWL_FLAG_FILL_VFILL); |
||||
ewl_notebook_page_tab_text_set(EWL_NOTEBOOK(nb), standard, _("Standard Tools"));
|
||||
|
||||
add_standard_edit_tools(standard); |
||||
|
||||
advanced = add_box(nb, EWL_ORIENTATION_VERTICAL, 2); |
||||
ewl_object_maximum_w_set(EWL_OBJECT(advanced), 172); |
||||
ewl_object_minimum_w_set(EWL_OBJECT(advanced), 172); |
||||
ewl_object_fill_policy_set(EWL_OBJECT(advanced), EWL_FLAG_FILL_VFILL); |
||||
ewl_notebook_page_tab_text_set(EWL_NOTEBOOK(nb), advanced, _("Advanced Tools")); |
||||
|
||||
add_advanced_edit_tools(advanced); |
||||
|
||||
vbox = add_box(hbox, EWL_ORIENTATION_VERTICAL, 0); |
||||
ewl_object_fill_policy_set(EWL_OBJECT(vbox), EWL_FLAG_FILL_ALL); |
||||
|
||||
ibox = ewl_cell_new(); |
||||
ewl_object_fill_policy_set(EWL_OBJECT(ibox), EWL_FLAG_FILL_ALL); |
||||
ewl_container_child_append(EWL_CONTAINER(vbox), ibox); |