#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