/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
 * E-pane.c: A paned window which accepts more than one child
 *
 * Author:
 *   Matt Loper (matt@helixcode.com)
 *
 * Copyright 2000, Helix Code, Inc
 */

#include "e-paned.h"
#include "e-util.h"

#define PARENT_TYPE gtk_frame_get_type ()
static GtkObjectClass *e_paned_parent_class;

/*----------------------------------------------------------------------*
 *                         (un)parenting functions
 *----------------------------------------------------------------------*/

static void
unparent_all_children (EPaned *paned)
{
	GList *l;
	
	for (l = paned->children; l != NULL; l = l->next) {
		GtkWidget *child = GTK_WIDGET (l->data);
		
		gtk_widget_ref (child);
		gtk_container_remove (GTK_CONTAINER (child->parent),
				      child);
	}

	if (paned->toplevel_paned) {
		GtkWidget* parent =
			GTK_WIDGET (paned->toplevel_paned)->parent;
		
		gtk_container_remove (GTK_CONTAINER (parent),
				      GTK_WIDGET (paned->toplevel_paned));
	}
		

	paned->toplevel_paned = NULL;
}

static GtkPaned*
new_gtk_paned (EPaned *paned)
{
	return paned->horizontal?
		GTK_PANED (gtk_hpaned_new ()):
		GTK_PANED (gtk_vpaned_new ());
}


static void
reparent_all_children (EPaned *paned)
{
	GtkPaned *cur_gtk_paned;
	GList *l = paned->children;
	int requested_size;

	g_assert (E_IS_PANED (paned));
	
	if (paned->toplevel_paned)
		unparent_all_children (paned);

	if (!l)
		return;
	
	/* if there's only one child in our list, we don't need a
	   splitter window; we can just show the one window */
	if (!l->next)
	{
		gtk_container_add (GTK_CONTAINER (paned),
				   GTK_WIDGET (l->data));
		return;
	}

	/* create a gtk_paned, and put it in our toplevel EPaned */
	cur_gtk_paned = new_gtk_paned (paned);
	paned->toplevel_paned = cur_gtk_paned;
	gtk_container_add (GTK_CONTAINER (paned),
			   GTK_WIDGET (paned->toplevel_paned));

	/* put the first widget in the left part of our pane,
	   and give it the amount of space requested */
	gtk_paned_add1 (cur_gtk_paned, GTK_WIDGET (l->data));
	requested_size = (int)gtk_object_get_data (
		GTK_OBJECT (l->data),
		"e_paned_requested_size");
	gtk_paned_set_position (GTK_PANED (cur_gtk_paned),
				requested_size);
	
	l = l->next;

	for (; l != NULL; l = l->next) {
		
		if (l->next) {

			GtkPaned *sub_gtk_paned =
				new_gtk_paned (paned);
			GtkWidget *w = GTK_WIDGET (l->data);

                        /* add our widget to the new subpane,
			   on the left */
			gtk_paned_add1 (sub_gtk_paned, w);

			requested_size = (int)gtk_object_get_data (
				GTK_OBJECT (w),
				"e_paned_requested_size");
			gtk_paned_set_position (GTK_PANED (sub_gtk_paned),
						requested_size);
	
			gtk_paned_add2 (cur_gtk_paned,
					GTK_WIDGET (sub_gtk_paned));
			cur_gtk_paned = sub_gtk_paned;
		}
		else {
			gtk_paned_add2 (cur_gtk_paned,
					GTK_WIDGET (l->data));
		}		
	}
}

/*----------------------------------------------------------------------*
 *                  Exposed regular functions
 *----------------------------------------------------------------------*/


/**
 * e_paned_insert:
 * @paned: the #EPaned object
 * @pos: the position where we should insert the widget
 * @child: the widget to insert in the #EPaned object
 * @requested_size: the requested span of the widget, which will be
 * width of the #EPaned is horizontal, or height if it's vertical
 *
 * Inserts a widget into the #EPaned window, given a requested size
 * and a position; the position specifies where, among the other
 * widgets, the widget should be placed.
 *
 **/
void
e_paned_insert (EPaned *paned, int pos, GtkWidget *child, int requested_size)
{
	g_assert (GTK_IS_WIDGET (child));
	g_assert (E_IS_PANED (paned));
	
	unparent_all_children (paned);
	
	paned->children = g_list_insert (paned->children, child, pos);
	gtk_object_set_data (GTK_OBJECT (child),
			     "e_paned_requested_size",
			     (gpointer)requested_size);
	
	reparent_all_children (paned);

	g_print ("%s: %s(): exiting, length is %i\n",
		 __FILE__, __FUNCTION__, g_list_length (paned->children));	
}

/**
 * e_paned_remove:
 * @paned: the #EPaned object
 * @removed_child: the widget to remove
 *
 * Removes a widget from an #EPaned widget.
 *
 **/
