Commit graph

2934 commits

Author SHA1 Message Date
Michael James Gratton
d7b9884c90 Fix attachments being added to the conversation email view many times.
* src/client/components/client-web-view.vala (ClientWebView::has_valid_height),
  src/client/conversation-viewer/conversation-email.vala
  (ConversationEmail::message_bodies_loaded): Only update the values of
  these properties when they have actually changed, to avoid sending
  multiple notifies out for them.
2017-02-01 00:41:44 +11:00
Michael James Gratton
28fe2a482f Minor code cleanup. 2017-02-01 00:41:44 +11:00
Michael James Gratton
67d81c3e15 Re-implement composer font family/size action state updating.
* src/client/composer/composer-web-view.vala (ComposerWebView): Add new
  ::cursor_style_changed signal, hook it up to the JS cursorStyleChanged
  message and interpret the raw results from the web view before passing
  it on.

* src/client/composer/composer-widget.vala (ComposerWidget): Replace
  remainder of old ::update_actions method with a listener for
  ComposerWebView::cursor_style_changed. Reimplement in terms of that
  signal.

* ui/composer-web-view.js: Keep track of font family and size changes,
  send a cursorStyleChanged message when they change.
2017-02-01 00:41:44 +11:00
Michael James Gratton
2bd5306d30 Reenable undo/redo composer actions.
* src/client/composer/composer-web-view.vala (ComposerWebView): Add new
  ::command_stack_changed signal to manage undo/redo enabled state, hook
  it up to a JS callback. Add ::is_empty property as a non-functioning
  shim in lieu of can_undo going away. Remove ::can_undo and ::can_redo,
  replace them with methods to actually fire an undo and redo.

* src/client/composer/composer-widget.vala (ComposerWidget): Use
  ClientWebView::is_empty rather inplace of can_redo for determining
  editing state. Remove old undo/redo signal hookups, replace with
  ::command_stack_changed and manage action enable state from there.
  (ComposerWidget::action_entries): Add explicit actions for undo/redo,
  since they need some custom code over on on the web process side.
  (ComposerWidget::on_compose_as_html_toggled): Explciitly manage the
  visibility of rich text toolbar buttons, don't rely on obscure
  GtkBuilder magic that Glade doesn't support.

* ui/composer-web-view.js: Add a mutation observer for the message body
  and explcit methods for firing undo/redo commands, so we can keep track
  of how the command stack changes. As it does, fire commandStackChanged
  messages back to the client process. Explicity set the message body as
  content-editable after the document has been mutated for quotes, etc.

* ui/composer-widget.ui: Add bonus undo/redo toobar buttons for the
  composer.
2017-02-01 00:41:44 +11:00
Michael James Gratton
b1d721dac6 Update and mostly reenable composer clipboard actions.
* src/client/components/client-web-view.vala (copy_clipboard): Fixed to
  actually copy, not cut. Removed can_copy_clipboard since it's no longer
  implementable or useful.

* src/client/composer/composer-web-view.vala (ComposerWebView): Remove
  can_cut_clipboard and can_paste_clipboard, since they are no longer
  implementable or useful. Implement simple part of insert_text so
  pasting plain text works, but still need to handle scroll update.

* src/client/composer/composer-widget.vala (ComposerWidget): Fix keyboard
  shortcut for copying. Remove old WK1 clipboard related events. Update
  clipboard actions' state using selection changed signal. Handle pasting
  plain and rich text via the editor.

* src/client/web-process/util-composer.vala (insert_clipboard_text):
  Remove code moved back to ComposerWebView.
2017-02-01 00:41:44 +11:00
Michael James Gratton
850730a69d Reimplement inserting additional replies into the composer. 2017-02-01 00:41:44 +11:00
Michael James Gratton
20db6e57dd Re-enable custom composer context menu, add WK text entry items to it.
* src/client/composer/composer-widget.vala
  (ComposerWidget::action_entries): Add an entry for the inspector so it
  can be loaded via the context model in the same way as other items.
  (ComposerWidget::context_menu_*): Keep track of a number of the context
  menu's sections, so we can selectively include them in the WK context
  menu.
  (ComposerWidget::on_context_menu): Re-implement to work wth the WK2
  context menu model, which annoyingly doesn't even extend any of the
  GtkMenu infrastrcuture.

