added namespace and licence
This commit is contained in:
parent
8b6b2fb94b
commit
28e01c5a88
22 changed files with 578 additions and 2369 deletions
|
@ -25,7 +25,6 @@ pkg_check_modules(DEPS REQUIRED
|
|||
)
|
||||
|
||||
#
|
||||
add_subdirectory(vapi)
|
||||
add_subdirectory(po)
|
||||
|
||||
add_definitions(${DEPS_CFLAGS})
|
||||
|
|
|
@ -67,7 +67,7 @@ static int main (string[] args) {
|
|||
var app = Webpin.WebpinApp.instance;
|
||||
return app.run (args);
|
||||
} else {
|
||||
var app_info = DesktopFile.get_app_by_url (args[1]);
|
||||
var app_info = Webpin.DesktopFile.get_app_by_url (args[1]);
|
||||
var app = new Webpin.WebAppWindow(app_info.get_display_name (), args[1]);
|
||||
app.show_all ();
|
||||
}
|
||||
|
|
|
@ -1,120 +1,151 @@
|
|||
public class DesktopFile : GLib.Object {
|
||||
/*-
|
||||
* Copyright (c) 2015 Erasmo Marín <erasmo.marin@gmail.com>
|
||||
* Copyright (c) 2017-2017 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
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* The Noise authors hereby grant permission for non-GPL compatible
|
||||
* GStreamer plugins to be used and distributed together with GStreamer
|
||||
* and Noise. This permission is above and beyond the permissions granted
|
||||
* by the GPL license by which Noise is covered. If you modify this code
|
||||
* you may extend this exception to your version of the code, but you are not
|
||||
* obligated to do so. If you do not wish to do so, delete this exception
|
||||
* statement from your version.
|
||||
*
|
||||
* Authored by: Artem Anufrij <artem.anufrij@live.de>
|
||||
*/
|
||||
|
||||
private string template = """
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
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-FullName=webpin
|
||||
WebbyThemeColor=none""";
|
||||
namespace Webpin {
|
||||
public class DesktopFile : GLib.Object {
|
||||
|
||||
private 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-FullName=webpin
|
||||
WebpinThemeColor=none""";
|
||||
|
||||
|
||||
private GLib.KeyFile file;
|
||||
private GLib.KeyFile file;
|
||||
|
||||
public string name { get; private set; }
|
||||
public string url { get; private set; }
|
||||
public string icon { get; private set; }
|
||||
public string name { get; private set; }
|
||||
public string url { get; private set; }
|
||||
public string icon { get; private set; }
|
||||
|
||||
public DesktopFile (string name, string url, string icon) {
|
||||
this.name = name;
|
||||
this.url = url;
|
||||
this.icon = icon;
|
||||
public DesktopFile (string name, string url, string icon) {
|
||||
this.name = name;
|
||||
this.url = url;
|
||||
this.icon = icon;
|
||||
|
||||
file = new GLib.KeyFile();
|
||||
file.load_from_data (template, -1, GLib.KeyFileFlags.NONE);
|
||||
//TODO: Category
|
||||
file.set_string ("Desktop Entry", "Name", name);
|
||||
file.set_string ("Desktop Entry", "GenericName", name);
|
||||
file.set_string ("Desktop Entry", "X-GNOME-FullName", name);
|
||||
file.set_string ("Desktop Entry", "Exec", "com.github.artemanufrij.webpin " + url);
|
||||
file.set_string ("Desktop Entry", "Icon", icon);
|
||||
file.set_string ("Desktop Entry", "StartupWMClass", url);
|
||||
}
|
||||
file = new GLib.KeyFile();
|
||||
file.load_from_data (template, -1, GLib.KeyFileFlags.NONE);
|
||||
//TODO: Category
|
||||
file.set_string ("Desktop Entry", "Name", name);
|
||||
file.set_string ("Desktop Entry", "GenericName", name);
|
||||
file.set_string ("Desktop Entry", "X-GNOME-FullName", name);
|
||||
file.set_string ("Desktop Entry", "Exec", "com.github.artemanufrij.webpin " + url);
|
||||
file.set_string ("Desktop Entry", "Icon", icon);
|
||||
file.set_string ("Desktop Entry", "StartupWMClass", url);
|
||||
}
|
||||
|
||||
public DesktopFile.from_desktopappinfo(GLib.DesktopAppInfo info) {
|
||||
file = new GLib.KeyFile();
|
||||
file.load_from_file (info.filename, KeyFileFlags.NONE);
|
||||
this.name = info.get_display_name ();
|
||||
this.icon = info.get_icon ().to_string ();
|
||||
this.url = file.get_string ("Desktop Entry", "Exec").substring (31);
|
||||
}
|
||||
public DesktopFile.from_desktopappinfo(GLib.DesktopAppInfo info) {
|
||||
file = new GLib.KeyFile();
|
||||
file.load_from_file (info.filename, KeyFileFlags.NONE);
|
||||
this.name = info.get_display_name ();
|
||||
this.icon = info.get_icon ().to_string ();
|
||||
this.url = file.get_string ("Desktop Entry", "Exec").substring (31);
|
||||
}
|
||||
|
||||
public bool edit_propertie (string propertie, string val) {
|
||||
string filename = GLib.Environment.get_user_data_dir () + "/applications/" +file.get_string("Desktop Entry", "Name") + "-webpin.desktop";
|
||||
file = new GLib.KeyFile();
|
||||
file.load_from_file (filename, KeyFileFlags.NONE);
|
||||
file.set_string ("Desktop Entry", propertie, val);
|
||||
return file.save_to_file (filename);
|
||||
}
|
||||
public bool edit_propertie (string propertie, string val) {
|
||||
string filename = GLib.Environment.get_user_data_dir () + "/applications/" +file.get_string("Desktop Entry", "Name") + "-webpin.desktop";
|
||||
file = new GLib.KeyFile();
|
||||
file.load_from_file (filename, KeyFileFlags.NONE);
|
||||
file.set_string ("Desktop Entry", propertie, val);
|
||||
return file.save_to_file (filename);
|
||||
}
|
||||
|
||||
public GLib.DesktopAppInfo save_to_file () {
|
||||
string filename = GLib.Environment.get_user_data_dir () + "/applications/" +file.get_string("Desktop Entry", "Name") + "-webpin.desktop";
|
||||
print("Desktop file created: " + filename);
|
||||
file.save_to_file (filename);
|
||||
return new GLib.DesktopAppInfo.from_filename (filename);
|
||||
}
|
||||
public GLib.DesktopAppInfo save_to_file () {
|
||||
string filename = GLib.Environment.get_user_data_dir () + "/applications/" +file.get_string("Desktop Entry", "Name") + "-webpin.desktop";
|
||||
print("Desktop file created: " + filename);
|
||||
file.save_to_file (filename);
|
||||
return new GLib.DesktopAppInfo.from_filename (filename);
|
||||
}
|
||||
|
||||
public bool delete_file () {
|
||||
string filename = GLib.Environment.get_user_data_dir () + "/applications/" +file.get_string("Desktop Entry", "Name") + "-webpin.desktop";
|
||||
File file = File.new_for_path (filename);
|
||||
try {
|
||||
file.delete ();
|
||||
} catch (Error e) {
|
||||
print(e.message + "\n");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public bool delete_file () {
|
||||
string filename = GLib.Environment.get_user_data_dir () + "/applications/" +file.get_string("Desktop Entry", "Name") + "-webpin.desktop";
|
||||
File file = File.new_for_path (filename);
|
||||
try {
|
||||
file.delete ();
|
||||
} catch (Error e) {
|
||||
print(e.message + "\n");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static Gee.HashMap<string, GLib.DesktopAppInfo> get_webby_applications () {
|
||||
public static Gee.HashMap<string, GLib.DesktopAppInfo> get_webby_applications () {
|
||||
|
||||
var list = new Gee.HashMap<string, GLib.DesktopAppInfo>();
|
||||
var list = new Gee.HashMap<string, GLib.DesktopAppInfo>();
|
||||
|
||||
foreach (GLib.AppInfo app in GLib.AppInfo.get_all()) {
|
||||
foreach (GLib.AppInfo app in GLib.AppInfo.get_all()) {
|
||||
|
||||
var desktop_app = new GLib.DesktopAppInfo(app.get_id ());
|
||||
var desktop_app = new GLib.DesktopAppInfo(app.get_id ());
|
||||
|
||||
//FIXME: This is not working, vala problem?
|
||||
//var keywords = desktop_app.get_keywords ();
|
||||
//FIXME: This is not working, vala problem?
|
||||
//var keywords = desktop_app.get_keywords ();
|
||||
|
||||
string keywords = desktop_app.get_string ("Keywords");
|
||||
string keywords = desktop_app.get_string ("Keywords");
|
||||
|
||||
if (keywords != null && keywords.contains ("webpin")) {
|
||||
list.set(desktop_app.get_name(), desktop_app);
|
||||
if (keywords != null && keywords.contains ("webpin")) {
|
||||
debug (desktop_app.get_name());
|
||||
list.set(desktop_app.get_name(), desktop_app);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public static GLib.DesktopAppInfo? get_app_by_url (string url) {
|
||||
foreach (GLib.AppInfo app in GLib.AppInfo.get_all()) {
|
||||
public static GLib.DesktopAppInfo? get_app_by_url (string url) {
|
||||
foreach (GLib.AppInfo app in GLib.AppInfo.get_all()) {
|
||||
|
||||
var desktop_app = new GLib.DesktopAppInfo(app.get_id ());
|
||||
var desktop_app = new GLib.DesktopAppInfo(app.get_id ());
|
||||
|
||||
var exec = desktop_app.get_string ("Exec");
|
||||
var exec = desktop_app.get_string ("Exec");
|
||||
|
||||
if (exec != null && exec.contains (url)) {
|
||||
return desktop_app;
|
||||
if (exec != null && exec.contains (url)) {
|
||||
return desktop_app;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Gee.HashMap<string, GLib.AppInfo> get_applications() {
|
||||
|
||||
var list = new Gee.HashMap<string, GLib.AppInfo>();
|
||||
|
||||
foreach (GLib.AppInfo app in GLib.AppInfo.get_all()) {
|
||||
list.set(app.get_name(), app);
|
||||
return null;
|
||||
}
|
||||
|
||||
return list;
|
||||
public static Gee.HashMap<string, GLib.AppInfo> get_applications() {
|
||||
|
||||
var list = new Gee.HashMap<string, GLib.AppInfo>();
|
||||
|
||||
foreach (GLib.AppInfo app in GLib.AppInfo.get_all()) {
|
||||
debug (app.get_name());
|
||||
list.set(app.get_name(), app);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,33 @@
|
|||
public class InfoDialog : Gtk.Dialog {
|
||||
/*-
|
||||
* Copyright (c) 2015 Erasmo Marín <erasmo.marin@gmail.com>
|
||||
* Copyright (c) 2017-2017 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
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* The Noise authors hereby grant permission for non-GPL compatible
|
||||
* GStreamer plugins to be used and distributed together with GStreamer
|
||||
* and Noise. This permission is above and beyond the permissions granted
|
||||
* by the GPL license by which Noise is covered. If you modify this code
|
||||
* you may extend this exception to your version of the code, but you are not
|
||||
* obligated to do so. If you do not wish to do so, delete this exception
|
||||
* statement from your version.
|
||||
*
|
||||
* Authored by: Artem Anufrij <artem.anufrij@live.de>
|
||||
*/
|
||||
|
||||
namespace Webpin {
|
||||
public class InfoDialog : Gtk.Dialog {
|
||||
public InfoDialog (string title, string label, string icon_name) {
|
||||
|
||||
this.title = title;
|
||||
|
@ -15,4 +43,5 @@ public class InfoDialog : Gtk.Dialog {
|
|||
|
||||
add_button (_("Accept"), Gtk.ResponseType.ACCEPT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,41 @@
|
|||
public class UrlEntry : Gtk.Entry {
|
||||
/*-
|
||||
* Copyright (c) 2015 Erasmo Marín <erasmo.marin@gmail.com>
|
||||
* Copyright (c) 2017-2017 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
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* The Noise authors hereby grant permission for non-GPL compatible
|
||||
* GStreamer plugins to be used and distributed together with GStreamer
|
||||
* and Noise. This permission is above and beyond the permissions granted
|
||||
* by the GPL license by which Noise is covered. If you modify this code
|
||||
* you may extend this exception to your version of the code, but you are not
|
||||
* obligated to do so. If you do not wish to do so, delete this exception
|
||||
* statement from your version.
|
||||
*
|
||||
* Authored by: Artem Anufrij <artem.anufrij@live.de>
|
||||
*/
|
||||
|
||||
|
||||
public UrlEntry () {
|
||||
editable = false;
|
||||
set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "view-refresh-symbolic");
|
||||
set_icon_from_icon_name (Gtk.EntryIconPosition.PRIMARY, "text-html-symbolic");
|
||||
namespace Webpin {
|
||||
public class UrlEntry : Gtk.Entry {
|
||||
public UrlEntry () {
|
||||
editable = false;
|
||||
set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "view-refresh-symbolic");
|
||||
set_icon_from_icon_name (Gtk.EntryIconPosition.PRIMARY, "text-html-symbolic");
|
||||
}
|
||||
public override void get_preferred_width (out int minimum_width, out int natural_width) {
|
||||
minimum_width = -1;
|
||||
natural_width = 3000;
|
||||
}
|
||||
}
|
||||
|
||||
public override void get_preferred_width (out int minimum_width, out int natural_width) {
|
||||
minimum_width = -1;
|
||||
natural_width = 3000;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
286
src/WebApp.vala
286
src/WebApp.vala
|
@ -1,152 +1,182 @@
|
|||
public class WebApp : Gtk.Stack {
|
||||
/*-
|
||||
* Copyright (c) 2015 Erasmo Marín <erasmo.marin@gmail.com>
|
||||
* Copyright (c) 2017-2017 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
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* The Noise authors hereby grant permission for non-GPL compatible
|
||||
* GStreamer plugins to be used and distributed together with GStreamer
|
||||
* and Noise. This permission is above and beyond the permissions granted
|
||||
* by the GPL license by which Noise is covered. If you modify this code
|
||||
* you may extend this exception to your version of the code, but you are not
|
||||
* obligated to do so. If you do not wish to do so, delete this exception
|
||||
* statement from your version.
|
||||
*
|
||||
* Authored by: Artem Anufrij <artem.anufrij@live.de>
|
||||
*/
|
||||
|
||||
public WebKit.WebView app_view;
|
||||
public WebKit.WebView external_view;
|
||||
public string ui_color = "none";
|
||||
private string app_url;
|
||||
private GLib.DesktopAppInfo info;
|
||||
private DesktopFile file;
|
||||
private WebKit.CookieManager cookie_manager;
|
||||
private Gtk.Box container; //the spinner container
|
||||
namespace Webpin {
|
||||
public class WebApp : Gtk.Stack {
|
||||
|
||||
public signal void external_request ();
|
||||
public signal void theme_color_changed(string color);
|
||||
public WebKit.WebView app_view;
|
||||
public WebKit.WebView external_view;
|
||||
public string ui_color = "none";
|
||||
private string app_url;
|
||||
private GLib.DesktopAppInfo info;
|
||||
private DesktopFile file;
|
||||
private WebKit.CookieManager cookie_manager;
|
||||
private Gtk.Box container; //the spinner container
|
||||
|
||||
public WebApp (string webapp_name, string app_url) {
|
||||
public signal void external_request ();
|
||||
public signal void theme_color_changed(string color);
|
||||
|
||||
this.app_url = app_url;
|
||||
set_transition_duration (1000);
|
||||
public WebApp (string webapp_name, string app_url) {
|
||||
|
||||
//configure cookies settings
|
||||
cookie_manager = WebKit.WebContext.get_default ().get_cookie_manager ();
|
||||
cookie_manager.set_accept_policy (WebKit.CookieAcceptPolicy.ALWAYS);
|
||||
this.app_url = app_url;
|
||||
set_transition_duration (1000);
|
||||
|
||||
string cookie_db = Environment.get_user_cache_dir () + "/webby/cookies/";
|
||||
//configure cookies settings
|
||||
cookie_manager = WebKit.WebContext.get_default ().get_cookie_manager ();
|
||||
cookie_manager.set_accept_policy (WebKit.CookieAcceptPolicy.ALWAYS);
|
||||
|
||||
var dir = GLib.File.new_for_path (cookie_db);
|
||||
string cookie_db = Environment.get_user_cache_dir () + "/webby/cookies/";
|
||||
|
||||
if (!dir.query_exists (null)) {
|
||||
try {
|
||||
dir.make_directory_with_parents (null);
|
||||
GLib.debug ("Directory '%s' created", dir.get_path ());
|
||||
} catch (Error e) {
|
||||
GLib.error ("Could not create caching directory.");
|
||||
var dir = GLib.File.new_for_path (cookie_db);
|
||||
|
||||
if (!dir.query_exists (null)) {
|
||||
try {
|
||||
dir.make_directory_with_parents (null);
|
||||
GLib.debug ("Directory '%s' created", dir.get_path ());
|
||||
} catch (Error e) {
|
||||
GLib.error ("Could not create caching directory.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cookie_manager.set_persistent_storage (cookie_db + "cookies.db", WebKit.CookiePersistentStorage.SQLITE);
|
||||
cookie_manager.set_persistent_storage (cookie_db + "cookies.db", WebKit.CookiePersistentStorage.SQLITE);
|
||||
|
||||
//load app viewer
|
||||
app_view = new WebKit.WebView.with_context (WebKit.WebContext.get_default ());
|
||||
app_view.load_uri (app_url);
|
||||
//load app viewer
|
||||
app_view = new WebKit.WebView.with_context (WebKit.WebContext.get_default ());
|
||||
app_view.load_uri (app_url);
|
||||
|
||||
//create external viewer
|
||||
this.external_view = new WebKit.WebView ();
|
||||
//create external viewer
|
||||
this.external_view = new WebKit.WebView ();
|
||||
|
||||
//loading view
|
||||
var spinner = new Gtk.Spinner();
|
||||
spinner.active = true;
|
||||
spinner.halign = Gtk.Align.CENTER;
|
||||
spinner.valign = Gtk.Align.CENTER;
|
||||
spinner.set_size_request (24, 24);
|
||||
container = new Gtk.Box(Gtk.Orientation.VERTICAL, 0);
|
||||
container.halign = Gtk.Align.FILL;
|
||||
container.valign = Gtk.Align.FILL;
|
||||
container.pack_start(spinner, true, true, 0);
|
||||
//loading view
|
||||
var spinner = new Gtk.Spinner();
|
||||
spinner.active = true;
|
||||
spinner.halign = Gtk.Align.CENTER;
|
||||
spinner.valign = Gtk.Align.CENTER;
|
||||
spinner.set_size_request (24, 24);
|
||||
container = new Gtk.Box(Gtk.Orientation.VERTICAL, 0);
|
||||
container.halign = Gtk.Align.FILL;
|
||||
container.valign = Gtk.Align.FILL;
|
||||
container.pack_start(spinner, true, true, 0);
|
||||
|
||||
//overlay trick to make snapshot work even with the spinner
|
||||
var overlay = new Gtk.Overlay ();
|
||||
overlay.add(app_view);
|
||||
overlay.add_overlay(container);
|
||||
//overlay trick to make snapshot work even with the spinner
|
||||
var overlay = new Gtk.Overlay ();
|
||||
overlay.add(app_view);
|
||||
overlay.add_overlay(container);
|
||||
|
||||
add_titled(overlay, "app", "app");
|
||||
add_titled(external_view, "external", "external");
|
||||
set_visible_child_name ("app");
|
||||
add_titled(overlay, "app", "app");
|
||||
add_titled(external_view, "external", "external");
|
||||
set_visible_child_name ("app");
|
||||
|
||||
app_view.create.connect ( () => {
|
||||
print("external request");
|
||||
external_request ();
|
||||
return external_view;
|
||||
});
|
||||
external_view.create.connect ( () => {
|
||||
print("external request");
|
||||
set_visible_child_name ("external");
|
||||
return external_view;
|
||||
});
|
||||
app_view.create.connect ( () => {
|
||||
print("external request");
|
||||
external_request ();
|
||||
return external_view;
|
||||
});
|
||||
external_view.create.connect ( () => {
|
||||
print("external request");
|
||||
set_visible_child_name ("external");
|
||||
return external_view;
|
||||
});
|
||||
|
||||
info = DesktopFile.get_app_by_url(app_url);
|
||||
file = new DesktopFile.from_desktopappinfo(info);
|
||||
//load theme color saved in desktop file
|
||||
if (info != null && info.has_key("WebpinThemeColor")) {
|
||||
var color = info.get_string("WebpinThemeColor");
|
||||
print("COLOR: " + color+"\n");
|
||||
if(color != "none") {
|
||||
ui_color = color;
|
||||
info = DesktopFile.get_app_by_url(app_url);
|
||||
file = new DesktopFile.from_desktopappinfo(info);
|
||||
//load theme color saved in desktop file
|
||||
if (info != null && info.has_key("WebpinThemeColor")) {
|
||||
var color = info.get_string("WebpinThemeColor");
|
||||
print("COLOR: " + color+"\n");
|
||||
if(color != "none") {
|
||||
ui_color = color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Gdk.RGBA background = {};
|
||||
if (!background.parse (ui_color)){
|
||||
background = {1,1,1,1};
|
||||
}
|
||||
container.override_background_color (Gtk.StateFlags.NORMAL, background);
|
||||
|
||||
//update theme color if changed
|
||||
app_view.load_changed.connect ( (load_event) => {
|
||||
if (load_event == WebKit.LoadEvent.FINISHED) {
|
||||
print("determine color");
|
||||
determine_theme_color.begin();
|
||||
} else {
|
||||
container.set_visible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public DesktopFile get_desktop_file () {
|
||||
return this.file;
|
||||
}
|
||||
|
||||
/**Taken from WebView.vala in lp:midori
|
||||
* Check for the theme-color meta tag in the page and if that one can't be
|
||||
* found grabs the color from the current page and uses the first 3 rows
|
||||
* of pixels to get a good representative color of the page
|
||||
*/
|
||||
public async void determine_theme_color () {
|
||||
|
||||
//FIXME: This is useless without JSCore
|
||||
/*string script = "var t = document.getElementsByTagName('meta').filter(function(e){return e.name == 'theme-color';)[0]; t ? t.value : null;";
|
||||
app_view.run_javascript.begin (script, null, (obj, res)=> {
|
||||
|
||||
});*/
|
||||
|
||||
var snap = (Cairo.ImageSurface) yield app_view.get_snapshot (WebKit.SnapshotRegion.VISIBLE,
|
||||
WebKit.SnapshotOptions.NONE, null);
|
||||
|
||||
// data ist in BGRA apparently (according to testing). Docs said ARGB, but that
|
||||
// appears not to be the case
|
||||
unowned uint8[] data = snap.get_data ();
|
||||
uint8 r = data[2];
|
||||
uint8 g = data[1];
|
||||
uint8 b = data[0];
|
||||
|
||||
for (var i = 4; i < snap.get_width () * 3 * 4; i += 4) {
|
||||
r = (r + data[i + 2]) / 2;
|
||||
g = (g + data[i + 1]) / 2;
|
||||
b = (b + data[i + 0]) / 2;
|
||||
}
|
||||
|
||||
var color = "#%02x%02x%02x".printf (r, g, b);
|
||||
|
||||
if (color != ui_color) {
|
||||
ui_color = color;
|
||||
Gdk.RGBA background = {};
|
||||
background.parse (ui_color);
|
||||
if (!background.parse (ui_color)){
|
||||
background = {1,1,1,1};
|
||||
}
|
||||
container.override_background_color (Gtk.StateFlags.NORMAL, background);
|
||||
theme_color_changed(ui_color);
|
||||
if (file != null)
|
||||
file.edit_propertie ("WebpinThemeColor", ui_color);
|
||||
|
||||
//update theme color if changed
|
||||
app_view.load_changed.connect ( (load_event) => {
|
||||
if (load_event == WebKit.LoadEvent.FINISHED) {
|
||||
print("determine color");
|
||||
determine_theme_color.begin();
|
||||
} else {
|
||||
container.set_visible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
container.set_visible(false);
|
||||
}
|
||||
|
||||
public DesktopFile get_desktop_file () {
|
||||
return this.file;
|
||||
}
|
||||
|
||||
/**Taken from WebView.vala in lp:midori
|
||||
* Check for the theme-color meta tag in the page and if that one can't be
|
||||
* found grabs the color from the current page and uses the first 3 rows
|
||||
* of pixels to get a good representative color of the page
|
||||
*/
|
||||
public async void determine_theme_color () {
|
||||
|
||||
//FIXME: This is useless without JSCore
|
||||
/*string script = "var t = document.getElementsByTagName('meta').filter(function(e){return e.name == 'theme-color';)[0]; t ? t.value : null;";
|
||||
app_view.run_javascript.begin (script, null, (obj, res)=> {
|
||||
|
||||
});*/
|
||||
|
||||
var snap = (Cairo.ImageSurface) yield app_view.get_snapshot (WebKit.SnapshotRegion.VISIBLE,
|
||||
WebKit.SnapshotOptions.NONE, null);
|
||||
|
||||
// data ist in BGRA apparently (according to testing). Docs said ARGB, but that
|
||||
// appears not to be the case
|
||||
unowned uint8[] data = snap.get_data ();
|
||||
uint8 r = data[2];
|
||||
uint8 g = data[1];
|
||||
uint8 b = data[0];
|
||||
|
||||
for (var i = 4; i < snap.get_width () * 3 * 4; i += 4) {
|
||||
r = (r + data[i + 2]) / 2;
|
||||
g = (g + data[i + 1]) / 2;
|
||||
b = (b + data[i + 0]) / 2;
|
||||
}
|
||||
|
||||
var color = "#%02x%02x%02x".printf (r, g, b);
|
||||
|
||||
if (color != ui_color) {
|
||||
ui_color = color;
|
||||
Gdk.RGBA background = {};
|
||||
background.parse (ui_color);
|
||||
container.override_background_color (Gtk.StateFlags.NORMAL, background);
|
||||
theme_color_changed(ui_color);
|
||||
if (file != null)
|
||||
file.edit_propertie ("WebpinThemeColor", ui_color);
|
||||
}
|
||||
container.set_visible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,129 +1,159 @@
|
|||
public class ApplicationIcon : Gtk.Overlay {
|
||||
/*-
|
||||
* Copyright (c) 2015 Erasmo Marín <erasmo.marin@gmail.com>
|
||||
* Copyright (c) 2017-2017 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
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* The Noise authors hereby grant permission for non-GPL compatible
|
||||
* GStreamer plugins to be used and distributed together with GStreamer
|
||||
* and Noise. This permission is above and beyond the permissions granted
|
||||
* by the GPL license by which Noise is covered. If you modify this code
|
||||
* you may extend this exception to your version of the code, but you are not
|
||||
* obligated to do so. If you do not wish to do so, delete this exception
|
||||
* statement from your version.
|
||||
*
|
||||
* Authored by: Artem Anufrij <artem.anufrij@live.de>
|
||||
*/
|
||||
|
||||
Gtk.Image image;
|
||||
Gtk.Label label;
|
||||
Gtk.MenuButton conf_btn;
|
||||
Gtk.Box box;
|
||||
Gtk.ActionGroup action_group;
|
||||
namespace Webpin {
|
||||
public class ApplicationIcon : Gtk.Overlay {
|
||||
|
||||
internal DesktopFile desktop_file { get; private set; }
|
||||
Gtk.Image image;
|
||||
Gtk.Label label;
|
||||
Gtk.MenuButton conf_btn;
|
||||
Gtk.Box box;
|
||||
Gtk.ActionGroup action_group;
|
||||
|
||||
public signal void deleted (Gtk.Container? parent);
|
||||
public signal void edit_request (DesktopFile desktop_file);
|
||||
internal DesktopFile desktop_file { get; private set; }
|
||||
|
||||
public ApplicationIcon (GLib.DesktopAppInfo app) {
|
||||
this.desktop_file = new DesktopFile.from_desktopappinfo (app);
|
||||
public signal void deleted (Gtk.Container? parent);
|
||||
public signal void edit_request (DesktopFile desktop_file);
|
||||
|
||||
hexpand = false;
|
||||
vexpand = false;
|
||||
public ApplicationIcon (GLib.DesktopAppInfo app) {
|
||||
this.desktop_file = new DesktopFile.from_desktopappinfo (app);
|
||||
|
||||
label = new Gtk.Label (this.desktop_file.name);
|
||||
hexpand = false;
|
||||
vexpand = false;
|
||||
|
||||
set_icon (this.desktop_file.icon);
|
||||
label = new Gtk.Label (this.desktop_file.name);
|
||||
|
||||
this.margin = 6;
|
||||
this.margin_start = 20;
|
||||
this.margin_end = 20;
|
||||
set_icon (this.desktop_file.icon);
|
||||
|
||||
var menu = new ActionMenu ();
|
||||
menu.halign = Gtk.Align.CENTER;
|
||||
menu.delete_clicked.connect (() => { remove_application (); });
|
||||
menu.edit_clicked.connect (() => { edit_request (desktop_file); });
|
||||
this.margin = 6;
|
||||
this.margin_start = 20;
|
||||
this.margin_end = 20;
|
||||
|
||||
box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
|
||||
box.pack_start (image, false, false, 0);
|
||||
box.pack_start (label, false, false, 0);
|
||||
box.pack_start (menu, false, false, 0);
|
||||
var menu = new ActionMenu ();
|
||||
menu.halign = Gtk.Align.CENTER;
|
||||
menu.delete_clicked.connect (() => { remove_application (); });
|
||||
menu.edit_clicked.connect (() => { edit_request (desktop_file); });
|
||||
|
||||
box.hexpand = false;
|
||||
box.vexpand = false;
|
||||
box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
|
||||
box.pack_start (image, false, false, 0);
|
||||
box.pack_start (label, false, false, 0);
|
||||
box.pack_start (menu, false, false, 0);
|
||||
|
||||
var event_box = new Gtk.EventBox ();
|
||||
event_box.add (box);
|
||||
event_box.events |= Gdk.EventMask.ENTER_NOTIFY_MASK|Gdk.EventMask.LEAVE_NOTIFY_MASK;
|
||||
box.hexpand = false;
|
||||
box.vexpand = false;
|
||||
|
||||
event_box.enter_notify_event.connect ((event) => {
|
||||
menu.set_reveal_child (true);
|
||||
return false;
|
||||
});
|
||||
var event_box = new Gtk.EventBox ();
|
||||
event_box.add (box);
|
||||
event_box.events |= Gdk.EventMask.ENTER_NOTIFY_MASK|Gdk.EventMask.LEAVE_NOTIFY_MASK;
|
||||
|
||||
event_box.leave_notify_event.connect ((event) => {
|
||||
if (event.detail == Gdk.NotifyType.INFERIOR)
|
||||
event_box.enter_notify_event.connect ((event) => {
|
||||
menu.set_reveal_child (true);
|
||||
return false;
|
||||
menu.set_reveal_child (false);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
this.add (event_box);
|
||||
}
|
||||
event_box.leave_notify_event.connect ((event) => {
|
||||
if (event.detail == Gdk.NotifyType.INFERIOR)
|
||||
return false;
|
||||
menu.set_reveal_child (false);
|
||||
return false;
|
||||
});
|
||||
|
||||
public void set_new_desktopfile (DesktopFile desktop_file) {
|
||||
this.desktop_file = desktop_file;
|
||||
set_icon (this.desktop_file.icon);
|
||||
}
|
||||
this.add (event_box);
|
||||
}
|
||||
|
||||
private void set_icon (string icon) {
|
||||
if (File.new_for_path (icon).query_exists ()) {
|
||||
var pix = new Gdk.Pixbuf.from_file (icon);
|
||||
public void set_new_desktopfile (DesktopFile desktop_file) {
|
||||
this.desktop_file = desktop_file;
|
||||
set_icon (this.desktop_file.icon);
|
||||
}
|
||||
|
||||
int new_height = 64;
|
||||
int new_width = 64;
|
||||
int margin_vertical = 0;
|
||||
int margin_horizontal = 0;
|
||||
private void set_icon (string icon) {
|
||||
if (File.new_for_path (icon).query_exists ()) {
|
||||
var pix = new Gdk.Pixbuf.from_file (icon);
|
||||
|
||||
if (pix.height > pix.width) {
|
||||
new_width = new_width * pix.width / pix.height;
|
||||
margin_horizontal = (new_height - new_width) / 2;
|
||||
} else if (pix.height < pix.width) {
|
||||
new_height = new_height * pix.height / pix.width;
|
||||
margin_vertical = (new_width - new_height) / 2;
|
||||
int new_height = 64;
|
||||
int new_width = 64;
|
||||
int margin_vertical = 0;
|
||||
int margin_horizontal = 0;
|
||||
|
||||
if (pix.height > pix.width) {
|
||||
new_width = new_width * pix.width / pix.height;
|
||||
margin_horizontal = (new_height - new_width) / 2;
|
||||
} else if (pix.height < pix.width) {
|
||||
new_height = new_height * pix.height / pix.width;
|
||||
margin_vertical = (new_width - new_height) / 2;
|
||||
}
|
||||
if (image == null)
|
||||
image = new Gtk.Image.from_pixbuf (pix.scale_simple (new_width, new_height, Gdk.InterpType.BILINEAR));
|
||||
else
|
||||
image.set_from_pixbuf (pix.scale_simple (new_width, new_height, Gdk.InterpType.BILINEAR));
|
||||
|
||||
image.margin_top = margin_vertical;
|
||||
image.margin_bottom = margin_vertical;
|
||||
image.margin_right = margin_horizontal;
|
||||
image.margin_left = margin_horizontal;
|
||||
} else {
|
||||
image = new Gtk.Image ();
|
||||
image.icon_name = icon;
|
||||
image.pixel_size = 64;
|
||||
}
|
||||
if (image == null)
|
||||
image = new Gtk.Image.from_pixbuf (pix.scale_simple (new_width, new_height, Gdk.InterpType.BILINEAR));
|
||||
else
|
||||
image.set_from_pixbuf (pix.scale_simple (new_width, new_height, Gdk.InterpType.BILINEAR));
|
||||
}
|
||||
|
||||
image.margin_top = margin_vertical;
|
||||
image.margin_bottom = margin_vertical;
|
||||
image.margin_right = margin_horizontal;
|
||||
image.margin_left = margin_horizontal;
|
||||
} else {
|
||||
image = new Gtk.Image ();
|
||||
image.icon_name = icon;
|
||||
image.pixel_size = 64;
|
||||
private void remove_application () {
|
||||
desktop_file.delete_file ();
|
||||
deleted (this.get_parent());
|
||||
this.destroy ();
|
||||
}
|
||||
}
|
||||
|
||||
private void remove_application () {
|
||||
desktop_file.delete_file ();
|
||||
deleted (this.get_parent());
|
||||
this.destroy ();
|
||||
}
|
||||
}
|
||||
|
||||
public class ActionMenu : Gtk.Revealer {
|
||||
|
||||
public signal void delete_clicked ();
|
||||
public signal void edit_clicked ();
|
||||
|
||||
public ActionMenu () {
|
||||
var delete_button = new Gtk.Button.from_icon_name ("edit-delete-symbolic", Gtk.IconSize.BUTTON);
|
||||
delete_button.tooltip_text = _("Delete Webapp");
|
||||
delete_button.relief = Gtk.ReliefStyle.NONE;
|
||||
delete_button.clicked.connect (() => { delete_clicked (); });
|
||||
|
||||
var edit_button = new Gtk.Button.from_icon_name ("edit-symbolic", Gtk.IconSize.BUTTON);
|
||||
edit_button.tooltip_text = _("Edit Webapp Properties");
|
||||
edit_button.relief = Gtk.ReliefStyle.NONE;
|
||||
edit_button.clicked.connect (() => { edit_clicked (); });
|
||||
|
||||
var buttons = new Gtk.Grid ();
|
||||
buttons.orientation = Gtk.Orientation.HORIZONTAL;
|
||||
buttons.add (edit_button);
|
||||
buttons.add (delete_button);
|
||||
buttons.opacity = 0.5;
|
||||
|
||||
this.transition_type = Gtk.RevealerTransitionType.CROSSFADE;
|
||||
this.add (buttons);
|
||||
public class ActionMenu : Gtk.Revealer {
|
||||
|
||||
public signal void delete_clicked ();
|
||||
public signal void edit_clicked ();
|
||||
|
||||
public ActionMenu () {
|
||||
var delete_button = new Gtk.Button.from_icon_name ("edit-delete-symbolic", Gtk.IconSize.BUTTON);
|
||||
delete_button.tooltip_text = _("Delete Webapp");
|
||||
delete_button.relief = Gtk.ReliefStyle.NONE;
|
||||
delete_button.clicked.connect (() => { delete_clicked (); });
|
||||
|
||||
var edit_button = new Gtk.Button.from_icon_name ("edit-symbolic", Gtk.IconSize.BUTTON);
|
||||
edit_button.tooltip_text = _("Edit Webapp Properties");
|
||||
edit_button.relief = Gtk.ReliefStyle.NONE;
|
||||
edit_button.clicked.connect (() => { edit_clicked (); });
|
||||
|
||||
var buttons = new Gtk.Grid ();
|
||||
buttons.orientation = Gtk.Orientation.HORIZONTAL;
|
||||
buttons.add (edit_button);
|
||||
buttons.add (delete_button);
|
||||
buttons.opacity = 0.5;
|
||||
|
||||
this.transition_type = Gtk.RevealerTransitionType.CROSSFADE;
|
||||
this.add (buttons);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,84 +1,114 @@
|
|||
public class ApplicationsView : Gtk.Box {
|
||||
/*-
|
||||
* Copyright (c) 2015 Erasmo Marín <erasmo.marin@gmail.com>
|
||||
* Copyright (c) 2017-2017 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
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* The Noise authors hereby grant permission for non-GPL compatible
|
||||
* GStreamer plugins to be used and distributed together with GStreamer
|
||||
* and Noise. This permission is above and beyond the permissions granted
|
||||
* by the GPL license by which Noise is covered. If you modify this code
|
||||
* you may extend this exception to your version of the code, but you are not
|
||||
* obligated to do so. If you do not wish to do so, delete this exception
|
||||
* statement from your version.
|
||||
*
|
||||
* Authored by: Artem Anufrij <artem.anufrij@live.de>
|
||||
*/
|
||||
|
||||
public signal void add_request();
|
||||
public signal void edit_request(DesktopFile desktop_file);
|
||||
public signal void app_deleted ();
|
||||
namespace Webpin {
|
||||
public class ApplicationsView : Gtk.Box {
|
||||
|
||||
private Gtk.FlowBox icon_view;
|
||||
private Gee.HashMap<string, GLib.DesktopAppInfo> applications;
|
||||
public signal void add_request();
|
||||
public signal void edit_request(DesktopFile desktop_file);
|
||||
public signal void app_deleted ();
|
||||
|
||||
public bool has_items { get { return icon_view.get_children ().length () > 0; } }
|
||||
private Gtk.FlowBox icon_view;
|
||||
private Gee.HashMap<string, GLib.DesktopAppInfo> applications;
|
||||
|
||||
public ApplicationsView () {
|
||||
public bool has_items { get { return icon_view.get_children ().length () > 0; } }
|
||||
|
||||
GLib.Object (orientation: Gtk.Orientation.VERTICAL);
|
||||
var scrolled = new Gtk.ScrolledWindow (null, null);
|
||||
scrolled.hscrollbar_policy = Gtk.PolicyType.NEVER;
|
||||
public ApplicationsView () {
|
||||
|
||||
icon_view = new Gtk.FlowBox();
|
||||
icon_view.valign = Gtk.Align.START;
|
||||
icon_view.vexpand = false;
|
||||
icon_view.homogeneous = true;
|
||||
icon_view.column_spacing = 15;
|
||||
icon_view.row_spacing = 15;
|
||||
icon_view.margin = 15;
|
||||
icon_view.activate_on_single_click = false;
|
||||
icon_view.child_activated.connect ((child) => {
|
||||
if ((child as Gtk.FlowBoxChild).get_child () is ApplicationIcon) {
|
||||
var app_icon = (child as Gtk.FlowBoxChild).get_child () as ApplicationIcon;
|
||||
try {
|
||||
Process.spawn_command_line_async ("webby " + app_icon.desktop_file.url);
|
||||
} catch (SpawnError e) {
|
||||
debug ("Error: %s\n", e.message);
|
||||
GLib.Object (orientation: Gtk.Orientation.VERTICAL);
|
||||
var scrolled = new Gtk.ScrolledWindow (null, null);
|
||||
scrolled.hscrollbar_policy = Gtk.PolicyType.NEVER;
|
||||
|
||||
icon_view = new Gtk.FlowBox();
|
||||
icon_view.valign = Gtk.Align.START;
|
||||
icon_view.vexpand = false;
|
||||
icon_view.homogeneous = true;
|
||||
icon_view.column_spacing = 15;
|
||||
icon_view.row_spacing = 15;
|
||||
icon_view.margin = 15;
|
||||
icon_view.activate_on_single_click = false;
|
||||
icon_view.child_activated.connect ((child) => {
|
||||
if ((child as Gtk.FlowBoxChild).get_child () is ApplicationIcon) {
|
||||
var app_icon = (child as Gtk.FlowBoxChild).get_child () as ApplicationIcon;
|
||||
try {
|
||||
Process.spawn_command_line_async ("com.github.artemanufrij.webpin " + app_icon.desktop_file.url);
|
||||
} catch (SpawnError e) {
|
||||
debug ("Error: %s\n", e.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
load_applications ();
|
||||
});
|
||||
load_applications ();
|
||||
|
||||
scrolled.add(icon_view);
|
||||
this.pack_start(scrolled, true, true, 0);
|
||||
scrolled.add(icon_view);
|
||||
this.pack_start(scrolled, true, true, 0);
|
||||
|
||||
}
|
||||
|
||||
public void load_applications () {
|
||||
applications = DesktopFile.get_webby_applications();
|
||||
|
||||
foreach (GLib.DesktopAppInfo app in applications.values) {
|
||||
this.add_button (app);
|
||||
}
|
||||
}
|
||||
|
||||
public void add_button (GLib.DesktopAppInfo app) {
|
||||
var image = new ApplicationIcon (app);
|
||||
image.edit_request.connect ((desktop_file) => {
|
||||
edit_request (desktop_file);
|
||||
icon_view.unselect_all ();
|
||||
});
|
||||
image.deleted.connect ((parent) => {
|
||||
this.icon_view.remove (parent);
|
||||
app_deleted ();
|
||||
});
|
||||
icon_view.add (image);
|
||||
icon_view.show_all ();
|
||||
}
|
||||
public void load_applications () {
|
||||
applications = DesktopFile.get_webby_applications();
|
||||
|
||||
public void select_last_item () {
|
||||
icon_view.select_child (icon_view.get_child_at_index ((int)icon_view.get_children ().length () - 1));
|
||||
}
|
||||
foreach (GLib.DesktopAppInfo app in applications.values) {
|
||||
this.add_button (app);
|
||||
}
|
||||
}
|
||||
|
||||
public void select_first_item () {
|
||||
icon_view.select_child (icon_view.get_child_at_index (0));
|
||||
}
|
||||
public void add_button (GLib.DesktopAppInfo app) {
|
||||
var image = new ApplicationIcon (app);
|
||||
image.edit_request.connect ((desktop_file) => {
|
||||
edit_request (desktop_file);
|
||||
icon_view.unselect_all ();
|
||||
});
|
||||
image.deleted.connect ((parent) => {
|
||||
this.icon_view.remove (parent);
|
||||
app_deleted ();
|
||||
});
|
||||
icon_view.add (image);
|
||||
icon_view.show_all ();
|
||||
}
|
||||
|
||||
public void update_button (GLib.DesktopAppInfo app) {
|
||||
foreach (var item in icon_view.get_children ()) {
|
||||
if ((item as Gtk.FlowBoxChild).get_child () is ApplicationIcon) {
|
||||
var app_icon = (item as Gtk.FlowBoxChild).get_child () as ApplicationIcon;
|
||||
public void select_last_item () {
|
||||
icon_view.select_child (icon_view.get_child_at_index ((int)icon_view.get_children ().length () - 1));
|
||||
}
|
||||
|
||||
if (app_icon.desktop_file.name == app.get_display_name ()) {
|
||||
app_icon.set_new_desktopfile (new DesktopFile.from_desktopappinfo (app));
|
||||
icon_view.select_child (item as Gtk.FlowBoxChild);
|
||||
break;
|
||||
public void select_first_item () {
|
||||
icon_view.select_child (icon_view.get_child_at_index (0));
|
||||
}
|
||||
|
||||
public void update_button (GLib.DesktopAppInfo app) {
|
||||
foreach (var item in icon_view.get_children ()) {
|
||||
if ((item as Gtk.FlowBoxChild).get_child () is ApplicationIcon) {
|
||||
var app_icon = (item as Gtk.FlowBoxChild).get_child () as ApplicationIcon;
|
||||
|
||||
if (app_icon.desktop_file.name == app.get_display_name ()) {
|
||||
app_icon.set_new_desktopfile (new DesktopFile.from_desktopappinfo (app));
|
||||
icon_view.select_child (item as Gtk.FlowBoxChild);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
install(FILES webkit2gtk-3.0.deps webkit2gtk-3.0.vapi DESTINATION share/vala-0.26/vapi)
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
# GSettings.cmake, CMake macros written for Marlin, feel free to re-use them.
|
||||
|
||||
option (GSETTINGS_LOCALINSTALL "Install GSettings Schemas locally instead of to the GLib prefix" ON)
|
||||
|
||||
option (GSETTINGS_COMPILE "Compile GSettings Schemas after installation" ${GSETTINGS_LOCALINSTALL})
|
||||
|
||||
if(GSETTINGS_LOCALINSTALL)
|
||||
message(STATUS "GSettings schemas will be installed locally.")
|
||||
endif()
|
||||
|
||||
if(GSETTINGS_COMPILE)
|
||||
message(STATUS "GSettings shemas will be compiled.")
|
||||
endif()
|
||||
|
||||
macro(add_schema SCHEMA_NAME)
|
||||
|
||||
set(PKG_CONFIG_EXECUTABLE pkg-config)
|
||||
# Have an option to not install the schema into where GLib is
|
||||
if (GSETTINGS_LOCALINSTALL)
|
||||
SET (GSETTINGS_DIR "${CMAKE_INSTALL_PREFIX}/share/glib-2.0/schemas/")
|
||||
else (GSETTINGS_LOCALINSTALL)
|
||||
execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} glib-2.0 --variable prefix OUTPUT_VARIABLE _glib_prefix OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
SET (GSETTINGS_DIR "${_glib_prefix}/share/glib-2.0/schemas/")
|
||||
endif (GSETTINGS_LOCALINSTALL)
|
||||
|
||||
# Run the validator and error if it fails
|
||||
execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} gio-2.0 --variable glib_compile_schemas OUTPUT_VARIABLE _glib_comple_schemas OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process (COMMAND ${_glib_comple_schemas} --dry-run --schema-file=${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_NAME} ERROR_VARIABLE _schemas_invalid OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
if (_schemas_invalid)
|
||||
message (SEND_ERROR "Schema validation error: ${_schemas_invalid}")
|
||||
endif (_schemas_invalid)
|
||||
|
||||
# Actually install and recomple schemas
|
||||
message (STATUS "GSettings schemas will be installed into ${GSETTINGS_DIR}")
|
||||
install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_NAME} DESTINATION ${GSETTINGS_DIR} OPTIONAL)
|
||||
|
||||
if (GSETTINGS_COMPILE)
|
||||
install (CODE "message (STATUS \"Compiling GSettings schemas\")")
|
||||
install (CODE "execute_process (COMMAND ${_glib_comple_schemas} ${GSETTINGS_DIR})")
|
||||
endif ()
|
||||
endmacro()
|
|
@ -1,286 +0,0 @@
|
|||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
|
||||
|
||||
# Default target executed when no arguments are given to make.
|
||||
default_target: all
|
||||
.PHONY : default_target
|
||||
|
||||
#=============================================================================
|
||||
# Special targets provided by cmake.
|
||||
|
||||
# Disable implicit rules so canoncical targets will work.
|
||||
.SUFFIXES:
|
||||
|
||||
# Remove some rules from gmake that .SUFFIXES does not remove.
|
||||
SUFFIXES =
|
||||
|
||||
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||
|
||||
# Suppress display of executed commands.
|
||||
$(VERBOSE).SILENT:
|
||||
|
||||
# A target that is always out of date.
|
||||
cmake_force:
|
||||
.PHONY : cmake_force
|
||||
|
||||
#=============================================================================
|
||||
# Set environment variables for the build.
|
||||
|
||||
# The shell in which to execute make rules.
|
||||
SHELL = /bin/sh
|
||||
|
||||
# The CMake executable.
|
||||
CMAKE_COMMAND = /usr/bin/cmake
|
||||
|
||||
# The command to remove a file.
|
||||
RM = /usr/bin/cmake -E remove -f
|
||||
|
||||
# The top-level source directory on which CMake was run.
|
||||
CMAKE_SOURCE_DIR = /home/mefrio/Scrivania/cmake
|
||||
|
||||
# The top-level build directory on which CMake was run.
|
||||
CMAKE_BINARY_DIR = /home/mefrio/Scrivania/cmake/cmake
|
||||
|
||||
#=============================================================================
|
||||
# Targets provided globally by CMake.
|
||||
|
||||
# Special rule for the target edit_cache
|
||||
edit_cache:
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running interactive CMake command-line interface..."
|
||||
/usr/bin/cmake -i .
|
||||
.PHONY : edit_cache
|
||||
|
||||
# Special rule for the target edit_cache
|
||||
edit_cache/fast: edit_cache
|
||||
.PHONY : edit_cache/fast
|
||||
|
||||
# Special rule for the target install
|
||||
install: preinstall
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
|
||||
/usr/bin/cmake -P cmake_install.cmake
|
||||
.PHONY : install
|
||||
|
||||
# Special rule for the target install
|
||||
install/fast: preinstall/fast
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
|
||||
/usr/bin/cmake -P cmake_install.cmake
|
||||
.PHONY : install/fast
|
||||
|
||||
# Special rule for the target install/local
|
||||
install/local: preinstall
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
|
||||
/usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
|
||||
.PHONY : install/local
|
||||
|
||||
# Special rule for the target install/local
|
||||
install/local/fast: install/local
|
||||
.PHONY : install/local/fast
|
||||
|
||||
# Special rule for the target install/strip
|
||||
install/strip: preinstall
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
|
||||
/usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
|
||||
.PHONY : install/strip
|
||||
|
||||
# Special rule for the target install/strip
|
||||
install/strip/fast: install/strip
|
||||
.PHONY : install/strip/fast
|
||||
|
||||
# Special rule for the target list_install_components
|
||||
list_install_components:
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
|
||||
.PHONY : list_install_components
|
||||
|
||||
# Special rule for the target list_install_components
|
||||
list_install_components/fast: list_install_components
|
||||
.PHONY : list_install_components/fast
|
||||
|
||||
# Special rule for the target rebuild_cache
|
||||
rebuild_cache:
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
|
||||
/usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
|
||||
.PHONY : rebuild_cache
|
||||
|
||||
# Special rule for the target rebuild_cache
|
||||
rebuild_cache/fast: rebuild_cache
|
||||
.PHONY : rebuild_cache/fast
|
||||
|
||||
# The main all target
|
||||
all: cmake_check_build_system
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/mefrio/Scrivania/cmake/cmake/CMakeFiles /home/mefrio/Scrivania/cmake/cmake/CMakeFiles/progress.marks
|
||||
$(MAKE) -f CMakeFiles/Makefile2 all
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/mefrio/Scrivania/cmake/cmake/CMakeFiles 0
|
||||
.PHONY : all
|
||||
|
||||
# The main clean target
|
||||
clean:
|
||||
$(MAKE) -f CMakeFiles/Makefile2 clean
|
||||
.PHONY : clean
|
||||
|
||||
# The main clean target
|
||||
clean/fast: clean
|
||||
.PHONY : clean/fast
|
||||
|
||||
# Prepare targets for installation.
|
||||
preinstall: all
|
||||
$(MAKE) -f CMakeFiles/Makefile2 preinstall
|
||||
.PHONY : preinstall
|
||||
|
||||
# Prepare targets for installation.
|
||||
preinstall/fast:
|
||||
$(MAKE) -f CMakeFiles/Makefile2 preinstall
|
||||
.PHONY : preinstall/fast
|
||||
|
||||
# clear depends
|
||||
depend:
|
||||
$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
|
||||
.PHONY : depend
|
||||
|
||||
#=============================================================================
|
||||
# Target rules for targets named scratch
|
||||
|
||||
# Build rule for target.
|
||||
scratch: cmake_check_build_system
|
||||
$(MAKE) -f CMakeFiles/Makefile2 scratch
|
||||
.PHONY : scratch
|
||||
|
||||
# fast build rule for target.
|
||||
scratch/fast:
|
||||
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/build
|
||||
.PHONY : scratch/fast
|
||||
|
||||
src/entry.o: src/entry.c.o
|
||||
.PHONY : src/entry.o
|
||||
|
||||
# target to build an object file
|
||||
src/entry.c.o:
|
||||
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/entry.c.o
|
||||
.PHONY : src/entry.c.o
|
||||
|
||||
src/entry.i: src/entry.c.i
|
||||
.PHONY : src/entry.i
|
||||
|
||||
# target to preprocess a source file
|
||||
src/entry.c.i:
|
||||
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/entry.c.i
|
||||
.PHONY : src/entry.c.i
|
||||
|
||||
src/entry.s: src/entry.c.s
|
||||
.PHONY : src/entry.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
src/entry.c.s:
|
||||
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/entry.c.s
|
||||
.PHONY : src/entry.c.s
|
||||
|
||||
src/main_window.o: src/main_window.c.o
|
||||
.PHONY : src/main_window.o
|
||||
|
||||
# target to build an object file
|
||||
src/main_window.c.o:
|
||||
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/main_window.c.o
|
||||
.PHONY : src/main_window.c.o
|
||||
|
||||
src/main_window.i: src/main_window.c.i
|
||||
.PHONY : src/main_window.i
|
||||
|
||||
# target to preprocess a source file
|
||||
src/main_window.c.i:
|
||||
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/main_window.c.i
|
||||
.PHONY : src/main_window.c.i
|
||||
|
||||
src/main_window.s: src/main_window.c.s
|
||||
.PHONY : src/main_window.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
src/main_window.c.s:
|
||||
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/main_window.c.s
|
||||
.PHONY : src/main_window.c.s
|
||||
|
||||
src/menu.o: src/menu.c.o
|
||||
.PHONY : src/menu.o
|
||||
|
||||
# target to build an object file
|
||||
src/menu.c.o:
|
||||
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/menu.c.o
|
||||
.PHONY : src/menu.c.o
|
||||
|
||||
src/menu.i: src/menu.c.i
|
||||
.PHONY : src/menu.i
|
||||
|
||||
# target to preprocess a source file
|
||||
src/menu.c.i:
|
||||
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/menu.c.i
|
||||
.PHONY : src/menu.c.i
|
||||
|
||||
src/menu.s: src/menu.c.s
|
||||
.PHONY : src/menu.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
src/menu.c.s:
|
||||
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/menu.c.s
|
||||
.PHONY : src/menu.c.s
|
||||
|
||||
src/notebook.o: src/notebook.c.o
|
||||
.PHONY : src/notebook.o
|
||||
|
||||
# target to build an object file
|
||||
src/notebook.c.o:
|
||||
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/notebook.c.o
|
||||
.PHONY : src/notebook.c.o
|
||||
|
||||
src/notebook.i: src/notebook.c.i
|
||||
.PHONY : src/notebook.i
|
||||
|
||||
# target to preprocess a source file
|
||||
src/notebook.c.i:
|
||||
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/notebook.c.i
|
||||
.PHONY : src/notebook.c.i
|
||||
|
||||
src/notebook.s: src/notebook.c.s
|
||||
.PHONY : src/notebook.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
src/notebook.c.s:
|
||||
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/notebook.c.s
|
||||
.PHONY : src/notebook.c.s
|
||||
|
||||
# Help Target
|
||||
help:
|
||||
@echo "The following are some of the valid targets for this Makefile:"
|
||||
@echo "... all (the default if no target is provided)"
|
||||
@echo "... clean"
|
||||
@echo "... depend"
|
||||
@echo "... edit_cache"
|
||||
@echo "... install"
|
||||
@echo "... install/local"
|
||||
@echo "... install/strip"
|
||||
@echo "... list_install_components"
|
||||
@echo "... rebuild_cache"
|
||||
@echo "... scratch"
|
||||
@echo "... src/entry.o"
|
||||
@echo "... src/entry.i"
|
||||
@echo "... src/entry.s"
|
||||
@echo "... src/main_window.o"
|
||||
@echo "... src/main_window.i"
|
||||
@echo "... src/main_window.s"
|
||||
@echo "... src/menu.o"
|
||||
@echo "... src/menu.i"
|
||||
@echo "... src/menu.s"
|
||||
@echo "... src/notebook.o"
|
||||
@echo "... src/notebook.i"
|
||||
@echo "... src/notebook.s"
|
||||
.PHONY : help
|
||||
|
||||
|
||||
|
||||
#=============================================================================
|
||||
# Special targets to cleanup operation of make.
|
||||
|
||||
# Special rule to run CMake to check the build system integrity.
|
||||
# No rule that depends on this can have commands that come from listfiles
|
||||
# because they might be regenerated.
|
||||
cmake_check_build_system:
|
||||
$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
|
||||
.PHONY : cmake_check_build_system
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
Elementary CMake modules
|
||||
|
||||
This is a set of CMake modules: Translations, GSettings, and Vala modules.
|
||||
|
||||
For all the Vala related modules see README.Vala.rst:
|
||||
- ParseArguments.cmake
|
||||
- ValaPrecompile.cmake
|
||||
- ValaVersion.cmake
|
||||
- FindVala.cmake
|
||||
|
|
@ -1,173 +0,0 @@
|
|||
==========
|
||||
Vala CMake
|
||||
==========
|
||||
:Author:
|
||||
Jakob Westhoff
|
||||
:Version:
|
||||
Draft
|
||||
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
Vala CMake is a collection of macros for the CMake_ build system to allow the
|
||||
creation and management of projects developed using the Vala_ programming
|
||||
language or its "Genie" flavor (less tested).
|
||||
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
To use the Vala macros in your own project you need to copy the macro files to
|
||||
an arbitrary folder in your projects directory and reference them in your
|
||||
``CMakeLists.txt`` file.
|
||||
|
||||
Assuming the macros are stored under ``cmake/vala`` in your projects folder you
|
||||
need to add the following information to your base ``CMakeLists.txt``::
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH
|
||||
${CMAKE_SOURCE_DIR}/cmake/vala
|
||||
)
|
||||
|
||||
After the new module path as been added you can simply include the provided
|
||||
modules or use the provided find routines.
|
||||
|
||||
|
||||
Finding Vala
|
||||
============
|
||||
|
||||
The find module for vala works like any other Find module in CMake.
|
||||
You can use it by simply calling the usual ``find_package`` function. Default
|
||||
parameters like ``REQUIRED`` and ``QUIETLY`` are supported.
|
||||
|
||||
::
|
||||
|
||||
find_package(Vala REQUIRED)
|
||||
|
||||
After a successful call to the find_package function the following variables
|
||||
will be set:
|
||||
|
||||
VALA_FOUND
|
||||
Whether the vala compiler has been found or not
|
||||
|
||||
VALA_EXECUTABLE
|
||||
Full path to the valac executable if it has been found
|
||||
|
||||
VALA_VERSION
|
||||
Version number of the available valac
|
||||
|
||||
|
||||
Precompiling Vala sources
|
||||
=========================
|
||||
|
||||
CMake is mainly supposed to handle c or c++ based projects. Luckily every vala
|
||||
program is translated into plain c code using the vala compiler, followed by
|
||||
normal compilation of the generated c program using gcc.
|
||||
|
||||
The macro ``vala_precompile`` uses that fact to create c files from your .vala
|
||||
sources for further CMake processing.
|
||||
|
||||
The first parameter provided is a variable, which will be filled with a list of
|
||||
c files outputted by the vala compiler. This list can than be used in
|
||||
conjunction with functions like ``add_executable`` or others to create the
|
||||
necessary compile rules with CMake.
|
||||
|
||||
The initial variable is followed by a list of .vala files to be compiled.
|
||||
Please take care to add every vala file belonging to the currently compiled
|
||||
project or library as Vala will otherwise not be able to resolve all
|
||||
dependencies.
|
||||
|
||||
The following sections may be specified afterwards to provide certain options
|
||||
to the vala compiler:
|
||||
|
||||
PACKAGES
|
||||
A list of vala packages/libraries to be used during the compile cycle. The
|
||||
package names are exactly the same, as they would be passed to the valac
|
||||
"--pkg=" option.
|
||||
|
||||
OPTIONS
|
||||
A list of optional options to be passed to the valac executable. This can be
|
||||
used to pass "--thread" for example to enable multi-threading support.
|
||||
|
||||
DIRECTORY
|
||||
Specify the directory where the output source files will be stored. If
|
||||
ommitted, the source files will be stored in CMAKE_CURRENT_BINARY_DIR.
|
||||
|
||||
CUSTOM_VAPIS
|
||||
A list of custom vapi files to be included for compilation. This can be
|
||||
useful to include freshly created vala libraries without having to install
|
||||
them in the system.
|
||||
|
||||
GENERATE_VAPI
|
||||
Pass all the needed flags to the compiler to create an internal vapi for
|
||||
the compiled library. The provided name will be used for this and a
|
||||
<provided_name>.vapi file will be created.
|
||||
|
||||
GENERATE_HEADER
|
||||
Let the compiler generate a header file for the compiled code. There will
|
||||
be a header file as well as an internal header file being generated called
|
||||
<provided_name>.h and <provided_name>_internal.h
|
||||
|
||||
The following call is a simple example to the vala_precompile macro showing an
|
||||
example to every of the optional sections::
|
||||
|
||||
vala_precompile(VALA_C
|
||||
source1.vala
|
||||
source2.vala
|
||||
source3.vala
|
||||
PACKAGES
|
||||
gtk+-2.0
|
||||
gio-1.0
|
||||
posix
|
||||
OPTIONS
|
||||
--thread
|
||||
CUSTOM_VAPIS
|
||||
some_vapi.vapi
|
||||
GENERATE_VAPI
|
||||
myvapi
|
||||
GENERATE_HEADER
|
||||
myheader
|
||||
)
|
||||
|
||||
Most important is the variable VALA_C which will contain all the generated c
|
||||
file names after the call. The easiest way to use this information is to tell
|
||||
CMake to create an executable out of it.
|
||||
|
||||
::
|
||||
|
||||
add_executable(myexecutable ${VALA_C})
|
||||
|
||||
|
||||
Further reading
|
||||
===============
|
||||
|
||||
The `Pdf Presenter Console`__ , which is a vala based project of mine, makes
|
||||
heavy usage of the here described macros. To look at a real world example of
|
||||
these macros the mentioned project is the right place to take a look. The svn
|
||||
trunk of it can be found at::
|
||||
|
||||
svn://pureenergy.cc/pdf_presenter_console/trunk
|
||||
|
||||
|
||||
__ http://westhoffswelt.de/projects/pdf_presenter_console.html
|
||||
|
||||
|
||||
Acknowledgments
|
||||
===============
|
||||
|
||||
Thanks go out to Florian Sowade, a fellow local PHP-Usergroupie, who helped me
|
||||
a lot with the initial version of this macros and always answered my mostly
|
||||
dumb CMake questions.
|
||||
|
||||
.. _CMake: http://cmake.org
|
||||
.. _Vala: http://live.gnome.org/Vala
|
||||
.. _Genie: http://live.gnome.org/Genie
|
||||
|
||||
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
mode: rst
|
||||
fill-column: 79
|
||||
End:
|
||||
vim: et syn=rst tw=79
|
|
@ -1,41 +0,0 @@
|
|||
# Translations.cmake, CMake macros written for Marlin, feel free to re-use them
|
||||
|
||||
macro(add_translations_directory NLS_PACKAGE)
|
||||
add_custom_target (i18n ALL COMMENT “Building i18n messages.”)
|
||||
find_program (MSGFMT_EXECUTABLE msgfmt)
|
||||
file (GLOB PO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.po)
|
||||
foreach (PO_INPUT ${PO_FILES})
|
||||
get_filename_component (PO_INPUT_BASE ${PO_INPUT} NAME_WE)
|
||||
set (MO_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PO_INPUT_BASE}.mo)
|
||||
add_custom_command (TARGET i18n COMMAND ${MSGFMT_EXECUTABLE} -o ${MO_OUTPUT} ${PO_INPUT})
|
||||
|
||||
install (FILES ${MO_OUTPUT} DESTINATION
|
||||
share/locale/${PO_INPUT_BASE}/LC_MESSAGES
|
||||
RENAME ${NLS_PACKAGE}.mo)
|
||||
endforeach (PO_INPUT ${PO_FILES})
|
||||
endmacro(add_translations_directory)
|
||||
|
||||
|
||||
macro(add_translations_catalog NLS_PACKAGE)
|
||||
add_custom_target (pot COMMENT “Building translation catalog.”)
|
||||
find_program (XGETTEXT_EXECUTABLE xgettext)
|
||||
|
||||
|
||||
set(C_SOURCE "")
|
||||
|
||||
foreach(FILES_INPUT ${ARGN})
|
||||
file (GLOB SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT}/*.c)
|
||||
foreach(C_FILE ${SOURCE_FILES})
|
||||
set(C_SOURCE ${C_SOURCE} ${C_FILE})
|
||||
endforeach()
|
||||
file (GLOB SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT}/*.vala)
|
||||
foreach(C_FILE ${SOURCE_FILES})
|
||||
set(C_SOURCE ${C_SOURCE} ${C_FILE})
|
||||
endforeach()
|
||||
endforeach()
|
||||
|
||||
add_custom_command (TARGET pot COMMAND
|
||||
${XGETTEXT_EXECUTABLE} -d ${NLS_PACKAGE} -o ${CMAKE_CURRENT_SOURCE_DIR}/${NLS_PACKAGE}.pot
|
||||
${VALA_SOURCE} ${C_SOURCE} --keyword="_" --from-code=UTF-8
|
||||
)
|
||||
endmacro()
|
|
@ -1,21 +0,0 @@
|
|||
if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||
message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
|
||||
endif()
|
||||
|
||||
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
|
||||
string(REGEX REPLACE "\n" ";" files "${files}")
|
||||
foreach(file ${files})
|
||||
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
|
||||
if(EXISTS "$ENV{DESTDIR}${file}")
|
||||
exec_program(
|
||||
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
|
||||
OUTPUT_VARIABLE rm_out
|
||||
RETURN_VALUE rm_retval
|
||||
)
|
||||
if(NOT "${rm_retval}" STREQUAL 0)
|
||||
message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
|
||||
endif()
|
||||
else(EXISTS "$ENV{DESTDIR}${file}")
|
||||
message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
|
||||
endif()
|
||||
endforeach()
|
|
@ -1,65 +0,0 @@
|
|||
##
|
||||
# Copyright 2009-2010 Jakob Westhoff. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY JAKOB WESTHOFF ``AS IS'' AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||
# EVENT SHALL JAKOB WESTHOFF OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# The views and conclusions contained in the software and documentation are those
|
||||
# of the authors and should not be interpreted as representing official policies,
|
||||
# either expressed or implied, of Jakob Westhoff
|
||||
##
|
||||
|
||||
##
|
||||
# Find module for the Vala compiler (valac)
|
||||
#
|
||||
# This module determines wheter a Vala compiler is installed on the current
|
||||
# system and where its executable is.
|
||||
#
|
||||
# Call the module using "find_package(Vala) from within your CMakeLists.txt.
|
||||
#
|
||||
# The following variables will be set after an invocation:
|
||||
#
|
||||
# VALA_FOUND Whether the vala compiler has been found or not
|
||||
# VALA_EXECUTABLE Full path to the valac executable if it has been found
|
||||
# VALA_VERSION Version number of the available valac
|
||||
##
|
||||
|
||||
|
||||
# Search for the valac executable in the usual system paths.
|
||||
find_program(VALA_EXECUTABLE
|
||||
NAMES valac)
|
||||
|
||||
# Handle the QUIETLY and REQUIRED arguments, which may be given to the find call.
|
||||
# Furthermore set VALA_FOUND to TRUE if Vala has been found (aka.
|
||||
# VALA_EXECUTABLE is set)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Vala DEFAULT_MSG VALA_EXECUTABLE)
|
||||
|
||||
mark_as_advanced(VALA_EXECUTABLE)
|
||||
|
||||
# Determine the valac version
|
||||
if(VALA_FOUND)
|
||||
execute_process(COMMAND ${VALA_EXECUTABLE} "--version"
|
||||
OUTPUT_VARIABLE "VALA_VERSION")
|
||||
string(REPLACE "Vala" "" "VALA_VERSION" ${VALA_VERSION})
|
||||
string(STRIP ${VALA_VERSION} "VALA_VERSION")
|
||||
endif(VALA_FOUND)
|
|
@ -1,36 +0,0 @@
|
|||
##
|
||||
# This is a helper Macro to parse optional arguments in Macros/Functions
|
||||
# It has been taken from the public CMake wiki.
|
||||
# See http://www.cmake.org/Wiki/CMakeMacroParseArguments for documentation and
|
||||
# licensing.
|
||||
##
|
||||
macro(parse_arguments prefix arg_names option_names)
|
||||
set(DEFAULT_ARGS)
|
||||
foreach(arg_name ${arg_names})
|
||||
set(${prefix}_${arg_name})
|
||||
endforeach(arg_name)
|
||||
foreach(option ${option_names})
|
||||
set(${prefix}_${option} FALSE)
|
||||
endforeach(option)
|
||||
|
||||
set(current_arg_name DEFAULT_ARGS)
|
||||
set(current_arg_list)
|
||||
foreach(arg ${ARGN})
|
||||
set(larg_names ${arg_names})
|
||||
list(FIND larg_names "${arg}" is_arg_name)
|
||||
if(is_arg_name GREATER -1)
|
||||
set(${prefix}_${current_arg_name} ${current_arg_list})
|
||||
set(current_arg_name ${arg})
|
||||
set(current_arg_list)
|
||||
else(is_arg_name GREATER -1)
|
||||
set(loption_names ${option_names})
|
||||
list(FIND loption_names "${arg}" is_option)
|
||||
if(is_option GREATER -1)
|
||||
set(${prefix}_${arg} TRUE)
|
||||
else(is_option GREATER -1)
|
||||
set(current_arg_list ${current_arg_list} ${arg})
|
||||
endif(is_option GREATER -1)
|
||||
endif(is_arg_name GREATER -1)
|
||||
endforeach(arg)
|
||||
set(${prefix}_${current_arg_name} ${current_arg_list})
|
||||
endmacro(parse_arguments)
|
|
@ -1,175 +0,0 @@
|
|||
##
|
||||
# Copyright 2009-2010 Jakob Westhoff. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY JAKOB WESTHOFF ``AS IS'' AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||
# EVENT SHALL JAKOB WESTHOFF OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# The views and conclusions contained in the software and documentation are those
|
||||
# of the authors and should not be interpreted as representing official policies,
|
||||
# either expressed or implied, of Jakob Westhoff
|
||||
##
|
||||
|
||||
include(ParseArguments)
|
||||
find_package(Vala REQUIRED)
|
||||
|
||||
##
|
||||
# Compile vala files to their c equivalents for further processing.
|
||||
#
|
||||
# The "vala_precompile" macro takes care of calling the valac executable on the
|
||||
# given source to produce c files which can then be processed further using
|
||||
# default cmake functions.
|
||||
#
|
||||
# The first parameter provided is a variable, which will be filled with a list
|
||||
# of c files outputted by the vala compiler. This list can than be used in
|
||||
# conjuction with functions like "add_executable" or others to create the
|
||||
# neccessary compile rules with CMake.
|
||||
#
|
||||
# The initial variable is followed by a list of .vala files to be compiled.
|
||||
# Please take care to add every vala file belonging to the currently compiled
|
||||
# project or library as Vala will otherwise not be able to resolve all
|
||||
# dependencies.
|
||||
#
|
||||
# The following sections may be specified afterwards to provide certain options
|
||||
# to the vala compiler:
|
||||
#
|
||||
# PACKAGES
|
||||
# A list of vala packages/libraries to be used during the compile cycle. The
|
||||
# package names are exactly the same, as they would be passed to the valac
|
||||
# "--pkg=" option.
|
||||
#
|
||||
# OPTIONS
|
||||
# A list of optional options to be passed to the valac executable. This can be
|
||||
# used to pass "--thread" for example to enable multi-threading support.
|
||||
#
|
||||
# CUSTOM_VAPIS
|
||||
# A list of custom vapi files to be included for compilation. This can be
|
||||
# useful to include freshly created vala libraries without having to install
|
||||
# them in the system.
|
||||
#
|
||||
# GENERATE_VAPI
|
||||
# Pass all the needed flags to the compiler to create an internal vapi for
|
||||
# the compiled library. The provided name will be used for this and a
|
||||
# <provided_name>.vapi file will be created.
|
||||
#
|
||||
# GENERATE_HEADER
|
||||
# Let the compiler generate a header file for the compiled code. There will
|
||||
# be a header file as well as an internal header file being generated called
|
||||
# <provided_name>.h and <provided_name>_internal.h
|
||||
#
|
||||
# The following call is a simple example to the vala_precompile macro showing
|
||||
# an example to every of the optional sections:
|
||||
#
|
||||
# vala_precompile(VALA_C
|
||||
# source1.vala
|
||||
# source2.vala
|
||||
# source3.vala
|
||||
# PACKAGES
|
||||
# gtk+-2.0
|
||||
# gio-1.0
|
||||
# posix
|
||||
# DIRECTORY
|
||||
# gen
|
||||
# OPTIONS
|
||||
# --thread
|
||||
# CUSTOM_VAPIS
|
||||
# some_vapi.vapi
|
||||
# GENERATE_VAPI
|
||||
# myvapi
|
||||
# GENERATE_HEADER
|
||||
# myheader
|
||||
# )
|
||||
#
|
||||
# Most important is the variable VALA_C which will contain all the generated c
|
||||
# file names after the call.
|
||||
##
|
||||
|
||||
macro(vala_precompile output)
|
||||
parse_arguments(ARGS "PACKAGES;OPTIONS;DIRECTORY;GENERATE_HEADER;GENERATE_VAPI;CUSTOM_VAPIS" "" ${ARGN})
|
||||
if(ARGS_DIRECTORY)
|
||||
set(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_DIRECTORY})
|
||||
else(ARGS_DIRECTORY)
|
||||
set(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||
endif(ARGS_DIRECTORY)
|
||||
include_directories(${DIRECTORY})
|
||||
set(vala_pkg_opts "")
|
||||
foreach(pkg ${ARGS_PACKAGES})
|
||||
list(APPEND vala_pkg_opts "--pkg=${pkg}")
|
||||
endforeach(pkg ${ARGS_PACKAGES})
|
||||
set(in_files "")
|
||||
set(out_files "")
|
||||
set(${output} "")
|
||||
foreach(src ${ARGS_DEFAULT_ARGS})
|
||||
list(APPEND in_files "${CMAKE_CURRENT_SOURCE_DIR}/${src}")
|
||||
string(REPLACE ".vala" ".c" src ${src})
|
||||
string(REPLACE ".gs" ".c" src ${src})
|
||||
set(out_file "${DIRECTORY}/${src}")
|
||||
list(APPEND out_files "${DIRECTORY}/${src}")
|
||||
list(APPEND ${output} ${out_file})
|
||||
endforeach(src ${ARGS_DEFAULT_ARGS})
|
||||
|
||||
set(custom_vapi_arguments "")
|
||||
if(ARGS_CUSTOM_VAPIS)
|
||||
foreach(vapi ${ARGS_CUSTOM_VAPIS})
|
||||
if(${vapi} MATCHES ${CMAKE_SOURCE_DIR} OR ${vapi} MATCHES ${CMAKE_BINARY_DIR})
|
||||
list(APPEND custom_vapi_arguments ${vapi})
|
||||
else (${vapi} MATCHES ${CMAKE_SOURCE_DIR} OR ${vapi} MATCHES ${CMAKE_BINARY_DIR})
|
||||
list(APPEND custom_vapi_arguments ${CMAKE_CURRENT_SOURCE_DIR}/${vapi})
|
||||
endif(${vapi} MATCHES ${CMAKE_SOURCE_DIR} OR ${vapi} MATCHES ${CMAKE_BINARY_DIR})
|
||||
endforeach(vapi ${ARGS_CUSTOM_VAPIS})
|
||||
endif(ARGS_CUSTOM_VAPIS)
|
||||
|
||||
set(vapi_arguments "")
|
||||
if(ARGS_GENERATE_VAPI)
|
||||
list(APPEND out_files "${DIRECTORY}/${ARGS_GENERATE_VAPI}.vapi")
|
||||
set(vapi_arguments "--internal-vapi=${ARGS_GENERATE_VAPI}.vapi")
|
||||
|
||||
# Header and internal header is needed to generate internal vapi
|
||||
if (NOT ARGS_GENERATE_HEADER)
|
||||
set(ARGS_GENERATE_HEADER ${ARGS_GENERATE_VAPI})
|
||||
endif(NOT ARGS_GENERATE_HEADER)
|
||||
endif(ARGS_GENERATE_VAPI)
|
||||
|
||||
set(header_arguments "")
|
||||
if(ARGS_GENERATE_HEADER)
|
||||
list(APPEND out_files "${DIRECTORY}/${ARGS_GENERATE_HEADER}.h")
|
||||
list(APPEND out_files "${DIRECTORY}/${ARGS_GENERATE_HEADER}_internal.h")
|
||||
list(APPEND header_arguments "--header=${DIRECTORY}/${ARGS_GENERATE_HEADER}.h")
|
||||
list(APPEND header_arguments "--internal-header=${DIRECTORY}/${ARGS_GENERATE_HEADER}_internal.h")
|
||||
endif(ARGS_GENERATE_HEADER)
|
||||
|
||||
add_custom_command(OUTPUT ${out_files}
|
||||
COMMAND
|
||||
${VALA_EXECUTABLE}
|
||||
ARGS
|
||||
"-C"
|
||||
${header_arguments}
|
||||
${vapi_arguments}
|
||||
"-b" ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
"-d" ${DIRECTORY}
|
||||
${vala_pkg_opts}
|
||||
${ARGS_OPTIONS}
|
||||
${in_files}
|
||||
${custom_vapi_arguments}
|
||||
DEPENDS
|
||||
${in_files}
|
||||
${ARGS_CUSTOM_VAPIS}
|
||||
)
|
||||
endmacro(vala_precompile)
|
|
@ -1,96 +0,0 @@
|
|||
##
|
||||
# Copyright 2009-2010 Jakob Westhoff. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY JAKOB WESTHOFF ``AS IS'' AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||
# EVENT SHALL JAKOB WESTHOFF OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# The views and conclusions contained in the software and documentation are those
|
||||
# of the authors and should not be interpreted as representing official policies,
|
||||
# either expressed or implied, of Jakob Westhoff
|
||||
##
|
||||
|
||||
include(ParseArguments)
|
||||
find_package(Vala REQUIRED)
|
||||
|
||||
##
|
||||
# Ensure a certain valac version is available
|
||||
#
|
||||
# The initial argument is the version to check for
|
||||
#
|
||||
# It may be followed by a optional parameter to specifiy a version range. The
|
||||
# following options are valid:
|
||||
#
|
||||
# EXACT
|
||||
# Vala needs to be available in the exact version given
|
||||
#
|
||||
# MINIMUM
|
||||
# The provided version is the minimum version. Therefore Vala needs to be
|
||||
# available in the given version or any higher version
|
||||
#
|
||||
# MAXIMUM
|
||||
# The provided version is the maximum. Therefore Vala needs to be available
|
||||
# in the given version or any version older than this
|
||||
#
|
||||
# If no option is specified the version will be treated as a minimal version.
|
||||
##
|
||||
macro(ensure_vala_version version)
|
||||
parse_arguments(ARGS "" "MINIMUM;MAXIMUM;EXACT" ${ARGN})
|
||||
set(compare_message "")
|
||||
set(error_message "")
|
||||
if(ARGS_MINIMUM)
|
||||
set(compare_message "a minimum ")
|
||||
set(error_message "or greater ")
|
||||
elseif(ARGS_MAXIMUM)
|
||||
set(compare_message "a maximum ")
|
||||
set(error_message "or less ")
|
||||
endif(ARGS_MINIMUM)
|
||||
|
||||
message(STATUS
|
||||
"checking for ${compare_message}Vala version of ${version}"
|
||||
)
|
||||
|
||||
unset(version_accepted)
|
||||
|
||||
# MINIMUM is the default if no option is specified
|
||||
if(ARGS_EXACT)
|
||||
if(${VALA_VERSION} VERSION_EQUAL ${version} )
|
||||
set(version_accepted TRUE)
|
||||
endif(${VALA_VERSION} VERSION_EQUAL ${version})
|
||||
elseif(ARGS_MAXIMUM)
|
||||
if(${VALA_VERSION} VERSION_LESS ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
|
||||
set(version_accepted TRUE)
|
||||
endif(${VALA_VERSION} VERSION_LESS ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
|
||||
else(ARGS_MAXIMUM)
|
||||
if(${VALA_VERSION} VERSION_GREATER ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
|
||||
set(version_accepted TRUE)
|
||||
endif(${VALA_VERSION} VERSION_GREATER ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
|
||||
endif(ARGS_EXACT)
|
||||
|
||||
if (NOT version_accepted)
|
||||
message(FATAL_ERROR
|
||||
"Vala version ${version} ${error_message}is required."
|
||||
)
|
||||
endif(NOT version_accepted)
|
||||
|
||||
message(STATUS
|
||||
" found Vala, version ${VALA_VERSION}"
|
||||
)
|
||||
endmacro(ensure_vala_version)
|
|
@ -1,9 +0,0 @@
|
|||
[CCode (cprefix = "", lower_case_cprefix = "", cheader_filename = "config.h")]
|
||||
namespace Build {
|
||||
public const string DATADIR;
|
||||
public const string PKGDATADIR;
|
||||
public const string GETTEXT_PACKAGE;
|
||||
public const string RELEASE_NAME;
|
||||
public const string VERSION;
|
||||
public const string VERSION_INFO;
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
atk
|
||||
gio-2.0
|
||||
cairo
|
||||
pango
|
||||
gdk-pixbuf-2.0
|
||||
libsoup-2.4
|
||||
gtk+-3.0
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue