mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-10 00:28:20 +00:00
[common] open: implement opening URLs in browser
This is currently only implemented for Linux. On Windows, ShellExecute should be used, but that should be done when it's actually needed so it could be tested.
This commit is contained in:
parent
2856928b57
commit
2f8ebc29e8
28
common/include/common/open.h
Normal file
28
common/include/common/open.h
Normal file
@ -0,0 +1,28 @@
|
||||
/**
|
||||
* Looking Glass
|
||||
* Copyright © 2017-2021 The Looking Glass Authors
|
||||
* https://looking-glass.io
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU 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 General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc., 59
|
||||
* Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef _LG_COMMON_OPEN_H_
|
||||
#define _LG_COMMON_OPEN_H_
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
bool lgOpenURL(const char * url);
|
||||
|
||||
#endif
|
@ -15,6 +15,7 @@ add_library(lg_common_platform_code STATIC
|
||||
ivshmem.c
|
||||
time.c
|
||||
paths.c
|
||||
open.c
|
||||
)
|
||||
|
||||
if(ENABLE_BACKTRACE)
|
||||
|
65
common/src/platform/linux/open.c
Normal file
65
common/src/platform/linux/open.c
Normal file
@ -0,0 +1,65 @@
|
||||
/**
|
||||
* Looking Glass
|
||||
* Copyright © 2017-2021 The Looking Glass Authors
|
||||
* https://looking-glass.io
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU 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 General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc., 59
|
||||
* Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "common/open.h"
|
||||
#include "common/debug.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
|
||||
static bool xdgOpen(const char * path)
|
||||
{
|
||||
pid_t pid = fork();
|
||||
if (pid == 0)
|
||||
{
|
||||
execlp("xdg-open", "xdg-open", path, NULL);
|
||||
_exit(127);
|
||||
}
|
||||
else if (pid < 0)
|
||||
{
|
||||
DEBUG_ERROR("Failed to launch xdg-open: %s", strerror(errno));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
int status;
|
||||
if (waitpid(pid, &status, 0) < 0)
|
||||
{
|
||||
DEBUG_ERROR("waitpid failed: %s", strerror(errno));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (WIFEXITED(status) && WEXITSTATUS(status) == 0)
|
||||
return true;
|
||||
|
||||
if (WIFEXITED(status))
|
||||
DEBUG_ERROR("xdg-open exited with code %d", WEXITSTATUS(status));
|
||||
else
|
||||
DEBUG_ERROR("xdg-open exited with signal: %s", strsignal(WTERMSIG(status)));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool lgOpenURL(const char * url)
|
||||
{
|
||||
return xdgOpen(url);
|
||||
}
|
Loading…
Reference in New Issue
Block a user