* src/client/util/util-gtk.vala (menu_foreach): Pass the action
  target through to the loop's delegate, it's a bit more useful for
  dealing with the WK2 model.
  (add_g_menu_to_gtk_menu): Removed, WebKitContextMenu doesn't extend
  Gtk.Menu any longer so this is is no longer needed.

* ui/composer-menus.ui: Reoganise to use standard composer action
  prefix. Duplicate rich and plain text clipboard sections so they can
  just be selectively enabled. Include dummy sections for WK items to
  specify where they are located in the menu, and a section for the
  inspector.
2017-02-01 00:41:44 +11:00
Michael James Gratton
159e6c9bae Add is_rich_text property to ComposerWebView, use it.
* src/client/composer/composer-web-view.vala (ComposerWebView): Add
  is_rich_text pop, keep it updated.

* src/client/composer/composer-widget.vala (ComposerWidget): Use
  is_rich_text property rather than consulting the action's state.
2017-02-01 00:41:44 +11:00
Michael James Gratton
f69c461955 Re-enable spell checking in composer.
* src/client/application/geary-config.vala (Configuration): Remove
  spell-check setting, we can just get it from the list of visible
  languages instead. Update the schema.

* src/client/components/client-web-view.vala (WebView::init_web_context):
  Pass in a config object, use that to init WebKit's spell checking on
  the WebContext now that is a global configuration, update it when the
  config changes, update call sites.

* src/client/composer/composer-widget.vala (ComposerWidget): Remove
  WK1-syle spell checking settings prefs.

* src/client/composer/spell-check-popover.vala (SpellCheckPopover): Pass
  a config object in so we don't have to use the global app singleton
  instance.

* src/client/dialogs/preferences-dialog.vala (PreferencesDialog):
  Modernise by converting into a widget template.

* test/client/components/client-web-view-test-case.vala (TestCase):
  Construct a config object as a fixture, use it to init the WebContext
  and make it avalaible to subclasses & update subclasses.

* ui/preferences-dialog.ui: Moved from preferences.dialog, remove spell
  check preference.
2017-02-01 00:41:44 +11:00
Michael James Gratton
6171ff2ebd Fix attachments UI not ever being displayed.
* src/client/components/client-web-view.vala (ClientWebView): Make
  has_valid_height a GObject property so we can get notified about it
  changing.

* src/client/conversation-viewer/conversation-email.vala
  (ConversationEmail::connect_message_view_signals): Fixed to listen to
  has-valid-height changing rather than the old WK1 load-status property.

* ui/conversation-message.ui: Set body_container orientation to vertical
  so adding the attachments widget works as expected.
2017-02-01 00:41:43 +11:00
Michael James Gratton
636e514cda Minor code cleanup.
* src/client/components/client-web-view.vala (ClientWebView): Make some
  unnecessarily internal methods private.

