frontengine 1.0.67__tar.gz → 1.0.68__tar.gz

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.
Files changed (266) hide show
  1. {frontengine-1.0.67 → frontengine-1.0.68}/PKG-INFO +1 -1
  2. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/pet/desktop_pet.py +10 -0
  3. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/pet/pet_setting_ui.py +70 -1
  4. frontengine-1.0.68/frontengine/utils/input_watch/typing_watch.py +73 -0
  5. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/multi_language/english.py +1 -0
  6. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/multi_language/france.py +1 -0
  7. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/multi_language/germany.py +1 -0
  8. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/multi_language/italy.py +1 -0
  9. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/multi_language/russian.py +1 -0
  10. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/multi_language/simplified_chinese.py +1 -0
  11. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/multi_language/traditional_chinese.py +1 -0
  12. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine.egg-info/PKG-INFO +1 -1
  13. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine.egg-info/SOURCES.txt +1 -0
  14. {frontengine-1.0.67 → frontengine-1.0.68}/pyproject.toml +1 -1
  15. {frontengine-1.0.67 → frontengine-1.0.68}/LICENSE +0 -0
  16. {frontengine-1.0.67 → frontengine-1.0.68}/README.md +0 -0
  17. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/__init__.py +0 -0
  18. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/__main__.py +0 -0
  19. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/__init__.py +0 -0
  20. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/base_widget.py +0 -0
  21. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/camera/__init__.py +0 -0
  22. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/camera/camera_widget.py +0 -0
  23. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/canvas/__init__.py +0 -0
  24. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/canvas/whiteboard_widget.py +0 -0
  25. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/capture/__init__.py +0 -0
  26. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/capture/region_capture.py +0 -0
  27. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/focus_shield/__init__.py +0 -0
  28. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/focus_shield/focus_shield_widget.py +0 -0
  29. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/gif/__init__.py +0 -0
  30. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/gif/paint_gif.py +0 -0
  31. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/image/__init__.py +0 -0
  32. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/image/paint_image.py +0 -0
  33. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/load/__init__.py +0 -0
  34. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/load/load_someone_make_ui.py +0 -0
  35. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/measure/__init__.py +0 -0
  36. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/measure/measure_widget.py +0 -0
  37. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/monitor/__init__.py +0 -0
  38. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/monitor/monitor_widget.py +0 -0
  39. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/notes/__init__.py +0 -0
  40. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/notes/sticky_note_widget.py +0 -0
  41. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/overlay_factory.py +0 -0
  42. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/particle/__init__.py +0 -0
  43. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/particle/particle_ui.py +0 -0
  44. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/pet/__init__.py +0 -0
  45. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/presentation/__init__.py +0 -0
  46. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/presentation/annotation_overlay.py +0 -0
  47. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/presentation/cursor_effects.py +0 -0
  48. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/presentation/keystroke_display.py +0 -0
  49. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/presentation/magnifier.py +0 -0
  50. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/replica/__init__.py +0 -0
  51. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/replica/replica_widget.py +0 -0
  52. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/scene/__init__.py +0 -0
  53. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/scene/extend_graphic_scene.py +0 -0
  54. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/scene/extend_graphic_view.py +0 -0
  55. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/scene/scene.py +0 -0
  56. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/screen_care/__init__.py +0 -0
  57. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/screen_care/color_vision_widget.py +0 -0
  58. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/screen_care/screen_filter.py +0 -0
  59. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/sound_player/__init__.py +0 -0
  60. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/sound_player/sound_effect.py +0 -0
  61. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/sound_player/sound_player.py +0 -0
  62. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/spectrum/__init__.py +0 -0
  63. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/spectrum/spectrum_widget.py +0 -0
  64. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/text/__init__.py +0 -0
  65. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/text/draw_text.py +0 -0
  66. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/toast/__init__.py +0 -0
  67. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/toast/toast_widget.py +0 -0
  68. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/video/__init__.py +0 -0
  69. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/video/video_player.py +0 -0
  70. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/wallpaper/__init__.py +0 -0
  71. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/wallpaper/wallpaper_widget.py +0 -0
  72. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/web/__init__.py +0 -0
  73. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/web/webview.py +0 -0
  74. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/show/window_helpers.py +0 -0
  75. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/system_tray/__init__.py +0 -0
  76. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/system_tray/extend_system_tray.py +0 -0
  77. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/__init__.py +0 -0
  78. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/color/__init__.py +0 -0
  79. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/color/global_color.py +0 -0
  80. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/__init__.py +0 -0
  81. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/app_profile_dialog.py +0 -0
  82. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/choose_file_dialog.py +0 -0
  83. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/clipboard_dialog.py +0 -0
  84. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/hotkey_settings_dialog.py +0 -0
  85. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/how_to_use_dialog.py +0 -0
  86. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/reminder_dialog.py +0 -0
  87. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/remote_control_dialog.py +0 -0
  88. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/screen_privacy_dialog.py +0 -0
  89. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/screen_text_dialog.py +0 -0
  90. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/screensaver_dialog.py +0 -0
  91. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/signage_dialog.py +0 -0
  92. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/smart_pause_dialog.py +0 -0
  93. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/usage_report_dialog.py +0 -0
  94. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/window_pin_dialog.py +0 -0
  95. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/dialog/window_replica_dialog.py +0 -0
  96. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/main_ui.py +0 -0
  97. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/menu/__init__.py +0 -0
  98. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/menu/help_menu.py +0 -0
  99. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/menu/how_to_menu.py +0 -0
  100. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/menu/language_menu.py +0 -0
  101. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/menu/preset_menu.py +0 -0
  102. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/menu/settings_menu.py +0 -0
  103. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/nav/__init__.py +0 -0
  104. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/nav/sidebar.py +0 -0
  105. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/__init__.py +0 -0
  106. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/control_center/__init__.py +0 -0
  107. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/control_center/control_center_ui.py +0 -0
  108. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/focus/__init__.py +0 -0
  109. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/focus/focus_setting_ui.py +0 -0
  110. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/gif/__init__.py +0 -0
  111. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/gif/gif_setting_ui.py +0 -0
  112. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/image/__init__.py +0 -0
  113. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/image/image_setting_ui.py +0 -0
  114. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/layout_kit.py +0 -0
  115. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/particle/__init__.py +0 -0
  116. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/particle/particle_setting_ui.py +0 -0
  117. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/pet/__init__.py +0 -0
  118. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/presentation/__init__.py +0 -0
  119. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/presentation/presentation_setting_ui.py +0 -0
  120. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/scene_setting/__init__.py +0 -0
  121. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/scene_setting/scene_manager.py +0 -0
  122. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/scene_setting/scene_page/__init__.py +0 -0
  123. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/scene_setting/scene_page/base_scene_page.py +0 -0
  124. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/scene_setting/scene_page/gif.py +0 -0
  125. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/scene_setting/scene_page/image.py +0 -0
  126. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/scene_setting/scene_page/registry.py +0 -0
  127. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/scene_setting/scene_page/sound.py +0 -0
  128. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/scene_setting/scene_page/text.py +0 -0
  129. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/scene_setting/scene_page/video.py +0 -0
  130. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/scene_setting/scene_page/web.py +0 -0
  131. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/scene_setting/scene_setting_ui.py +0 -0
  132. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/screen_care/__init__.py +0 -0
  133. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/screen_care/screen_care_setting_ui.py +0 -0
  134. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/sound_player/__init__.py +0 -0
  135. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/sound_player/sound_player_setting_ui.py +0 -0
  136. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/text/__init__.py +0 -0
  137. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/text/text_setting_ui.py +0 -0
  138. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/tools/__init__.py +0 -0
  139. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/tools/tools_setting_ui.py +0 -0
  140. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/utils.py +0 -0
  141. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/video/__init__.py +0 -0
  142. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/video/video_setting_ui.py +0 -0
  143. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/wallpaper/__init__.py +0 -0
  144. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/wallpaper/wallpaper_setting_ui.py +0 -0
  145. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/web/__init__.py +0 -0
  146. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/web/web_setting_ui.py +0 -0
  147. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/widgets/__init__.py +0 -0
  148. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/page/widgets/widgets_setting_ui.py +0 -0
  149. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/style/__init__.py +0 -0
  150. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/ui/style/app_style.py +0 -0
  151. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/user_setting/__init__.py +0 -0
  152. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/user_setting/preset_repository.py +0 -0
  153. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/user_setting/scene_setting.py +0 -0
  154. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/user_setting/user_setting_file.py +0 -0
  155. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/__init__.py +0 -0
  156. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/app_profile/__init__.py +0 -0
  157. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/app_profile/app_profile_service.py +0 -0
  158. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/audio_meter/__init__.py +0 -0
  159. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/audio_meter/audio_envelope.py +0 -0
  160. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/audio_meter/loopback_capture.py +0 -0
  161. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/audio_meter/microphone_meter.py +0 -0
  162. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/audio_meter/screen_audio.py +0 -0
  163. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/audio_meter/spectrum_analyzer.py +0 -0
  164. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/audio_meter/system_audio_meter.py +0 -0
  165. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/autostart/__init__.py +0 -0
  166. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/autostart/autostart_service.py +0 -0
  167. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/break_reminder/__init__.py +0 -0
  168. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/break_reminder/break_reminder.py +0 -0
  169. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/browser/__init__.py +0 -0
  170. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/browser/browser.py +0 -0
  171. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/clipboard/__init__.py +0 -0
  172. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/clipboard/clipboard_history.py +0 -0
  173. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/clipboard/clipboard_watcher.py +0 -0
  174. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/color_vision/__init__.py +0 -0
  175. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/color_vision/color_vision.py +0 -0
  176. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/critical_exit/__init__.py +0 -0
  177. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/critical_exit/check_key_is_press.py +0 -0
  178. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/critical_exit/critical_exit.py +0 -0
  179. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/critical_exit/win32_vk.py +0 -0
  180. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/exception/__init__.py +0 -0
  181. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/exception/exception_tags.py +0 -0
  182. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/exception/exceptions.py +0 -0
  183. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/focus_shield/__init__.py +0 -0
  184. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/focus_shield/focus_shield.py +0 -0
  185. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/focus_timer/__init__.py +0 -0
  186. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/focus_timer/focus_timer.py +0 -0
  187. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/hotkey/__init__.py +0 -0
  188. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/hotkey/hotkey_service.py +0 -0
  189. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/input_watch/__init__.py +0 -0
  190. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/input_watch/input_watch_service.py +0 -0
  191. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/json/__init__.py +0 -0
  192. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/json/json_file.py +0 -0
  193. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/json/json_repository.py +0 -0
  194. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/logging/__init__.py +0 -0
  195. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/logging/loggin_instance.py +0 -0
  196. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/measure/__init__.py +0 -0
  197. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/measure/measure.py +0 -0
  198. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/midi/__init__.py +0 -0
  199. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/midi/midi_input.py +0 -0
  200. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/multi_language/__init__.py +0 -0
  201. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/multi_language/language_wrapper.py +0 -0
  202. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/multi_language/retranslate.py +0 -0
  203. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/now_playing/__init__.py +0 -0
  204. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/now_playing/now_playing.py +0 -0
  205. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/pet_chat/__init__.py +0 -0
  206. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/pet_chat/pet_chat_service.py +0 -0
  207. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/platform_info/__init__.py +0 -0
  208. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/platform_info/platform_info.py +0 -0
  209. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/playlist/__init__.py +0 -0
  210. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/playlist/playlist.py +0 -0
  211. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/plugins/__init__.py +0 -0
  212. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/plugins/plugin_loader.py +0 -0
  213. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/power_mode/__init__.py +0 -0
  214. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/power_mode/power_mode.py +0 -0
  215. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/preset_schedule/__init__.py +0 -0
  216. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/preset_schedule/preset_schedule_service.py +0 -0
  217. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/recording/__init__.py +0 -0
  218. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/recording/frame_recorder.py +0 -0
  219. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/recording/gif_writer.py +0 -0
  220. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/redirect_manager/__init__.py +0 -0
  221. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/redirect_manager/redirect_manager_class.py +0 -0
  222. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/reminder/__init__.py +0 -0
  223. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/reminder/reminder_service.py +0 -0
  224. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/remote/__init__.py +0 -0
  225. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/remote/remote_server.py +0 -0
  226. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/screen_privacy/__init__.py +0 -0
  227. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/screen_privacy/capture_affinity.py +0 -0
  228. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/screen_privacy/share_watch.py +0 -0
  229. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/screen_text/__init__.py +0 -0
  230. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/screen_text/screen_text_service.py +0 -0
  231. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/screensaver/__init__.py +0 -0
  232. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/screensaver/screensaver_service.py +0 -0
  233. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/signage/__init__.py +0 -0
  234. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/signage/signage_service.py +0 -0
  235. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/smart_pause/__init__.py +0 -0
  236. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/smart_pause/pause_rules.py +0 -0
  237. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/smart_pause/smart_pause_service.py +0 -0
  238. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/steam/__init__.py +0 -0
  239. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/steam/steam_language.py +0 -0
  240. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/system_stats/__init__.py +0 -0
  241. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/system_stats/system_stats.py +0 -0
  242. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/text_source/__init__.py +0 -0
  243. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/text_source/text_source.py +0 -0
  244. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/theme_schedule/__init__.py +0 -0
  245. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/theme_schedule/theme_schedule_service.py +0 -0
  246. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/usage_tracking/__init__.py +0 -0
  247. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/usage_tracking/usage_service.py +0 -0
  248. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/usage_tracking/usage_tracker.py +0 -0
  249. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/virtual_camera/__init__.py +0 -0
  250. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/virtual_camera/camera_feed.py +0 -0
  251. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/virtual_camera/virtual_camera.py +0 -0
  252. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/weather/__init__.py +0 -0
  253. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/weather/weather_service.py +0 -0
  254. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/web_url.py +0 -0
  255. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/window_pin/__init__.py +0 -0
  256. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/window_pin/window_layout.py +0 -0
  257. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/window_pin/window_pin.py +0 -0
  258. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/window_replica/__init__.py +0 -0
  259. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/window_replica/dwm_thumbnail.py +0 -0
  260. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/workshop/__init__.py +0 -0
  261. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine/utils/workshop/workshop_content.py +0 -0
  262. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine.egg-info/dependency_links.txt +0 -0
  263. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine.egg-info/entry_points.txt +0 -0
  264. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine.egg-info/requires.txt +0 -0
  265. {frontengine-1.0.67 → frontengine-1.0.68}/frontengine.egg-info/top_level.txt +0 -0
  266. {frontengine-1.0.67 → frontengine-1.0.68}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frontengine
