1.20.8:

2012-02-05  Murray Cumming  <murrayc@murrayc.com>

	Button scripts and Field Calculations: Test button: Check for pygtk2.

	* glom/mode_data/box_data.cc: :execute_button_script(): Move the 
	warning UI into 
	* glom/utils_ui.[h|cc]: a new script_check_for_pygtk2_with_warning()
	method.
	* glom/mode_design/fields/dialog_fieldcalculation.cc: on_button_test():
	* glom/mode_design/layout/layout_item_dialogs/dialog_buttonscript.cc:
	on_button_test_script(): Use the new function here.

2012-02-03  Murray Cumming  <murrayc@murrayc.com>

	Button scripts: Check and warn about pygtk2 instead of crashing.

	* glom/libglom/utils.[h|cc]: Add script_check_for_pygtk().
	* Makefile_tests.am:
	* tests/test_script_check_for_problems.cc: Add a test for the check
	function.
	* glom/mode_data/box_data.cc: execute_button_script(): Show a 
	warning dialog, and do not run the script, if it seems to use pygtk.
	This should help with but #669196 (alien) and ##661766 (Andre Klapper) .

2012-02-03  Murray Cumming  <murrayc@murrayc.com>

	ReportBuilder: Add error checking.

	* glom/libglom/report_builder.[h|cc]: Return bool
	from the private methods and check those results.

2012-02-03  Murray Cumming  <murrayc@murrayc.com>

	Reports: Make summary fields work again.

	* glom/libglom/report_builder.cc: report_build_summary():
	Remove any sort clause (ORDER BY) from the FoundSet because that makes 
	no sense for a single row with summary fields. It looks like recent versions
	of PostgreSQL have become more strict about this, producing this error, for
	instance:
	column "invoices.invoice_id" must appear in the GROUP BY clause or be used in an aggregate function
	* Makefile_tests.am:
	* tests/test_selfhosting_new_then_report_summary.cc: Add a test for this.
	This fixes bug #669281 (alien)

2012-02-03  Murray Cumming  <murrayc@murrayc.com>

	Document: Really load the table privileges.

	* glom/libglom/db_utils.[h|cc]: add_group(): Take a bool superuser
	parameter.
	add_groups_from_document(): Use add_group() instead of executing
	the ADD GROUP query directly, to make sure that we also start 
	with some sane table privileges defaults, in case nothing else 
	sets the privielges.
	* glom/libglom/document/document.cc: load_after(): Fix a typo
	so that the group privileges are really loaded (and then
	saved again instead of being lost).
	* examples/example_film_manager.glom:
	* examples/example_smallbusiness.glom: Save these with 
	useful group privileges, so the groups will be allowed to
	see tables.
	* tests/test_document_load.cc: Test the loading of the group
	privileges.
	Previously the examples were created with groups that could not
	even view the tables, which meant that they could not even 
	find out about their existence.
	This deals with the problem found here:
	https://bugzilla.gnome.org/show_bug.cgi?id=669043#c2
	But I would like to show the existence (and structure) of tables
	even if their data cannot be viewed, so there is more work to do.

2012-02-03  Murray Cumming  <murrayc@murrayc.com>

	Add some runtime warnings.

	* glom/libglom/db_utils.cc: get_table_names_from_database():
	Slightly improved error checking. 
	* glom/libglom/privs.cc: set_table_privileges():
	Warn if a GRANT fails.

2012-02-02  Murray Cumming  <murrayc@murrayc.com>

	Share on Network: Add reassuring message when user removal fails.

	* glom/frame_glom.cc: Add a stdout message saying the the 
	default user has been disabled, because the existing message
	about the failure to remove the user looks at first like
	a security problem.
	I still do not know why removal fails, even though we do
	change the ownership of the database.

