mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-25 17:52:02 +02:00
Merge branch 'macos-notifications-add-subtitle' of https://github.com/Luflosi/kitty into master
This commit is contained in:
@@ -1569,7 +1569,7 @@ class Boss:
|
|||||||
from .notify import notify
|
from .notify import notify
|
||||||
now = monotonic()
|
now = monotonic()
|
||||||
ident = f'test-notify-{now}'
|
ident = f'test-notify-{now}'
|
||||||
notify(f'Test {now}', f'At: {now}', identifier=ident)
|
notify(f'Test {now}', f'At: {now}', identifier=ident, subtitle=f'Test subtitle {now}')
|
||||||
|
|
||||||
def notification_activated(self, identifier: str, window_id: int, focus: bool, report: bool) -> None:
|
def notification_activated(self, identifier: str, window_id: int, focus: bool, report: bool) -> None:
|
||||||
w = self.window_id_map.get(window_id)
|
w = self.window_id_map.get(window_id)
|
||||||
|
|||||||
@@ -156,13 +156,14 @@ static PyObject *notification_activated_callback = NULL;
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
schedule_notification(const char *identifier, const char *title, const char *body) {
|
schedule_notification(const char *identifier, const char *title, const char *body, const char *subtitle) {
|
||||||
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
|
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
|
||||||
if (!center) return;
|
if (!center) return;
|
||||||
// Configure the notification's payload.
|
// Configure the notification's payload.
|
||||||
UNMutableNotificationContent* content = [[UNMutableNotificationContent alloc] init];
|
UNMutableNotificationContent* content = [[UNMutableNotificationContent alloc] init];
|
||||||
if (title) content.title = @(title);
|
if (title) content.title = @(title);
|
||||||
if (body) content.body = @(body);
|
if (body) content.body = @(body);
|
||||||
|
if (subtitle) content.subtitle = @(subtitle);
|
||||||
// Deliver the notification
|
// Deliver the notification
|
||||||
static unsigned long counter = 1;
|
static unsigned long counter = 1;
|
||||||
UNNotificationRequest* request = [
|
UNNotificationRequest* request = [
|
||||||
@@ -178,7 +179,7 @@ schedule_notification(const char *identifier, const char *title, const char *bod
|
|||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *identifier, *title, *body;
|
char *identifier, *title, *body, *subtitle;
|
||||||
} QueuedNotification;
|
} QueuedNotification;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -188,12 +189,13 @@ typedef struct {
|
|||||||
static NotificationQueue notification_queue = {0};
|
static NotificationQueue notification_queue = {0};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
queue_notification(const char *identifier, const char *title, const char* body) {
|
queue_notification(const char *identifier, const char *title, const char* body, const char* subtitle) {
|
||||||
ensure_space_for((¬ification_queue), notifications, QueuedNotification, notification_queue.count + 16, capacity, 16, true);
|
ensure_space_for((¬ification_queue), notifications, QueuedNotification, notification_queue.count + 16, capacity, 16, true);
|
||||||
QueuedNotification *n = notification_queue.notifications + notification_queue.count++;
|
QueuedNotification *n = notification_queue.notifications + notification_queue.count++;
|
||||||
n->identifier = identifier ? strdup(identifier) : NULL;
|
n->identifier = identifier ? strdup(identifier) : NULL;
|
||||||
n->title = title ? strdup(title) : NULL;
|
n->title = title ? strdup(title) : NULL;
|
||||||
n->body = body ? strdup(body) : NULL;
|
n->body = body ? strdup(body) : NULL;
|
||||||
|
n->subtitle = subtitle ? strdup(subtitle) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -201,13 +203,13 @@ drain_pending_notifications(BOOL granted) {
|
|||||||
if (granted) {
|
if (granted) {
|
||||||
for (size_t i = 0; i < notification_queue.count; i++) {
|
for (size_t i = 0; i < notification_queue.count; i++) {
|
||||||
QueuedNotification *n = notification_queue.notifications + i;
|
QueuedNotification *n = notification_queue.notifications + i;
|
||||||
schedule_notification(n->identifier, n->title, n->body);
|
schedule_notification(n->identifier, n->title, n->body, n->subtitle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while(notification_queue.count) {
|
while(notification_queue.count) {
|
||||||
QueuedNotification *n = notification_queue.notifications + --notification_queue.count;
|
QueuedNotification *n = notification_queue.notifications + --notification_queue.count;
|
||||||
free(n->identifier); free(n->title); free(n->body);
|
free(n->identifier); free(n->title); free(n->body); free(n->subtitle);
|
||||||
n->identifier = NULL; n->title = NULL; n->body = NULL;
|
n->identifier = NULL; n->title = NULL; n->body = NULL; n->subtitle = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,13 +223,13 @@ set_notification_activated_callback(PyObject *self UNUSED, PyObject *callback) {
|
|||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
cocoa_send_notification(PyObject *self UNUSED, PyObject *args) {
|
cocoa_send_notification(PyObject *self UNUSED, PyObject *args) {
|
||||||
char *identifier = NULL, *title = NULL, *body = NULL;
|
char *identifier = NULL, *title = NULL, *body = NULL, *subtitle = NULL;
|
||||||
if (!PyArg_ParseTuple(args, "zsz", &identifier, &title, &body)) return NULL;
|
if (!PyArg_ParseTuple(args, "zsz|z", &identifier, &title, &body, &subtitle)) return NULL;
|
||||||
|
|
||||||
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
|
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
|
||||||
if (!center) Py_RETURN_NONE;
|
if (!center) Py_RETURN_NONE;
|
||||||
if (!center.delegate) center.delegate = [[NotificationDelegate alloc] init];
|
if (!center.delegate) center.delegate = [[NotificationDelegate alloc] init];
|
||||||
queue_notification(identifier, title, body);
|
queue_notification(identifier, title, body, subtitle);
|
||||||
|
|
||||||
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert)
|
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert)
|
||||||
completionHandler:^(BOOL granted, NSError * _Nullable error) {
|
completionHandler:^(BOOL granted, NSError * _Nullable error) {
|
||||||
|
|||||||
@@ -520,6 +520,7 @@ def cocoa_send_notification(
|
|||||||
identifier: Optional[str],
|
identifier: Optional[str],
|
||||||
title: str,
|
title: str,
|
||||||
body: Optional[str],
|
body: Optional[str],
|
||||||
|
subtitle: Optional[str],
|
||||||
) -> None:
|
) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -20,9 +20,10 @@ if is_macos:
|
|||||||
timeout: int = 5000,
|
timeout: int = 5000,
|
||||||
application: str = 'kitty',
|
application: str = 'kitty',
|
||||||
icon: bool = True,
|
icon: bool = True,
|
||||||
identifier: Optional[str] = None
|
identifier: Optional[str] = None,
|
||||||
|
subtitle: Optional[str] = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
cocoa_send_notification(identifier, title, body)
|
cocoa_send_notification(identifier, title, body, subtitle)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
@@ -48,7 +49,8 @@ else:
|
|||||||
timeout: int = -1,
|
timeout: int = -1,
|
||||||
application: str = 'kitty',
|
application: str = 'kitty',
|
||||||
icon: bool = True,
|
icon: bool = True,
|
||||||
identifier: Optional[str] = None
|
identifier: Optional[str] = None,
|
||||||
|
subtitle: Optional[str] = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
icf = ''
|
icf = ''
|
||||||
if icon is True:
|
if icon is True:
|
||||||
|
|||||||
Reference in New Issue
Block a user