StartMenu

This commit is contained in:
sonichy
2025-06-03 21:40:49 +08:00
parent 4c0a0bb7a9
commit 3316b29ac0
5 changed files with 106 additions and 0 deletions

15
StartMenu@sonichy/README.md Executable file
View File

@@ -0,0 +1,15 @@
# StartMenu_GNOME
Display start menu on GNOME taskbar.
![alt](preview.png)
## Changelog
### V1.0 (2025-06-01)
Display start menu on GNOME taskbar.
## Reference
[Guide](https://gjs.guide/extensions/development/creating.html)
[BingWallpaper](https://extensions.gnome.org/extension/8081/bing-wallpaper/)
[ArcMenu](/usr/share/gnome-shell/extensions/arcmenu@arcmenu.com)
## Debug
dbus-run-session -- gnome-shell --nested --wayland

81
StartMenu@sonichy/extension.js Executable file
View File

@@ -0,0 +1,81 @@
import Gio from 'gi://Gio';
import St from 'gi://St';
import Shell from 'gi://Shell';
import GMenu from 'gi://GMenu';
import { Extension } from 'resource:///org/gnome/shell/extensions/extension.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
import * as SystemActions from 'resource:///org/gnome/shell/misc/systemActions.js';
export default class DatetimeExtension extends Extension {
enable() {
let indicator = new PanelMenu.Button(0.0, this.metadata.name, false);
let gicon = Gio.icon_new_for_string(this.dir.get_path() + '/gnome.svg');
const icon = new St.Icon({
gicon: gicon,
style_class: 'system-status-icon'
});
indicator.add_child(icon);
// /usr/share/gnome-shell/extensions/arcmenu@arcmenu.com/menulayouts/baseMenuLayout.js
let appSys = Shell.AppSystem.get_default();
let tree = new GMenu.Tree({ menu_basename: 'applications.menu' });
tree.load_sync();
const root = tree.get_root_directory();
const iter = root.iter();
let nextType;
while ((nextType = iter.next())) {
//console.log(nextType);
if (nextType == GMenu.TreeItemType.DIRECTORY) {
const dir = iter.get_directory();
//console.log(dir.get_name());
// https://gjs.guide/extensions/topics/popup-menu.html#popupsubmenumenuitem
let menuItem = new PopupMenu.PopupSubMenuMenuItem(dir.get_name(), true, {});
// /usr/share/gnome-shell/extensions/arcmenu@arcmenu.com/menulayouts/utils.js
//console.log(dir.get_icon().to_string());
menuItem.icon.icon_name = dir.get_icon().to_string();
indicator.menu.addMenuItem(menuItem);
let iter1 = dir.iter();
let nextType1;
while (nextType1 = iter1.next()) {
if (nextType1 == GMenu.TreeItemType.ENTRY) {
let id = iter1.get_entry().get_desktop_file_id();
let app = appSys.lookup_app(id);
// https://gjs.guide/extensions/topics/popup-menu.html, addAction(title, callback, icon)
//menuItem.menu.addAction(app.get_name(), () => app.open_new_window(-1), app.get_icon().to_string()); //路径图标不显示
menuItem.menu.addAction(app.get_name(), () => app.open_new_window(-1), Gio.icon_new_for_string(app.get_icon().to_string()));
}
}
}
}
var menuItem = new PopupMenu.PopupImageMenuItem('设置', 'settings', () => {
var id = 'org.gnome.Settings.desktop';
let app = appSys.lookup_app(id);
app.open_new_window(-1);
});
indicator.menu.addMenuItem(menuItem);
// Shutdown
// /usr/share/gnome-shell/extensions/arcmenu@arcmenu.com/menuButton.js
let systemActions = SystemActions.getDefault();
var menuItem = new PopupMenu.PopupSubMenuMenuItem('关机', true, {});
menuItem.icon.icon_name = 'system-shutdown';
indicator.menu.addMenuItem(menuItem);
menuItem.menu.addAction('关机', () => systemActions.activatePowerOff(), 'system-shutdown');
menuItem.menu.addAction('重启', () => systemActions.activateRestart(), 'system-reboot');
menuItem.menu.addAction('锁定', () => systemActions.activateLockScreen(), 'changes-prevent');
menuItem.menu.addAction('注销', () => systemActions.activateLogout(), 'system-log-out');
menuItem.menu.addAction('休眠', () => systemActions.activateSuspend(), 'weather-clear-night');
Main.panel.addToStatusArea(this.uuid, indicator);
}
disable() {
}
}

View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1748840746522" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10004" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M785.92 85.333333c-177.493333 0-209.92 253.013333-110.933333 253.013334 99.84 0 288.426667-253.013333 110.933333-253.013334M512 116.48c-3.413333 0-6.4 0-9.386667 0.426667-99.84 12.8-64.853333 186.88-11.946666 189.866666 52.053333 3.413333 108.373333-190.293333 21.333333-190.293333M338.346667 185.173333c-5.12 0-11.093333 1.28-17.066667 3.84-80.213333 33.28-12.373333 169.813333 32.853333 160.853334 41.386667-8.533333 46.506667-166.4-15.786666-164.693334m-128 107.093334c-6.826667-0.426667-14.506667 2.133333-22.186667 7.68-64.426667 44.373333 21.333333 151.466667 59.306667 134.826666 32.853333-14.506667 11.946667-140.8-37.12-142.506666m356.693333 81.92c-136.106667 1.28-309.76 70.4-340.053333 205.653333C193.28 730.026667 365.226667 938.666667 544.426667 938.666667c88.32 0 189.866667-79.786667 209.066666-180.48 14.506667-76.8-171.093333-46.08-164.266666 4.693333 8.106667 61.013333-44.8 90.453333-96.426667 52.053333-164.693333-125.44 272.213333-187.733333 243.2-358.826666-9.386667-55.466667-81.493333-82.346667-168.96-81.92z" fill="#7dc5eb" p-id="10005"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,9 @@
{
"uuid": "StartMenu@sonichy",
"name": "StartMenu",
"description": "Display application list on GNOME taskbar",
"author": "sonichy",
"version": "1.0",
"shell-version": [ "45", "46", "47", "48" ],
"url": "https://github.com/sonichy/GNOME_extension"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 MiB