34
35
#include "rgutils.h"
40
get_gdk_pixbuf(const gchar *name, int size)
46
theme = gtk_icon_theme_get_default();
47
pixbuf = gtk_icon_theme_load_icon(theme, name, size,
48
(GtkIconLookupFlags)0, &error);
50
std::cerr << "Warning, failed to load: " << name
51
<< error->message << std::endl;
56
GtkWidget *get_gtk_image(const gchar *name, int size)
59
buf = get_gdk_pixbuf(name, size);
62
return gtk_image_new_from_pixbuf(buf);
37
65
void RGFlushInterface()
39
67
XSync(GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), False);
115
std::vector<const gchar*> GetBrowserCommand(const gchar *link)
117
std::vector<const gchar*> cmd;
118
if (FileExists("/usr/bin/xdg-open")) {
119
cmd.push_back("/usr/bin/xdg-open");
121
} else if (FileExists("/usr/bin/firefox")) {
122
cmd.push_back("/usr/bin/firefox");
124
} else if (FileExists("/usr/bin/konqueror")) {
125
cmd.push_back("/usr/bin/konqueror");
131
bool RunAsSudoUserCommand(std::vector<const gchar*> cmd)
133
std::vector<const gchar*> prefix;
137
std::cerr << "Empty command for RunAsSudoUserCommand" << std::endl;
141
// try pkexec first, then sudo
142
sudo_user = getenv("PKEXEC_UID");
143
if (sudo_user == NULL) {
144
sudo_user = getenv("SUDO_USER");
146
#if 0 // does not work for some reason
147
if(FileExists("/usr/bin/pkexec") && sudo_user != NULL)
149
prefix.push_back("/usr/bin/pkexec");
150
prefix.push_back("--user");
151
prefix.push_back(sudo_user);
154
if(FileExists("/usr/bin/sudo") && sudo_user != NULL)
156
prefix.push_back("/usr/bin/sudo");
157
prefix.push_back("-u");
158
prefix.push_back(sudo_user);
160
// insert the prefix string
161
cmd.insert(cmd.begin(), prefix.begin(), prefix.end());
164
for(std::vector<const gchar*>::iterator it = cmd.begin();
165
it != cmd.end(); it++)
166
printf("cmd '%s'\n", *it);
169
// build the c way to make g_spawn_async happy
170
char **c_cmd = new char*[cmd.size()+1];
172
for(i=0; i<cmd.size(); i++)
173
c_cmd[i] = (gchar*)cmd[i];
176
GError *error = NULL;
177
g_spawn_async("/", c_cmd, NULL, (GSpawnFlags)0, NULL, NULL, NULL, &error);
179
std::cerr << "Failed to run cmd: " << cmd[0] << std::endl;
182
// and free the memory again
88
188
bool is_binary_in_path(const char *program)