diff --git a/CMUD@sonichy/preview.png b/CMUD@sonichy/preview.png index 17b6da9..4ed8bc6 100644 Binary files a/CMUD@sonichy/preview.png and b/CMUD@sonichy/preview.png differ diff --git a/datetime@sonichy/README.md b/datetime@sonichy/README.md index 15bc584..af6076e 100755 --- a/datetime@sonichy/README.md +++ b/datetime@sonichy/README.md @@ -3,13 +3,23 @@ Display date and time on GNOME taskbar. ![alt](preview.png) ## Changelog +### V1.1 (2025-05-12) +Support set memo text in tooltip. ### V1.0 (2025-04-22) Display date and time on GNOME taskbar. ## Reference -[Guide](https://gjs.guide/extensions/development/creating.html) -[Cinnamon_Applet](https://github.com/sonichy/Cinnamon_Applet) -[Calendar](https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/dateMenu.js#L901) +[Guide](https://gjs.guide/extensions/development/creating.html) +[Cinnamon_Applet](https://github.com/sonichy/Cinnamon_Applet) +[Calendar](https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/dateMenu.js#L901) +[Tooltip](https://gitlab.com/arcmenu/ArcMenu) +[Dialog](https://gjs.guide/extensions/topics/dialogs.html) +[Settings](https://gjs.guide/extensions/development/preferences.html) +[Settings](https://gjs.guide/guides/gtk/3/16-settings.html#title:-application-settings) + +## GSettings schema must be compiled +`glib-compile-schemas schemas/` ## Debug -dbus-run-session -- gnome-shell --nested --wayland +dbus-run-session -- gnome-shell --nested --wayland +dconf-editor diff --git a/datetime@sonichy/extension.js b/datetime@sonichy/extension.js index 6edf328..e8addf2 100755 --- a/datetime@sonichy/extension.js +++ b/datetime@sonichy/extension.js @@ -1,5 +1,8 @@ import GLib from "gi://GLib"; import St from 'gi://St'; +import Clutter from "gi://Clutter"; +import Gio from 'gi://Gio'; +import * as Dialog from 'resource:///org/gnome/shell/ui/dialog.js'; import { Extension } from 'resource:///org/gnome/shell/extensions/extension.js'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; @@ -12,27 +15,61 @@ export default class DatetimeExtension extends Extension { enable() { this._indicator = new PanelMenu.Button(0.0, this.metadata.name, false); - var label = new St.Label({ text: '00:00\n1/1 一' }); - label.set_style('text-align:center'); + var label = new St.Label({ text: '00:00\n1/1 一', x_align: Clutter.ActorAlign.CENTER, y_align: Clutter.ActorAlign.CENTER }); this._indicator.add_child(label); Main.panel.addToStatusArea(this.uuid, this._indicator); - const menuItem = new PopupMenu.PopupMenuItem(''); + const menu_calendar = new PopupMenu.PopupMenuItem(''); //https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/dateMenu.js#L901 - let calendar = new Calendar.Calendar(); - menuItem.add_child(calendar); - menuItem.height = 300; + let calendar = new Calendar.Calendar(); let now = new Date(); - calendar.setDate(now); - this._indicator.menu.addMenuItem(menuItem); + calendar.setDate(now); + menu_calendar.add_child(calendar); + menu_calendar.height = 300; + this._indicator.menu.addMenuItem(menu_calendar); - //const menuItem1 = new PopupMenu.PopupMenuItem(''); - //menuItem1.label.set_style('text-align:center'); //无效 - //this._indicator.menu.addMenuItem(menuItem1); + //https://gjs.guide/extensions/development/preferences.html + const schema = 'org.gnome.shell.extensions.datetime'; + this._settings = this.getSettings(schema); - this.label_tooltip = new St.Label({ text: '' }); - this.label_tooltip.set_style('background:#222;padding:10px;border:1px solid #aaa;border-radius:10px;'); + const menu_set = new PopupMenu.PopupMenuItem('Set'); + menu_set.connect('activate', () => { + //https://gjs.guide/extensions/topics/dialogs.html + const dialog = new Dialog.Dialog(global.stage, 'my-dialog'); + + const box = new St.BoxLayout(); + const label = new St.Label({ text: 'Memo', y_align: Clutter.ActorAlign.CENTER }); + label.style = 'margin:0 10px;'; + box.add_child(label); + + var s = this._settings.get_string('memo'); + const entry = new St.Entry({ text: s }); + entry.width = 200; + box.add_child(entry); + + dialog.contentLayout.add_child(box); + + dialog.addButton({ + label: 'Save', + action: () => { + this._settings.set_string('memo', entry.text); + dialog.destroy(); + }, + }); + dialog.addButton({ + label: 'Close', + isDefault: true, + action: () => { + dialog.destroy(); + }, + }); + dialog.set_position(parseInt(global.stage.width/2 - dialog.width/2), parseInt(global.stage.height/2 - dialog.height/2)); + }); + this._indicator.menu.addMenuItem(menu_set); + + this.label_tooltip = new St.Label(); + this.label_tooltip.set_style('background:#222; padding:10px; border:1px solid #aaa; border-radius:10px;'); global.stage.add_child(this.label_tooltip); this.label_tooltip.hide(); this._indicator.connect('notify::hover', () => { @@ -41,12 +78,13 @@ export default class DatetimeExtension extends Extension { if (x == 0 && y != 0) //LEFT this.label_tooltip.set_position(x + this._indicator.width + 1, y); else if (x != 0 && y == 0) //TOP - this.label_tooltip.set_position(x, y + this._indicator.height + 1); + this.label_tooltip.set_position(x - this.label_tooltip.width / 2 + this._indicator.width / 2, y + this._indicator.height + 1); else if (this._indicator.height == Main.panel.height) //BOTTOM - this.label_tooltip.set_position(x, y - this.label_tooltip.height - 1); + this.label_tooltip.set_position(parseInt(x - this.label_tooltip.width / 2 + this._indicator.width / 2), y - this.label_tooltip.height - 1); else //RIGHT this.label_tooltip.set_position(x - this.label_tooltip.width - 1, y); + //console.log(x - this.label_tooltip.width / 2 + this._indicator.width / 2); if (this._indicator.hover) this.label_tooltip.show(); else @@ -64,10 +102,10 @@ export default class DatetimeExtension extends Extension { var day = date.getDay(); var weekday = ["日", "一", "二", "三", "四", "五", "六"]; var weekday1 = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]; - var text = h + ' : ' + m + '\n' + (date.getMonth() + 1) + '/' + date.getDate() + ' ' + weekday[day]; + var text = h + ':' + m + '\n' + (date.getMonth() + 1) + '/' + date.getDate() + ' ' + weekday[day]; label.set_text(text); - //menuItem1.label.text = date.toLocaleString() + ' ' + weekday1[day]; - this.label_tooltip.text = date.toLocaleString() + ' ' + weekday1[day]; + var s = this._settings.get_string('memo'); + this.label_tooltip.text = date.toLocaleString() + ' ' + weekday1[day] + '\n' + s; // Run as loop, not once. return GLib.SOURCE_CONTINUE; }); @@ -80,9 +118,10 @@ export default class DatetimeExtension extends Extension { this._timeout = null; } this.label_tooltip?.destroy(); - this.label_tooltip = null; + this.label_tooltip = null; this._indicator?.destroy(); - this._indicator = null; + this._indicator = null; + this._settings = null; } } diff --git a/datetime@sonichy/metadata.json b/datetime@sonichy/metadata.json index e188f33..c579b41 100755 --- a/datetime@sonichy/metadata.json +++ b/datetime@sonichy/metadata.json @@ -1,9 +1,10 @@ { "uuid": "datetime@sonichy", "name": "datetime", + "settings-schema": "org.gnome.shell.extensions.datetime", "description": "Display date and time on GNOME taskbar", "author": "sonichy", "version": "1.0", "shell-version": [ "45", "46", "47", "48" ], - "url": "https://github.com/sonichy/GNOME_extension" + "url": "https://github.com/sonichy/GNOME_extension" } diff --git a/datetime@sonichy/preview.png b/datetime@sonichy/preview.png index 8c31c19..44ba6c4 100644 Binary files a/datetime@sonichy/preview.png and b/datetime@sonichy/preview.png differ diff --git a/datetime@sonichy/schemas/gschemas.compiled b/datetime@sonichy/schemas/gschemas.compiled new file mode 100644 index 0000000..68edbb6 Binary files /dev/null and b/datetime@sonichy/schemas/gschemas.compiled differ diff --git a/datetime@sonichy/schemas/org.gnome.shell.extensions.datetime.gschema.xml b/datetime@sonichy/schemas/org.gnome.shell.extensions.datetime.gschema.xml new file mode 100644 index 0000000..93c450b --- /dev/null +++ b/datetime@sonichy/schemas/org.gnome.shell.extensions.datetime.gschema.xml @@ -0,0 +1,10 @@ + + + + + "" + Set memo + Show this in tooltip + + +