parent
24e0223f68
commit
3bce8ee503
213
file.c
213
file.c
|
@ -8,122 +8,123 @@
|
|||
#include <glib.h>
|
||||
#include "file.h"
|
||||
|
||||
char *
|
||||
homedir(int uid)
|
||||
char *
|
||||
homedir (int uid)
|
||||
{
|
||||
char *s;
|
||||
char *s;
|
||||
|
||||
static int usr_uid = -1;
|
||||
static char *usr_s = NULL;
|
||||
struct passwd *pwd;
|
||||
static int usr_uid = -1;
|
||||
static char *usr_s = NULL;
|
||||
struct passwd *pwd;
|
||||
|
||||
if (usr_uid < 0)
|
||||
usr_uid = getuid();
|
||||
if ((uid == usr_uid) && (usr_s))
|
||||
{
|
||||
return (g_strdup(usr_s));
|
||||
}
|
||||
pwd = getpwuid(uid);
|
||||
if (pwd)
|
||||
{
|
||||
s = g_strdup(pwd->pw_dir);
|
||||
if (uid == usr_uid)
|
||||
usr_s = g_strdup(s);
|
||||
return (s);
|
||||
}
|
||||
return (g_strdup((getenv("TMPDIR") == NULL) ? "/tmp" : getenv("TMPDIR")));
|
||||
if (usr_uid < 0)
|
||||
usr_uid = getuid ();
|
||||
if ((uid == usr_uid) && (usr_s))
|
||||
{
|
||||
return (g_strdup (usr_s));
|
||||
}
|
||||
pwd = getpwuid (uid);
|
||||
if (pwd)
|
||||
{
|
||||
s = g_strdup (pwd->pw_dir);
|
||||
if (uid == usr_uid)
|
||||
usr_s = g_strdup (s);
|
||||
return (s);
|
||||
}
|
||||
return (g_strdup
|
||||
((getenv ("TMPDIR") == NULL) ? "/tmp" : getenv ("TMPDIR")));
|
||||
}
|
||||
|
||||
char *
|
||||
field(char *s, int field)
|
||||
char *
|
||||
field (char *s, int field)
|
||||
{
|
||||
char buf[4096];
|
||||
char buf[4096];
|
||||
|
||||
buf[0] = 0;
|
||||
fword(s, field + 1, buf);
|
||||
if (buf[0])
|
||||
{
|
||||
if ((!strcmp(buf, "NULL")) || (!strcmp(buf, "(null)")))
|
||||
return (NULL);
|
||||
return (g_strdup(buf));
|
||||
}
|
||||
return NULL;
|
||||
buf[0] = 0;
|
||||
fword (s, field + 1, buf);
|
||||
if (buf[0])
|
||||
{
|
||||
if ((!strcmp (buf, "NULL")) || (!strcmp (buf, "(null)")))
|
||||
return (NULL);
|
||||
return (g_strdup (buf));
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
fword(char *s, int num, char *wd)
|
||||
fword (char *s, int num, char *wd)
|
||||
{
|
||||
char *cur, *start, *end;
|
||||
int count, inword, inquote, len;
|
||||
char *cur, *start, *end;
|
||||
int count, inword, inquote, len;
|
||||
|
||||
if (!s)
|
||||
return;
|
||||
if (!wd)
|
||||
return;
|
||||
*wd = 0;
|
||||
if (num <= 0)
|
||||
return;
|
||||
cur = s;
|
||||
count = 0;
|
||||
inword = 0;
|
||||
inquote = 0;
|
||||
start = NULL;
|
||||
end = NULL;
|
||||
while ((*cur) && (count < num))
|
||||
{
|
||||
if (inword)
|
||||
{
|
||||
if (inquote)
|
||||
{
|
||||
if (*cur == '"')
|
||||
{
|
||||
inquote = 0;
|
||||
inword = 0;
|
||||
end = cur;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isspace(*cur))
|
||||
{
|
||||
end = cur;
|
||||
inword = 0;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isspace(*cur))
|
||||
{
|
||||
if (*cur == '"')
|
||||
{
|
||||
inquote = 1;
|
||||
start = cur + 1;
|
||||
}
|
||||
else
|
||||
start = cur;
|
||||
inword = 1;
|
||||
}
|
||||
}
|
||||
if (count == num)
|
||||
break;
|
||||
cur++;
|
||||
}
|
||||
if (!start)
|
||||
return;
|
||||
if (!end)
|
||||
end = cur;
|
||||
if (end <= start)
|
||||
return;
|
||||
len = (int)(end - start);
|
||||
if (len > 4000)
|
||||
len = 4000;
|
||||
if (len > 0)
|
||||
{
|
||||
strncpy(wd, start, len);
|
||||
wd[len] = 0;
|
||||
}
|
||||
return;
|
||||
if (!s)
|
||||
return;
|
||||
if (!wd)
|
||||
return;
|
||||
*wd = 0;
|
||||
if (num <= 0)
|
||||
return;
|
||||
cur = s;
|
||||
count = 0;
|
||||
inword = 0;
|
||||
inquote = 0;
|
||||
start = NULL;
|
||||
end = NULL;
|
||||
while ((*cur) && (count < num))
|
||||
{
|
||||
if (inword)
|
||||
{
|
||||
if (inquote)
|
||||
{
|
||||
if (*cur == '"')
|
||||
{
|
||||
inquote = 0;
|
||||
inword = 0;
|
||||
end = cur;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isspace (*cur))
|
||||
{
|
||||
end = cur;
|
||||
inword = 0;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isspace (*cur))
|
||||
{
|
||||
if (*cur == '"')
|
||||
{
|
||||
inquote = 1;
|
||||
start = cur + 1;
|
||||
}
|
||||
else
|
||||
start = cur;
|
||||
inword = 1;
|
||||
}
|
||||
}
|
||||
if (count == num)
|
||||
break;
|
||||
cur++;
|
||||
}
|
||||
if (!start)
|
||||
return;
|
||||
if (!end)
|
||||
end = cur;
|
||||
if (end <= start)
|
||||
return;
|
||||
len = (int) (end - start);
|
||||
if (len > 4000)
|
||||
len = 4000;
|
||||
if (len > 0)
|
||||
{
|
||||
strncpy (wd, start, len);
|
||||
wd[len] = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
6
file.h
6
file.h
|
@ -1,3 +1,3 @@
|
|||
char *field(char *s, int field);
|
||||
void fword(char *s, int num, char *wd);
|
||||
char *homedir(int uid);
|
||||
char *field (char *s, int field);
|
||||
void fword (char *s, int num, char *wd);
|
||||
char *homedir (int uid);
|
||||
|
|
96
menus.c
96
menus.c
|
@ -14,71 +14,71 @@
|
|||
#include "menus.h"
|
||||
#include "viewer.h"
|
||||
|
||||
GtkWidget *
|
||||
CreateBarSubMenu(GtkWidget * menu, char *szName)
|
||||
GtkWidget *
|
||||
CreateBarSubMenu (GtkWidget * menu, char *szName)
|
||||
{
|
||||
GtkWidget *menuitem;
|
||||
GtkWidget *submenu;
|
||||
GtkWidget *menuitem;
|
||||
GtkWidget *submenu;
|
||||
|
||||
menuitem = gtk_menu_item_new_with_label(szName);
|
||||
gtk_menu_bar_append(GTK_MENU_BAR(menu), menuitem);
|
||||
gtk_widget_show(menuitem);
|
||||
submenu = gtk_menu_new();
|
||||
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
|
||||
menuitem = gtk_menu_item_new_with_label (szName);
|
||||
gtk_menu_bar_append (GTK_MENU_BAR (menu), menuitem);
|
||||
gtk_widget_show (menuitem);
|
||||
submenu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
|
||||
|
||||
return submenu;
|
||||
return submenu;
|
||||
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
CreateRightAlignBarSubMenu(GtkWidget * menu, char *szName)
|
||||
GtkWidget *
|
||||
CreateRightAlignBarSubMenu (GtkWidget * menu, char *szName)
|
||||
{
|
||||
GtkWidget *menuitem;
|
||||
GtkWidget *submenu;
|
||||
GtkWidget *menuitem;
|
||||
GtkWidget *submenu;
|
||||
|
||||
menuitem = gtk_menu_item_new_with_label(szName);
|
||||
gtk_menu_item_right_justify(GTK_MENU_ITEM(menuitem));
|
||||
gtk_menu_bar_append(GTK_MENU_BAR(menu), menuitem);
|
||||
gtk_widget_show(menuitem);
|
||||
submenu = gtk_menu_new();
|
||||
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
|
||||
menuitem = gtk_menu_item_new_with_label (szName);
|
||||
gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
|
||||
gtk_menu_bar_append (GTK_MENU_BAR (menu), menuitem);
|
||||
gtk_widget_show (menuitem);
|
||||
submenu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
|
||||
|
||||
return submenu;
|
||||
return submenu;
|
||||
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
CreateMenuItem(GtkWidget * menu, char *szName, char *szAccel, char *szTip,
|
||||
GtkSignalFunc func, gpointer data)
|
||||
GtkWidget *
|
||||
CreateMenuItem (GtkWidget * menu, char *szName, char *szAccel, char *szTip,
|
||||
GtkSignalFunc func, gpointer data)
|
||||
{
|
||||
GtkWidget *menuitem;
|
||||
GtkWidget *menuitem;
|
||||
|
||||
if (szName && strlen(szName))
|
||||
{
|
||||
menuitem = gtk_menu_item_new_with_label(szName);
|
||||
gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
|
||||
GTK_SIGNAL_FUNC(func), data);
|
||||
}
|
||||
else
|
||||
{
|
||||
menuitem = gtk_menu_item_new();
|
||||
}
|
||||
if (szName && strlen (szName))
|
||||
{
|
||||
menuitem = gtk_menu_item_new_with_label (szName);
|
||||
gtk_signal_connect (GTK_OBJECT (menuitem), "activate",
|
||||
GTK_SIGNAL_FUNC (func), data);
|
||||
}
|
||||
else
|
||||
{
|
||||
menuitem = gtk_menu_item_new ();
|
||||
}
|
||||
|
||||
gtk_menu_append(GTK_MENU(menu), menuitem);
|
||||
gtk_widget_show(menuitem);
|
||||
gtk_menu_append (GTK_MENU (menu), menuitem);
|
||||
gtk_widget_show (menuitem);
|
||||
|
||||
if (szAccel && szAccel[0] == '^')
|
||||
{
|
||||
gtk_widget_add_accelerator(menuitem, "activate", accel_group,
|
||||
szAccel[1], GDK_CONTROL_MASK,
|
||||
GTK_ACCEL_VISIBLE);
|
||||
}
|
||||
if (szAccel && szAccel[0] == '^')
|
||||
{
|
||||
gtk_widget_add_accelerator (menuitem, "activate", accel_group,
|
||||
szAccel[1], GDK_CONTROL_MASK,
|
||||
GTK_ACCEL_VISIBLE);
|
||||
}
|
||||
|
||||
if (szTip && strlen(szTip))
|
||||
{
|
||||
gtk_tooltips_set_tip(tooltips, menuitem, szTip, NULL);
|
||||
}
|
||||
if (szTip && strlen (szTip))
|
||||
{
|
||||
gtk_tooltips_set_tip (tooltips, menuitem, szTip, NULL);
|
||||
}
|
||||
|
||||
return menuitem;
|
||||
return menuitem;
|
||||
|
||||
}
|
||||
|
|
10
menus.h
10
menus.h
|
@ -1,5 +1,5 @@
|
|||
GtkWidget *CreateBarSubMenu(GtkWidget * menu, char *szName);
|
||||
GtkWidget *CreateRightAlignBarSubMenu(GtkWidget * menu, char *szName);
|
||||
GtkWidget *CreateMenuItem(GtkWidget * menu, char *szName,
|
||||
char *szAccel, char *szTip,
|
||||
GtkSignalFunc func, gpointer data);
|
||||
GtkWidget *CreateBarSubMenu (GtkWidget * menu, char *szName);
|
||||
GtkWidget *CreateRightAlignBarSubMenu (GtkWidget * menu, char *szName);
|
||||
GtkWidget *CreateMenuItem (GtkWidget * menu, char *szName,
|
||||
char *szAccel, char *szTip,
|
||||
GtkSignalFunc func, gpointer data);
|
||||
|
|
51
viewer.c
51
viewer.c
|
@ -75,9 +75,7 @@ load_new_menu_from_disk (char *file_to_load, GtkCTreeNode * my_parent)
|
|||
NULL, text, 5, NULL, NULL,
|
||||
NULL, NULL, FALSE, FALSE);
|
||||
if (!strcasecmp (act, "menu"))
|
||||
{
|
||||
load_new_menu_from_disk (params, current);
|
||||
}
|
||||
load_new_menu_from_disk (params, current);
|
||||
|
||||
if (txt)
|
||||
g_free (txt);
|
||||
|
@ -108,6 +106,7 @@ load_menus_from_disk (void)
|
|||
char s[4096];
|
||||
GtkCTreeNode *parent = NULL;
|
||||
|
||||
/* currently hardcoded, but not a big issue to change later */
|
||||
sprintf (buf, "%s/.enlightenment/file.menu", homedir (getuid ()));
|
||||
menufile = fopen (buf, "r");
|
||||
if (!menufile)
|
||||
|
@ -175,10 +174,8 @@ load_menus_from_disk (void)
|
|||
5, NULL, NULL, NULL, NULL, FALSE,
|
||||
FALSE);
|
||||
|
||||
if (!strcmp (act, "menu"))
|
||||
{
|
||||
load_new_menu_from_disk (params, current);
|
||||
}
|
||||
if (!strcasecmp (act, "menu"))
|
||||
load_new_menu_from_disk (params, current);
|
||||
|
||||
if (txt)
|
||||
g_free (txt);
|
||||
|
@ -202,24 +199,21 @@ void
|
|||
selection_made (GtkCTree * my_ctree, GList * node, gint column,
|
||||
gpointer user_data)
|
||||
{
|
||||
static int first = 1;
|
||||
gchar *col1 = NULL;
|
||||
gchar *col2 = NULL;
|
||||
gchar *col3 = NULL;
|
||||
gchar *source = NULL;
|
||||
GtkCTreeNode *last_node = NULL;
|
||||
|
||||
if (user_data)
|
||||
if (first)
|
||||
{
|
||||
my_ctree = NULL;
|
||||
column = 0;
|
||||
node = NULL;
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (txt_exec), TRUE);
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (txt_icon), TRUE);
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (txt_description), TRUE);
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (btn_browse), TRUE);
|
||||
first = 0;
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (txt_exec), TRUE);
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (txt_icon), TRUE);
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (txt_description), TRUE);
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (btn_browse), TRUE);
|
||||
|
||||
last_node = GTK_CTREE_NODE ((GTK_CLIST (ctree)->selection)->data);
|
||||
gtk_ctree_node_get_text (GTK_CTREE (ctree), GTK_CTREE_NODE (last_node), 0,
|
||||
&col1);
|
||||
|
@ -237,6 +231,12 @@ selection_made (GtkCTree * my_ctree, GList * node, gint column,
|
|||
gtk_label_set_text (GTK_LABEL (lbl_params), "Submenu");
|
||||
else
|
||||
gtk_label_set_text (GTK_LABEL (lbl_params), "Executes");
|
||||
|
||||
return;
|
||||
user_data = NULL;
|
||||
my_ctree = NULL;
|
||||
column = 0;
|
||||
node = NULL;
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
|
@ -287,7 +287,8 @@ create_main_window (void)
|
|||
CreateMenuItem (menu, "Quit", "", "Quit Without Saving", quit_cb,
|
||||
"quit program");
|
||||
|
||||
menu = CreateRightAlignBarSubMenu (menubar, "Help");
|
||||
/* I hate right aligned menus =) It just puts stuff out of the way */
|
||||
menu = CreateBarSubMenu (menubar, "Help");
|
||||
menuitem = CreateMenuItem (menu, "About", "", "About E Menu Editor",
|
||||
NULL, "about");
|
||||
menuitem = CreateMenuItem (menu, "Documentation", "",
|
||||
|
@ -430,6 +431,7 @@ create_main_window (void)
|
|||
return win;
|
||||
}
|
||||
|
||||
/* Stick the contents of the entries into the tree */
|
||||
void
|
||||
entries_to_ctree (GtkWidget * widget, gpointer user_data)
|
||||
{
|
||||
|
@ -495,8 +497,8 @@ delete_entry (GtkWidget * widget, gpointer user_data)
|
|||
{
|
||||
if (GTK_CLIST (ctree)->selection)
|
||||
gtk_ctree_remove_node (GTK_CTREE (ctree),
|
||||
gtk_ctree_node_nth (GTK_CTREE (ctree),
|
||||
GTK_CLIST (ctree)->focus_row));
|
||||
GTK_CTREE_NODE (GTK_CLIST (ctree)->selection->
|
||||
data));
|
||||
return;
|
||||
widget = NULL;
|
||||
user_data = NULL;
|
||||
|
@ -733,11 +735,11 @@ main (int argc, char *argv[])
|
|||
GtkWidget *main_win;
|
||||
gtk_set_locale ();
|
||||
gtk_init (&argc, &argv);
|
||||
gdk_imlib_init ();
|
||||
/* gdk_imlib_init (); */
|
||||
tooltips = gtk_tooltips_new ();
|
||||
accel_group = gtk_accel_group_new ();
|
||||
gtk_widget_push_visual (gdk_imlib_get_visual ());
|
||||
gtk_widget_push_colormap (gdk_imlib_get_colormap ());
|
||||
/* gtk_widget_push_visual (gdk_imlib_get_visual ()); */
|
||||
/* gtk_widget_push_colormap (gdk_imlib_get_colormap ()); */
|
||||
main_win = create_main_window ();
|
||||
gtk_signal_connect (GTK_OBJECT (main_win), "destroy",
|
||||
GTK_SIGNAL_FUNC (on_exit_application), NULL);
|
||||
|
@ -812,7 +814,8 @@ ok_dialog (gchar * message)
|
|||
|
||||
dialog_window = gtk_dialog_new ();
|
||||
gtk_window_set_transient_for (GTK_WINDOW (dialog_window), GTK_WINDOW (win));
|
||||
gtk_window_set_position(GTK_WINDOW (dialog_window), GTK_WIN_POS_CENTER_ALWAYS);
|
||||
gtk_window_set_position (GTK_WINDOW (dialog_window),
|
||||
GTK_WIN_POS_CENTER_ALWAYS);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
|
||||
GTK_SIGNAL_FUNC (gtk_widget_destroyed), &dialog_window);
|
||||
|
|
46
viewer.h
46
viewer.h
|
@ -1,38 +1,34 @@
|
|||
GtkWidget *create_main_window(void);
|
||||
void on_exit_application(GtkWidget * widget, gpointer user_data);
|
||||
void load_menus_from_disk(void);
|
||||
void load_new_menu_from_disk(char *file_to_load,
|
||||
GtkWidget *create_main_window (void);
|
||||
void on_exit_application (GtkWidget * widget, gpointer user_data);
|
||||
void load_menus_from_disk (void);
|
||||
void load_new_menu_from_disk (char *file_to_load, GtkCTreeNode * my_parent);
|
||||
void selection_made (GtkCTree * my_ctree, GList * node,
|
||||
gint column, gpointer user_data);
|
||||
|
||||
GtkCTreeNode * my_parent);
|
||||
void selection_made(GtkCTree * my_ctree, GList * node,
|
||||
gint column, gpointer user_data);
|
||||
|
||||
GtkTooltips *tooltips;
|
||||
GtkAccelGroup *accel_group;
|
||||
void save_menus(GtkWidget * widget, gpointer user_data);
|
||||
gint write_menu(GNode * node, gchar * filename);
|
||||
void write_menu_title(GNode * node, FILE * fp);
|
||||
gint write_menu_entry(GNode * node, FILE * fp);
|
||||
gboolean tree_to_gnode(GtkCTree * ctree,
|
||||
guint depth,
|
||||
GNode * gnode, GtkCTreeNode * cnode,
|
||||
|
||||
gpointer data);
|
||||
void quit_cb(GtkWidget * widget, gpointer user_data);
|
||||
GtkTooltips *tooltips;
|
||||
GtkAccelGroup *accel_group;
|
||||
void save_menus (GtkWidget * widget, gpointer user_data);
|
||||
gint write_menu (GNode * node, gchar * filename);
|
||||
void write_menu_title (GNode * node, FILE * fp);
|
||||
gint write_menu_entry (GNode * node, FILE * fp);
|
||||
gboolean tree_to_gnode (GtkCTree * ctree,
|
||||
guint depth,
|
||||
GNode * gnode, GtkCTreeNode * cnode, gpointer data);
|
||||
void quit_cb (GtkWidget * widget, gpointer user_data);
|
||||
struct entry_data
|
||||
{
|
||||
gchar *desc;
|
||||
gchar *icon;
|
||||
gchar *params;
|
||||
gchar *desc;
|
||||
gchar *icon;
|
||||
gchar *params;
|
||||
};
|
||||
void delete_entry (GtkWidget * widget, gpointer user_data);
|
||||
void insert_entry (GtkWidget * widget, gpointer user_data);
|
||||
void entries_to_ctree (GtkWidget * widget, gpointer user_data);
|
||||
void destroy_node_data (GNode *node);
|
||||
void destroy_node_data (GNode * node);
|
||||
void save_menus_quit (GtkWidget * widget, gpointer user_data);
|
||||
void real_save_menus (gint exit);
|
||||
void cb_icon_browse (GtkWidget * widget, gpointer user_data);
|
||||
void cb_icon_browse_ok (GtkWidget * widget, gpointer user_data);
|
||||
void cb_icon_browse_cancel (GtkWidget * widget, gpointer user_data);
|
||||
void destroy_dlg_cb (GtkWidget *widget, gpointer user_data);
|
||||
void destroy_dlg_cb (GtkWidget * widget, gpointer user_data);
|
||||
void ok_dialog (gchar * message);
|
||||
|
|
Loading…
Reference in New Issue