Desktop Action Menu
This commit is contained in:
parent
807a0079bf
commit
81f6076c5c
4 changed files with 100 additions and 26 deletions
|
@ -10,3 +10,9 @@ Terminal=false
|
||||||
Type=Application
|
Type=Application
|
||||||
Categories=Network;GNOME;GTK;
|
Categories=Network;GNOME;GTK;
|
||||||
X-GNOME-Gettext-Domain=webpin
|
X-GNOME-Gettext-Domain=webpin
|
||||||
|
Actions=New;
|
||||||
|
|
||||||
|
[Desktop Action New]
|
||||||
|
Name=New Webapp
|
||||||
|
Exec=com.github.artemanufrij.webpin --new
|
||||||
|
Icon=document-new-symbolic
|
|
@ -1,6 +1,6 @@
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2015 Erasmo Marín <erasmo.marin@gmail.com>
|
* Copyright (c) 2015 Erasmo Marín <erasmo.marin@gmail.com>
|
||||||
* Copyright (c) 2017-2017 Artem Anufrij <artem.anufrij@live.de>
|
* Copyright (c) 2017-2018 Artem Anufrij <artem.anufrij@live.de>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
@ -40,16 +40,12 @@ namespace Webpin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
construct {
|
[CCode (array_length = false, array_null_terminated = true)]
|
||||||
flags |= GLib.ApplicationFlags.HANDLES_OPEN;
|
string[] ? arg_files = null;
|
||||||
|
|
||||||
var open_web_app = new SimpleAction ("open-web-app", GLib.VariantType.STRING);
|
construct {
|
||||||
add_action (open_web_app);
|
this.flags |= GLib.ApplicationFlags.HANDLES_OPEN;
|
||||||
open_web_app.activate.connect ((parameter) => {
|
this.flags |= ApplicationFlags.HANDLES_COMMAND_LINE;
|
||||||
if (parameter != null) {
|
|
||||||
start_webapp (parameter.get_string ());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
create_cache_folders ();
|
create_cache_folders ();
|
||||||
}
|
}
|
||||||
|
@ -91,13 +87,76 @@ namespace Webpin {
|
||||||
mainwindow = new Windows.WebApp (desktop_file);
|
mainwindow = new Windows.WebApp (desktop_file);
|
||||||
mainwindow.set_application (this);
|
mainwindow.set_application (this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override int command_line (ApplicationCommandLine cmd) {
|
||||||
|
command_line_interpreter (cmd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void command_line_interpreter (ApplicationCommandLine cmd) {
|
||||||
|
string[] args_cmd = cmd.get_arguments ();
|
||||||
|
unowned string[] args = args_cmd;
|
||||||
|
|
||||||
|
bool new_app = false;
|
||||||
|
bool remove_app = false;
|
||||||
|
|
||||||
|
GLib.OptionEntry [] options = new OptionEntry [4];
|
||||||
|
options [0] = { "new", 0, 0, OptionArg.NONE, ref new_app, "Create new Webapp", null };
|
||||||
|
options [1] = { "remove", 0, 0, OptionArg.NONE, ref remove_app, "Remove Webapp", null };
|
||||||
|
options [2] = { "", 0, 0, OptionArg.STRING_ARRAY, ref arg_files, null, "[URI...]" };
|
||||||
|
options [3] = { null };
|
||||||
|
|
||||||
|
var opt_context = new OptionContext ("actions");
|
||||||
|
opt_context.add_main_entries (options, null);
|
||||||
|
try {
|
||||||
|
opt_context.parse (ref args);
|
||||||
|
} catch (Error err) {
|
||||||
|
warning (err.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (new_app) {
|
||||||
|
if (new_app) {
|
||||||
|
activate ();
|
||||||
|
(mainwindow as MainWindow).show_assistant ();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
File[] files = null;
|
||||||
|
foreach (string arg_file in arg_files) {
|
||||||
|
files += (File.new_for_uri (arg_file));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (files != null && files.length > 0) {
|
||||||
|
if (remove_app) {
|
||||||
|
var app_info = Services.DesktopFilesManager.get_app_by_url (files [0].get_uri ());
|
||||||
|
var desktop_file = new Webpin.DesktopFile.from_desktopappinfo (app_info);
|
||||||
|
desktop_file.delete_file ();
|
||||||
|
} else {
|
||||||
|
open (files, "");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
activate ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int main (string[] args) {
|
static int main (string[] args) {
|
||||||
Gtk.init (ref args);
|
Gtk.init (ref args);
|
||||||
var app = Webpin.WebpinApp.instance;
|
var app = Webpin.WebpinApp.instance;
|
||||||
if (args.length > 1) {
|
|
||||||
|
bool has_new_arg = false;
|
||||||
|
|
||||||
|
foreach (var arg in args) {
|
||||||
|
if (arg == "--new") {
|
||||||
|
has_new_arg = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.length > 1 && !has_new_arg) {
|
||||||
var checksum = new GLib.Checksum (GLib.ChecksumType.MD5);
|
var checksum = new GLib.Checksum (GLib.ChecksumType.MD5);
|
||||||
checksum.update (args[1].data, args[1].length);
|
checksum.update (args[1].data, args[1].length);
|
||||||
var id = "a" + checksum.get_string ().substring (0, 5) + "a.artemanufrij.webpin";
|
var id = "a" + checksum.get_string ().substring (0, 5) + "a.artemanufrij.webpin";
|
||||||
|
|
|
@ -63,6 +63,7 @@ namespace Webpin {
|
||||||
headerbar = new Gtk.HeaderBar ();
|
headerbar = new Gtk.HeaderBar ();
|
||||||
headerbar.show_close_button = true;
|
headerbar.show_close_button = true;
|
||||||
headerbar.title = "Webpin";
|
headerbar.title = "Webpin";
|
||||||
|
headerbar.get_style_context ().add_class ("default-decoration");
|
||||||
set_titlebar (headerbar);
|
set_titlebar (headerbar);
|
||||||
|
|
||||||
back_button = new Gtk.Button.with_label (_("Applications"));
|
back_button = new Gtk.Button.with_label (_("Applications"));
|
||||||
|
@ -171,7 +172,7 @@ namespace Webpin {
|
||||||
this.present ();
|
this.present ();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void show_assistant (DesktopFile? desktop_file = null) {
|
public void show_assistant (DesktopFile? desktop_file = null) {
|
||||||
stack.set_transition_type (Gtk.StackTransitionType.SLIDE_LEFT);
|
stack.set_transition_type (Gtk.StackTransitionType.SLIDE_LEFT);
|
||||||
stack.set_visible_child_name("editor");
|
stack.set_visible_child_name("editor");
|
||||||
back_button.show_all ();
|
back_button.show_all ();
|
||||||
|
|
|
@ -43,7 +43,14 @@ namespace Webpin {
|
||||||
X-GNOME-Gettext-Domain=com.github.artemanufrij.webpin
|
X-GNOME-Gettext-Domain=com.github.artemanufrij.webpin
|
||||||
X-GNOME-UsesNotifications=true
|
X-GNOME-UsesNotifications=true
|
||||||
StartupWMClass=Webpin
|
StartupWMClass=Webpin
|
||||||
X-Webpin-PrimaryColor=rgba (222,222,222,1)""";
|
X-Webpin-PrimaryColor=rgba (222,222,222,1)
|
||||||
|
Actions=Remove;
|
||||||
|
|
||||||
|
[Desktop Action Remove]
|
||||||
|
Name=Remove Webapp
|
||||||
|
Exec=com.github.artemanufrij.webpin --remove
|
||||||
|
Icon=edit-delete-symbolic
|
||||||
|
""";
|
||||||
|
|
||||||
GLib.KeyFile file;
|
GLib.KeyFile file;
|
||||||
|
|
||||||
|
@ -112,6 +119,7 @@ namespace Webpin {
|
||||||
file.set_string ("Desktop Entry", "Icon", icon);
|
file.set_string ("Desktop Entry", "Icon", icon);
|
||||||
file.set_string ("Desktop Entry", "StartupWMClass", url);
|
file.set_string ("Desktop Entry", "StartupWMClass", url);
|
||||||
file.set_string ("Desktop Entry", "X-Webpin-StayOpen", stay_open.to_string ());
|
file.set_string ("Desktop Entry", "X-Webpin-StayOpen", stay_open.to_string ());
|
||||||
|
file.set_string ("Desktop Action Remove", "Exec", "com.github.artemanufrij.webpin --remove " + url);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DesktopFile.from_desktopappinfo (GLib.DesktopAppInfo info) {
|
public DesktopFile.from_desktopappinfo (GLib.DesktopAppInfo info) {
|
||||||
|
|
Loading…
Reference in a new issue