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 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

View file

@ -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";

View file

@ -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 ();

View file

@ -30,20 +30,27 @@ namespace Webpin {
public class DesktopFile : GLib.Object { public class DesktopFile : GLib.Object {
string template = """ string template = """
[Desktop Entry] [Desktop Entry]
Name=Webpin Name=Webpin
GenericName=Web app GenericName=Web app
Comment=Webpin web app Comment=Webpin web app
Exec=com.github.artemanufrij.webpin Exec=com.github.artemanufrij.webpin
Keywords=webpin;webapp;internet; Keywords=webpin;webapp;internet;
Icon=application-default-icon Icon=application-default-icon
Terminal=false Terminal=false
Type=Application Type=Application
Categories=Network; Categories=Network;
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) {