Merge "Merge remote-tracking branch 'origin/14.0'"

This commit is contained in:
The Qt Project
2024-09-02 12:45:16 +00:00
16 changed files with 344 additions and 179 deletions

View File

@@ -22,10 +22,12 @@
Qt versions and compilers by adding the paths to them and by creating Qt versions and compilers by adding the paths to them and by creating
\l{Kits}{kits} that use them. \l{Kits}{kits} that use them.
To make \QC behave more like your favorite code editor or IDE, To make \QC behave more like your favorite code editor or IDE, change the
change the preferences for keyboard shortcuts, color schemes, generic preferences for generic highlighting, code snippets, and version control
highlighting, code snippets, and version control systems. Manage plugins systems. Manage plugins to turn on and off \QC features.
to turn on and off \QC features.
To make \QC more accessible, use keyboard navigation or adjust colors and
zoom levels.
The following sections summarize the options that you have and point you to The following sections summarize the options that you have and point you to
detailed information to help you specify any required settings and to make detailed information to help you specify any required settings and to make
@@ -69,41 +71,6 @@
For more information, see \l{Manage Kits}{How To: Manage Kits} and For more information, see \l{Manage Kits}{How To: Manage Kits} and
\l{Develop for Devices}{How To: Develop for Devices}. \l{Develop for Devices}{How To: Develop for Devices}.
\section1 Changing Keyboard Shortcuts
You can use \QC with your favorite keyboard shortcuts.
To view and edit all keyboard shortcuts defined in \QC, go to \preferences >
\uicontrol Environment > \uicontrol Keyboard. For more information, see
\l{Keyboard Shortcuts}.
\section1 Changing Color Schemes
Themes set the appearance of the \QC UI: widgets, colors, and icons.
To switch themes, go to \preferences > \uicontrol Environment >
\uicontrol Interface and select a theme in \uicontrol Theme.
Use the \QC text and code editors with your favorite color scheme that sets
highlighting of code elements and the background color. Select one of the
predefined color schemes or create custom ones. The color schemes apply to
highlighting C++ files, QML files, and generic files.
To change the color scheme, go to \preferences >
\uicontrol {Text Editor} > \uicontrol {Font & Colors}.
For more information, see \l{Change editor colors}.
\l{https://api.kde.org/frameworks/syntax-highlighting/html/index.html}
{KSyntaxHighlighting} offers generic highlighting. It is the syntax
highlighting engine for Kate syntax definitions. \QC comes with most of
the commonly used syntax files, and you can download additional files.
To download and use highlight definition files, go to \preferences >
\uicontrol {Text Editor} > \uicontrol {Generic Highlighter}.
For more information, see \l{Download highlight definitions}.
\section1 Adding Your Own Code Snippets \section1 Adding Your Own Code Snippets
As you write code, \QC suggests properties, IDs, and code snippets to As you write code, \QC suggests properties, IDs, and code snippets to
@@ -144,5 +111,72 @@
To install plugins, go to \uicontrol Help > \uicontrol {About Plugins} and To install plugins, go to \uicontrol Help > \uicontrol {About Plugins} and
select \uicontrol {Install Plugins}. select \uicontrol {Install Plugins}.
\section1 Accessibility
You can use keyboard shortcuts to navigate the UI without a mouse, or set
zoom levels and change colors to improve the visibility of the text. Also,
\QC supports screen readers.
\section2 Changing Keyboard Shortcuts
You can use \QC with your favorite keyboard shortcuts.
To view and edit all keyboard shortcuts defined in \QC, go to \preferences >
\uicontrol Environment > \uicontrol Keyboard. For more information, see
\l{Keyboard Shortcuts}.
\section2 Navigating with the Keyboard
To move between UI controls, press the the \key Tab key or the \key Left,
\key Right, \key Up, and \key Down arrow keys.
\section2 Setting Zoom Levels
To set editor font and colors, select \preferences >
\uicontrol {Text Editor} > \uicontrol {Font & Colors}.
Select the font family and size, and set the zoom level in percentage for
viewing the text or use keyboard shortcuts or the mouse wheel to zoom in or
out.
To improve the readability of text in the editor, adjust the line spacing.
For more information, see \l{Font & Colors}.
The system configuration determines the font sizes in other parts of \QC.
When viewing output, use the \inlineimage icons/plus.png {Plus button} and
\inlineimage icons/minus.png {Minus button} buttons or keyboard shortcuts to
set the zoom level.
For more information, see \l{View output}.
\section2 Changing Color Schemes
Themes set the appearance of the \QC UI: widgets, colors, and icons.
To switch themes, go to \preferences > \uicontrol Environment >
\uicontrol Interface and select a theme in \uicontrol Theme.
Use the \QC text and code editors with your favorite color scheme that sets
highlighting of code elements and the background color. Select one of the
predefined color schemes or create custom ones. The color schemes apply to
highlighting C++ files, QML files, and generic files.
To change the color scheme, go to \preferences >
\uicontrol {Text Editor} > \uicontrol {Font & Colors}.
For more information, see \l{Change editor colors}.
\l{https://api.kde.org/frameworks/syntax-highlighting/html/index.html}
{KSyntaxHighlighting} offers generic highlighting. It is the syntax
highlighting engine for Kate syntax definitions. \QC comes with most of
the commonly used syntax files, and you can download additional files.
To download and use highlight definition files, go to \preferences >
\uicontrol {Text Editor} > \uicontrol {Generic Highlighter}.
For more information, see \l{Download highlight definitions}.
\sa {Installation}, {Reset \QC settings}, {Preferences} \sa {Installation}, {Reset \QC settings}, {Preferences}
*/ */

View File

@@ -5373,7 +5373,8 @@ Erreur :
</message> </message>
<message> <message>
<source>Axis</source> <source>Axis</source>
<translation></translation> <translatorcomment>Peut être au pluriel ?</translatorcomment>
<translation>Axe</translation>
</message> </message>
<message> <message>
<source>Threshold</source> <source>Threshold</source>
@@ -6184,10 +6185,6 @@ est en cours.</translation>
</context> </context>
<context> <context>
<name>QKeychain::JobPrivate</name> <name>QKeychain::JobPrivate</name>
<message>
<source>Unknown error</source>
<translation>Erreur inconnue</translation>
</message>
<message> <message>
<source>Access to keychain denied</source> <source>Access to keychain denied</source>
<translatorcomment>keychain ?</translatorcomment> <translatorcomment>keychain ?</translatorcomment>
@@ -6345,46 +6342,6 @@ Do you want to edit this effect?</source>
<translation>Assurez-vous de l&apos;avoir sauvegardé dans le compositeur d&apos;effet. <translation>Assurez-vous de l&apos;avoir sauvegardé dans le compositeur d&apos;effet.
Souhaitez-vous éditer cet effet&#xa0;?</translation> Souhaitez-vous éditer cet effet&#xa0;?</translation>
</message> </message>
<message>
<source>Access to keychain denied</source>
<translation>Accès au porte-clés refusé</translation>
</message>
<message>
<source>No keyring daemon</source>
<translation>Aucun démon de trousseau disponible</translation>
</message>
<message>
<source>Already unlocked</source>
<translation>Déjà déverrouillé</translation>
</message>
<message>
<source>No such keyring</source>
<translation>Aucun trousseau de ce type</translation>
</message>
<message>
<source>Bad arguments</source>
<translation>Arguments incorrects</translation>
</message>
<message>
<source>I/O error</source>
<translation>Erreur d&apos;E/S</translation>
</message>
<message>
<source>Cancelled</source>
<translation>Annulé</translation>
</message>
<message>
<source>Keyring already exists</source>
<translation>Le trousseau existe déjà</translation>
</message>
<message>
<source>No match</source>
<translation>Aucun résultat</translation>
</message>
<message>
<source>Unknown error</source>
<translation>Erreur inconnue</translation>
</message>
<message> <message>
<source>Entry not found</source> <source>Entry not found</source>
<translation>Entrée introuvable</translation> <translation>Entrée introuvable</translation>
@@ -12958,7 +12915,7 @@ Exécutable&#xa0;: %2</translation>
</message> </message>
<message> <message>
<source>Stop on failure</source> <source>Stop on failure</source>
<translation>Arrêt sur échec</translation> <translation>Arrêter sur échec</translation>
</message> </message>
<message> <message>
<source>Run tests in parallel mode using given number of jobs.</source> <source>Run tests in parallel mode using given number of jobs.</source>
@@ -13204,7 +13161,7 @@ Voir la documentation de Google Test pour plus d&apos;informations sur les filtr
</message> </message>
<message> <message>
<source>Event counter</source> <source>Event counter</source>
<translation>Compteurd&apos;événements</translation> <translation>Compteur d&apos;événements</translation>
</message> </message>
<message> <message>
<source>Uses event counter when executing benchmarks.</source> <source>Uses event counter when executing benchmarks.</source>
@@ -15659,11 +15616,11 @@ Par exemple, «&#xa0;Revision&#xa0;: 15&#xa0;» laissera la branche à la révis
</message> </message>
<message> <message>
<source>CMake arguments:</source> <source>CMake arguments:</source>
<translation>Arguments de Cmake :</translation> <translation>Arguments de CMake&#xa0;:</translation>
</message> </message>
<message> <message>
<source>Tool arguments:</source> <source>Tool arguments:</source>
<translation>Arguments de loutil :</translation> <translation>Arguments de l&apos;outil&#xa0;:</translation>
</message> </message>
<message> <message>
<source>Stage for installation</source> <source>Stage for installation</source>
@@ -16048,7 +16005,7 @@ Par exemple, «&#xa0;Revision&#xa0;: 15&#xa0;» laissera la branche à la révis
</message> </message>
<message> <message>
<source>CMake generator defines how a project is built when using CMake.&lt;br&gt;This setting is ignored when using other build systems.</source> <source>CMake generator defines how a project is built when using CMake.&lt;br&gt;This setting is ignored when using other build systems.</source>
<translation></translation> <translation>Le générateur CMake définit comment le projet est compilé par CMake.&lt;br&gt;Ce paramètre est ignoré lors de l&apos;utilisation d&apos;un autre système de compilation.</translation>
</message> </message>
<message> <message>
<source>CMake Tool is unconfigured, CMake generator will be ignored.</source> <source>CMake Tool is unconfigured, CMake generator will be ignored.</source>
@@ -17818,8 +17775,8 @@ Définissez dabord un exécutable valide.</translation>
</message> </message>
<message> <message>
<source>Class View</source> <source>Class View</source>
<translatorcomment>Ou est-ce un rapport avec la Vue ? (graphics/view)</translatorcomment> <translatorcomment>Ce texte est affiché dans le combobox du panneau de gauche ( l&apos;on affiche la hiérarchie du projets ou le système de fichiers). Peut être que &quot;symboles&quot; aurait plus sa place, sachant que ce mode affiche une liste des classes et les symboles définis par ces classes.</translatorcomment>
<translation>Affichage de la classe</translation> <translation>Classes</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -20315,7 +20272,8 @@ provided they were unmodified before the refactoring.</source>
</message> </message>
<message> <message>
<source>Whole words o&amp;nly</source> <source>Whole words o&amp;nly</source>
<translation>&amp;Mots complets uniquement</translation> <translatorcomment>On trouve, plus couramment, l&apos;expression &quot;Mots entiers&quot;</translatorcomment>
<translation>&amp;Mots entiers uniquement</translation>
</message> </message>
<message> <message>
<source>Use re&amp;gular expressions</source> <source>Use re&amp;gular expressions</source>
@@ -20403,7 +20361,7 @@ provided they were unmodified before the refactoring.</source>
</message> </message>
<message> <message>
<source>Whole Words Only</source> <source>Whole Words Only</source>
<translation>Mots complets uniquement</translation> <translation>Mots entiers uniquement</translation>
</message> </message>
<message> <message>
<source>Use Regular Expressions</source> <source>Use Regular Expressions</source>
@@ -20696,7 +20654,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t
</message> </message>
<message> <message>
<source>&lt;html&gt;&lt;body style=&quot;color:#909090; font-size:14px&quot;&gt;&lt;div align=&apos;center&apos;&gt;&lt;div style=&quot;font-size:20px&quot;&gt;Open a document&lt;/div&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;hr/&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; File &gt; Open File or Project (%1)&lt;/div&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; File &gt; Recent Files&lt;/div&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; Tools &gt; Locate (%2) and&lt;/div&gt;&lt;div style=&quot;margin-left: 1em&quot;&gt;- type to open file from any open project&lt;/div&gt;%4%5&lt;div style=&quot;margin-left: 1em&quot;&gt;- type &lt;code&gt;%3&amp;lt;space&amp;gt;&amp;lt;filename&amp;gt;&lt;/code&gt; to open file from file system&lt;/div&gt;&lt;div style=&quot;margin-left: 1em&quot;&gt;- select one of the other filters for jumping to a location&lt;/div&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; Drag and drop files here&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;</source> <source>&lt;html&gt;&lt;body style=&quot;color:#909090; font-size:14px&quot;&gt;&lt;div align=&apos;center&apos;&gt;&lt;div style=&quot;font-size:20px&quot;&gt;Open a document&lt;/div&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;hr/&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; File &gt; Open File or Project (%1)&lt;/div&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; File &gt; Recent Files&lt;/div&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; Tools &gt; Locate (%2) and&lt;/div&gt;&lt;div style=&quot;margin-left: 1em&quot;&gt;- type to open file from any open project&lt;/div&gt;%4%5&lt;div style=&quot;margin-left: 1em&quot;&gt;- type &lt;code&gt;%3&amp;lt;space&amp;gt;&amp;lt;filename&amp;gt;&lt;/code&gt; to open file from file system&lt;/div&gt;&lt;div style=&quot;margin-left: 1em&quot;&gt;- select one of the other filters for jumping to a location&lt;/div&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; Drag and drop files here&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;body style=&quot;color:#909090; font-size:14px&quot;&gt;&lt;div align=&apos;center&apos;&gt;&lt;div style=&quot;font-size:20px&quot;&gt;Ouvrir un document&lt;/div&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;hr/&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; Fichier&gt; Ouvrir un fichier ou un projet (%1)&lt;/div&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; Fichier &gt; Fichiers récents&lt;/div&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; Outils &gt; Localiser (%2) et&lt;/div&gt;&lt;div style=&quot;margin-left: 1em&quot;&gt;- taper pour ouvrir un fichier à partir de nimporte quel projet ouvert&lt;/div&gt;%4%5&lt;div style=&quot;margin-left: 1em&quot;&gt;- saisir &lt;code&gt;%3&amp;lt;espace&amp;gt;&amp;lt;nom du fichier&amp;gt;&lt;/code&gt; pour ouvrir le fichier à partir du système de fichiers&lt;/div&gt;&lt;div style=&quot;margin-left: 1em&quot;&gt;- sélectionner lun des autres filtres pour accéder à un emplacement donné&lt;/div&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; Glisser-déposer des fichiers ici&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;</translation> <translation>&lt;html&gt;&lt;body style=&quot;color:#909090; font-size:14px&quot;&gt;&lt;div align=&apos;center&apos;&gt;&lt;div style=&quot;font-size:20px&quot;&gt;Ouvrir un document&lt;/div&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;hr/&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; Fichier &gt; Ouvrir un fichier ou un projet (%1)&lt;/div&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; Fichier &gt; Fichiers récents&lt;/div&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; Outils &gt; Localiser (%2) et&lt;/div&gt;&lt;div style=&quot;margin-left: 1em&quot;&gt;- taper pour ouvrir un fichier à partir de nimporte quel projet ouvert&lt;/div&gt;%4%5&lt;div style=&quot;margin-left: 1em&quot;&gt;- saisir &lt;code&gt;%3&amp;lt;espace&amp;gt;&amp;lt;nom du fichier&amp;gt;&lt;/code&gt; pour ouvrir le fichier à partir du système de fichiers&lt;/div&gt;&lt;div style=&quot;margin-left: 1em&quot;&gt;- sélectionner lun des autres filtres pour accéder à un emplacement donné&lt;/div&gt;&lt;div style=&quot;margin-top: 5px&quot;&gt;&amp;bull; Glisser-déposer des fichiers ici&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<source>&lt;div style=&quot;margin-left: 1em&quot;&gt;- type &lt;code&gt;%1&amp;lt;space&amp;gt;&amp;lt;pattern&amp;gt;&lt;/code&gt; to jump to a class definition&lt;/div&gt;</source> <source>&lt;div style=&quot;margin-left: 1em&quot;&gt;- type &lt;code&gt;%1&amp;lt;space&amp;gt;&amp;lt;pattern&amp;gt;&lt;/code&gt; to jump to a class definition&lt;/div&gt;</source>
@@ -21214,8 +21172,8 @@ To do this, you type this shortcut and a space in the Locator entry field, and t
<translation>Type</translation> <translation>Type</translation>
</message> </message>
<message> <message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;MIME magic data is interpreted as defined by the Shared MIME-info Database specification from &lt;a href=&quot;http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html&quot;&gt;freedesktop.org&lt;/a&gt;.&lt;hr/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;MIME magic data is interpreted as defined by the Shared MIME-info Database specification from &lt;a href=&quot;https://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec/&quot;&gt;freedesktop.org&lt;/a&gt;.&lt;hr/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Les données magiques MIME sont interprétées conformément à la spécification de la base de données partagée dinformations MIME de &lt;a href=&quot;http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html&quot;&gt;freedesktop.org&lt;/a&gt;.&lt;hr/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation> <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Les données magiques MIME sont interprétées conformément à la spécification de la base de données partagée dinformations MIME fournie par &lt;a href=&quot;https://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec/&quot;&gt;freedesktop.org&lt;/a&gt;.&lt;hr/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<source>String</source> <source>String</source>
@@ -23862,7 +23820,7 @@ Ces préfixes sont utilisés en complément au répertoire actuel pour basculer
</message> </message>
<message> <message>
<source>Switch Between Function Declaration/Definition</source> <source>Switch Between Function Declaration/Definition</source>
<translation>Changer entre la définition et déclaration de la fonction</translation> <translation>Changer entre la définition et la déclaration de la fonction</translation>
</message> </message>
<message> <message>
<source>Open Function Declaration/Definition in Next Split</source> <source>Open Function Declaration/Definition in Next Split</source>
@@ -26804,7 +26762,8 @@ Il peut vous être demandé de partager le contenu de ce journal lorsque vous si
</message> </message>
<message> <message>
<source>Global Debugger &amp;Log</source> <source>Global Debugger &amp;Log</source>
<translation>&amp;Journal du débogueur général</translation> <translatorcomment>Je pense que &quot;Global&quot; se réfère au log et non au débogueur.</translatorcomment>
<translation>&amp;Journal général du débogueur</translation>
</message> </message>
<message> <message>
<source>Reload Debugging Helpers</source> <source>Reload Debugging Helpers</source>
@@ -27195,7 +27154,7 @@ Il peut vous être demandé de partager le contenu de ce journal lorsque vous si
</message> </message>
<message> <message>
<source>Start and Break on Main</source> <source>Start and Break on Main</source>
<translation>Démarrer et sarrêter sur le Main</translation> <translation>Démarrer et s&apos;arrêter sur la fonction Main</translation>
</message> </message>
<message> <message>
<source>DAP</source> <source>DAP</source>
@@ -27344,7 +27303,8 @@ Il peut vous être demandé de partager le contenu de ce journal lorsque vous si
</message> </message>
<message> <message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;You are trying to run the tool &quot;%1&quot; on an application in %2 mode. The tool is designed to be used %3.&lt;/p&gt;&lt;p&gt;Run-time characteristics differ significantly between optimized and non-optimized binaries. Analytical findings for one mode may or may not be relevant for the other.&lt;/p&gt;&lt;p&gt;Running tools that need debug symbols on binaries that don&apos;t provide any may lead to missing function names or otherwise insufficient output.&lt;/p&gt;&lt;p&gt;Do you want to continue and run the tool in %2 mode?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;You are trying to run the tool &quot;%1&quot; on an application in %2 mode. The tool is designed to be used %3.&lt;/p&gt;&lt;p&gt;Run-time characteristics differ significantly between optimized and non-optimized binaries. Analytical findings for one mode may or may not be relevant for the other.&lt;/p&gt;&lt;p&gt;Running tools that need debug symbols on binaries that don&apos;t provide any may lead to missing function names or otherwise insufficient output.&lt;/p&gt;&lt;p&gt;Do you want to continue and run the tool in %2 mode?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Vous essayez dexécuter loutil «&#xa0;%1&#xa0;» sur une application en mode %2. Loutil est conçu pour être utilisé en mode %3.&lt;/p&gt;&lt;p&gt;Les caractéristiques dexécution diffèrent considérablement entre les binaires optimisés et non optimisés. Lexécution doutils nécessitant des symboles de débogage sur des binaires qui nen fournissent pas peut conduire à des noms de fonctions manquants ou à des résultats insuffisants.&lt;/p&gt;&lt;p&gt;Voulez-vous continuer et exécuter loutil en mode %2&#xa0;?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation> <translatorcomment>%3 est remplacé par la chaîne précédente (on optimized code...)</translatorcomment>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Vous essayez d&apos;exécuter l&apos;outil «&#xa0;%1&#xa0;» sur une application en mode %2. L&apos;outil est conçu pour être utilisé %3.&lt;/p&gt;&lt;p&gt;Les caractéristiques d&apos;exécution diffèrent considérablement entre les binaires optimisés et non optimisés. L&apos;exécution d&apos;outils nécessitant des symboles de débogage sur des binaires qui n&apos;en fournissent pas peut conduire à des noms de fonctions manquants ou à des résultats insuffisants.&lt;/p&gt;&lt;p&gt;Voulez-vous continuer et exécuter l&apos;outil en mode %2&#xa0;?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<source>Start</source> <source>Start</source>
@@ -30909,7 +30869,7 @@ Raison : %3</translation>
</message> </message>
<message> <message>
<source>Plugin Emulation</source> <source>Plugin Emulation</source>
<translation>Émulation de plug-in</translation> <translation>Émulation de greffon</translation>
</message> </message>
<message> <message>
<source>Use smartcase</source> <source>Use smartcase</source>
@@ -30917,7 +30877,7 @@ Raison : %3</translation>
</message> </message>
<message> <message>
<source>Use wrapscan</source> <source>Use wrapscan</source>
<translation>Utiliser recherche circulaire</translation> <translation>Utiliser la recherche circulaire</translation>
</message> </message>
<message> <message>
<source>Use ignorecase</source> <source>Use ignorecase</source>
@@ -32712,7 +32672,7 @@ Valider maintenant&#xa0;?</translation>
</message> </message>
<message> <message>
<source>Manage Remotes...</source> <source>Manage Remotes...</source>
<translation></translation> <translation>Gérer les dépôts distants</translation>
</message> </message>
<message> <message>
<source>Git &amp;Tools</source> <source>Git &amp;Tools</source>
@@ -41850,7 +41810,7 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l&apos;application, si d
</message> </message>
<message> <message>
<source>Nim Script File</source> <source>Nim Script File</source>
<translation></translation> <translation>Fichier de script Nim</translation>
</message> </message>
<message> <message>
<source>Creates an empty Nim file using UTF-8 charset.</source> <source>Creates an empty Nim file using UTF-8 charset.</source>
@@ -43467,7 +43427,8 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u
</message> </message>
<message> <message>
<source>Standard error</source> <source>Standard error</source>
<translation>Sortie erreur (stderr)</translation> <translatorcomment>A revoir -&gt; Sortie d&apos;erreur</translatorcomment>
<translation>Sortie d&apos;erreur (stderr)</translation>
</message> </message>
<message> <message>
<source>E&amp;rror message:</source> <source>E&amp;rror message:</source>
@@ -43926,7 +43887,7 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u
</message> </message>
<message> <message>
<source>Files in All Project Directories:</source> <source>Files in All Project Directories:</source>
<translation>Fichiers dans tous les répertoires du projet :</translation> <translation>Fichiers dans tous les répertoires du projet&#xa0;:</translation>
</message> </message>
<message> <message>
<source>Setting</source> <source>Setting</source>
@@ -55011,7 +54972,8 @@ Ne sapplique pas aux espaces blancs dans les commentaires et dans les chaîne
</message> </message>
<message> <message>
<source>Underline</source> <source>Underline</source>
<translation></translation> <translatorcomment>Vu dans LibreOffice</translatorcomment>
<translation>Soulignage</translation>
</message> </message>
<message> <message>
<source>Color:</source> <source>Color:</source>
@@ -57242,7 +57204,7 @@ dans «&#xa0;%2&#xa0;».
</message> </message>
<message> <message>
<source>Show %1 Column</source> <source>Show %1 Column</source>
<translation></translation> <translation>Afficher la colonne «&#xa0;%1&#xa0;»</translation>
</message> </message>
<message> <message>
<source>No clangd executable specified.</source> <source>No clangd executable specified.</source>
@@ -57272,7 +57234,7 @@ dans «&#xa0;%2&#xa0;».
</message> </message>
<message> <message>
<source>Error while trying to copy file: %1</source> <source>Error while trying to copy file: %1</source>
<translation></translation> <translation>Erreur lors de la copie du fichier&#xa0;: %1</translation>
</message> </message>
<message> <message>
<source>Could not copy file: %1</source> <source>Could not copy file: %1</source>
@@ -57441,7 +57403,7 @@ Pour définir ou changer une variable, utilisez VARIABLE=VALEUR.
Pour désactiver une variable, préfixez la ligne avec le caractère «&#xa0;#&#xa0;». Pour désactiver une variable, préfixez la ligne avec le caractère «&#xa0;#&#xa0;».
Pour suffixer une variable, utilisez VARIABLE+=VALEUR. Pour suffixer une variable, utilisez VARIABLE+=VALEUR.
Pour préfixer une variable, utilisez VARIABLE=+VALEUR. Pour préfixer une variable, utilisez VARIABLE=+VALEUR.
Les variables existantes peuvent être référencées dans une VALEUR avec ${OTHER}. Les variables existantes peuvent être référencées dans une VALEUR avec ${AUTRE}.
Pour effacer une variable, placez son nom sur une ligne avec rien d&apos;autre sur celle-ci. Pour effacer une variable, placez son nom sur une ligne avec rien d&apos;autre sur celle-ci.
Les lignes débutant avec «&#xa0;###&#xa0;» seront traitées comme commentaires.</translation> Les lignes débutant avec «&#xa0;###&#xa0;» seront traitées comme commentaires.</translation>
</message> </message>
@@ -57754,7 +57716,7 @@ Les lignes débutant avec «&#xa0;###&#xa0;» seront traitées comme commentaire
</message> </message>
<message> <message>
<source>Backtrace frame count:</source> <source>Backtrace frame count:</source>
<translation>Backtracer le nombre de trames :</translation> <translation>Nombre de trames à remonter&#xa0;:</translation>
</message> </message>
<message> <message>
<source>Suppression files:</source> <source>Suppression files:</source>
@@ -57906,7 +57868,7 @@ Avec la simulation du cache, dautres compteurs dévènements sont activés
</message> </message>
<message> <message>
<source>Check for leaks on finish:</source> <source>Check for leaks on finish:</source>
<translation>Vérification des fuites lorsque cest fini :</translation> <translation>Vérification des fuites à la fin&#xa0;:</translation>
</message> </message>
<message> <message>
<source>Summary Only</source> <source>Summary Only</source>
@@ -59205,7 +59167,7 @@ Vérifiez les paramètres pour vous assurer que Valgrind est installé et dispon
</message> </message>
<message> <message>
<source>Wrap submit message at:</source> <source>Wrap submit message at:</source>
<translation>Limiter la largeur du message à :</translation> <translation>Limiter la taille du message à&#xa0;:</translation>
</message> </message>
<message> <message>
<source> characters</source> <source> characters</source>
@@ -59550,7 +59512,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
</message> </message>
<message> <message>
<source>Mode Selector</source> <source>Mode Selector</source>
<translation></translation> <translation>Sélecteur de mode</translation>
</message> </message>
<message> <message>
<source>Select different modes depending on the task at hand.</source> <source>Select different modes depending on the task at hand.</source>
@@ -59558,7 +59520,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
</message> </message>
<message> <message>
<source>&lt;p style=&quot;margin-top: 30px&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;padding-right: 20px&quot;&gt;Welcome:&lt;/td&gt;&lt;td&gt;Open examples, tutorials, and recent sessions and projects.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Edit:&lt;/td&gt;&lt;td&gt;Work with code and navigate your project.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Design:&lt;/td&gt;&lt;td&gt;Visually edit Widget-based user interfaces, state charts and UML models.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Debug:&lt;/td&gt;&lt;td&gt;Analyze your application with a debugger or other analyzers.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Projects:&lt;/td&gt;&lt;td&gt;Manage project settings.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Help:&lt;/td&gt;&lt;td&gt;Browse the help database.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source> <source>&lt;p style=&quot;margin-top: 30px&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;padding-right: 20px&quot;&gt;Welcome:&lt;/td&gt;&lt;td&gt;Open examples, tutorials, and recent sessions and projects.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Edit:&lt;/td&gt;&lt;td&gt;Work with code and navigate your project.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Design:&lt;/td&gt;&lt;td&gt;Visually edit Widget-based user interfaces, state charts and UML models.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Debug:&lt;/td&gt;&lt;td&gt;Analyze your application with a debugger or other analyzers.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Projects:&lt;/td&gt;&lt;td&gt;Manage project settings.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Help:&lt;/td&gt;&lt;td&gt;Browse the help database.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
<translation>&lt;p style=&quot;margin-top: 30px&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;padding-right: 20px&quot;&gt;Accueil :&lt;/td&gt;&lt;td&gt;Ouvrez des exemples, des tutoriels et des sessions et projets récents.&lt;/td&gt;&lt;/tr&gt;&lt;td&gt;Modifier :&lt;/td&gt;&lt;td&gt;Travaillez avec le code et naviguez dans votre projet.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Design:&lt;/td&gt;&lt;td&gt;Modifiez visuellement des interfaces utilisateur basées sur des widgets, des diagrammes détat et des modèles UML. &lt;/td&gt;&lt;/tr&gt;&lt;ttr&gt;&lt;td&gt;Débogage :&lt;/td&gt;&lt;td&gt;Analysez votre application avec un débogueur ou dautres analyseurs.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Projets :&lt;/td&gt;&lt;td&gt;Gérez les paramètres du projet.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Aide :&lt;/td&gt;&lt;td&gt;Parcourez la base de données daide.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation> <translation>&lt;p style=&quot;margin-top: 30px&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;padding-right: 20px&quot;&gt;Accueil :&lt;/td&gt;&lt;td&gt;Ouvrez des exemples, des tutoriels et des sessions et projets récents.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Modifier&#xa0;:&lt;/td&gt;&lt;td&gt;Travaillez avec le code et naviguez dans votre projet.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Design&#xa0;:&lt;/td&gt;&lt;td&gt;Modifiez visuellement des interfaces utilisateur basées sur des widgets, des diagrammes d&apos;état et des modèles UML. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Débogage&#xa0;:&lt;/td&gt;&lt;td&gt;Analysez votre application avec un débogueur ou d&apos;autres analyseurs.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Projets&#xa0;:&lt;/td&gt;&lt;td&gt;Gérez les paramètres du projet.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Aide&#xa0;:&lt;/td&gt;&lt;td&gt;Parcourez la base de données d&apos;aide.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
</message> </message>
<message> <message>
<source>Kit Selector</source> <source>Kit Selector</source>
@@ -59590,7 +59552,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
</message> </message>
<message> <message>
<source>Build the active project.</source> <source>Build the active project.</source>
<translation>Compiler le projet actif.</translation> <translation>Compile le projet actif.</translation>
</message> </message>
<message> <message>
<source>Locator</source> <source>Locator</source>
@@ -59610,7 +59572,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
</message> </message>
<message> <message>
<source>Find compile and application output here, as well as a list of configuration and build issues, and the panel for global searches.</source> <source>Find compile and application output here, as well as a list of configuration and build issues, and the panel for global searches.</source>
<translation>Vous y trouverez les résultats de la compilation et de lapplication, ainsi quune liste des problèmes de configuration et de compilation, et le panneau des recherches générales.</translation> <translation>Vous y trouverez les résultats de la compilation et de l&apos;application, ainsi quune liste des problèmes de configuration et de compilation, ainsi que le panneau des recherches globales.</translation>
</message> </message>
<message> <message>
<source>Progress Indicator</source> <source>Progress Indicator</source>
@@ -59634,8 +59596,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
</message> </message>
<message> <message>
<source>You have now completed the UI tour. To learn more about the highlighted controls, see &lt;a style=&quot;color: #41CD52&quot; href=&quot;qthelp://org.qt-project.qtcreator/doc/creator-quick-tour.html&quot;&gt;User Interface&lt;/a&gt;.</source> <source>You have now completed the UI tour. To learn more about the highlighted controls, see &lt;a style=&quot;color: #41CD52&quot; href=&quot;qthelp://org.qt-project.qtcreator/doc/creator-quick-tour.html&quot;&gt;User Interface&lt;/a&gt;.</source>
<translation>Vous avez maintenant terminé la visite guidée de linterface utilisateur <translation>Vous avez maintenant terminé la visite guidée de l&apos;interface utilisateur. Pour en savoir plus sur les contrôles mis en évidence, consultez la page d&apos;aide concernant l&apos;&lt;a style=&quot;color: #41CD52&quot; href=&quot;qthelp://org.qt-project.qtcreator/doc/creator-quick-tour.html&quot;&gt;interface utilisateur&lt;/a&gt;.</translation>
Pour en savoir plus sur les contrôles mis en évidence, voir l&lt;a style=&quot;color: #41CD52&quot; href=&quot;qthelp://org.qt-project.qtcreator/doc/creator-quick-tour.html&quot;&gt;interface utilisateur&lt;/a&gt;.</translation>
</message> </message>
<message> <message>
<source>UI Introduction %1/%2 &gt;</source> <source>UI Introduction %1/%2 &gt;</source>
@@ -60869,7 +60830,7 @@ Elle est utilisée pour calculer la taille totale implicite.</translation>
</message> </message>
<message> <message>
<source>Current value of the Slider. The default value is 0.0.</source> <source>Current value of the Slider. The default value is 0.0.</source>
<translation></translation> <translation>Valeur actuelle du slider. La valeur par défaut est 0.0.</translation>
</message> </message>
<message> <message>
<source>Maximum value</source> <source>Maximum value</source>

View File

@@ -6818,7 +6818,8 @@ namespace sol {
static_assert(std::is_constructible<T, Args&&...>::value, "T must be constructible with Args"); static_assert(std::is_constructible<T, Args&&...>::value, "T must be constructible with Args");
*this = nullopt; *this = nullopt;
this->construct(std::forward<Args>(args)...); new (static_cast<void*>(this)) optional(std::in_place, std::forward<Args>(args)...);
return **this;
} }
/// Swaps this optional with the other. /// Swaps this optional with the other.

View File

@@ -15,6 +15,7 @@
#include "cmakespecificsettings.h" #include "cmakespecificsettings.h"
#include "cmaketoolmanager.h" #include "cmaketoolmanager.h"
#include "projecttreehelper.h" #include "projecttreehelper.h"
#include "targethelper.h"
#include <android/androidconstants.h> #include <android/androidconstants.h>
@@ -1031,6 +1032,11 @@ bool CMakeBuildSystem::renameFile(Node *context,
return false; return false;
} }
void CMakeBuildSystem::buildNamedTarget(const QString &target)
{
CMakeProjectManager::Internal::buildTarget(this, target);
}
FilePaths CMakeBuildSystem::filesGeneratedFrom(const FilePath &sourceFile) const FilePaths CMakeBuildSystem::filesGeneratedFrom(const FilePath &sourceFile) const
{ {
FilePath project = projectDirectory(); FilePath project = projectDirectory();

View File

@@ -64,6 +64,7 @@ public:
bool renameFile(ProjectExplorer::Node *context, bool renameFile(ProjectExplorer::Node *context,
const Utils::FilePath &oldFilePath, const Utils::FilePath &oldFilePath,
const Utils::FilePath &newFilePath) final; const Utils::FilePath &newFilePath) final;
void buildNamedTarget(const QString &target) final;
Utils::FilePaths filesGeneratedFrom(const Utils::FilePath &sourceFile) const final; Utils::FilePaths filesGeneratedFrom(const Utils::FilePath &sourceFile) const final;
QString name() const final { return QLatin1String("cmake"); } QString name() const final { return QLatin1String("cmake"); }

View File

@@ -23,7 +23,7 @@ using namespace Utils;
namespace CMakeProjectManager::Internal { namespace CMakeProjectManager::Internal {
using BuildAcceptor = std::function<void(const FilePath &, const QString &)>; using BuildAcceptor = std::function<void(const BuildSystem *, const QString &)>;
// CMakeBuildTargetFilter // CMakeBuildTargetFilter
@@ -62,8 +62,8 @@ static LocatorMatcherTasks cmakeMatchers(const BuildAcceptor &acceptor)
LocatorFilterEntry entry; LocatorFilterEntry entry;
entry.displayName = displayName; entry.displayName = displayName;
if (acceptor) { if (acceptor) {
entry.acceptor = [projectPath, displayName, acceptor] { entry.acceptor = [bs, displayName, acceptor] {
acceptor(projectPath, displayName); acceptor(bs, displayName);
return AcceptResult(); return AcceptResult();
}; };
} }

View File

@@ -4,34 +4,21 @@
#include "targethelper.h" #include "targethelper.h"
#include <projectexplorer/buildmanager.h> #include <projectexplorer/buildmanager.h>
#include <projectexplorer/buildsystem.h>
#include <projectexplorer/buildsteplist.h> #include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectmanager.h>
#include <projectexplorer/target.h>
#include <utils/algorithm.h>
#include "cmakebuildstep.h" #include "cmakebuildstep.h"
#include "cmakebuildsystem.h"
#include "cmakeproject.h"
namespace CMakeProjectManager { namespace CMakeProjectManager::Internal {
void buildTarget(const Utils::FilePath &projectPath, const QString &targetName) void buildTarget(const ProjectExplorer::BuildSystem *buildSystem, const QString &targetName)
{ {
// Get the project containing the target selected if (ProjectExplorer::BuildManager::isBuilding(buildSystem->project()))
const auto cmakeProject = qobject_cast<CMakeProject *>(Utils::findOrDefault(
ProjectExplorer::ProjectManager::projects(), [projectPath](ProjectExplorer::Project *p) {
return p->projectFilePath() == projectPath;
}));
if (!cmakeProject || !cmakeProject->activeTarget()
|| !cmakeProject->activeTarget()->activeBuildConfiguration())
return;
if (ProjectExplorer::BuildManager::isBuilding(cmakeProject))
ProjectExplorer::BuildManager::cancel(); ProjectExplorer::BuildManager::cancel();
// Find the make step // Find the make step
const ProjectExplorer::BuildStepList *buildStepList const ProjectExplorer::BuildStepList *buildStepList
= cmakeProject->activeTarget()->activeBuildConfiguration()->buildSteps(); = buildSystem->buildConfiguration()->buildSteps();
const auto buildStep = buildStepList->firstOfType<Internal::CMakeBuildStep>(); const auto buildStep = buildStepList->firstOfType<Internal::CMakeBuildStep>();
if (!buildStep) if (!buildStep)
return; return;
@@ -41,8 +28,8 @@ void buildTarget(const Utils::FilePath &projectPath, const QString &targetName)
buildStep->setBuildTargets({targetName}); buildStep->setBuildTargets({targetName});
// Build // Build
ProjectExplorer::BuildManager::buildProjectWithDependencies(cmakeProject); ProjectExplorer::BuildManager::buildProjectWithDependencies(buildSystem->project());
buildStep->setBuildTargets(oldTargets); buildStep->setBuildTargets(oldTargets);
} }
} // namespace CMakeProjectManager } // namespace CMakeProjectManager::Internal

View File

@@ -3,12 +3,12 @@
#pragma once #pragma once
#include "cmake_global.h" #include <QString>
#include <utils/filepath.h> namespace ProjectExplorer { class BuildSystem; }
namespace CMakeProjectManager { namespace CMakeProjectManager::Internal {
CMAKE_EXPORT void buildTarget(const Utils::FilePath &projectPath, const QString &targetName); void buildTarget(const ProjectExplorer::BuildSystem *buildSystem, const QString &targetName);
} // namespace CMakeProjectManager } // namespace CMakeProjectManager::Internal

View File

@@ -23,23 +23,118 @@ static inline QString msgCannotInterrupt(qint64 pid, const QString &why)
# define PROCESS_SUSPEND_RESUME (0x0800) # define PROCESS_SUSPEND_RESUME (0x0800)
#endif // PROCESS_SUSPEND_RESUME #endif // PROCESS_SUSPEND_RESUME
static BOOL isWow64Process(HANDLE hproc)
{
using LPFN_ISWOW64PROCESS = BOOL (WINAPI*)(HANDLE, PBOOL);
BOOL ret = false;
static LPFN_ISWOW64PROCESS fnIsWow64Process = NULL;
if (!fnIsWow64Process) {
if (HMODULE hModule = GetModuleHandle(L"kernel32.dll"))
fnIsWow64Process = reinterpret_cast<LPFN_ISWOW64PROCESS>(GetProcAddress(hModule, "IsWow64Process"));
}
if (!fnIsWow64Process) {
qWarning("Cannot retrieve symbol 'IsWow64Process'.");
return false;
}
if (!fnIsWow64Process(hproc, &ret)) {
qWarning("IsWow64Process() failed for %p: %s",
hproc, qPrintable(Utils::winErrorMessage(GetLastError())));
return false;
}
return ret;
}
// Open the process and break into it // Open the process and break into it
bool Debugger::Internal::interruptProcess(qint64 pID, QString *errorMessage) bool Debugger::Internal::interruptProcess(qint64 pID, QString *errorMessage)
{ {
bool ok = false; bool ok = false;
HANDLE inferior = NULL; HANDLE inferior = NULL;
const DWORD rights = PROCESS_QUERY_INFORMATION | PROCESS_SET_INFORMATION | PROCESS_VM_OPERATION do {
| PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_DUP_HANDLE const DWORD rights = PROCESS_QUERY_INFORMATION|PROCESS_SET_INFORMATION
| PROCESS_TERMINATE | PROCESS_CREATE_THREAD | PROCESS_SUSPEND_RESUME; |PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ
inferior = OpenProcess(rights, FALSE, DWORD(pID)); |PROCESS_DUP_HANDLE|PROCESS_TERMINATE|PROCESS_CREATE_THREAD|PROCESS_SUSPEND_RESUME;
if (inferior == NULL) { inferior = OpenProcess(rights, FALSE, DWORD(pID));
*errorMessage = QString::fromLatin1("Cannot open process %1: %2") if (inferior == NULL) {
.arg(pID) *errorMessage = QString::fromLatin1("Cannot open process %1: %2").
.arg(Utils::winErrorMessage(GetLastError())); arg(pID).arg(Utils::winErrorMessage(GetLastError()));
} else if (ok = DebugBreakProcess(inferior); !ok) { break;
*errorMessage = "DebugBreakProcess failed: " + Utils::winErrorMessage(GetLastError()); }
}
enum DebugBreakApi {
UseDebugBreakApi,
UseWin64Interrupt,
UseWin32Interrupt
};
/*
Windows 64 bit has a 32 bit subsystem (WOW64) which makes it possible to run a
32 bit application inside a 64 bit environment.
When GDB is used DebugBreakProcess must be called from the same system (32/64 bit) running
the inferior.
Therefore we need helper executables (win(32/64)interrupt.exe) on Windows 64 bit calling
DebugBreakProcess from the correct system.
DebugBreak matrix for windows
Api = UseDebugBreakApi
Win64 = UseWin64Interrupt
Win32 = UseWin32Interrupt
N/A = This configuration is not possible
| Windows 32bit | Windows 64bit
| QtCreator 32bit | QtCreator 32bit | QtCreator 64bit
| Inferior 32bit | Inferior 32bit | Inferior 64bit | Inferior 32bit | Inferior 64bit |
----------|-----------------|-----------------|-----------------|-----------------|----------------|
GDB 32bit | Api | Api | NA | Win32 | NA |
64bit | NA | Api | Win64 | Win32 | Api |
----------|-----------------|-----------------|-----------------|-----------------|----------------|
*/
DebugBreakApi breakApi = UseDebugBreakApi;
#ifdef Q_OS_WIN64
if (isWow64Process(inferior))
breakApi = UseWin32Interrupt;
#else
if (isWow64Process(GetCurrentProcess()) && !isWow64Process(inferior))
breakApi = UseWin64Interrupt;
#endif
if (breakApi == UseDebugBreakApi) {
ok = DebugBreakProcess(inferior);
if (!ok)
*errorMessage = "DebugBreakProcess failed: " + Utils::winErrorMessage(GetLastError());
} else {
const QString executable = breakApi == UseWin32Interrupt
? QCoreApplication::applicationDirPath() + "/win32interrupt.exe"
: QCoreApplication::applicationDirPath() + "/win64interrupt.exe";
if (!QFileInfo::exists(executable)) {
*errorMessage = QString::fromLatin1(
"%1 does not exist. If you have built %2 "
"on your own, checkout "
"https://code.qt.io/cgit/qt-creator/binary-artifacts.git/.")
.arg(QDir::toNativeSeparators(executable),
QGuiApplication::applicationDisplayName());
break;
}
switch (QProcess::execute(executable, QStringList(QString::number(pID)))) {
case -2:
*errorMessage = QString::fromLatin1("Cannot start %1. Check src\\tools\\win64interrupt\\win64interrupt.c for more information.").
arg(QDir::toNativeSeparators(executable));
break;
case 0:
ok = true;
break;
default:
*errorMessage = QDir::toNativeSeparators(executable)
+ " could not break the process.";
break;
}
break;
}
} while (false);
if (inferior != NULL) if (inferior != NULL)
CloseHandle(inferior); CloseHandle(inferior);
if (!ok) if (!ok)

View File

@@ -82,6 +82,7 @@ public:
const Utils::FilePath &newFilePath); const Utils::FilePath &newFilePath);
virtual bool addDependencies(Node *context, const QStringList &dependencies); virtual bool addDependencies(Node *context, const QStringList &dependencies);
virtual bool supportsAction(Node *context, ProjectAction action, const Node *node) const; virtual bool supportsAction(Node *context, ProjectAction action, const Node *node) const;
virtual void buildNamedTarget(const QString &target) { Q_UNUSED(target) }
virtual QString name() const = 0; virtual QString name() const = 0;
// Owned by the build system. Use only in main thread. Can go away at any time. // Owned by the build system. Use only in main thread. Can go away at any time.

View File

@@ -102,20 +102,90 @@ void DesktopProcessSignalOperation::killProcessSilently(qint64 pid)
void DesktopProcessSignalOperation::interruptProcessSilently(qint64 pid) void DesktopProcessSignalOperation::interruptProcessSilently(qint64 pid)
{ {
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
enum SpecialInterrupt { NoSpecialInterrupt, Win32Interrupt, Win64Interrupt };
bool is64BitSystem = is64BitWindowsSystem();
SpecialInterrupt si = NoSpecialInterrupt;
if (is64BitSystem)
si = is64BitWindowsBinary(m_debuggerCommand) ? Win64Interrupt : Win32Interrupt;
/*
Windows 64 bit has a 32 bit subsystem (WOW64) which makes it possible to run a
32 bit application inside a 64 bit environment.
When GDB is used DebugBreakProcess must be called from the same system (32/64 bit) running
the inferior. If CDB is used we could in theory break wow64 processes,
but the break is actually a wow64 breakpoint. CDB is configured to ignore these
breakpoints, because they also appear on module loading.
Therefore we need helper executables (win(32/64)interrupt.exe) on Windows 64 bit calling
DebugBreakProcess from the correct system.
DebugBreak matrix for windows
Api = UseDebugBreakApi
Win64 = UseWin64InterruptHelper
Win32 = UseWin32InterruptHelper
N/A = This configuration is not possible
| Windows 32bit | Windows 64bit
| QtCreator 32bit | QtCreator 32bit | QtCreator 64bit
| Inferior 32bit | Inferior 32bit | Inferior 64bit | Inferior 32bit | Inferior 64bit
----------|-----------------|-----------------|-----------------|-----------------|----------------
CDB 32bit | Api | Api | N/A | Win32 | N/A
64bit | N/A | Win64 | Win64 | Api | Api
----------|-----------------|-----------------|-----------------|-----------------|----------------
GDB 32bit | Api | Api | N/A | Win32 | N/A
64bit | N/A | N/A | Win64 | N/A | Api
----------|-----------------|-----------------|-----------------|-----------------|----------------
*/
HANDLE inferior = NULL; HANDLE inferior = NULL;
const DWORD rights = PROCESS_QUERY_INFORMATION | PROCESS_SET_INFORMATION | PROCESS_VM_OPERATION do {
| PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_DUP_HANDLE const DWORD rights = PROCESS_QUERY_INFORMATION|PROCESS_SET_INFORMATION
| PROCESS_TERMINATE | PROCESS_CREATE_THREAD | PROCESS_SUSPEND_RESUME; |PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ
inferior = OpenProcess(rights, FALSE, pid); |PROCESS_DUP_HANDLE|PROCESS_TERMINATE|PROCESS_CREATE_THREAD|PROCESS_SUSPEND_RESUME;
if (inferior == NULL) { inferior = OpenProcess(rights, FALSE, pid);
appendMsgCannotInterrupt( if (inferior == NULL) {
pid, Tr::tr("Cannot open process: %1") + winErrorMessage(GetLastError())); appendMsgCannotInterrupt(pid, Tr::tr("Cannot open process: %1")
} else if (!DebugBreakProcess(inferior)) { + winErrorMessage(GetLastError()));
appendMsgCannotInterrupt( break;
pid, }
Tr::tr("DebugBreakProcess failed:") + QLatin1Char(' ') bool creatorIs64Bit = is64BitWindowsBinary(
+ winErrorMessage(GetLastError())); FilePath::fromUserInput(QCoreApplication::applicationFilePath()));
} if (!is64BitSystem
|| si == NoSpecialInterrupt
|| (si == Win64Interrupt && creatorIs64Bit)
|| (si == Win32Interrupt && !creatorIs64Bit)) {
if (!DebugBreakProcess(inferior)) {
appendMsgCannotInterrupt(pid, Tr::tr("DebugBreakProcess failed:")
+ QLatin1Char(' ') + winErrorMessage(GetLastError()));
}
} else if (si == Win32Interrupt || si == Win64Interrupt) {
QString executable = QCoreApplication::applicationDirPath();
executable += si == Win32Interrupt
? QLatin1String("/win32interrupt.exe")
: QLatin1String("/win64interrupt.exe");
if (!QFileInfo::exists(executable)) {
appendMsgCannotInterrupt(pid,
Tr::tr("%1 does not exist. If you built %2 "
"yourself, check out https://code.qt.io/cgit/"
"qt-creator/binary-artifacts.git/.")
.arg(QDir::toNativeSeparators(executable),
QGuiApplication::applicationDisplayName()));
}
switch (QProcess::execute(executable, QStringList(QString::number(pid)))) {
case -2:
appendMsgCannotInterrupt(pid, Tr::tr(
"Cannot start %1. Check src\\tools\\win64interrupt\\win64interrupt.c "
"for more information.").arg(QDir::toNativeSeparators(executable)));
break;
case 0:
break;
default:
appendMsgCannotInterrupt(pid, QDir::toNativeSeparators(executable)
+ QLatin1Char(' ') + Tr::tr("could not break the process."));
break;
}
}
} while (false);
if (inferior != NULL) if (inferior != NULL)
CloseHandle(inferior); CloseHandle(inferior);
#else #else

View File

@@ -1085,6 +1085,15 @@ void Project::configureAsExampleProject(Kit * /*kit*/)
{ {
} }
void Project::buildTarget(const QString &target)
{
if (!activeTarget() || !activeTarget()->activeBuildConfiguration()
|| !activeTarget()->activeBuildConfiguration()->buildSystem()) {
return;
}
activeTarget()->activeBuildConfiguration()->buildSystem()->buildNamedTarget(target);
}
bool Project::hasMakeInstallEquivalent() const bool Project::hasMakeInstallEquivalent() const
{ {
return d->m_hasMakeInstallEquivalent; return d->m_hasMakeInstallEquivalent;

View File

@@ -131,6 +131,8 @@ public:
bool needsBuildConfigurations() const; bool needsBuildConfigurations() const;
virtual void configureAsExampleProject(ProjectExplorer::Kit *kit); virtual void configureAsExampleProject(ProjectExplorer::Kit *kit);
void buildTarget(const QString &target);
virtual ProjectImporter *projectImporter() const; virtual ProjectImporter *projectImporter() const;
virtual DeploymentKnowledge deploymentKnowledge() const { return DeploymentKnowledge::Bad; } virtual DeploymentKnowledge deploymentKnowledge() const { return DeploymentKnowledge::Bad; }

View File

@@ -1,5 +1,5 @@
add_qtc_plugin(QmlJSEditor add_qtc_plugin(QmlJSEditor
DEPENDS LanguageUtils QmlJS QmlEditorWidgets CMakeProjectManager DEPENDS LanguageUtils QmlJS QmlEditorWidgets
PLUGIN_DEPENDS Core ProjectExplorer QmlJSTools TextEditor LanguageClient PLUGIN_DEPENDS Core ProjectExplorer QmlJSTools TextEditor LanguageClient
SOURCES SOURCES
qmlexpressionundercursor.cpp qmlexpressionundercursor.h qmlexpressionundercursor.cpp qmlexpressionundercursor.h

View File

@@ -5,7 +5,6 @@
#include "qmljseditorconstants.h" #include "qmljseditorconstants.h"
#include "qmljseditorsettings.h" #include "qmljseditorsettings.h"
#include <cmakeprojectmanager/targethelper.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/idocument.h> #include <coreplugin/idocument.h>
#include <projectexplorer/project.h> #include <projectexplorer/project.h>
@@ -120,11 +119,10 @@ void QmlTaskManager::updateSemanticMessagesNow()
static void triggerQmllintCMakeTarget() static void triggerQmllintCMakeTarget()
{ {
CMakeProjectManager::buildTarget( if (ProjectManager::startupProject())
ProjectManager::startupProject()->projectFilePath(), Constants::QMLLINT_BUILD_TARGET); ProjectManager::startupProject()->buildTarget(Constants::QMLLINT_BUILD_TARGET);
} }
void QmlTaskManager::updateMessagesNow(bool updateSemantic) void QmlTaskManager::updateMessagesNow(bool updateSemantic)
{ {
// heuristic: qmllint will output meaningful warnings if qmlls is enabled // heuristic: qmllint will output meaningful warnings if qmlls is enabled