void
e_paned_remove      (EPaned *paned, GtkWidget *removed_child)
{
	unparent_all_children (paned);
	paned->children = g_list_remove (paned->children, removed_child);
	gtk_widget_unref (GTK_WIDGET (removed_child));
	reparent_all_children (paned);	
}


/*----------------------------------------------------------------------*
 *                     Standard Gtk+ Class functions
 *----------------------------------------------------------------------*/

void
e_paned_construct (EPaned *e_paned,
		   gboolean horizontal)
{
	g_return_if_fail (e_paned != NULL);
	g_return_if_fail (E_IS_PANED (e_paned));

	
	e_paned->horizontal = horizontal;
}

GtkWidget*
e_paned_new (gboolean horizontal)
{
	EPaned *e_paned;

	e_paned = gtk_type_new (e_paned_get_type ());

	e_paned_construct (e_paned, horizontal);

	g_assert (E_IS_PANED (e_paned));

	return GTK_WIDGET (e_paned);
}

static void
e_paned_init (GtkObject *object)
{
	EPaned *e_paned;

	e_paned = E_PANED (object);

	e_paned->children = NULL;
	e_paned->toplevel_paned = NULL;
	e_paned->horizontal = FALSE;
}

static void
e_paned_class_init (GtkObjectClass *object_class)
{
	e_paned_parent_class = gtk_type_class (PARENT_TYPE);
}