* ui/*.js: Replace "var" with "let" where appropriate - i.e. almost
  everywhere.
2017-02-01 00:41:43 +11:00
Michael James Gratton
8864e2b7a7 Work around rendering quote controller buttons, enable expanding quotes.
* ui/conversation-web-view.js (ConversationPageState): Add
  ::updatePreferredHeight method to waitch for and update the web view's
  preferred height when it changes.
  (ConversationPageState::createControllableQuotes): Create quote
  controllers using the DOM so we can easily attach click handlers to
  it. Attach handlers to toggle the hide class and updated the preferred
  height.

* ui/client-web-view.js (PageState): Add ::getPreferredHeight method, use
  that to determine the preferred height of the page.

* ui/conversation-web-view.css: Import GTK+4 Adwaita button CSS to work
  around WebKitGTK+ Bug 166648. Tweak quote style a bit.
2017-02-01 00:41:43 +11:00
Michael James Gratton
5e114cfcac Fix being unable to scroll a message while remote images are loading.
* src/client/conversation-viewer/conversation-list-box.vala
  (EmailRow::on_size_allocate): Disable should-scroll when we have a
  valid height, not when loaded, so we stop pinning the scroll value and
  let users scroll, even when remote images loads are still running.

* src/client/components/client-web-view.vala (WebView): Replace is_loaded
  with has_valid_height, so we can if the body has been parsed and some
  content is visible. This still isn't perfect, but better than using
  load-ended. Fix call sites.
2017-02-01 00:41:43 +11:00
Michael James Gratton
e002f0c320 Add an OSD prgress bar for remote image loading.
* src/client/conversation-viewer/conversation-message.vala
  (ConversationMessage): Chase body container type and name change,
  update call sites. Add in a Progress bar and update it using callbacks
  from the web view, handling both initial load and the user subsequently
  giving permission to load remote images.

* src/client/components/client-web-view.vala (ClientWebView): Provide a
  form of the internal URL scheme prefix.

* ui/conversation-message.ui: Convert body container from being a GtkBox
  to a GtkGrid, add in a GtkProgressBar.
2017-02-01 00:41:43 +11:00
Michael James Gratton
271b9460ec Add Geary.TimeoutManager as a high-level interface to GLib.Timeout. 2017-02-01 00:41:43 +11:00
Michael James Gratton
977bb2827a Minor code cleanup. 2017-02-01 00:41:43 +11:00
Michael James Gratton
17fda41b85 Fix non-breaking spaces breaking formatting in sent messages.
This ensures that non-breaking space chars (not HTML entities) are
removed from text obtainined from the composer, and moves the F=F text
formatting from JS back to Vala, to minimimse the JS footprint and return
to using the old (working) version again.

* src/client/composer/composer-web-view.vala (ClientWebView::get_text):
  Restore the old F=F formatting code previously in webkit-util, apply it
  to plain text obtained from the composer.

* test/client/components/client-web-view-test-case.vala: New base class
  for tests involving ClientWebView.

* test/client/composer/composer-web-view-test.vala: New tests for
  ComposerWebView::get_html and ::get_text.

* test/js/composer-page-state-test.vala: Reworked to use
  ClientWebViewTestCase, updated tests now that JS is returning
  QUOTE_MARKER-delinated text, not F=F text.

* test/testcase.vala (TestCase): Move ::async_complete and ::async_result
  from ComposerPageStateTest so all test cases can test async code.

* test/CMakeLists.txt: Add new source files.

* test/main.vala (main): Add new test.

* ui/composer-web-view.js: Update doc comments, remove F=F code, break
  out non-breaking space replacement so it can be tested.
2017-02-01 00:41:43 +11:00
Michael James Gratton
57f10446a9 Use an internal URL scheme for displaying message bodies.
This makes debugging easier, since the URL will show up in the console,
Inspector and elsewhere, and the HTML message source, etc will appear in
the Inspector.

* src/client/components/client-web-view.vala
  (ClientWebView::init_web_context): Rehitser new internal scheme, hook
  it up to the new ::handle_internal_request handler for it.
  (ClientWebView::load_html): Keep a reference to the HTML body so it can
  be loaded via the URL scheme handler, make the second param optional
  and if null, use the new internal URL for the body part. Update call
  sites to avoid using the second param.

* src/client/web-process/web-process-extension.vala
  (GearyWebExtension::on_send_request): Allow requests for the
  internal URL scheme.
2017-02-01 00:41:43 +11:00
Michael James Gratton
536fb04840 Minor code updates. 2017-02-01 00:41:43 +11:00
Michael James Gratton
503ca3b478 Update Javascript memory management a bit.
* bindings/vapi/javascriptcore-4.0.vapi: Don't pretend JS.String will
  be unreff'ed by vala, it wont. Add JS.GlobalContext.retain, in case it
  wants to be used.

* src/client/components/client-web-view.vala
  (ClientWebView::ClientWebView): JavascriptResult instances are unref'ed
  when unowned.
2017-02-01 00:41:43 +11:00
Michael James Gratton
772b874def Clean up JavaScriptCore VAPI, client and engine code.
* bindings/vapi/javascriptcore-4.0.vapi: Make JS objects match their JSC
  definitions: move JSValueFoo methods to JS.Value, etc. Update call
  sites.

* src/client/util/util-webkit.vala: Move WebKit-specific common methods
  from ClientWebView here. Update call sites.

* src/engine/util/util-js.vala: Move JSC-specific common methods from
  ClientWebView and ComposerPageStateTest here. Update call sites.

* src/client/web-process/web-process-extension.vala: Check for and handle
  exceptions when calling JS code.

* src/CMakeLists.txt: Add new source files, make WebKit VAPI generation
  and engine compilation depend on JSC.
2017-02-01 00:41:43 +11:00
Michael James Gratton
22de6b122e Fix JS error getting F=F text from ComposerWebView. Add JS unit tests.
* ui/composer-web-view.js (ComposerPageState::resolveNesting): Apply JS
  RegExp globally, to match default GLib RegEx behaviour.

* test/js/composer-page-state-test.vala: New tests covering generation of
  HTML and F=F text from JS ComposerPageState object.

* test/CMakeLists.txt: Add the new test.

* test/main.vala (main): Add a test suite for JS tests, add the new test
  to it.

* src/client/components/client-web-view.vala (ClientWebView): Add a
  reason to the JSError domain for when a JS exception is thrown.

* bindings/vapi/javascriptcore-4.0.vapi (JS::Context): Add JS.Type and
  some additional methods needed for the unit tests. Move most
  GlobalContext methods to Context so we can pass the lowest common
  demominator around.
2017-02-01 00:41:43 +11:00
Michael James Gratton
5dc20f4273 Make GTK & async unit tests work by running them in a GTK+ main loop.
Include GResources in the build so they can be loaded.

Bug 776421.

* test/main.vala (main): Init GTK, start a main loop and run the tests in
  that.

* test/CMakeLists.txt: Include GResources in unit test binary so they can
  be loaded by tests, and since we can't compile them into the client
  static lib.
2017-02-01 00:41:43 +11:00
Michael James Gratton
61c8e5a105 Remove global GearyApplication instance from ClientWebView.
This is also needed to make the class and its subclasses unit testable.

* src/client/components/client-web-view.vala
  (ClientWebView::ClientWebView): Replace use of
  GearyApplication.instance.config with a constructor parameter. Update
  all subclassess and call sites to ensure the parameter is passed in.
2017-02-01 00:41:43 +11:00
Michael James Gratton
a2d6381b8c Make ClientWebView and derived classes unit-testable.
* src/client/components/client-web-view.vala (ClientWebView): Don't
  require an instance of GearyApplication to be passed in to resource
  loading, use new GioUtil methods to load the resources instead. Update
  subclasses and call sites. Add a static init method for initialising
  the WebKit.WebContext move code from GearyController here.

* src/client/application/geary-application.vala (GearyApplication):
  Reimplement ::create_builder and ::read_resource using new GioUtil,
  deprecate them. Merge ::load_ui_resource_for_manager into
  ::load_ui_resource since that's its only use, deprecate it.

* src/client/util/util-gio.vala: New util methods for loading GResources,
  independent of the app.

* src/CMakeLists.txt: Add new util source.

UNit tetsing
2017-02-01 00:41:43 +11:00
Michael James Gratton
ef48c5daec Move WebKit2GTK target version to root cmake file for consistency. 2017-02-01 00:41:43 +11:00
Michael James Gratton
12834b11b5 Remove some more now-unsed DOM code. 2017-02-01 00:41:43 +11:00
Michael James Gratton
d4a4c5b45f Initial pass at implementing Format=Flowed formatting in JS for WK2.
May not actually be working, needs testing, may eat your replies, etc.
2017-02-01 00:41:43 +11:00
Michael James Gratton
6edc097e50 Ensure basic rich text editing controls work under WK2. 2017-02-01 00:41:43 +11:00
Michael James Gratton
a023b8aa6b Re-implement select-link-on-click for WK2. 2017-02-01 00:41:43 +11:00
Michael James Gratton
6933f3b6f2 Re-enable rich/plain text editing toggke for WK2. 2017-02-01 00:41:43 +11:00
Michael James Gratton
7063907688 Fix links not being opened when link target is a new window.
* src/client/components/client-web-view.vala
  (ClientWebView::on_decide_policy): Handle new window policy as well as
  nav actions.
2017-02-01 00:41:43 +11:00
Michael James Gratton
a72d845b35 Fix some dumb bugs in ConversationPageState::getSelectionForQuoting().
* ui/conversation-web-view.js: Fix prviously brace-less if block
  indentation, minor cleanup.
2017-02-01 00:41:43 +11:00
Michael James Gratton
b1027fcbbf Implement getting HTML and plain text from ComposerWebView in WK2.
* src/client/composer/composer-web-view.vala (ComposerWebView): Implement
  both ::get_html and ::get_text as async JS calls, make the methods
  async and update cal sites to handle that.

* src/client/composer/composer-widget.vala: Make saving deafts and
  sending message async, to handle editor returning message body text
  async. Remove uneeded ::get_html and ::get_text functions, update call
  sites to call same directly on the on editor instead.

* src/client/web-process/util-composer.vala: Remove obsolete ::get_html
  and ::get_text functions.

* ui/composer-web-view.js (ComposerPageState): Initial implementation of
  getHtml and getText methods.
2017-02-01 00:41:43 +11:00
Michael James Gratton
9e5e90ceb8 Mark ClientWebView::get_string_result and call sites as nullable. 2017-02-01 00:41:43 +11:00
Michael James Gratton
a77a19c101 Remove some reduncant method calls and related code. 2017-02-01 00:41:43 +11:00
Michael James Gratton
9ae52342f5 Add some WebView and WebProcess debugging. 2017-02-01 00:41:43 +11:00
Michael James Gratton
5b8c68f5fa Implement getting message selection for quoting and selection in WK2.
* src/client/conversation-viewer/conversation-web-view.vala
  (ConversationWebView): Remove has_selection method since we are
  using the signal to specify if a selection was found or not. Update
  call sites to use that.
  (ConversationWebView::get_selection_for_find,
  ConversationWebView::get_selection_for_quoting): Implement using calls
  to web process JS methods.

* src/client/application/geary-controller.vala
  (GearyController::create_reply_forward_widget): If we have a possible
  message view to quote from, handle constructing the compser widget
  asynchronously, when we know if we have a quote or not.

* src/client/conversation-viewer/conversation-viewer.vala:
  (ConversationViewer::on_find_mode_changed): Handle getting text
  selection for finds asynchonously.

* src/client/components/client-web-view.vala
  (ClientWebView::get_string_result): New helper for getting string
  values from JS calls.

* src/client/conversation-viewer/conversation-email.vala
  (ConversationEmail::get_selection_for_quoting,
  ConversationEmail::get_selection_for_find): Handxle errors when
  obtaining selections from a message view.

* src/client/conversation-viewer/conversation-message.vala: Remove
  methods that were simply passed through to the web view anyway. Update
  call sies.

* src/client/web-process/util-conversation.vala: Port all remaining
  functions to JS, remove.

* bindings/vapi/javascriptcore-4.0.vapi: Add methods needed to get
  strings out of WebKit.JavascriptResult instances.

* ui/conversation-web-view.js: Implement selection functions in JS, minor
  cleanup.
2017-02-01 00:41:43 +11:00
Michael James Gratton
3f90f7785a Reimplement loading and cleaning message into WK2 composer web view.
* src/client/application/geary-controller.vala (GearyController::open_async):
  Load ComposerWebView resources.

* src/client/composer/composer-web-view.vala (ComposerWebView): Move
  HTML/CSS template here from ComposerWidget. Load composer-web-view.js
  on app init and add it to the web view's user content manager.
  (ComposerWebView::load_html): Overridden to require HTML body and
  signature, assemble complete HTML as appropriate before chaining up to
  the default impl.
  (ComposerWebView::load_finished_and_realised): Remove redundant method.

* src/client/composer/composer-widget.vala (ComposerWidget):
  Remove 'message' prop since it is unused and onerous. Cache current
  account's signature as a field so it can be passed through to the
  editor as needed. Port on_link_clicked to composer-web-view.js.

* src/client/web-process/util-composer.vala: Remove function ported to JS
  in composer-web-view.js

* ui/CMakeLists.txt: Include new ComposerWebView JS resource.

* ui/composer-web-view.js: Port composer HTML sanitisation methods to JS,
  add to a custom subclass of PageState. Instantiate it and hook it up to
  onload.
2017-02-01 00:41:43 +11:00
Michael James Gratton
b02059795f Remove some obsolete CSS from conversation-web-view.css. 2017-02-01 00:41:43 +11:00
Michael James Gratton
431ebcb35f Re-implement message HTML cleaning in JS in the web extension for WK2.
* ui/conversation-web-view.js: New script, port old HTML cleaning code in
  vala to Javascript as new subclass of PageState. Instantiate that on
  page load.

* src/client/conversation-viewer/conversation-web-view.vala
  (ConversationWebView): Load and add new JS script for conversations.

* src/client/web-process/util-conversation.vala (Util.Conversation):
  Remove migrated and obsolete code.

* ui/client-web-view.js (PageState): Allow on-load behaviour to be
  overridden in subclasses.

* ui/CMakeLists.txt: Include new JS script.

* ui/conversation-web-view.css: Chase CSS class name changes.
2017-02-01 00:41:43 +11:00
Michael James Gratton
7c5e5ae2cd Remove ConversationWebView ::is_height_valid property.
WK2 seems to be reporting valid hight values now, so we don't need this
any more. With an additional small tweak, this also fixes auto-marking
messages as read under WK2.

* src/client/conversation-viewer/conversation-web-view.vala
  (ConversationWebView): Remove ::is_height_valid property. Update call
  sites to use ClientWebView::is_loaded instead.

* src/client/conversation-viewer/conversation-list-box.vala
  (ConversationListBox::check_mark_read): Also check that the web view
  has been allocated a positive size before auto-marking as read.
2017-02-01 00:41:43 +11:00
Michael James Gratton
766d55e75d Reimplement selection_changed signal for WK2.
Add a "has_selection" param to avoid a second round-trip to the web
process to determine that.

* src/client/components/client-web-view.vala (ClientWebView): Add a
  selection_changed signal, register a JS message handler for the JS
  equivalent hook up firing the signal.

* src/client/web-process/web-process-extension.vala (GearyWebExtension):
  Send a JS selectionChanged message when the page's selection changes.

* src/client/composer/composer-widget.vala,
  src/client/conversation-viewer/conversation-email.vala,
  src/client/conversation-viewer/conversation-message.vala: Uncomment
  code that relied on the WK1 selection_changed signal, use signal param
  rather than DOM calls.

* ui/client-web-view.js: Implement sending the selectionChanged message.
2017-02-01 00:41:43 +11:00
Michael James Gratton
3068d1b0e5 Integrate preferred height JS code into PageState, tidy it up a bit.
* ui/client-web-view.js: Move emitPreferredHeightChanged() into PageState
  as ::preferredHeightChanged(). Add a explicit constructor, move
  instance properties into that. Add an interval timer to periodically
  update the preferred height until loaded.
2017-02-01 00:41:43 +11:00
Michael James Gratton
d002722a19 Re-implement remote image loading management for WebKit2.
* src/client/components/client-web-view.vala (ClientWebView): Register
  for new remoteImageLoadBlocked message from JS. Add new
  ::remote_image_load_blocked signal to notify when a remote image load
  was blocked. Add ::allow_remote_image_loading and ::load_remote_images
  methods to allow th app to manage image loading state.

* src/client/conversation-viewer/conversation-email.vala
  (ConversationEmail): Determine up front whether the message view should
  load remote images and flag that, rather than passing through the email
  flag and the contact store.

* src/client/conversation-viewer/conversation-message.vala
  (ConversationMessage): Rmeove contact_store and
  always_load_remote_images properties and related code, just let the
  parent email view advise whether remote images should be initially
  loaded and act accordingly. Look up to ClientWebView signal and methods
  to handle manual remote image loading management by the user. Remove
  some obsolete code.

* src/client/web-process/web-process-extension.vala (GearyWebExtension):
  Replace allow_prefix implementation for remote image management with
  explicit signalling to/from the application via JavaScript.

* ui/client-web-view.js: Add a new PageState object, add props and method
  to implement remote image loading management.

* ui/client-web-view-allow-remote-images.js: Monkeypatch to be used when
  remote images should be loaded by default.

* ui/CMakeLists.txt: Include new JS file.

* src/client/conversation-viewer/conversation-web-view.vala,
  src/client/web-process/util-conversation.vala,
  src/client/web-process/util-webkit.vala: Remove obsolete code.
2017-02-01 00:41:43 +11:00
Michael James Gratton
8d13bf1922 Enable accessing javascriptcore objects from web extensions.
* src/CMakeLists.txt: Also generate a custom Also generate a custom
  webkit2gtk-web-extension-4.0 VAPI that re-includes javascriptcore
  objects, so they can be access from the web extension.

* bindings/metadata/WebKit2WebExtension-4.0-custom.vala,
  bindings/metadata/WebKit2WebExtension-4.0.metadata: Include in-tree
  metadata for web extension VAPI, update to all access to JS obejcts.

* bindings/vapi/javascriptcore-4.0.vapi: Add a bunch of useful additional
  objects and method.
2017-02-01 00:41:43 +11:00
Michael James Gratton
3a3b5d0bff Rename some JS methods to be more vala-esque. 2017-02-01 00:41:43 +11:00
Michael James Gratton
56651ed8c4 Inject ClientWebView script at document start.
* src/client/components/client-web-view.vala
  (ClientWebView::load_app_script): Set script injection time to the
  start of the document load.

* ui/client-web-view.js: Set an onload handler to report back the
  preferred height.
2017-02-01 00:41:43 +11:00
Michael James Gratton
26fe139e97 Initial pass at getting the HTML document's height from the web process.
* bindings/vapi/javascriptcore-4.0.vapi: Add some methods to
  GlobalContext for accessing JSValues as ints.

* src/client/components/client-web-view.vala
  (ClientWebView): Hook up UserContentManager script messages handler and
  handler implementation for "preferredHeightChanged", update the new
  preferred_height prop on the class, and queue a resize. Hook those
  values up to the GTK allocation machinery.
  (ClientWebView::get_int_result): Convenience method for getting an int
  from a JavascriptResult.
  (ClientWebView::get_preferred_height): Report back values as reported
  by messages from the script handler.
  (ClientWebView::register_message_handler): Convenience method for
  registering script messages handlers.

* src/client/conversation-viewer/conversation-web-view.vala
  (ConversationWebView): Remove now-redundant GTK allocation machinery.

* ui/client-web-view.js: Post a message to preferredHeightChanged when
  the page is sorta-kinda loaded.
2017-02-01 00:41:43 +11:00
Michael James Gratton
09c9a398f7 Load a default app script into ClientWebViews at construction time.
* src/client/application/geary-controller.vala
  (GearyController::open_async): Load the app script for ClientWebView at
  startup.

* src/client/components/client-web-view.vala
  (ClientWebView::ClientWebView): Ensure we actually have a
  UserContentManager instance to work with, add the app script to the
  manager for the instance.
  (ClientWebView::load_scripts): Actually load client-web-view.js.
  (ClientWebView::load_user_stylesheet): Helper method for this class and
  subsclasses for doing the actual script load from the app.

* ui/client-web-view.js: Add boilerplaye for new file.

* ui/CMakeLists.txt: Include client-web-view.js.
2017-02-01 00:41:43 +11:00