Enlightenment CVS committal
Author : pfritz
Project : e17
Module : libs/ewl
Dir : e17/libs/ewl/src/lib
Modified Files:
ewl_box.c ewl_cell.c ewl_container.c ewl_freebox.c ewl_grid.c
ewl_highlight.c ewl_overlay.c ewl_paned.c ewl_tree.c
ewl_widget.c ewl_widget.h
Log Message:
add unmanaged flag, this indicates that a container should ignore a child
because it manages its placement etc. itself
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_box.c,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -3 -r1.51 -r1.52
--- ewl_box.c 15 Feb 2008 23:30:03 -0000 1.51
+++ ewl_box.c 15 Feb 2008 23:52:22 -0000 1.52
@@ -239,8 +239,10 @@
c = EWL_CONTAINER(b);
ecore_dlist_first_goto(c->children);
- while ((child = ecore_dlist_next(c->children)))
- ewl_box_cb_child_show(c, child);
+ while ((child = ecore_dlist_next(c->children))) {
+ if (!UNMANAGED(child))
+ ewl_box_cb_child_show(c, child);
+ }
ewl_widget_configure(EWL_WIDGET(b));
@@ -599,7 +601,7 @@
int change;
unsigned int policy;
- if (!VISIBLE(child))
+ if (!VISIBLE(child) || UNMANAGED(child))
continue;
/*
* Place the child on a list depending on it's matching
@@ -776,19 +778,19 @@
ecore_dlist_first_goto(EWL_CONTAINER(b)->children);
while ((child = ecore_dlist_next(EWL_CONTAINER(b)->children))) {
- if (VISIBLE(child)) {
+ if (!VISIBLE(child) || UNMANAGED(child))
+ continue;
- /*
- * Position this child based on the determined values.
- */
- ewl_box_configure_child(b, child, x, y, align,
- align_size);
+ /*
+ * Position this child based on the determined values.
+ */
+ ewl_box_configure_child(b, child, x, y, align,
+ align_size);
- /*
- * Move to the next position for the child.
- */
- *fill += ewl_box_info->fill_ask(child) + b->spacing;
- }
+ /*
+ * Move to the next position for the child.
+ */
+ *fill += ewl_box_info->fill_ask(child) + b->spacing;
}
DLEAVE_FUNCTION(DLEVEL_STABLE);
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_cell.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -3 -r1.19 -r1.20
--- ewl_cell.c 12 Nov 2007 22:42:22 -0000 1.19
+++ ewl_cell.c 15 Feb 2008 23:52:22 -0000 1.20
@@ -82,7 +82,11 @@
c = EWL_CONTAINER(w);
- child = ecore_dlist_first_goto(c->children);
+ /* we need to skip all unmanaged widgets first */
+ ecore_dlist_first_goto(c->children);
+ while ((child = ecore_dlist_next(c->children)) && UNMANAGED(child))
+ ;
+
if (child)
ewl_object_place(child, CURRENT_X(w), CURRENT_Y(w),
CURRENT_W(w), CURRENT_H(w));
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_container.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -3 -r1.69 -r1.70
--- ewl_container.c 24 Jan 2008 00:51:22 -0000 1.69
+++ ewl_container.c 15 Feb 2008 23:52:22 -0000 1.70
@@ -1097,6 +1097,10 @@
DCHECK_TYPE(c, EWL_CONTAINER_TYPE);
DCHECK_TYPE(w, EWL_WIDGET_TYPE);
+ /* ignore unmanaged children */
+ if (UNMANAGED(w))
+ DRETURN(DLEVEL_STABLE);
+
if (c->child_add)
c->child_add(c, w);
@@ -1122,6 +1126,10 @@
/* do nothing if the container is being destroyed */
if (DESTROYED(c))
DRETURN(DLEVEL_STABLE);
+
+ /* ignore unmanaged children */
+ if (UNMANAGED(w))
+ DRETURN(DLEVEL_STABLE);
if (c->child_remove)
c->child_remove(c, w, idx);
@@ -1144,6 +1152,10 @@
DCHECK_TYPE(c, EWL_CONTAINER_TYPE);
DCHECK_TYPE(w, EWL_WIDGET_TYPE);
+ /* ignore unmanaged children */
+ if (UNMANAGED(w))
+ DRETURN(DLEVEL_STABLE);
+
c->visible_children++;
if (c->child_show)
c->child_show(c, w);
@@ -1173,6 +1185,10 @@
DCHECK_PARAM_PTR(w);
DCHECK_TYPE(c, EWL_CONTAINER_TYPE);
DCHECK_TYPE(w, EWL_WIDGET_TYPE);
+
+ /* ignore unmanaged children */
+ if (UNMANAGED(w))
+ DRETURN(DLEVEL_STABLE);
/* do nothing if the container is being destroyed */
if (DESTROYED(c))
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_freebox.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -3 -r1.26 -r1.27
--- ewl_freebox.c 11 Dec 2007 21:38:33 -0000 1.26
+++ ewl_freebox.c 15 Feb 2008 23:52:22 -0000 1.27
@@ -393,7 +393,7 @@
ecore_dlist_first_goto(c->children);
while ((child = ecore_dlist_next(c->children)))
{
- if (!VISIBLE(child)) continue;
+ if (!VISIBLE(child) || UNMANAGED(child)) continue;
ewl_object_preferred_size_get(EWL_OBJECT(child),
&child_w, &child_h);
@@ -418,7 +418,7 @@
ecore_dlist_first_goto(c->children);
while ((child = ecore_dlist_next(c->children)))
{
- if (!VISIBLE(child)) continue;
+ if (!VISIBLE(child) || UNMANAGED(child)) continue;
ewl_object_preferred_size_get(EWL_OBJECT(child),
&child_w, &child_h);
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_grid.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -3 -r1.43 -r1.44
--- ewl_grid.c 12 Nov 2007 22:42:22 -0000 1.43
+++ ewl_grid.c 15 Feb 2008 23:52:22 -0000 1.44
@@ -476,6 +476,9 @@
ecore_dlist_first_goto(EWL_CONTAINER(g)->children);
while ((c = ecore_dlist_next(EWL_CONTAINER(g)->children))
&& c != w) {
+ if (UNMANAGED(child))
+ continue;
+
if (!ewl_widget_data_get(c, g))
go_next(g, &col, &row);
}
@@ -923,6 +926,9 @@
ecore_dlist_first_goto(EWL_CONTAINER(w)->children);
while ((child = ecore_dlist_next(EWL_CONTAINER(w)->children))) {
+ if (UNMANAGED(child))
+ continue;
+
c = (Ewl_Grid_Child *)ewl_widget_data_get(child, (void *) g);
if (c) {
/*
@@ -1015,6 +1021,9 @@
ecore_dlist_first_goto(EWL_CONTAINER(g)->children);
while ((child = ecore_dlist_next(EWL_CONTAINER(g)->children))) {
+ if (UNMANAGED(child))
+ continue;
+
c = (Ewl_Grid_Child *) ewl_widget_data_get(child, (void *)g);
if (!c) continue;
@@ -1068,6 +1077,9 @@
while ((child = ecore_dlist_next(EWL_CONTAINER(g)->children))) {
int pref_w, pref_h;
+ if (UNMANAGED(child))
+ continue;
+
c = (Ewl_Grid_Child *) ewl_widget_data_get(child, (void *) g);
if (c) continue;
@@ -1091,6 +1103,9 @@
while ((child = ecore_dlist_next(EWL_CONTAINER(g)->children))) {
int pref_w = 0, pref_h = 0;
int i;
+
+ if (UNMANAGED(child))
+ continue;
c = (Ewl_Grid_Child *) ewl_widget_data_get(child, (void *) g);
if (!c) continue;
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_highlight.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- ewl_highlight.c 12 Nov 2007 22:42:22 -0000 1.9
+++ ewl_highlight.c 15 Feb 2008 23:52:22 -0000 1.10
@@ -7,6 +7,10 @@
static void ewl_highlight_cb_follow_configure(Ewl_Widget *w,
void *ev, void *data);
+static void ewl_highlight_cb_follow_reveal(Ewl_Widget *w,
+ void *ev, void *data);
+static void ewl_highlight_cb_follow_obscure(Ewl_Widget *w,
+ void *ev, void *data);
static void ewl_highlight_cb_follow_destroy(Ewl_Widget *w,
void *ev, void *data);
static void ewl_highlight_cb_destroy(Ewl_Widget *w, void *ev, void *data);
@@ -52,6 +56,7 @@
ewl_widget_appearance_set(EWL_WIDGET(h), EWL_HIGHLIGHT_TYPE);
ewl_widget_inherit(EWL_WIDGET(h), EWL_HIGHLIGHT_TYPE);
ewl_widget_internal_set(EWL_WIDGET(h), TRUE);
+ ewl_widget_unmanaged_set(EWL_WIDGET(h), TRUE);
ewl_widget_layer_top_set(EWL_WIDGET(h), TRUE);
DRETURN_INT(TRUE, DLEVEL_STABLE);
@@ -77,12 +82,18 @@
ewl_highlight_cb_follow_destroy, h);
ewl_callback_append(w, EWL_CALLBACK_CONFIGURE,
ewl_highlight_cb_follow_configure, h);
+ ewl_callback_append(w, EWL_CALLBACK_REVEAL,
+ ewl_highlight_cb_follow_reveal, h);
+ ewl_callback_append(w, EWL_CALLBACK_OBSCURE,
+ ewl_highlight_cb_follow_obscure, h);
/* prepend this so we can use the floater follow set call to cleanup
* floater stuff */
ewl_callback_prepend(EWL_WIDGET(h), EWL_CALLBACK_DESTROY,
ewl_highlight_cb_destroy, w);
+ ewl_widget_configure(w);
+
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
@@ -119,6 +130,32 @@
}
static void
+ewl_highlight_cb_follow_reveal(Ewl_Widget *w __UNUSED__, void *ev __UNUSED__,
+ void *data)
+{
+ DENTER_FUNCTION(DLEVEL_STABLE);
+ DCHECK_PARAM_PTR(data);
+ DCHECK_TYPE(data, EWL_HIGHLIGHT_TYPE);
+
+ ewl_widget_show(EWL_WIDGET(data));
+
+ DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+static void
+ewl_highlight_cb_follow_obscure(Ewl_Widget *w __UNUSED__, void *ev __UNUSED__,
+ void *data)
+{
+ DENTER_FUNCTION(DLEVEL_STABLE);
+ DCHECK_PARAM_PTR(data);
+ DCHECK_TYPE(data, EWL_HIGHLIGHT_TYPE);
+
+ ewl_widget_hide(EWL_WIDGET(data));
+
+ DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+static void
ewl_highlight_cb_follow_destroy(Ewl_Widget *w __UNUSED__,
void *ev __UNUSED__, void *data)
{
@@ -146,6 +183,11 @@
ewl_floater_follow_set(EWL_FLOATER(w), NULL);
ewl_callback_del(EWL_WIDGET(data), EWL_CALLBACK_CONFIGURE,
ewl_highlight_cb_follow_configure);
+ ewl_callback_del(EWL_WIDGET(data), EWL_CALLBACK_REVEAL,
+ ewl_highlight_cb_follow_reveal);
+ ewl_callback_del(EWL_WIDGET(data), EWL_CALLBACK_OBSCURE,
+ ewl_highlight_cb_follow_obscure);
+
ewl_callback_del(EWL_WIDGET(data), EWL_CALLBACK_DESTROY,
ewl_highlight_cb_follow_destroy);
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_overlay.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -3 -r1.24 -r1.25
--- ewl_overlay.c 5 Dec 2007 16:44:53 -0000 1.24
+++ ewl_overlay.c 15 Feb 2008 23:52:22 -0000 1.25
@@ -94,6 +94,9 @@
ecore_dlist_first_goto(EWL_CONTAINER(w)->children);
while ((child = ecore_dlist_next(EWL_CONTAINER(w)->children))) {
int width, height;
+ /* ignore unmanaged widgets */
+ if (UNMANAGED(child))
+ continue;
/*
* Try to give the child the full size of the overlay from it's
* base position. The object will constrict it based on the
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_paned.c,v
retrieving revision 1.65
retrieving revision 1.66
diff -u -3 -r1.65 -r1.66
--- ewl_paned.c 5 Jan 2008 20:35:21 -0000 1.65
+++ ewl_paned.c 15 Feb 2008 23:52:22 -0000 1.66
@@ -592,7 +592,7 @@
if (left) g = child;
ewl_widget_hide(child);
}
- else if (VISIBLE(child))
+ else if (VISIBLE(child) && !UNMANAGED(child))
{
left = 1;
@@ -630,7 +630,8 @@
ecore_dlist_first_goto(c->children);
while ((child = ecore_dlist_next(c->children)))
{
- if (!VISIBLE(child) || EWL_PANED_GRABBER_IS(child))
+ if (!VISIBLE(child) || EWL_PANED_GRABBER_IS(child)
+ || UNMANAGED(child))
continue;
panes->info = ewl_paned_size_info_get(p, child);
@@ -682,7 +683,7 @@
{
int pos;
- if (!VISIBLE(child))
+ if (!VISIBLE(child) || UNMANAGED(child))
continue;
if (!EWL_PANED_GRABBER_IS(child))
{
@@ -828,7 +829,7 @@
ecore_dlist_first_goto(c->children);
while ((child = ecore_dlist_next(c->children)))
{
- if (!VISIBLE(child))
+ if (!VISIBLE(child) || UNMANAGED(child))
continue;
if (EWL_PANED_GRABBER_IS(child))
@@ -1203,7 +1204,7 @@
ecore_dlist_previous(c->children);
while ((child = ecore_dlist_previous(c->children)))
{
- if (!VISIBLE(child)) continue;
+ if (!VISIBLE(child) || UNMANAGED(child)) continue;
if (EWL_PANED_GRABBER_IS(child))
{
@@ -1230,7 +1231,7 @@
ecore_dlist_next(c->children);
while ((child = ecore_list_next(c->children)))
{
- if (!VISIBLE(child)) continue;
+ if (!VISIBLE(child) || UNMANAGED(child)) continue;
if (EWL_PANED_GRABBER_IS(child)) {
stop_grabber = EWL_PANED_GRABBER(child);
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_tree.c,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -3 -r1.58 -r1.59
--- ewl_tree.c 24 Jan 2008 00:51:22 -0000 1.58
+++ ewl_tree.c 15 Feb 2008 23:52:22 -0000 1.59
@@ -1177,7 +1177,8 @@
ecore_dlist_first_goto(EWL_CONTAINER(node)->children);
while ((child = ecore_dlist_next(EWL_CONTAINER(node)->children)))
{
- if ((child != node->handle) && (child != EWL_WIDGET(node->row)))
+ if ((child != node->handle) && (child != EWL_WIDGET(node->row))
+ && !UNMANAGED(child))
ecore_list_append(tmp, child);
}
@@ -1259,7 +1260,8 @@
ecore_dlist_first_goto(EWL_CONTAINER(node)->children);
while ((child = ecore_dlist_next(EWL_CONTAINER(node)->children)))
{
- if ((child != node->handle) && (child != EWL_WIDGET(node->row)))
+ if ((child != node->handle) && (child != EWL_WIDGET(node->row))
+ && !UNMANAGED(child))
ecore_list_append(tmp, child);
}
@@ -1317,7 +1319,6 @@
c = EWL_CONTAINER(w);
if (!c->children) DRETURN(DLEVEL_STABLE);
- ecore_dlist_first_goto(c->children);
x = CURRENT_X(w);
y = CURRENT_Y(w);
@@ -1333,9 +1334,11 @@
/*
* All subsequent children are lower nodes and rows.
*/
+ ecore_dlist_first_goto(c->children);
while ((child = ecore_dlist_next(c->children)))
{
- if (VISIBLE(child) && EWL_WIDGET(child) != node->handle)
+ if (VISIBLE(child) && EWL_WIDGET(child) != node->handle
+ && !UNMANAGED(child))
{
ewl_object_geometry_request(child, x, y, CURRENT_W(w) -
hw,
ewl_object_preferred_h_get(child));
@@ -1452,7 +1455,7 @@
if (w == node->handle)
DRETURN(DLEVEL_STABLE);
- if (ecore_dlist_count(c->children) < 3)
+ if (ewl_container_child_count_visible_get(c) < 3)
{
if (node->handle && VISIBLE(node->handle))
ewl_widget_hide(node->handle);
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_widget.c,v
retrieving revision 1.156
retrieving revision 1.157
diff -u -3 -r1.156 -r1.157
--- ewl_widget.c 13 Jan 2008 00:48:20 -0000 1.156
+++ ewl_widget.c 15 Feb 2008 23:52:22 -0000 1.157
@@ -1607,6 +1607,39 @@
}
/**
+ * @internal
+ * @param w: the widget to mark as unmanaged
+ * @param val: a boolean to indicate the state of the unmanaged flag
+ * @return Returns no value.
+ * @brief Marks a widget to be ignored by the parent container.
+ *
+ * A widget marked as unmanaged will not be placed by the container. This
+ * is important for widget that manage to place them self like a floater.
+ * Nevertheless the widget will recieve events through the parent and shares
+ * the same layer with its sibling widgets. In most cases you also want to
+ * set it as internal.
+ *
+ * Note: You cannot change the unmanaged state if the widget already has
+ * a parent.
+ */
+void
+ewl_widget_unmanaged_set(Ewl_Widget *w, unsigned int val)
+{
+ DENTER_FUNCTION(DLEVEL_STABLE);
+ DCHECK_PARAM_PTR(w);
+ DCHECK_TYPE(w, EWL_WIDGET_TYPE);
+
+ if (w->parent) {
+ DWARNING("It is not possible to change the unmanage state "
+ "of a widget that has already a parent!\n");
+ DRETURN(DLEVEL_STABLE);
+ }
+ UNMANAGED(w) = !!val;
+
+ DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+/**
* @param widget: the widget to set the inheritance on
* @param inherit: the string to append to the inheritance
* @return Returns no value.
@@ -1737,6 +1770,22 @@
DRETURN_INT(TRUE, DLEVEL_STABLE);
DRETURN_INT(FALSE, DLEVEL_STABLE);
+}
+
+/**
+ * @internal
+ * @param w: the widget to query the state of the unmanaged flag
+ * @return Returns TRUE if the widget is marked unmanaged, otherwise FALSE.
+ * @brief Checks the widget for the internal flag.
+ */
+unsigned int
+ewl_widget_unmanaged_is(Ewl_Widget *w)
+{
+ DENTER_FUNCTION(DLEVEL_STABLE);
+ DCHECK_PARAM_PTR_RET(w, FALSE);
+ DCHECK_TYPE_RET(w, EWL_WIDGET_TYPE, FALSE);
+
+ DRETURN_INT(UNMANAGED(w), DLEVEL_STABLE);
}
/**
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_widget.h,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -3 -r1.68 -r1.69
--- ewl_widget.h 11 Nov 2007 06:07:46 -0000 1.68
+++ ewl_widget.h 15 Feb 2008 23:52:22 -0000 1.69
@@ -153,11 +153,14 @@
const char *appearance; /**< Key to lookup appearance in theme */
const char *inheritance; /**< Inheritance of path widget */
int layer; /**< the layer relative to the parent */
- int toplayered; /**< Indicates if the widget should
- be on the top of the layer
stack */
Ecore_Hash *theme; /**< Overriding theme settings */
Ewl_Pair_List theme_text; /**< Overriding text in theme */
+
+ unsigned char toplayered:1; /**< Indicates if the widget should
+ be on the top of the layer stack */
+ unsigned char unmanaged:1;
+
};
Ewl_Widget *ewl_widget_new(void);
@@ -220,6 +223,9 @@
void ewl_widget_internal_set(Ewl_Widget *w, unsigned int val);
unsigned int ewl_widget_internal_is(Ewl_Widget *w);
+void ewl_widget_unmanaged_set(Ewl_Widget *w, unsigned int val);
+unsigned int ewl_widget_unmanaged_is(Ewl_Widget *w);
+
void ewl_widget_clipped_set(Ewl_Widget *w, unsigned int val);
unsigned int ewl_widget_clipped_is(Ewl_Widget *w);
@@ -245,6 +251,9 @@
unsigned int *b,
unsigned int *a);
int ewl_widget_parent_of(Ewl_Widget *c, Ewl_Widget *w);
+
+
+#define UNMANAGED(w) (EWL_WIDGET(w)->unmanaged)
/*
* Internally used callbacks, override at your own risk.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs