This commit is contained in:
Hariharan Mudaliar 2025-08-13 23:45:04 +05:30
commit eac9f69977
3 changed files with 63 additions and 16 deletions

View file

@ -75,13 +75,48 @@ class ClipboardPanel: NSPanel {
let screenFrame = screen.visibleFrame
let panelFrame = frame
// Position at top center of screen (near where the notch would be)
// Check if we have a saved position
if let savedPosition = getSavedPosition() {
// Validate saved position is still on screen
let savedFrame = NSRect(origin: savedPosition, size: panelFrame.size)
if screenFrame.intersects(savedFrame) {
setFrameOrigin(savedPosition)
return
}
}
// Default to center of screen (not top center)
let xPosition = (screenFrame.width - panelFrame.width) / 2 + screenFrame.minX
let yPosition = screenFrame.maxY - panelFrame.height - 10 // 10px from top
let yPosition = (screenFrame.height - panelFrame.height) / 2 + screenFrame.minY
setFrameOrigin(NSPoint(x: xPosition, y: yPosition))
}
private func getSavedPosition() -> NSPoint? {
let defaults = UserDefaults.standard
let x = defaults.double(forKey: "clipboardPanelPositionX")
let y = defaults.double(forKey: "clipboardPanelPositionY")
// Check if we have valid saved coordinates (not default 0.0)
if x != 0.0 || y != 0.0 {
return NSPoint(x: x, y: y)
}
return nil
}
private func saveCurrentPosition() {
let currentOrigin = frame.origin
let defaults = UserDefaults.standard
defaults.set(currentOrigin.x, forKey: "clipboardPanelPositionX")
defaults.set(currentOrigin.y, forKey: "clipboardPanelPositionY")
}
override func setFrameOrigin(_ point: NSPoint) {
super.setFrameOrigin(point)
// Save position whenever it changes (user dragging)
saveCurrentPosition()
}
func positionNearMouse() {
let mouseLocation = NSEvent.mouseLocation
let panelFrame = frame

View file

@ -1324,8 +1324,8 @@ struct TimerSettings: View {
Text("Custom Timer Duration")
.font(.headline)
HStack(spacing: 16) {
VStack {
HStack(spacing: 20) {
VStack(alignment: .center, spacing: 8) {
Text("Minutes")
.font(.system(size: 14, weight: .medium))
.foregroundStyle(.secondary)
@ -1336,10 +1336,10 @@ struct TimerSettings: View {
}
}
.pickerStyle(.menu)
.frame(width: 80, height: 40)
.frame(width: 100)
}
VStack {
VStack(alignment: .center, spacing: 8) {
Text("Seconds")
.font(.system(size: 14, weight: .medium))
.foregroundStyle(.secondary)
@ -1350,20 +1350,32 @@ struct TimerSettings: View {
}
}
.pickerStyle(.menu)
.frame(width: 80, height: 40)
.frame(width: 100)
}
}
.frame(maxWidth: .infinity)
HStack {
Text("Current custom timer: \(customTimerDisplayText)")
.foregroundStyle(.secondary)
Spacer()
Button("Update") {
customTimerDuration = Double(customMinutes * 60 + customSeconds)
VStack(alignment: .leading, spacing: 8) {
HStack {
Text("Current custom timer:")
.foregroundStyle(.secondary)
Text(customTimerDisplayText)
.foregroundStyle(.primary)
.fontWeight(.medium)
Spacer()
}
HStack {
Spacer()
Button("Update Timer") {
customTimerDuration = Double(customMinutes * 60 + customSeconds)
}
.disabled(customMinutes == 0 && customSeconds == 0)
.buttonStyle(.borderedProminent)
}
.disabled(customMinutes == 0 && customSeconds == 0)
}
}
.padding(.vertical, 8)
} header: {
Text("Custom Timer")
} footer: {