3
- Version: 1.0.67
3
+ Version: 1.0.68
4
4
  Summary: FrontEngine is use-define frontview or only use like screen saver
5
5
  Author-email: JE-Chen <jechenmailman@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/Intergration-Automation-Testing/FrontEngine
@@ -669,6 +669,9 @@ class PetMotion:
669
669
  self.vx = float(self.speed)
670
670
  self.vy = 0.0 if behaviour != BEHAVIOUR_WANDER else float(self.speed)
671
671
  self._airborne = False
672
+ # 打字時安分下來:True 的時候 step() 原地不動。
673
+ # Settled while typing: step() stays put while this is True.
674
+ self.settled = False
672
675
  self.state = "walk" # walk | idle | sleep
673
676
  self._state_ticks = 0
674
677
  self._idle_count = 0
@@ -784,6 +787,13 @@ class PetMotion:
784
787
  self.follow_target_x = None
785
788
 
786
789
  def step(self) -> Tuple[int, int]:
790
+ # 安分的時候原地不動。閘門放在這裡而不是各個行為分支裡:每個分支都要記得
791
+ # 檢查的話,總有一個會漏掉,而漏掉的那個就是打字時還在跑的那隻。
792
+ # Settled means staying put. The gate is here rather than inside each
793
+ # behaviour branch: with a check per branch one of them eventually gets
794
+ # missed, and the missed one is the pet still running about while you type.
795
+ if self.settled:
796
+ return int(self.x), int(self.y)
787
797
  left, top, right, bottom = self.bounds
