Browser
/* $Id$ */
/* Copyright (c) 2006-2020 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Desktop Browser */
/* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY ITS AUTHORS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
#include <sys/param.h>
#ifndef __GNU__ /* XXX hurd portability */
# include <sys/mount.h>
# if defined(__linux__) || defined(__CYGWIN__) || defined(__sun)
# define unmount(a, b) umount(a)
# endif
# ifndef unmount
# define unmount unmount
# endif
#endif
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <libintl.h>
#include <System.h>
#include "Browser/vfs.h"
#include "callbacks.h"
#include "browser.h"
#include "../../config.h"
#define _(string) gettext(string)
#define N_(string) (string)
#define COMMON_SYMLINK
#include "../common.c"
/* public */
/* functions */
/* callbacks */
/* accelerators */
/* on_location */
void on_location(gpointer data)
{
Browser * browser = data;
browser_focus_location(browser);
}
/* on_new_window */
void on_new_window(gpointer data)
{
Browser * browser = data;
browser_new_copy(browser);
}
/* on_open_file */
void on_open_file(gpointer data)
{
Browser * browser = data;
browser_open(browser, NULL);
}
/* toolbar */
/* on_back */
void on_back(gpointer data)
{
Browser * browser = data;
browser_go_back(browser);
}
/* on_copy */
void on_copy(gpointer data)
{
Browser * browser = data;
browser_copy(browser);
}
/* on_cut */
void on_cut(gpointer data)
{
Browser * browser = data;
browser_cut(browser);
}
/* on_delete */
void on_delete(gpointer data)
{
Browser * browser = data;
browser_selection_delete(browser);
}
/* on_forward */
void on_forward(gpointer data)
{
Browser * browser = data;
browser_go_forward(browser);
}
/* on_home */
void on_home(gpointer data)
{
Browser * browser = data;
browser_go_home(browser);
}
/* on_new_folder */
void on_new_folder(gpointer data)
{
Browser * browser = data;
char const newfolder[] = N_("New folder");
char const * location;
String * path;
if((location = browser_get_location(browser)) == NULL)
return;
if((path = string_new_append(location, "/", _(newfolder), NULL))
== NULL)
{
browser_error(browser, error_get(NULL), 1);
return;
}
if(browser_vfs_mkdir(path, 0777) != 0)
browser_error(browser, error_get(NULL), 1);
string_delete(path);
}
/* on_new_symlink */
void on_new_symlink(gpointer data)
{
Browser * browser = data;
GtkWidget * window;
char const * location;
if((location = browser_get_location(browser)) == NULL)
return;
window = browser_get_window(browser);
if(_common_symlink(window, location) != 0)
browser_error(browser, strerror(errno), 1);
}
/* on_paste */
void on_paste(gpointer data)
{
Browser * browser = data;
browser_paste(browser);
}
/* on_preferences */
void on_preferences(gpointer data)
{
Browser * browser = data;
browser_show_preferences(browser, TRUE);
}
/* on_properties */
void on_properties(gpointer data)
{
Browser * browser = data;
browser_properties(browser);
}
/* on_refresh */
void on_refresh(gpointer data)
{
Browser * browser = data;
browser_refresh(browser);
}
/* on_updir */
void on_updir(gpointer data)
{
Browser * browser = data;
char const * location;
char * dir;
if((location = browser_get_location(browser)) == NULL)
return;
dir = g_path_get_dirname(location);
browser_set_location(browser, dir);
g_free(dir);
}
#if GTK_CHECK_VERSION(2, 6, 0)
/* on_view_as */
void on_view_as(gpointer data)
{
Browser * browser = data;
BrowserView view;
view = browser_get_view(browser);
switch(view)
{
case BV_DETAILS:
browser_set_view(browser, BV_ICONS);
break;
case BV_LIST:
browser_set_view(browser, BV_THUMBNAILS);
break;
case BV_ICONS:
browser_set_view(browser, BV_LIST);
break;
case BV_THUMBNAILS:
browser_set_view(browser, BV_DETAILS);
break;
}
}
/* on_view_details */
void on_view_details(gpointer data)
{
Browser * browser = data;
browser_set_view(browser, BV_DETAILS);
}
/* on_view_icons */
void on_view_icons(gpointer data)
{
Browser * browser = data;
browser_set_view(browser, BV_ICONS);
}
/* on_view_list */
void on_view_list(gpointer data)
{
Browser * browser = data;
browser_set_view(browser, BV_LIST);
}
/* on_view_thumbnails */
void on_view_thumbnails(gpointer data)
{
Browser * browser = data;
browser_set_view(browser, BV_THUMBNAILS);
}
#endif
/* address bar */
/* on_path_activate */
void on_path_activate(gpointer data)
{
Browser * browser = data;
gchar const * p;
p = browser_get_path_entry(browser);
browser_set_location(browser, p);
}