Added a submenu entry to allow the creation of a text file

This commit is contained in:
Pierre Pronchery 2009-06-21 23:09:39 +00:00
parent 74a720b5f9
commit db10f3b5d8
2 changed files with 63 additions and 33 deletions

View File

@ -23,6 +23,7 @@ static char const _license[] =
# define unmount(a, b) umount(a) # define unmount(a, b) umount(a)
#endif #endif
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
@ -59,7 +60,7 @@ gboolean on_closex(GtkWidget * widget, GdkEvent * event, gpointer data)
/* file menu */ /* file menu */
void on_file_new_window(GtkMenuItem * menuitem, gpointer data) void on_file_new_window(GtkWidget * widget, gpointer data)
{ {
Browser * browser = data; Browser * browser = data;
@ -67,14 +68,14 @@ void on_file_new_window(GtkMenuItem * menuitem, gpointer data)
} }
void on_file_new_folder(GtkMenuItem * menuitem, gpointer data) void on_file_new_folder(GtkWidget * widget, gpointer data)
{ {
static char const * newfolder = "New folder"; static char const newfolder[] = "New folder";
Browser * browser = data; Browser * browser = data;
char const * cur = browser->current->data; char const * cur = browser->current->data;
char * path; char * path;
if((path = malloc(strlen(cur) + 2 + strlen(newfolder))) == NULL) if((path = malloc(strlen(cur) + sizeof(newfolder) + 1)) == NULL)
{ {
browser_error(browser, strerror(errno), 0); browser_error(browser, strerror(errno), 0);
return; return;
@ -86,7 +87,7 @@ void on_file_new_folder(GtkMenuItem * menuitem, gpointer data)
} }
void on_file_close(GtkMenuItem * menuitem, gpointer data) void on_file_close(GtkWidget * widget, gpointer data)
{ {
Browser * browser = data; Browser * browser = data;
@ -96,7 +97,7 @@ void on_file_close(GtkMenuItem * menuitem, gpointer data)
} }
void on_file_open_file(GtkMenuItem * menuitem, gpointer data) void on_file_open_file(GtkWidget * widget, gpointer data)
{ {
Browser * browser = data; Browser * browser = data;
@ -108,7 +109,7 @@ void on_file_open_file(GtkMenuItem * menuitem, gpointer data)
/* on_edit_copy */ /* on_edit_copy */
static GList * _copy_selection(Browser * browser); static GList * _copy_selection(Browser * browser);
void on_edit_copy(GtkMenuItem * menuitem, gpointer data) void on_edit_copy(GtkWidget * widget, gpointer data)
{ {
Browser * browser = data; Browser * browser = data;
@ -153,7 +154,7 @@ static GList * _copy_selection(Browser * browser)
/* on_edit_cut */ /* on_edit_cut */
void on_edit_cut(GtkMenuItem * menuitem, gpointer data) void on_edit_cut(GtkWidget * widget, gpointer data)
{ {
Browser * browser = data; Browser * browser = data;
@ -165,7 +166,7 @@ void on_edit_cut(GtkMenuItem * menuitem, gpointer data)
/* on_edit_delete */ /* on_edit_delete */
void on_edit_delete(GtkMenuItem * menuitem, gpointer data) void on_edit_delete(GtkWidget * widget, gpointer data)
{ {
Browser * browser = data; Browser * browser = data;
GtkWidget * dialog; GtkWidget * dialog;
@ -202,7 +203,7 @@ void on_edit_delete(GtkMenuItem * menuitem, gpointer data)
/* on_edit_paste */ /* on_edit_paste */
void on_edit_paste(GtkMenuItem * menuitem, gpointer data) void on_edit_paste(GtkWidget * widget, gpointer data)
{ {
Browser * browser = data; Browser * browser = data;
char * p = browser->current->data; char * p = browser->current->data;
@ -227,7 +228,7 @@ void on_edit_paste(GtkMenuItem * menuitem, gpointer data)
/* on_edit_select_all */ /* on_edit_select_all */
void on_edit_select_all(GtkMenuItem * menuitem, gpointer data) void on_edit_select_all(GtkWidget * widget, gpointer data)
{ {
Browser * browser = data; Browser * browser = data;
@ -235,7 +236,7 @@ void on_edit_select_all(GtkMenuItem * menuitem, gpointer data)
} }
void on_edit_unselect_all(GtkMenuItem * menuitem, gpointer data) void on_edit_unselect_all(GtkWidget * widget, gpointer data)
{ {
Browser * browser = data; Browser * browser = data;
@ -251,12 +252,11 @@ static gboolean _preferences_on_closex(GtkWidget * widget, GdkEvent * event,
static void _preferences_on_cancel(GtkWidget * widget, gpointer data); static void _preferences_on_cancel(GtkWidget * widget, gpointer data);
static void _preferences_on_ok(GtkWidget * widget, gpointer data); static void _preferences_on_ok(GtkWidget * widget, gpointer data);
void on_edit_preferences(GtkMenuItem * menuitem, gpointer data) void on_edit_preferences(GtkWidget * widget, gpointer data)
{ {
Browser * browser = data; Browser * browser = data;
GtkWidget * vbox; GtkWidget * vbox;
GtkWidget * hbox; GtkWidget * hbox;
GtkWidget * widget;
GtkSizeGroup * group; GtkSizeGroup * group;
if(browser->pr_window != NULL) if(browser->pr_window != NULL)
@ -971,7 +971,8 @@ gboolean on_view_press(GtkWidget * widget, GdkEventButton * event,
return _press_show(browser, event, menu); return _press_show(browser, event, menu);
} }
static void _on_folder_new(GtkWidget * widget, gpointer data); static void _on_popup_new_text_file(GtkWidget * widget, gpointer data);
static void _on_popup_new_folder(GtkWidget * widget, gpointer data);
static gboolean _press_context(Browser * browser, GdkEventButton * event, static gboolean _press_context(Browser * browser, GdkEventButton * event,
GtkWidget * menu, IconCallback * ic) GtkWidget * menu, IconCallback * ic)
{ {
@ -983,18 +984,25 @@ static gboolean _press_context(Browser * browser, GdkEventButton * event,
browser_unselect_all(browser); browser_unselect_all(browser);
menuitem = gtk_menu_item_new_with_label("New"); menuitem = gtk_menu_item_new_with_label("New");
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
submenu = gtk_menu_new(); submenu = gtk_menu_new();
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
menuitem = gtk_image_menu_item_new_with_label("Text file");
image = gtk_image_new_from_icon_name("stock_new-text",
GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(
_on_popup_new_text_file), ic);
gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem);
#if GTK_CHECK_VERSION(2, 8, 0) /* XXX actually depends on the icon theme */ #if GTK_CHECK_VERSION(2, 8, 0) /* XXX actually depends on the icon theme */
image = gtk_image_new_from_icon_name("folder-new", GTK_ICON_SIZE_MENU);
menuitem = gtk_image_menu_item_new_with_label("Folder"); menuitem = gtk_image_menu_item_new_with_label("Folder");
image = gtk_image_new_from_icon_name("folder-new", GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image);
#else #else
menuitem = gtk_menu_item_new_with_label("Folder"); menuitem = gtk_menu_item_new_with_label("Folder");
#endif #endif
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK( g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(
_on_folder_new), ic); _on_popup_new_folder), ic);
gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem);
menuitem = gtk_separator_menu_item_new(); menuitem = gtk_separator_menu_item_new();
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
@ -1021,12 +1029,34 @@ static gboolean _press_context(Browser * browser, GdkEventButton * event,
return _press_show(browser, event, menu); return _press_show(browser, event, menu);
} }
static void _on_folder_new(GtkWidget * widget, gpointer data) static void _on_popup_new_text_file(GtkWidget * widget, gpointer data)
{
static char const newtext[] = "New text file.txt";
IconCallback * ic = data;
Browser * browser = ic->browser;
char const * cur = browser->current->data;
char * path;
int fd;
if((path = malloc(strlen(cur) + sizeof(newtext) + 1)) == NULL)
{
browser_error(browser, strerror(errno), 0);
return;
}
sprintf(path, "%s/%s", cur, newtext);
if((fd = creat(path, 0666)) < 0)
browser_error(browser, strerror(errno), 0);
else
close(fd);
free(path);
}
static void _on_popup_new_folder(GtkWidget * widget, gpointer data)
{ {
IconCallback * ic = data; IconCallback * ic = data;
Browser * browser = ic->browser; Browser * browser = ic->browser;
on_file_new_folder(NULL, browser); /* XXX ugly */ on_file_new_folder(widget, browser);
} }
static void _press_directory(GtkWidget * menu, IconCallback * ic) static void _press_directory(GtkWidget * menu, IconCallback * ic)
@ -1163,7 +1193,7 @@ static void _on_icon_delete(GtkWidget * widget, gpointer data)
IconCallback * cb = data; IconCallback * cb = data;
/* FIXME not selected => cursor */ /* FIXME not selected => cursor */
on_edit_delete(GTK_MENU_ITEM(widget), cb->browser); on_edit_delete(widget, cb->browser);
} }
static void _on_icon_open(GtkWidget * widget, gpointer data) static void _on_icon_open(GtkWidget * widget, gpointer data)
@ -1232,7 +1262,7 @@ static void _on_icon_paste(GtkWidget * widget, gpointer data)
char * p = cb->browser->current->data; char * p = cb->browser->current->data;
cb->browser->current->data = cb->path; /* XXX this is totally ugly */ cb->browser->current->data = cb->path; /* XXX this is totally ugly */
on_edit_paste(GTK_MENU_ITEM(widget), cb->browser); on_edit_paste(widget, cb->browser);
cb->browser->current->data = p; cb->browser->current->data = p;
} }

View File

@ -25,19 +25,19 @@
gboolean on_closex(GtkWidget * widget, GdkEvent * event, gpointer data); gboolean on_closex(GtkWidget * widget, GdkEvent * event, gpointer data);
/* file menu */ /* file menu */
void on_file_new_window(GtkMenuItem * menuitem, gpointer data); void on_file_new_window(GtkWidget * widget, gpointer data);
void on_file_new_folder(GtkMenuItem * menuitem, gpointer data); void on_file_new_folder(GtkWidget * widget, gpointer data);
void on_file_close(GtkMenuItem * menuitem, gpointer data); void on_file_close(GtkWidget * widget, gpointer data);
void on_file_open_file(GtkMenuItem * menuitem, gpointer data); void on_file_open_file(GtkWidget * widget, gpointer data);
/* edit menu */ /* edit menu */
void on_edit_copy(GtkMenuItem * menuitem, gpointer data); void on_edit_copy(GtkWidget * widget, gpointer data);
void on_edit_cut(GtkMenuItem * menuitem, gpointer data); void on_edit_cut(GtkWidget * widget, gpointer data);
void on_edit_delete(GtkMenuItem * menuitem, gpointer data); void on_edit_delete(GtkWidget * widget, gpointer data);
void on_edit_paste(GtkMenuItem * menuitem, gpointer data); void on_edit_paste(GtkWidget * widget, gpointer data);
void on_edit_preferences(GtkMenuItem * menuitem, gpointer data); void on_edit_preferences(GtkWidget * widget, gpointer data);
void on_edit_select_all(GtkMenuItem * menuitem, gpointer data); void on_edit_select_all(GtkWidget * widget, gpointer data);
void on_edit_unselect_all(GtkMenuItem * menuitem, gpointer data); void on_edit_unselect_all(GtkWidget * widget, gpointer data);
/* help menu */ /* help menu */
void on_help_about(GtkWidget * widget, gpointer data); void on_help_about(GtkWidget * widget, gpointer data);