From 52340b43f5f54c38be2be986b75bdd387b7f04a1 Mon Sep 17 00:00:00 2001 From: Brian Clifton Date: Wed, 28 Sep 2016 23:04:03 -0700 Subject: [PATCH 01/14] Possible fix for issues seen on frameless window (Windows) when at 200% --- atom/browser/native_window_views.cc | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc index bd2371307843..0738bf825243 100644 --- a/atom/browser/native_window_views.cc +++ b/atom/browser/native_window_views.cc @@ -1155,9 +1155,6 @@ void NativeWindowViews::OnWidgetMove() { gfx::Rect NativeWindowViews::ContentBoundsToWindowBounds( const gfx::Rect& bounds) { - if (!has_frame()) - return bounds; - gfx::Rect window_bounds(bounds); #if defined(OS_WIN) HWND hwnd = GetAcceleratedWidget(); @@ -1167,7 +1164,7 @@ gfx::Rect NativeWindowViews::ContentBoundsToWindowBounds( window_->non_client_view()->GetWindowBoundsForClientBounds(dpi_bounds)); #endif - if (menu_bar_ && menu_bar_visible_) { + if (has_frame() && menu_bar_ && menu_bar_visible_) { window_bounds.set_y(window_bounds.y() - kMenuBarHeight); window_bounds.set_height(window_bounds.height() + kMenuBarHeight); } @@ -1176,9 +1173,6 @@ gfx::Rect NativeWindowViews::ContentBoundsToWindowBounds( gfx::Rect NativeWindowViews::WindowBoundsToContentBounds( const gfx::Rect& bounds) { - if (!has_frame()) - return bounds; - gfx::Rect content_bounds(bounds); #if defined(OS_WIN) HWND hwnd = GetAcceleratedWidget(); @@ -1195,7 +1189,7 @@ gfx::Rect NativeWindowViews::WindowBoundsToContentBounds( display::win::ScreenWin::ScreenToDIPSize(hwnd, content_bounds.size())); #endif - if (menu_bar_ && menu_bar_visible_) { + if (has_frame() && menu_bar_ && menu_bar_visible_) { content_bounds.set_y(content_bounds.y() + kMenuBarHeight); content_bounds.set_height(content_bounds.height() - kMenuBarHeight); } From 5bfa898a02aee9aabda1268c19cd4a2085fcb257 Mon Sep 17 00:00:00 2001 From: Milan Burda Date: Thu, 29 Sep 2016 13:57:41 -0700 Subject: [PATCH 02/14] Always drop SEM_NOGPFAULTERRORBOX flag from error mode (enables WER if crashReporter is not started) --- atom/common/node_bindings.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/common/node_bindings.cc b/atom/common/node_bindings.cc index 1e3fac3874f3..a049be23a67e 100644 --- a/atom/common/node_bindings.cc +++ b/atom/common/node_bindings.cc @@ -144,7 +144,7 @@ void NodeBindings::Initialize() { // uv_init overrides error mode to suppress the default crash dialog, bring // it back if user wants to show it. std::unique_ptr env(base::Environment::Create()); - if (env->HasVar("ELECTRON_DEFAULT_ERROR_MODE")) + if (is_browser_ || env->HasVar("ELECTRON_DEFAULT_ERROR_MODE")) SetErrorMode(GetErrorMode() & ~SEM_NOGPFAULTERRORBOX); #endif } From 140651c258ddf738a96268be99b82a9cc8ca54c8 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 30 Sep 2016 15:04:13 -0700 Subject: [PATCH 03/14] Ignore already closed windows --- atom/browser/window_list.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/atom/browser/window_list.cc b/atom/browser/window_list.cc index 83bf615aad25..b8e5a8256530 100644 --- a/atom/browser/window_list.cc +++ b/atom/browser/window_list.cc @@ -71,7 +71,8 @@ void WindowList::RemoveObserver(WindowListObserver* observer) { void WindowList::CloseAllWindows() { WindowVector windows = GetInstance()->windows_; for (const auto& window : windows) - window->Close(); + if (!window->IsClosed()) + window->Close(); } WindowList::WindowList() { From 73cdf35c98cfda482f53fca19e99a073790c1059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Corr=C3=AAa=20Gomes?= Date: Sat, 1 Oct 2016 00:33:51 -0300 Subject: [PATCH 04/14] Update license in README file --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 3fee15b5c0e5..c6588acb4841 100644 --- a/README.md +++ b/README.md @@ -79,3 +79,7 @@ forums Check out [awesome-electron](https://github.com/sindresorhus/awesome-electron) for a community maintained list of useful example apps, tools and resources. + +## License + +MIT © 2016 Github From f4d33e366df6b239536ec49affc6346eac5aabd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Corr=C3=AAa=20Gomes?= Date: Sat, 1 Oct 2016 00:34:29 -0300 Subject: [PATCH 05/14] Update year in LICENSE file --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 4d231b4563bb..4e47b02a28a9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2014 GitHub Inc. +Copyright (c) 2016 GitHub Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the From b10a6422d41c125569177b9507f71ce12e1f97cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio?= Date: Sat, 1 Oct 2016 17:59:30 -0300 Subject: [PATCH 06/14] Translation of CODE OF CONDUCT.md to pt-BR [ci skip] --- .../pt-BR/project/CODE_OF_CONDUCT.md | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 docs-translations/pt-BR/project/CODE_OF_CONDUCT.md diff --git a/docs-translations/pt-BR/project/CODE_OF_CONDUCT.md b/docs-translations/pt-BR/project/CODE_OF_CONDUCT.md new file mode 100644 index 000000000000..c76493026743 --- /dev/null +++ b/docs-translations/pt-BR/project/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Pacto de Conduta do Colaborador de Código + +## Nosso Compromisso + +No interesse de promover um ambiente aberto e acolhedor, nos como colaboradores e mantenedores comprometidos a fazer participação em nosso projeto e nossa comunidade uma experiência livre de assédio para todos, independentemente da idade, estatura, deficiência, etnia, identidade de gênero e expressão, nivel de experiência, nacionalidade, aparência pessoal, raça, religião ou identidade sexual e orientação. + +## Nossos Padrões + +Exemplos de comportamento que contribui para criar um ambiente positivo incluem: + +* Usar uma linguagem de boas-vindas e incluisiva +* Ser respeitoso com diferentes pontos de vista e experiências +* Graciosamente aceitar críticas construtivas +* Incidindo sobre o que é melhor para a comunidade +* Mostrando empatia para com outros membros da comunidade + +Exemplos de comportamento inaceitável pelos participantes incluem: + +* O uso de linguagem sexualizada ou imagens e atenção sexual indesejada ou avanços +* Trolando, comentários depreciativos, e ataques insultantes/pessoais ou politicos +* Assédio público ou privado +* A publicação de outras informações privadas, tais como um endereço físico ou eletrônico, sem permissão explícita +* Outra conduta que possa ser razoavelmente considerada inadequada em um ambiente profissional + +## Nossas Responsabilidades + +Mantenedores do projeto são responsáveis por esclarecer as normas do comportamento aceitável e espera-se que as medidas corretivas adequadas e justas em resposta a todas as instâncias do comportamento inaceitável. + +Mantenedores do projeto têm o direito e a responsabilidade de remover, editar, ou rejeitar comentários, commits, código, edição de wiki, issues e outras contribuições que não estão alinhadas a este Código de Conduta, ou proibir temporária ou permamentemente qualquer colaborador por outros comportamentos que considerem inapropriado, ameaçador, ofensivo ou prejudicial. + +## Escopo + +Este Código de Conduta aplica-se tanto dentro dos espaços do projeto e em espaços públicos quando um indivíduo está representando o projeto ou sua comunidade. Exemplos de que representa um projeto ou comunidade incluem o uso de um endereço de e-mail do projeto oficial, postado através de uma conta oficial de mídia social, ou agindo como um representante nomeado em um evento on-line ou off-line. Representação de um projeto pode ser ainda definidos e esclarecidos pelos mantenedores do projeto. + +## Aplicação + +Instânicas de assédio ou comportamento abusivo, de outro modo inaceitáveis podem ser relatados em contato com a equipe do projeto em [electron@github.com](mailto:electron@github.com). Todas as reclamações serão analisadas e investigadas e irá resultar em uma resposta que for considerada necessária e adequada ás circunstâncias. A equipe do projeto é obrigada a manter a confidencialidade no que diz respeito ao relato de um incidente. Mais detalhes das políticas de aplicação específicas podem ser publicadas separadamente. + +Mantenedores de projetos que não seguem ou fazem comprir o Código de Conduta de boa-fé podem enfrentar repercussões temporárias ou permanentes, conforme determinado por outros membros da liderança do projeto. + +## Atribuição + +Este Código de Conduta é uma adaptação do [Pacto do Colaborador][homepage], versão 1.4, disponível em [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ From 960971b195badc740b61502ffc70423249c834a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio?= Date: Sat, 1 Oct 2016 19:56:01 -0300 Subject: [PATCH 07/14] :memo: Translation of CONTRIBUTING.md to pt-BR[ci skip] --- .../pt-BR/project/CONTRIBUTING.md | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 docs-translations/pt-BR/project/CONTRIBUTING.md diff --git a/docs-translations/pt-BR/project/CONTRIBUTING.md b/docs-translations/pt-BR/project/CONTRIBUTING.md new file mode 100644 index 000000000000..2272fe3f023e --- /dev/null +++ b/docs-translations/pt-BR/project/CONTRIBUTING.md @@ -0,0 +1,73 @@ +# Contribuindo para Electron + +:memo: Traduções Disponíveis: [Korean](https://github.com/electron/electron/tree/master/docs-translations/ko-KR/project/CONTRIBUTING.md) | [Simplified Chinese](https://github.com/electron/electron/tree/master/docs-translations/zh-CN/project/CONTRIBUTING.md) | [Português do Brasil](https://github.com/electron/electron/tree/master/docs-translations/pt-BR/project/CONTRIBUTING.md) + +:+1::tada: Em primeiro lugar, obrigado pelo seu tempo para contribuir! :tada::+1: + +Este projeto obedece ao Pacto do Colaborador [código de conduta](CODE_OF_CONDUCT.md). +Ao participar, é esperado que você mantenha este código. Por favor, reporte o comportamento inesperado para atom@github.com. + +A seguir um conjunto de diretrizes para contribuir para Electron. Estas são apenas diretrizes, não são regras, use-as com bom senso e sinta-se livre para propor alterações a este documento através de um pull request. + +## Reportando Issues + +* Você pode criar uma issue [aqui](https://github.com/electron/electron/issues/new), +mas antes de fazer, por favor leia as notas abaixo e inclua o maior número de detalhes possíveis do problema. Se puder, por favor inclua: + * A versão do Electron que estiver usando + * O sistema operacional que estiver usando + * Se possível, o que estava fazendo quando ocorreu o problema e o que esperava que acontecesse +* Outras coisas que poderão ajudar a resolver o problema: + * Captura de telas e GIFs animados + * O erro que aparece no terminal, ferramentas de desenvolvimento ou alertas lançados + * Realizar uma [pesquisa rápida](https://github.com/electron/electron/issues?utf8=✓&q=is%3Aissue+) + para ver se um problema semelhante já não foi reportado + +## Submetendo Pull Requests + +* Incluir captura de telas e GIFs animados no pull request sempre que possível. +* Seguir o [estilo de código definido na documento](/docs-translations/pt-BR/development/coding-style.md) do JavaScript, C++, and Python. +* Escrever a documentação em [Markdown](https://daringfireball.net/projects/markdown). + Veja o [guia de estilo da documentação](/docs-translations/pt-BR/styleguide.md). +* Escreva mensagens curtas e no tempo presente para o commit. Veja [guia de estilo para mensagens de commit](#git-commit-messages). + +## Guias de Estilo + +### Código Geral + +* Terminar arquivos com uma nova linha. +* Coloque na seguinte sequência: + * Construa um módulos nó (como `path`) + * Construa um módulos Electron (como `ipc`, `app`) + * Módulos locais (use caminhos relativos) +* Coloque propriedades da classe na seguinte sequência: + * Métodos e propriedades da classe (métodos começando com um `@`) + * Métodos e propriedades de instância +* Evite código dependente de plataforma: + * Use `path.join()` para concatenar nomes de arquivos. + * Use `os.tmpdir()` ao inves de `/tmp` quando precisar fazer referência ao diretório temporário. +* Use um simples `return` explicitamente no final de uma função com retorno. + * Nao `return null`, `return undefined`, `null`, ou `undefined` + +### Mensagens Git Commit + +* Use o tempo presente("Add feature" não "Added feature") +* Use o modo imperativo ("Move cursor to..." não "Moves cursor to...") +* Limitar a primeira linha para 72 caracteres ou menos +* Referênciar issues e pull requests liberalmente +* Quando apenas a documentação mudar, inclua `[ci skip]` na descrição do commit +* Considere começar a mensagem do commit aplicando um emoji: + * :art: `:art:` quando melhorar o formato/estrutura do código + * :racehorse: `:racehorse:` quando melhorar o desempenho + * :non-potable_water: `:non-potable_water:` quando acabar com vazamento de memória + * :memo: `:memo:` quando escrever documentação + * :penguin: `:penguin:` quando corrigir algo no Linux + * :apple: `:apple:` quando corrigir algo no macOS + * :checkered_flag: `:checkered_flag:` quando corrigir algo no Windows + * :bug: `:bug:` quando corrigir um bug + * :fire: `:fire:` quando remover código ou arquivos + * :green_heart: `:green_heart:` quando corrigir a compilação CI + * :white_check_mark: `:white_check_mark:` quando adicionar testes + * :lock: `:lock:` quando se trata de segurança + * :arrow_up: `:arrow_up:` quando upgrading dependências + * :arrow_down: `:arrow_down:` quando downgrading dependências + * :shirt: `:shirt:` quando remover advertências linter From 5fb72b5e05542cab95921c4b91355487c2c0936e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio?= Date: Sat, 1 Oct 2016 20:55:12 -0300 Subject: [PATCH 08/14] :memo: Translation of README.md to pt-BR [ci_skip] --- docs-translations/pt-BR/project/README.md | 67 +++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 docs-translations/pt-BR/project/README.md diff --git a/docs-translations/pt-BR/project/README.md b/docs-translations/pt-BR/project/README.md new file mode 100644 index 000000000000..6c435edaa5c4 --- /dev/null +++ b/docs-translations/pt-BR/project/README.md @@ -0,0 +1,67 @@ +[![Electron Logo](http://electron.atom.io/images/electron-logo.svg)](http://electron.atom.io/) + +[![Travis Build Status](https://travis-ci.org/electron/electron.svg?branch=master)](https://travis-ci.org/electron/electron) +[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/kvxe4byi7jcxbe26/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/electron) +[![devDependency Status](https://david-dm.org/electron/electron/dev-status.svg)](https://david-dm.org/electron/electron#info=devDependencies) +[![Join the Electron Community on Slack](http://atom-slack.herokuapp.com/badge.svg)](http://atom-slack.herokuapp.com/) + +:memo: Available Translations: [Korean](https://github.com/electron/electron/tree/master/docs-translations/ko-KR/project/README.md) | [Simplified Chinese](https://github.com/electron/electron/tree/master/docs-translations/zh-CN/project/README.md) | [Brazilian Portuguese](https://github.com/electron/electron/tree/master/docs-translations/pt-BR/project/README.md) + +O framework Electron permite escrever aplicações desktop multi-plataforma usando JavaScript, HTML e CSS. Baseia-se em [Node.js](https://nodejs.org/) e [Chromium](http://www.chromium.org) e é usado pelo [editor Atom](https://github.com/atom/atom) e muitas outras [aplicações](http://electron.atom.io/apps). + +Siga [@ElectronJS](https://twitter.com/electronjs) no Twitter para anúncios importantes. + +Este projeto adere ao código do Pacto do Colaborador [código de conduta](CODE_OF_CONDUCT.md). Ao participar, espera-se que você siga esse código. Por favor, reporte o comportamento inaceitável para electron@github.com. + +## Downloads + +Binários pré-construídos e símbolos de depuração do Electron para Linux, Windows e macOS podem ser encontrados na página de [releases](https://github.com/electron/electron/releases). + +Você também pode usar [`npm`](https://docs.npmjs.com/) para instalar os binários do electron: + +```sh +# Install the `electron` command globally in your $PATH +npm install electron -g + +# Install as a development dependency +npm install electron --save-dev +``` + +### Mirrors + +- [China](https://npm.taobao.org/mirrors/electron) + +## Documentação + +Guias de referência da API estão localizados no diretório [docs](https://github.com/electron/electron/tree/master/docs). Ele também contém documentos que descrevem como construir e contribuir para o Electron. + +## Documentos Traduzidos + +- [Brazilian Portuguese](https://github.com/electron/electron/tree/master/docs-translations/pt-BR) +- [Korean](https://github.com/electron/electron/tree/master/docs-translations/ko-KR) +- [Japanese](https://github.com/electron/electron/tree/master/docs-translations/jp) +- [Spanish](https://github.com/electron/electron/tree/master/docs-translations/es) +- [Simplified Chinese](https://github.com/electron/electron/tree/master/docs-translations/zh-CN) +- [Traditional Chinese](https://github.com/electron/electron/tree/master/docs-translations/zh-TW) +- [Turkish](https://github.com/electron/electron/tree/master/docs-translations/tr-TR) +- [Ukrainian](https://github.com/electron/electron/tree/master/docs-translations/uk-UA) +- [Russian](https://github.com/electron/electron/tree/master/docs-translations/ru-RU) +- [French](https://github.com/electron/electron/tree/master/docs-translations/fr-FR) + +## Começo Rápido + +Clone o repositório e execute o [`electron/electron-quick-start`](https://github.com/electron/electron-quick-start) para ver um pequeno aplicativo Electron em ação. + +## Comunidade + +Você pode fazer perguntas e interagir com a comunidade nos seguintes locais: +- [`electron`](http://discuss.atom.io/c/electron) categoria nos fóruns Atom +- `#atom-shell` canal na Freenode +- [`Atom`](http://atom-slack.herokuapp.com/) canal no Slack +- [`electron-br`](https://electron-br.slack.com) *(Brazilian Portuguese)* +- [`electron-kr`](http://www.meetup.com/electron-kr/) *(Korean)* +- [`electron-jp`](https://electron-jp-slackin.herokuapp.com/) *(Japanese)* +- [`electron-tr`](http://www.meetup.com/Electron-JS-Istanbul/) *(Turkish)* +- [`electron-id`](https://electron-id.slack.com) *(Indonesia)* + +Confira [awesome-electron](https://github.com/sindresorhus/awesome-electron) para uma lista mantida pela comunidade de exemplos de aplicativos úteis, ferramentas e recursos. From 18c7ba94f837ac6312b101c1b761b9d22b7e8586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio?= Date: Sat, 1 Oct 2016 21:28:17 -0300 Subject: [PATCH 09/14] :memo: Translation of accessibility.md to pt-BR [ci skip] --- .../pt-BR/tutorial/accessibility.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 docs-translations/pt-BR/tutorial/accessibility.md diff --git a/docs-translations/pt-BR/tutorial/accessibility.md b/docs-translations/pt-BR/tutorial/accessibility.md new file mode 100644 index 000000000000..21570ff405ec --- /dev/null +++ b/docs-translations/pt-BR/tutorial/accessibility.md @@ -0,0 +1,33 @@ +# Acessibilidade + +Fazendo aplicações acessíveis é importante e nós estamos felizes em apresentar uma nova funcionalidade para [Devtron](http://electron.atom.io/devtron) e [Spectron](http://electron.atom.io/spectron) que dá aos desenvolvedores a oportunidade de fazer as suas aplicações melhor para todos. + +--- + +Preocupações de acessibilidade em aplicações Electron são semelhantes aos de websites, porque eles são ambos em última análise HTML. Com aplicativos Electron, no entanto, você não pode usar recursos on-line para auditorias de acessibilidade porque a sua aplicação não tem uma URL para apontar para o auditor. + +Esses novos recursos trazem essas ferramentas de auditoria para a sua aplicação Electron. Você pode optar por adicionar auditorias aos seus testes com Spectron ou usá-los dentro do DevTools com Devtron. Leia a seguir para obter um resumo das ferramentas ou verifique nossa [documentação de acessibilidade](http://electron.atom.io/docs/tutorial/accessibility) para obter mais informações. + +### Spectron + +No framework de testes Spectron, agora você pode auditar cada janela e tag `` em seu aplicativo. Por exemplo: + +```javascript +app.client.auditAccessibility().then(function (audit) { + if (audit.failed) { + console.error(audit.message) + } +}) +``` + +Você pode ler mais sobre este recurso na [documentação do Spectron](https://github.com/electron/spectron#accessibility-testing). + +### Devtron + +Em Devtron há uma nova guia de acessibilidade que permitirá auditar uma página no seu aplicativo, classificar e filtrar os resultados. + +![devtron screenshot](https://cloud.githubusercontent.com/assets/1305617/17156618/9f9bcd72-533f-11e6-880d-389115f40a2a.png) + +Ambas as ferramentas estão usando a biblioteca [Accessibility Developer Tools](https://github.com/GoogleChrome/accessibility-developer-tools) construída pela Google for Chrome. Você pode aprender mais sobre as regras de auditoria da biblioteca de acessibilidade no [wiki do repositório](https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules). + +Se você souber de outras ferramentas de acessibilidade para o Electron, adicione-as à [documentação de acessibilidade](http://electron.atom.io/docs/tutorial/accessibility) através de um pull request. From 763fdb4be1081c944b74ed04f8aa703f2d2d5585 Mon Sep 17 00:00:00 2001 From: wxf Date: Sun, 2 Oct 2016 18:27:48 +0800 Subject: [PATCH 10/14] keep up with en version --- .../development/build-instructions-linux.md | 68 ++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/docs-translations/zh-CN/development/build-instructions-linux.md b/docs-translations/zh-CN/development/build-instructions-linux.md index 9815aeb03e5f..7ee9dff3892c 100644 --- a/docs-translations/zh-CN/development/build-instructions-linux.md +++ b/docs-translations/zh-CN/development/build-instructions-linux.md @@ -120,4 +120,70 @@ $ ./script/cpplint.py ```bash $ ./script/test.py -``` \ No newline at end of file +``` + +## Advanced topics + +默认编译配置是针对主流 Linux 桌面发行版而言, 对于其他特定发行版或平台, 以下信息可能会帮到你. + +### 本地编译 `libchromiumcontent` + +可以添加参数 `--build_libchromiumcontent` 给 `bootstrap.py` 脚本以避免使用预编译的 +`libchromiumcontent` 二进制文件: + +```bash +$ ./script/bootstrap.py -v --build_libchromiumcontent +``` + +默认情况下不会以 `shared_library` 方式编译, 所以你如果使用以下模式的话, 只能编译 Electron +的 `Release` 版本: + +```bash +$ ./script/build.py -c R +``` + +### 使用系统提供的 `clang` + +默认情况下 Electron 使用 Chromium 项目提供的预编译的 `clang` 进行编译. 如果基于某些原因 +你想要使用已经安装到系统的 `clang` 进行编译, 可以添加 `--clang_dir=` 参数给 +`bootstrap.py` 以指定 `clang` 安装路径. 上面参数告诉编译脚本, 在目录 `/bin/` 下有 + `clang` 程序. + +假设你的 `clang` 安装路径为 `/user/local/bin/clang`: + +```bash +$ ./script/bootstrap.py -v --build_libchromiumcontent --clang_dir /usr/local +$ ./script/build.py -c R +``` + +### 使用 `clang` 之外的编译器 + +要使用其他编译器 (如: `g++`) 编译 Electron, 首先需要使用参数 `--disable_clang` 禁用 `clang`, +然后设置 `CC` 及 `CXX` 环境变量. + +假设使用 GCC 工具链: + +```bash +$ env CC=gcc CXX=g++ ./script/bootstrap.py -v --build_libchromiumcontent --disable_clang +$ ./script/build.py -c R +``` + +### 环境变量 + +除了 `CC` 及 `CXX`, 你还可以设置以下环境变量来自定以编译配置: + +* `CPPFLAGS` +* `CPPFLAGS_host` +* `CFLAGS` +* `CFLAGS_host` +* `CXXFLAGS` +* `CXXFLAGS_host` +* `AR` +* `AR_host` +* `CC` +* `CC_host` +* `CXX` +* `CXX_host` +* `LDFLAGS` + +以上环境变量需要在执行 `bootstrap.py` 前设置, 在执行 `build.py` 的时候再设置将无效. From 7c5d3296e793562698a34182ae8556e34330e589 Mon Sep 17 00:00:00 2001 From: Vadim Macagon Date: Sun, 2 Oct 2016 23:38:39 +0700 Subject: [PATCH 11/14] Prevent undefined behavior when some Node Buffer objects are destroyed If node::Buffer::New() is used to wrap an existing chunk of memory without providing a custom callback to release that memory then Node will just use `free()`. In a couple of places Node buffer objects were constructed from chunks of memory that were allocated with `new[]`, but a custom callback to release that memory was omitted, this resulted in undefined behavior when those buffers were destroyed because `free()` was used to release memory allocated with `new[]`. To avoid undefined behavior the aforementioned buffer objects are now constructed with a custom callback that safely releases the underlying chunk of memory. --- atom/browser/atom_blob_reader.cc | 7 ++++++- .../printing/print_preview_message_handler.cc | 12 ++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/atom/browser/atom_blob_reader.cc b/atom/browser/atom_blob_reader.cc index 360024a0743f..676386bc6af7 100644 --- a/atom/browser/atom_blob_reader.cc +++ b/atom/browser/atom_blob_reader.cc @@ -21,6 +21,10 @@ namespace atom { namespace { +void FreeNodeBufferData(char* data, void* hint) { + delete[] data; +} + void RunCallbackInUI( const AtomBlobReader::CompletionCallback& callback, char* blob_data, @@ -32,7 +36,8 @@ void RunCallbackInUI( v8::HandleScope handle_scope(isolate); if (blob_data) { v8::Local buffer = node::Buffer::New(isolate, - blob_data, static_cast(size)).ToLocalChecked(); + blob_data, static_cast(size), &FreeNodeBufferData, nullptr) + .ToLocalChecked(); callback.Run(buffer); } else { callback.Run(v8::Null(isolate)); diff --git a/chromium_src/chrome/browser/printing/print_preview_message_handler.cc b/chromium_src/chrome/browser/printing/print_preview_message_handler.cc index d1f3660f8d2d..91a6c5167c4c 100644 --- a/chromium_src/chrome/browser/printing/print_preview_message_handler.cc +++ b/chromium_src/chrome/browser/printing/print_preview_message_handler.cc @@ -47,12 +47,15 @@ char* CopyPDFDataOnIOThread( new base::SharedMemory(params.metafile_data_handle, true)); if (!shared_buf->Map(params.data_size)) return nullptr; - char* memory_pdf_data = static_cast(shared_buf->memory()); char* pdf_data = new char[params.data_size]; - memcpy(pdf_data, memory_pdf_data, params.data_size); + memcpy(pdf_data, shared_buf->memory(), params.data_size); return pdf_data; } +void FreeNodeBufferData(char* data, void* hint) { + delete[] data; +} + } // namespace namespace printing { @@ -126,11 +129,12 @@ void PrintPreviewMessageHandler::RunPrintToPDFCallback( v8::HandleScope handle_scope(isolate); if (data) { v8::Local buffer = node::Buffer::New(isolate, - data, static_cast(data_size)).ToLocalChecked(); + data, static_cast(data_size), &FreeNodeBufferData, nullptr) + .ToLocalChecked(); print_to_pdf_callback_map_[request_id].Run(v8::Null(isolate), buffer); } else { v8::Local error_message = v8::String::NewFromUtf8(isolate, - "Fail to generate PDF"); + "Failed to generate PDF"); print_to_pdf_callback_map_[request_id].Run( v8::Exception::Error(error_message), v8::Null(isolate)); } From fb612075c440d8c06a597e102d8b80e20cf2c1a7 Mon Sep 17 00:00:00 2001 From: Amit Merchant Date: Mon, 3 Oct 2016 11:13:25 +0530 Subject: [PATCH 12/14] Update accessibility.md --- docs/tutorial/accessibility.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/accessibility.md b/docs/tutorial/accessibility.md index 60d48a99edee..22b9704bdb47 100644 --- a/docs/tutorial/accessibility.md +++ b/docs/tutorial/accessibility.md @@ -24,7 +24,7 @@ You can read more about this feature in [Spectron's documentation](https://githu ### Devtron -In Devtron there is a new accessibility tab which will allow you to audit a page in your app, sort and filter the results. +In Devtron, there is a new accessibility tab which will allow you to audit a page in your app, sort and filter the results. ![devtron screenshot](https://cloud.githubusercontent.com/assets/1305617/17156618/9f9bcd72-533f-11e6-880d-389115f40a2a.png) From 5d1c626a53bbb83ce92d1dab567c32de1a844332 Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Mon, 3 Oct 2016 01:54:07 -0400 Subject: [PATCH 13/14] Fix webContents.findInPage links in docs --- docs-translations/ko-KR/api/web-contents.md | 5 +++-- docs-translations/zh-CN/api/web-contents.md | 5 +++-- docs/api/web-contents.md | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/docs-translations/ko-KR/api/web-contents.md b/docs-translations/ko-KR/api/web-contents.md index ed2b75fe69bb..8fbf8907ae0d 100644 --- a/docs-translations/ko-KR/api/web-contents.md +++ b/docs-translations/ko-KR/api/web-contents.md @@ -309,7 +309,7 @@ Returns: * `matches` Integer (optional) - 일치하는 개수. * `selectionArea` Object (optional) - 첫 일치 부위의 좌표. -[`webContents.findInPage`](web-contents.md#webcontentsfindinpage) 요청의 결과를 +[`webContents.findInPage`] 요청의 결과를 사용할 수 있을 때 발생하는 이벤트입니다. #### Event: 'media-started-playing' @@ -755,7 +755,7 @@ CSS 코드를 현재 웹 페이지에 삽입합니다. #### `contents.stopFindInPage(action)` -* `action` String - [`webContents.findInPage`](web-contents.md#webcontentfindinpage) +* `action` String - [`webContents.findInPage`] 요청이 종료되었을 때 일어날 수 있는 작업을 지정합니다. * `clearSelection` - 선택을 취소합니다. * `keepSelection` - 선택을 일반 선택으로 변경합니다. @@ -1235,3 +1235,4 @@ win.webContents.debugger.sendCommand('Network.enable') 디버깅 타겟이 관련 이벤트를 발생시킬 때 마다 발생하는 이벤트입니다. [rdp]: https://developer.chrome.com/devtools/docs/debugger-protocol +[`webContents.findInPage`]: web-contents.md#contentsfindinpagetext-options diff --git a/docs-translations/zh-CN/api/web-contents.md b/docs-translations/zh-CN/api/web-contents.md index 3b27e2376f5c..658e7e5cd9d0 100644 --- a/docs-translations/zh-CN/api/web-contents.md +++ b/docs-translations/zh-CN/api/web-contents.md @@ -248,7 +248,7 @@ var webContents = win.webContents; * `matches` Integer (可选) - 匹配数量. * `selectionArea` Object (可选) - 协调首个匹配位置. -当使用 [`webContents.findInPage`](web-contents.md#webcontentsfindinpage) 进行页内查找并且找到可用值得时候发出事件. +当使用 [`webContents.findInPage`] 进行页内查找并且找到可用值得时候发出事件. ### Event: 'media-started-playing' @@ -499,7 +499,7 @@ var currentURL = win.webContents.getURL(); ### `webContents.stopFindInPage(action)` * `action` String - 指定一个行为来接替停止 - [`webContents.findInPage`](web-contents.md#webcontentfindinpage) 请求. + [`webContents.findInPage`] 请求. * `clearSelection` - 转变为一个普通的 selection. * `keepSelection` - 清除 selection. * `activateSelection` - 获取焦点并点击 selection node. @@ -862,3 +862,4 @@ win.webContents.debugger.sendCommand("Network.enable"); 每当调试目标发出事件时发出. [rdp]: https://developer.chrome.com/devtools/docs/debugger-protocol +[`webContents.findInPage`]: web-contents.md#webcontentsfindinpagetext-options diff --git a/docs/api/web-contents.md b/docs/api/web-contents.md index 2fdc499b2bbc..2a9664f747c1 100644 --- a/docs/api/web-contents.md +++ b/docs/api/web-contents.md @@ -312,7 +312,7 @@ Returns: * `selectionArea` Object - Coordinates of first match region. Emitted when a result is available for -[`webContents.findInPage`](web-contents.md#webcontentsfindinpage) request. +[`webContents.findInPage`] request. #### Event: 'media-started-playing' @@ -775,7 +775,7 @@ the request can be obtained by subscribing to #### `contents.stopFindInPage(action)` * `action` String - Specifies the action to take place when ending - [`webContents.findInPage`](web-contents.md#webcontentfindinpage) request. + [`webContents.findInPage`] request. * `clearSelection` - Clear the selection. * `keepSelection` - Translate the selection into a normal selection. * `activateSelection` - Focus and click the selection node. @@ -1261,3 +1261,4 @@ Emitted when debugging session is terminated. This happens either when Emitted whenever debugging target issues instrumentation event. [rdp]: https://developer.chrome.com/devtools/docs/debugger-protocol +[`webContents.findInPage`]: web-contents.md#contentsfindinpagetext-options From 4d8c1c61a583f3c3154ac3dbbfe8d6e03ddd6e3f Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 3 Oct 2016 20:41:52 +0900 Subject: [PATCH 14/14] Revert "Fix for issues seen on frameless window (Windows) when at 200% resolution" --- atom/browser/native_window_views.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc index 0738bf825243..bd2371307843 100644 --- a/atom/browser/native_window_views.cc +++ b/atom/browser/native_window_views.cc @@ -1155,6 +1155,9 @@ void NativeWindowViews::OnWidgetMove() { gfx::Rect NativeWindowViews::ContentBoundsToWindowBounds( const gfx::Rect& bounds) { + if (!has_frame()) + return bounds; + gfx::Rect window_bounds(bounds); #if defined(OS_WIN) HWND hwnd = GetAcceleratedWidget(); @@ -1164,7 +1167,7 @@ gfx::Rect NativeWindowViews::ContentBoundsToWindowBounds( window_->non_client_view()->GetWindowBoundsForClientBounds(dpi_bounds)); #endif - if (has_frame() && menu_bar_ && menu_bar_visible_) { + if (menu_bar_ && menu_bar_visible_) { window_bounds.set_y(window_bounds.y() - kMenuBarHeight); window_bounds.set_height(window_bounds.height() + kMenuBarHeight); } @@ -1173,6 +1176,9 @@ gfx::Rect NativeWindowViews::ContentBoundsToWindowBounds( gfx::Rect NativeWindowViews::WindowBoundsToContentBounds( const gfx::Rect& bounds) { + if (!has_frame()) + return bounds; + gfx::Rect content_bounds(bounds); #if defined(OS_WIN) HWND hwnd = GetAcceleratedWidget(); @@ -1189,7 +1195,7 @@ gfx::Rect NativeWindowViews::WindowBoundsToContentBounds( display::win::ScreenWin::ScreenToDIPSize(hwnd, content_bounds.size())); #endif - if (has_frame() && menu_bar_ && menu_bar_visible_) { + if (menu_bar_ && menu_bar_visible_) { content_bounds.set_y(content_bounds.y() + kMenuBarHeight); content_bounds.set_height(content_bounds.height() - kMenuBarHeight); }