Moved the symbolic link creation code to common.c
This commit is contained in:
parent
00c58ba487
commit
a1af8a062b
|
@ -35,6 +35,7 @@ static char const _license[] =
|
|||
|
||||
#define COMMON_DND
|
||||
#define COMMON_EXEC
|
||||
#define COMMON_SYMLINK
|
||||
#include "common.c"
|
||||
|
||||
|
||||
|
@ -133,40 +134,11 @@ void on_file_new_folder(gpointer data)
|
|||
|
||||
void on_file_new_symlink(gpointer data)
|
||||
{
|
||||
static char const newsymlink[] = "New symbolic link";
|
||||
Browser * browser = data;
|
||||
char const * cur = browser->current->data;
|
||||
char * path;
|
||||
GtkWidget * dialog;
|
||||
GtkWidget * hbox;
|
||||
GtkWidget * widget;
|
||||
char const * to = NULL;
|
||||
|
||||
if((path = malloc(strlen(cur) + sizeof(newsymlink) + 1)) == NULL)
|
||||
{
|
||||
browser_error(browser, "malloc", 0);
|
||||
return;
|
||||
}
|
||||
sprintf(path, "%s/%s", cur, newsymlink);
|
||||
dialog = gtk_dialog_new_with_buttons("New symbolic link",
|
||||
GTK_WINDOW(browser->window),
|
||||
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
|
||||
hbox = gtk_hbox_new(FALSE, 0);
|
||||
widget = gtk_label_new("Destination: ");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 4);
|
||||
widget = gtk_entry_new();
|
||||
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 4);
|
||||
gtk_widget_show_all(hbox);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE,
|
||||
4);
|
||||
if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK)
|
||||
to = gtk_entry_get_text(GTK_ENTRY(widget));
|
||||
if(to != NULL && strlen(to) > 0 && symlink(to, path) != 0)
|
||||
browser_error(browser, path, 0);
|
||||
gtk_widget_destroy(dialog);
|
||||
free(path);
|
||||
if(_common_symlink(browser->window, cur) != 0)
|
||||
browser_error(browser, "symlink", 0);
|
||||
}
|
||||
|
||||
|
||||
|
|
41
src/common.c
41
src/common.c
|
@ -1,5 +1,5 @@
|
|||
/* $Id$ */
|
||||
/* Copyright (c) 2009 Pierre Pronchery <khorben@defora.org> */
|
||||
/* Copyright (c) 2010 Pierre Pronchery <khorben@defora.org> */
|
||||
/* This file is part of DeforaOS Desktop Browser */
|
||||
/* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -114,3 +114,42 @@ static int _common_exec(char const * program, char const * flags, GList * args)
|
|||
exit(2);
|
||||
}
|
||||
#endif /* COMMON_EXEC */
|
||||
|
||||
|
||||
#ifdef COMMON_SYMLINK
|
||||
/* common_symlink */
|
||||
static int _common_symlink(GtkWidget * window, char const * cur)
|
||||
{
|
||||
static char const newsymlink[] = "New symbolic link";
|
||||
int ret = 0;
|
||||
char * path;
|
||||
GtkWidget * dialog;
|
||||
GtkWidget * hbox;
|
||||
GtkWidget * widget;
|
||||
char const * to = NULL;
|
||||
|
||||
if((path = malloc(strlen(cur) + sizeof(newsymlink) + 1)) == NULL)
|
||||
return 1;
|
||||
sprintf(path, "%s/%s", cur, newsymlink);
|
||||
dialog = gtk_dialog_new_with_buttons("New symbolic link",
|
||||
GTK_WINDOW(window),
|
||||
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
|
||||
hbox = gtk_hbox_new(FALSE, 0);
|
||||
widget = gtk_label_new("Destination: ");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 4);
|
||||
widget = gtk_entry_new();
|
||||
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 4);
|
||||
gtk_widget_show_all(hbox);
|
||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE,
|
||||
4);
|
||||
if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK)
|
||||
to = gtk_entry_get_text(GTK_ENTRY(widget));
|
||||
if(to != NULL && strlen(to) > 0 && symlink(to, path) != 0)
|
||||
ret = 1;
|
||||
gtk_widget_destroy(dialog);
|
||||
free(path);
|
||||
return ret;
|
||||
}
|
||||
#endif /* COMMON_SYMLINK */
|
||||
|
|
Loading…
Reference in New Issue
Block a user