Added a submenu entry to allow the creation of a text file
This commit is contained in:
parent
74a720b5f9
commit
db10f3b5d8
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user