16
16
// along with this program. If not, see <http://www.gnu.org/licenses/>.
19
namespace Slingshot.Backend {
21
public class App : Object {
23
public string name { get; construct set; }
24
public string description { get; private set; default = ""; }
25
public string desktop_id { get; construct set; }
26
public string exec { get; private set; }
27
public string icon_name { get; private set; default = ""; }
28
public string[] keywords { get; private set;}
29
public Gdk.Pixbuf icon { get; private set; }
30
public double popularity { get; set; }
31
public double relevancy { get; set; }
32
public string desktop_path { get; private set; }
33
public string generic_name { get; private set; default = ""; }
35
private bool is_command = false;
37
public signal void icon_changed ();
38
public signal void launched (App app);
40
public App (GMenu.TreeEntry entry) {
41
name = entry.get_display_name ();
42
description = entry.get_comment () ?? name;
43
exec = entry.get_exec ();
44
desktop_id = entry.get_desktop_file_id ();
45
icon_name = entry.get_icon () ?? "application-default-icon";
46
desktop_path = entry.get_desktop_file_path ();
47
keywords = Unity.AppInfoManager.get_default ().get_keywords (desktop_id);
48
generic_name = entry.get_generic_name ();
51
Slingshot.icon_theme.changed.connect (update_icon);
54
public App.from_command (string command) {
57
description = _("Run this command...");
60
icon_name = "system-run";
68
public void update_icon () {
69
icon = load_icon (Slingshot.settings.icon_size);
73
private delegate void IconLoadFallback ();
75
private class IconLoadFallbackMethod {
76
public unowned IconLoadFallback load_icon;
78
public IconLoadFallbackMethod (IconLoadFallback fallback) {
83
public Gdk.Pixbuf load_icon (int size) {
84
Gdk.Pixbuf icon = null;
85
var flags = Gtk.IconLookupFlags.FORCE_SIZE;
87
IconLoadFallbackMethod[] fallbacks = {
88
new IconLoadFallbackMethod (() => {
90
icon = Slingshot.icon_theme.load_icon (icon_name, size, flags);
92
warning ("Could not load icon. Falling back to method 2");
96
new IconLoadFallbackMethod (() => {
98
if (icon_name.last_index_of (".") > 0) {
99
var name = icon_name[0:icon_name.last_index_of (".")];
100
icon = Slingshot.icon_theme.load_icon (name, size, flags);
103
warning ("Could not load icon. Falling back to method 3");
107
new IconLoadFallbackMethod (() => {
109
icon = new Gdk.Pixbuf.from_file_at_scale (icon_name, size, size, false);
111
warning ("Could not load icon. Falling back to method 4");
115
new IconLoadFallbackMethod (() => {
117
icon = Slingshot.icon_theme.load_icon ("application-default-icon", size, flags);
119
warning ("Could not load icon. Falling back to method 5");
123
new IconLoadFallbackMethod (() => {
125
icon = Slingshot.icon_theme.load_icon ("gtk-missing-image", size, flags);
127
error ("Could not find a fallback icon to load");
132
foreach (IconLoadFallbackMethod fallback in fallbacks) {
133
fallback.load_icon ();
141
public void launch () {
144
debug (@"Launching command: $name");
145
Process.spawn_command_line_async (exec);
147
launched (this); // Emit launched signal
148
new DesktopAppInfo (desktop_id).launch (null, null);
149
debug (@"Launching application: $name");
152
warning ("Failed to launch %s: %s", name, exec);
19
public class Slingshot.Backend.App : Object {
21
public string name { get; construct set; }
22
public string description { get; private set; default = ""; }
23
public string desktop_id { get; construct set; }
24
public string exec { get; private set; }
25
public string icon_name { get; private set; default = ""; }
26
public string[] keywords { get; private set;}
27
public Gdk.Pixbuf icon { get; private set; }
28
public double popularity { get; set; }
29
public double relevancy { get; set; }
30
public string desktop_path { get; private set; }
31
public string generic_name { get; private set; default = ""; }
33
private bool is_command = false;
35
public signal void icon_changed ();
36
public signal void launched (App app);
38
public App (GMenu.TreeEntry entry) {
39
name = entry.get_display_name ();
40
description = entry.get_comment () ?? name;
41
exec = entry.get_exec ();
42
desktop_id = entry.get_desktop_file_id ();
43
icon_name = entry.get_icon () ?? "application-default-icon";
44
desktop_path = entry.get_desktop_file_path ();
45
keywords = Unity.AppInfoManager.get_default ().get_keywords (desktop_id);
46
generic_name = entry.get_generic_name ();
49
Slingshot.icon_theme.changed.connect (update_icon);
52
public App.from_command (string command) {
55
description = _("Run this command...");
58
icon_name = "system-run";
66
public void update_icon () {
67
icon = load_icon (Slingshot.settings.icon_size);
71
private delegate void IconLoadFallback ();
73
private class IconLoadFallbackMethod {
74
public unowned IconLoadFallback load_icon;
76
public IconLoadFallbackMethod (IconLoadFallback fallback) {
81
public Gdk.Pixbuf load_icon (int size) {
82
Gdk.Pixbuf icon = null;
83
var flags = Gtk.IconLookupFlags.FORCE_SIZE;
85
IconLoadFallbackMethod[] fallbacks = {
86
new IconLoadFallbackMethod (() => {
88
icon = Slingshot.icon_theme.load_icon (icon_name, size, flags);
90
warning ("Could not load icon. Falling back to method 2");
94
new IconLoadFallbackMethod (() => {
96
if (icon_name.last_index_of (".") > 0) {
97
var name = icon_name[0:icon_name.last_index_of (".")];
98
icon = Slingshot.icon_theme.load_icon (name, size, flags);
101
warning ("Could not load icon. Falling back to method 3");
105
new IconLoadFallbackMethod (() => {
107
icon = new Gdk.Pixbuf.from_file_at_scale (icon_name, size, size, false);
109
warning ("Could not load icon. Falling back to method 4");
113
new IconLoadFallbackMethod (() => {
115
icon = Slingshot.icon_theme.load_icon ("application-default-icon", size, flags);
117
warning ("Could not load icon. Falling back to method 5");
121
new IconLoadFallbackMethod (() => {
123
icon = Slingshot.icon_theme.load_icon ("gtk-missing-image", size, flags);
125
error ("Could not find a fallback icon to load");
130
foreach (IconLoadFallbackMethod fallback in fallbacks) {
131
fallback.load_icon ();
139
public void launch () {
142
debug (@"Launching command: $name");
143
Process.spawn_command_line_async (exec);
145
launched (this); // Emit launched signal
146
new DesktopAppInfo (desktop_id).launch (null, null);
147
debug (@"Launching application: $name");
150
warning ("Failed to launch %s: %s", name, exec);