2012-02-02  Murray Cumming  <murrayc@murrayc.com>

	test_selfhosting_new_empty_then_users: Test user removal.

	* glom/base_db.[h|cc]: Move remove_user() and 
	remove_user_from_group() to
	* glom/libglom/db_utils.[h|cc].
	* glom/frame_glom.cc:
	* glom/mode_design/users/dialog_users_list.cc: Adapted.
	* tests/test_selfhosting_new_empty_then_users.cc: Test these
	functions.

2012-02-02  Murray Cumming  <murrayc@murrayc.com>

	Really prevent changing to developer mode for non-developers.

	* glom/frame_glom.cc: on_menu_developer_developer(): Actually use the
	result of Privs::get_user_is_in_group().
	* tests/test_selfhosting_new_from_example_operator.cc: Test this
	same function here, though this test currently fails anyway.
	This fixes bug #669043 (alien) 

2012-02-01  Murray Cumming  <murrayc@murrayc.com>

	Allow user and group names to have spaces and other special characters.

	* glom/libglom/privs.cc: get_table_privileges(): Instead of parsing the
	relacl.pg_class field, use the PostgreSQL has_table_privilege() 
	function, though it needs some strange quoting (see comments).
	This code is much simpler now. 
	* tests/test_selfhosting_new_empty_then_users.cc: Add various other
	table, group, and user names, to excercise the code.
	This now passes.

2012-02-01  Murray Cumming  <murrayc@murrayc.com>

	test_selfhosting_new_empty_then_users: Show the problem with spaces.

	* tests/test_selfhosting_new_empty_then_users.cc: 
	Privs::get_table_privileges() must parse a strange format. This test
	shows that it fails if the group name contains spaces.

2012-02-01  Murray Cumming  <murrayc@murrayc.com>

	Limit user and group name lengths.

	* glom/libglom/privs.[h|cc]: Add a MAX_ROLE_SIZE enum constants.
	I cannot find any PostgreSQL documentation of this 63 character limit.
	* glom/mode_design/users/dialog_new_group.cc:
	* glom/mode_design/users/dialog_user.cc: Use it to set maximum characters
	for the entry boxes.
	* tests/test_selfhosting_new_empty_then_users.cc: Show that the problem
	found so far was caused by too-long names, not spaces.
	I still need to check parsing of table permissions.

2012-02-01  Murray Cumming  <murrayc@murrayc.com>

	test_selfhosting_new_empty_then_users: Test user adding with all group names.

	* tests/test_selfhosting_new_empty_then_users.cc: Use for loops to 
	simplify the code and to make sure that we test adding of users with 
	all the group types.
	This shows a problem:
	  Privs::get_database_groups() does not contain the expected user:
	  group: somegroup with space characters1
	  user: someuser with space characters1for_somegroup with space characters1

2012-02-01  Murray Cumming  <murrayc@murrayc.com>

	test_selfhosting_new_empty_then_users: Improvements.

	* tests/test_selfhosting_new_empty_then_users.cc:
	Add tables that will be affected.
	Test strange characters in group and user names.

2012-02-01  Murray Cumming  <murrayc@murrayc.com>

	Add test_selfhosting_new_empty_then_users

	* glom/mode_design/users/dialog_groups_list.cc: on_button_group_new():
	Move the group creation code to:
	* glom/libglom/db_utils.[h|cc]:

	* glom/libglom/privs.[h|cc]: set_table_privileges():
	Return a bool to report failures.
	* Makefile_tests.am:
	* tests/test_selfhosting_new_empty_then_users.cc: Add this test to 
	test simple creation of a group and a user.

2012-02-01  Murray Cumming  <murrayc@murrayc.com>

	Fix the build.

	* glom/mode_design/users/dialog_new_group.cc:
	* glom/mode_design/users/dialog_user.cc: Add includes to fix the build.

2012-02-01  Murray Cumming  <murrayc@murrayc.com>

	Limit user and group name lengths.

	* glom/libglom/privs.[h|cc]: Add a MAX_ROLE_SIZE enum constants.
	I cannot find any PostgreSQL documentation of this 63 character limit.
	* glom/mode_design/users/dialog_new_group.cc:
	* glom/mode_design/users/dialog_user.cc: Use it to set maximum characters
	for the entry boxes.
	* tests/test_selfhosting_new_empty_then_users.cc: Show that the problem
	found so far was caused by too-long names, not spaces.
	I still need to check parsing of table permissions.

