Commit Graph

4542 Commits

Author SHA1 Message Date
Matthias Clasen
a5638e82e8 Support named themed window icons. 2004-07-17 03:55:07 +00:00
Matthias Clasen
1d45cbd831 Make scrolling work if no item is selected. (gtk_cell_editable_key_press):
2004-07-16  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkcombobox.c (gtk_combo_box_scroll_event): Make
	scrolling work if no item is selected.
	(gtk_cell_editable_key_press): Don't eat space.
2004-07-16 21:13:21 +00:00
Matthias Clasen
c0af1c1aaa Add a combo box cell renderer. 2004-07-16 20:27:40 +00:00
Matthias Clasen
d8df361813 Don't iterate multiple times over some of the children.
2004-07-16  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkcombobox.c (gtk_combo_box_forall): Don't iterate
	multiple times over some of the children.
2004-07-16 14:33:21 +00:00
Matthias Clasen
2da944fb09 Fix #60128, #58307, #144706:
Thu Jul 15 22:19:40 2004  Matthias Clasen  <maclas@gmx.de>

	Fix #60128, #58307, #144706:

	* gtk/gtkstyle.c (gtk_style_real_copy): Handle references
	to bg_pixmaps properly.
	(gtk_style_real_unrealize): Don't keep dangling references
	to the bg_pixmaps.
	(gtk_style_attach): Split the loop into two loops, first
	looking for a matching style, then for an empty one.
	(gtk_style_finalize):
	(gtk_style_duplicate): Add comments explaining the handling
	of style->styles.
