Enlightenment CVS committal
Author : rbdpngn
Project : e17
Module : libs/ewl
Dir : e17/libs/ewl/src
Modified Files:
ewl_box.c ewl_container.c ewl_entry.c ewl_entry.h ewl_misc.c
ewl_misc.h ewl_notebook.c ewl_overlay.c ewl_paned.c ewl_row.c
ewl_widget.c ewl_window.c
Log Message:
Fix incorrect top level flag on overlay.
Rearrange show/hide/resize notifications.
Change the way insets and padding are set to prevent widgets growing on
remove/add.
Use no fill policy on the notebook tab box in order to allow alignment.
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_box.c,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -3 -r1.75 -r1.76
--- ewl_box.c 14 Dec 2004 00:33:17 -0000 1.75
+++ ewl_box.c 24 Dec 2004 22:16:40 -0000 1.76
@@ -1,4 +1,3 @@
-
#include <Ewl.h>
typedef struct
@@ -114,11 +113,9 @@
DRETURN_INT(FALSE, DLEVEL_STABLE);
}
- ewl_container_add_notify_set(EWL_CONTAINER(b), ewl_box_child_add_cb);
- ewl_container_remove_notify_set(EWL_CONTAINER(b),
ewl_box_child_remove_cb);
ewl_container_resize_notify_set(EWL_CONTAINER(b),
ewl_box_child_resize_cb);
ewl_container_show_notify_set(EWL_CONTAINER(b), ewl_box_child_show_cb);
- ewl_container_hide_notify_set(EWL_CONTAINER(b), ewl_box_child_hide_cb);
+ ewl_container_hide_notify_set(EWL_CONTAINER(b), ewl_box_child_show_cb);
ewl_callback_append(w, EWL_CALLBACK_CONFIGURE, ewl_box_configure_cb,
NULL);
@@ -234,7 +231,7 @@
ewl_container_show_notify_set(EWL_CONTAINER(b),
ewl_box_child_show_cb);
ewl_container_hide_notify_set(EWL_CONTAINER(b),
- ewl_box_child_hide_cb);
+ ewl_box_child_show_cb);
}
DLEAVE_FUNCTION(DLEVEL_STABLE);
@@ -659,43 +656,37 @@
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
-void
-ewl_box_child_add_cb(Ewl_Container * c, Ewl_Widget * w)
-{
-}
-
-void
-ewl_box_child_remove_cb(Ewl_Container * c, Ewl_Widget * w)
-{
-}
-
/*
* When a child gets added to the box update it's size.
*/
void
ewl_box_child_show_cb(Ewl_Container * c, Ewl_Widget * w)
{
- int size, space = 0;
+ int nodes, space = 0;
DENTER_FUNCTION(DLEVEL_STABLE);
- if (ecore_list_nodes(c->children) > 1)
- space = EWL_BOX(c)->spacing;
+ nodes = ecore_list_nodes(c->children) - 1;
+ if (nodes < 0)
+ nodes = 0;
+ space = EWL_BOX(c)->spacing * nodes;
/*
* Base the info used on the orientation of the box.
*/
if (EWL_BOX(c)->orientation == EWL_ORIENTATION_HORIZONTAL) {
- size = PREFERRED_W(c) +
- ewl_object_preferred_w_get(EWL_OBJECT(w)) + space;
- ewl_object_preferred_inner_w_set(EWL_OBJECT(c), size);
+ int width;
+ ewl_container_sum_prefer(c, EWL_ORIENTATION_HORIZONTAL);
ewl_container_largest_prefer(c, EWL_ORIENTATION_VERTICAL);
+ width = ewl_object_preferred_inner_w_get(EWL_OBJECT(c));
+ ewl_object_preferred_inner_w_set(EWL_OBJECT(c), width + space);
}
else {
- size = PREFERRED_H(c) +
- ewl_object_preferred_h_get(EWL_OBJECT(w)) + space;
- ewl_object_preferred_inner_h_set(EWL_OBJECT(c), size);
+ int height;
+ ewl_container_sum_prefer(c, EWL_ORIENTATION_VERTICAL);
ewl_container_largest_prefer(c, EWL_ORIENTATION_HORIZONTAL);
+ height = ewl_object_preferred_inner_h_get(EWL_OBJECT(c));
+ ewl_object_preferred_inner_h_set(EWL_OBJECT(c), height + space);
}
DLEAVE_FUNCTION(DLEVEL_STABLE);
@@ -743,7 +734,6 @@
PREFERRED_W(c) -
ewl_object_preferred_w_get(EWL_OBJECT(w)) -
space);
-
ewl_container_largest_prefer(c, EWL_ORIENTATION_VERTICAL);
}
else {
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_container.c,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -3 -r1.81 -r1.82
--- ewl_container.c 9 Dec 2004 05:26:09 -0000 1.81
+++ ewl_container.c 24 Dec 2004 22:16:41 -0000 1.82
@@ -164,7 +164,7 @@
DCHECK_PARAM_PTR("pc", pc);
DCHECK_PARAM_PTR("child", child);
- if (pc == child->parent)
+ if (pc == EWL_CONTAINER(child->parent))
DRETURN(DLEVEL_STABLE);
if (ewl_container_parent_of(child, EWL_WIDGET(pc))) {
@@ -197,7 +197,7 @@
DCHECK_PARAM_PTR("pc", pc);
DCHECK_PARAM_PTR("child", child);
- if (pc == child->parent)
+ if (pc == EWL_CONTAINER(child->parent))
DRETURN(DLEVEL_STABLE);
if (ewl_container_parent_of(child, EWL_WIDGET(pc))) {
@@ -233,7 +233,7 @@
DCHECK_PARAM_PTR("pc", pc);
DCHECK_PARAM_PTR("child", child);
- if (pc == child->parent)
+ if (pc == EWL_CONTAINER(child->parent))
DRETURN(DLEVEL_STABLE);
if (ewl_container_parent_of(child, EWL_WIDGET(pc))) {
@@ -327,8 +327,8 @@
DCHECK_PARAM_PTR("w", w);
- if (!size || ewl_object_queued_has(EWL_OBJECT(w),
- EWL_FLAG_QUEUED_RSCHEDULED) || !REALIZED(w))
+ if (!size || !REALIZED(w) || ewl_object_queued_has(EWL_OBJECT(w),
+ EWL_FLAG_QUEUED_RSCHEDULED))
DRETURN(DLEVEL_STABLE);
c = EWL_CONTAINER(w->parent);
@@ -1008,6 +1008,7 @@
void ewl_container_unrealize_cb(Ewl_Widget *w, void *ev_data, void *user_data)
{
Ewl_Container *c;
+ Ewl_Widget *child;
DENTER_FUNCTION(DLEVEL_STABLE);
@@ -1021,5 +1022,16 @@
c->clip_box = NULL;
}
+ /*
+ * FIXME: If called from a destroy callback, the child list may not
+ * exist at this point. Is this legitimate ordering?
+ */
+ if (c->children) {
+ ecore_list_goto_first(c->children);
+ while ((child = ecore_list_next(c->children))) {
+ ewl_widget_unrealize(child);
+ }
+ }
+
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_entry.c,v
retrieving revision 1.122
retrieving revision 1.123
diff -u -3 -r1.122 -r1.123
--- ewl_entry.c 21 Dec 2004 01:21:33 -0000 1.122
+++ ewl_entry.c 24 Dec 2004 22:16:41 -0000 1.123
@@ -6,6 +6,7 @@
* Private functions for applying operations to the text at realize time.
*/
static void ewl_entry_ops_apply(Ewl_Entry *e);
+static void ewl_entry_ops_reset(Ewl_Entry *e);
static void ewl_entry_op_prune_list(Ewl_Entry *e, int rstart, int rend,
int bstart, int bend);
static void ewl_entry_op_free(void *data);
@@ -105,11 +106,6 @@
e->in_select_mode = FALSE;
e->multiline = FALSE;
- ewl_container_show_notify_set(EWL_CONTAINER(w),
- ewl_entry_child_show_cb);
- ewl_container_resize_notify_set(EWL_CONTAINER(w),
- ewl_entry_child_resize_cb);
-
ewl_object_fill_policy_set(EWL_OBJECT(w), EWL_FLAG_FILL_HSHRINK |
EWL_FLAG_FILL_HFILL);
ewl_container_callback_intercept(EWL_CONTAINER(w), EWL_CALLBACK_SELECT);
@@ -147,6 +143,10 @@
NULL);
ewl_callback_append(w, EWL_CALLBACK_UNREALIZE, ewl_entry_unrealize_cb,
NULL);
+ ewl_callback_append(w, EWL_CALLBACK_SHOW, ewl_entry_show_cb,
+ NULL);
+ ewl_callback_append(w, EWL_CALLBACK_HIDE, ewl_entry_hide_cb,
+ NULL);
ewl_callback_append(w, EWL_CALLBACK_DESTROY, ewl_entry_destroy_cb,
NULL);
ewl_callback_append(w, EWL_CALLBACK_REPARENT, ewl_entry_reparent_cb,
@@ -747,7 +747,7 @@
if (!ch)
ch = CURRENT_H(e->cursor);
- printf("Map %d(%d) of %d to %d, %d: %d x %d\n", pos, c_pos, l, cx, cy,
cw, ch);
+ /* printf("Map %d(%d) of %d to %d, %d: %d x %d\n", pos, c_pos, l, cx,
cy, cw, ch); */
ewl_object_geometry_request(EWL_OBJECT(e->cursor), cx, cy,
cw, ch);
}
@@ -768,13 +768,20 @@
* Find the embed so we know which evas to draw onto.
*/
emb = ewl_embed_widget_find(w);
+ if (!emb)
+ DRETURN(DLEVEL_STABLE);
/*
- * Create the etox
+ * Create the etox and save the context for future reference.
*/
e->etox = etox_new(emb->evas);
e->context = etox_get_context(e->etox);
+ /*
+ * Apply the default theme information to the context, this
+ * information may be altered programmatically through the operation
+ * queues.
+ */
tmp = ewl_theme_data_str_get(w, "font");
etox_context_set_font(e->context, tmp,
ewl_theme_data_int_get(w, "font_size"));
@@ -792,8 +799,6 @@
if (w->fx_clip_box)
evas_object_clip_set(e->etox, w->fx_clip_box);
-
- evas_object_show(e->etox);
ewl_entry_ops_apply(e);
/*
@@ -813,8 +818,39 @@
e = EWL_ENTRY(w);
+ /*
+ * Reset the text to initial state in order to recreate the operations
+ * if it is re-realized.
+ */
+ ewl_entry_ops_reset(e);
evas_object_clip_unset(e->etox);
evas_object_del(e->etox);
+ e->etox = NULL;
+ e->context = NULL;
+
+ DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+void ewl_entry_show_cb(Ewl_Widget *w, void *ev_data, void *user_data)
+{
+ Ewl_Entry *e;
+ DENTER_FUNCTION(DLEVEL_STABLE);
+
+ e = EWL_ENTRY(w);
+
+ evas_object_show(e->etox);
+
+ DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+void ewl_entry_hide_cb(Ewl_Widget *w, void *ev_data, void *user_data)
+{
+ Ewl_Entry *e;
+ DENTER_FUNCTION(DLEVEL_STABLE);
+
+ e = EWL_ENTRY(w);
+
+ evas_object_hide(e->etox);
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
@@ -1362,47 +1398,6 @@
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
-void
-ewl_entry_child_show_cb(Ewl_Container * c, Ewl_Widget * w)
-{
- Ewl_Entry *e;
-
- DENTER_FUNCTION(DLEVEL_STABLE);
-
- e = EWL_ENTRY(c);
-
-/* if (e->text == w) {
- ewl_object_preferred_inner_size_set(EWL_OBJECT(c),
- ewl_object_preferred_w_get(EWL_OBJECT(w)),
- ewl_object_preferred_h_get(EWL_OBJECT(w)));
- }
-*/
- DLEAVE_FUNCTION(DLEVEL_STABLE);
-}
-
-void
-ewl_entry_child_resize_cb(Ewl_Container * entry, Ewl_Widget * w, int size,
- Ewl_Orientation o)
-{
-/* Ewl_Object *text;
-*/
- DENTER_FUNCTION(DLEVEL_STABLE);
-/*
- text = EWL_OBJECT(EWL_ENTRY(entry)->text);
-
- if (w != EWL_WIDGET(text))
- DRETURN(DLEVEL_STABLE);
-
- if (o == EWL_ORIENTATION_HORIZONTAL)
- ewl_object_preferred_inner_w_set(EWL_OBJECT(entry),
- ewl_object_preferred_w_get(text));
- else
- ewl_object_preferred_inner_h_set(EWL_OBJECT(entry),
- ewl_object_preferred_h_get(text));
-*/
- DLEAVE_FUNCTION(DLEVEL_STABLE);
-}
-
static int ewl_entry_timer(void *data)
{
Ewl_Entry *e;
@@ -1628,6 +1623,16 @@
}
}
+static void ewl_entry_ops_reset(Ewl_Entry *e)
+{
+ Ewl_Entry_Op *op;
+
+ while ((op = ecore_dlist_remove_first(e->applied))) {
+ op->apply(e, op);
+ ecore_dlist_append(e->ops, op);
+ }
+}
+
static void ewl_entry_op_free(void *data)
{
Ewl_Entry_Op *op = data;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_entry.h,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -3 -r1.46 -r1.47
--- ewl_entry.h 21 Dec 2004 01:18:11 -0000 1.46
+++ ewl_entry.h 24 Dec 2004 22:16:41 -0000 1.47
@@ -240,12 +240,11 @@
void ewl_entry_update_selected_region_cb(Ewl_Widget * w, void *user_data,
void *ev_data);
-void ewl_entry_child_show_cb(Ewl_Container * c, Ewl_Widget * w);
-void ewl_entry_child_resize_cb(Ewl_Container * entry, Ewl_Widget * text,
- int size, Ewl_Orientation o);
void ewl_entry_realize_cb(Ewl_Widget * w, void *ev_data, void *user_data);
void ewl_entry_unrealize_cb(Ewl_Widget * w, void *ev_data, void *user_data);
+void ewl_entry_show_cb(Ewl_Widget *w, void *ev_data, void *user_data);
+void ewl_entry_hide_cb(Ewl_Widget *w, void *ev_data, void *user_data);
void ewl_entry_destroy_cb(Ewl_Widget * w, void *ev_data, void *user_data);
void ewl_entry_reparent_cb(Ewl_Widget * w, void *ev_data, void *user_data);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_misc.c,v
retrieving revision 1.86
retrieving revision 1.87
diff -u -3 -r1.86 -r1.87
--- ewl_misc.c 8 Dec 2004 04:16:32 -0000 1.86
+++ ewl_misc.c 24 Dec 2004 22:16:41 -0000 1.87
@@ -147,6 +147,7 @@
ewl_shutdown();
DRETURN_INT(_ewl_init_count, DLEVEL_STABLE);
}
+
if (print_theme_keys)
ewl_config.theme.print_keys = print_theme_keys;
@@ -265,7 +266,9 @@
* unnecessary work done from configuration. Then display new widgets,
* finally layout the widgets.
*/
- if (!ecore_list_is_empty(destroy_list))
+ if (!ecore_list_is_empty(destroy_list) ||
+ !ecore_list_is_empty(free_evas_list) ||
+ !ecore_list_is_empty(free_evas_object_list))
ewl_garbage_collect();
if (!ecore_list_is_empty(realize_list))
@@ -640,6 +643,25 @@
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
+/**
+ * @param w: the widget that no longer needs to be realized
+ * @return Returns no value.
+ * @brief Cancel a request to realize a widget
+ *
+ * Remove the widget @w from the list of widgets that need to be realized.
+ */
+void ewl_realize_cancel_request(Ewl_Widget *w)
+{
+ DENTER_FUNCTION(DLEVEL_TESTING);
+
+ ecore_list_goto(realize_list, w);
+
+ if (ecore_list_current(realize_list) == w)
+ ecore_list_remove(realize_list);
+
+ DLEAVE_FUNCTION(DLEVEL_TESTING);
+}
+
void ewl_realize_queue()
{
Ewl_Widget *w;
@@ -671,7 +693,7 @@
* Check visibility in case the realize callback changed it.
*/
if (VISIBLE(w))
- ewl_widget_show(w);
+ ewl_callback_call(w, EWL_CALLBACK_SHOW);
ewl_object_queued_remove(EWL_OBJECT(w),
EWL_FLAG_QUEUED_RSCHEDULED);
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_misc.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -3 -r1.28 -r1.29
--- ewl_misc.h 23 Aug 2004 00:42:12 -0000 1.28
+++ ewl_misc.h 24 Dec 2004 22:16:41 -0000 1.29
@@ -23,6 +23,7 @@
void ewl_configure_queue(void);
void ewl_configure_cancel_request(Ewl_Widget *w);
void ewl_realize_request(Ewl_Widget *w);
+void ewl_realize_cancel_request(Ewl_Widget *w);
void ewl_realize_queue(void);
void ewl_destroy_request(Ewl_Widget *w);
void ewl_garbage_collect(void);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_notebook.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -3 -r1.55 -r1.56
--- ewl_notebook.c 9 Dec 2004 05:26:09 -0000 1.55
+++ ewl_notebook.c 24 Dec 2004 22:16:41 -0000 1.56
@@ -58,6 +58,7 @@
if (!n->tab_box) {
DRETURN_INT(FALSE, DLEVEL_STABLE);
}
+ ewl_object_fill_policy_set(EWL_OBJECT(n->tab_box), EWL_FLAG_FILL_NONE);
ewl_widget_internal_set(n->tab_box, TRUE);
ewl_widget_appearance_set(n->tab_box, "tab_box");
ewl_widget_show(n->tab_box);
@@ -360,8 +361,10 @@
EWL_ORIENTATION_HORIZONTAL);
ewl_box_orientation_set(EWL_BOX(n->tab_box),
EWL_ORIENTATION_VERTICAL);
+ /*
ewl_object_fill_policy_set(EWL_OBJECT(n->tab_box),
EWL_FLAG_FILL_HSHRINK | EWL_FLAG_FILL_VFILL);
+ */
break;
case EWL_POSITION_TOP:
@@ -371,8 +374,10 @@
EWL_ORIENTATION_VERTICAL);
ewl_box_orientation_set(EWL_BOX(n->tab_box),
EWL_ORIENTATION_HORIZONTAL);
+ /*
ewl_object_fill_policy_set(EWL_OBJECT(n->tab_box),
EWL_FLAG_FILL_HFILL | EWL_FLAG_FILL_VSHRINK);
+ */
break;
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_overlay.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- ewl_overlay.c 9 Dec 2004 05:26:09 -0000 1.9
+++ ewl_overlay.c 24 Dec 2004 22:16:41 -0000 1.10
@@ -47,7 +47,6 @@
ewl_overlay_child_resize_cb);
ewl_object_fill_policy_set(EWL_OBJECT(w), EWL_FLAG_FILL_NONE);
- ewl_object_toplevel_set(EWL_OBJECT(w), EWL_FLAG_PROPERTY_TOPLEVEL);
/*
* Override the default configure callbacks since the overlay
@@ -74,7 +73,7 @@
ecore_list_goto_first(EWL_CONTAINER(w)->children);
while ((child = ecore_list_next(EWL_CONTAINER(w)->children))) {
/*
- * Try to give the child the full size of the window from it's
+ * Try to give the child the full size of the overlay from it's
* base position. The object will constrict it based on the
* fill policy. Don't add the TOP and LEFT insets since
* they've already been accounted for.
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_paned.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- ewl_paned.c 9 Dec 2004 05:26:09 -0000 1.6
+++ ewl_paned.c 24 Dec 2004 22:16:41 -0000 1.7
@@ -59,7 +59,7 @@
p->first = EWL_BOX(ewl_vbox_new());
ewl_container_child_append(EWL_CONTAINER(p), EWL_WIDGET(p->first));
- ewl_object_fill_policy_set(EWL_OBJECT(p->first), EWL_FLAG_FILL_NONE);
+ ewl_object_fill_policy_set(EWL_OBJECT(p->first), EWL_FLAG_FILL_ALL);
ewl_widget_show(EWL_WIDGET(p->first));
if (orient == EWL_ORIENTATION_HORIZONTAL)
@@ -83,7 +83,7 @@
p->second = EWL_BOX(ewl_vbox_new());
ewl_container_child_append(EWL_CONTAINER(p), EWL_WIDGET(p->second));
- ewl_object_fill_policy_set(EWL_OBJECT(p->second), EWL_FLAG_FILL_NONE);
+ ewl_object_fill_policy_set(EWL_OBJECT(p->second), EWL_FLAG_FILL_ALL);
ewl_widget_show(EWL_WIDGET(p->second));
ewl_widget_internal_set(EWL_WIDGET(p->first), TRUE);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_row.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -3 -r1.34 -r1.35
--- ewl_row.c 9 Dec 2004 05:26:09 -0000 1.34
+++ ewl_row.c 24 Dec 2004 22:16:41 -0000 1.35
@@ -32,7 +32,6 @@
int ewl_row_init(Ewl_Row *row)
{
DENTER_FUNCTION(DLEVEL_STABLE);
-
DCHECK_PARAM_PTR_RET("row", row, FALSE);
if (!ewl_container_init(EWL_CONTAINER(row), "row"))
@@ -66,7 +65,6 @@
ewl_row_header_set(Ewl_Row *row, Ewl_Row *header)
{
DENTER_FUNCTION(DLEVEL_STABLE);
-
DCHECK_PARAM_PTR("row", row);
if (row->header == header)
@@ -111,7 +109,6 @@
Ewl_Widget *found;
DENTER_FUNCTION(DLEVEL_STABLE);
-
DCHECK_PARAM_PTR_RET("row", row, NULL);
found = ecore_list_goto_index(EWL_CONTAINER(row)->children, n + 1);
@@ -209,7 +206,11 @@
void
ewl_row_destroy_cb(Ewl_Widget * w, void *ev_data, void *user_data)
{
+ DENTER_FUNCTION(DLEVEL_STABLE);
+
ewl_row_header_set(EWL_ROW(w), NULL);
+
+ DLEAVE_FUNCTION(DLEVEL_STABLE);
}
void
@@ -217,9 +218,13 @@
{
Ewl_Row *row;
+ DENTER_FUNCTION(DLEVEL_STABLE);
+
row = EWL_ROW(user_data);
ewl_object_preferred_inner_w_set(EWL_OBJECT(w), CURRENT_W(row->header));
ewl_widget_configure(EWL_WIDGET(row));
+
+ DLEAVE_FUNCTION(DLEVEL_STABLE);
}
void
@@ -227,9 +232,13 @@
{
Ewl_Row *row;
+ DENTER_FUNCTION(DLEVEL_STABLE);
+
row = EWL_ROW(user_data);
row->header = NULL;
ewl_row_header_set(row, NULL);
+
+ DLEAVE_FUNCTION(DLEVEL_STABLE);
}
void
@@ -237,11 +246,15 @@
{
Ewl_Row *row;
+ DENTER_FUNCTION(DLEVEL_STABLE);
+
row = EWL_ROW(c);
ewl_container_largest_prefer(c, EWL_ORIENTATION_VERTICAL);
ewl_object_preferred_inner_w_set(EWL_OBJECT(c), PREFERRED_W(c) +
ewl_object_preferred_w_get(EWL_OBJECT(w)));
+
+ DLEAVE_FUNCTION(DLEVEL_STABLE);
}
void
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_widget.c,v
retrieving revision 1.129
retrieving revision 1.130
diff -u -3 -r1.129 -r1.130
--- ewl_widget.c 22 Dec 2004 23:15:38 -0000 1.129
+++ ewl_widget.c 24 Dec 2004 22:16:41 -0000 1.130
@@ -12,6 +12,32 @@
int *t, int *b);
/**
+ * @param appearance: the base theme appearance string for the widget
+ * @brief Allocate a new widget with the specified appearance string
+ * @return Returns a newly allocated widget on success, NULL on failure.
+ *
+ * Do not use this function unless you know what you are doing! It is only
+ * intended to easily create custom widgets that are not containers.
+ */
+Ewl_Widget *ewl_widget_new(char *appearance)
+{
+ Ewl_Widget *w;
+
+ DENTER_FUNCTION(DLEVEL_STABLE);
+ DCHECK_PARAM_PTR_RET("appearance", appearance, NULL);
+
+ w = NEW(Ewl_Widget, 1);
+ if (w) {
+ if (!ewl_widget_init(w, appearance)) {
+ FREE(w);
+ w = NULL;
+ }
+ }
+
+ DRETURN_PTR(w, DLEVEL_STABLE);
+}
+
+/**
* @param w: the widget to initialize
* @param appearance: the key for the widgets theme appearance
* @return Returns TRUE on success, FALSE on failure.
@@ -93,6 +119,9 @@
if (REALIZED(w))
DRETURN(DLEVEL_STABLE);
+ if (ewl_object_queued_has(EWL_OBJECT(w), EWL_FLAG_QUEUED_RSCHEDULED))
+ ewl_realize_cancel_request(w);
+
/*
* The parent's realize function will get us here again.
*/
@@ -100,16 +129,11 @@
ewl_widget_realize(w->parent);
else if (w->parent || ewl_object_toplevel_get(EWL_OBJECT(w))) {
ewl_callback_call(w, EWL_CALLBACK_REALIZE);
+ ewl_object_visible_add(EWL_OBJECT(w),
+ EWL_FLAG_VISIBLE_REALIZED);
}
- /*
- * If somehow the child doesn't cause the parent to get a configure
- * request, this will catch it.
- */
- if (w->parent)
- ewl_widget_configure(w->parent);
- else
- ewl_widget_configure(w);
+ ewl_widget_show(w);
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
@@ -126,11 +150,13 @@
DENTER_FUNCTION(DLEVEL_STABLE);
DCHECK_PARAM_PTR("w", w);
+ if (ewl_object_queued_has(EWL_OBJECT(w), EWL_FLAG_QUEUED_RSCHEDULED))
+ ewl_realize_cancel_request(w);
+
if (!REALIZED(w))
DRETURN(DLEVEL_STABLE);
ewl_callback_call(w, EWL_CALLBACK_UNREALIZE);
-
ewl_object_visible_remove(EWL_OBJECT(w), EWL_FLAG_VISIBLE_REALIZED);
DLEAVE_FUNCTION(DLEVEL_STABLE);
@@ -142,42 +168,33 @@
* @brief mark a widget as visible
*
* Marks the widget as visible so that it will be displayed the next time
- * through the rendering loop.
+ * through the rendering loop. Note that the show callback may be delayed
+ * until the widget has been realized.
*/
void ewl_widget_show(Ewl_Widget * w)
{
- Ewl_Container *pc;
- unsigned int flags = 0;
-
DENTER_FUNCTION(DLEVEL_STABLE);
DCHECK_PARAM_PTR("w", w);
- pc = EWL_CONTAINER(w->parent);
- if (HIDDEN(w))
- ewl_object_visible_add(EWL_OBJECT(w), EWL_FLAG_VISIBLE_SHOWN);
+ /*
+ * Nothing to do if already visible.
+ */
+ if (VISIBLE(w))
+ DRETURN(DLEVEL_STABLE);
- if (REALIZED(w)) {
- ewl_callback_call(w, EWL_CALLBACK_SHOW);
- if (w->parent)
- ewl_container_child_show_call(EWL_CONTAINER(w->parent),
- w);
- }
- else if (pc) {
- flags = ewl_object_flags_get(EWL_OBJECT(pc),
- EWL_FLAG_QUEUED_RSCHEDULED |
- EWL_FLAG_VISIBLE_REALIZED);
- }
- else {
- flags = ewl_object_flags_get(EWL_OBJECT(w),
- EWL_FLAG_PROPERTY_TOPLEVEL);
- }
+ /*
+ * Flag that this is a visible widget
+ */
+ ewl_object_visible_add(EWL_OBJECT(w), EWL_FLAG_VISIBLE_SHOWN);
- if (flags)
+ /*
+ * If realized, go about our business, otherwise queue for realize.
+ */
+ if (REALIZED(w))
+ ewl_callback_call(w, EWL_CALLBACK_SHOW);
+ else
ewl_realize_request(w);
- if (w->parent)
- ewl_widget_configure(w->parent);
-
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
@@ -192,23 +209,19 @@
*/
void ewl_widget_hide(Ewl_Widget * w)
{
- Ewl_Container *pc;
-
DENTER_FUNCTION(DLEVEL_STABLE);
DCHECK_PARAM_PTR("w", w);
+ /*
+ * Already hidden? Then no work to be done.
+ */
if (HIDDEN(w))
DRETURN(DLEVEL_STABLE);
- pc = EWL_CONTAINER(w->parent);
- if (pc)
- ewl_container_child_hide_call(pc, w);
-
ewl_object_visible_remove(EWL_OBJECT(w), EWL_FLAG_VISIBLE_SHOWN);
- ewl_callback_call(w, EWL_CALLBACK_HIDE);
- if (w->parent)
- ewl_widget_configure(w->parent);
+ if (REALIZED(w))
+ ewl_callback_call(w, EWL_CALLBACK_HIDE);
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
@@ -229,23 +242,7 @@
if (ewl_object_queued_has(EWL_OBJECT(w), EWL_FLAG_QUEUED_DSCHEDULED))
DRETURN(DLEVEL_STABLE);
- if (last_selected == w)
- last_selected = NULL;
-
- if (last_key == w)
- last_key = NULL;
-
- if (last_focused == w)
- last_focused = NULL;
-
- if (dnd_widget == w)
- dnd_widget = NULL;
-
ewl_widget_hide(w);
-
- if (w->parent)
- ewl_container_child_remove(EWL_CONTAINER(w->parent), w);
-
ewl_destroy_request(w);
DLEAVE_FUNCTION(DLEVEL_STABLE);
@@ -512,6 +509,10 @@
tmp = tmp->parent;
}
+ /*
+ * Set this to the new parent here to avoid infinite recursion when
+ * called from ewl_container_child_remove.
+ */
w->parent = p;
/*
@@ -524,30 +525,16 @@
ewl_callback_del(w, EWL_CALLBACK_DESTROY,
ewl_widget_child_destroy_cb);
}
-
/*
* A widget that has not had a previous parent needs the parent
* destruction callback added.
*/
- if (p) {
- if (!op)
- ewl_callback_prepend(w, EWL_CALLBACK_DESTROY,
- ewl_widget_child_destroy_cb, NULL);
- if (VISIBLE(w)) {
- if (REALIZED(w)) {
- ewl_container_child_show_call(EWL_CONTAINER(p),
- w);
- }
- else {
- ewl_realize_request(w);
- }
- }
-
- ewl_widget_configure(p);
+ else if (p) {
+ ewl_callback_prepend(w, EWL_CALLBACK_DESTROY,
+ ewl_widget_child_destroy_cb, NULL);
}
- if (op)
- ewl_callback_call_with_event_data(w, EWL_CALLBACK_REPARENT, p);
+ ewl_callback_call_with_event_data(w, EWL_CALLBACK_REPARENT, p);
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
@@ -564,9 +551,7 @@
DENTER_FUNCTION(DLEVEL_STABLE);
DCHECK_PARAM_PTR("w", w);
- if (!ewl_object_state_has(EWL_OBJECT(w), EWL_FLAG_STATE_DISABLED))
- return;
- else {
+ if (ewl_object_state_has(EWL_OBJECT(w), EWL_FLAG_STATE_DISABLED)) {
ewl_object_state_remove(EWL_OBJECT(w), EWL_FLAGS_STATE_MASK);
ewl_object_state_add(EWL_OBJECT(w), EWL_FLAG_STATE_NORMAL);
ewl_callback_call(w, EWL_CALLBACK_WIDGET_ENABLE);
@@ -587,9 +572,7 @@
DENTER_FUNCTION(DLEVEL_STABLE);
DCHECK_PARAM_PTR("w", w);
- if (ewl_object_state_has(EWL_OBJECT(w), EWL_FLAG_STATE_DISABLED))
- return;
- else {
+ if (!ewl_object_state_has(EWL_OBJECT(w), EWL_FLAG_STATE_DISABLED)) {
ewl_object_state_remove(EWL_OBJECT(w), EWL_FLAGS_STATE_MASK);
ewl_object_state_add(EWL_OBJECT(w), EWL_FLAG_STATE_DISABLED);
ewl_callback_call(w, EWL_CALLBACK_WIDGET_DISABLE);
@@ -947,6 +930,8 @@
*/
void ewl_widget_show_cb(Ewl_Widget * w, void *ev_data, void *user_data)
{
+ Ewl_Container *pc;
+
DENTER_FUNCTION(DLEVEL_STABLE);
DCHECK_PARAM_PTR("w", w);
@@ -955,6 +940,10 @@
if (w->theme_object)
evas_object_show(w->theme_object);
+ pc = EWL_CONTAINER(w->parent);
+ if (pc)
+ ewl_container_child_show_call(pc, w);
+
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
@@ -963,14 +952,44 @@
*/
void ewl_widget_hide_cb(Ewl_Widget * w, void *ev_data, void *user_data)
{
+ Ewl_Container *pc;
+
DENTER_FUNCTION(DLEVEL_STABLE);
DCHECK_PARAM_PTR("w", w);
+ /*
+ * Hide the visible evas objects.
+ */
if (w->fx_clip_box)
evas_object_hide(w->fx_clip_box);
if (w->theme_object)
evas_object_hide(w->theme_object);
+ if (ewl_object_queued_has(EWL_OBJECT(w), EWL_FLAG_QUEUED_RSCHEDULED))
+ ewl_realize_cancel_request(w);
+
+ /*
+ * Notify parent of hidden state.
+ */
+ pc = EWL_CONTAINER(w->parent);
+ if (pc)
+ ewl_container_child_hide_call(pc, w);
+
+ /*
+ * Cleanup a variety of references to that can be held.
+ */
+ if (last_selected == w)
+ last_selected = NULL;
+
+ if (last_key == w)
+ last_key = NULL;
+
+ if (last_focused == w)
+ last_focused = NULL;
+
+ if (dnd_widget == w)
+ dnd_widget = NULL;
+
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
@@ -1019,29 +1038,6 @@
evas_object_clip_set(w->fx_clip_box, pc->clip_box);
/*
- * Get and save the current insets and padding of the widget, this
- * will be used to calculate any added at runtime.
- */
- if (w->theme_object) {
- ewl_widget_theme_insets_get(w, &i_l, &i_r, &i_t, &i_b);
- ewl_widget_theme_padding_get(w, &p_l, &p_r, &p_t, &p_b);
- }
-
- ewl_object_insets_get(EWL_OBJECT(w), &l, &r, &t, &b);
-
- i_l = l - i_l;
- i_r = r - i_r;
- i_t = t - i_t;
- i_b = b - i_b;
-
- ewl_object_padding_get(EWL_OBJECT(w), &l, &r, &t, &b);
-
- p_l = l - p_l;
- p_r = r - p_r;
- p_t = t - p_t;
- p_b = b - p_b;
-
- /*
* Retrieve the path to the theme file that will be loaded
* return if no file to be loaded. Also get the group name in the
* theme file.
@@ -1076,6 +1072,37 @@
if (w->bit_state)
edje_object_signal_emit(w->theme_object, w->bit_state,
"EWL");
+ ewl_widget_theme_insets_get(w, &i_l, &i_r, &i_t, &i_b);
+ ewl_widget_theme_padding_get(w, &p_l, &p_r, &p_t, &p_b);
+
+ ewl_object_insets_get(EWL_OBJECT(w), &l, &r, &t, &b);
+
+ /*
+ * Use previously set insets and padding if available.
+ */
+ if (l)
+ i_l = l;
+ if (r)
+ i_r = r;
+ if (t)
+ i_t = t;
+ if (b)
+ i_b = b;
+
+ ewl_object_padding_get(EWL_OBJECT(w), &l, &r, &t, &b);
+
+ if (l)
+ p_l = l;
+ if (r)
+ p_r = r;
+ if (t)
+ p_t = t;
+ if (b)
+ p_b = b;
+
+ /*
+ * Determine the evas layer for the objects and set clipping.
+ */
evas_object_layer_set(w->theme_object,
ewl_widget_layer_sum_get(w));
if (w->fx_clip_box)
@@ -1083,16 +1110,10 @@
evas_object_show(w->theme_object);
/*
- * Set the insets based on cached information from the
- * ebit, this can be overwritten later.
+ * Assign the relevant insets and padding.
*/
- ewl_widget_theme_insets_get(w, &l, &r, &t, &b);
- ewl_object_insets_set(EWL_OBJECT(w), l + i_l, r + i_r, t + i_t,
- b + i_b);
-
- ewl_widget_theme_padding_get(w, &l, &r, &t, &b);
- ewl_object_padding_set(EWL_OBJECT(w), l + p_l, r + p_r, t + p_t,
- b + p_b);
+ ewl_object_insets_set(EWL_OBJECT(w), i_l, i_r, i_t, i_b);
+ ewl_object_padding_set(EWL_OBJECT(w), p_l, p_r, p_t, p_b);
if (ewl_object_state_has(EWL_OBJECT(w),
EWL_FLAG_STATE_DISABLED))
@@ -1107,11 +1128,13 @@
i_t = (int)(height);
if (i_l > 0 && MINIMUM_W(w) == EWL_OBJECT_MIN_SIZE
- && i_l > EWL_OBJECT_MIN_SIZE && i_l <=
EWL_OBJECT_MAX_SIZE)
+ && i_l > EWL_OBJECT_MIN_SIZE
+ && i_l <= EWL_OBJECT_MAX_SIZE)
ewl_object_minimum_w_set(EWL_OBJECT(w), i_l);
if (i_t > 0 && MINIMUM_H(w) == EWL_OBJECT_MIN_SIZE
- && i_t > EWL_OBJECT_MIN_SIZE && i_t <=
EWL_OBJECT_MAX_SIZE)
+ && i_t > EWL_OBJECT_MIN_SIZE
+ && i_t <= EWL_OBJECT_MAX_SIZE)
ewl_object_minimum_h_set(EWL_OBJECT(w), i_t);
/*
@@ -1122,11 +1145,13 @@
i_t = (int)(height);
if (i_l > 0 && MAXIMUM_W(w) == EWL_OBJECT_MAX_SIZE
- && i_l >= EWL_OBJECT_MIN_SIZE && i_l <
EWL_OBJECT_MAX_SIZE)
+ && i_l >= EWL_OBJECT_MIN_SIZE
+ && i_l < EWL_OBJECT_MAX_SIZE)
ewl_object_maximum_w_set(EWL_OBJECT(w), i_l);
if (i_t > 0 && MAXIMUM_H(w) == EWL_OBJECT_MAX_SIZE
- && i_t >= EWL_OBJECT_MIN_SIZE && i_t <
EWL_OBJECT_MAX_SIZE)
+ && i_t >= EWL_OBJECT_MIN_SIZE
+ && i_t < EWL_OBJECT_MAX_SIZE)
ewl_object_maximum_h_set(EWL_OBJECT(w), i_t);
}
@@ -1214,45 +1239,14 @@
*/
void ewl_widget_reparent_cb(Ewl_Widget * w, void *ev_data, void *user_data)
{
- int layer;
Ewl_Container *pc;
- Ewl_Embed *emb;
- Evas *oevas = NULL;
DENTER_FUNCTION(DLEVEL_STABLE);
DCHECK_PARAM_PTR("w", w);
pc = EWL_CONTAINER(w->parent);
-
- /*
- * If the new parent is on a different evas, we must re-realize it.
- */
- if (REALIZED(w)) {
- if (w->fx_clip_box)
- oevas = evas_object_evas_get(w->fx_clip_box);
- else if (w->theme_object)
- oevas = evas_object_evas_get(w->theme_object);
-
- emb = ewl_embed_widget_find(w);
- if (!emb || oevas != emb->evas)
- ewl_widget_unrealize(w);
- else {
-
- /*
- * Set up the clip box again if necessary
- */
- if (pc && pc->clip_box && w->fx_clip_box)
- evas_object_clip_set(w->fx_clip_box,
- pc->clip_box);
-
- layer = ewl_widget_layer_sum_get(EWL_WIDGET(pc)) +
- LAYER(w);
- if (w->fx_clip_box)
- evas_object_layer_set(w->fx_clip_box, layer);
- if (w->theme_object)
- evas_object_layer_set(w->theme_object, layer);
- }
- }
+ if (REALIZED(w))
+ ewl_widget_unrealize(w);
if (pc && REALIZED(pc) && VISIBLE(w) && !REALIZED(w))
ewl_realize_request(w);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_window.c,v
retrieving revision 1.93
retrieving revision 1.94
diff -u -3 -r1.93 -r1.94
--- ewl_window.c 9 Dec 2004 05:26:11 -0000 1.93
+++ ewl_window.c 24 Dec 2004 22:16:41 -0000 1.94
@@ -508,7 +508,7 @@
else
#endif
{
- evas_free(evas);
+ ewl_evas_destroy(evas);
DRETURN(DLEVEL_STABLE);
}
@@ -548,9 +548,6 @@
embed = EWL_EMBED(w);
o = EWL_OBJECT(w);
- ewl_evas_destroy(embed->evas);
- embed->evas = NULL;
-
#ifdef HAVE_EVAS_ENGINE_SOFTWARE_X11_H
if (REALIZED(w) && strstr(EWL_WINDOW(w)->render, "x11")) {
ecore_x_window_hide((Ecore_X_Window)embed->evas_window);
@@ -562,6 +559,9 @@
#endif
IF_FREE(EWL_WINDOW(w)->render);
+ ewl_evas_destroy(embed->evas);
+ embed->evas = NULL;
+
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://productguide.itmanagersjournal.com/
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs