mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
Support for launching .desktop files
This commit is contained in:
parent
997cc186e4
commit
d0750641ab
@ -42,6 +42,8 @@
|
|||||||
#include <edelib/String.h>
|
#include <edelib/String.h>
|
||||||
#include <edelib/File.h>
|
#include <edelib/File.h>
|
||||||
#include <edelib/WindowUtils.h>
|
#include <edelib/WindowUtils.h>
|
||||||
|
#include <edelib/DesktopFile.h>
|
||||||
|
#include <edelib/StrUtil.h>
|
||||||
#include <edelib/Ede.h>
|
#include <edelib/Ede.h>
|
||||||
|
|
||||||
#include "icons/run.xpm"
|
#include "icons/run.xpm"
|
||||||
@ -54,12 +56,15 @@
|
|||||||
|
|
||||||
EDELIB_NS_USING(Resource)
|
EDELIB_NS_USING(Resource)
|
||||||
EDELIB_NS_USING(String)
|
EDELIB_NS_USING(String)
|
||||||
|
EDELIB_NS_USING(DesktopFile)
|
||||||
EDELIB_NS_USING(RES_USER_ONLY)
|
EDELIB_NS_USING(RES_USER_ONLY)
|
||||||
|
EDELIB_NS_USING(DESK_FILE_TYPE_APPLICATION)
|
||||||
EDELIB_NS_USING(run_sync)
|
EDELIB_NS_USING(run_sync)
|
||||||
EDELIB_NS_USING(run_async)
|
EDELIB_NS_USING(run_async)
|
||||||
EDELIB_NS_USING(alert)
|
EDELIB_NS_USING(alert)
|
||||||
EDELIB_NS_USING(file_path)
|
EDELIB_NS_USING(file_path)
|
||||||
EDELIB_NS_USING(window_center_on_screen)
|
EDELIB_NS_USING(window_center_on_screen)
|
||||||
|
EDELIB_NS_USING(str_ends)
|
||||||
|
|
||||||
static Fl_Pixmap image_run((const char**)run_xpm);
|
static Fl_Pixmap image_run((const char**)run_xpm);
|
||||||
static Fl_Input* dialog_input;
|
static Fl_Input* dialog_input;
|
||||||
@ -234,6 +239,7 @@ static bool start_child(const char* cmd) {
|
|||||||
run_async("ede-launch-sn --program %s --icon applications-order", cmd);
|
run_async("ede-launch-sn --program %s --icon applications-order", cmd);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
E_DEBUG(E_STRLOC ": Starting '%s'\n", cmd);
|
||||||
int ret = start_child_process_with_core(cmd);
|
int ret = start_child_process_with_core(cmd);
|
||||||
|
|
||||||
if(ret == 199) {
|
if(ret == 199) {
|
||||||
@ -257,6 +263,29 @@ static bool start_child(const char* cmd) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool start_desktop_file(const char *cmd) {
|
||||||
|
DesktopFile d;
|
||||||
|
|
||||||
|
if(!d.load(cmd)) {
|
||||||
|
alert(d.strerror());
|
||||||
|
goto FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(d.type() != DESK_FILE_TYPE_APPLICATION) {
|
||||||
|
alert(_("Starting other types of .desktop files except 'Application' is not supported now"));
|
||||||
|
goto FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
char buf[PATH_MAX];
|
||||||
|
if(d.exec(buf, PATH_MAX))
|
||||||
|
return start_child_process(buf);
|
||||||
|
else
|
||||||
|
alert(_("Unable to run '%s'.\nProbably this file is malformed or 'Exec' key has non-installed program"), cmd);
|
||||||
|
|
||||||
|
FAIL:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static void cancel_cb(Fl_Widget*, void* w) {
|
static void cancel_cb(Fl_Widget*, void* w) {
|
||||||
LaunchWindow* win = (LaunchWindow*)w;
|
LaunchWindow* win = (LaunchWindow*)w;
|
||||||
win->hide();
|
win->hide();
|
||||||
@ -290,7 +319,6 @@ static bool find_terminal(String &ret) {
|
|||||||
|
|
||||||
for(int i = 0; terms[i]; i++) {
|
for(int i = 0; terms[i]; i++) {
|
||||||
term = terms[i];
|
term = terms[i];
|
||||||
printf("--> %s\n", term);
|
|
||||||
RETURN_IF_VALID_TERM(term, ret);
|
RETURN_IF_VALID_TERM(term, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,6 +411,12 @@ int main(int argc, char** argv) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* check if we have .desktop file */
|
||||||
|
if(argc == 2 && str_ends(argv[1], ".desktop")) {
|
||||||
|
start_desktop_file(argv[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
String args;
|
String args;
|
||||||
unsigned int alen;
|
unsigned int alen;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user