#include "Empower.h"
void _em_run_cmd(Empower *em)
{
const char *passwd = NULL;
FILE *sudo_pipe;
passwd = etk_entry_text_get(ETK_ENTRY(em->entry));
if(passwd)
{
pid_t pid;
pid = fork();
if(pid == 0)
{
snprintf(em->password, 1024, "%s", passwd);
sudo_pipe = popen(em->buf, "w");
fprintf(sudo_pipe, "%s\n", em->password);
pclose(sudo_pipe);
}
else
{
etk_widget_hide_all(em->dialog);
etk_main_iterate();
wait(pid);
}
}
etk_main_quit();
}
void
_em_dialog_size_request_cb(Etk_Object *object, Etk_Size *size_request, void *data)
{
Empower *em;
em = data;
if(!_em_centered)
{
etk_window_center_on_window(ETK_WINDOW(object), NULL);
etk_widget_focus(em->entry);
etk_window_focused_set(ETK_WINDOW(object), ETK_TRUE);
_em_centered = ETK_TRUE;
}
}
Etk_Bool
_em_dialog_delete_event_cb(void *data)
{
etk_main_quit();
return ETK_TRUE;
}
void
_em_entry_key_down(Etk_Object *object, Etk_Event_Key_Down *ev, void *data)
{
Empower *em;
em = data;
if(!strcmp(ev->key, "Return") || !strcmp(ev->key, "KP_Enter"))
{
_em_run_cmd(em);
}
if(!strcmp(ev->key, "Escape"))
{
etk_main_quit();
}
}
void
_em_dialog_response_cb(Etk_Object *object, int response_id, void *data)
{
Empower *em;
FILE *sudo_pipe;
const char *passwd = NULL;
em = data;
switch(response_id)
{
case 1:
/* user pressed ok */
_em_run_cmd(em);
break;
case 0:
/* user pressed cancel */
etk_main_quit();
break;
}
}
syntax highlighted by Code2HTML, v. 0.9.1