2004-07-16 02:22:48 +00:00
Matthias Clasen
f436df88d3 Install the timeout before changing the value, so that a ::value_changed
Thu Jul 15 20:31:28 2004  Matthias Clasen  <maclas@gmx.de>

	* gtk/gtkspinbutton.c (start_spinning): Install the timeout
	before changing the value, so that a ::value_changed handler
	has a chance to remove it.  (#122427, Elke Meier)
2004-07-16 00:38:06 +00:00
Matthias Clasen
e0e35c0cd9 Use 'cannot' instead of 'can not' in messages. (#144226, Morten Welinder)
Thu Jul 15 19:20:05 2004  Matthias Clasen  <maclas@gmx.de>

	* gdk/x11/gdkim-x11.c (_gdk_x11_initialize_locale):
	* gtk/gtkcalendar.c (gtk_calendar_class_init): Use 'cannot'
	instead of 'can not' in messages.  (#144226, Morten Welinder)
2004-07-15 23:24:51 +00:00
Matthias Clasen
bd8d72d948 Correct the declared default values of several properties to be in sync
2004-07-15  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtktreeview.c (gtk_tree_view_class_init):
	* gtk/gtkcellrenderer.c (gtk_cell_renderer_class_init):
	Correct the declared default values of several properties
	to be in sync with the actual initial values.
2004-07-15 17:52:34 +00:00
Matthias Clasen
8ceb9a8944 Correct the declared default values of several properties to be in sync
2004-07-15  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkcellrenderer.c (gtk_cell_renderer_get_property):
	Correct the declared default values of several properties
	to be in sync with the actual initial values.
2004-07-15 17:48:04 +00:00
Matthias Clasen
2dfc5f45b9 Make spacing a property, correct the declared default values of several
2004-07-15  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtktreeviewcolumn.c (gtk_tree_view_column_class_init):
	Make spacing a property, correct the declared default values
	of several properties to be in sync with the actual initial
	values.  (#147654, Matthias Clasen)
2004-07-15 17:37:06 +00:00
Matthias Clasen
e50e5b3c6f Don't reparent back to menu->toplevel if it is already gone because we're
2004-07-15  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkmenu.c (gtk_menu_set_tearoff_state): Don't reparent
	back to menu->toplevel if it is already gone because we're
	shutting down.  (#147656, John Cupitt)
2004-07-15 16:43:55 +00:00
Federico Mena Quintero
547261fc6d Fix #126295:
2004-07-14  Federico Mena Quintero  <federico@ximian.com>

	Fix #126295:

	* gtk/gtktreeview.c (gtk_tree_view_bin_expose): Draw a focus
	indicator along the edge of the bin_window when the tree is empty.
	(grab_focus_and_unset_draw_keyfocus): New helper function.
	(gtk_tree_view_button_press): Remove a bit of superfluous code.
	Use the helper function to save on duplicated code.
	(gtk_tree_view_button_press): Grab the focus if the tree is empty.
	(gtk_tree_view_focus): Allow focusing into an empty tree.
2004-07-15 01:36:29 +00:00
Matthias Clasen
6baa9c8f30 Don't use gcc extensions for the ternary ?: operator. (#147590, Damien
2004-07-14  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkaboutdialog.c (add_credits_page): Don't use
	gcc extensions for the ternary ?: operator.  (#147590,
	Damien Carbery)
2004-07-14 17:19:04 +00:00
Federico Mena Quintero
d319b8f926 Fix #144405, patch by Padraig O'Briain <padraig.obriain@sun.com>:
2004-07-14  Federico Mena Quintero  <federico@ximian.com>

	Fix #144405, patch by Padraig O'Briain <padraig.obriain@sun.com>:

	* gtk/gtkfilechooserdefault.c (shortcuts_list_create): Set the
	accessible object name for the tree view.
	(create_file_list): Likewise.
2004-07-14 17:08:40 +00:00
Matthias Clasen
20e3b2db65 Don't leak no_svg_filename. (#147399, Kjartan Maraas)
Tue Jul 13 21:53:08 2004  Matthias Clasen  <maclas@gmx.de>

	* gtk/gtkicontheme.c (free_unthemed_icon): Don't leak
	no_svg_filename.  (#147399, Kjartan Maraas)
2004-07-14 01:57:16 +00:00
Matthias Clasen
754c15ede1 Make this work in RTL context.
2004-07-13  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtktreeviewcolumn.c (_gtk_tree_view_column_get_neighbor_sizes):
	Make this work in RTL context.
2004-07-13 21:26:19 +00:00
Matthias Clasen
fa349466ec Fix build error. 2004-07-13 19:15:09 +00:00
Federico Mena Quintero
f9d9cc9aac Set a busy cursor while mounting the volume. Also, ref the chooser while
2004-07-13  Federico Mena Quintero  <federico@ximian.com>

	* gtk/gtkfilechooserdefault.c (shortcuts_activate_volume): Set a
	busy cursor while mounting the volume.  Also, ref the chooser
	while mounting, as we may re-enter.  Fixes #139376.
2004-07-13 18:25:48 +00:00
Matthias Clasen
57101256f2 Prepare to handle composite implementations of GtkCellEditable, but
2004-07-13  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtktreeview.c (gtk_tree_view_adjustment_changed):
	Prepare to handle composite implementations of
	GtkCellEditable, but recursively poking at
	allocation->y (hack stolen from GtkCList).
2004-07-13 17:56:29 +00:00
Matthias Clasen
20efb51b01 Ugh, another compile error. 2004-07-13 14:50:11 +00:00
Matthias Clasen
f057e5f74c Ugh, forgotten ; 2004-07-13 14:49:02 +00:00
Matthias Clasen
67d562bc9c Add gtk_parse_args() 2004-07-13 14:17:49 +00:00
Matthias Clasen
dcffb53f0a Don't crash if unrealized.
2004-07-13  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkcombobox.c (gtk_combo_box_popdown): Don't
	crash if unrealized.
2004-07-13 13:54:13 +00:00
Matthias Clasen
5462c4a92c Don't display untranslated translator credits.
Tue Jul 13 01:50:06 2004  Matthias Clasen  <maclas@gmx.de>

	* gtk/gtkaboutdialog.c (display_credits_dialog): Don't
	display untranslated translator credits.
2004-07-13 05:50:54 +00:00
Matthias Clasen
4748d38117 Some documentation updates. 2004-07-13 05:15:49 +00:00
Matthias Clasen
24162d33a0 Docs for GtkAboutDialog. 2004-07-12 17:03:06 +00:00
Matthias Clasen
4ed4ccc737 New widget: GtkAboutDialog.
2004-07-12  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkaboutdialog.h:
	* gtk/gtkaboutdialog.c: New widget: GtkAboutDialog.

	* gtk/Makefile.am (gtk_public_h_sources, gtk_c_sources):
	* gtk/gtk.h: Add GtkAboutDialog. (#109435, Paolo Borelli,
	patch by Matthias Clasen)
2004-07-12 16:38:04 +00:00
Matthias Clasen
37610bc344 Apply the gtk-default-menu-item-style to cell view menu items as well.
* gtk/gtkrc.c (_gtk_rc_init): Apply the gtk-default-menu-item-style
	to cell view menu items as well.  (#147405, John Cupitt)
2004-07-12 16:21:45 +00:00
Matthias Clasen
4a6f874558 Forgotten file. 2004-07-12 16:15:55 +00:00
Matthias Clasen
d11ab53e6e Warning fixes. 2004-07-12 14:38:10 +00:00
Matthias Clasen
6c18d56a52 Add a number of new stock items. (#102530, #68015, #109811, Jordi Mallach,
Mon Jul 12 00:52:04 2004  Matthias Clasen  <maclas@gmx.de>

	* gtk/stock-icons/Makefile.am:
	* gtk/stock-icons/stock_about_{16,24}.png:
	* gtk/stock-icons/stock_connect_{16,24}.png:
	* gtk/stock-icons/stock_disconnect_{16,24}.png:
	* gtk/stock-icons/stock_edit_{16,24}.png:
	* gtk/stock-icons/stock_media_forward_{16,24}.png:
	* gtk/stock-icons/stock_media_next_{16,24}.png:
	* gtk/stock-icons/stock_media_pause_{16,24}.png:
	* gtk/stock-icons/stock_media_play_{16,24}.png:
	* gtk/stock-icons/stock_media_previous_{16,24}.png:
	* gtk/stock-icons/stock_media_record_{16,24}.png:
	* gtk/stock-icons/stock_media_rewind_{16,24}.png:
	* gtk/stock-icons/stock_media_stop_{16,24}.png:
	* gtk/gtkstock.h (GTK_STOCK_ABOUT):
	* gtk/gtkstock.h (GTK_STOCK_CONNECT):
	* gtk/gtkstock.h (GTK_STOCK_DISCONNECT):
	* gtk/gtkstock.h (GTK_STOCK_EDIT):
	* gtk/gtkstock.h (GTK_STOCK_MEDIA_FORWARD):
	* gtk/gtkstock.h (GTK_STOCK_MEDIA_NEXT):
	* gtk/gtkstock.h (GTK_STOCK_MEDIA_PAUSE):
	* gtk/gtkstock.h (GTK_STOCK_MEDIA_PLAY):
	* gtk/gtkstock.h (GTK_STOCK_MEDIA_PREVIOUS):
	* gtk/gtkstock.h (GTK_STOCK_MEDIA_RECORD):
	* gtk/gtkstock.h (GTK_STOCK_MEDIA_REWIND):
	* gtk/gtkstock.h (GTK_STOCK_MEDIA_STOP):
	* gtk/gtkiconfactory.c (get_default_icons):
	* gtk/gtkstock.c (builtin_items): Add a number of new stock
	items.  (#102530, #68015, #109811, Jordi Mallach, Benjamin Otte,
	Michael Opdenacker)
2004-07-12 04:56:30 +00:00
Soeren Sandmann
1a5e92dd61 Bug 143330, support update counter spec.
Sun Jul 11 15:24:03 2004  Soeren Sandmann  <sandmann@daimi.au.dk>

	Bug 143330, support update counter spec.

	* configure.in: Add check for the Sync extension

	* gdk/gdkwindow.h: gdk_window_enable_synchronized_configure() and
	gdk_window_configure_finished()

	* gtk/gtkwindow.c (gtk_window_move_resize): Call gdk_window_finish_configure().
	* gtk/gtkwindow.c (gtk_window_realize): Automatically enable
	synchronized configures.

	* gdk/x11/gdkwindow-x11.h (struct _GdkToplevelX11): Store current
	and pending counter values.

	* gdk/x11/gdkwindow-x11.c (gdk_window_configure_finished): New function.
	* gdk/x11/gdkwindow-x11.c
	(gdk_window_enable_synchronized_configure): New function.
	* gdk/x11/gdkwindow-x11.c (gdk_toplevel_x11_free_contents):
	Delete update counter.
	* gdk/x11/gdkwindow-x11.c (set_wm_protocols): Advertise
	_NET_WM_SYNC_REQUEST when Sync is available

	* gdk/x11/gdkevents-x11.c (gdk_wm_protocols_filter): Handle
	_NET_WM_SYNC_REQUEST messages
	* gdk/x11/gdkevents-x11.c (gdk_event_translate): Save counter
	value for use by gdk_window_configure_finished() when receiving
	ConfigureNotifies.

	* gdk/x11/gdkdisplay-x11.h (struct _GdkDisplayX11): Add use_sync flag
	* gdk/x11/gdkdisplay-x11.c (gdk_display_open): Check if the XSync
	extension is available
	* gdk/x11/gdkdisplay-x11.c: Add _NET_WM_SYNC_REQUEST and
	_NET_WM_SYNC_REQUEST_COUNTER to list of supported atoms.

	* gdk/linux-fb/gdkwindow-fb.c, gdk/win32/gdkwindow-win32.c: Add
	stubs for enable_synchronized_configure() and configure_finished()
2004-07-11 13:26:57 +00:00
Matthias Clasen
b1a704b6b8 Make middle-button pasting work as expected inside the entry. (#116789,
Sat Jul 10 23:35:13 2004  Matthias Clasen  <maclas@gmx.de>

	* gtk/gtkentry.c (paste_received): Make middle-button pasting
	work as expected inside the entry.  (#116789, Scott Bronson)
2004-07-11 03:37:48 +00:00
Matthias Clasen
37b90cc7d1 Update clipboards. (#142805, Mikael Hallendal)
Sat Jul 10 22:13:53 2004  Matthias Clasen  <maclas@gmx.de>

	* gtk/gtktextbuffer.c (gtk_text_buffer_select_range): Update
	clipboards.  (#142805, Mikael Hallendal)
2004-07-11 02:20:01 +00:00
Soeren Sandmann
3cac8b33fe Remove clip-region computing code. Just use &paned->handle_pos.
Sun Jul 11 01:38:48 2004  Soeren Sandmann  <sandmann@daimi.au.dk>

	* gtk/gtkpaned.c (gtk_paned_expose): Remove clip-region computing
	code. Just use &paned->handle_pos.
2004-07-10 23:42:47 +00:00
Soeren Sandmann
18bec8700a Bug 144371
Sun Jul 11 01:12:50 2004  Soeren Sandmann  <sandmann@daimi.au.dk>

	Bug 144371

	* gtk/gtknotebook.c (gtk_notebook_size_allocate): Remove an
	unnecessary redraw..

	* gtk/gtknotebook.c (gtk_notebook_page_allocate): Remove some
	incorrect redraws.
2004-07-10 23:14:14 +00:00
Federico Mena Quintero
42067dfbab Fixes #137031:
2004-07-09  Federico Mena Quintero  <federico@ximian.com>

	Fixes #137031:

	* gtk/gtkfilesystemunix.c (get_fallback_icon): New helper
	function, fetches a stock icon as a fallback.
	(gtk_file_system_unix_volume_render_icon): Fall back to a stock
	icon.
	(gtk_file_system_unix_render_icon): Fall back to a stock icon.
	Use helper functions rather than being a mega-function.
	(get_icon_name_for_directory): Renamed from
	get_icon_for_directory().
	(get_icon_type_from_path): New helper function; code pulled out
	from gtk_file_system_unix_render_icon().
	(get_special_icon): Likewise.
	(get_icon_for_mime_type): Likewise.
2004-07-09 21:13:20 +00:00
Matthias Clasen
f4ed8b2e2b Use the requisition of the widget instead of relying on the style drawing
2004-07-09  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtktooltips.c (gtk_tooltips_paint_window): Use the
	requisition of the widget instead of relying on the style
	drawing function to supply the size of the drawable.  (#146531)
2004-07-09 18:08:35 +00:00
Matthias Clasen
ca99bb0d44 Make GtkEntry work harder to protect passwords: (#143955, Morten Welinder)
2004-07-09  Matthias Clasen  <mclasen@redhat.com>

 	Make GtkEntry work harder to protect passwords:  (#143955,
	Morten Welinder)

	* gtk/gtkentry.c (gtk_entry_destroy): Add a destroy handler
	to clear the password even if the widget is leaked.

	* gtk/gtkentry.c (gtk_entry_real_delete_text):
	* gtk/gtkentry.c (gtk_entry_finalize): Zero out the memory
	before freeing it.

	* gtk/gtkentry.c (gtk_entry_real_insert_text): Zero and free
	the old memory instead of just reallocating it.

	* gtk/gtkentry.c (gtk_entry_create_layout): Don't leak text
	direction information for passwords.
2004-07-09 15:11:36 +00:00
Matthias Clasen
ee63b081c2 Fix some cases where style functions were not handling widget == NULL
2004-07-09  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkstyle.c: Fix some cases where style functions were
	not handling widget == NULL properly.  (#146282)
2004-07-09 14:40:36 +00:00
Matthias Clasen
0e0a2bc0e6 Improve the EXPANDER_MAX warning.
Thu Jul  8 22:38:58 2004  Matthias Clasen  <maclas@gmx.de>

	* gtk/gtktreeview.c: Improve the EXPANDER_MAX warning.
2004-07-09 02:44:24 +00:00
Federico Mena Quintero
b3fbcef831 Fix #139290:
2004-07-08  Federico Mena Quintero  <federico@ximian.com>

	Fix #139290:

	* gtk/gtkfilesystemmodel.c (_gtk_file_system_model_new): Add a
	GError argument.  Do check for errors when getting the
	GtkFileFolder:  get the folder and read the children before
	actually creating the model.  Removed obsolete code that handled
	roots-changed on the file system.
	(file_model_node_get_info): Assert that we don't reach the old
	case to display file system roots.
	(roots_changed_callback): Removed.

	* gtk/gtkfilechooserdefault.c (set_list_model): Add a GError
	argument, and a boolean return value.  Return an error if we
	cannot create the file system model.  On error, set a NULL model
	on the tree.
	(gtk_file_chooser_default_set_current_folder): Use the error value
	from set_list_model().
	(gtk_file_chooser_default_set_property): Set the show_hidden
	property only if the browse_files_model exists.
	(gtk_file_chooser_default_unselect_path): Only operate if the
	browse_files_model exists.
	(check_preview_change): Check whether we have the sort_model.
	(change_folder_and_display_error): Copy the path we get passed
	before using it.  There's a comment in there that explains why we
	need to copy it; basically, if the passed path belongs to the
	model, the model may go away in the middle of this function and
	we'll be left with a dangling pointer.
	(install_list_model_filter): Assert that the model is not NULL.
	(set_current_filter): Check whether the model exists.

	* gtk/gtktreeselection.c (gtk_tree_selection_get_selected): Don't
	g_return_if_fail if the model is NULL.
	(gtk_tree_selection_get_selected_rows): Likewise.
	(gtk_tree_selection_count_selected_rows): Likewise.
	(gtk_tree_selection_selected_foreach): Likewise.
	(gtk_tree_selection_path_is_selected): Likewise; rather just
	return FALSE.
	(gtk_tree_selection_select_all): Likewise.
	(gtk_tree_selection_unselect_all): Likewise.
	(gtk_tree_selection_select_range): Do g_return_if_fail() if the
	model is NULL.
	(gtk_tree_selection_unselect_range): Likewise.

	* gtk/gtkfilesystemunix.c (fill_in_names): Return immediately if
	g_dir_open() fails:  there is no need to set the error ourselves,
	as g_dir_open() already does it.
2004-07-09 00:53:48 +00:00
Matthias Clasen
57e8c48a0c Allow to restore the default search function. (#145365, John Finlay)
* gtk/gtktreeview.c (gtk_tree_view_set_search_equal_func): Allow
	to restore the default search function.  (#145365, John Finlay)
2004-07-08 21:19:23 +00:00
Matthias Clasen
39fb304f97 Stop editing when a new model is set. (#145566, Dmitry M. Shatrov)
Thu Jul  8 00:33:15 2004  Matthias Clasen  <maclas@gmx.de>

	* gtk/gtktreeview.c (gtk_tree_view_set_model):  Stop editing
	when a new model is set.  (#145566, Dmitry M. Shatrov)
2004-07-08 04:33:50 +00:00
Matthias Clasen
f141bf2b9f Make sure that subpixbufs are properly aligned for
Wed Jul  7 23:44:32 2004  Matthias Clasen  <maclas@gmx.de>

	* gtk/gtkimage.c (gtk_image_expose): Make sure that subpixbufs
	are properly aligned for gdk_pixbuf_saturate_and_pixelate(),
	in order to avoid rendering artifacts from misaligned
	pixelation patterns.  (#145585, Felipe Heidrich, Billy Biggs)
2004-07-08 03:48:10 +00:00
Matthias Clasen
f2ac32337e Small documentation fixes.
2004-07-07  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtktreeview.c:
	* gtk/gtktreeview.h: Small documentation fixes.
2004-07-07 16:24:55 +00:00
Matthias Clasen
84a6adf83c Small documentation fixes.
2004-07-07  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtktreeview.c:
	* gtk/gtktreeview.h: Small documentation fixes.
2004-07-07 15:55:28 +00:00
Matthias Clasen
bb4a9f9008 Forgotten file. 2004-07-07 15:26:21 +00:00
Matthias Clasen
1aa00e5215 Support separators in combo boxes and more generally in tree views
2004-07-07  Matthias Clasen  <mclasen@redhat.com>

	Support separators in combo boxes and more generally in tree
	views  (#135873):

	* gtk/gtkcombobox.h:
	* gtk/gtkcombobox.c (gtk_combo_box_get_row_separator_column):
	* gtk/gtkcombobox.c (gtk_combo_box_set_row_separator_column):
	Add a ::row-separator-column property with getter and setter,
	which can indicate a boolean model column to determine which
	rows are separators.

	* gtk/gtkcombobox.c: Display separator rows as separator menu
	items in menu mode, and by using the new treeview separator
	functionality in list mode.

	* gtk/gtktreeview.h:
	* gtk/gtktreeview.c (gtk_tree_view_get_row_separator_func):
	* gtk/gtktreeview.c (gtk_tree_view_set_row_separator_func):
	Add a callback to determine whether a row is a separator.

	* gtk/gtktreeview.c (gtk_tree_view_bin_expose):
	* gtk/gtktreeview.c (gtk_tree_view_create_row_drag_icon):
	* gtk/gtktreeview.c (validate_row): Use the new callback
	to determine whether a row is a separator, and draw it
	as a separator then. Since separators should take up less
	vertical space than regular rows, this requires removing
	the redundant MAX(...,expander_size) calls which appear in
	many places. Instead, the MAX() is now only done in
	validate_row(), and only if the row is not a separator.
	To catch possible side effects of this intrusive change,
	I have left EXPANDER_MAX() calls in place of the MAX() calls
	which will emit a warning if something breaks. They should
	be removed before 2.6.

	* gtk/gtktreeselection.c (row_is_selectable): Don't let
	separator rows be selected.

	* tests/testcombo.c (create_blaat): Add a separator column.
2004-07-07 15:15:35 +00:00
Matthias Clasen
6b27f20668 Add stock_file_16.png, stock_file_24.png, stock_directory_16.png and
2004-07-06  Matthias Clasen  <mclasen@redhat.com>

	* gtk/stock-icons/Makefile.am: Add stock_file_16.png,
	stock_file_24.png, stock_directory_16.png and stock_directory_24.png.

	* gtk/gtkstock.h (GTK_STOCK_FILE, GTK_STOCK_DIRECTORY):
	* gtk/gtkiconfactory.c (get_default_icons): New stock icons as
	fallbacks for gtkfilechooser. Currently these are the same images
	as the "new" and "open" items...
2004-07-06 20:28:48 +00:00