diff --git a/aux/flatpak/space.arimelody.LiveSchedule.json b/aux/flatpak/space.arimelody.LiveSchedule.json index aad748e..9786ab7 100644 --- a/aux/flatpak/space.arimelody.LiveSchedule.json +++ b/aux/flatpak/space.arimelody.LiveSchedule.json @@ -1,7 +1,7 @@ { "id" : "space.arimelody.LiveSchedule", "runtime" : "org.gnome.Platform", - "runtime-version" : "48", + "runtime-version" : "master", "sdk" : "org.gnome.Sdk", "command" : "liveschedule", "finish-args" : [ diff --git a/main.js b/main.js index 2c034a2..60b92df 100644 --- a/main.js +++ b/main.js @@ -14,6 +14,8 @@ let schedule = { const offlineTitle = 'OFFLINE'; const offlineSubtitle = 'takin a nap'; +let copyClipboard; +let saveImage; document.addEventListener('readystatechange', () => { document.getElementById('version').innerText = VERSION; @@ -118,7 +120,7 @@ if ('webkit' in window && 'messageHandlers' in window.webkit) { let _promiseId = 0; let _promises = new Map(); - window.webkit.messageHandlers._nativePromiseResolved.addEventListener('message', (event) => { + window.addEventListener('message', (event) => { const [id] = event.detail; const [resolve,] = _promises.get(id) ?? []; if (!resolve) return; @@ -126,7 +128,7 @@ if ('webkit' in window && 'messageHandlers' in window.webkit) { resolve(); }); - window.webkit.messageHandlers._nativePromiseRejected.addEventListener('message', (event) => { + window.addEventListener('message', (event) => { const [id] = event.detail; const [,reject] = _promises.get(id) ?? []; if (!reject) return; @@ -134,45 +136,41 @@ if ('webkit' in window && 'messageHandlers' in window.webkit) { reject(); }); - function copyClipboard() { - return new Promise((resolve, reject) => { - const thisPromiseId = ++promiseId; + copyClipboard = () => new Promise((resolve, reject) => { + const thisPromiseId = ++_promiseId; - _promises.set(thisPromiseId, [resolve, reject]); + _promises.set(thisPromiseId, [resolve, reject]); - const schedule = document.getElementById('schedule'); - const boundingRect = getBoundingClientRect(); + const schedule = document.getElementById('schedule'); + const boundingRect = schedule.getBoundingClientRect(); - window.webkit.messageHandlers.copySnapshot.postMessage([ - thisPromiseId, - 'clipboard', - boundingRect.x, - boundingRect.y, - boundingRect.width, - boundingRect.height, - ]); - }); - } + window.webkit.messageHandlers.copySnapshot.postMessage([ + thisPromiseId, + 'clipboard', + boundingRect.x + 1, + boundingRect.y + 1, + boundingRect.width - 2, + boundingRect.height - 2, + ]); + }); - function saveImage() { - return new Promise((resolve, reject) => { - const thisPromiseId = ++promiseId; + saveImage = () => new Promise((resolve, reject) => { + const thisPromiseId = ++_promiseId; - _promises.set(thisPromiseId, [resolve, reject]); + _promises.set(thisPromiseId, [resolve, reject]); - const schedule = document.getElementById('schedule'); - const boundingRect = getBoundingClientRect(); + const schedule = document.getElementById('schedule'); + const boundingRect = schedule.getBoundingClientRect(); - window.webkit.messageHandlers.copySnapshot.postMessage([ - thisPromiseId, - 'file', - boundingRect.x, - boundingRect.y, - boundingRect.width, - boundingRect.height, - ]); - }); - } + window.webkit.messageHandlers.copySnapshot.postMessage([ + thisPromiseId, + 'file', + boundingRect.x + 1, + boundingRect.y + 1, + boundingRect.width - 2, + boundingRect.height - 2, + ]); + }); document.getElementById('clipboard').removeAttribute('disabled'); document.getElementById('save-image').removeAttribute('disabled'); diff --git a/native/src/ls-web-view.c b/native/src/ls-web-view.c index 1f18003..cbafdac 100644 --- a/native/src/ls-web-view.c +++ b/native/src/ls-web-view.c @@ -34,11 +34,14 @@ static void ls_web_view_constructed(GObject *object) { ls_web_view_on_resource_request, NULL, NULL); + WebKitSettings *settings = webkit_web_view_get_settings(WEBKIT_WEB_VIEW(object)); + webkit_settings_set_enable_developer_extras(settings, TRUE); + WebKitUserContentManager *manager = webkit_web_view_get_user_content_manager(web_view); + webkit_user_content_manager_register_script_message_handler(manager, "copySnapshot", NULL); g_signal_connect(manager, "script-message-received::copySnapshot", G_CALLBACK(ls_web_view_on_snapshot_message_received), g_object_ref(object)); - webkit_user_content_manager_register_script_message_handler(manager, "copySnapshot", NULL); webkit_web_view_load_uri(web_view, "gresource:///space/arimelody/LiveSchedule/webview/index.html"); }