diff --git a/.gitignore b/.gitignore index c024fc5..bfa7977 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,9 @@ testem.log /typings __screenshots__/ +# Microsoft Store listing +/store-listing/ + # System files .DS_Store Thumbs.db diff --git a/PRIVACY.md b/PRIVACY.md new file mode 100644 index 0000000..5dfe365 --- /dev/null +++ b/PRIVACY.md @@ -0,0 +1,89 @@ +# Politique de confidentialité — Markify + +_Dernière mise à jour : 14 août 2026_ + +Markify est un éditeur Markdown de bureau. Votre vie privée est simple : **Markify ne collecte aucune donnée personnelle.** + +## Données collectées + +- **Aucune** donnée personnelle n'est collectée, traitée ou transmise. +- Aucun compte utilisateur, aucune inscription. +- Aucune télémétrie, aucun suivi (tracking), aucun cookie. + +## Données locales + +- Les documents que vous ouvrez, éditez, enregistrez et exportez restent **uniquement sur votre appareil**. +- Markify ne communique jamais le contenu de vos documents à un serveur. +- L'export PDF est généré localement sur votre appareil. + +## Préférences + +- Votre langue d'interface et votre thème (clair/sombre) sont enregistrés localement sur votre appareil (stockage local de l'application). Ils ne sont jamais transmis à l'extérieur. + +## Fonctionnalités locales + +- Le presse-papiers est utilisé uniquement pour vos opérations Couper/Copier/Coller. +- Les polices système sont lues localement pour le rendu de l'éditeur et des exports PDF. + +## Liens externes + +- La boîte **À propos** contient un lien vers le profil GitHub de l'éditeur. Cliquer sur ce lien ouvre votre navigateur ; ce site est soumis à sa propre politique de confidentialité (GitHub). +- Markify n'intègre aucun service publicitaire ni contenu tiers. + +## Partage de données + +- Aucune donnée n'est partagée, vendue, louée ni transférée à des tiers, pour quelque finalité que ce soit. + +## Sécurité + +- Comme aucune donnée ne quitte votre appareil, il n'existe aucune donnée à sécuriser côté serveur. + +## Contact + +Pour toute question relative à cette politique de confidentialité : https://github.com/Martzcode + +--- + +# Privacy Policy — Markify + +_Last updated: August 14, 2026_ + +Markify is a desktop Markdown editor. Your privacy is simple: **Markify collects no personal data.** + +## Data collection + +- **No** personal data is collected, processed, or transmitted. +- No user account, no sign-up. +- No telemetry, no tracking, no cookies. + +## Local data + +- The documents you open, edit, save, and export remain **on your device only**. +- Markify never sends your document content to any server. +- PDF export is generated locally on your device. + +## Preferences + +- Your interface language and theme (light/dark) are stored locally on your device (application local storage). They are never transmitted anywhere. + +## Local features + +- The clipboard is used only for your Cut/Copy/Paste operations. +- System fonts are read locally for the editor rendering and PDF exports. + +## External links + +- The **About** dialog contains a link to the developer's GitHub profile. Clicking it opens your browser; that website is governed by its own privacy policy (GitHub). +- Markify embeds no advertising or third-party content. + +## Data sharing + +- No data is shared, sold, rented, or transferred to third parties, for any purpose. + +## Security + +- Since no data leaves your device, there is no data to secure on a server side. + +## Contact + +For any question regarding this privacy policy: https://github.com/Martzcode diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 4cb6489..2e4a54d 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -2331,6 +2331,7 @@ version = "0.1.0" dependencies = [ "base64 0.22.1", "fontdue", + "gobject-sys", "gtk", "log", "serde", @@ -2342,6 +2343,7 @@ dependencies = [ "tauri-plugin-http", "tauri-plugin-log", "tauri-plugin-opener", + "webview2-com", ] [[package]] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 1b751c2..4e85808 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -32,3 +32,7 @@ tauri-plugin-opener = "2.5.4" [target.'cfg(target_os = "linux")'.dependencies] gtk = "0.18" +gobject-sys = "0.18" + +[target.'cfg(target_os = "windows")'.dependencies] +webview2-com = "0.38" diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 8d3fcbb..c944129 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -492,6 +492,8 @@ pub fn run() { read_system_fonts ]) .setup(|app| { + #[cfg(any(target_os = "linux", target_os = "windows"))] + disable_pinch_zoom(app); if cfg!(debug_assertions) { app.handle().plugin( tauri_plugin_log::Builder::default() @@ -504,3 +506,52 @@ pub fn run() { .run(context) .expect("error while running tauri application"); } + +// On Linux, the pinch-to-zoom gesture is handled natively by WebKitGTK (it +// never reaches the web content, so CSS/JS cannot block it). WebKit stores +// its internal zoom gesture (a GtkGestureZoom) on the WebView widget under +// the "wk-view-zoom-gesture" qdata; destroying its signal handlers disables +// the gesture. See WebKitWebViewBase.cpp in the WebKit source. +#[cfg(target_os = "linux")] +fn disable_pinch_zoom(app: &tauri::App) { + use tauri::Manager; + + let Some(window) = app.get_webview_window("main") else { + return; + }; + window + .with_webview(|webview| { + use gtk::glib::prelude::*; + unsafe { + if let Some(gesture) = webview.inner().data::("wk-view-zoom-gesture") { + gobject_sys::g_signal_handlers_destroy(gesture.as_ptr()); + } + } + }) + .expect("failed to disable pinch zoom"); +} + +// On Windows, pinch-to-zoom is handled natively by WebView2 (Chromium) and +// does not always reach the web content. Disable it through the WebView2 +// settings, falling back to the web-side guards (CSS/JS) if the runtime is +// too old to expose ICoreWebView2Settings5. +#[cfg(target_os = "windows")] +fn disable_pinch_zoom(app: &tauri::App) { + use tauri::Manager; + use webview2_com::Microsoft::Web::WebView2::Win32::ICoreWebView2Settings5; + + let Some(window) = app.get_webview_window("main") else { + return; + }; + window + .with_webview(|webview| unsafe { + if let Ok(core) = webview.controller().CoreWebView2() { + if let Ok(settings) = core.Settings() { + if let Ok(settings5) = settings.cast::() { + let _ = settings5.SetIsPinchZoomEnabled(false); + } + } + } + }) + .expect("failed to disable pinch zoom"); +} diff --git a/src/index.html b/src/index.html index 19ae14b..13e5e8f 100644 --- a/src/index.html +++ b/src/index.html @@ -4,11 +4,29 @@ Markify - + + diff --git a/src/styles.css b/src/styles.css index 913d22d..4b93a99 100644 --- a/src/styles.css +++ b/src/styles.css @@ -74,4 +74,5 @@ body { padding: 0; height: 100%; overflow: hidden; + touch-action: none; }