2012-01-30  Murray Cumming  <murrayc@murrayc.com>

	test_selfhosting_new_empty: Simplify the cleanup code.

	* tests/test_selfhosting_new_empty.cc: Call cleanup if test() returns 
	false, like we in the other tests, to avoid calling it in too many
	places.

2012-01-30  Murray Cumming  <murrayc@murrayc.com>

	Require the latest goocanvas because it has fixes that PrintLayout needs.

	* configure.ac: Require goocanvas 2.0.1.

2012-01-29  Murray Cumming  <murrayc@murrayc.com>

	Database Preferences: Really store the organization name in the database.

	* glom/libglom/db_utils.cc: set_database_preferences(): Also UPDATE
	the organization name.

	This fixes bug #668836 (alien)

2012-01-29  Murray Cumming  <murrayc@murrayc.com>

	Field Formatting: Related Choices: Default to showing the primary key.

	* glom/mode_design/layout/layout_item_dialogs/box_formatting.cc:
	on_combo_choices_relationship_changed(): By default, automatically
	choose the related table's primary key as the field to show in the
	choices. Other fields should then be shown (or looked up) based on the
	chosen ID.
	This avoids the confusion noticed here: https://bugzilla.gnome.org/show_bug.cgi?id=668759#c21

2012-01-29  Murray Cumming  <murrayc@murrayc.com>

	CellRendererDbList: Do not crash if one of the fields is hidden.

	* glom/mode_data/datawidget/cellrenderer_dblist.cc:
	repack_cells_related(): Do not crash if create_cell() returns 0,
	and add a comment explaining that that is OK.
	* glom/mode_data/datawidget/cellcreation.cc: Add explanatory comments.

	This fixes the second crash mentioned in #668759 (alien).

2012-01-29  Murray Cumming  <murrayc@murrayc.com>

	Choices: Allow the field to be be other than the primary key.

	* glom/mode_data/datawidget/treemodel_db.h: Make most methods and
	members private again, documentation what they *key methods and members
	really mean.
	* glom/mode_data/datawidget/treemodel_db_withextratext.[h|cc]: Add
	m_column_index_first and m_item_first members.
	Constructor: Set these by looking for the first LayoutItem_Field, 
	because that is what we will want to show in the first cell of 
	a combobox, which is where this model is used.
	Use these instead of the *key members, which were actually the primary
	key. We had previously assumed that the first field would always be
	the primary key, but we should not enforce that.
	This fixes crashing bug #668759 (alien).

2012-01-28  Murray Cumming  <murrayc@murrayc.com>

	ComboChoicesWithTreeModel: Make sure the model always has the primary key.

	* glom/libglom/data_structure/layout/layoutitem_field.h:
	predicate_LayoutItem_Field_IsSameField: Let this be used with containers of
	LayoutItems as well as just LayoutItem_Fields.
	* glom/libglom/utils.[h|cc]: Add get_layout_items_plus_primary_key().
	* glom/mode_data/box_data_list.cc: create_layout(): Simplify code by using 
	get_layout_items_plus_primary_key().
	* glom/mode_data/datawidget/combochoiceswithtreemodel.cc:
	set_choices_related(): Use get_layout_items_plus_primary_key() so the 
	model has the primary key, avoiding a warning and a later crash.

2012-01-27  Murray Cumming  <murrayc@murrayc.com>

	Test creation from examples in non-English locales.

	* Makefile_tests.am:
	* tests/test_selfhosting_new_from_example_in_locales.sh:
	Run the test_selfhosting_new_from_example example in various
	locales, to make sure that the libgda problem (see bug #668346),
	or something like it, does not come back.
	* tests/test_selfhosting_new_from_example.cc: Call setlocale().