Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | GalViewCollection: We don't need no stinkin' factories! | Matthew Barnes | 2013-07-06 | 1 | -15/+37 |
| | | | | | | | | | Given a type code string from an XML file, find the appropriate GType by traversing the GType hierarchy from GAL_TYPE_VIEW and checking the class structures for a matching type code string. This completely eliminates the need for what's left of GalViewFactory. Now it's just a matter of cleaning up the remains. | ||||
* | GalViewCollection: Move public members into private section. | Matthew Barnes | 2013-07-06 | 3 | -121/+140 |
| | |||||
* | GalViewCollection: Add a private section. | Matthew Barnes | 2013-07-06 | 3 | -0/+16 |
| | |||||
* | Use gal_view_collection_get_user_directory() where needed. | Matthew Barnes | 2013-07-06 | 2 | -6/+16 |
| | | | | | | GalViewInstance and EMailPanedView need access. Currently they're just using the public GalViewCollection members directly, but those are about to be sealed up. | ||||
* | GalViewCollection: Add a "user-directory" property. | Matthew Barnes | 2013-07-06 | 3 | -1/+40 |
| | | | | | | | | | | Just readable for now, but I plan to make it also construct-only. (Despite the precendence, I prefer "user" over "local" for the name.) New functions: gal_view_collection_get_user_directory() | ||||
* | GalViewCollection: Add a "system-directory" property. | Matthew Barnes | 2013-07-06 | 3 | -0/+56 |
| | | | | | | | | Just readable for now, but I plan to make it also construct-only. New functions: gal_view_collection_get_system_directory() | ||||
* | GalViewCollection cleanups. | Matthew Barnes | 2013-07-06 | 2 | -71/+52 |
| | |||||
* | Remove unused gal_view_collection_set_default_view(). | Matthew Barnes | 2013-07-06 | 3 | -14/+0 |
| | |||||
* | Remove unused gal_view_collection_copy_view(). | Matthew Barnes | 2013-07-06 | 3 | -39/+0 |
| | |||||
* | Remove unused gal_view_collection_append(). | Matthew Barnes | 2013-07-06 | 3 | -38/+0 |
| | |||||
* | Remove unused gal_view_collection_get_view_id_by_index(). | Matthew Barnes | 2013-07-06 | 3 | -15/+0 |
| | |||||
* | GalViewCollection: Remove "title" member. | Matthew Barnes | 2013-07-06 | 4 | -21/+0 |
| | | | | | | | | It's set by EShellView but not actually used for anything. Removed functions: gal_view_collection_set_title() | ||||
* | GalViewCollection: Remove unused "display-view" signal. | Matthew Barnes | 2013-07-06 | 3 | -39/+0 |
| | | | | | | Removed functions: gal_view_collection_display_view() | ||||
* | GalViewFactoryClass: Remove the new_view() method. | Matthew Barnes | 2013-07-06 | 5 | -65/+4 |
| | | | | | GalViewFactory can now use its "gal_view_type" class member to instantiate an appropriate GalView without help from subclasses. | ||||
* | GalViewFactoryClass: Remove the get_type_code() method. | Matthew Barnes | 2013-07-06 | 5 | -45/+8 |
| | | | | | GalViewFactory can now use its "gal_view_type" class member to peek at the appropriate GalViewClass and return its static "type_code" string. | ||||
* | GalViewFactoryClass: Add a "gal_view_type" member. | Matthew Barnes | 2013-07-06 | 4 | -0/+8 |
| | | | | | | | This is the GType of the GalView instances the factory creates. Having this information will allow GalViewFactoryClass to do more itself and be less reliant on subclasses. | ||||
* | Split CalendarViewFactory into separate classes by view type. | Matthew Barnes | 2013-07-06 | 3 | -155/+132 |
| | | | | | I suspect this will enable us to ditch GalViewFactory entirely once I rework a few more things. We'll see though; one step at a time here. | ||||
* | GalViewClass: Replace get_type_code() with "type_code" string. | Matthew Barnes | 2013-07-06 | 8 | -88/+29 |
| | | | | | | All GalView subclasses return a static string in their get_type_code() methods, so replace the method with a static string pointer directly in the class structure, and remove the "type-code" GalView property. | ||||
* | Split CalendarView into separate classes by view type. | Matthew Barnes | 2013-07-06 | 4 | -148/+122 |
| | | | | | It's better to have separate classes each with a fixed type code, than one class with a variable type code. You'll see why in the next commit. | ||||
* | GalViewFactoryEtable: Remove "specification" property. | Matthew Barnes | 2013-07-06 | 8 | -203/+8 |
| | | | | | | | | No longer needed. Removed functions: gal_view_factory_etable_get_specification() | ||||
* | GalViewEtable: Remove ETableState member. | Matthew Barnes | 2013-07-06 | 1 | -31/+39 |
| | | | | Obtain the ETableState from the attached ETable or ETree as needed. | ||||
* | Remove gal_view_etable_set_state(). | Matthew Barnes | 2013-07-06 | 3 | -16/+0 |
| | | | | No longer used. | ||||
* | GalViewEtable: Remove ETableSpecification member. | Matthew Barnes | 2013-07-06 | 5 | -89/+67 |
| | | | | | | | Instead, lazily load the state file once an ETable or ETree is attached, since we need its ETableSpecification to create an ETableState instance. This means GalViewFactoryEtable can lose its ETableSpecification too. | ||||
* | GalViewEtable: Add a private section. | Matthew Barnes | 2013-07-06 | 3 | -45/+62 |
| | |||||
* | GalView: Store the title string internally. | Matthew Barnes | 2013-07-06 | 9 | -195/+39 |
| | | | | | This replaces the get_title() and set_title() class methods, since it's silly to defer to subclasses to track a simple string property. | ||||
* | GalView: Add a private section. | Matthew Barnes | 2013-07-06 | 3 | -0/+15 |
| | |||||
* | GalView-related cleanups. | Matthew Barnes | 2013-07-06 | 8 | -135/+91 |
| | |||||
* | GalViewFactory: Remove get_title() method. | Matthew Barnes | 2013-07-06 | 6 | -67/+0 |
| | | | | | | | | No longer used. Removed functions: gal_view_factory_get_title() | ||||
* | GalView: Remove edit() method. | Matthew Barnes | 2013-07-06 | 6 | -65/+0 |
| | | | | | | | | No longer used. Removed functions: gal_view_edit() | ||||
* | Remove GalViewNewDialog. | Matthew Barnes | 2013-07-06 | 10 | -576/+0 |
| | | | | No longer user. | ||||
* | Remove GalDefineViewsModel. | Matthew Barnes | 2013-07-06 | 10 | -479/+0 |
| | | | | No longer used. | ||||
* | Remove GalDefineViewsDialog. | Matthew Barnes | 2013-07-06 | 10 | -730/+0 |
| | | | | No longer used. | ||||
* | Replace "Define Views..." menu item with "Delete Current View". | Matthew Barnes | 2013-07-06 | 4 | -28/+42 |
| | | | | | | | | | | | The "Define Views" dialog is nearly useless. Replace it with a "Delete Current View" menu item which is only visible for custom views that have been explicitly saved under a new name. There's actually no loss of functionality with this commit. Although some view management tasks now require more clicks, view management in general is a seldom-used feature and I doubt the dialog's absence will even be noticed by users, much less missed. | ||||
* | EShellView: Add a "view-instance" property. | Matthew Barnes | 2013-07-06 | 20 | -257/+221 |
| | | | | | | | | | | | | | | EShellView now holds a reference to the active GalViewInstance. Where applicable, the EShellView subclass is responsible for keeping this up to date when the sidebar selection changes. Holding a reference allows EShellView to implement common actions like "Save Current View" directly instead pushing it on to subclasses. New functions: e_shell_view_get_view_instance e_shell_view_set_view_instance | ||||
* | EShell-related cleanups. | Matthew Barnes | 2013-07-06 | 11 | -131/+134 |
| | |||||
* | Updated Norwegian bokmål translation | Kjartan Maraas | 2013-07-04 | 1 | -431/+440 |
| | |||||
* | EShellContent: Remove dangling function declarations. | Matthew Barnes | 2013-07-03 | 2 | -5/+0 |
| | | | | | The e_shell_content_get_view_id() and e_shell_content_set_view_id() header file declarations have no implementation. | ||||
* | Updated Spanish translation | Daniel Mustieles | 2013-07-03 | 1 | -304/+332 |
| | |||||
* | help: mail-encryption-gpg-signing-encrypting.page | Aruna Sankaranarayanan | 2013-07-03 | 1 | -2/+7 |
| | | | | | Added a comment to the page about a link from Seahorse, so that the seahorse help is suitably changed if this page is renamed/deleted. | ||||
* | Updated POTFILES.in | Piotr Drąg | 2013-07-03 | 1 | -0/+1 |
| | |||||
* | Fix compiler warnings in alarm-dialog.c. | Matthew Barnes | 2013-07-02 | 1 | -2/+1 |
| | |||||
* | Update evolution-util API docs. | Matthew Barnes | 2013-07-02 | 3 | -3/+9 |
| | |||||
* | ETableSpecification: Implement GInitable. | Matthew Barnes | 2013-07-02 | 14 | -109/+267 |
| | | | | | | | | | | | | | | | | e_table_specification_new() now takes a table specification filename and a GError and parses the file as part of instance creation. If a file or parse error occurs, e_table_specification_new() returns NULL. This replaces e_table_specification_load_from_file(). New functions: e_table_specification_get_filename() Removed functions: e_table_specification_load_from_file() | ||||
* | Remove e_tree_set_state(). | Matthew Barnes | 2013-07-02 | 3 | -29/+0 |
| | | | | No longer used. | ||||
* | Remove e_tree_get_state(). | Matthew Barnes | 2013-07-02 | 3 | -24/+0 |
| | | | | No longer used. | ||||
* | Remove e_table_set_state(). | Matthew Barnes | 2013-07-02 | 3 | -29/+0 |
| | | | | No longer used. | ||||
* | Remove e_table_get_state(). | Matthew Barnes | 2013-07-02 | 3 | -23/+0 |
| | | | | No longer used. | ||||
* | e-mail-shell-view.c: Avoid e_tree_set_state(). | Matthew Barnes | 2013-07-02 | 1 | -2/+12 |
| | | | | | Create our own ETableState and call e_table_state_load_from_string() followed by e_tree_set_state_object(). | ||||
* | e-mail-reader-utils.c: Avoid e_tree_get_state(). | Matthew Barnes | 2013-07-02 | 1 | -5/+4 |
| | | | | | Use e_tree_get_state_object() and e_tree_set_state_object() instead to transfer state info from one ETree instance to another. | ||||
* | ETableHeaderItem: Avoid e_table_set_state(). | Matthew Barnes | 2013-07-02 | 1 | -6/+9 |
| | | | | | | Use e_table_state_duplicate() and e_table_set_state_object(). Similarly for e_tree_set_state(). | ||||
* | Remove unused e_cal_list_view_save_state(). | Matthew Barnes | 2013-07-02 | 2 | -12/+0 |
| | |||||
* | Remove unused e_cal_list_view_load_state(). | Matthew Barnes | 2013-07-02 | 2 | -15/+0 |
| | |||||
* | Remove e_table_specification_load_from_string(). | Matthew Barnes | 2013-07-02 | 3 | -37/+7 |
| | | | | | | | No longer used outside of e-table-specification.c. Its logic is merged into e_table_specification_load_from_file(), but that too will be removed momentarily. | ||||
* | Remove e_tree_new_from_spec_file(). | Matthew Barnes | 2013-07-02 | 4 | -99/+8 |
| | | | | | | Also remove e_tree_construct_from_spec_file(). Use e_tree_new() or e_tree_construct() instead. | ||||
* | Remove e_table_new_from_spec_file(). | Matthew Barnes | 2013-07-02 | 7 | -96/+26 |
| | | | | | | Also remove e_table_construct_from_spec_file(). Use e_table_new() or e_table_construct() instead. | ||||
* | e_tree_new: Take an ETableSpecification parameter. | Matthew Barnes | 2013-07-02 | 2 | -27/+15 |
| | | | | | Creating an ETableSpecification is failable, so it's now up to the caller to do that and handle errors before calling e_tree_new(). | ||||
* | e_table_new: Take an ETableSpecification parameter. | Matthew Barnes | 2013-07-02 | 2 | -22/+13 |
| | | | | | Creating an ETableSpecification is failable, so it's now up to the caller to do that and handle errors before calling e_table_new(). | ||||
* | Remove ETableWithout. | Matthew Barnes | 2013-07-02 | 7 | -558/+0 |
| | | | | No longer used. | ||||
* | Remove ETableMemory. | Matthew Barnes | 2013-07-02 | 7 | -388/+0 |
| | | | | No longer used. | ||||
* | Remove ETableMemoryStore. | Matthew Barnes | 2013-07-02 | 7 | -815/+0 |
| | | | | No longer used. | ||||
* | ETableConfig: Use ETableColumnSelector. | Matthew Barnes | 2013-07-02 | 3 | -1091/+475 |
| | | | | | The other parts of this UI still look ancient, but this is a good first step. Plus we can remove a number of now-unused ETable-related classes. | ||||
* | Add ETableColumnSelector. | Matthew Barnes | 2013-07-02 | 7 | -0/+569 |
| | | | | | A new ETable column selection and ordering widget that looks like it was written in the 21st century. Derives from ETreeViewFrame. | ||||
* | ETreeViewFrame: Fix runtime warning during dispose. | Matthew Barnes | 2013-07-02 | 1 | -6/+2 |
| | |||||
* | e_tree_new_from_spec_file: Remove unused "state_fn" parameter. | Matthew Barnes | 2013-07-02 | 3 | -32/+8 |
| | |||||
* | e_tree_new: Remove unused "state_str" parameter. | Matthew Barnes | 2013-07-02 | 2 | -23/+7 |
| | |||||
* | e_table_new_from_spec_file: Remove unused "state_fn" parameter. | Matthew Barnes | 2013-07-02 | 6 | -38/+14 |
| | |||||
* | e_table_new: Remove unused "state_str" parameter. | Matthew Barnes | 2013-07-02 | 3 | -26/+8 |
| | |||||
* | Remove e_table_column_specification_load_from_node(). | Matthew Barnes | 2013-07-02 | 3 | -36/+0 |
| | | | | No longer used. | ||||
* | Remove e_table_specification_load_from_node(). | Matthew Barnes | 2013-07-02 | 3 | -97/+0 |
| | | | | No longer used. | ||||
* | Reimplement e_table_specification_load_from_file(). | Matthew Barnes | 2013-07-02 | 1 | -7/+8 |
| | | | | Use g_file_get_contents() and e_table_specification_load_from_string(). | ||||
* | Reimplement e_table_specification_load_from_string(). | Matthew Barnes | 2013-07-02 | 2 | -18/+392 |
| | | | | New parser implementation that uses GMarkupParser instead of libxml2. | ||||
* | Add e_table_state_parse_context_push/pop(). | Matthew Barnes | 2013-07-02 | 3 | -0/+236 |
| | | | | New parser implementation that uses GMarkupParser instead of libxml2. | ||||
* | Add e_table_sort_info_parse_context_push/pop(). | Matthew Barnes | 2013-07-02 | 3 | -0/+218 |
| | | | | New parser implementation that uses GMarkupParser instead of libxml2. | ||||
* | ETableSortInfo: Rework API to avoid exposing ETableSortColumn. | Matthew Barnes | 2013-07-02 | 10 | -396/+549 |
| | | | | | | | | Replace ETableSortColumn with separate ETableColumnSpecification and GtkSortType parameters in the "get_nth" and "set_nth" functions. Makes some other parts of the code simpler since it no longer has to translate a column number to a column specification. | ||||
* | Add e_table_sort_info_sorting_remove(). | Matthew Barnes | 2013-07-02 | 4 | -10/+25 |
| | |||||
* | ETableSortInfo: Move arrays to private section. | Matthew Barnes | 2013-07-02 | 2 | -72/+65 |
| | | | | And convert them to GArrays internally. | ||||
* | ETableSortInfo: Use *unsigned* ints for index/length params. | Matthew Barnes | 2013-07-02 | 2 | -20/+20 |
| | | | | So we don't have to worry about negative values. | ||||
* | ETableSortInfo: Move "sort_count" to private section. | Matthew Barnes | 2013-07-02 | 2 | -13/+14 |
| | | | | Use e_table_sort_info_sorting_get_count() to obtain the value. | ||||
* | ETableSortInfo: Move "group_count" to private section. | Matthew Barnes | 2013-07-02 | 2 | -10/+11 |
| | | | | Use e_table_sort_info_grouping_get_count() to obtain the value. | ||||
* | ETableSortInfo: Move "can_group" to private section. | Matthew Barnes | 2013-07-02 | 2 | -10/+17 |
| | | | | Use e_table_sort_info_get_can_group() to obtain the value. | ||||
* | ETableSortInfo: Remove some unused public members. | Matthew Barnes | 2013-07-02 | 1 | -3/+0 |
| | |||||
* | ETableSortInfo: Add a "specification" construct-only property. | Matthew Barnes | 2013-07-02 | 4 | -9/+126 |
| | | | | | | | | | | ETableSortInfo now keeps a weak reference on the ETableSpecification to which it's associated. The plan is to replace the column index numbers with a direct reference to an ETableColumnSpecification from the spec. New functions: e_table_sort_info_ref_specification() | ||||
* | ETableSortInfo: Add a private section. | Matthew Barnes | 2013-07-02 | 3 | -0/+16 |
| | |||||
* | ETableSortInfo cleanups. | Matthew Barnes | 2013-07-02 | 3 | -202/+204 |
| | |||||
* | ETaskShellContent: Remove hard-coded default table state. | Matthew Barnes | 2013-07-02 | 1 | -15/+0 |
| | | | | | | | | I don't remember why E_TASK_TABLE_DEFAULT_STATE was needed when e-calendar-table.etspec already specifies a default ETableState. Some of the column numbers it was referencing weren't even valid. Removing it seems to make no difference in Evolution. | ||||
* | EMemoShellContent: Remove hard-coded default table state. | Matthew Barnes | 2013-07-02 | 1 | -14/+0 |
| | | | | | | | I don't remember why E_MEMO_TABLE_DEFAULT_STATE was needed when e-memo-table.etspec already specifies a default ETableState. Removing it seems to make no difference in Evolution. | ||||
* | ETableState: Convert the column index array to a column spec array. | Matthew Barnes | 2013-07-02 | 6 | -116/+170 |
| | |||||
* | Add e_table_header_get_column_by_spec(). | Matthew Barnes | 2013-07-02 | 3 | -0/+36 |
| | | | | Will eventually replace e_table_header_get_column_by_col_idx(). | ||||
* | ETableCol: Embed an ETableColumnSpecification. | Matthew Barnes | 2013-07-02 | 16 | -240/+147 |
| | | | | Eliminates a few redundant fields. | ||||
* | Add e_table_specification_get_column_index(). | Matthew Barnes | 2013-07-02 | 3 | -0/+45 |
| | | | | | Lookups up the column index of an ETableColumnSpecification, returns a negative value if no match found. | ||||
* | Add e_table_column_specification_equal(). | Matthew Barnes | 2013-07-02 | 3 | -0/+32 |
| | | | | | Compares two ETableColumnSpecification instances for equality, which just means they both refer to the same model column number. | ||||
* | ETableColumnSpecification: Make "sortable" a boolean. | Matthew Barnes | 2013-07-02 | 3 | -10/+5 |
| | |||||
* | ETableSpecification: Make the columns array private. | Matthew Barnes | 2013-07-02 | 5 | -80/+133 |
| | | | | Use e_table_specification_ref_columns() to access column specs. | ||||
* | ETableSpecification: Add a private section. | Matthew Barnes | 2013-07-02 | 3 | -0/+17 |
| | |||||
* | Add e_table_specification_ref_columns(). | Matthew Barnes | 2013-07-02 | 3 | -1/+31 |
| | |||||
* | ETableState: Add a "specification" construct-only property. | Matthew Barnes | 2013-07-02 | 8 | -50/+145 |
| | | | | | | | | | | ETableState now keeps a weak reference on the ETableSpecification to which it's associated. The plan is to replace the column index numbers with a direct reference to an ETableColumnSpecification from the spec. New functions: e_table_state_ref_specification() | ||||
* | ETableState: Add a private section. | Matthew Barnes | 2013-07-02 | 3 | -2/+30 |
| | |||||
* | e-table-sorting-utils.c cleanups. | Matthew Barnes | 2013-07-02 | 2 | -54/+101 |
| | |||||
* | ETableGroupContainer cleanups. | Matthew Barnes | 2013-07-02 | 1 | -13/+22 |
| | |||||
* | Bug #689640 - Print Preview of composer text is empty | Milan Crha | 2013-07-02 | 1 | -0/+26 |
| | |||||
* | Bug #703194 - Custom alarm message is REMINDER | Fabiano Fidêncio | 2013-07-02 | 1 | -0/+9 |
| | |||||
* | Contacts view: Add 'Refresh' into books context menu | Milan Crha | 2013-07-01 | 6 | -1/+92 |
| | | | | Done as part of bug #700894 | ||||
* | Fix typo: appointmenet -> appointment | Fabiano Fidêncio | 2013-06-29 | 1 | -1/+1 |
| | |||||
* | Updated Czech translation | Marek Černocký | 2013-06-29 | 1 | -998/+984 |
| | |||||
* | Bug #703053 - Error on setting reminder 'after start of appointment' | Fabiano Fidêncio | 2013-06-28 | 2 | -71/+90 |
| | | | | | Check if the client supports setting 'after start' reminder and disable it if necessary (and also disabling 'before end of appoint') | ||||
* | Bug 703181 - Asked for password which is never used | David Woodhouse | 2013-06-28 | 1 | -9/+27 |
| | | | | | | | When the SASL mechanism reports that it can try an "empty password", give it the opportunity to do so before we demand that the user provide one. (Patch mostly by mbarnes; thanks) | ||||
* | Bug #699576 - Mail reader frame is black (in the mail view) | Milan Crha | 2013-06-28 | 1 | -2/+7 |
| | |||||
* | Set network-available on a CamelSession when going online | Milan Crha | 2013-06-27 | 1 | -0/+1 |
| | | | | | | | The network-available property was unset when going offline, but never set again, which caused download of messages for offline use broken, because it downloads for offline only if the network-available is set. | ||||
* | Remove unused e_table_sort_info_freeze/thaw(). | Matthew Barnes | 2013-06-26 | 3 | -62/+2 |
| | |||||
* | Remove unused e_table_column_specification_save_to_node(). | Matthew Barnes | 2013-06-26 | 3 | -34/+0 |
| | |||||
* | Remove unused e_table_specification_save_to_node(). | Matthew Barnes | 2013-06-26 | 3 | -68/+0 |
| | |||||
* | Remove unused e_table_specification_save_to_string(). | Matthew Barnes | 2013-06-26 | 3 | -34/+0 |
| | |||||
* | Remove unused e_table_specification_duplicate(). | Matthew Barnes | 2013-06-26 | 3 | -30/+0 |
| | |||||
* | Remove unused e_table_specification_save_to_file(). | Matthew Barnes | 2013-06-26 | 3 | -36/+0 |
| | |||||
* | ETableState cleanups. | Matthew Barnes | 2013-06-26 | 2 | -53/+40 |
| | |||||
* | ETableSpecification cleanups. | Matthew Barnes | 2013-06-26 | 2 | -112/+107 |
| | |||||
* | Updated Spanish translation | Daniel Mustieles | 2013-06-26 | 1 | -37/+38 |
| | |||||
* | EMailPrintConfigHeaders: Derive from ETreeViewFrame. | Matthew Barnes | 2013-06-26 | 2 | -423/+55 |
| | | | | | EMailPrintConfigHeaders is pretty simple now that we delegate most of the meat and potatoes tree view handling to our new parent class. | ||||
* | Add ETreeViewFrame. | Matthew Barnes | 2013-06-26 | 8 | -0/+1723 |
| | | | | | | | | | | | | ETreeViewFrame embeds a GtkTreeView in a scrolled window and adds an inline-style toolbar beneath the scrolled window which can be hidden. The inline-style toolbar supports "add" and "remove" actions, as well as move actions if the tree view is reorderable and selection actions if the tree view supports multiple selections. The action set can be extended through e_tree_view_frame_insert_toolbar_action(). This also adds a small demo program: test-tree-view-frame | ||||
* | Updated Spanish translation | Daniel Mustieles | 2013-06-25 | 1 | -195/+140 |
| | |||||
* | Bug #641711 - Crash in remove_queued_alarm | Milan Crha | 2013-06-25 | 1 | -7/+23 |
| | |||||
* | Updated Spanish translation | Daniel Mustieles | 2013-06-24 | 1 | -597/+801 |
| | |||||
* | Updated Spanish translation | Daniel Mustieles | 2013-06-24 | 1 | -487/+479 |
| | |||||
* | Notify user about question dialogs | Milan Crha | 2013-06-24 | 1 | -0/+26 |
| | | | | | | | | | Set an urgency hint on dialog's parent, or dialog itself, when it has no parent, to get user's attention to the dialog. For example, when there is a changed mail composer window on a different workspace than evolution's main window and user invokes quit by File->Quit in evolution, then the window is waiting for a response on the composer, but there was no hint it's waiting for anything. | ||||
* | User docs: Uncomment and update debugging filters as per bug 669471 comment 11 | Andre Klapper | 2013-06-24 | 1 | -6/+2 |
| | |||||
* | EUrlEntry: Try harder to recognize a valid URL. | Matthew Barnes | 2013-06-24 | 1 | -2/+18 |
| | | | | | | | Skip leading whitespace and hand the rest to g_uri_parse_scheme(). If that can identify a scheme then make the open button sensitive. (Have to be careful to skip leading whitespace when opening, too.) | ||||
* | EUrlEntry: Replace button with clickable inline icon. | Matthew Barnes | 2013-06-24 | 5 | -85/+42 |
| | | | | | | | | Replace the big, bulky "open URL" button with a clickable icon directly in the text entry field. This saves precious vertical space, especially in the contact editor. Also remove e_url_entry_get_entry() since EUrlEntry now IS a GtkEntry. | ||||
* | EUrlEntry cleanups. | Matthew Barnes | 2013-06-24 | 2 | -90/+76 |
| | |||||
* | More consistent error messages for missing opt dependencies. | Matthew Barnes | 2013-06-23 | 1 | -48/+77 |
| | |||||
* | User docs: Add license file legal.xml to Makefile.am | Andre Klapper | 2013-06-23 | 1 | -0/+1 |
| | |||||
* | User docs: Add useful section link titles for sections of the "account ↵ | Andre Klapper | 2013-06-23 | 10 | -14/+155 |
| | | | | | | | | management" guides This avoids having ten undistinguishable links to with exactly the same names in the 'More Information' section at the bottom of the Yelp help browser for all those Account Management topic pages. Instead they know mention which account type they specifically link to. Thanks to Kat and Shaun for the help. | ||||
* | User docs: Use IMAP+ instead of IMAP for consistency | Andre Klapper | 2013-06-23 | 1 | -3/+3 |
| | |||||
* | User docs: Add useful section link title for IMAP Advanced Mail Management ↵ | Andre Klapper | 2013-06-23 | 1 | -1/+4 |
| | | | | so you don't only see 'IMAP' as link title at the bottom of the 'IMAP Subscriptions' page | ||||
* | User docs: Fix typo in ID | Andre Klapper | 2013-06-23 | 1 | -1/+1 |
| | |||||
* | User docs: Remove whitespace at end of file | Andre Klapper | 2013-06-23 | 1 | -5/+0 |
| | |||||
* | User docs: Section IDs must be unique project-wide, not only per file | Andre Klapper | 2013-06-23 | 10 | -20/+20 |
| | |||||
* | User docs: Fix validation in intro-application.page | David King | 2013-06-23 | 1 | -1/+1 |
| | | | | Inline link elements do not have a type attribute. | ||||
* | User docs: Do not use plus character in IDs so it validates | Andre Klapper | 2013-06-23 | 1 | -2/+2 |
| | |||||
* | User docs: Make IDs unique | Andre Klapper | 2013-06-23 | 1 | -3/+3 |
| | |||||
* | User docs: Make IDs unique | Andre Klapper | 2013-06-23 | 1 | -2/+2 |
| | |||||
* | User docs: Make IDs unique | Andre Klapper | 2013-06-23 | 1 | -12/+12 |
| | |||||
* | User docs: Fix markup | Andre Klapper | 2013-06-23 | 1 | -2/+2 |
| | |||||
* | Add useful section link title for help page | Ekaterina Gerasimova | 2013-06-23 | 1 | -1/+4 |
| | |||||
* | User docs: Add missing markup | Andre Klapper | 2013-06-22 | 1 | -2/+2 |
| | |||||
* | User docs: Embed the license from legal.xml instead of having it manually ↵ | Andre Klapper | 2013-06-22 | 208 | -621/+629 |
| | | | | written in the file | ||||
* | User docs: Embed account type configuration instructions on First Run Wizard ↵ | Andre Klapper | 2013-06-22 | 12 | -81/+177 |
| | | | | | | | | page. The instructions per account are collapsed by default and expandable in clients that support ui: (like recent Yelp versions). This requires turning the <list> of account types on intro-first-run.page into <section>s as ui:expandable is not supported inside of <list> elements. Embedding directly does not require users to follow "Click here for configuration instructions for this account" links anymore, that we get rid of "Click here to get to next step if you came from the First Run Wizard help page" sections at the bottom of each account type configuration page. | ||||
* | User docs: Rephrase section headings so the links at the bottom of Yelp are ↵ | Andre Klapper | 2013-06-22 | 1 | -3/+3 |
| | | | | descriptive | ||||
* | User docs: Use unordered list for SMTP configuration steps as for receiving ↵ | Andre Klapper | 2013-06-22 | 1 | -5/+5 |
| | | | | types | ||||
* | User docs: Remove duplicated hint | Andre Klapper | 2013-06-22 | 1 | -3/+2 |
| | |||||
* | EMFolderTreeModel: Listen for "folder-info-stale" signals. | Matthew Barnes | 2013-06-22 | 2 | -0/+20 |
| | | | | | The signal indicates the folder tree for a particular store needs to be reconstructed. We do this by calling em_folder_tree_model_add_store(). | ||||
* | EMFolderTreeModel cleanups. | Matthew Barnes | 2013-06-22 | 2 | -50/+73 |
| | |||||
* | Bug 702710 - MessageList: Delay state capture for regen. | Matthew Barnes | 2013-06-22 | 2 | -94/+127 |
| | | | | | | | | Delay capturing MessageList state for a regen operation until the idle callback, so the caller has a chance to configure the MessageList first. Also, move the CamelFolderThread into the private structure and provide thread-safe internal accessor functions for it. | ||||
* | MessageList cleanups. | Matthew Barnes | 2013-06-22 | 1 | -29/+36 |
| | |||||
* | Fix typo in org.gnome.evolution.mail.gschema.xml.in. | Matthew Barnes | 2013-06-22 | 1 | -1/+1 |
| | |||||
* | Bug 702664 - Settings migration issue from "headers" to "show-headers" | Matthew Barnes | 2013-06-21 | 3 | -3/+10 |
| | | | | | Give the "show-headers" key a proper default value, and watch out for an empty "headers" key, which is supposed to imply that default value. | ||||
* | Calendar views inline text edit with Ctrl+C/V/X does not work | Milan Crha | 2013-06-21 | 28 | -22/+559 |
| | | | | | | | | The shortcuts Ctrl+C/V/X are used for whole calendar items copy/paste/cut, not for text when editing event details inline, either in a day/week view or in a list view. By tracking the is-editing property of respective cell editor and using it when enabling/disabling clipboard actions makes the respective text operations work as expected. | ||||
* | ESelectionModel: Don't assume an ESorter is present. | Matthew Barnes | 2013-06-21 | 1 | -4/+9 |
| | | | | ETree does not provide one anymore. | ||||
* | extended_g_node_insert_before: Small correction. | Matthew Barnes | 2013-06-21 | 1 | -0/+1 |
| | |||||
* | Bug 702796 - Work around GNode's O(N) tail insertions | Matthew Barnes | 2013-06-21 | 1 | -5/+117 |
| | |||||
* | User docs: Embed expandable instructions on how to restore from backup ↵ | Andre Klapper | 2013-06-21 | 1 | -3/+13 |
| | | | | directly in first-run page instead of making users click to go to 'Backup/Restore' page. Hey, it's 2013. | ||||
* | User docs: Use XInclude for one more occasion of the same strings | Andre Klapper | 2013-06-21 | 1 | -5/+3 |
| | |||||
* | User docs: Use descriptive links, avoid 'click here' | Andre Klapper | 2013-06-21 | 1 | -2/+2 |
| | |||||
* | User docs: Add TODO that screenshot is likely outdated; add seealso link to ↵ | Andre Klapper | 2013-06-21 | 1 | -1/+3 |
| | | | | calendar alarms page | ||||
* | User docs: Rephrase to make clearer that file covers adding address books | Andre Klapper | 2013-06-21 | 1 | -3/+3 |
| | |||||
* | User docs: Remove detail information unneeded at this stage | Andre Klapper | 2013-06-21 | 1 | -5/+9 |
| | |||||
* | ETableSorter: Further cleanups. | Matthew Barnes | 2013-06-21 | 2 | -359/+347 |
| | |||||
* | ESorterArray: Further cleanups. | Matthew Barnes | 2013-06-21 | 3 | -164/+145 |
| | |||||
* | Convert ESorter to an interface. | Matthew Barnes | 2013-06-21 | 7 | -294/+232 |
| | |||||
* | Update ETree API documentation. | Matthew Barnes | 2013-06-21 | 1 | -9/+9 |
| | |||||
* | Remove e_tree_view_to_model_row(). | Matthew Barnes | 2013-06-21 | 3 | -14/+0 |
| | | | | Now that ETree no longer has an ESorter, this function is silly. | ||||
* | Remove e_sorter_new(). | Matthew Barnes | 2013-06-21 | 4 | -21/+1 |
| | | | | | | ESorter itself does nothing useful, so there's no reason to create one. ESorter should really be an interface. | ||||
* | ESorter cleanups. | Matthew Barnes | 2013-06-21 | 2 | -79/+72 |
| | |||||
* | Remove unused e_tree_find_next(). | Matthew Barnes | 2013-06-21 | 3 | -91/+0 |
| | |||||
* | Remove unused e_tree_get_tooltip(). | Matthew Barnes | 2013-06-21 | 3 | -11/+0 |
| | |||||
* | Remove unused e_tree_model_to_view_row(). | Matthew Barnes | 2013-06-21 | 3 | -15/+0 |
| | |||||
* | Remove unused e_tree_get_prev_row(). | Matthew Barnes | 2013-06-21 | 3 | -21/+0 |
| | |||||
* | Remove unused e_tree_get_next_row(). | Matthew Barnes | 2013-06-21 | 3 | -30/+0 |
| | |||||
* | Remove unused e_tree_get_printable(). | Matthew Barnes | 2013-06-21 | 3 | -10/+0 |
| | |||||
* | Remove unused e_tree_load_state(). | Matthew Barnes | 2013-06-21 | 3 | -29/+0 |
| | |||||
* | Remove unused e_tree_set_search_column(). | Matthew Barnes | 2013-06-21 | 3 | -26/+0 |
| | |||||
* | Remove unused e_tree_save_state(). | Matthew Barnes | 2013-06-21 | 3 | -22/+0 |
| | |||||
* | Remove e_tree_row_count(). | Matthew Barnes | 2013-06-21 | 4 | -57/+67 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); row_count = e_table_model_row_count (E_TABLE_MODEL (adapter)); | ||||
* | Remove e_tree_force_expanded_state(). | Matthew Barnes | 2013-06-21 | 4 | -19/+9 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); e_tree_table_adapter_force_expanded_state (adapter, state); | ||||
* | Remove e_tree_load_expanded_state_xml(). | Matthew Barnes | 2013-06-21 | 4 | -18/+3 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); e_tree_table_adapter_load_expanded_state_xml (adapter, xml); | ||||
* | Remove e_tree_save_expanded_state_xml(). | Matthew Barnes | 2013-06-21 | 4 | -12/+6 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); xml = e_tree_table_adapter_save_expanded_state_xml (adapter); | ||||
* | Remove e_tree_load_expanded_state(). | Matthew Barnes | 2013-06-21 | 4 | -14/+5 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); e_tree_table_adapter_load_expanded_state (adapter, filename); | ||||
* | Remove e_tree_save_expanded_state(). | Matthew Barnes | 2013-06-21 | 4 | -13/+4 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); e_tree_table_adapter_save_expanded_state (adapter, filename); | ||||
* | Remove e_tree_show_node(). | Matthew Barnes | 2013-06-21 | 3 | -12/+0 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); e_tree_table_adapter_show_node (adapter, path); | ||||
* | Remove e_tree_root_node_is_visible(). | Matthew Barnes | 2013-06-21 | 3 | -10/+0 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); visible = e_tree_table_adapter_root_node_is_visible (adapter); | ||||
* | Remove e_tree_row_of_node(). | Matthew Barnes | 2013-06-21 | 4 | -15/+7 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); row = e_tree_table_adapter_row_of_node (adapter, path); | ||||
* | Remove e_tree_node_at_row(). | Matthew Barnes | 2013-06-21 | 4 | -19/+8 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); path = e_tree_table_adapter_node_at_row (adapter, row); | ||||
* | Remove e_tree_root_node_set_visible(). | Matthew Barnes | 2013-06-21 | 4 | -17/+6 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); e_tree_table_adapter_root_node_set_visible (adapter, visible); | ||||
* | Remove e_tree_node_set_expanded_recurse(). | Matthew Barnes | 2013-06-21 | 3 | -15/+0 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); e_tree_table_adapter_node_set_expanded_recurse (adapter, path, expanded); | ||||
* | Remove e_tree_node_set_expanded(). | Matthew Barnes | 2013-06-21 | 3 | -14/+0 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); e_tree_table_adapter_node_set_expanded (adapter, path, expanded); | ||||
* | Remove e_tree_node_is_expanded(). | Matthew Barnes | 2013-06-21 | 4 | -20/+13 |
| | | | | | | | Reducing API bloat. Do this instead: adapter = e_tree_get_table_adapter (tree); expanded = e_tree_table_adapter_node_is_expanded (adapter, path); | ||||
* | Remove unused e_tree_right_click_up(). | Matthew Barnes | 2013-06-21 | 3 | -10/+0 |
| | |||||
* | Remove unused e_tree_drag_unhighlight(). | Matthew Barnes | 2013-06-21 | 3 | -14/+0 |
| | |||||
* | Remove unused e_tree_drag_highlight(). | Matthew Barnes | 2013-06-21 | 3 | -66/+0 |
| | |||||
* | Remove unused e_tree_drag_get_data(). | Matthew Barnes | 2013-06-21 | 3 | -26/+0 |
| | | | | It just calls gtk_drag_get_data() anyway. | ||||
* | Remove unused e_tree_drag_dest_unset(). | Matthew Barnes | 2013-06-21 | 3 | -19/+0 |
| | | | | It just calls gtk_drag_dest_unset() anyway. | ||||
* | Remove unused e_tree_drag_dest_set_proxy(). | Matthew Barnes | 2013-06-21 | 3 | -20/+0 |
| | | | | It just calls gtk_drag_dest_set_proxy() anyway. | ||||
* | Remove e_tree_drag_dest_set(). | Matthew Barnes | 2013-06-21 | 4 | -27/+7 |
| | | | | Reducing API bloat. Call gtk_drag_dest_set() directly instead. | ||||
* | Remove e_tree_selected_path_foreach(). | Matthew Barnes | 2013-06-21 | 4 | -19/+6 |
| | | | | | | | Reducing API bloat. Do this instead: selection = (ETreeSelectionModel *) e_tree_get_selection_model (tree); e_tree_selection_model_foreach (selection, callback, closure); | ||||
* | Remove e_tree_selected_row_foreach(). | Matthew Barnes | 2013-06-21 | 4 | -18/+3 |
| | | | | | | | Reducing API bloat. Do this instead: selection = (ESelectionModel *) e_tree_get_selection_model (tree); e_selection_model_foreach (selection, callback, closure); | ||||
* | ETree cleanups. | Matthew Barnes | 2013-06-21 | 2 | -869/+843 |
| | |||||
* | Bug #693216 - Email type is changed to other after merging | Milan Crha | 2013-06-20 | 1 | -72/+112 |
| | |||||
* | Updated Norwegian bokmål translation | Kjartan Maraas | 2013-06-20 | 1 | -757/+783 |
| | |||||
* | Make is_node_selectable() easier to debug. | Matthew Barnes | 2013-06-20 | 1 | -4/+5 |
| | |||||
* | build_tree: Fix indentation. | Matthew Barnes | 2013-06-20 | 1 | -21/+22 |
| | |||||
* | Remove unused e_bit_array_invert_selection(). | Matthew Barnes | 2013-06-20 | 3 | -22/+0 |
| | |||||
* | Remove unused e_selection_model_invert_selection(). | Matthew Barnes | 2013-06-20 | 5 | -74/+0 |
| | |||||
* | Remove unused e_table_invert_selection(). | Matthew Barnes | 2013-06-20 | 3 | -16/+0 |
| | |||||
* | Remove unused message_list_invert_selection(). | Matthew Barnes | 2013-06-20 | 2 | -17/+0 |
| | |||||
* | MessageList: Fix an unused variable warning. | Matthew Barnes | 2013-06-20 | 1 | -1/+0 |
| | |||||
* | Bug 702006 - Select All does not select collapsed threads | Matthew Barnes | 2013-06-20 | 1 | -6/+29 |
| | |||||
* | ETreeTableAdapter: Further cleanups. | Matthew Barnes | 2013-06-20 | 1 | -45/+62 |
| | |||||
* | Add e_tree_model_node_get_n_nodes(). | Matthew Barnes | 2013-06-20 | 4 | -0/+34 |
| | | | | | Returns the total number of nodes in the tree model, including hidden nodes in collapsed tree branches. | ||||
* | Bug #386113 - Show custom alarm message in pop-up alerts | Milan Crha | 2013-06-19 | 1 | -2/+36 |
| | |||||
* | Update evolution-util API docs. | Matthew Barnes | 2013-06-19 | 1 | -4/+4 |
| | |||||
* | ETreeTableAdapter cleanups. | Matthew Barnes | 2013-06-19 | 3 | -285/+471 |
| | | | | | | | | | | | | | This replaces e_tree_table_adapter_construct() with construct properties and overrides GObjectClass.constructed() to finish instance construction. New functions: e_tree_table_adapter_get_source_model() Removed functions: e_tree_table_adapter_construct() | ||||
* | Convert ETableModel to an interface. | Matthew Barnes | 2013-06-19 | 20 | -295/+415 |
| | | | | Similar to what was recently done to ETreeModel. | ||||
* | ETable-related cleanups. | Matthew Barnes | 2013-06-19 | 34 | -2681/+2752 |
| | |||||
* | Remove unused ETableMemoryCallbacks. | Matthew Barnes | 2013-06-19 | 7 | -413/+25 |
| | |||||
* | Remove unused ETableMemoryStoreCustomColumn. | Matthew Barnes | 2013-06-19 | 2 | -13/+3 |
| | |||||
* | Remove unused E_TABLE_MEMORY_STORE_COLUMN_TYPE_OBJECT. | Matthew Barnes | 2013-06-19 | 2 | -22/+1 |
| | |||||
* | Remove unused E_TABLE_MEMORY_STORE_COLUMN_TYPE_CUSTOM. | Matthew Barnes | 2013-06-19 | 2 | -12/+0 |
| | |||||
* | ETreeSelectionModel: Further cleanups. | Matthew Barnes | 2013-06-18 | 1 | -179/+195 |
| | |||||
* | ETreeSelectionModel: Modernize GHashTable usage. | Matthew Barnes | 2013-06-18 | 1 | -61/+36 |
| | |||||
* | Bug 702454 - EMailBrowser fails to show message | Matthew Barnes | 2013-06-17 | 1 | -37/+44 |
| | | | | | | | | | | | | | | This reworks the MessageList regen scheduling to be a little more intuitive, at least to me. We now set the RegenData immediately, but start the actual regen operation from an idle callback. That way the caller has the remainder of this main loop iteration to make further MessageList changes without triggering additional regens. I think what was happening before was we were triggering multiple regen operations as we were configuring the EMailBrowser, with each new regen cancelling the previous, and the message UID to select wound up getting paired with one of the cancelled regen operations. This resulted in no message UID ever getting selected in the EMailBrowser. | ||||
* | MessageList: Move more RegenData initialization into regen_data_new(). | Matthew Barnes | 2013-06-17 | 1 | -45/+53 |
| | |||||
* | Updated German translation | Benjamin Steinwender | 2013-06-17 | 1 | -2187/+2179 |
| | |||||
* | Post-release version bump. | Matthew Barnes | 2013-06-16 | 1 | -1/+1 |
| | |||||
* | NEWS update for 3.9.3 release.EVOLUTION_3_9_3 | Matthew Barnes | 2013-06-16 | 1 | -0/+43 |
| | |||||
* | Remove e_tree_model_node_is_editable(). | Matthew Barnes | 2013-06-16 | 5 | -43/+1 |
| | | | | It always returned FALSE. | ||||
* | Remove e_tree_model_set_value_at(). | Matthew Barnes | 2013-06-16 | 5 | -38/+1 |
| | | | | Was never called. | ||||
* | Remove e_tree_model_has_get_node_by_id(). | Matthew Barnes | 2013-06-16 | 6 | -39/+5 |
| | | | | It always returned TRUE. | ||||
* | Remove e_tree_model_has_save_id(). | Matthew Barnes | 2013-06-16 | 7 | -37/+2 |
| | | | | It always returned TRUE. | ||||
* | Remove e_tree_model_icon_at(). | Matthew Barnes | 2013-06-16 | 5 | -73/+3 |
| | | | | It always returned NULL. | ||||
* | Convert ETreeModel to an interface. | Matthew Barnes | 2013-06-16 | 14 | -1857/+950 |
| | | | | | | | | | | | | | | | | This commit does a number of things which I could not subdivide into smaller commits. * Converts ETreeModel to an interface, implemented by MessageList. * Drops ETreeMemory and ETreeMemoryCallbacks, which were ETreeModel subclasses. Their functionality is subsumed by MessageList. * MessageList drops its public ETreeModel pointer, since MessageList now implements ETreeModel as an interface. * Adds message_list_set_expanded_default(), which takes over for e_tree_memory_set_expanded_default(). | ||||
* | Add e_tree_memory_get_n_children(). | Matthew Barnes | 2013-06-16 | 5 | -35/+15 |
| | | | | | | Replaces e_tree_memory_get_children(). The "paths" output parameter was unused, and was a bad idea anyway. | ||||
* | Simplify ETreeMemory. | Matthew Barnes | 2013-06-16 | 2 | -186/+56 |
| | | | | Instead of reinventing GNode, use GNode. | ||||
* | Remove e_tree_model_has_change_pending(). | Matthew Barnes | 2013-06-16 | 4 | -34/+0 |
| | | | | ETreeMemory does not implement this, so it's always FALSE. | ||||
* | ETreeModel: Further cleanups. | Matthew Barnes | 2013-06-15 | 2 | -152/+163 |
| | |||||
* | Remove unused e_tree_model_new(). | Matthew Barnes | 2013-06-15 | 3 | -15/+0 |
| | |||||
* | Remove unused e_tree_model_node_request_collapse(). | Matthew Barnes | 2013-06-15 | 4 | -53/+0 |
| | |||||
* | Remove unused e_tree_model_node_col_changed(). | Matthew Barnes | 2013-06-15 | 5 | -78/+0 |
| | |||||
* | Remove unused e_tree_model_no_change(). | Matthew Barnes | 2013-06-15 | 5 | -56/+0 |
| | |||||
* | Remove unused e_tree_model_node_traverse_preorder(). | Matthew Barnes | 2013-06-15 | 3 | -41/+0 |
| | |||||
* | Remove unused e_tree_model_node_get_prev(). | Matthew Barnes | 2013-06-15 | 4 | -37/+0 |
| | |||||
* | Remove unused e_tree_model_node_get_last_child(). | Matthew Barnes | 2013-06-15 | 4 | -38/+0 |
| |