788
798
  floor_y = bottom - self.height
789
799
  if self.behaviour == BEHAVIOUR_CHASE:
@@ -1,6 +1,6 @@
1
1
  from typing import Optional
2
2
 
3
- from PySide6.QtCore import QTimer
3
+ from PySide6.QtCore import Qt, QTimer
4
4
  from PySide6.QtGui import QGuiApplication
5
5
  from PySide6.QtWidgets import (
6
6
  QLabel, QPushButton, QMessageBox, QComboBox, QCheckBox, QFileDialog,
@@ -28,6 +28,8 @@ from frontengine.utils.focus_timer.focus_timer import (
28
28
  PHASE_BREAK, PHASE_FOCUS, PHASE_LONG_BREAK, FocusTimer,
29
29
  )
30
30
  from frontengine.ui.page.layout_kit import SettingPage
31
+ from frontengine.utils.input_watch.input_watch_service import InputWatchService
32
+ from frontengine.utils.input_watch.typing_watch import TypingWatch
31
33
  from frontengine.utils.logging.loggin_instance import front_engine_logger
32
34
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
33
35
  from frontengine.utils.multi_language.retranslate import retranslator, tr
@@ -49,6 +51,14 @@ class PetSettingUI(SettingPage):
49
51
 
50
52
  # Init variable
51
53
  self.pet_list: list = []
54
+ # 打字時安分:按鍵由既有的全域監聽服務推過來,這裡只記時間並在停手後放行
55
+ # Settling while typing: keys come from the existing global watch
56
+ # service; this only times them and lets the pet go once typing stops.
57
+ self._typing_watch = TypingWatch()
58
+ self._input_watch: Optional[InputWatchService] = None
59
+ self._settle_timer = QTimer(self)
60
+ self._settle_timer.setSingleShot(True)
61
+ self._settle_timer.timeout.connect(lambda: self._apply_settled(False))
52
62
  self.ready_to_play = False
53
63
  self.pet_image_path: Optional[str] = None
54
64
  self.pet_sound_path: Optional[str] = None
@@ -106,6 +116,13 @@ class PetSettingUI(SettingPage):
106
116
  self.sit_checkbox.setChecked(True)
107
117
  self.tag_checkbox = tr(QCheckBox(), "pet_tag_label", "Play tag with each other")
108
118
  self.tag_checkbox.toggled.connect(self._on_tag_toggled)
119
+ # 打字時安分:寵物在螢幕上跑過你正在看的那一行,是最常被抱怨的一點。
120
+ # Settle while typing: a pet walking over the line you are reading is
121
+ # the single thing people complain about most.
122
+ self.settle_typing_checkbox = tr(QCheckBox(), "pet_settle_typing",
123
+ "Settle while typing")
124
+ self.settle_typing_checkbox.clicked.connect(self._on_settle_typing_toggled)
125
+
109
126
  self.speech_checkbox = tr(QCheckBox(), "pet_speech_label", "Speak out loud")
110
127
  self.chat_checkbox = tr(QCheckBox(), "pet_chat_label", "AI chat (needs API key)")
111
128
  self.chat_checkbox.setToolTip(
@@ -169,6 +186,7 @@ class PetSettingUI(SettingPage):
169
186
  behaviour = self.add_section("section_behaviour", "Behaviour")
170
187
  behaviour.add_row(self.behaviour_label, self.behaviour_combobox)
171
188
  behaviour.add_inline(self.climb_checkbox, self.sit_checkbox)
189
+ behaviour.add_inline(self.settle_typing_checkbox)
172
190
 
173
191
  sound = self.add_section("section_options", "Sound and speech")
174
192
  sound.add_row(self.volume_label, self.volume_combobox)
@@ -189,6 +207,54 @@ class PetSettingUI(SettingPage):
189
207
  self.finish_body()
190
208
  self.set_footer(primary=self.start_button, status=self.ready_label)
191
209
 
210
+ def _start_typing_watch(self) -> bool:
211
+ """開始監聽按鍵(只在第一次需要時建立)。pynput 不能用時安靜跳過。"""
212
+ if self._input_watch is None:
213
+ self._input_watch = InputWatchService(self)
214
+ # 按鍵在 pynput 自己的執行緒觸發,一定要排回 UI 執行緒才能碰 widget。
215
+ # Keys fire on pynput's own thread; this has to hop to the UI thread
216
+ # before touching any widget.
217
+ self._input_watch.key_pressed.connect(
218
+ self._on_key_pressed, Qt.ConnectionType.QueuedConnection)
219
+ # start() 本身是冪等的:已經在監聽時再呼叫不會多開一個 listener。
220
+ # start() is idempotent: calling it again does not add a second listener.
221
+ return self._input_watch.start(keyboard=True, mouse=False)
222
+
223
+ def _stop_typing_watch(self) -> None:
224
+ """停止監聽並讓所有寵物恢復走動。"""
225
+ self._settle_timer.stop()
226
+ self._typing_watch.clear()
227
+ if self._input_watch is not None:
228
+ self._input_watch.stop()
229
+ self._apply_settled(False)
230
+
231
+ def _on_settle_typing_toggled(self) -> None:
232
+ if self.settle_typing_checkbox.isChecked():
233
+ if self.pet_list:
234
+ self._start_typing_watch()
235
+ else:
236
+ # 關掉時一定要放行。少了這一步,剛好在打字時關掉這個選項的寵物會
237
+ # 永遠停在原地——看起來就是寵物壞了。
238
+ # Releasing on the way out matters: switched off mid-keystroke
239
+ # without it, the pet stays frozen for good and simply looks broken.
240
+ self._stop_typing_watch()
241
+
242
+ def _on_key_pressed(self, _keys) -> None:
243
+ """有人按了鍵:寵物先停下來,停手一段時間後再放行。"""
244
+ if not self.settle_typing_checkbox.isChecked():
245
+ return
246
+ self._typing_watch.note_key()
247
+ self._apply_settled(True)
248
+ self._settle_timer.start(int(self._typing_watch.settle_seconds * 1000))
249
+
250
+ def _apply_settled(self, settled: bool) -> None:
251
+ """把安分狀態套到目前所有寵物身上。"""
252
+ for pet in self.pet_list[:]:
253
+ try:
254
+ pet.motion.settled = settled
255
+ except RuntimeError: # pragma: no cover - 底層物件已消失
256
+ continue
257
+
192
258
  def _spawn_pet(self) -> None:
193
259
  """建立、顯示並開始移動一隻寵物(供 Start 與右鍵複製共用)。"""
194
260
  if not self.pet_image_path:
@@ -215,6 +281,9 @@ class PetSettingUI(SettingPage):
215
281
  if self.audio_react_checkbox.isChecked():
216
282
  pet.set_audio_level_provider(self._audio_provider(geometry))
217
283
  pet.set_pet_window_flag()
284
+ if self.settle_typing_checkbox.isChecked():
285
+ pet.motion.settled = self._typing_watch.typing()
286
+ self._start_typing_watch()
218
287
  self.pet_list.append(pet)
219
288
  pet.show()
220
289
  self._start_tag_game()
@@ -0,0 +1,73 @@
1
+ """
2
+ 「使用者正在打字嗎」——用來讓桌寵在打字時安分下來。
3
+
4
+ 桌寵在螢幕上到處跑,是打字時最常被抱怨的一點:牠正好跑過你在看的那一行。這裡只
5
+ 記住最後一次按鍵的時間,讓呼叫端問「現在算不算在打字」。
6
+
7
+ 時鐘可以注入,所以測試不必真的等兩秒。
8
+
9
+ "Is the user typing?" - so the desktop pet can settle down while they are.
10
+
11
+ A pet wandering across the screen is the thing people complain about most while
12
+ typing: it walks over the line you are reading. This only remembers when the last
13
+ key went down and lets the caller ask whether that counts as typing now.
14
+
15
+ The clock is injectable, so tests do not wait two seconds.
16
+ """
17
+ from __future__ import annotations
18
+
19
+ import time
20
+ from typing import Any, Callable, Optional
21
+
22
+ DEFAULT_SETTLE_SECONDS = 2.0
23
+ MIN_SETTLE_SECONDS = 0.5
24
+ MAX_SETTLE_SECONDS = 30.0
25
+
26
+
27
+ def clamp_settle_seconds(value: Any, fallback: float = DEFAULT_SETTLE_SECONDS) -> float:
28
+ """安分的持續時間夾在 0.5 到 30 秒。"""
29
+ try:
30
+ return max(MIN_SETTLE_SECONDS, min(MAX_SETTLE_SECONDS, float(value)))
31
+ except (TypeError, ValueError):
32
+ return fallback
33
+
34
+
35
+ class TypingWatch:
36
+ """
37
+ 記住最後一次按鍵的時間,回答「現在還算在打字嗎」。
38
+
39
+ 用單調時鐘而不是牆上時鐘:系統時間被調整(校時、換時區)時,牆上時鐘會讓
40
+ 「距離上次按鍵幾秒」變成負數或一大跳,寵物就會莫名其妙卡住或突然衝出去。
41
+ Remembers when the last key went down and answers whether that still counts
42
+ as typing.
43
+
44
+ On a monotonic clock rather than the wall clock: when the system time is
45
+ adjusted - an NTP step, a timezone change - a wall clock makes "seconds since
46
+ the last key" negative or wildly large, and the pet either freezes for no
47
+ reason or bolts.
48
+ """
49
+
50
+ def __init__(self, settle_seconds: Any = DEFAULT_SETTLE_SECONDS,
51
+ clock: Callable[[], float] = time.monotonic) -> None:
52
+ self.settle_seconds = clamp_settle_seconds(settle_seconds)
53
+ self._clock = clock
54
+ self._last_key: Optional[float] = None
55
+
56
+ def note_key(self) -> None:
57
+ """記下這一刻有人按了鍵。"""
58
+ self._last_key = self._clock()
59
+
60
+ def clear(self) -> None:
61
+ """忘掉先前的按鍵(功能關掉時用,免得寵物停在原地不動)。"""
62
+ self._last_key = None
63
+
64
+ def seconds_since_key(self) -> Optional[float]:
65
+ """距離上次按鍵幾秒;還沒按過就是 None。"""
66
+ if self._last_key is None:
67
+ return None
68
+ return max(0.0, self._clock() - self._last_key)
69
+
70
+ def typing(self) -> bool:
71
+ """現在算不算在打字。"""
72
+ elapsed = self.seconds_since_key()
73
+ return elapsed is not None and elapsed < self.settle_seconds
@@ -46,6 +46,7 @@ english_word_dict = {
46
46
  "tools_shape": "Shape",
47
47
  "tools_name": "Name",
48
48
  "tools_saved": "Saved",
49
+ "pet_settle_typing": "Settle while typing",
49
50
  "target_monitor_span": "Span all screens",
50
51
  "tools_replicate_window": "Replicate a window...",
51
52
  "window_replica_title": "Replicate a window",
@@ -47,6 +47,7 @@ french_word_dict = {
47
47
  "tools_shape": "Forme",
48
48
  "tools_name": "Nom",
49
49
  "tools_saved": "Enregistrés",
50
+ "pet_settle_typing": "Rester tranquille pendant la frappe",
50
51
  "target_monitor_span": "Sur tous les écrans",
51
52
  "tools_replicate_window": "Dupliquer une fenêtre...",
52
53
  "window_replica_title": "Dupliquer une fenêtre",
@@ -47,6 +47,7 @@ germany_word_dict = {
47
47
  "tools_shape": "Form",
48
48
  "tools_name": "Name",
49
49
  "tools_saved": "Gespeichert",
50
+ "pet_settle_typing": "Beim Tippen still halten",
50
51
  "target_monitor_span": "Über alle Bildschirme",
51
52
  "tools_replicate_window": "Fenster duplizieren...",
52
53
  "window_replica_title": "Fenster duplizieren",
@@ -47,6 +47,7 @@ italian_word_dict = {
47
47
  "tools_shape": "Forma",
48
48
  "tools_name": "Nome",
49
49
  "tools_saved": "Salvati",
50
+ "pet_settle_typing": "Fermo mentre scrivi",
50
51
  "target_monitor_span": "Su tutti gli schermi",
51
52
  "tools_replicate_window": "Duplica una finestra...",
52
53
  "window_replica_title": "Duplica una finestra",
@@ -47,6 +47,7 @@ russian_word_dict = {
47
47
  "tools_shape": "Форма",
48
48
  "tools_name": "Имя",
49
49
  "tools_saved": "Сохранённые",
50
+ "pet_settle_typing": "Не двигаться при наборе текста",
50
51
  "target_monitor_span": "На все экраны",
51
52
  "tools_replicate_window": "Копия окна...",
52
53
  "window_replica_title": "Копия окна",
@@ -47,6 +47,7 @@ simplified_chinese_word_dict = {
47
47
  "tools_shape": "形状",
48
48
  "tools_name": "名称",
49
49
  "tools_saved": "已保存",
50
+ "pet_settle_typing": "打字时安分",
50
51
  "target_monitor_span": "横跨所有屏幕",
51
52
  "tools_replicate_window": "窗口副本⋯",
52
53
  "window_replica_title": "窗口副本",
@@ -47,6 +47,7 @@ traditional_chinese_word_dict = {
47
47
  "tools_shape": "形狀",
48
48
  "tools_name": "名稱",
49
49
  "tools_saved": "已儲存",
50
+ "pet_settle_typing": "打字時安分",
50
51
  "target_monitor_span": "橫跨所有螢幕",
51
52
  "tools_replicate_window": "視窗複本⋯",
52
53
  "window_replica_title": "視窗複本",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frontengine
3
- Version: 1.0.67
3
+ Version: 1.0.68
4
4
  Summary: FrontEngine is use-define frontview or only use like screen saver
5
5
  Author-email: JE-Chen <jechenmailman@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/Intergration-Automation-Testing/FrontEngine
@@ -184,6 +184,7 @@ frontengine/utils/hotkey/__init__.py
184
184
  frontengine/utils/hotkey/hotkey_service.py
185
185
  frontengine/utils/input_watch/__init__.py
186
186
  frontengine/utils/input_watch/input_watch_service.py
187
+ frontengine/utils/input_watch/typing_watch.py
187
188
  frontengine/utils/json/__init__.py
188
189
  frontengine/utils/json/json_file.py
189
190
  frontengine/utils/json/json_repository.py
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "frontengine"
9
- version = "1.0.67"
9
+ version = "1.0.68"
10
10
  authors = [
11
11
  { name = "JE-Chen", email = "jechenmailman@gmail.com" },
12
12
  ]
File without changes
File without changes