mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-27 06:00:22 +00:00
Removed special casing code in GtkCellLayout in favor of default implementation.
The fact that GtkCellLayout was checking "if (gtk_cell_layout_get_area (layout))" and executing code contitionally from the apis instead of simply falling back to the default implementation for these things was causing problems in language bindings such as gtkmm... Regardless, the implementation is cleaner this way too.
This commit is contained in:
parent
685fe29473
commit
da41937b42
@ -97,12 +97,191 @@
|
|||||||
typedef GtkCellLayoutIface GtkCellLayoutInterface;
|
typedef GtkCellLayoutIface GtkCellLayoutInterface;
|
||||||
G_DEFINE_INTERFACE (GtkCellLayout, gtk_cell_layout, G_TYPE_OBJECT);
|
G_DEFINE_INTERFACE (GtkCellLayout, gtk_cell_layout, G_TYPE_OBJECT);
|
||||||
|
|
||||||
|
static void gtk_cell_layout_default_pack_start (GtkCellLayout *cell_layout,
|
||||||
|
GtkCellRenderer *cell,
|
||||||
|
gboolean expand);
|
||||||
|
static void gtk_cell_layout_default_pack_end (GtkCellLayout *cell_layout,
|
||||||
|
GtkCellRenderer *cell,
|
||||||
|
gboolean expand);
|
||||||
|
static void gtk_cell_layout_default_clear (GtkCellLayout *cell_layout);
|
||||||
|
static void gtk_cell_layout_default_add_attribute (GtkCellLayout *cell_layout,
|
||||||
|
GtkCellRenderer *cell,
|
||||||
|
const gchar *attribute,
|
||||||
|
gint column);
|
||||||
|
static void gtk_cell_layout_default_set_cell_data_func (GtkCellLayout *cell_layout,
|
||||||
|
GtkCellRenderer *cell,
|
||||||
|
GtkCellLayoutDataFunc func,
|
||||||
|
gpointer func_data,
|
||||||
|
GDestroyNotify destroy);
|
||||||
|
static void gtk_cell_layout_default_clear_attributes (GtkCellLayout *cell_layout,
|
||||||
|
GtkCellRenderer *cell);
|
||||||
|
static void gtk_cell_layout_default_reorder (GtkCellLayout *cell_layout,
|
||||||
|
GtkCellRenderer *cell,
|
||||||
|
gint position);
|
||||||
|
static GList *gtk_cell_layout_default_get_cells (GtkCellLayout *cell_layout);
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_cell_layout_default_init (GtkCellLayoutInterface *iface)
|
gtk_cell_layout_default_init (GtkCellLayoutIface *iface)
|
||||||
{
|
{
|
||||||
|
iface->pack_start = gtk_cell_layout_default_pack_start;
|
||||||
|
iface->pack_end = gtk_cell_layout_default_pack_end;
|
||||||
|
iface->clear = gtk_cell_layout_default_clear;
|
||||||
|
iface->add_attribute = gtk_cell_layout_default_add_attribute;
|
||||||
|
iface->set_cell_data_func = gtk_cell_layout_default_set_cell_data_func;
|
||||||
|
iface->clear_attributes = gtk_cell_layout_default_clear_attributes;
|
||||||
|
iface->reorder = gtk_cell_layout_default_reorder;
|
||||||
|
iface->get_cells = gtk_cell_layout_default_get_cells;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Default implementation is to fall back on an underlying cell area */
|
||||||
|
static void
|
||||||
|
gtk_cell_layout_default_pack_start (GtkCellLayout *cell_layout,
|
||||||
|
GtkCellRenderer *cell,
|
||||||
|
gboolean expand)
|
||||||
|
{
|
||||||
|
GtkCellLayoutIface *iface;
|
||||||
|
GtkCellArea *area;
|
||||||
|
|
||||||
|
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
||||||
|
|
||||||
|
if (iface->get_area)
|
||||||
|
{
|
||||||
|
area = iface->get_area (cell_layout);
|
||||||
|
|
||||||
|
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (area), cell, expand);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_cell_layout_default_pack_end (GtkCellLayout *cell_layout,
|
||||||
|
GtkCellRenderer *cell,
|
||||||
|
gboolean expand)
|
||||||
|
{
|
||||||
|
GtkCellLayoutIface *iface;
|
||||||
|
GtkCellArea *area;
|
||||||
|
|
||||||
|
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
||||||
|
|
||||||
|
if (iface->get_area)
|
||||||
|
{
|
||||||
|
area = iface->get_area (cell_layout);
|
||||||
|
|
||||||
|
gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (area), cell, expand);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_cell_layout_default_clear (GtkCellLayout *cell_layout)
|
||||||
|
{
|
||||||
|
GtkCellLayoutIface *iface;
|
||||||
|
GtkCellArea *area;
|
||||||
|
|
||||||
|
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
||||||
|
|
||||||
|
if (iface->get_area)
|
||||||
|
{
|
||||||
|
area = iface->get_area (cell_layout);
|
||||||
|
|
||||||
|
gtk_cell_layout_clear (GTK_CELL_LAYOUT (area));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_cell_layout_default_add_attribute (GtkCellLayout *cell_layout,
|
||||||
|
GtkCellRenderer *cell,
|
||||||
|
const gchar *attribute,
|
||||||
|
gint column)
|
||||||
|
{
|
||||||
|
GtkCellLayoutIface *iface;
|
||||||
|
GtkCellArea *area;
|
||||||
|
|
||||||
|
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
||||||
|
|
||||||
|
if (iface->get_area)
|
||||||
|
{
|
||||||
|
area = iface->get_area (cell_layout);
|
||||||
|
|
||||||
|
gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (area), cell, attribute, column);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_cell_layout_default_set_cell_data_func (GtkCellLayout *cell_layout,
|
||||||
|
GtkCellRenderer *cell,
|
||||||
|
GtkCellLayoutDataFunc func,
|
||||||
|
gpointer func_data,
|
||||||
|
GDestroyNotify destroy)
|
||||||
|
{
|
||||||
|
GtkCellLayoutIface *iface;
|
||||||
|
GtkCellArea *area;
|
||||||
|
|
||||||
|
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
||||||
|
|
||||||
|
if (iface->get_area)
|
||||||
|
{
|
||||||
|
area = iface->get_area (cell_layout);
|
||||||
|
|
||||||
|
_gtk_cell_area_set_cell_data_func_with_proxy (area, cell,
|
||||||
|
(GFunc)func, func_data, destroy,
|
||||||
|
cell_layout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_cell_layout_default_clear_attributes (GtkCellLayout *cell_layout,
|
||||||
|
GtkCellRenderer *cell)
|
||||||
|
{
|
||||||
|
GtkCellLayoutIface *iface;
|
||||||
|
GtkCellArea *area;
|
||||||
|
|
||||||
|
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
||||||
|
|
||||||
|
if (iface->get_area)
|
||||||
|
{
|
||||||
|
area = iface->get_area (cell_layout);
|
||||||
|
|
||||||
|
gtk_cell_layout_clear_attributes (GTK_CELL_LAYOUT (area), cell);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_cell_layout_default_reorder (GtkCellLayout *cell_layout,
|
||||||
|
GtkCellRenderer *cell,
|
||||||
|
gint position)
|
||||||
|
{
|
||||||
|
GtkCellLayoutIface *iface;
|
||||||
|
GtkCellArea *area;
|
||||||
|
|
||||||
|
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
||||||
|
|
||||||
|
if (iface->get_area)
|
||||||
|
{
|
||||||
|
area = iface->get_area (cell_layout);
|
||||||
|
|
||||||
|
gtk_cell_layout_reorder (GTK_CELL_LAYOUT (area), cell, position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static GList *
|
||||||
|
gtk_cell_layout_default_get_cells (GtkCellLayout *cell_layout)
|
||||||
|
{
|
||||||
|
GtkCellLayoutIface *iface;
|
||||||
|
GtkCellArea *area;
|
||||||
|
|
||||||
|
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
||||||
|
|
||||||
|
if (iface->get_area)
|
||||||
|
{
|
||||||
|
area = iface->get_area (cell_layout);
|
||||||
|
|
||||||
|
return gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (area));
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gtk_cell_layout_pack_start:
|
* gtk_cell_layout_pack_start:
|
||||||
* @cell_layout: a #GtkCellLayout
|
* @cell_layout: a #GtkCellLayout
|
||||||
@ -122,23 +301,10 @@ gtk_cell_layout_pack_start (GtkCellLayout *cell_layout,
|
|||||||
GtkCellRenderer *cell,
|
GtkCellRenderer *cell,
|
||||||
gboolean expand)
|
gboolean expand)
|
||||||
{
|
{
|
||||||
GtkCellLayoutIface *iface;
|
|
||||||
GtkCellArea *area;
|
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
||||||
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
|
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
|
||||||
|
|
||||||
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->pack_start (cell_layout, cell, expand);
|
||||||
|
|
||||||
if (iface->pack_start)
|
|
||||||
iface->pack_start (cell_layout, cell, expand);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
area = iface->get_area (cell_layout);
|
|
||||||
|
|
||||||
if (area)
|
|
||||||
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (area), cell, expand);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -160,23 +326,10 @@ gtk_cell_layout_pack_end (GtkCellLayout *cell_layout,
|
|||||||
GtkCellRenderer *cell,
|
GtkCellRenderer *cell,
|
||||||
gboolean expand)
|
gboolean expand)
|
||||||
{
|
{
|
||||||
GtkCellLayoutIface *iface;
|
|
||||||
GtkCellArea *area;
|
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
||||||
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
|
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
|
||||||
|
|
||||||
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->pack_end (cell_layout, cell, expand);
|
||||||
|
|
||||||
if (iface->pack_end)
|
|
||||||
iface->pack_end (cell_layout, cell, expand);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
area = iface->get_area (cell_layout);
|
|
||||||
|
|
||||||
if (area)
|
|
||||||
gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (area), cell, expand);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -191,22 +344,9 @@ gtk_cell_layout_pack_end (GtkCellLayout *cell_layout,
|
|||||||
void
|
void
|
||||||
gtk_cell_layout_clear (GtkCellLayout *cell_layout)
|
gtk_cell_layout_clear (GtkCellLayout *cell_layout)
|
||||||
{
|
{
|
||||||
GtkCellLayoutIface *iface;
|
|
||||||
GtkCellArea *area;
|
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
||||||
|
|
||||||
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->clear (cell_layout);
|
||||||
|
|
||||||
if (iface->clear)
|
|
||||||
iface->clear (cell_layout);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
area = iface->get_area (cell_layout);
|
|
||||||
|
|
||||||
if (area)
|
|
||||||
gtk_cell_layout_clear (GTK_CELL_LAYOUT (area));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -216,28 +356,16 @@ gtk_cell_layout_set_attributesv (GtkCellLayout *cell_layout,
|
|||||||
{
|
{
|
||||||
gchar *attribute;
|
gchar *attribute;
|
||||||
gint column;
|
gint column;
|
||||||
GtkCellLayoutIface *iface;
|
|
||||||
GtkCellArea *area;
|
|
||||||
|
|
||||||
attribute = va_arg (args, gchar *);
|
attribute = va_arg (args, gchar *);
|
||||||
|
|
||||||
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
gtk_cell_layout_clear_attributes (cell_layout, cell);
|
||||||
|
|
||||||
if (iface->get_area)
|
|
||||||
area = iface->get_area (cell_layout);
|
|
||||||
|
|
||||||
if (iface->clear_attributes)
|
|
||||||
iface->clear_attributes (cell_layout, cell);
|
|
||||||
else if (area)
|
|
||||||
gtk_cell_layout_clear_attributes (GTK_CELL_LAYOUT (area), cell);
|
|
||||||
|
|
||||||
while (attribute != NULL)
|
while (attribute != NULL)
|
||||||
{
|
{
|
||||||
column = va_arg (args, gint);
|
column = va_arg (args, gint);
|
||||||
if (iface->add_attribute)
|
|
||||||
iface->add_attribute (cell_layout, cell, attribute, column);
|
gtk_cell_layout_add_attribute (cell_layout, cell, attribute, column);
|
||||||
else if (area)
|
|
||||||
gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (area), cell, attribute, column);
|
|
||||||
|
|
||||||
attribute = va_arg (args, gchar *);
|
attribute = va_arg (args, gchar *);
|
||||||
}
|
}
|
||||||
@ -294,28 +422,12 @@ gtk_cell_layout_add_attribute (GtkCellLayout *cell_layout,
|
|||||||
const gchar *attribute,
|
const gchar *attribute,
|
||||||
gint column)
|
gint column)
|
||||||
{
|
{
|
||||||
GtkCellLayoutIface *iface;
|
|
||||||
GtkCellArea *area;
|
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
||||||
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
|
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
|
||||||
g_return_if_fail (attribute != NULL);
|
g_return_if_fail (attribute != NULL);
|
||||||
g_return_if_fail (column >= 0);
|
g_return_if_fail (column >= 0);
|
||||||
|
|
||||||
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->add_attribute (cell_layout, cell, attribute, column);
|
||||||
|
|
||||||
if (iface->add_attribute)
|
|
||||||
iface->add_attribute (cell_layout,
|
|
||||||
cell,
|
|
||||||
attribute,
|
|
||||||
column);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
area = iface->get_area (cell_layout);
|
|
||||||
|
|
||||||
if (area)
|
|
||||||
gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (area), cell, attribute, column);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -343,36 +455,11 @@ gtk_cell_layout_set_cell_data_func (GtkCellLayout *cell_layout,
|
|||||||
gpointer func_data,
|
gpointer func_data,
|
||||||
GDestroyNotify destroy)
|
GDestroyNotify destroy)
|
||||||
{
|
{
|
||||||
GtkCellLayoutIface *iface;
|
|
||||||
GtkCellArea *area;
|
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
||||||
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
|
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
|
||||||
|
|
||||||
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
GTK_CELL_LAYOUT_GET_IFACE
|
||||||
|
(cell_layout)->set_cell_data_func (cell_layout, cell, func, func_data, destroy);
|
||||||
if (iface->set_cell_data_func)
|
|
||||||
iface->set_cell_data_func (cell_layout,
|
|
||||||
cell,
|
|
||||||
func,
|
|
||||||
func_data,
|
|
||||||
destroy);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
area = iface->get_area (cell_layout);
|
|
||||||
|
|
||||||
if (area)
|
|
||||||
{
|
|
||||||
/* Ensure that the correct proxy object is sent to 'func' */
|
|
||||||
if (GTK_CELL_LAYOUT (area) != cell_layout)
|
|
||||||
_gtk_cell_area_set_cell_data_func_with_proxy (area, cell,
|
|
||||||
(GFunc)func, func_data, destroy,
|
|
||||||
cell_layout);
|
|
||||||
else
|
|
||||||
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (area), cell,
|
|
||||||
func, func_data, destroy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -389,23 +476,10 @@ void
|
|||||||
gtk_cell_layout_clear_attributes (GtkCellLayout *cell_layout,
|
gtk_cell_layout_clear_attributes (GtkCellLayout *cell_layout,
|
||||||
GtkCellRenderer *cell)
|
GtkCellRenderer *cell)
|
||||||
{
|
{
|
||||||
GtkCellLayoutIface *iface;
|
|
||||||
GtkCellArea *area;
|
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
||||||
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
|
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
|
||||||
|
|
||||||
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->clear_attributes (cell_layout, cell);
|
||||||
|
|
||||||
if (iface->clear_attributes)
|
|
||||||
iface->clear_attributes (cell_layout, cell);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
area = iface->get_area (cell_layout);
|
|
||||||
|
|
||||||
if (area)
|
|
||||||
gtk_cell_layout_clear_attributes (GTK_CELL_LAYOUT (area), cell);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -426,23 +500,10 @@ gtk_cell_layout_reorder (GtkCellLayout *cell_layout,
|
|||||||
GtkCellRenderer *cell,
|
GtkCellRenderer *cell,
|
||||||
gint position)
|
gint position)
|
||||||
{
|
{
|
||||||
GtkCellLayoutIface *iface;
|
|
||||||
GtkCellArea *area;
|
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
|
||||||
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
|
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
|
||||||
|
|
||||||
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->reorder (cell_layout, cell, position);
|
||||||
|
|
||||||
if (iface->reorder)
|
|
||||||
iface->reorder (cell_layout, cell, position);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
area = iface->get_area (cell_layout);
|
|
||||||
|
|
||||||
if (area)
|
|
||||||
gtk_cell_layout_reorder (GTK_CELL_LAYOUT (area), cell, position);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -461,23 +522,9 @@ gtk_cell_layout_reorder (GtkCellLayout *cell_layout,
|
|||||||
GList *
|
GList *
|
||||||
gtk_cell_layout_get_cells (GtkCellLayout *cell_layout)
|
gtk_cell_layout_get_cells (GtkCellLayout *cell_layout)
|
||||||
{
|
{
|
||||||
GtkCellLayoutIface *iface;
|
|
||||||
GtkCellArea *area;
|
|
||||||
|
|
||||||
g_return_val_if_fail (GTK_IS_CELL_LAYOUT (cell_layout), NULL);
|
g_return_val_if_fail (GTK_IS_CELL_LAYOUT (cell_layout), NULL);
|
||||||
|
|
||||||
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
|
return GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->get_cells (cell_layout);
|
||||||
if (iface->get_cells)
|
|
||||||
return iface->get_cells (cell_layout);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
area = iface->get_area (cell_layout);
|
|
||||||
|
|
||||||
if (area)
|
|
||||||
return gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (area));
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user