6 Commits

Author SHA1 Message Date
6974947028 Bump version to 0.9.3 2026-01-04 12:28:13 -08:00
517ee943a9 Fix hotkey execution reliability on Windows
- Add interval parameter (50ms) between key presses in pyautogui.hotkey()
- Add small delay before hotkey execution for better Windows compatibility
- Add defensive check to handle keys stored as string instead of list

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 12:18:17 -08:00
c9d0c9812d Bump version to 0.9.2
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 19:02:36 -08:00
3521f777e9 Fix author name capitalization to ShadowDao
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 19:00:32 -08:00
8ce09fcaf6 Add author, updates, and donation links to About dialog
- Author link: shadowdao.com
- Updates link: shadowdao.com
- Donate link: liberapay.com/GoTakeAKnapp/
- Links are clickable and open in default browser

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 18:59:57 -08:00
a1a7334772 Add examples to App command dialog
Show platform-specific examples when adding or editing an App command:
- Windows: notepad.exe, paths with quotes
- Linux: firefox with URL
- macOS: open -a Safari

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 18:56:24 -08:00
5 changed files with 37 additions and 11 deletions

View File

@@ -1,6 +1,6 @@
# Configuration and constants for MacroPad Server
VERSION = "0.9.0"
VERSION = "0.9.3"
DEFAULT_PORT = 40000
# UI Theme colors

View File

@@ -243,7 +243,15 @@ class CommandBuilder(QWidget):
elif cmd_type == "app":
from PySide6.QtWidgets import QInputDialog
cmd, ok = QInputDialog.getText(self, "App Command", "Enter application command:")
cmd, ok = QInputDialog.getText(
self, "App Command",
"Enter application command:\n\n"
"Examples:\n"
" Windows: notepad.exe\n"
" Windows: \"C:\\Program Files\\App\\app.exe\"\n"
" Linux: firefox https://example.com\n"
" macOS: open -a Safari"
)
if not ok or not cmd:
return
command["command"] = cmd
@@ -314,7 +322,13 @@ class CommandBuilder(QWidget):
elif cmd_type == "app":
text, ok = QInputDialog.getText(
self, "Edit App", "Enter application command:",
self, "Edit App",
"Enter application command:\n\n"
"Examples:\n"
" Windows: notepad.exe\n"
" Windows: \"C:\\Program Files\\App\\app.exe\"\n"
" Linux: firefox https://example.com\n"
" macOS: open -a Safari",
text=cmd.get("command", "")
)
if ok and text:

View File

@@ -540,13 +540,20 @@ class MainWindow(QMainWindow):
def show_about(self):
"""Show about dialog."""
QMessageBox.about(
self, "About MacroPad Server",
f"MacroPad Server v{VERSION}\n\n"
"A cross-platform macro management application\n"
"with desktop and web interfaces.\n\n"
"PWA-enabled for mobile devices."
about_box = QMessageBox(self)
about_box.setWindowTitle("About MacroPad Server")
about_box.setTextFormat(Qt.RichText)
about_box.setTextInteractionFlags(Qt.TextBrowserInteraction)
about_box.setText(
f"<h2>MacroPad Server v{VERSION}</h2>"
"<p>A cross-platform macro management application<br>"
"with desktop and web interfaces.</p>"
"<p><b>Author:</b> <a href='https://shadowdao.com'>ShadowDao</a></p>"
"<p><b>Updates:</b> <a href='https://shadowdao.com'>shadowdao.com</a></p>"
"<p><b>Donate:</b> <a href='https://liberapay.com/GoTakeAKnapp/'>Liberapay</a></p>"
)
about_box.setStandardButtons(QMessageBox.Ok)
about_box.exec()
def closeEvent(self, event):
"""Handle window close."""

View File

@@ -302,7 +302,12 @@ class MacroManager:
# Press key combination
keys = cmd.get("keys", [])
if keys:
pyautogui.hotkey(*keys)
# Ensure keys is a list, not a string
if isinstance(keys, str):
keys = [k.strip().lower() for k in keys.split(",")]
# Small delay before hotkey for reliability on Windows
time.sleep(0.05)
pyautogui.hotkey(*keys, interval=0.05)
elif cmd_type == "wait":
# Delay in milliseconds

View File

@@ -86,7 +86,7 @@ app = BUNDLE(
icon='Macro Pad.png',
bundle_identifier='com.macropad.server',
info_plist={
'CFBundleShortVersionString': '0.9.0',
'CFBundleShortVersionString': '0.9.2',
'CFBundleName': 'MacroPad Server',
'NSHighResolutionCapable': True,
},