Added target delete
This commit is contained in:
parent
94a8903cb3
commit
dc71c25144
18
src/Makefile
18
src/Makefile
|
@ -1,10 +1,10 @@
|
|||
TARGETS = browser
|
||||
TARGETS = browser delete
|
||||
PREFIX = /usr/local
|
||||
DESTDIR =
|
||||
BINDIR = $(PREFIX)/bin
|
||||
INCLUDEDIR= $(PREFIX)/include
|
||||
CC = cc
|
||||
CFLAGSF = -W -Wall -ansi `pkg-config gtk+-2.0 --cflags`
|
||||
CFLAGSF = -W -Wall -ansi -I .. `pkg-config gtk+-2.0 --cflags`
|
||||
CFLAGS = -g -O2
|
||||
LDFLAGSF= `pkg-config gtk+-2.0 --libs` -l System
|
||||
RM = rm -f
|
||||
|
@ -19,7 +19,12 @@ browser_CFLAGS = $(CFLAGSF) $(CFLAGS)
|
|||
browser: $(browser_OBJS)
|
||||
$(CC) $(LDFLAGSF) $(LDFLAGS) -o browser $(browser_OBJS)
|
||||
|
||||
browser.o: browser.c mime.h browser.h
|
||||
delete_OBJS = delete.o
|
||||
delete_CFLAGS = $(CFLAGSF) $(CFLAGS)
|
||||
delete: $(delete_OBJS)
|
||||
$(CC) $(LDFLAGSF) $(LDFLAGS) -o delete $(delete_OBJS)
|
||||
|
||||
browser.o: browser.c mime.h browser.h ../config.h
|
||||
$(CC) $(browser_CFLAGS) -c browser.c
|
||||
|
||||
mime.o: mime.c browser.h mime.h
|
||||
|
@ -28,8 +33,11 @@ mime.o: mime.c browser.h mime.h
|
|||
main.o: main.c browser.h mime.h
|
||||
$(CC) $(browser_CFLAGS) -c main.c
|
||||
|
||||
delete.o: delete.c
|
||||
$(CC) $(delete_CFLAGS) -c delete.c
|
||||
|
||||
clean:
|
||||
$(RM) $(browser_OBJS)
|
||||
$(RM) $(browser_OBJS) $(delete_OBJS)
|
||||
|
||||
distclean: clean
|
||||
$(RM) $(TARGETS)
|
||||
|
@ -37,8 +45,10 @@ distclean: clean
|
|||
install: all
|
||||
$(MKDIR) $(DESTDIR)$(BINDIR)
|
||||
$(INSTALL) -m 0755 browser $(DESTDIR)$(BINDIR)/browser
|
||||
$(INSTALL) -m 0755 delete $(DESTDIR)$(BINDIR)/delete
|
||||
|
||||
uninstall:
|
||||
$(RM) $(DESTDIR)$(BINDIR)/browser
|
||||
$(RM) $(DESTDIR)$(BINDIR)/delete
|
||||
|
||||
.PHONY: all clean distclean install uninstall
|
||||
|
|
139
src/delete.c
Normal file
139
src/delete.c
Normal file
|
@ -0,0 +1,139 @@
|
|||
/* delete.c */
|
||||
|
||||
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
|
||||
/* Delete */
|
||||
typedef struct _Delete
|
||||
{
|
||||
GtkWidget * window;
|
||||
GtkWidget * label;
|
||||
GtkWidget * progress;
|
||||
int filec;
|
||||
char ** filev;
|
||||
int cur;
|
||||
int err_cnt;
|
||||
} Delete;
|
||||
/* callbacks */
|
||||
static void _delete_on_closex(GtkWidget * widget, GdkEvent * event,
|
||||
gpointer data);
|
||||
static gboolean _delete_idle(gpointer data);
|
||||
static int _delete(int filec, char * filev[])
|
||||
{
|
||||
static Delete delete;
|
||||
GtkWidget * vbox;
|
||||
GtkWidget * hbox;
|
||||
GtkWidget * widget;
|
||||
char buf[256];
|
||||
|
||||
delete.filec = filec;
|
||||
delete.filev = filev;
|
||||
delete.cur = 0;
|
||||
delete.err_cnt = 0;
|
||||
delete.window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title(GTK_WINDOW(delete.window), "Delete file(s)");
|
||||
g_signal_connect(G_OBJECT(delete.window), "delete_event", G_CALLBACK(
|
||||
_delete_on_closex), NULL);
|
||||
vbox = gtk_vbox_new(FALSE, 4);
|
||||
snprintf(buf, sizeof(buf), "Deleting file: %s", filev[0]);
|
||||
delete.label = gtk_label_new(buf);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), delete.label, TRUE, TRUE, 4);
|
||||
delete.progress = gtk_progress_bar_new();
|
||||
snprintf(buf, sizeof(buf), "File 1 of %u", filec);
|
||||
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(delete.progress), buf);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), delete.progress, TRUE, TRUE, 4);
|
||||
hbox = gtk_hbox_new(FALSE, 4);
|
||||
widget = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
|
||||
gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, FALSE, 4);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 4);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(delete.window), 4);
|
||||
gtk_container_add(GTK_CONTAINER(delete.window), vbox);
|
||||
g_idle_add(_delete_idle, &delete);
|
||||
gtk_widget_show_all(delete.window);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void _delete_on_closex(GtkWidget * widget, GdkEvent * event,
|
||||
gpointer data)
|
||||
{
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
static void _idle_on_error_close(GtkDialog * dialog, gint arg, gpointer data);
|
||||
static gboolean _delete_idle(gpointer data)
|
||||
{
|
||||
Delete * delete = (Delete*)data;
|
||||
GtkWidget * dialog;
|
||||
char buf[256];
|
||||
|
||||
if(unlink(delete->filev[delete->cur++]) != 0)
|
||||
{
|
||||
delete->err_cnt++;
|
||||
dialog = gtk_message_dialog_new(GTK_WINDOW(delete->window),
|
||||
GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_OK, "%s: %s",
|
||||
delete->filev[delete->cur-1], strerror(errno));
|
||||
g_signal_connect(dialog, "response", G_CALLBACK(
|
||||
_idle_on_error_close), delete);
|
||||
gtk_widget_show(dialog);
|
||||
}
|
||||
if(delete->cur == delete->filec)
|
||||
{
|
||||
if(delete->err_cnt == 0)
|
||||
gtk_main_quit();
|
||||
return FALSE;
|
||||
}
|
||||
snprintf(buf, sizeof(buf), "Deleting file: %s",
|
||||
delete->filev[delete->cur]);
|
||||
gtk_label_set_text(GTK_LABEL(delete->label), buf);
|
||||
snprintf(buf, sizeof(buf), "File %u of %u", delete->cur+1,
|
||||
delete->filec);
|
||||
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(delete->progress), buf);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void _idle_on_error_close(GtkDialog * dialog, gint arg, gpointer data)
|
||||
{
|
||||
Delete * delete = data;
|
||||
|
||||
gtk_widget_destroy(GTK_WIDGET(dialog));
|
||||
delete->err_cnt--;
|
||||
if(delete->cur != delete->filec)
|
||||
return;
|
||||
if(delete->err_cnt == 0)
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
|
||||
/* usage */
|
||||
static int _usage(void)
|
||||
{
|
||||
fprintf(stderr, "%s", "Usage: delete file...\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* main */
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
int o;
|
||||
|
||||
while((o = getopt(argc, argv, "")) != -1)
|
||||
switch(o)
|
||||
{
|
||||
default:
|
||||
return _usage();
|
||||
}
|
||||
if(optind == argc)
|
||||
return _usage();
|
||||
gtk_init(&argc, &argv);
|
||||
_delete(argc - optind, &argv[optind]);
|
||||
gtk_main();
|
||||
return 0;
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
targets=browser
|
||||
cflags_force=-W -Wall -ansi `pkg-config gtk+-2.0 --cflags`
|
||||
targets=browser,delete
|
||||
cflags_force=-W -Wall -ansi -I .. `pkg-config gtk+-2.0 --cflags`
|
||||
cflags=-g -O2
|
||||
ldflags_force=`pkg-config gtk+-2.0 --libs` -l System
|
||||
dist=browser.h,mime.h
|
||||
|
@ -9,10 +9,14 @@ type=binary
|
|||
sources=browser.c,mime.c,main.c
|
||||
|
||||
[browser.c]
|
||||
depends=mime.h,browser.h
|
||||
depends=mime.h,browser.h,../config.h
|
||||
|
||||
[mime.c]
|
||||
depends=browser.h,mime.h
|
||||
|
||||
[main.c]
|
||||
depends=browser.h,mime.h
|
||||
|
||||
[delete]
|
||||
type=binary
|
||||
sources=delete.c
|
||||
|
|
Loading…
Reference in New Issue
Block a user