From 3cc2c952f3ec6d93649328a550f3ec5d10b238e2 Mon Sep 17 00:00:00 2001 From: Marius Gripsgard Date: Tue, 12 Jan 2021 12:18:03 +0100 Subject: Inital commit --- src/CMakeLists.txt | 23 ++++++ src/libayatana-common.pc.in | 10 +++ src/utils.c | 167 ++++++++++++++++++++++++++++++++++++++++++++ src/utils.h | 38 ++++++++++ 4 files changed, 238 insertions(+) create mode 100644 src/CMakeLists.txt create mode 100644 src/libayatana-common.pc.in create mode 100644 src/utils.c create mode 100644 src/utils.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..5dce006 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,23 @@ + +add_library(ayatana-common SHARED + utils.c +) + +target_link_libraries(ayatana-common + ${GLIB_LIBRARIES} + ${URLDISPATCHER_LIBRARIES} +) + +if(URLDISPATCHER_FOUND) + add_definitions( -DHAS_URLDISPATCHER ) +endif() + +set(PUBLIC_HEADERS + utils.h +) + +configure_file(libayatana-common.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libayatana-common.pc @ONLY) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libayatana-common.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +install(FILES ${PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ayatana/common) +install(TARGETS ayatana-common DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/src/libayatana-common.pc.in b/src/libayatana-common.pc.in new file mode 100644 index 0000000..2a1ac48 --- /dev/null +++ b/src/libayatana-common.pc.in @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include/ayatana + +Name: Ayatana common +Description: Ayatana common library +Version: @PROJECT_VERSION@ +Libs: -L${libdir} -layatana-common +Cflags: -I${includedir} diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..82f9cff --- /dev/null +++ b/src/utils.c @@ -0,0 +1,167 @@ +/* + * Copyright 2021 Marius Gripsgard + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3, as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranties of + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "utils.h" + +#include + +#ifdef HAS_URLDISPATCHER +# include +#endif + +// TODO: make case insensitive +gboolean +is_xdg_current_desktop (const gchar* desktop) +{ + const gchar *xdg_current_desktop; + gchar **desktop_names; + int i; + + xdg_current_desktop = g_getenv ("XDG_CURRENT_DESKTOP"); + if (xdg_current_desktop != NULL) { + desktop_names = g_strsplit (xdg_current_desktop, ":", 0); + for (i = 0; desktop_names[i]; ++i) { + if (!g_strcmp0 (desktop_names[i], desktop)) { + g_strfreev (desktop_names); + return TRUE; + } + } + g_strfreev (desktop_names); + } + return FALSE; +} + +gboolean +is_lomiri () +{ + // For legacy reasons keep the MIR_SOCKET hack + return (g_getenv ("MIR_SOCKET") != NULL || + is_xdg_current_desktop(DESKTOP_LOMIRI)); +} + +gboolean +is_gnome () +{ + return is_xdg_current_desktop(DESKTOP_GNOME); +} + +gboolean +is_unity () +{ + return is_xdg_current_desktop(DESKTOP_UNITY); +} + +gboolean +is_mate () +{ + return is_xdg_current_desktop(DESKTOP_MATE); +} + +gboolean +is_xfce () +{ + return is_xdg_current_desktop(DESKTOP_XFCE); +} + +gboolean +is_pantheon () +{ + return is_xdg_current_desktop(DESKTOP_PANTHEON); +} + +// Bit of a hacky way? should use xdg open +char * +find_browser () +{ + static char * browser_path = NULL; + char* tmp_browser_path; + gchar **browser_names; + + int i; + + if (browser_path == NULL) + { + browser_names = g_strsplit ("x-www-browser,google-chrome,firefox,chromium", ",", 0); + + for (i = 0; browser_names[i]; ++i) { + tmp_browser_path = g_find_program_in_path (browser_names[i]); + + if (tmp_browser_path) { + browser_path = g_strdup (tmp_browser_path); + g_free (tmp_browser_path); + g_strfreev (browser_names); + break; + } + } + } + + return browser_path; +} + +gboolean +execute_command (const gchar * cmd) +{ + GError * err = NULL; + + g_debug ("Issuing command '%s'", cmd); + + if (!g_spawn_command_line_async (cmd, &err)) + { + g_warning ("Unable to start %s: %s", cmd, err->message); + g_error_free (err); + return FALSE; + } + + return TRUE; +} + +gboolean +open_url (const gchar * url) +{ + char * browser = NULL; + + if (is_lomiri()) + { +#ifdef HAS_URLDISPATCHER + url_dispatch_send("settings:///system/battery", NULL, NULL); + return TRUE; +#else + g_warning("Built without url-dispatcher, is not able to open url"); +#endif + } + + if (browser == NULL) + browser = find_browser(); + + if (browser != NULL) + return execute_command(g_strdup_printf("%s '%s'", browser, url)); + else + return FALSE; + +} + +gboolean +have_program (const gchar * program) +{ + gchar *path; + gboolean have; + + path = g_find_program_in_path(program); + have = path != NULL; + g_free(path); + + return have; +} diff --git a/src/utils.h b/src/utils.h new file mode 100644 index 0000000..52e491f --- /dev/null +++ b/src/utils.h @@ -0,0 +1,38 @@ +/* + * Copyright 2021 Marius Gripsgard + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3, as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranties of + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + + +#pragma once + +#include + +#define DESKTOP_LOMIRI "Lomiri" +#define DESKTOP_UNITY "Unity" +#define DESKTOP_MATE "MATE" +#define DESKTOP_GNOME "GNOME" +#define DESKTOP_XFCE "XFCE" +#define DESKTOP_PANTHEON "PANTHEON" + +gboolean is_lomiri(); +gboolean is_unity(); +gboolean is_gnome(); +gboolean is_mate(); +gboolean is_xfce(); +gboolean is_pantheon(); + +gboolean execute_command(const gchar * cmd); +gboolean open_url(const gchar * url); +gboolean have_program(const gchar * program); -- cgit v1.2.3