aboutsummaryrefslogtreecommitdiffstats
path: root/lib
Commit message (Collapse)AuthorAgeFilesLines
* g_type_init is no longer mandatory in GObjectXan Lopez2012-10-191-2/+0
|
* ephy-zoom: use new coding styleXan Lopez2012-10-082-37/+36
|
* ephy-loader: remove, this is unused nowXan Lopez2012-10-083-139/+0
|
* Remove extensions supportXan Lopez2012-10-086-585/+0
| | | | | | | This removes the old style extension support, you can read the rationale in the bug report. https://bugzilla.gnome.org/show_bug.cgi?id=685630
* Add adblock GSetting, use itXan Lopez2012-10-021-0/+1
| | | | | | | org.gnome.epiphany.web.enable-adblock, controls whether adblock is enabled (globally). https://bugzilla.gnome.org/show_bug.cgi?id=681657
* ephy-profile-utils: don't replace environment when spwaning ↵Stefano Facchini2012-09-291-1/+8
| | | | | | | | ephy-profile-migrator Instead, just append the new variable to the existing environment. https://bugzilla.gnome.org/show_bug.cgi?id=683538
* ephy-dialog: fix GtkBuilder leakPavel Vasin2012-09-171-0/+2
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=683929
* ephy-file-helpers: Add ephy_sanitize_filename()Carlos Garcia Campos2012-09-102-0/+22
| | | | | | To convert any possible directory separator into an underscore. https://bugzilla.gnome.org/show_bug.cgi?id=683711
* Use the new EphyHistoryService::urls-visited signalClaudio Saavedra2012-09-101-6/+4
| | | | | | | | | | Since both the frecent store and the history window don't need to be updated immediately after a url is visited, we can use ::urls-visited instead. The advantage of this is that we reduce considerably the load when updating both models when loading many pages at the time, specially during startup. https://bugzilla.gnome.org/show_bug.cgi?id=683550
* ephy-history-service: add urls-visited signalClaudio Saavedra2012-09-102-0/+54
| | | | | | | | This signal is emitted in bulks and is intended for clients that are not interested in every single URL that is visited but only to know that visits have happened. https://bugzilla.gnome.org/show_bug.cgi?id=683550
* ephy-file-helpers: style fixXan Lopez2012-09-091-2/+3
|
* ephy-file-helpers: update commentXan Lopez2012-09-091-2/+2
| | | | The default dot dir is now in ~/.config, not ~/.gnome2.
* embed-shell: should be safe to drop the legacy print setup code nowXan Lopez2012-09-083-319/+0
|
* Revert "ephy-profile-utils: don't replace environment when spwaning ↵Xan Lopez2012-09-081-6/+1
| | | | | | | | ephy-profile-migrator" This reverts commit adfecc2bb03ed280543dc5ad4ba6fa350ff00d8c. This breaks the migrator tests.
* ephy-profile-utils: don't replace environment when spwaning ↵Stefano Facchini2012-09-071-1/+6
| | | | | | | | ephy-profile-migrator Instead, just append the new variable to the existing environment. https://bugzilla.gnome.org/show_bug.cgi?id=683538
* EphyOverviewStore: don't register the snapshot mtime as longGiovanni Campagna2012-09-071-2/+2
| | | | | | | | | | All code paths use int, and this breaks on architechtures where long is not the same as int (such as x86_64). https://bugzilla.gnome.org/show_bug.cgi?id=683029 [Do the same for the visit time column] Signed-off-by: Claudio Saavedra <csaavedra@igalia.com>
* ephy-history-service: remove some dangerous g_object_unref() callsClaudio Saavedra2012-09-073-5/+1
| | | | | | | If there is an error building a statement, the returned value is always NULL. Calling g_object_unref() on them will lead to trouble. https://bugzilla.gnome.org/show_bug.cgi?id=683475
* ephy-history-service: fix a few leaksClaudio Saavedra2012-09-073-1/+7
| | | | | | | If there is an error processing the statement, then unref it before returning. https://bugzilla.gnome.org/show_bug.cgi?id=683475
* ephy-snapshot-service: don't leak the async resultClaudio Saavedra2012-09-061-0/+1
|
* ephy-snapshot-service: Split ephy_snapshot_service_get_snapshot_async()Carlos Garcia Campos2012-09-063-231/+443
| | | | | | | | | | | | | | | | | | | ephy_snapshot_service_get_snapshot_async() receives an option web view parameter, that it's only used in case the snapshot is not the in the thumbnails cache. We can split the method into ephy_snapshot_service_get_snapshot_async() to get a snapshot from a web view and ephy_snapshot_service_get_snapshot_for_url_async() to get a snapshot from the cache. The former uses the latter to try first if the web view URI is in the cache. Patch includes other cleanups and fixes: - Add missing ephy_snapshot_service_save_snapshot_finish() - Add EphySnapshotServiceError to handle errors - Use GSimpleAsyncResult API instead of using GIOScheduler directly - Use different async data structs for every async operation https://bugzilla.gnome.org/show_bug.cgi?id=683327
* gd-main-view: don't use ctrl+click for selection-mode-requestClaudio Saavedra2012-09-051-2/+1
| | | | | We need this to actually activate the current item, in order to support ctrl+click to open in a new tab.
* Add code coverage supportXan Lopez2012-09-044-1/+7
| | | | | | | | | | Needs a fairly recent gnome-common. To use do: - Run configure with --enable-code-coverage - Type 'make check-code-coverage' - Open the HTML results https://bugzilla.gnome.org/show_bug.cgi?id=683297
* ephy-file-helpers: plug a leakClaudio Saavedra2012-09-041-0/+1
| | | | recursive delete function is leaking a reference.
* ephy-overview-store: hide the close button while animating a removed itemClaudio Saavedra2012-09-043-0/+17
| | | | | | To do this, add the render policy as a column to the model and use it as a cellrenderer attribute. The default value is already PRELIT. When removing the cell, flip it to NEVER.
* ephy-removable-pixbuf-renderer: reorder policy enumClaudio Saavedra2012-09-041-2/+2
| | | | | This way the default item is PRELIT. This will be useful when using this type as a cell renderer attribute later on.
* ephy-removable-pixbuf-renderer: do not emit delete on click if policy is NEVERClaudio Saavedra2012-09-041-0/+3
| | | | | It makes no sense to emit the delete signal if the delete button is not rendered at all.
* ephy-profile-utils: add a profile_dir parameter to ↵Claudio Saavedra2012-09-042-2/+7
| | | | | | | | | ephy_profile_utils_do_migration() This is passed further on to the migrator process. Right now this is unused. https://bugzilla.gnome.org/show_bug.cgi?id=681679
* ephy-profile-migrator: allow running migration in non-default profile ↵Claudio Saavedra2012-09-042-1/+17
| | | | | | | | | | | | | directories This is necessary since we add new columns to the history database in step 8 of migration. However, non-default profile directories don't have a .migrated file right now but, since up to step 7 it was possible to use these profiles without migration, it is safe to assume that a non-default profile without a .migrated file can be migrated starting from step 8. https://bugzilla.gnome.org/show_bug.cgi?id=681679
* ephy-file-helpers: add ephy_dot_dir_is_default()Claudio Saavedra2012-09-042-0/+17
| | | | | | | This method will let us know when the current dot directory is the default one and not a user-specified one nor a web application one. https://bugzilla.gnome.org/show_bug.cgi?id=681679
* ephy-profile-utils: use an index variable instead of manually setting itClaudio Saavedra2012-09-031-6/+6
| | | | This allows us to extend this further cleanly.
* ephy-profile-utils: fix array lengthClaudio Saavedra2012-09-031-1/+1
|
* ephy-file-helpers: rename KEEP_TEMP_DIR to KEEP_DIRClaudio Saavedra2012-09-032-4/+4
| | | | | Since this is also used for persistency of temporary directories, but also for --profile.
* ephy-frecent-store: Fix the build with WebKit2Carlos Garcia Campos2012-09-031-0/+2
|
* ephy-snapshot-service: Fix memory leakCarlos Garcia Campos2012-09-031-0/+1
|
* ephy-bookmarks-editor: repaint the favicon on "icon-loaded"Sergio Villar Senin2012-09-031-1/+1
| | | | | | | | Fixes a crash when epy is started with the bookmarks window open. The old code was trying to set the favicon in an already released GValue. Instead of doing that, we now force a repaint of the row once we get the favicon. https://bugzilla.gnome.org/show_bug.cgi?id=673795
* ephy-node-view: added ephy_node_view_get_iter_for_node()Sergio Villar Senin2012-09-032-0/+23
| | | | | | | | | | | The EphyNodeView is based on the following stack of models: Sort model -> Filter model -> EphyTreeModelNode This function returns a GtkTreeIter pointing to a row in the sort model from a EphyNode that belongs to the EphyTreeModelNode. https://bugzilla.gnome.org/show_bug.cgi?id=673795
* ephy-overview-store: fix the setter for the default iconClaudio Saavedra2012-09-031-2/+6
|
* ephy-embed-shell: make the shell find uninstalled iconsXan Lopez2012-09-031-0/+2
| | | | This is needed for distcheck, which runs tests before installing.
* ephy-profile-utils: pass the required version to the migratorXan Lopez2012-09-011-6/+9
| | | | | | | This should help catch the mistake of not installing the new migrator when the profile version changes. https://bugzilla.gnome.org/show_bug.cgi?id=683134
* ephy-profile-migrator: add a "requested version" option to the migratorXan Lopez2012-09-011-0/+9
| | | | This will allow us to catch mismatches between browser and migrator binary.
* ephy-frecent-store: set default icon in new rowsClaudio Saavedra2012-09-011-0/+7
| | | | | Otherwise they look empty until the icon is loaded. This is specially annoying when opening the overview and all the icons are scheduled for load.
* ephy-history-service: Do not emit signals from the history service threadClaudio Saavedra2012-09-011-3/+85
| | | | | | | | We were naively emitting a few signals from the history service thread while doing this is not thread safe. Add a few helper methods to run this in a main loop idle. https://bugzilla.gnome.org/show_bug.cgi?id=683040
* ephy-frecent-store: animate hiding of store itemsClaudio Saavedra2012-09-013-5/+113
| | | | | | Add a ephy_overview_store_animated_remove() that shrinks the thumbnail in a timeout until it's small enough and then removes it from the model.
* ephy-overview-store: fix history service reference handlingClaudio Saavedra2012-09-011-1/+1
|
* ephy-frecent-store: plug string leakClaudio Saavedra2012-09-011-0/+1
|
* ephy-overview-store: add icon-frame propertyClaudio Saavedra2012-09-012-119/+62
| | | | | | | Instead of using a hardcoded cairo frame, add a property to define the frame around thumbnails. Also rework the code around the default-thumbnail property to make it possible to use this there as well.
* ephy-overview-store: add missing dispose implementationClaudio Saavedra2012-09-011-0/+14
|
* ephy-removable-pixbuf-renderer: use the pixbuf size to determine the ↵Claudio Saavedra2012-09-011-4/+16
| | | | position of the close x
* ephy-snapshot-service: change the size of the thumbnailsClaudio Saavedra2012-09-011-2/+2
| | | | Squared snapshots are not that great, so use a 4:3 aspect ratio.
* ephy-overview-store: set the default snapshot only when failing to retrieve oneClaudio Saavedra2012-09-011-9/+8
| | | | This way there's no flashing of thumbnails between the query and the reply.
* ephy-overview-store: add internal helper for setting the default iconClaudio Saavedra2012-09-011-8/+17
| | | | Just to spare some code repetition.
* ephy-overview-store: remove spurious warningClaudio Saavedra2012-09-011-1/+0
|
* ephy-overview-store: use the age of a thumbnail only to decide when update ↵Claudio Saavedra2012-09-012-10/+18
| | | | | | | | | | | | is needed Currently, we were not retrieving thumbnails from the service if they were outdated. This would cause some pages in the overview not to display a thumbnail at all even if one is available (but old). Fix this by always retrieving a thumbnail but storing its mtime in the model, and making ephy_snapshot_store_needs_snapshot() check the age of snapshots when deciding whether a snapshot update is needed or not.
* ephy-overview-store: use the thumbnail saving time to decide whether an ↵Claudio Saavedra2012-09-011-24/+36
| | | | update is needed
* ephy-history-service: add API to store a url's thumbnail update timeClaudio Saavedra2012-09-012-0/+44
|
* ephy-history-service: extend to support URL thumbnail timeClaudio Saavedra2012-09-013-4/+9
|
* Add EphyFrecentStore class filesClaudio Saavedra2012-09-013-0/+473
| | | | | | | This subclass of EphyOverviewStore displays the most frecently visited pages. https://bugzilla.gnome.org/show_bug.cgi?id=455173
* ephy-history-service: add a method to set/unset a row hiddenClaudio Saavedra2012-09-012-0/+46
|
* ephy-history-service: add backend bits to support the new hidden columnClaudio Saavedra2012-09-013-5/+16
|
* ephy-history-service-urls-table: add new rows to the tableClaudio Saavedra2012-09-011-1/+3
| | | | | | These rows store information relevant to the overview: the update time of the url's thumbnail and wheter the url should be hidden from the overview's frecent view.
* ephy-history-service: add "host-deleted" signalClaudio Saavedra2012-09-011-0/+12
|
* ephy-history-service: add "url-deleted" signalClaudio Saavedra2012-09-011-0/+12
|
* ephy-history-service: add "url-title-changed" signalClaudio Saavedra2012-09-011-0/+13
|
* ephy-profile-migrator: New migrator for history backend changesClaudio Saavedra2012-09-012-2/+47
| | | | This adds a couple of new required columns to the urls table.
* Add the base EphyOverviewStore modelClaudio Saavedra2012-09-013-0/+653
| | | | | | | This should be subclassed by the models for the history and/or currently open views. https://bugzilla.gnome.org/show_bug.cgi?id=455173
* gd-main-view: add a "item-deleted" signal to handle user-triggered item ↵Claudio Saavedra2012-09-012-0/+61
| | | | | | | | | | | deletions GdMainView connects to GdMainViewGeneric:delete-item-clicked and emits its :item-deleted signal which, if unhandled, simply removes the item in question from the underlying model. Users of GdMainView can handle this signal and stop the default handler from being invoked, thus avoiding removal of the item.
* gd-main-icon-view: use the new renderer to add a close button to itemsClaudio Saavedra2012-09-011-1/+13
| | | | | | Also, emit the GdMainViewGeneric:delete-item-clicked when the button is clicked. The signal is still unhandled, so clicking in the button will not make any difference yet.
* gd-main-view-generic: add "delete-element-clicked" signal to the interfaceClaudio Saavedra2012-09-012-1/+24
| | | | | | Implementors of this interface may connect emit this signal to notify the GdMainView when a user is requesting to delete one item from the view.
* ephy-removable-pixbuf-renderer: new renderer for the overviewClaudio Saavedra2012-09-013-0/+351
| | | | | This is a renderer that draws a "close" button on top of its contents and that emits a signal when the button is activated.
* Add GdMainView for use in the overviewClaudio Saavedra2012-09-0113-0/+2550
| | | | | | This widget courtesy of gnome-documents https://bugzilla.gnome.org/show_bug.cgi?id=455173
* Add a service for snapshotting webpagesClaudio Saavedra2012-09-013-0/+552
| | | | | | | This service provides pixbufs for URLs while caching these locally as thumbnails. gnome-desktop-thumbnail is used to handle caching. https://bugzilla.gnome.org/show_bug.cgi?id=668578
* ephy-profile-utils: reorder includesXan Lopez2012-09-011-1/+2
|
* ephy-history-service: fix CLEAR signal emissionXan Lopez2012-08-311-3/+5
| | | | | We were only emitting it if we happened to have a callback method associated with the history message, that does not make sense.
* ephy-file-helpers: sort includesXan Lopez2012-08-291-11/+7
|
* ephy-profile-migrator: do nothing if there's no profile dirXan Lopez2012-08-291-0/+12
| | | | | | | | If there's no profile dir there should not be anything to do for the profile migrator (since in theory epiphany has never been executed). This might backfire for people that manually mess with their profile dir (removing it), but those people hopefully know what they are doing.
* ephy-file-helpers: add '.migrated' file to newly created profile dirsXan Lopez2012-08-291-8/+21
| | | | | Otherwise we'll try to migrate old data in new ephy installs, which does not make sense.
* ephy-window: centralize the logic about invisible URIs in one placeXan Lopez2012-08-241-1/+1
| | | | | | | | Let's make EphyWindow the one in charge of deciding whether a URI is actually shown or not in the location entry. This allows to remove some code to that effect in EphyLocationController (and perhaps some more in EphyWebView in the future), and makes this feature more extensible for the future.
* ephy-string: use new coding styleXan Lopez2012-08-171-384/+361
|
* ephy-string: improve a bit ephy_string_get_host_nameXan Lopez2012-08-171-0/+9
| | | | And add unit tests for it.
* Port save as to WebKit2Carlos Garcia Campos2012-08-171-0/+2
| | | | | | | | Use webkit_web_view_save() API for HTML pages that saves the web page into a MHTML file. For any other MIME types supported by the web view, save the main resource data to a file. https://bugzilla.gnome.org/show_bug.cgi?id=679368
* Show information about web and plugin processes in about:memoryCarlos Garcia Campos2012-08-141-10/+177
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=679764
* Show information about the SSL errors when clicking on lock iconCarlos Garcia Campos2012-08-093-0/+397
| | | | | | | If libgcr is available it's used to show the information about the TLS certificate in the dialog too. https://bugzilla.gnome.org/show_bug.cgi?id=681506
* ephy-location-entry: small cleanupsXan Lopez2012-08-071-9/+6
|
* Settings: add a enable-webaudio setting.Philippe Normand2012-08-021-0/+1
| | | | | | WebAudio support in WebKitGTK is not stable yet but it would be good to allow Epiphany users to test this feature nonetheless. The enable-webaudio gsetting is set to false by default.
* ephy-history-service: prevent double call to execute_quit()Claudio Saavedra2012-08-021-1/+0
| | | | | | | execute_quit() is called already when the QUIT message is received, there is no need to call it after the thread loop quits. https://bugzilla.gnome.org/show_bug.cgi?id=680529
* e-file-chooser: remove persist-keyDiego Escalante Urrelo2012-08-012-182/+0
| | | | | | | | | | | | | GTK+ has changed the UX of the GtkFileChooser. This has (pragmatically) deprecated "last save dir" stored by applications themselves. For Epiphany this means we no longer need a "persist-key" in our file chooser, and that we have to clean up some GtkFileChooser API use in followup patches. This commit removes the property and uses of it. Bug #655508
* Use $(pkglibdir) instead of $(libdir)/epiphanyMichael Biebl2012-07-311-1/+1
| | | | | | to avoid hard coding the package name. https://bugzilla.gnome.org/show_bug.cgi?id=672023
* ephy-sqlite-statement: remove get_propertyDiego Escalante Urrelo2012-07-311-19/+0
| | | | | | All the properties are write-construct-only. https://bugzilla.gnome.org/show_bug.cgi?id=671595
* e-dialog: handle old uses of ephy_dialog_constructDiego Escalante Urrelo2012-07-311-1/+13
| | | | | | | This is a hack. One that we should remove when we decide what to do with extensions. https://bugzilla.gnome.org/show_bug.cgi?id=680907
* Port persistent cookies to WebKit2Carlos Garcia Campos2012-07-131-11/+33
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=679369
* ephy-web-app-utils: Fix memory leakCarlos Garcia Campos2012-07-121-0/+1
|
* ephy-web-app-utils: Use soup_cookie_domain_matches to check the cookie domainCarlos Garcia Campos2012-07-121-1/+1
| | | | | | | This fixes the cases where sites like www.foo.com save cookies for domain .foo.com, so that when an app is created for www.foo.com, cookies in the current jar for the domain .foo.com are not copied to the app cookie jar.
* Port downloads to WebKit2Carlos Garcia Campos2012-06-271-21/+91
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=678612
* embed: Move about handlers to a new fileCarlos Garcia Campos2012-06-261-1/+1
| | | | | Leaving in ephy-request-about only the code specific to the soup feature implementation.
* ephy-download-widget: add get_destination_basename_from_download() helper ↵Carlos Garcia Campos2012-06-261-11/+26
| | | | function
* ephy-download-widget: add ephy_download_widget_download_finished()Carlos Garcia Campos2012-06-252-23/+33
| | | | | It makes easier to check whether download finished, and it's compatible with WebKit2.
* Initial WebKit2 portCarlos Garcia Campos2012-06-214-0/+78
| | | | It builds and basic functionality works.
* ephy-location-entry: make it possible to hide the faviconClaudio Saavedra2012-06-202-3/+42
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=678405
* e-history-service: print db file when open failsDiego Escalante Urrelo2012-06-151-1/+1
|
* e-web-app-utils: warn when app dir already existsDiego Escalante Urrelo2012-06-151-1/+3
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=673271
* e-file-helpers: Add ephy_file_create_data_uri_for_filename()Carlos Garcia Campos2012-06-142-0/+53
| | | | | | | It creates a data URI for the given filename. Use the new function when building error and applications pages. https://bugzilla.gnome.org/show_bug.cgi?id=677025
* ephy-download-widget: Show bytes downloaded when the total size is unknownCarlos Garcia Campos2012-06-141-20/+54
|
* ephy-download-widget: Check the icon has changed before updating the imageCarlos Garcia Campos2012-06-131-3/+6
|
* ephy-download-widget: Don't leak the GIconCarlos Garcia Campos2012-06-131-5/+17
|
* ephy-profile-utils: fix memory leakPavel Vasin2012-06-121-1/+2
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=677720
* ephy-location-entry: make parameters actual propertiesClaudio Saavedra2012-06-051-0/+112
| | | | | | So that they are bindable. https://bugzilla.gnome.org/show_bug.cgi?id=675804
* e-web-app-utils: warn when cookies are unavailableDiego Escalante Urrelo2012-05-271-0/+8
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=673270
* e-file-helpers: simplify ephy_file_get_downloads_dirDiego Escalante Urrelo2012-05-241-7/+14
| | | | | | | Better explain the logic of the function and reorder the conditions. This makes ~/Downloads the fallback instead of ~/Desktop. https://bugzilla.gnome.org/show_bug.cgi?id=673337
* Remove check for negative unsigned intsLubomír Sedlář2012-05-211-2/+0
| | | | | | | Unsigned integer can not be negative, therefore it is redundant to check whether it is greater than or equal to zero. https://bugzilla.gnome.org/show_bug.cgi?id=675888
* Add support for 'Do Not Track'Xan Lopez2012-05-191-0/+1
| | | | | | | If the org.gnome.Epiphany.web.do-not-track setting is enabled, we'll send the DNT: 1 header with every outbound request we make. See http://donottrack.us/ for more details.
* ephy-profile-utils: use absolute path for build dirXan Lopez2012-05-162-7/+7
| | | | That way we can run the tests from any directory in debug mode.
* ephy-profile-utils: tweak migrator location codeXan Lopez2012-05-161-7/+6
| | | | | | The path to the just built migrator is known at compile time, so no need to create strings at runtime. Also, share the name of the binary itself to avoid silly bugs like last time.
* ephy-profile-utils: fix migrator binary nameXan Lopez2012-05-101-1/+1
| | | | Mistakenly changed it to use underscores.
* Remove a few more egg leftoversXan Lopez2012-05-102-2/+0
|
* tests: test that trying to run an invalid migration step failsXan Lopez2012-05-103-10/+33
|
* ephy-profile-migrator: allow to run just one migration stepXan Lopez2012-05-101-7/+53
| | | | Use --do-step/-d and an index.
* ephy-profile-utils: make ephy_profile_utils_do_migration more verbose on failureXan Lopez2012-05-092-5/+8
| | | | So we can properly test it.
* Remove ephy-marshal.list, we don't use it anymoreXan Lopez2012-05-091-20/+0
|
* ephy-web-app-utils: remove unused variableXan Lopez2012-05-091-4/+0
|
* lib/egg: type builtins are not used eitherXan Lopez2012-05-091-66/+1
|
* lib/egg: remove some leftoversXan Lopez2012-05-093-71/+2
|
* ephy-web-app-utils: remove dummy toolbar XML fileXan Lopez2012-05-091-17/+0
| | | | | We don't use XML files to create our toolbars anymore, so this is not needed.
* ephy-profile-migrator: migrate Web Applications to new profile locationXan Lopez2012-05-092-2/+87
| | | | | | | | | | We need to update their desktop files (they had references to the profile directory) and the symlink of the .desktop file in the Shell applications directory. It would be much easier to just delete and re-add the applications, but unfortunately that would wipe out the existing profile data in the apps (like cookies).
* ephy-web-app-utils: add the desktop file name to EphyWebApplicationXan Lopez2012-05-092-0/+4
| | | | | It's quite cumbersome to re-construct from its name and URL, so just add it here. We'll use it to migrate the profile data.
* Move ephy-web-app-utils to lib/Xan Lopez2012-05-093-0/+557
| | | | | | We are going to use it in the profile migrator, so it needs to be there. Besides, this code just deals with plain data in the profile and application dir, so it makes sense for it to be here.
* ephy-profile-migrator: better safe than sorry in history migrationXan Lopez2012-05-091-11/+9
| | | | Do nothing if the destination history file already exists.
* ephy-profile-migrator: migrate the profile dir location before anything elseXan Lopez2012-05-091-4/+4
| | | | | Otherwise we'll read the .migrated file *before* we move the old profile. Not OK, it will make us start from scratch all the migration
* ephy-history: remove spurious castingsClaudio Saavedra2012-05-083-3/+3
|
* ephy-history-service: trim query strings to avoid reaching sqlite limitClaudio Saavedra2012-05-086-3/+19
| | | | | | | Sqlite limits the length of a LIKE pattern to 50000 bytes, therefore we need to make sure that longer strings are not used as queries. https://bugzilla.gnome.org/show_bug.cgi?id=674848
* Based on a patch by Jon McCann.Xan Lopez2012-05-083-6/+65
| | | | | | Migrate profile directory to XDG config dir https://bugzilla.gnome.org/show_bug.cgi?id=522810
* Allow for more fine-grained file helpers initXan Lopez2012-05-083-10/+20
| | | | | | | | | | Since we are about to migrate our profile dir, allow file helpers init to not ensure the profile dir exists (it was hardcoded until now). For this we get rid of the ugly boolean parameters and add a flags parameter, which preserves the old behaviors and allows for this new option. We update all the callers in the tree.
* ephy-profile-utils: split profile migration from EphyShellXan Lopez2012-05-082-0/+19
| | | | | Call it directly from main, since we want it to happen before the file helpers initialization.
* Drop the use of GTK accel mapsWilliam Jon McCann2012-05-082-39/+0
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=674870
* e-file-helpers: unset EPHY_UUID_ENVVAR on shutdownDiego Escalante Urrelo2012-04-301-0/+2
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=673337
* e-file-helpers: improve ephy_file_tmp_filename commentDiego Escalante Urrelo2012-04-221-5/+8
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=673337
* Add an option to never show the tabs barXan Lopez2012-04-161-1/+2
| | | | We'll use this when we land the Overview.
* Create a new 'tabs-bar-visibility-policy' settingXan Lopez2012-04-163-7/+30
| | | | | | We need this to be an enum, since we'll a third option in the future for the Overview (to never show the tabs bar). For now just add the two values we have now and migrate the code and the user data.
* ephy-embed-single: introspection fixesXan Lopez2012-04-141-2/+2
|
* Add a 'crashed' option to the session restore policyXan Lopez2012-04-121-1/+2
| | | | | | | | | With this policy the session will only be restored if the application has exited unexpectedly, but not if the user manually closes it. There are no code changes needed for this to work, having a (valid) different value than always/never in the setting makes things just work.
* ephy-prefs: use new coding styleXan Lopez2012-04-121-77/+78
|
* Add a setting to control whether the session is automatically restoredXan Lopez2012-04-121-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We add a new gsettings key, 'restore-session-policy', with two valid values: 'always' and 'never'. A brief explanation of our session state mechanism follows. There are three ways to exit Epiphany: 1) Activate 'Quit' in the application menu 2) Close the last application window 3) Kill the process manually, SIGSEGV, or other similar unexpected event. For 1) and 2), we'll now do the same thing: a) Call ephy_session_close b) Exit the application manually ephy_session_close will check the new restore-session-policy setting, and only save the session state if it's set to 'always'. Before it used to manually destroy all present windows. We now let EphyShell or EphyWindow do this, EphySession only manages the session state saving. For 3), the process will die with the state saved up to that point, there's nothing we can do. For that reason, on startup also check the new setting; if it's set to 'never' ignore the session state, open a window in the homepage, and delete the old state file. https://bugzilla.gnome.org/show_bug.cgi?id=673453
* e-file-helpers: catch GErrors in switch_temp_fileDiego Escalante Urrelo2012-04-111-12/+41
| | | | | | | The GFile API provides useful error messages, print them when any operation fails to aid debugging. https://bugzilla.gnome.org/show_bug.cgi?id=673666
* e-file-helpers: remove old dirs from ephy_fileDiego Escalante Urrelo2012-04-111-6/+0
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=673665
* e-file-helpers: prevent invalid enumerator and return valueDiego Escalante Urrelo2012-04-071-2/+2
| | | | | | | | | | Invalid enumerators can be returned even when no GError is set. Check if the enumerator is non-NULL before proceeding, and adjust the default return value so it is not TRUE when g_file_enumerate_children fails. https://bugzilla.gnome.org/show_bug.cgi?id=673337
* e-file-helpers: remove ephy_file_add_recent_itemDiego Escalante Urrelo2012-04-072-20/+0
| | | | | | It's a two-line save, and there are no users of this API. https://bugzilla.gnome.org/show_bug.cgi?id=673337
* e-file-helpers: fix weird spacingDiego Escalante Urrelo2012-04-021-1/+1
|
* e-file-helpers: missing Returns: in commentDiego Escalante Urrelo2012-04-021-0/+2
|
* e-location-entry: make aligment pixel-perfectDiego Escalante Urrelo2012-03-311-0/+59
| | | | | | | | | | | Align the elements of the GtkEntryCompletion popup with those in the location entry. The code comes with a detailed comment and a scheme of how the aligment is done now. Because of the unhandled pixels of GtkEntryCompletion, this code might need an update if anything in GTK+ or Adwaita changes. https://bugzilla.gnome.org/show_bug.cgi?id=672927
* e-location-entry: dim URL in completion rowsDiego Escalante Urrelo2012-03-311-2/+2
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=672927
* e-location-entry: redundant ellipsize-setDiego Escalante Urrelo2012-03-311-4/+1
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=672927
* e-location-entry: make bookmark icon follow-stateDiego Escalante Urrelo2012-03-311-0/+1
| | | | | | | Makes the symbolic-icon of the completion rows change its color accordingly to the selection state. With Adwaita: black -> white. https://bugzilla.gnome.org/show_bug.cgi?id=672927
* Remove the 'disable-menubar' optionXan Lopez2012-03-301-1/+0
| | | | Since we don't have one anymore.
* Remove 'show-boomkarks-bar' optionXan Lopez2012-03-301-1/+0
| | | | Since we don't have one anymore.
* history-service: remove unnecessary type castClaudio Saavedra2012-03-291-1/+1
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=672926
* history-service: remove unused variablesClaudio Saavedra2012-03-292-3/+0
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=672926
* Rip out the EggSMClient codeXan Lopez2012-03-286-2403/+0
| | | | The brave new world is to use the session support in GtkApplication.
* Use glib resources to bundle our UI filesXan Lopez2012-03-282-8/+8
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=672907
* ephy-hosts-store: listen to favicon changes in the wk databaseClaudio Saavedra2012-03-271-2/+66
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=672525
* download-widget: use the "linked" style classCosimo Cecchi2012-03-271-0/+4
| | | | | | | Link the glow and the menu buttons together by using a "linked" style class on the box containing them. https://bugzilla.gnome.org/show_bug.cgi?id=672712
* profile-migrator: do not freak out if the history is emptyXan Lopez2012-03-211-4/+6
| | | | | | | If the old history file exists but has no actual visits we'll enter into an infinite loop. https://bugzilla.gnome.org/show_bug.cgi?id=672547
* ephy-hosts-store: -1 is not a valid insertion positionClaudio Saavedra2012-03-211-1/+1
|
* ephy-history-window: add back the faviconsClaudio Saavedra2012-03-213-5/+74
| | | | | | | | Use the new webkit favicon database for favicons here. This might not work perfectly, but that's a webkitgtk issue, see https://bugs.webkit.org/show_bug.cgi?id=81665 https://bugzilla.gnome.org/show_bug.cgi?id=672480
* Fix distcheckXan Lopez2012-03-142-5/+7
| | | | | | | | | | Most data files are listed through EXTRA_DIST, so they are left in the top srcdir during VPATH builds. The new EphyWebView unit test needs data/pages/error.html, so distcheck was broken because ephy_file ("error.html") was failing since it looked for them in $pwd/data. To fix this, look for files in the top srcdir instead of $pwd/data, which will lead to the builddir data data dir during distcheck.
* floating-bar: set a max-width to the labelCosimo Cecchi2012-03-141-1/+2
| | | | | | | | We don't want the floating bar to extend without boundaries in the available size, since some hyperlinks can be very long (and make the bar cover the whole screen). https://bugzilla.gnome.org/show_bug.cgi?id=671520
* history: remember visit typesXan Lopez2012-03-143-8/+15
| | | | | | | Instead of hardcoding all visits as 'TYPED' properly distinguish between bookmarks, following links and typing URIs in the entry. We'll use this to compute the frecency of history items.
* history: generate gtypes for the history typesXan Lopez2012-03-141-0/+62
|
* lib: link to the internal libraries instead of copying source filesXan Lopez2012-03-141-22/+4
|
* ephy-history-service: make the async API cancellableClaudio Saavedra2012-03-133-41/+78
| | | | | | | | | | | The main purpose of the cancellable API in ephy-history-service is to let the user notify when the results of the operation are no longer needed and the callback call can be omitted. Since performing a read operation, in such cases, makes no sense, we cancel them altogether. However, given the nature of the service, we don't cancel write operations. https://bugzilla.gnome.org/show_bug.cgi?id=671901
* ephy-history-view: add row-middle-clicked signalClaudio Saavedra2012-03-132-0/+74
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=671635
* ephy-history-service: Give me a break!Priit Laes2012-03-091-0/+1
| | | | | Signed-off-by: Priit Laes <plaes@plaes.org> Reviewed-by: Xan Lopez <xan@igalia.com>
* ephy-history-service: plug a few more leaksClaudio Saavedra2012-03-082-0/+4
|
* ephy-history-window: plug a couple of leaksClaudio Saavedra2012-03-082-2/+2
|
* ephy-history-service: add API to query for hostsClaudio Saavedra2012-03-084-2/+156
| | | | | By now, the public API only supports filtering by time range, but filtering by string matching is also possible.
* ephy-history-service: execute_get_hosts() should return TRUEClaudio Saavedra2012-03-081-1/+1
| | | | If there are no hosts, that's not a failure, so return TRUE instead.
* ephy-hosts-view: ensure "all hosts" is selected by defaultClaudio Saavedra2012-03-081-14/+28
| | | | | | If no host can be selected, always select the "all hosts" row. https://bugzilla.gnome.org/show_bug.cgi?id=671575
* ephy-host-store: add a clear() methodClaudio Saavedra2012-03-082-0/+14
| | | | | | | This adds always a default item "All sites" which, when selected, will show all urls in all hosts. https://bugzilla.gnome.org/show_bug.cgi?id=671575
* ephy-history-service-hosts-table: init host to NULLDiego Escalante Urrelo2012-03-081-1/+1
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=671594
* ephy-history-view: remove unneeded unselect_all()Claudio Saavedra2012-03-081-2/+1
| | | | | This breaks selection in _BROWSE mode, and we don't really need it anyway.
* ephy-hosts-view: add a method to select a given hostClaudio Saavedra2012-03-082-0/+34
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=671559
* ephy-history-service: remove orphan hosts from databaseClaudio Saavedra2012-03-083-0/+27
| | | | | | | After removing all the urls in a host, we don't need that host anymore. https://bugzilla.gnome.org/show_bug.cgi?id=671559
* ephy-history-service: validate parameters of public methodsXan Lopez2012-03-071-33/+77
|
* ephy-history-service-urls-table: do not g_assert on inputXan Lopez2012-03-071-4/+4
| | | | Simply bail out and don't crash the browser.
* ephy-hosts-store: sort the model by URLClaudio Saavedra2012-03-071-0/+3
| | | | | This puts "Others" to the beginning of the list and the rest alphanumerically sorted.
* ephy-history-view: properly handle button-press-eventClaudio Saavedra2012-03-071-8/+6
| | | | | So that it doesn't trigger a double-click in the first press. Use a handler instead of connecting to the signal.
* ephy-history-window: correctly handle 2 and 10 days of historyXan Lopez2012-03-071-0/+1
|
* ephy-prefs: correct the order of the history time filter enumXan Lopez2012-03-071-2/+2
| | | | | EVER needs to be at the end, not in the second position, since that's the order in the ephy history window.
* Move the host and urls views from embed to lib/widgetsXan Lopez2012-03-0711-0/+790
| | | | | Since that's their natural place. Also create a base class to hold the common code they share.
* ephy-history-service: default handler for visit-url should be FALSEClaudio Saavedra2012-03-071-1/+1
| | | | So that AFTER handlers are executed as well
* ephy-history-service: add a method to remove a host from the historyClaudio Saavedra2012-03-074-0/+79
| | | | This method will remove all the history related to that host.
* Allow ephy_history_service_find_urls() to filter host specific urlsClaudio Saavedra2012-03-072-2/+3
|
* Add ephy_history_service_get_hosts()Claudio Saavedra2012-03-072-1/+29
| | | | To retrieve all hosts in the history
* Fix typoClaudio Saavedra2012-03-071-1/+1
|
* Allow the visits and urls queries to be host-specificClaudio Saavedra2012-03-074-0/+24
|
* Add missing header include to ephy-history-types.hClaudio Saavedra2012-03-071-0/+2
|
* ephy-profile-migration: only create ad-hoc hosts for non-default zoom levels.Xan Lopez2012-03-071-6/+4
| | | | | | Otherwise the default code path is enough. Also, the host is always going to be NULL for newly created URLs, so double check this is the case and don't try to handle anything else.
* ephy-history-service: agh, committed this by mistakeXan Lopez2012-03-071-1/+1
|
* ephy-history-service: handle correctly zoom level migrationXan Lopez2012-03-071-0/+9
| | | | | | We need to consider the case of an "invalid" host with a non default zoom level, since the profile migrator will send us that kind of thing.
* ephy-history-service: add a "cleared" signal for the clear methodXan Lopez2012-03-071-0/+14
| | | | And use it in EphyEmbed instead of the legacy signal.
* ephy-history-service: add a method to clear the entire historyClaudio Saavedra2012-03-072-0/+44
|
* ephy-history-service: add 'visit-url' signalXan Lopez2012-03-072-8/+43
| | | | | | | | | Similar to the old EphyHistory 'add-page' signal. It allows blocking the visit by handling the signal, since the actual logic to add the visit is in the class' default handler. The add_visit(s) methods won't emit this signal, but for now we'll assume that whoever is using those knows what he's doing.
* Rename ephy_history_service_add_page to ephy_history_service_visit_urlXan Lopez2012-03-072-3/+6
| | | | Fits much better with the naming model in that class.
* Get rid of EphyBrowseHistoryXan Lopez2012-03-072-0/+44
| | | | | | It was a very thin wrapper on top of the history service, it does not seem to make much sense. For now move the two useful helper methods down to the service without further changes.
* ephy-history-types: use the URL as default titleXan Lopez2012-03-071-1/+1
| | | | | This is what the old history code did. Looks better than an empty string.
* Retrieve the host id from the right columnClaudio Saavedra2012-03-071-1/+1
|
* Remove the set_url_property history methodXan Lopez2012-03-072-66/+0
| | | | It's not really that useful.
* ephy-history-service-hosts-table: drop the favicon columnXan Lopez2012-03-071-1/+0
| | | | It's not used at all. Again, format change.
* Store zoom levels per host, not per URLXan Lopez2012-03-077-71/+114
| | | | | | | | | | Zoom levels have always been stored per host in Epiphany, not per URL (otherwise you'd have to re-apply the zoom level again and again when visiting, say, every news entry in your favorite newspaper). Change things to work like that. Note: this changes the SQL table format for the history, so you'll need to re-migrate your history.
* Hook the new history to the URL entryXan Lopez2012-03-071-177/+20
| | | | | We now fetch the history from the SQL backend using a service thread, and merge the results with our old bookmark data.
* history-service: make sure we can update pages' titles and urlsClaudio Saavedra2012-03-071-7/+8
| | | | | | | | | | When we retrieve a url from the backend from a user given EphyHistoryURL, it's possible for this to contain updated information for the page. In such case, don't overwrite this with the one stored in the backend. This makes possible to later update this information when saving a new visit.
* history-service: do not join urls and visits table unnecessarilyClaudio Saavedra2012-03-071-6/+10
| | | | | If there is no visit time range there is no need to perform a inner join between these two tables, so spare the hassle.
* history-service: use the sort type during queriesClaudio Saavedra2012-03-071-0/+10
|
* EphyHistoryQuery: add a EphyHistorySortType parameter to the queryClaudio Saavedra2012-03-072-0/+10
|
* history-service: take into account the query's result limitClaudio Saavedra2012-03-071-1/+13
|
* EphyHistoryQuery: copy the limit tooClaudio Saavedra2012-03-071-0/+1
|
* history-service: Ignore queries time range if not setClaudio Saavedra2012-03-071-4/+4
|
* history-service: Count the first url visitClaudio Saavedra2012-03-071-0/+2
|
* ephy-profile-migrator: update to migrate also zoom level preferencesClaudio Saavedra2012-03-071-0/+7
|
* Build fixesClaudio Saavedra2012-03-071-5/+6
| | | | Xan, talk to me after class.
* ephy-profile-migrator: migrate history to the new formatXan Lopez2012-03-073-2/+208
|
* ephy-sqlite: and another forgotten file!Xan Lopez2012-03-071-0/+34
|
* ephy-history-service: forgot Makefile.am fileXan Lopez2012-03-071-0/+21
|
* ephy-history-service: change a few functions and variables to use "message"Xan Lopez2012-03-071-40/+40
| | | | They were leftovers from old APIs
* Add EphyHistoryService and helper classesXan Lopez2012-03-079-1/+2086
| | | | | | | | | EphyHistoryService provides a high-level API to store history information. It will processed by a worker thread using SQLite to provide a fast, responsive service to the main UI. Based on the code by Martin Robinson (mrobinson@igalia.com) and Claudio Saavedra (csaavedra@igalia.com).
* Add GObject wrapper classes for SQLiteXan Lopez2012-03-075-0/+620
| | | | | | | We'll use them to implement the new history/bookmarks storage backend. Code by Martin Robinson (mrobinson@igalia.com) and Claudio Saavedra (csaavedra@igalia.com)
* Plug a memory leakGiovanni Campagna2012-03-011-0/+1
| | | | | | Free GFiles created during argv parsing. https://bugzilla.gnome.org/show_bug.cgi?id=671095
* ephy-profile-utils: use == to compare SoupURI schemesSergio Villar Senin2012-02-241-1/+1
| | | | We can just use it as SOUP_URI_SCHEME_HTTPS is an intern static string.
* ephy-profile-utils: shut up libsoup runtime warningSergio Villar Senin2012-02-241-1/+1
| | | | | | | | It was actually more than a warning. It was preventing epy to recover passwords previously stored in the keyring, as all of them were stored using "/" as the path of the URI. https://bugzilla.gnome.org/show_bug.cgi?id=670431
* ephy-search-entry: use symbolic clear iconDiego Escalante Urrelo2012-02-081-3/+7
| | | | | | Instead of gtk+ stock icon, use the symbolic version. Respects LTR/RTL. https://bugzilla.gnome.org/show_bug.cgi?id=669131
* Allow toggling WebGL as a runtime GSettings switchMartin Robinson2012-02-031-0/+1
| | | | | | If WebGL is enabled in WebKitGTK+, this new GSettings switch disables and enables WebGL settings at runtime. WebGL is disabled by default currently because Epiphany may use Clutter in the future.
* Get rid of EPHY_STOCK_EPHYXan Lopez2012-01-276-42/+0
| | | | | | In 99% of the cases we were using it for gtk_window_set_icon_name, which does nothing in GNOME 3. In the couple of valid use cases, just use "web-browser" directly.
* And remove the last stock icon, bookmarksXan Lopez2012-01-273-72/+0
| | | | We can kill data/icons now.
* Remove the history stock iconXan Lopez2012-01-272-2/+0
|
* Remove EPHY_STOCK_BOOKMARKXan Lopez2012-01-273-3/+1
| | | | | Use the symbolic icon for the completion entry, I'm sure Lapo will approve.
* Remove more unused stock iconsXan Lopez2012-01-272-28/+1
|
* Remove all the lock stock iconsXan Lopez2012-01-273-7/+5
| | | | | | At this point we were only using the #defines in EphyLocationEntry to decide which symbolic icon to use, so keep that and delete everything else.
* Remove unused stock iconsXan Lopez2012-01-272-10/+0
| | | | | | | Both the icons themselves and the names in the header file. This just removes those without absolutely any reference to them in the entire source tree, but I suspect we can remove most of them since they are not actually used.
* entry: make EphyLocationEntry a GtkEntryCosimo Cecchi2012-01-202-72/+41
| | | | | | | | Instead of a GtkToolItem. A future commit will move the code in EphyLocationAction not to be a GtkAction, which is why this was a GtkToolItem in the first place. https://bugzilla.gnome.org/show_bug.cgi?id=668206
* Move the nautilus floating bar to lib/widgetsXan Lopez2012-01-173-3/+469
| | | | And fix a couple of warnings.
* ephy-middle-clickable-tool-button: remove, it's unused nowXan Lopez2012-01-173-103/+0
|
* Use the new Shell global menu for global actionsXan Lopez2012-01-141-1/+5
| | | | And remove them from the existing menubar.
* Fake middle clicks without gtk_button_{press,release}, which are deprecatedXan Lopez2012-01-025-0/+229
| | | | | | | | | | | | | | Factor the logic that fakes clicks from a middle click in EphyMiddleClick(Tool)Button by forwarding a left click to GTK+ when we receive a middle click. Since ephy_gui_is_middle_click stops working in this case, add the minimal logic in EphyLinkAction to make it work again (basically, cache the button that activated the action inside the action itself). The EphyMiddleClickable(Tool)Button classes were written by Alexandre Mazari. https://bugzilla.gnome.org/show_bug.cgi?id=628364
* ephy-dnd: reorder includesXan Lopez2012-01-011-1/+1
|
* ephy-gui: reorder includesXan Lopez2012-01-011-6/+4
|
* ephy-gui: remove unused methodXan Lopez2012-01-012-89/+0
|
* ephy-gui: remove long gone method declarationXan Lopez2012-01-011-3/+0
|
* ephy-session: use GTK's method to get the content areaXan Lopez2012-01-012-25/+0
| | | | Now we can remove our internal implementation.
* e-download-widget: update icon every 10%Diego Escalante Urrelo2011-12-211-0/+7
| | | | | | | | | | | In some cases trying to get the content-type of a download right at the start of the transfer won't give us useful information. To handle this case we query for the content-type and a proper icon every 10%, hoping that GIO/Soup will make a smarter guess. This is an arbitrary number that hopes to work with most cases. Bug #662059
* e-download-widget: use GIcon instead of GdkPixbufDiego Escalante Urrelo2011-12-211-19/+5
| | | | | | | GtkImage works fine with GIcon, this saves us some lines of code and allocating a GdkPixbuf. Bug #662059
* e-download: add ephy_download_get_content_typeDiego Escalante Urrelo2011-12-211-9/+5
| | | | | | | | | | This new API gets the content-type of a download using GIO, or Soup if GIO is still not available for the download. GIO is our first option since its local guesses are more reliable. Soup can be cheated by servers or confused by still too incomplete downloads. Bug #662059
* ephy-zoom-control: remove, there are no zoom toolbar items anymoreXan Lopez2011-12-154-375/+4
|