Desktop Action Menu

This commit is contained in:
Artem Anufrij 2018-03-09 22:22:09 +01:00
parent 807a0079bf
commit 81f6076c5c
4 changed files with 100 additions and 26 deletions

View file

@ -10,3 +10,9 @@ Terminal=false
Type=Application
Categories=Network;GNOME;GTK;
X-GNOME-Gettext-Domain=webpin
Actions=New;
[Desktop Action New]
Name=New Webapp
Exec=com.github.artemanufrij.webpin --new
Icon=document-new-symbolic

View file

@ -1,6 +1,6 @@
/*-
* 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
* it under the terms of the GNU Lesser General Public License as published by
@ -40,16 +40,12 @@ namespace Webpin {
}
}
construct {
flags |= GLib.ApplicationFlags.HANDLES_OPEN;
[CCode (array_length = false, array_null_terminated = true)]
string[] ? arg_files = null;
var open_web_app = new SimpleAction ("open-web-app", GLib.VariantType.STRING);
add_action (open_web_app);
open_web_app.activate.connect ((parameter) => {
if (parameter != null) {
start_webapp (parameter.get_string ());
}
});
construct {
this.flags |= GLib.ApplicationFlags.HANDLES_OPEN;
this.flags |= ApplicationFlags.HANDLES_COMMAND_LINE;
create_cache_folders ();
}
@ -91,13 +87,76 @@ namespace Webpin {
mainwindow = new Windows.WebApp (desktop_file);
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) {
Gtk.init (ref args);
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);
checksum.update (args[1].data, args[1].length);
var id = "a" + checksum.get_string ().substring (0, 5) + "a.artemanufrij.webpin";

View file

@ -63,6 +63,7 @@ namespace Webpin {
headerbar = new Gtk.HeaderBar ();
headerbar.show_close_button = true;
headerbar.title = "Webpin";
headerbar.get_style_context ().add_class ("default-decoration");
set_titlebar (headerbar);
back_button = new Gtk.Button.with_label (_("Applications"));
@ -171,7 +172,7 @@ namespace Webpin {
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_visible_child_name("editor");
back_button.show_all ();

View file

@ -30,20 +30,27 @@ namespace Webpin {
public class DesktopFile : GLib.Object {
string template = """
[Desktop Entry]
Name=Webpin
GenericName=Web app
Comment=Webpin web app
Exec=com.github.artemanufrij.webpin
Keywords=webpin;webapp;internet;
Icon=application-default-icon
Terminal=false
Type=Application
Categories=Network;
X-GNOME-Gettext-Domain=com.github.artemanufrij.webpin
X-GNOME-UsesNotifications=true
StartupWMClass=Webpin
X-Webpin-PrimaryColor=rgba (222,222,222,1)""";
[Desktop Entry]
Name=Webpin
GenericName=Web app
Comment=Webpin web app
Exec=com.github.artemanufrij.webpin
Keywords=webpin;webapp;internet;
Icon=application-default-icon
Terminal=false
Type=Application
Categories=Network;
X-GNOME-Gettext-Domain=com.github.artemanufrij.webpin
X-GNOME-UsesNotifications=true
StartupWMClass=Webpin
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;
@ -112,6 +119,7 @@ namespace Webpin {
file.set_string ("Desktop Entry", "Icon", icon);
file.set_string ("Desktop Entry", "StartupWMClass", url);
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) {