2005-05-06 21:34:26 -07:00
|
|
|
/*
|
|
|
|
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
|
|
|
*/
|
|
|
|
#include "e.h"
|
|
|
|
|
|
|
|
/* local subsystem functions */
|
|
|
|
static void _e_popup_free(E_Popup *pop);
|
|
|
|
static int _e_popup_cb_window_shape(void *data, int ev_type, void *ev);
|
2005-09-22 05:47:45 -07:00
|
|
|
static E_Popup *_e_popup_find_by_window(Ecore_X_Window win);
|
2008-11-14 21:12:31 -08:00
|
|
|
/*
|
2005-09-22 05:47:45 -07:00
|
|
|
static int _e_popup_cb_mouse_down(void *data, int type, void *event);
|
|
|
|
static int _e_popup_cb_mouse_up(void *data, int type, void *event);
|
|
|
|
static int _e_popup_cb_mouse_wheel(void *data, int type, void *event);
|
2008-11-14 21:12:31 -08:00
|
|
|
*/
|
2005-05-06 21:34:26 -07:00
|
|
|
|
|
|
|
/* local subsystem globals */
|
|
|
|
static Ecore_Event_Handler *_e_popup_window_shape_handler = NULL;
|
2008-11-14 21:12:31 -08:00
|
|
|
/*
|
2005-09-22 05:47:45 -07:00
|
|
|
static Ecore_Event_Handler *_e_popup_mouse_down_handler = NULL;
|
|
|
|
static Ecore_Event_Handler *_e_popup_mouse_up_handler = NULL;
|
|
|
|
static Ecore_Event_Handler *_e_popup_mouse_wheel_handler = NULL;
|
2008-11-14 21:12:31 -08:00
|
|
|
*/
|
2008-10-22 04:49:33 -07:00
|
|
|
static Eina_List *_e_popup_list = NULL;
|
2005-05-06 21:34:26 -07:00
|
|
|
|
|
|
|
/* externally accessible functions */
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2005-05-06 21:34:26 -07:00
|
|
|
e_popup_init(void)
|
|
|
|
{
|
2005-05-10 15:05:02 -07:00
|
|
|
_e_popup_window_shape_handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHAPE,
|
|
|
|
_e_popup_cb_window_shape, NULL);
|
2008-11-14 21:12:31 -08:00
|
|
|
/*
|
2009-03-16 09:24:43 -07:00
|
|
|
_e_popup_mouse_down_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
|
2005-09-22 05:47:45 -07:00
|
|
|
_e_popup_cb_mouse_down, NULL);
|
2009-03-16 09:24:43 -07:00
|
|
|
_e_popup_mouse_up_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
|
2005-09-22 05:47:45 -07:00
|
|
|
_e_popup_cb_mouse_up, NULL);
|
2009-03-16 09:24:43 -07:00
|
|
|
_e_popup_mouse_wheel_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL,
|
2005-09-22 05:47:45 -07:00
|
|
|
_e_popup_cb_mouse_wheel, NULL);
|
2008-11-14 21:12:31 -08:00
|
|
|
*/
|
2005-05-06 21:34:26 -07:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2005-05-06 21:34:26 -07:00
|
|
|
e_popup_shutdown(void)
|
|
|
|
{
|
|
|
|
E_FN_DEL(ecore_event_handler_del, _e_popup_window_shape_handler);
|
2008-11-14 21:12:31 -08:00
|
|
|
/*
|
2005-09-22 05:47:45 -07:00
|
|
|
E_FN_DEL(ecore_event_handler_del, _e_popup_mouse_down_handler);
|
|
|
|
E_FN_DEL(ecore_event_handler_del, _e_popup_mouse_up_handler);
|
|
|
|
E_FN_DEL(ecore_event_handler_del, _e_popup_mouse_wheel_handler);
|
2008-11-14 21:12:31 -08:00
|
|
|
*/
|
2005-05-06 21:34:26 -07:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Popup *
|
2005-05-06 21:34:26 -07:00
|
|
|
e_popup_new(E_Zone *zone, int x, int y, int w, int h)
|
|
|
|
{
|
|
|
|
E_Popup *pop;
|
|
|
|
|
|
|
|
pop = E_OBJECT_ALLOC(E_Popup, E_POPUP_TYPE, _e_popup_free);
|
|
|
|
if (!pop) return NULL;
|
|
|
|
pop->zone = zone;
|
|
|
|
pop->x = x;
|
|
|
|
pop->y = y;
|
|
|
|
pop->w = w;
|
|
|
|
pop->h = h;
|
|
|
|
pop->layer = 250;
|
2005-10-03 00:36:23 -07:00
|
|
|
pop->ecore_evas = e_canvas_new(e_config->evas_engine_popups, pop->zone->container->win,
|
|
|
|
pop->zone->x + pop->x, pop->zone->y + pop->y, pop->w, pop->h, 1, 1,
|
|
|
|
&(pop->evas_win), NULL);
|
2006-06-17 19:19:05 -07:00
|
|
|
/* avoid excess exposes when shaped - set damage avoid to 1 */
|
2008-01-10 23:33:57 -08:00
|
|
|
// ecore_evas_avoid_damage_set(pop->ecore_evas, 1);
|
2006-06-17 19:19:05 -07:00
|
|
|
|
2005-05-06 21:34:26 -07:00
|
|
|
e_canvas_add(pop->ecore_evas);
|
|
|
|
pop->shape = e_container_shape_add(pop->zone->container);
|
|
|
|
e_container_shape_move(pop->shape, pop->zone->x + pop->x, pop->zone->y + pop->y);
|
|
|
|
e_container_shape_resize(pop->shape, pop->w, pop->h);
|
|
|
|
pop->evas = ecore_evas_get(pop->ecore_evas);
|
|
|
|
e_container_window_raise(pop->zone->container, pop->evas_win, pop->layer);
|
|
|
|
ecore_x_window_shape_events_select(pop->evas_win, 1);
|
|
|
|
ecore_evas_name_class_set(pop->ecore_evas, "E", "_e_popup_window");
|
|
|
|
ecore_evas_title_set(pop->ecore_evas, "E Popup");
|
|
|
|
e_object_ref(E_OBJECT(pop->zone));
|
2008-10-22 04:49:33 -07:00
|
|
|
pop->zone->popups = eina_list_append(pop->zone->popups, pop);
|
|
|
|
_e_popup_list = eina_list_append(_e_popup_list, pop);
|
2005-05-06 21:34:26 -07:00
|
|
|
return pop;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-05-06 21:34:26 -07:00
|
|
|
e_popup_show(E_Popup *pop)
|
|
|
|
{
|
2005-07-11 02:19:17 -07:00
|
|
|
E_OBJECT_CHECK(pop);
|
|
|
|
E_OBJECT_TYPE_CHECK(pop, E_POPUP_TYPE);
|
2005-05-06 21:34:26 -07:00
|
|
|
if (pop->visible) return;
|
|
|
|
pop->visible = 1;
|
|
|
|
ecore_evas_show(pop->ecore_evas);
|
|
|
|
e_container_shape_show(pop->shape);
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-05-06 21:34:26 -07:00
|
|
|
e_popup_hide(E_Popup *pop)
|
|
|
|
{
|
2005-07-11 02:19:17 -07:00
|
|
|
E_OBJECT_CHECK(pop);
|
|
|
|
E_OBJECT_TYPE_CHECK(pop, E_POPUP_TYPE);
|
2005-05-06 21:34:26 -07:00
|
|
|
if (!pop->visible) return;
|
|
|
|
pop->visible = 0;
|
|
|
|
ecore_evas_hide(pop->ecore_evas);
|
|
|
|
e_container_shape_hide(pop->shape);
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-05-06 21:34:26 -07:00
|
|
|
e_popup_move(E_Popup *pop, int x, int y)
|
|
|
|
{
|
2005-07-11 02:19:17 -07:00
|
|
|
E_OBJECT_CHECK(pop);
|
|
|
|
E_OBJECT_TYPE_CHECK(pop, E_POPUP_TYPE);
|
2005-05-06 21:34:26 -07:00
|
|
|
if ((pop->x == x) && (pop->y == y)) return;
|
|
|
|
pop->x = x;
|
|
|
|
pop->y = y;
|
|
|
|
ecore_evas_move(pop->ecore_evas,
|
|
|
|
pop->zone->x + pop->x,
|
|
|
|
pop->zone->y + pop->y);
|
|
|
|
e_container_shape_move(pop->shape,
|
|
|
|
pop->zone->x + pop->x,
|
|
|
|
pop->zone->y + pop->y);
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-05-06 21:34:26 -07:00
|
|
|
e_popup_resize(E_Popup *pop, int w, int h)
|
|
|
|
{
|
2005-07-11 02:19:17 -07:00
|
|
|
E_OBJECT_CHECK(pop);
|
|
|
|
E_OBJECT_TYPE_CHECK(pop, E_POPUP_TYPE);
|
2005-05-06 21:34:26 -07:00
|
|
|
if ((pop->w == w) && (pop->h == h)) return;
|
|
|
|
pop->w = w;
|
|
|
|
pop->h = h;
|
|
|
|
ecore_evas_resize(pop->ecore_evas, pop->w, pop->h);
|
|
|
|
e_container_shape_resize(pop->shape, pop->w, pop->h);
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-05-06 21:34:26 -07:00
|
|
|
e_popup_move_resize(E_Popup *pop, int x, int y, int w, int h)
|
|
|
|
{
|
2005-07-11 02:19:17 -07:00
|
|
|
E_OBJECT_CHECK(pop);
|
|
|
|
E_OBJECT_TYPE_CHECK(pop, E_POPUP_TYPE);
|
2005-05-06 21:34:26 -07:00
|
|
|
if ((pop->x == x) && (pop->y == y) &&
|
|
|
|
(pop->w == w) && (pop->h == h)) return;
|
|
|
|
pop->x = x;
|
|
|
|
pop->y = y;
|
|
|
|
pop->w = w;
|
|
|
|
pop->h = h;
|
|
|
|
ecore_evas_move_resize(pop->ecore_evas,
|
|
|
|
pop->zone->x + pop->x,
|
|
|
|
pop->zone->y + pop->y,
|
|
|
|
pop->w, pop->h);
|
|
|
|
e_container_shape_move(pop->shape,
|
|
|
|
pop->zone->x + pop->x,
|
|
|
|
pop->zone->y + pop->y);
|
|
|
|
e_container_shape_resize(pop->shape, pop->w, pop->h);
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-10-09 07:01:57 -07:00
|
|
|
e_popup_ignore_events_set(E_Popup *pop, int ignore)
|
|
|
|
{
|
|
|
|
ecore_evas_ignore_events_set(pop->ecore_evas, ignore);
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-05-06 21:34:26 -07:00
|
|
|
e_popup_edje_bg_object_set(E_Popup *pop, Evas_Object *o)
|
|
|
|
{
|
|
|
|
const char *shape_option;
|
|
|
|
|
2005-07-11 02:19:17 -07:00
|
|
|
E_OBJECT_CHECK(pop);
|
|
|
|
E_OBJECT_TYPE_CHECK(pop, E_POPUP_TYPE);
|
2005-05-06 21:34:26 -07:00
|
|
|
shape_option = edje_object_data_get(o, "shaped");
|
|
|
|
if (shape_option)
|
|
|
|
{
|
|
|
|
if (!strcmp(shape_option, "1"))
|
|
|
|
pop->shaped = 1;
|
|
|
|
else
|
|
|
|
pop->shaped = 0;
|
2007-12-29 15:00:52 -08:00
|
|
|
if (e_config->use_composite)
|
2006-11-12 23:26:14 -08:00
|
|
|
{
|
|
|
|
ecore_evas_alpha_set(pop->ecore_evas, pop->shaped);
|
|
|
|
pop->evas_win = ecore_evas_software_x11_window_get(pop->ecore_evas);
|
|
|
|
e_container_window_raise(pop->zone->container, pop->evas_win, pop->layer);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
ecore_evas_shaped_set(pop->ecore_evas, pop->shaped);
|
2005-05-06 21:34:26 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-05-06 21:34:26 -07:00
|
|
|
e_popup_layer_set(E_Popup *pop, int layer)
|
|
|
|
{
|
2005-07-11 02:19:17 -07:00
|
|
|
E_OBJECT_CHECK(pop);
|
|
|
|
E_OBJECT_TYPE_CHECK(pop, E_POPUP_TYPE);
|
2005-05-06 21:34:26 -07:00
|
|
|
pop->layer = layer;
|
|
|
|
e_container_window_raise(pop->zone->container, pop->evas_win, pop->layer);
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-05-06 21:34:26 -07:00
|
|
|
e_popup_idler_before(void)
|
|
|
|
{
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2005-05-06 21:34:26 -07:00
|
|
|
|
|
|
|
for (l = _e_popup_list; l; l = l->next)
|
|
|
|
{
|
|
|
|
E_Popup *pop;
|
|
|
|
|
|
|
|
pop = l->data;
|
|
|
|
if (pop->need_shape_export)
|
|
|
|
{
|
2005-06-27 03:08:53 -07:00
|
|
|
Ecore_X_Rectangle *rects, *orects;
|
2005-05-06 21:34:26 -07:00
|
|
|
int num;
|
|
|
|
|
|
|
|
rects = ecore_x_window_shape_rectangles_get(pop->evas_win, &num);
|
|
|
|
if (rects)
|
|
|
|
{
|
2005-06-27 03:08:53 -07:00
|
|
|
int changed;
|
|
|
|
|
|
|
|
changed = 1;
|
|
|
|
if ((num == pop->shape_rects_num) && (pop->shape_rects))
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
|
|
|
orects = pop->shape_rects;
|
2006-04-28 18:19:56 -07:00
|
|
|
changed = 0;
|
2005-06-27 03:08:53 -07:00
|
|
|
for (i = 0; i < num; i++)
|
|
|
|
{
|
2006-04-20 04:30:25 -07:00
|
|
|
if (rects[i].x < 0)
|
|
|
|
{
|
|
|
|
rects[i].width -= rects[i].x;
|
|
|
|
rects[i].x = 0;
|
|
|
|
}
|
|
|
|
if ((rects[i].x + rects[i].width) > pop->w)
|
|
|
|
rects[i].width = rects[i].width - rects[i].x;
|
|
|
|
if (rects[i].y < 0)
|
|
|
|
{
|
|
|
|
rects[i].height -= rects[i].y;
|
|
|
|
rects[i].y = 0;
|
|
|
|
}
|
|
|
|
if ((rects[i].y + rects[i].height) > pop->h)
|
|
|
|
rects[i].height = rects[i].height - rects[i].y;
|
|
|
|
|
2005-06-27 03:08:53 -07:00
|
|
|
if ((orects[i].x != rects[i].x) ||
|
|
|
|
(orects[i].y != rects[i].y) ||
|
|
|
|
(orects[i].width != rects[i].width) ||
|
|
|
|
(orects[i].height != rects[i].height))
|
|
|
|
{
|
|
|
|
changed = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (changed)
|
|
|
|
{
|
2005-09-05 08:24:07 -07:00
|
|
|
E_FREE(pop->shape_rects);
|
2005-06-27 03:08:53 -07:00
|
|
|
pop->shape_rects = rects;
|
|
|
|
pop->shape_rects_num = num;
|
|
|
|
e_container_shape_rects_set(pop->shape, rects, num);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
free(rects);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2005-09-05 08:24:07 -07:00
|
|
|
E_FREE(pop->shape_rects);
|
2005-06-27 03:08:53 -07:00
|
|
|
pop->shape_rects = NULL;
|
|
|
|
pop->shape_rects_num = 0;
|
|
|
|
e_container_shape_rects_set(pop->shape, NULL, 0);
|
2005-05-06 21:34:26 -07:00
|
|
|
}
|
|
|
|
pop->need_shape_export = 0;
|
|
|
|
}
|
2005-06-27 03:08:53 -07:00
|
|
|
if (pop->visible)
|
|
|
|
e_container_shape_show(pop->shape);
|
2005-05-06 21:34:26 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* local subsystem functions */
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_popup_free(E_Popup *pop)
|
|
|
|
{
|
2005-09-05 08:24:07 -07:00
|
|
|
E_FREE(pop->shape_rects);
|
2005-06-27 03:08:53 -07:00
|
|
|
pop->shape_rects_num = 0;
|
2005-05-06 21:34:26 -07:00
|
|
|
e_container_shape_hide(pop->shape);
|
|
|
|
e_object_del(E_OBJECT(pop->shape));
|
|
|
|
e_canvas_del(pop->ecore_evas);
|
|
|
|
ecore_evas_free(pop->ecore_evas);
|
|
|
|
e_object_unref(E_OBJECT(pop->zone));
|
2008-10-22 04:49:33 -07:00
|
|
|
pop->zone->popups = eina_list_remove(pop->zone->popups, pop);
|
|
|
|
_e_popup_list = eina_list_remove(_e_popup_list, pop);
|
2005-05-06 21:34:26 -07:00
|
|
|
free(pop);
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
_e_popup_cb_window_shape(void *data, int ev_type, void *ev)
|
|
|
|
{
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2005-05-06 21:34:26 -07:00
|
|
|
Ecore_X_Event_Window_Shape *e;
|
|
|
|
|
|
|
|
e = ev;
|
|
|
|
for (l = _e_popup_list; l; l = l->next)
|
|
|
|
{
|
|
|
|
E_Popup *pop;
|
|
|
|
|
|
|
|
pop = l->data;
|
|
|
|
if (pop->evas_win == e->win)
|
|
|
|
pop->need_shape_export = 1;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
2005-09-22 05:47:45 -07:00
|
|
|
|
|
|
|
static E_Popup *
|
|
|
|
_e_popup_find_by_window(Ecore_X_Window win)
|
|
|
|
{
|
|
|
|
E_Popup *pop;
|
2008-10-22 04:49:33 -07:00
|
|
|
Eina_List *l;
|
2005-09-22 05:47:45 -07:00
|
|
|
|
|
|
|
for (l = _e_popup_list; l; l = l->next)
|
|
|
|
{
|
|
|
|
pop = l->data;
|
|
|
|
if (pop->evas_win == win) return pop;
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
2008-11-14 21:12:31 -08:00
|
|
|
/*
|
2005-09-22 05:47:45 -07:00
|
|
|
static int
|
|
|
|
_e_popup_cb_mouse_down(void *data, int type, void *event)
|
|
|
|
{
|
2009-03-16 09:24:43 -07:00
|
|
|
Ecore_Event_Mouse_Button *ev;
|
2005-09-22 05:47:45 -07:00
|
|
|
E_Popup *pop;
|
|
|
|
|
|
|
|
ev = event;
|
2009-03-16 09:24:43 -07:00
|
|
|
pop = _e_popup_find_by_window(ev->event_window);
|
2005-09-22 05:47:45 -07:00
|
|
|
if (pop)
|
|
|
|
{
|
|
|
|
Evas_Button_Flags flags = EVAS_BUTTON_NONE;
|
|
|
|
|
|
|
|
e_bindings_mouse_down_event_handle(E_BINDING_CONTEXT_POPUP,
|
|
|
|
E_OBJECT(pop), ev);
|
|
|
|
if (ev->double_click) flags |= EVAS_BUTTON_DOUBLE_CLICK;
|
|
|
|
if (ev->triple_click) flags |= EVAS_BUTTON_TRIPLE_CLICK;
|
2009-03-16 09:24:43 -07:00
|
|
|
evas_event_feed_mouse_down(pop->evas, ev->buttons, flags, ev->timestamp, NULL);
|
2006-04-06 00:26:11 -07:00
|
|
|
return 0;
|
2005-09-22 05:47:45 -07:00
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
_e_popup_cb_mouse_up(void *data, int type, void *event)
|
|
|
|
{
|
2009-03-16 09:24:43 -07:00
|
|
|
Ecore_Event_Mouse_Button *ev;
|
2005-09-22 05:47:45 -07:00
|
|
|
E_Popup *pop;
|
|
|
|
|
|
|
|
ev = event;
|
2009-03-16 09:24:43 -07:00
|
|
|
pop = _e_popup_find_by_window(ev->event_window);
|
2005-09-22 05:47:45 -07:00
|
|
|
if (pop)
|
|
|
|
{
|
2009-03-16 09:24:43 -07:00
|
|
|
evas_event_feed_mouse_up(pop->evas, ev->buttons, EVAS_BUTTON_NONE, ev->timestamp, NULL);
|
2005-09-22 05:47:45 -07:00
|
|
|
e_bindings_mouse_up_event_handle(E_BINDING_CONTEXT_POPUP,
|
|
|
|
E_OBJECT(pop), ev);
|
2006-04-06 00:26:11 -07:00
|
|
|
return 0;
|
2005-09-22 05:47:45 -07:00
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
_e_popup_cb_mouse_wheel(void *data, int type, void *event)
|
|
|
|
{
|
2009-03-16 09:24:43 -07:00
|
|
|
Ecore_Event_Mouse_Wheel *ev;
|
2005-09-22 05:47:45 -07:00
|
|
|
E_Popup *pop;
|
|
|
|
|
|
|
|
ev = event;
|
2009-03-16 09:24:43 -07:00
|
|
|
pop = _e_popup_find_by_window(ev->event_window);
|
2005-09-22 05:47:45 -07:00
|
|
|
if (pop)
|
|
|
|
{
|
|
|
|
e_bindings_wheel_event_handle(E_BINDING_CONTEXT_POPUP,
|
|
|
|
E_OBJECT(pop), ev);
|
2009-03-16 09:24:43 -07:00
|
|
|
evas_event_feed_mouse_wheel(pop->evas, ev->direction, ev->z, ev->timestamp, NULL);
|
2006-04-06 00:26:11 -07:00
|
|
|
return 0;
|
2005-09-22 05:47:45 -07:00
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
2008-11-14 21:12:31 -08:00
|
|
|
*/
|