pytron-kit 0.3.12__py3-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pytron/__init__.py +112 -0
- pytron/application.py +562 -0
- pytron/apputils/__init__.py +0 -0
- pytron/apputils/chrome_ipc.py +203 -0
- pytron/apputils/codegen.py +261 -0
- pytron/apputils/config.py +303 -0
- pytron/apputils/deadmansswitch.py +47 -0
- pytron/apputils/extras.py +76 -0
- pytron/apputils/native.py +148 -0
- pytron/apputils/shell.py +73 -0
- pytron/apputils/windows.py +286 -0
- pytron/cli.py +384 -0
- pytron/commands/__init__.py +0 -0
- pytron/commands/android.py +28 -0
- pytron/commands/build.py +26 -0
- pytron/commands/doctor.py +221 -0
- pytron/commands/engine.py +23 -0
- pytron/commands/frontend.py +60 -0
- pytron/commands/harvest.py +112 -0
- pytron/commands/helpers.py +239 -0
- pytron/commands/info.py +50 -0
- pytron/commands/init.py +521 -0
- pytron/commands/install.py +294 -0
- pytron/commands/login.py +130 -0
- pytron/commands/package.py +228 -0
- pytron/commands/plugin.py +442 -0
- pytron/commands/run.py +312 -0
- pytron/commands/scan.py +210 -0
- pytron/commands/show.py +23 -0
- pytron/commands/uninstall.py +150 -0
- pytron/commands/utils.py +42 -0
- pytron/commands/workflow.py +95 -0
- pytron/console.py +133 -0
- pytron/core.py +18 -0
- pytron/dependencies/WebView2Loader.dll +0 -0
- pytron/dependencies/__init__.py +1 -0
- pytron/dependencies/pytron_native.pyd +0 -0
- pytron/engines/chrome/adapter.py +445 -0
- pytron/engines/chrome/engine.py +576 -0
- pytron/engines/chrome/forge.py +147 -0
- pytron/engines/chrome/shell/package.json +8 -0
- pytron/engines/chrome/shell/preload.js +12 -0
- pytron/engines/chrome/shell/shell.js +534 -0
- pytron/exceptions.py +36 -0
- pytron/inspector.py +201 -0
- pytron/inspector_ui.py +512 -0
- pytron/installer/Installation.nsi +236 -0
- pytron/installer/header.bmp +0 -0
- pytron/installer/pytron.ico +0 -0
- pytron/installer/sidebar.bmp +0 -0
- pytron/llms.md +98 -0
- pytron/manifests/README.md +29 -0
- pytron/manifests/windows-utf8.manifest +44 -0
- pytron/menu.py +128 -0
- pytron/nsis-setup.exe +0 -0
- pytron/pack/__init__.py +0 -0
- pytron/pack/assets.py +131 -0
- pytron/pack/compilers.py +289 -0
- pytron/pack/crystal.py +297 -0
- pytron/pack/graph.py +377 -0
- pytron/pack/inference.py +157 -0
- pytron/pack/installers.py +402 -0
- pytron/pack/introspect.py +357 -0
- pytron/pack/metadata.py +213 -0
- pytron/pack/modules.py +618 -0
- pytron/pack/nuitka.py +108 -0
- pytron/pack/pipeline.py +107 -0
- pytron/pack/pyinstaller.py +176 -0
- pytron/pack/rust_engine.py +273 -0
- pytron/pack/secure.py +309 -0
- pytron/pack/secure_loader/bin/pytron_rust_bootloader.exe +0 -0
- pytron/pack/secure_loader/icon.ico +0 -0
- pytron/pack/utils.py +110 -0
- pytron/pack/virtual_root.py +124 -0
- pytron/platforms/__init__.py +0 -0
- pytron/platforms/android/__init__.py +3 -0
- pytron/platforms/android/android.py +103 -0
- pytron/platforms/android/builder.py +736 -0
- pytron/platforms/android/ops/build.py +79 -0
- pytron/platforms/android/ops/init.py +63 -0
- pytron/platforms/android/ops/run.py +79 -0
- pytron/platforms/android/ops/sync.py +770 -0
- pytron/platforms/android/ops/utils.py +8 -0
- pytron/platforms/android/shell/README.md +30 -0
- pytron/platforms/android/shell/app/build.gradle +64 -0
- pytron/platforms/android/shell/app/src/main/AndroidManifest.xml +29 -0
- pytron/platforms/android/shell/app/src/main/assets/python/main.py +86 -0
- pytron/platforms/android/shell/app/src/main/assets/python/python314.zip +0 -0
- pytron/platforms/android/shell/app/src/main/cpp/CMakeLists.txt +25 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/Python.h +155 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/abstract.h +915 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/audit.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/bltinmodule.h +14 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/boolobject.h +54 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/bytearrayobject.h +44 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/bytesobject.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/ceval.h +145 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/codecs.h +176 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/compile.h +22 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/complexobject.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/abstract.h +104 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/audit.h +8 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/bytearrayobject.h +38 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/bytesobject.h +42 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/cellobject.h +50 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/ceval.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/classobject.h +71 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/code.h +340 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/compile.h +50 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/complexobject.h +33 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/context.h +107 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/critical_section.h +154 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/descrobject.h +62 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/dictobject.h +105 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/fileobject.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/fileutils.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/floatobject.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/frameobject.h +35 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/funcobject.h +185 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/genobject.h +56 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/import.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/initconfig.h +334 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/listobject.h +53 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/lock.h +74 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/longintrepr.h +184 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/longobject.h +89 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/memoryobject.h +50 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/methodobject.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/modsupport.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/monitoring.h +269 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/object.h +493 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/objimpl.h +104 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/odictobject.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/picklebufobject.h +31 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pthread_stubs.h +105 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic.h +614 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic_gcc.h +615 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic_msc.h +1197 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic_std.h +1112 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyctype.h +39 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pydebug.h +38 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyerrors.h +132 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyfpe.h +15 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyframe.h +45 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyhash.h +54 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pylifecycle.h +89 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pymem.h +84 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pystate.h +275 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pystats.h +194 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pythonrun.h +96 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pythread.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pytime.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/setobject.h +71 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/traceback.h +13 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/tracemalloc.h +32 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/tupleobject.h +40 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/unicodeobject.h +773 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/warnings.h +20 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/weakrefobject.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/critical_section.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/datetime.h +267 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/descrobject.h +100 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/dictobject.h +108 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/dynamic_annotations.h +499 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/enumobject.h +17 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/errcode.h +45 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/exports.h +105 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/fileobject.h +41 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/fileutils.h +62 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/floatobject.h +54 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/frameobject.h +20 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/genericaliasobject.h +14 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/import.h +103 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/atomic.h +392 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/internal.h +969 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/prim.h +329 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/track.h +147 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/types.h +721 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc.h +565 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_abstract.h +61 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_asdl.h +112 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ast.h +945 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ast_state.h +271 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_atexit.h +31 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_audit.h +35 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_backoff.h +133 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_bitutils.h +186 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_blocks_output_buffer.h +321 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_brc.h +73 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_bytes_methods.h +82 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_bytesobject.h +149 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_c_array.h +39 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_call.h +206 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_capsule.h +17 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_cell.h +75 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ceval.h +390 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ceval_state.h +48 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_code.h +671 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_codecs.h +76 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_compile.h +230 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_complexobject.h +34 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_condvar.h +93 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_context.h +59 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_critical_section.h +237 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_crossinterp.h +406 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_crossinterp_data_registry.h +41 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_debug_offsets.h +379 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_descrobject.h +28 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_dict.h +410 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_dict_state.h +28 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_dtoa.h +40 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_emscripten_signal.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_emscripten_trampoline.h +70 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_exceptions.h +40 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_faulthandler.h +100 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_fileutils.h +320 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_fileutils_windows.h +98 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_floatobject.h +49 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_flowgraph.h +47 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_format.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_frame.h +61 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_freelist.h +111 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_freelist_state.h +70 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_function.h +53 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_gc.h +378 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_genobject.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_getopt.h +22 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_gil.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_global_objects.h +34 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_global_objects_fini_generated.h +1592 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_global_strings.h +854 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_hamt.h +113 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_hashtable.h +150 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_import.h +141 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_importdl.h +139 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_index_pool.h +36 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_initconfig.h +197 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_instruction_sequence.h +83 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_instruments.h +127 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interp.h +109 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interp_structs.h +977 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interpframe.h +401 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interpframe_structs.h +95 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interpolation.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_intrinsics.h +51 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_jit.h +29 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_list.h +81 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_llist.h +106 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_lock.h +236 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_long.h +319 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_magic_number.h +305 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_memoryobject.h +20 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_mimalloc.h +69 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_modsupport.h +99 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_moduleobject.h +62 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_namespace.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object.h +1029 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_alloc.h +71 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_deferred.h +32 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_stack.h +95 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_state.h +49 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_obmalloc.h +702 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_obmalloc_init.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_opcode_metadata.h +2117 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_opcode_utils.h +90 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_optimizer.h +318 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_parking_lot.h +97 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_parser.h +78 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pathconfig.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyarena.h +68 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyatomic_ft_wrappers.h +174 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pybuffer.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyerrors.h +213 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyhash.h +91 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pylifecycle.h +136 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pymath.h +205 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pymem.h +145 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pymem_init.h +103 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pystate.h +339 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pystats.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pythonrun.h +68 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pythread.h +172 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_qsbr.h +172 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_range.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime.h +63 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime_init.h +239 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime_init_generated.h +1589 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime_structs.h +310 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_semaphore.h +67 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_setobject.h +41 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_signal.h +108 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_sliceobject.h +20 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_stackref.h +791 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_stats.h +97 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_strhex.h +39 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_structs.h +88 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_structseq.h +40 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_symtable.h +201 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_sysmodule.h +32 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_template.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_time.h +334 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_token.h +110 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_traceback.h +111 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_tracemalloc.h +164 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_tstate.h +88 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_tuple.h +75 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_typedefs.h +18 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_typeobject.h +155 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_typevarobject.h +28 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ucnhash.h +36 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_unicodeobject.h +308 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_unicodeobject_generated.h +3132 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_unionobject.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_uniqueid.h +57 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_uop_ids.h +335 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_uop_metadata.h +1204 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_warnings.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_weakref.h +133 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/intrcheck.h +23 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/iterobject.h +24 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/listobject.h +55 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/lock.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/longobject.h +178 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/marshal.h +31 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/memoryobject.h +34 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/methodobject.h +146 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/modsupport.h +146 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/moduleobject.h +122 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/monitoring.h +18 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/object.h +828 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/objimpl.h +211 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/opcode.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/opcode_ids.h +259 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/osdefs.h +57 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/osmodule.h +17 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/patchlevel.h +49 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/py_curses.h +117 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyatomic.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pybuffer.h +145 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pycapsule.h +58 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyconfig.h +2088 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pydtrace.h +59 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyerrors.h +335 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyexpat.h +62 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyframe.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyhash.h +59 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pylifecycle.h +80 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pymacconfig.h +91 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pymacro.h +243 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pymath.h +65 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pymem.h +110 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyport.h +710 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pystate.h +132 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pystats.h +28 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pystrcmp.h +23 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pystrtod.h +37 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pythonrun.h +42 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pythread.h +131 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pytypedefs.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/rangeobject.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/refcount.h +555 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/setobject.h +49 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/sliceobject.h +69 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/structmember.h +56 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/structseq.h +46 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/sysmodule.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/traceback.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/tupleobject.h +46 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/typeslots.h +96 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/unicodeobject.h +1029 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/warnings.h +45 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/weakrefobject.h +46 -0
- pytron/platforms/android/shell/app/src/main/cpp/pytron_bridge.cpp +224 -0
- pytron/platforms/android/shell/app/src/main/java/com/pytron/shell/MainActivity.kt +208 -0
- pytron/platforms/android/shell/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- pytron/platforms/android/shell/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- pytron/platforms/android/shell/build.gradle +11 -0
- pytron/platforms/android/shell/gradle/wrapper/gradle-wrapper.jar +0 -0
- pytron/platforms/android/shell/gradle/wrapper/gradle-wrapper.properties +5 -0
- pytron/platforms/android/shell/gradle.properties +2 -0
- pytron/platforms/android/shell/gradlew.bat +85 -0
- pytron/platforms/android/shell/settings.gradle +16 -0
- pytron/platforms/darwin.py +82 -0
- pytron/platforms/darwin_ops/libs.py +31 -0
- pytron/platforms/darwin_ops/system.py +182 -0
- pytron/platforms/darwin_ops/utils.py +85 -0
- pytron/platforms/darwin_ops/webview.py +5 -0
- pytron/platforms/darwin_ops/window.py +102 -0
- pytron/platforms/interface.py +152 -0
- pytron/platforms/linux.py +82 -0
- pytron/platforms/linux_ops/libs.py +49 -0
- pytron/platforms/linux_ops/system.py +316 -0
- pytron/platforms/linux_ops/utils.py +19 -0
- pytron/platforms/linux_ops/webview.py +5 -0
- pytron/platforms/linux_ops/window.py +115 -0
- pytron/platforms/windows.py +136 -0
- pytron/platforms/windows_ops/__init__.py +0 -0
- pytron/platforms/windows_ops/constants.py +126 -0
- pytron/platforms/windows_ops/system.py +518 -0
- pytron/platforms/windows_ops/utils.py +3 -0
- pytron/platforms/windows_ops/webview.py +5 -0
- pytron/platforms/windows_ops/window.py +361 -0
- pytron/plugin.py +467 -0
- pytron/rcedit-x64.exe +0 -0
- pytron/router.py +146 -0
- pytron/serializer.py +240 -0
- pytron/shortcuts.py +279 -0
- pytron/state.py +76 -0
- pytron/tray.py +399 -0
- pytron/updater.py +181 -0
- pytron/utf8_hook.py +112 -0
- pytron/utils.py +44 -0
- pytron/webview.py +722 -0
- pytron_kit-0.3.12.dist-info/METADATA +131 -0
- pytron_kit-0.3.12.dist-info/RECORD +419 -0
- pytron_kit-0.3.12.dist-info/WHEEL +5 -0
- pytron_kit-0.3.12.dist-info/entry_points.txt +2 -0
- pytron_kit-0.3.12.dist-info/licenses/LICENSE +201 -0
- pytron_kit-0.3.12.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
from .interface import PlatformInterface
|
|
2
|
+
from .linux_ops import window, system, libs
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class LinuxImplementation(PlatformInterface):
|
|
6
|
+
def __init__(self):
|
|
7
|
+
# Libraries are loaded by linux_ops.libs on import
|
|
8
|
+
if not libs.gtk:
|
|
9
|
+
print("Pytron Warning: GTK3 not found. Window controls may fail.")
|
|
10
|
+
|
|
11
|
+
def minimize(self, w):
|
|
12
|
+
window.minimize(w)
|
|
13
|
+
|
|
14
|
+
def center(self, w):
|
|
15
|
+
window.center(w)
|
|
16
|
+
|
|
17
|
+
def set_bounds(self, w, x, y, width, height):
|
|
18
|
+
window.set_bounds(w, x, y, width, height)
|
|
19
|
+
|
|
20
|
+
def close(self, w):
|
|
21
|
+
window.close(w)
|
|
22
|
+
|
|
23
|
+
def toggle_maximize(self, w):
|
|
24
|
+
return window.toggle_maximize(w)
|
|
25
|
+
|
|
26
|
+
def make_frameless(self, w):
|
|
27
|
+
window.make_frameless(w)
|
|
28
|
+
|
|
29
|
+
def start_drag(self, w):
|
|
30
|
+
window.start_drag(w)
|
|
31
|
+
|
|
32
|
+
def message_box(self, w, title, message, style=0):
|
|
33
|
+
return system.message_box(w, title, message, style)
|
|
34
|
+
|
|
35
|
+
def hide(self, w):
|
|
36
|
+
window.hide(w)
|
|
37
|
+
|
|
38
|
+
def is_visible(self, w):
|
|
39
|
+
return window.is_visible(w)
|
|
40
|
+
|
|
41
|
+
def is_alive(self, w):
|
|
42
|
+
# A simple check for Linux/GTK is to see if the widget still has a window
|
|
43
|
+
win = window.get_window(w)
|
|
44
|
+
return bool(win and win != 0)
|
|
45
|
+
|
|
46
|
+
def show(self, w):
|
|
47
|
+
window.show(w)
|
|
48
|
+
|
|
49
|
+
def set_fullscreen(self, w, fullscreen):
|
|
50
|
+
window.set_fullscreen(w, fullscreen)
|
|
51
|
+
|
|
52
|
+
def set_always_on_top(self, w, enable):
|
|
53
|
+
window.set_always_on_top(w, enable)
|
|
54
|
+
|
|
55
|
+
def notification(self, w, title, message, icon=None):
|
|
56
|
+
system.notification(w, title, message, icon)
|
|
57
|
+
|
|
58
|
+
def open_file_dialog(self, w, title, default_path=None, file_types=None):
|
|
59
|
+
return system.open_file_dialog(w, title, default_path, file_types)
|
|
60
|
+
|
|
61
|
+
def save_file_dialog(
|
|
62
|
+
self, w, title, default_path=None, default_name=None, file_types=None
|
|
63
|
+
):
|
|
64
|
+
return system.save_file_dialog(w, title, default_path, default_name, file_types)
|
|
65
|
+
|
|
66
|
+
def open_folder_dialog(self, w, title, default_path=None):
|
|
67
|
+
return system.open_folder_dialog(w, title, default_path)
|
|
68
|
+
|
|
69
|
+
def set_taskbar_progress(self, w, state="normal", value=0, max_value=100):
|
|
70
|
+
system.set_taskbar_progress(w, state, value, max_value)
|
|
71
|
+
|
|
72
|
+
def set_window_icon(self, w, icon_path):
|
|
73
|
+
window.set_window_icon(w, icon_path)
|
|
74
|
+
|
|
75
|
+
def set_app_id(self, app_id):
|
|
76
|
+
system.set_app_id(app_id)
|
|
77
|
+
|
|
78
|
+
def set_launch_on_boot(self, app_name, exe_path, enable=True):
|
|
79
|
+
return system.set_launch_on_boot(app_name, exe_path, enable)
|
|
80
|
+
|
|
81
|
+
def register_protocol(self, scheme):
|
|
82
|
+
return system.register_protocol(scheme)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import ctypes
|
|
2
|
+
|
|
3
|
+
gtk = None
|
|
4
|
+
webkit = None
|
|
5
|
+
glib = None
|
|
6
|
+
gio = None
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def load_libs():
|
|
10
|
+
global gtk, webkit, glib, gio
|
|
11
|
+
|
|
12
|
+
# Load GTK
|
|
13
|
+
if not gtk:
|
|
14
|
+
try:
|
|
15
|
+
gtk = ctypes.CDLL("libgtk-3.so.0")
|
|
16
|
+
except OSError:
|
|
17
|
+
try:
|
|
18
|
+
gtk = ctypes.CDLL("libgtk-3.so")
|
|
19
|
+
except OSError:
|
|
20
|
+
pass
|
|
21
|
+
|
|
22
|
+
# Load WebKit
|
|
23
|
+
if not webkit:
|
|
24
|
+
try:
|
|
25
|
+
webkit = ctypes.CDLL("libwebkit2gtk-4.1.so.0")
|
|
26
|
+
except OSError:
|
|
27
|
+
try:
|
|
28
|
+
webkit = ctypes.CDLL("libwebkit2gtk-4.0.so.37")
|
|
29
|
+
except OSError:
|
|
30
|
+
pass
|
|
31
|
+
|
|
32
|
+
# Load GLib
|
|
33
|
+
if not glib:
|
|
34
|
+
try:
|
|
35
|
+
glib = ctypes.CDLL("libglib-2.0.so.0")
|
|
36
|
+
except OSError:
|
|
37
|
+
pass
|
|
38
|
+
|
|
39
|
+
# Load Gio
|
|
40
|
+
if not gio:
|
|
41
|
+
try:
|
|
42
|
+
gio = ctypes.CDLL("libgio-2.0.so.0")
|
|
43
|
+
except OSError:
|
|
44
|
+
pass
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# Initialize on import? Or let the facade call it?
|
|
48
|
+
# Let's initialize on import for simplicity, or lazily.
|
|
49
|
+
load_libs()
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import subprocess
|
|
2
|
+
import os
|
|
3
|
+
import shutil
|
|
4
|
+
import ctypes
|
|
5
|
+
from . import libs
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def message_box(w, title, message, style=0):
|
|
9
|
+
# Styles: 0=OK, 1=OK/cancel, 4=Yes/No
|
|
10
|
+
# Return: 1=OK, 2=Cancel, 6=Yes, 7=No
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
# TRY ZENITY (Common on GNOME/Ubuntu)
|
|
14
|
+
args = ["zenity", "--title=" + title, "--text=" + message]
|
|
15
|
+
if style == 4:
|
|
16
|
+
args.append("--question")
|
|
17
|
+
elif style == 1: # OK/Cancel treated as Question for Zenity roughly
|
|
18
|
+
args.append("--question")
|
|
19
|
+
else:
|
|
20
|
+
args.append("--info")
|
|
21
|
+
|
|
22
|
+
subprocess.check_call(args)
|
|
23
|
+
return 6 if style == 4 else 1 # Success (Yes or OK)
|
|
24
|
+
except subprocess.CalledProcessError:
|
|
25
|
+
return 7 if style == 4 else 2 # Failure/Cancel (No or Cancel)
|
|
26
|
+
except FileNotFoundError:
|
|
27
|
+
# TRY KDIALOG (KDE)
|
|
28
|
+
try:
|
|
29
|
+
kdialog = shutil.which("kdialog") or "kdialog"
|
|
30
|
+
args = [kdialog, "--title", title]
|
|
31
|
+
if style == 4:
|
|
32
|
+
args += ["--yesno", message]
|
|
33
|
+
else:
|
|
34
|
+
args += ["--msgbox", message]
|
|
35
|
+
|
|
36
|
+
subprocess.check_call(args)
|
|
37
|
+
return 6 if style == 4 else 1
|
|
38
|
+
except Exception:
|
|
39
|
+
# If neither, just allow it (dev env probably?) or log warning
|
|
40
|
+
print("Pytron Warning: No dialog tool (zenity/kdialog) found.")
|
|
41
|
+
return 0
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def notification(w, title, message, icon=None):
|
|
45
|
+
# Try notify-send
|
|
46
|
+
try:
|
|
47
|
+
ns = shutil.which("notify-send") or "notify-send"
|
|
48
|
+
subprocess.Popen([ns, title, message]) # nosec B603
|
|
49
|
+
except Exception:
|
|
50
|
+
print("Pytron Warning: notify-send not found.")
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _run_subprocess_dialog(title, action, default_path, default_name):
|
|
54
|
+
# Action: 0=Open, 1=Save, 2=Folder
|
|
55
|
+
|
|
56
|
+
# Try ZENITY
|
|
57
|
+
try:
|
|
58
|
+
cmd = ["zenity", "--file-selection", "--title=" + title]
|
|
59
|
+
|
|
60
|
+
if action == 1:
|
|
61
|
+
cmd.append("--save")
|
|
62
|
+
cmd.append("--confirm-overwrite")
|
|
63
|
+
elif action == 2:
|
|
64
|
+
cmd.append("--directory")
|
|
65
|
+
|
|
66
|
+
if default_path:
|
|
67
|
+
path = default_path
|
|
68
|
+
if action == 1 and default_name:
|
|
69
|
+
path = os.path.join(path, default_name)
|
|
70
|
+
cmd.append(f"--filename={path}")
|
|
71
|
+
|
|
72
|
+
output = subprocess.check_output(cmd, text=True).strip() # nosec B603
|
|
73
|
+
return output
|
|
74
|
+
except Exception:
|
|
75
|
+
pass
|
|
76
|
+
|
|
77
|
+
# Try KDIALOG
|
|
78
|
+
try:
|
|
79
|
+
cmd = ["kdialog", "--title", title]
|
|
80
|
+
if action == 0:
|
|
81
|
+
cmd += ["--getopenfilename"]
|
|
82
|
+
elif action == 1:
|
|
83
|
+
cmd += ["--getsavefilename"]
|
|
84
|
+
elif action == 2:
|
|
85
|
+
cmd += ["--getexistingdirectory"]
|
|
86
|
+
|
|
87
|
+
start_dir = default_path or "."
|
|
88
|
+
if action == 1 and default_name:
|
|
89
|
+
start_dir = os.path.join(start_dir, default_name)
|
|
90
|
+
cmd.append(start_dir)
|
|
91
|
+
|
|
92
|
+
output = subprocess.check_output(cmd, text=True).strip() # nosec B603
|
|
93
|
+
return output
|
|
94
|
+
except Exception:
|
|
95
|
+
pass
|
|
96
|
+
|
|
97
|
+
print("Pytron Warning: No file dialog provider (zenity/kdialog) found on Linux.")
|
|
98
|
+
return None
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def open_file_dialog(w, title, default_path=None, file_types=None):
|
|
102
|
+
return _run_subprocess_dialog(title, 0, default_path, None)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def save_file_dialog(w, title, default_path=None, default_name=None, file_types=None):
|
|
106
|
+
return _run_subprocess_dialog(title, 1, default_path, default_name)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def open_folder_dialog(w, title, default_path=None):
|
|
110
|
+
return _run_subprocess_dialog(title, 2, default_path, None)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def set_app_id(app_id):
|
|
114
|
+
if not libs.glib:
|
|
115
|
+
return
|
|
116
|
+
try:
|
|
117
|
+
libs.glib.g_set_prgname.argtypes = [ctypes.c_char_p]
|
|
118
|
+
libs.glib.g_set_prgname(app_id.encode("utf-8"))
|
|
119
|
+
libs.glib.g_set_application_name.argtypes = [ctypes.c_char_p]
|
|
120
|
+
libs.glib.g_set_application_name(app_id.encode("utf-8"))
|
|
121
|
+
except Exception as e:
|
|
122
|
+
print(f"[Pytron] Debug: Failed to set app name: {e}")
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def set_launch_on_boot(app_name, exe_path, enable=True):
|
|
126
|
+
config_home = os.environ.get("XDG_CONFIG_HOME", os.path.expanduser("~/.config"))
|
|
127
|
+
autostart_dir = os.path.join(config_home, "autostart")
|
|
128
|
+
desktop_file = os.path.join(autostart_dir, f"{app_name}.desktop")
|
|
129
|
+
|
|
130
|
+
if enable:
|
|
131
|
+
try:
|
|
132
|
+
os.makedirs(autostart_dir, exist_ok=True)
|
|
133
|
+
content = f"""[Desktop Entry]
|
|
134
|
+
Type=Application
|
|
135
|
+
Name={app_name}
|
|
136
|
+
Exec={exe_path}
|
|
137
|
+
Hidden=false
|
|
138
|
+
NoDisplay=false
|
|
139
|
+
X-GNOME-Autostart-enabled=true
|
|
140
|
+
"""
|
|
141
|
+
with open(desktop_file, "w") as f:
|
|
142
|
+
f.write(content)
|
|
143
|
+
return True
|
|
144
|
+
except Exception as e:
|
|
145
|
+
print(f"[Pytron] Failed to enable autostart on Linux: {e}")
|
|
146
|
+
return False
|
|
147
|
+
else:
|
|
148
|
+
try:
|
|
149
|
+
if os.path.exists(desktop_file):
|
|
150
|
+
os.remove(desktop_file)
|
|
151
|
+
return True
|
|
152
|
+
except Exception as e:
|
|
153
|
+
print(f"[Pytron] Failed to disable autostart on Linux: {e}")
|
|
154
|
+
return False
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def set_taskbar_progress(w, state="normal", value=0, max_value=100):
|
|
158
|
+
pass
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def register_protocol(scheme):
|
|
162
|
+
try:
|
|
163
|
+
import sys
|
|
164
|
+
|
|
165
|
+
# Get absolute path to this executable or script
|
|
166
|
+
exe_path = os.path.abspath(sys.executable)
|
|
167
|
+
if not getattr(sys, "frozen", False):
|
|
168
|
+
# If running as script, we need the script path too
|
|
169
|
+
main_script = sys.modules["__main__"].__file__
|
|
170
|
+
exe_path = f'"{exe_path}" "{os.path.abspath(main_script)}"'
|
|
171
|
+
else:
|
|
172
|
+
exe_path = f'"{exe_path}"'
|
|
173
|
+
|
|
174
|
+
# Local desktop file name based on scheme
|
|
175
|
+
desktop_filename = f"pytron-handler-{scheme}.desktop"
|
|
176
|
+
apps_dir = os.path.expanduser("~/.local/share/applications")
|
|
177
|
+
os.makedirs(apps_dir, exist_ok=True)
|
|
178
|
+
desktop_path = os.path.join(apps_dir, desktop_filename)
|
|
179
|
+
|
|
180
|
+
content = f"""[Desktop Entry]
|
|
181
|
+
Type=Application
|
|
182
|
+
Name=Pytron {scheme.capitalize()} Handler
|
|
183
|
+
Exec={exe_path} %u
|
|
184
|
+
MimeType=x-scheme-handler/{scheme};
|
|
185
|
+
NoDisplay=true
|
|
186
|
+
Terminal=false
|
|
187
|
+
"""
|
|
188
|
+
with open(desktop_path, "w") as f:
|
|
189
|
+
f.write(content)
|
|
190
|
+
|
|
191
|
+
# Update mime database and register
|
|
192
|
+
try:
|
|
193
|
+
udd = shutil.which("update-desktop-database") or "update-desktop-database"
|
|
194
|
+
subprocess.run([udd, apps_dir], capture_output=True) # nosec B603
|
|
195
|
+
|
|
196
|
+
xm = shutil.which("xdg-mime") or "xdg-mime"
|
|
197
|
+
subprocess.run(
|
|
198
|
+
[xm, "default", desktop_filename, f"x-scheme-handler/{scheme}"],
|
|
199
|
+
capture_output=True,
|
|
200
|
+
) # nosec B603
|
|
201
|
+
return True
|
|
202
|
+
except Exception:
|
|
203
|
+
# Fallback if tools are missing
|
|
204
|
+
return os.path.exists(desktop_path)
|
|
205
|
+
except Exception as e:
|
|
206
|
+
print(f"[Pytron] Failed to register protocol on Linux: {e}")
|
|
207
|
+
return False
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
# -------------------------------------------------------------------------
|
|
211
|
+
# Native Drag & Drop Support (Linux/GTK3)
|
|
212
|
+
# -------------------------------------------------------------------------
|
|
213
|
+
_drag_callbacks = {} # Keep references alive
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def enable_drag_drop(w, callback):
|
|
217
|
+
"""
|
|
218
|
+
Connects to the 'drag-data-received' signal on the GtkWindow/GtkWidget.
|
|
219
|
+
"""
|
|
220
|
+
if not libs.gtk or not libs.glib:
|
|
221
|
+
print("[Pytron] GTK/GLib not found, cannot enable drag & drop.")
|
|
222
|
+
return
|
|
223
|
+
|
|
224
|
+
# We need dragging constants
|
|
225
|
+
|
|
226
|
+
# Define Target Entry
|
|
227
|
+
# drag_dest_set expects an array of GtkTargetEntry
|
|
228
|
+
# But usually webview already accepts drags (for the browser).
|
|
229
|
+
# We might just need to connect the signal!
|
|
230
|
+
|
|
231
|
+
# Let's try just connecting the signal first.
|
|
232
|
+
|
|
233
|
+
# Callback Sig: void user_function (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint info, guint time, gpointer user_data)
|
|
234
|
+
CALLBACK_TYPE = ctypes.CFUNCTYPE(
|
|
235
|
+
None,
|
|
236
|
+
ctypes.c_void_p, # widget
|
|
237
|
+
ctypes.c_void_p, # context
|
|
238
|
+
ctypes.c_int, # x
|
|
239
|
+
ctypes.c_int, # y
|
|
240
|
+
ctypes.c_void_p, # data (GtkSelectionData*)
|
|
241
|
+
ctypes.c_uint, # info
|
|
242
|
+
ctypes.c_uint, # time
|
|
243
|
+
ctypes.c_void_p, # user_data
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
def on_drag_data_received(widget, context, x, y, data, info, time, user_data):
|
|
247
|
+
try:
|
|
248
|
+
# gtk_selection_data_get_uris (data) -> gchar**
|
|
249
|
+
libs.gtk.gtk_selection_data_get_uris.restype = ctypes.POINTER(
|
|
250
|
+
ctypes.c_char_p
|
|
251
|
+
)
|
|
252
|
+
libs.gtk.gtk_selection_data_get_uris.argtypes = [ctypes.c_void_p]
|
|
253
|
+
|
|
254
|
+
uris_ptr = libs.gtk.gtk_selection_data_get_uris(data)
|
|
255
|
+
files = []
|
|
256
|
+
|
|
257
|
+
if uris_ptr:
|
|
258
|
+
# Iterate null-terminated array
|
|
259
|
+
i = 0
|
|
260
|
+
while uris_ptr[i]:
|
|
261
|
+
uri_str = uris_ptr[i].decode("utf-8")
|
|
262
|
+
# Convert file:// URI to path
|
|
263
|
+
if uri_str.startswith("file://"):
|
|
264
|
+
# Basic unquoting (replace %20 with space, etc)
|
|
265
|
+
import urllib.parse
|
|
266
|
+
|
|
267
|
+
path = urllib.parse.unquote(uri_str.replace("file://", ""))
|
|
268
|
+
# Sanitize line endings
|
|
269
|
+
files.append(path.strip())
|
|
270
|
+
else:
|
|
271
|
+
files.append(uri_str)
|
|
272
|
+
i += 1
|
|
273
|
+
|
|
274
|
+
# Free strings? GTK owns them usually in this context or we need to free the array?
|
|
275
|
+
# g_strfreev(uris_ptr) usually.
|
|
276
|
+
if libs.glib and hasattr(libs.glib, "g_strfreev"):
|
|
277
|
+
libs.glib.g_strfreev(uris_ptr)
|
|
278
|
+
|
|
279
|
+
if files:
|
|
280
|
+
callback(files)
|
|
281
|
+
|
|
282
|
+
# Finish drag
|
|
283
|
+
libs.gtk.gtk_drag_finish(context, True, False, time)
|
|
284
|
+
except Exception as e:
|
|
285
|
+
print(f"[Pytron] Linux DragDrop Error: {e}")
|
|
286
|
+
libs.gtk.gtk_drag_finish(context, False, False, time)
|
|
287
|
+
|
|
288
|
+
c_callback = CALLBACK_TYPE(on_drag_data_received)
|
|
289
|
+
|
|
290
|
+
# Keep alive
|
|
291
|
+
_drag_callbacks[w] = c_callback
|
|
292
|
+
|
|
293
|
+
# Function sig: gulong g_signal_connect_data (gpointer instance, const gchar *detailed_signal, GCallback c_handler, gpointer data, GClosureNotify destroy_data, GConnectFlags connect_flags)
|
|
294
|
+
libs.glib.g_signal_connect_data.restype = ctypes.c_ulong
|
|
295
|
+
libs.glib.g_signal_connect_data.argtypes = [
|
|
296
|
+
ctypes.c_void_p,
|
|
297
|
+
ctypes.c_char_p,
|
|
298
|
+
CALLBACK_TYPE,
|
|
299
|
+
ctypes.c_void_p,
|
|
300
|
+
ctypes.c_void_p,
|
|
301
|
+
ctypes.c_int,
|
|
302
|
+
]
|
|
303
|
+
|
|
304
|
+
libs.glib.g_signal_connect_data(
|
|
305
|
+
ctypes.c_void_p(w),
|
|
306
|
+
"drag-data-received".encode("utf-8"),
|
|
307
|
+
c_callback,
|
|
308
|
+
None,
|
|
309
|
+
None,
|
|
310
|
+
0,
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
# Also ensure it is a drop destination
|
|
314
|
+
# gtk_drag_dest_set (widget, GTK_DEST_DEFAULT_ALL, NULL, 0, GDK_ACTION_COPY)
|
|
315
|
+
# Actually, we should probably add URI targets. This is verbose in ctypes.
|
|
316
|
+
# Assuming WebKit view already sets some drop targets.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from . import libs
|
|
2
|
+
import ctypes
|
|
3
|
+
|
|
4
|
+
# In Native Engine architecture, 'w' is passed as the HWND/XID integer directly.
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def get_window(w):
|
|
8
|
+
return w
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
get_hwnd = get_window
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def get_child_webview(win_ptr):
|
|
15
|
+
if not libs.gtk:
|
|
16
|
+
return None
|
|
17
|
+
libs.gtk.gtk_bin_get_child.argtypes = [ctypes.c_void_p]
|
|
18
|
+
libs.gtk.gtk_bin_get_child.restype = ctypes.c_void_p
|
|
19
|
+
return libs.gtk.gtk_bin_get_child(win_ptr)
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import ctypes
|
|
2
|
+
from . import libs
|
|
3
|
+
from .utils import get_window
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def minimize(w):
|
|
7
|
+
if not libs.gtk:
|
|
8
|
+
return
|
|
9
|
+
win = get_window(w)
|
|
10
|
+
libs.gtk.gtk_window_iconify(win)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def set_bounds(w, x, y, width, height):
|
|
14
|
+
if not libs.gtk:
|
|
15
|
+
return
|
|
16
|
+
win = get_window(w)
|
|
17
|
+
libs.gtk.gtk_window_move(win, int(x), int(y))
|
|
18
|
+
libs.gtk.gtk_window_resize(win, int(width), int(height))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def close(w):
|
|
22
|
+
if not libs.gtk:
|
|
23
|
+
return
|
|
24
|
+
win = get_window(w)
|
|
25
|
+
libs.gtk.gtk_window_close(win)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def toggle_maximize(w):
|
|
29
|
+
if not libs.gtk:
|
|
30
|
+
return False
|
|
31
|
+
win = get_window(w)
|
|
32
|
+
is_maximized = libs.gtk.gtk_window_is_maximized(win)
|
|
33
|
+
if is_maximized:
|
|
34
|
+
libs.gtk.gtk_window_unmaximize(win)
|
|
35
|
+
return False
|
|
36
|
+
else:
|
|
37
|
+
libs.gtk.gtk_window_maximize(win)
|
|
38
|
+
return True
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def make_frameless(w):
|
|
42
|
+
if not libs.gtk:
|
|
43
|
+
return
|
|
44
|
+
win = get_window(w)
|
|
45
|
+
libs.gtk.gtk_window_set_decorated(win, 0) # FALSE
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def start_drag(w):
|
|
49
|
+
if not libs.gtk:
|
|
50
|
+
return
|
|
51
|
+
win = get_window(w)
|
|
52
|
+
# 1 = GDK_BUTTON_PRIMARY_MASK (approx), sometimes 0 works for timestamps
|
|
53
|
+
libs.gtk.gtk_window_begin_move_drag(win, 1, 0, 0)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def hide(w):
|
|
57
|
+
if not libs.gtk:
|
|
58
|
+
return
|
|
59
|
+
win = get_window(w)
|
|
60
|
+
libs.gtk.gtk_widget_hide(win)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def is_visible(w):
|
|
64
|
+
if not libs.gtk:
|
|
65
|
+
return True
|
|
66
|
+
win = get_window(w)
|
|
67
|
+
return bool(libs.gtk.gtk_widget_get_visible(win))
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def show(w):
|
|
71
|
+
if not libs.gtk:
|
|
72
|
+
return
|
|
73
|
+
win = get_window(w)
|
|
74
|
+
libs.gtk.gtk_widget_show_all(win)
|
|
75
|
+
libs.gtk.gtk_window_present(win)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def set_window_icon(w, icon_path):
|
|
79
|
+
if not libs.gtk or not icon_path:
|
|
80
|
+
return
|
|
81
|
+
win = get_window(w)
|
|
82
|
+
err = ctypes.c_void_p(0)
|
|
83
|
+
res = libs.gtk.gtk_window_set_icon_from_file(
|
|
84
|
+
win, icon_path.encode("utf-8"), ctypes.byref(err)
|
|
85
|
+
)
|
|
86
|
+
if not res:
|
|
87
|
+
print(f"[Pytron] Failed to set window icon from {icon_path}")
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def center(w):
|
|
91
|
+
# GTK handles centering via window position usually, but we can implement if needed.
|
|
92
|
+
# For now, just a placeholder or basic implementation if GTK has a method.
|
|
93
|
+
if not libs.gtk:
|
|
94
|
+
return
|
|
95
|
+
win = get_window(w)
|
|
96
|
+
# GTK_WIN_POS_CENTER = 1
|
|
97
|
+
libs.gtk.gtk_window_set_position(win, 1)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def set_fullscreen(w, enable):
|
|
101
|
+
if not libs.gtk:
|
|
102
|
+
return
|
|
103
|
+
win = get_window(w)
|
|
104
|
+
if enable:
|
|
105
|
+
libs.gtk.gtk_window_fullscreen(win)
|
|
106
|
+
else:
|
|
107
|
+
libs.gtk.gtk_window_unfullscreen(win)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def set_always_on_top(w, enable):
|
|
111
|
+
if not libs.gtk:
|
|
112
|
+
return
|
|
113
|
+
win = get_window(w)
|
|
114
|
+
# gtk_window_set_keep_above(GtkWindow *window, gboolean setting)
|
|
115
|
+
libs.gtk.gtk_window_set_keep_above(win, int(enable))
|