E_MAKE_TYPE(e_paned, "EPaned", EPaned, e_paned_class_init, e_paned_init, PARENT_TYPE);
on6/files/ini-1.3.8&amp;id=c94ff81ac8cb9cb5559453bd64558b551a9d0c46'>refs</a><a class='active' href='/~lantw44/cgit/freebsd-ports-gnome/log/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8'>log</a><a href='/~lantw44/cgit/freebsd-ports-gnome/tree/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=c94ff81ac8cb9cb5559453bd64558b551a9d0c46'>tree</a><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=c94ff81ac8cb9cb5559453bd64558b551a9d0c46'>commit</a><a href='/~lantw44/cgit/freebsd-ports-gnome/diff/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=c94ff81ac8cb9cb5559453bd64558b551a9d0c46'>diff</a><a href='/~lantw44/cgit/freebsd-ports-gnome/stats/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8'>stats</a></td><td class='form'><form class='right' method='get' action='/~lantw44/cgit/freebsd-ports-gnome/log/databases/rubygem-sqlite3'>
<input type='hidden' name='h' value='dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8'/><input type='hidden' name='id' value='c94ff81ac8cb9cb5559453bd64558b551a9d0c46'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/~lantw44/cgit/freebsd-ports-gnome/log/?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=c94ff81ac8cb9cb5559453bd64558b551a9d0c46'>root</a>/<a href='/~lantw44/cgit/freebsd-ports-gnome/log/databases?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=c94ff81ac8cb9cb5559453bd64558b551a9d0c46'>databases</a>/<a href='/~lantw44/cgit/freebsd-ports-gnome/log/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=c94ff81ac8cb9cb5559453bd64558b551a9d0c46'>rubygem-sqlite3</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th></th><th class='left'>Commit message (<a href='/~lantw44/cgit/freebsd-ports-gnome/log/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=c94ff81ac8cb9cb5559453bd64558b551a9d0c46&amp;showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Age</th><th class='left'>Files</th><th class='left'>Lines</th></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=ecd523d35f29b625fbd867de1a8c599c2268e7ce'>Switch build dependency from swig 1.3 to swig 3.0</a></td><td>bapt</td><td><span title='2017-12-19 23:44:58 +0800'>2017-12-19</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=f8365fe14148e5581139412686d6a412605c0fbd'>Update to 1.3.13</a></td><td>sunpoet</td><td><span title='2017-01-06 03:33:56 +0800'>2017-01-06</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=41ecc055519ba659a19679c402ceeab57dba6080'>databases/rubygem-sqlite3: update to 1.3.12</a></td><td>swills</td><td><span title='2016-12-08 04:12:49 +0800'>2016-12-08</span></td><td>2</td><td><span class='deletions'>-3</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=17514e0351a1b7ce99e34ae1192a37395cdffec7'>Convert USES=gem:autoplist to USES=gem since autoplist is default</a></td><td>swills</td><td><span title='2016-04-28 05:57:31 +0800'>2016-04-28</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=900b8428054e4288c9669f4f17359be2ae8a45c3'>create USES=gem and update rubygem- ports to use it</a></td><td>swills</td><td><span title='2016-04-28 00:36:41 +0800'>2016-04-28</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=148314483d3098c0d6a33944f1190842e671502f'>Remove ${PORTSDIR}/ from dependencies, categories d, e, f, and g.</a></td><td>mat</td><td><span title='2016-04-01 22:00:51 +0800'>2016-04-01</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=4d9897c24a1b6fd07a8c8df2d95708d3e49b88f0'>- Update to 1.3.11</a></td><td>sunpoet</td><td><span title='2015-10-16 04:18:46 +0800'>2015-10-16</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+5</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=c1a6b622e17363efb44a2972a411ca36f00336f8'>- Cleanup Makefile: remove PORTREVISION and GEM_NAME</a></td><td>sunpoet</td><td><span title='2015-06-24 04:26:23 +0800'>2015-06-24</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+0</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=2b527e0699ba7ac638b658930be130aff8721780'>databases/rubygem-sqlite3: update to 1.3.10</a></td><td>swills</td><td><span title='2015-01-26 11:46:26 +0800'>2015-01-26</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=3a64c1f03bcc10d31941671e32b7843f049036bd'>Update "BSD" licenses in databases category</a></td><td>feld</td><td><span title='2014-12-05 08:30:20 +0800'>2014-12-05</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=a17a5bf58e4f0e0bba31df8ea33294b4c293b26e'>- Chase database/sqlite3 slib bump</a></td><td>miwi</td><td><span title='2014-06-28 01:21:06 +0800'>2014-06-28</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=bd13cd306b115037641f6d021665344b14915701'>- Update to 1.3.9</a></td><td>swills</td><td><span title='2014-03-23 14:21:13 +0800'>2014-03-23</span></td><td>2</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=b6dae801b9aaf371681d10ef3c1c93d41cfb9333'>- Update to 1.3.8</a></td><td>sunpoet</td><td><span title='2013-11-30 03:10:35 +0800'>2013-11-30</span></td><td>2</td><td><span class='deletions'>-7</span>/<span class='insertions'>+7</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=6f80be59ee7d8073806e8556f4dcb7b32511e413'>- Add stage support</a></td><td>swills</td><td><span title='2013-10-30 10:26:17 +0800'>2013-10-30</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+0</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=94d8a4430550bbc2a7bf95ad142ad7d14215cf8b'>Add NO_STAGE all over the place in preparation for the staging support (cat: ...</a></td><td>bapt</td><td><span title='2013-09-21 00:13:47 +0800'>2013-09-21</span></td><td>1</td><td><span class='deletions'>-5</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=576fd42e1971f4404dd0391bd4221ba80afb9c7a'>- Remove Author line</a></td><td>sunpoet</td><td><span title='2013-08-30 02:06:47 +0800'>2013-08-30</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+0</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=e437ac7156aef6b82ff1aa988a41e4d6fa2c7302'>- Update to 1.3.7</a></td><td>swills</td><td><span title='2013-01-24 00:41:34 +0800'>2013-01-24</span></td><td>2</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=7797a9462c31498b4d2be3a2105051ab6e98004f'>- Update to 1.3.6</a></td><td>swills</td><td><span title='2012-05-10 09:31:13 +0800'>2012-05-10</span></td><td>2</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=f955791e14ff3509f1a479e487b14b5f26c519d8'>- Update to 1.3.5</a></td><td>pgollucci</td><td><span title='2011-12-17 12:11:00 +0800'>2011-12-17</span></td><td>2</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=645923f869059252446701615d5ae06e2a8b7d5d'>- Update Rails to 3.1.1 and associated changes</a></td><td>swills</td><td><span title='2011-10-27 11:02:52 +0800'>2011-10-27</span></td><td>2</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=700cbc207bfa669bbf8875ec0bd6278b8c01283c'>- Update to 1.3.3</a></td><td>swills</td><td><span title='2011-07-21 08:38:11 +0800'>2011-07-21</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=5d371cf94cde5af37681d2a18859e1bf4192fc3a'>- Cannoicalize the WWW: [again],</a></td><td>pgollucci</td><td><span title='2011-06-24 01:51:43 +0800'>2011-06-24</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=a5b692fb9cbba838099d5145c03bddd7341ed1d6'>- github is redirecting all these to https now</a></td><td>pgollucci</td><td><span title='2010-11-11 11:22:25 +0800'>2010-11-11</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=77fd9c3c27b23ef962e9c9a00b28385adfc6d927'>- Update to 1.3.2</a></td><td>pgollucci</td><td><span title='2010-11-10 13:10:22 +0800'>2010-11-10</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=682d56d3bb1945f13a918eb6f2ecfba12badf942'>- Mass fixup of WWW: lines pkg-descr based on rubygems.org Homepage meta info</a></td><td>pgollucci</td><td><span title='2010-10-20 09:35:47 +0800'>2010-10-20</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=479158de7a95b40303f5f0a691c600b624047ad2'>- RF -&gt; RG conversions</a></td><td>pgollucci</td><td><span title='2010-10-05 17:09:18 +0800'>2010-10-05</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/freebsd-ports-gnome/commit/databases/rubygem-sqlite3?h=dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8&amp;id=1a5760e7cb29b49ae130c992117543ebebcfaef7'>- Update to 1.3.1</a></td><td>clsung</td><td><span title='2010-08-16 09:54:53 +0800'>2010-08-16</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>