-
Notifications
You must be signed in to change notification settings - Fork 0
/
extension.js
109 lines (88 loc) · 2.99 KB
/
extension.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
const Gtk = imports.gi.Gtk;
const Gio = imports.gi.Gio;
const St = imports.gi.St;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const PanelMenu = imports.ui.panelMenu;
const Lang = imports.lang;
let playerButtons = {
next: new St.Button({
reactive: true,
can_focus: true,
track_hover: true,
accessible_name: _("Next track"),
style_class: 'system-menu-action',
child: new St.Icon({icon_name: "media-skip-forward-symbolic"})
}),
previous: new St.Button({
reactive: true,
can_focus: true,
track_hover: true,
accessible_name: _("Previous track"),
style_class: 'system-menu-action',
child: new St.Icon({icon_name: "media-skip-backward-symbolic"})
}),
play: new St.Button({
reactive: true,
can_focus: true,
track_hover: true,
accessible_name: _("Play track"),
style_class: 'system-menu-action',
child: new St.Icon({icon_name: "media-playback-start-symbolic"})
})
};
function SpotifyControlMenuItem() {
this._init.apply(this, arguments);
}
SpotifyControlMenuItem.prototype = {
__proto__: PopupMenu.PopupBaseMenuItem.prototype,
_init: function (gicon, text, params) {
PopupMenu.PopupBaseMenuItem.prototype._init.call(this, params);
this.box = new St.BoxLayout({style_class: 'popup-combobox-item'});
this.icon = new St.Icon({icon_name: 'edit-clear-symbolic', icon_size: 22});
this.box.add(this.icon);
this.label = new St.Label({text: text});
this.box.add(this.label);
this.box.add(playerButtons.previous);
this.box.add(playerButtons.play);
this.box.add(playerButtons.next);
this.actor.add(this.box);
}
};
function GnomeSpotifyControl() {
this._init.apply(this, arguments);
}
GnomeSpotifyControl.prototype = {
__proto__: PanelMenu.Button.prototype,
_init: function () {
PanelMenu.Button.prototype._init.call(this, 0.0);
this.connect('destroy', Lang.bind(this, this._onDestroy));
this._iconActor = new St.Icon({
icon_name: 'spotify-client',
style_class: 'system-status-icon'
});
this.actor.add_actor(this._iconActor);
this.actor.add_style_class_name('panel-status-button');
this._display();
Main.panel.addToStatusArea('recent-items', this);
},
_onDestroy: function () {},
_display: function () {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
let menuItem = new SpotifyControlMenuItem(false, 'Clear list', {});
this.menu.addMenuItem(menuItem);
menuItem.connect('activate', Lang.bind(this, this._clearAll));
},
_clearAll: function () {
let GtkRecent = new Gtk.RecentManager();
GtkRecent.purge_items();
}
};
function init() {}
let gSpotifyControl;
function enable() {
gSpotifyControl = new GnomeSpotifyControl();
}
function disable() {
gSpotifyControl.destroy();
}