aboutsummaryrefslogtreecommitdiffstats
path: root/mail/message-list.c
Commit message (Expand)AuthorAgeFilesLines
* return the right type, related to #53839.Not Zed2004-04-281-1/+3
* Same.Jeffrey Stedfast2004-04-201-3/+2
* Removed variables that got re-added with the icon-theme patch somehow.Jeffrey Stedfast2004-04-201-3/+3
* mail-component.cMichael Terry2004-04-191-39/+22
* Added a new "message_list_scrolled" signal so our users can listen to thisJeffrey Stedfast2004-04-151-11/+27
* ugh, use the queued thread to get the folder, otherwise we can get foldersNot Zed2004-04-141-8/+37
* ** See bug #56149.Not Zed2004-04-141-31/+2
* New function. (message_list_set_scrollbar_position): New function.Jeffrey Stedfast2004-04-131-0/+20
* VJUNK_FOLDER's dont exist, they're VTRASH folders now.Not Zed2004-04-081-22/+1
* Cleaned up header inclusions and added plenty of forward declarations.Not Zed2004-03-311-2/+11
* NOOP if the folder has changed.Not Zed2004-02-261-4/+7
* ** See bug #53258.Not Zed2004-02-061-14/+13
* ** See bug #53549, partial fix.Not Zed2004-01-301-0/+4
* ** See bug #53320 and probably othersNot Zed2004-01-291-34/+46
* Migrate the ETree expanded state files as well as the GalView files.Jeffrey Stedfast2004-01-221-10/+10
* ** See bug #53028.Not Zed2004-01-201-1/+3
* ** See bug #52989.Not Zed2004-01-201-6/+14
* removed this like i asked radek to ages ago, just call the parentNot Zed2004-01-191-0/+1
* Move 'message_list->folder = folder;' out of the uri compare if-block andJeffrey Stedfast2004-01-161-8/+9
* Check that the folder isn't NULL (ie. no folder is selected). Fixes bugJeffrey Stedfast2004-01-061-1/+7
* put the style in .evolution.Not Zed2003-12-121-0/+3
* setup another image (followup completed) to flag status list.Not Zed2003-12-021-6/+15
* Same.Jeffrey Stedfast2003-11-201-5/+5
* merged spam filtering branchRadek Doulik2003-11-131-40/+72
* Don't #include e-name-western.h, since the code that uses it is commentedDan Winship2003-11-081-1/+0
* Removed, use em_utils_selection_get_uidlist() instead. (drop_uid_list):Jeffrey Stedfast2003-10-231-8/+8
* Fix for bug #48618.Jeffrey Stedfast2003-09-201-1/+0
* updated for camel namespace changesJeffrey Stedfast2003-09-191-2/+2
* cvs removed.Not Zed2003-09-181-34/+456
* temporarily reverting camel namespace changes until after other branches have...Jeffrey Stedfast2003-08-271-2/+2
* updated for namespace changed made to camel-mime-utils.[c,h]Jeffrey Stedfast2003-08-261-2/+2
* translate the local time format.Not Zed2003-08-231-1/+1
* Fix type warnings (folder_browser_toggle_caret_mode): Remove unusedDan Winship2003-07-231-1/+1
* Use the newer utf8 versions of the e_strftime*() functions since ourJeffrey Stedfast2003-07-021-5/+5
* Might fix bug #45368 but I wouldn't bet on it.Jeffrey Stedfast2003-06-251-2/+2
* Save the idle_idDan Winship2003-06-241-1/+1
* Only save state if we have a folder reference. Fixes some warnings aboutJeffrey Stedfast2003-06-191-1/+4
* Don't display an unread icon for a parent message status if it has unreadJeffrey Stedfast2003-06-181-13/+1
* ** See bug #44609Not Zed2003-06-171-2/+30
* Use mail-config's gconf client. (target_date_new): Same.Jeffrey Stedfast2003-06-121-2/+2
* Add #include to fix warning.Jeremy Katz2003-05-171-3/+3
* To be consistant with the message-list envelope toggle, undelete theJeffrey Stedfast2003-05-031-2/+19
* ** See bug #41972Not Zed2003-04-301-4/+4
* create a stock cancel button with a cancel all text. (build_dialogue):Not Zed2003-04-151-0/+3
* For string columns, never return NULL - always return "" if the value isJeffrey Stedfast2003-04-081-12/+16
* Fixes bug #40074.Jeffrey Stedfast2003-03-271-0/+8
* Register a destroy virtual method. (mail_accounts_tab_destroy): SetJeffrey Stedfast2003-02-121-12/+13
* Use g_signal_emit() rather than gtk_signal_emit(). (build_flat): SameJeffrey Stedfast2003-02-111-12/+12
* updated for e scroll frame --> gtk scrolled windowRadek Doulik2003-02-051-1/+1
* Get the thread_subject setting here instead of in regen_list_regen sinceJeffrey Stedfast2003-02-041-7/+7
* New function to return a cached list of labels.Jeffrey Stedfast2003-02-011-1/+7
* removed a FIXME commentJeffrey Stedfast2003-01-271-1/+0
* reverted fe casts and added ChageLog entriesRadek Doulik2003-01-151-1/+1
* EScrollFrame --> GtkScrolledWindowRadek Doulik2003-01-151-4/+2
* Use gconf to get the paned size. (folder_browser_set_message_preview):Jeffrey Stedfast2003-01-081-22/+33
* frobbed around with these till it exits without crashing.Not Zed2002-12-031-27/+38
* Duh idiot, "un-fixed" the memleak i added.Not Zed2002-11-261-1/+0
* gtk_widget_set_parent_window -> gtk_window_set_transient_for.Not Zed2002-11-261-3/+14
* Want a (GWeakNotify) cast here, not (GWeakNotify *).Ettore Perazzoli2002-11-151-12/+12
* Commented out stuff that doesn't build yet. Also fixed idl build rule.Not Zed2002-11-121-80/+81
* rename this from "Mail.idl" so that the generated .h file won't overwriteDan Winship2002-09-131-1/+0
* If we already have a folder, make sure we unref/unhook from it. Fixes aNot Zed2002-09-101-1/+11
* Pass mail_config_get_thread_subject() as the third argument toJeffrey Stedfast2002-08-281-1/+2
* Don't bother overloading the timeout virtual methods since they don'tJeffrey Stedfast2002-08-221-2/+2
* Once we hit the target node, update the cursor_uid if it's set. FixesPeter Williams2002-08-211-0/+4
* Only count hidden messages which are in the folder. Should probablyNot Zed2002-08-061-2/+24
* If we are not in interactive mode, don't display error dialogs.Jeffrey Stedfast2002-08-061-9/+22
* Updated to use the new Follow-Up tags. Instead of storing a stringJeffrey Stedfast2002-08-031-36/+17
* Remove the assert, and always copy over the threadtree which representsNot Zed2002-07-221-5/+4
* Lookup the label colour based on the label token, not an integer.Not Zed2002-07-161-1/+3
* New convenience function to find the first parent node that is visible andJeffrey Stedfast2002-06-191-2/+23
* New convenience function to get a cached normalised string.Jeffrey Stedfast2002-06-181-56/+127
* If we dont support searching, dont try to.Not Zed2002-06-171-2/+5
* Move m->complete = TRUE; to within the cancel-check block, this wayJeffrey Stedfast2002-06-121-2/+2
* If we dont get a folder, dont try and get details off it. Should get ridNot Zed2002-06-111-29/+77
* Keep track of the regeneration request in a list. (regen_list_free):Not Zed2002-06-061-18/+42
* Implement, return a text description of the localfolder.Not Zed2002-06-031-1/+19
* Check for a label tag when doing a lookup on the COLOR column.Jeffrey Stedfast2002-05-171-11/+18
* Instead of g_assert()ing that the msg_info is not NULL, if it is NULL justJeffrey Stedfast2002-05-151-1/+2
* Implemented.Jeffrey Stedfast2002-03-151-1/+35
* Connect to the focus-in/out events on the message-list so that we canJeffrey Stedfast2002-03-051-3/+0
* Removed, this wasn't working as intended and seemed to break otherJeffrey Stedfast2002-02-231-29/+0
* Connect to our own message_list_built signal. Focus the list and selectJeffrey Stedfast2002-02-221-1/+29
* Prompt the user to find out if he/she wants to go to the next folder withJeffrey Stedfast2002-02-201-7/+9
* Set the followup icon to use the new flag icon rather than the exclamationJeffrey Stedfast2002-02-141-1/+2
* Get followup-up message-list values. Also highlight the message in red ifJeffrey Stedfast2002-02-121-74/+145
* removed more needs-reply cruftJeffrey Stedfast2002-02-081-6/+0
* Bumped the required version of gal.Christopher James Lahey2002-02-071-120/+51
* Removed references to NEEDS_REPLY.Jeffrey Stedfast2002-02-071-20/+0
* When performing a wraparound, check to see if the first (or last dependingJeffrey Stedfast2002-01-091-4/+21
* Makes the auto-undelete behavior when changing message flags a bit moreJon Trowbridge2001-12-211-3/+15
* Add ETable magic for our new "Needs Reply" column. (The next few entriesJon Trowbridge2001-12-121-49/+47
* Implements marking messages as "Need Reply".Jon Trowbridge2001-12-101-22/+48
* If the path exists, make sure it's a regular file (or we can't possiblyJeffrey Stedfast2001-12-041-13/+22
* Reverted my hide_save_state patch.Jeffrey Stedfast2001-11-221-6/+0
* 'n' shouldn't wrap if 'p' doesn't.Jeffrey Stedfast2001-11-211-9/+0
* Save hide state. (message_list_hide_uids): Save hide state.Jeffrey Stedfast2001-11-171-1/+7
* Use GINT_TO_POINTER here for platforms where simply casting an int to voidChristopher James Lahey2001-11-031-3/+7
* Argh!!! Dont free the async op data here, the async op is still running02001-10-301-2/+5
* So apparently the uicomp can just 'vanish' while we're using it. Joy. Take52001-10-261-2/+2
* Dont do anything if we're destroyed #13021.32001-10-241-0/+3
* Check that the cursor_uid is non-NULL before emitting a "message_selected"Jeffrey Stedfast2001-10-171-1/+1
* Added an async_event handler to store_info. (mail_note_store): Setup asyncMichael Zucci2001-10-171-17/+10
* Revert the change to remove the Score column until Chris can fix ETable soDan Winship2001-10-131-2/+52
* removed Score stuff from the message-listJeffrey Stedfast2001-10-131-52/+2
* Update for folder_flags.Dan Winship2001-10-091-7/+3
* Turn on "uniform_row_height" argument.Christopher James Lahey2001-10-051-0/+4
* Check for the root node here.Christopher James Lahey2001-09-271-0/+3
* Use e_tree_selected_path_foreach instead of e_tree_selected_row_foreachChristopher James Lahey2001-09-261-4/+4
* Use e_strftime_fix_am_pm instead of strftime.Christopher James Lahey2001-09-251-5/+5
* General cleanup of mail debug printfs.92001-09-191-3/+18
* Updated required version of gal to 0.11.99.4.Christopher James Lahey2001-09-171-1/+1
* Use g_utf8_collate instead of g_strcasecmp for comparing names.Chyla Zbigniew2001-09-011-9/+13
* Use the new e_mkdtemp function.Jeffrey Stedfast2001-08-251-37/+37
* Check to make sure we actually have drag data.Jeffrey Stedfast2001-08-241-5/+5
* Don't sink the extras since _set_folder can get called more than once (onPeter Williams2001-08-221-3/+1
* Always remove the idle and return FALSE, instead of returning TRUE if morePeter Williams2001-08-161-6/+4
* Use ALWAYS for scroll frame policy because ETable acts lame withJason Leach2001-08-161-12/+10
* gets rid of those annoying operation-re-registered messages at last.Not Zed2001-08-151-10/+1
* Do some g_assert() action. Make sure that the node passed in is non-NULLJeffrey Stedfast2001-08-141-51/+57
* Since 'N' keypresses go through here now, use wrap-around selecting.Jason Leach2001-08-111-5/+12
* Free dbkey if we don't use it.Jeffrey Stedfast2001-08-101-16/+16
* Added a g_assert_not_reached() - I'm hoping this will help us track downJeffrey Stedfast2001-08-101-12/+16
* Fix inline documentation.Peter Williams2001-08-101-1/+3
* Dont double-register this operation, mail-mt will do it for us.Not Zed2001-08-091-1/+1
* Fix a minor glitch with how it started a backwards wraparound at the 2ndJason Leach2001-08-071-1/+1
* Add a @wraparound argument, so the 'n' and 'p' keypresses (or anythingJason Leach2001-08-051-3/+17
* Added. Provide description for filter_folder_op. (fetch_mail_describe):Jon Trowbridge2001-08-031-1/+8
* Go back to calling mail_msg_free here. (mail_msg_destroy): Remove theNot Zed2001-07-241-2/+11
* Set the vertical scrolling policy for the mail display to AUTOMATIC, onlyJason Leach2001-07-201-1/+2
* Some NULL protection for our strings: pgp_key, html_signature, smime_key.Peter Williams2001-07-101-0/+2
* Check for new_uid != NULL here before strcmping.Christopher James Lahey2001-07-081-1/+1
* Made this handle being given a row that's outside the range better.Christopher James Lahey2001-07-071-4/+9
* Mark the messages as Seen also. (folder_browser_class_init): Create anJeffrey Stedfast2001-07-071-87/+89
* Select the very next message after deleting, not the next undeleted (itJason Leach2001-07-071-10/+26
* Added an MailAccountEditorNews, for NNTP configuratuion. Based onSam Creasey2001-07-031-0/+20
* Update the copyrights, replacing Helix Code with Ximian andEttore Perazzoli2001-06-231-2/+2
* Implemented.Jeffrey Stedfast2001-06-161-106/+22
* (Fix bug #3211: Should undelete when flagging a delete message asJason Leach2001-06-061-1/+5
* Removed the etable spec string. (message_list_construct): Load the etableJeffrey Stedfast2001-05-281-35/+5
* g_strdup the uid into the ml->cursor_uid.Jeffrey Stedfast2001-05-251-1/+7
* Make the message-list respect the "hide deleted messages" setting. FixesJeffrey Stedfast2001-05-241-10/+11
* Instead of calling message_list_select_uid() here, instead connect to theJeffrey Stedfast2001-05-231-6/+18
* Functions to determine if a folderbrowser is one of the drafts, sent, orDan Winship2001-05-171-5/+5
* Don't advance to the next undeleted message after "Delete"...Dan Winship2001-05-111-7/+6
* Connect to key_press_event on the GtkHTML widget. (etree_key): Only handleDan Winship2001-05-081-0/+3
* #include <camel/camel-file-utils.h>Dan Winship2001-05-041-1/+2
* Updated to use camel-file-util routines. (hide_save_1): Same.Jeffrey Stedfast2001-04-271-17/+24
* Use the message-browser widget rather than the mail-view window.Jeffrey Stedfast2001-04-241-0/+28
* Don't need to dup the string: the relevant gnome-dialog routine alreadyDan Winship2001-04-191-0/+8
* Only activate the message if the cursor has moved.Christopher James Lahey2001-04-131-4/+13
* Updated this function to be a correct full ordering.Christopher James Lahey2001-04-131-72/+112
* Save the expanded state using the ETree built in expanded state code.Christopher James Lahey2001-04-111-109/+27
* Merge from evolution-0-10 to evolution-0-10-merge-0 into head.Not Zed2001-04-051-7/+57
* #include <camel/camel-vtrash-folder.h>Dan Winship2001-03-301-0/+1
* Cleaned up #includes. Remove unneccesary includes of <gnome.h>,Kjartan Maraas2001-03-301-15/+16
* Create a vtrash folder, not a vee folder.Not Zed2001-03-291-13/+60
* Turned on BROKEN_ETREE.Christopher James Lahey2001-03-231-1/+1
* Remove the node before freeing the data it points to.Christopher James Lahey2001-03-201-5/+5
* Bumped gal requirement to 0.5.99.8.Christopher James Lahey2001-03-201-173/+186
* Move the proxy event outside the lock (otherwise we always deadlock).Not Zed2001-03-171-602/+301
* started hack for progress reporting, which is currently to the console.Not Zed2001-02-221-0/+4
* Wrapped the address compare functions in a #ifdef (address_compare):Jeffrey Stedfast2001-02-161-0/+10
* if doing a full update, save the cursor pos and restore it afterwards.Not Zed2001-02-131-4/+52
* Updates for CamelStore changes, small memory leak fixes. (lookup_folder):Dan Winship2001-02-101-44/+49
* Added libmenus.la.Christopher James Lahey2001-02-071-1/+1
* Change how the attachments are displayed.Iain Holmes2001-02-071-0/+1
* Cleaned up so we dont add an unecessary level of indenting.Not Zed2001-02-021-14/+51
* (build_tree): Oops, turn on BROKEN_ETREE again.Michael Zucci2001-01-291-3/+5
* Debug function to compare the tree we think we have, after an incrementalNot Zed2001-01-291-1/+56
* Protect against NULL address pointers. (subject_compare): Same but forJeffrey Stedfast2001-01-281-0/+6
* Define BROKEN_ETREE again, till we get this stuff fixed better.Not Zed2001-01-261-1/+1
* Yes, some more screw ups...Iain Holmes2001-01-261-12/+5
* GNOME_Evolution_Mail.oafinfoIain Holmes2001-01-261-5/+12
* Made the message list pay attention to the "cursor_activated" signalChristopher James Lahey2001-01-261-6/+6
* Try turning off the BROKEN_ETREE thing. It seems to work ok (better?) now,Not Zed2001-01-231-3/+3
* remove a warning with conditional news compilation.Not Zed2001-01-221-1/+1
* Added draw-focus="true" and selection-mode="browse" attributes to theChristopher James Lahey2001-01-211-4/+1
* Change from using filters for date and size to using e_cell_date andChristopher James Lahey2001-01-161-12/+14
* Set the default button to `Yes' here.Miguel de Icaza2001-01-151-1/+1
* Changed filter_date and filter_size to match the changes in gal.Christopher James Lahey2001-01-131-8/+9
* Add strings for localizationMiguel de Icaza2001-01-121-0/+8
* Made it so that going to the next or previous message in the list will atChristopher James Lahey2001-01-071-0/+3
* Removed old implementation.Not Zed2001-01-041-136/+113
* Changed this to format times in 12 hour time instead of 24 hour time.Christopher James Lahey2000-12-251-4/+4
* Changed this to do different formatting of dates within the last week.Christopher James Lahey2000-12-251-9/+28
* Merge from camel-mt-branch.Not Zed2000-12-241-47/+103
* Changed this to do different formatting of dates based on the currentChristopher James Lahey2000-12-231-5/+27
* Added titles to the pixbuf columns.Christopher James Lahey2000-12-231-4/+4
* Unlock camel when done to prevent a hang later.Dan Winship2000-12-191-0/+1
* Always use the slow (full-update) version of the tree update code, to getNot Zed2000-12-161-13/+278
* Made the vertical scrollbar always be there.Christopher James Lahey2000-12-141-2/+2
* Remove the never-once-used BonoboObject stuff and make MessageList be aDan Winship2000-12-121-154/+63
* Change the "drawfocus" argument on e_table_scrolled_get_table(etable)Christopher James Lahey2000-12-101-1/+1
* a slight mixup in order causes "1.33 M" to be displayed as the subject...uh h...Jeffrey Stedfast2000-12-091-4/+4
* Set the "Size" field to sort using integer comparison instead of string.Jeffrey Stedfast2000-12-091-21/+40
* Connect to signals on the ETable instead of the ETableScrolled.Christopher James Lahey2000-12-091-4/+4
* Got rid of code referencing the ETableScrolled proxy functions. ChangedChristopher James Lahey2000-12-081-9/+9
* Use e_filename_make_safe (which used to be e_str_make_safe).Jeffrey Stedfast2000-12-071-1/+1
* Perform better error-handling.Jeffrey Stedfast2000-12-021-2/+5
* Don't display a dialog, instead inform the user that there was no new mailJeffrey Stedfast2000-12-011-4/+21
* Set threaded view before setting the folder (cleanup some flash onsNot Zed2000-11-301-99/+130
* Implement. (message_list_init): Connect the d&d signal.Jeffrey Stedfast2000-11-301-22/+11
* IF we dont find a source, clear the exception and ignore it silently. forNot Zed2000-11-211-14/+24
* Removed. No longer serves a purpose.Not Zed2000-11-211-12/+12
* Save out the md5 hash of the messageid as hex, since thats all we have forNot Zed2000-11-211-7/+11
* New comparison function that will replace address_compare if/when we everJeffrey Stedfast2000-11-211-69/+101
* Before we destroy ourselves, unhook ourselves from the folder updateNot Zed2000-11-171-1/+9
* Added the MessageViewSource bonobo menu verb.Jeffrey Stedfast2000-11-171-0/+1
* Update the gal reqiurement version.Christopher James Lahey2000-11-141-3/+5
* A very, long, very tedious IDL API rename and re-scoping;Michael Meeks2000-11-111-14/+14
* don't free the MessageList search when it's being reusedDan Winship2000-11-041-1/+1
* Added new header files.Jeffrey Stedfast2000-11-041-24/+23
* Added mail-display.h.Not Zed2000-11-031-257/+73
* Sync with message menu. Addresses bugzilla bug #778.Jeffrey Stedfast2000-11-031-0/+3
* Turn on draw grid for the main ETable (this may not be working in ETableChristopher James Lahey2000-11-031-1/+1
* ** Merged in camel-incremental-branch.Not Zed2000-11-021-176/+632
* Don't try to regenerate the message list if there is no folder. (TheDan Winship2000-10-301-0/+6
* Add a "flagged" column, based on the Camel "flagged" flag, for assigningDan Winship2000-10-261-43/+83
* lots of i18n fixesDan Winship2000-10-241-11/+5
* Fixed a possible error in row numberings. This needs to be changed quite aChristopher James Lahey2000-10-241-1/+2
* Make the vertical toolbar always visible in the message list and theEttore Perazzoli2000-10-231-2/+3
* e-tree-model is now opaque. use the accessor to get the root node.Chris Toshok2000-10-201-2/+4
* For an imap store, just refresh the INBOX.Dan Winship2000-10-201-1/+2
* Fixed some column widths.Christopher James Lahey2000-10-191-3/+3
* No, we REALLY dont want to perform an immediate search as the keys areNot Zed2000-10-181-1/+1
* Uh, fixed jeff's wrong fix for setting the speficiation (the functionNot Zed2000-10-161-16/+5
* ETreePath != GNode now, use accessors. (ml_tree_value_at): same.Chris Toshok2000-10-161-15/+18
* Don't free the service name.Jeffrey Stedfast2000-10-141-11/+10
* Create the 'spec' and 'extras' arguments and call e_table_scrolled_new()Jeffrey Stedfast2000-10-131-5/+80
* Duh, fix the test for the folder name, strstr != strcmp is it.Not Zed2000-10-121-26/+8
* Replace To with From except in Drafts, Outbox, or Sent boxes. Make SubjectChristopher James Lahey2000-10-121-4/+4
* Changed these to use the proper form for the column element.Christopher James Lahey2000-10-111-4/+4
* Updated these to the new ETable style of specifications.Christopher James Lahey2000-10-111-173/+69
* New widget, full search dialogue for mail.Not Zed2000-10-091-2/+55
* re-write.Michael Meeks2000-10-091-3/+9
* Use CamelInternetAddress instead of my quick hack (aka InternetAddress).Jeffrey Stedfast2000-10-051-153/+38
* Fix the attachment icon width. (content_is_attachment): Perform someNot Zed2000-10-041-4/+41
* remove the 2 tree pixbufs, so adjust the offsets to the score pixbufs.Chris Toshok2000-10-031-7/+2
* Update for CamelFolderInfo changes.Dan Winship2000-10-031-1/+2
* Function to convert a folder name/path to a filename for per-folder data.Not Zed2000-09-261-15/+158
* Updated to use Nat's ENameWestern parser.Jeffrey Stedfast2000-09-261-6/+46
* Fix a crash that happened on my system when sorting by the "From"Ettore Perazzoli2000-09-231-2/+9
* New comparison function for email addresses. (subject_compare): NewJeffrey Stedfast2000-09-231-6/+23
* New comparison function for email addresses. (subject_compare): NewJeffrey Stedfast2000-09-221-3/+162
* Removed COL_ONLINE_STATUS because we don't want that. Renamed COL_PRIORITYJeffrey Stedfast2000-09-191-108/+149
* Added check for gnome-app-lib. Removed directories that have been moved toChristopher James Lahey2000-09-181-5/+5
* For additional coolness, display the name of the mailing list in theEttore Perazzoli2000-09-121-5/+18
* Grey out the "Filter for Mailing List" item if we cannot figure out aEttore Perazzoli2000-09-121-26/+33
* Cool Hack of the Day: right-click menu item to autodetect what mailingEttore Perazzoli2000-09-121-0/+24