summaryrefslogtreecommitdiff
path: root/extra/libfm
diff options
context:
space:
mode:
Diffstat (limited to 'extra/libfm')
-rw-r--r--extra/libfm/0001-filename-with-spaces-not-supported.patch345
-rw-r--r--extra/libfm/PKGBUILD30
-rw-r--r--extra/libfm/libfm.install14
3 files changed, 389 insertions, 0 deletions
diff --git a/extra/libfm/0001-filename-with-spaces-not-supported.patch b/extra/libfm/0001-filename-with-spaces-not-supported.patch
new file mode 100644
index 000000000..568f6dc38
--- /dev/null
+++ b/extra/libfm/0001-filename-with-spaces-not-supported.patch
@@ -0,0 +1,345 @@
+From 96fa31c757189c7c5f60d4de4c2df236d2cba0ea Mon Sep 17 00:00:00 2001
+From: Hong Jen Yee (PCMan) <pcman.tw@gmail.com>
+Date: Wed, 20 Oct 2010 06:40:51 +0800
+Subject: [PATCH] Fix #3089625 - Filenames with spaces not supported in copy/paste.
+
+---
+ src/base/fm-file-launcher.c | 2 +-
+ src/base/fm-folder.c | 6 +-
+ src/base/fm-path.c | 2 +-
+ src/gtk/fm-folder-view.c | 130 +++++++++++++++++++++---------------------
+ src/gtk/fm-gtk-utils.c | 10 +--
+ src/gtk/fm-path-entry.c | 2 +-
+ 6 files changed, 75 insertions(+), 77 deletions(-)
+
+diff --git a/src/base/fm-file-launcher.c b/src/base/fm-file-launcher.c
+index 3857c33..c356249 100644
+--- a/src/base/fm-file-launcher.c
++++ b/src/base/fm-file-launcher.c
+@@ -91,7 +91,7 @@ gboolean fm_launch_desktop_entry(GAppLaunchContext* ctx, const char* file_or_id,
+ * e.g: If this URL points to the another desktop entry file, and it
+ * points to yet another desktop entry file, this can create a
+ * infinite loop. This is a extremely rare case. */
+- FmPath* path = fm_path_new(url);
++ FmPath* path = fm_path_new_for_uri(url);
+ _uris = g_list_prepend(_uris, path);
+ ret = fm_launch_paths(ctx, _uris, launcher, user_data);
+ g_list_free(_uris);
+diff --git a/src/base/fm-folder.c b/src/base/fm-folder.c
+index ccbb3cc..3474937 100644
+--- a/src/base/fm-folder.c
++++ b/src/base/fm-folder.c
+@@ -334,8 +334,8 @@ static void on_job_finished(FmDirListJob* job, FmFolder* folder)
+
+ static FmJobErrorAction on_job_err(FmDirListJob* job, GError* err, FmJobErrorSeverity severity, FmFolder* folder)
+ {
+- FmJobErrorAction ret;
+- g_signal_emit(folder, signals[ERROR], 0, err, severity, &ret);
++ FmJobErrorAction ret;
++ g_signal_emit(folder, signals[ERROR], 0, err, severity, &ret);
+ return ret;
+ }
+
+@@ -470,7 +470,7 @@ FmFolder* fm_folder_get_for_path(FmPath* path)
+
+ FmFolder* fm_folder_get_for_path_name(const char* path)
+ {
+- FmPath* fm_path = fm_path_new(path);
++ FmPath* fm_path = fm_path_new_for_str(path);
+ FmFolder* folder = fm_folder_get_internal(fm_path, NULL);
+ fm_path_unref(fm_path);
+ return folder;
+diff --git a/src/base/fm-path.c b/src/base/fm-path.c
+index ca62256..8b31de2 100644
+--- a/src/base/fm-path.c
++++ b/src/base/fm-path.c
+@@ -926,7 +926,7 @@ FmPathList* fm_path_list_new_from_uris(const char** uris)
+ FmPathList* pl = fm_path_list_new();
+ for(uri = uris; *uri; ++uri)
+ {
+- FmPath* path = fm_path_new(*uri);
++ FmPath* path = fm_path_new_for_uri(*uri);
+ fm_list_push_tail_noref(pl, path);
+ }
+ return pl;
+diff --git a/src/gtk/fm-folder-view.c b/src/gtk/fm-folder-view.c
+index fab88c0..9943015 100644
+--- a/src/gtk/fm-folder-view.c
++++ b/src/gtk/fm-folder-view.c
+@@ -41,8 +41,8 @@
+
+ enum{
+ CHDIR,
+- LOADED,
+- STATUS,
++ LOADED,
++ STATUS,
+ CLICKED,
+ SEL_CHANGED,
+ SORT_CHANGED,
+@@ -82,7 +82,7 @@ static void fm_folder_view_class_init(FmFolderViewClass *klass)
+ {
+ GObjectClass *g_object_class;
+ GtkWidgetClass *widget_class;
+- FmFolderViewClass *fv_class;
++ FmFolderViewClass *fv_class;
+ g_object_class = G_OBJECT_CLASS(klass);
+ g_object_class->finalize = fm_folder_view_finalize;
+ widget_class = GTK_WIDGET_CLASS(klass);
+@@ -165,19 +165,19 @@ gboolean on_folder_view_focus_in(GtkWidget* widget, GdkEventFocus* evt)
+
+ void on_chdir(FmFolderView* fv, FmPath* dir_path)
+ {
+- GtkWidget* toplevel = gtk_widget_get_toplevel((GtkWidget*)fv);
+- if(GTK_WIDGET_REALIZED(toplevel))
+- {
+- GdkCursor* cursor = gdk_cursor_new(GDK_WATCH);
+- gdk_window_set_cursor(toplevel->window, cursor);
+- }
++ GtkWidget* toplevel = gtk_widget_get_toplevel((GtkWidget*)fv);
++ if(GTK_WIDGET_REALIZED(toplevel))
++ {
++ GdkCursor* cursor = gdk_cursor_new(GDK_WATCH);
++ gdk_window_set_cursor(toplevel->window, cursor);
++ }
+ }
+
+ void on_loaded(FmFolderView* fv, FmPath* dir_path)
+ {
+- GtkWidget* toplevel = gtk_widget_get_toplevel((GtkWidget*)fv);
+- if(GTK_WIDGET_REALIZED(toplevel))
+- gdk_window_set_cursor(toplevel->window, NULL);
++ GtkWidget* toplevel = gtk_widget_get_toplevel((GtkWidget*)fv);
++ if(GTK_WIDGET_REALIZED(toplevel))
++ gdk_window_set_cursor(toplevel->window, NULL);
+ }
+
+ void on_status(FmFolderView* fv, const char* msg)
+@@ -187,15 +187,15 @@ void on_status(FmFolderView* fv, const char* msg)
+
+ void on_model_loaded(FmFolderModel* model, FmFolderView* fv)
+ {
+- FmFolder* folder = model->dir;
+- char* msg;
+- /* FIXME: prevent direct access to data members */
+- g_signal_emit(fv, signals[LOADED], 0, folder->dir_path);
++ FmFolder* folder = model->dir;
++ char* msg;
++ /* FIXME: prevent direct access to data members */
++ g_signal_emit(fv, signals[LOADED], 0, folder->dir_path);
+
+ /* FIXME: show number of hidden files and available disk spaces. */
+- msg = g_strdup_printf("%d files are listed.", fm_list_get_length(folder->files) );
+- g_signal_emit(fv, signals[STATUS], 0, msg);
+- g_free(msg);
++ msg = g_strdup_printf("%d files are listed.", fm_list_get_length(folder->files) );
++ g_signal_emit(fv, signals[STATUS], 0, msg);
++ g_free(msg);
+ }
+
+ FmJobErrorAction on_folder_err(FmFolder* folder, GError* err, FmJobErrorSeverity severity, FmFolderView* fv)
+@@ -326,8 +326,8 @@ static void fm_folder_view_finalize(GObject *object)
+ if( self->model )
+ g_object_unref(self->model);
+ }
+- g_object_unref(self->dnd_src);
+- g_object_unref(self->dnd_dest);
++ g_object_unref(self->dnd_src);
++ g_object_unref(self->dnd_dest);
+
+ if(self->cwd)
+ fm_path_unref(self->cwd);
+@@ -715,15 +715,15 @@ void fm_folder_view_set_mode(FmFolderView* fv, FmFolderViewMode mode)
+
+ /* FIXME: maybe calling set_icon_size here is a good idea */
+
+- gtk_drag_source_set(fv->view, GDK_BUTTON1_MASK,
+- fm_default_dnd_src_targets, N_FM_DND_SRC_DEFAULT_TARGETS,
+- GDK_ACTION_COPY|GDK_ACTION_MOVE|GDK_ACTION_LINK|GDK_ACTION_ASK);
++ gtk_drag_source_set(fv->view, GDK_BUTTON1_MASK,
++ fm_default_dnd_src_targets, N_FM_DND_SRC_DEFAULT_TARGETS,
++ GDK_ACTION_COPY|GDK_ACTION_MOVE|GDK_ACTION_LINK|GDK_ACTION_ASK);
+ fm_dnd_src_set_widget(fv->dnd_src, fv->view);
+
+- gtk_drag_dest_set(fv->view, 0,
+- fm_default_dnd_dest_targets, N_FM_DND_DEST_DEFAULT_TARGETS,
+- GDK_ACTION_COPY|GDK_ACTION_MOVE|GDK_ACTION_LINK|GDK_ACTION_ASK);
+- fm_dnd_dest_set_widget(fv->dnd_dest, fv->view);
++ gtk_drag_dest_set(fv->view, 0,
++ fm_default_dnd_dest_targets, N_FM_DND_DEST_DEFAULT_TARGETS,
++ GDK_ACTION_COPY|GDK_ACTION_MOVE|GDK_ACTION_LINK|GDK_ACTION_ASK);
++ fm_dnd_dest_set_widget(fv->dnd_dest, fv->view);
+ g_signal_connect_after(fv->view, "drag-motion", G_CALLBACK(on_drag_motion), fv);
+ g_signal_connect(fv->view, "drag-leave", G_CALLBACK(on_drag_leave), fv);
+ g_signal_connect(fv->view, "drag-drop", G_CALLBACK(on_drag_drop), fv);
+@@ -739,9 +739,9 @@ void fm_folder_view_set_mode(FmFolderView* fv, FmFolderViewMode mode)
+ gtk_widget_grab_focus(fv->view);
+ }
+ else
+- {
++ {
+ /* g_debug("same mode"); */
+- }
++ }
+ }
+
+ FmFolderViewMode fm_folder_view_get_mode(FmFolderView* fv)
+@@ -785,7 +785,7 @@ void fm_folder_view_sort(FmFolderView* fv, GtkSortType type, int by)
+ fv->sort_by = by;
+ if(fv->model)
+ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(fv->model),
+- fv->sort_by, fv->sort_type);
++ fv->sort_by, fv->sort_type);
+ }
+
+ GtkSortType fm_folder_view_get_sort_type(FmFolderView* fv)
+@@ -815,18 +815,18 @@ gboolean fm_folder_view_get_show_hidden(FmFolderView* fv)
+
+ gboolean fm_folder_view_chdir_by_name(FmFolderView* fv, const char* path_str)
+ {
+- gboolean ret;
+- FmPath* path;
++ gboolean ret;
++ FmPath* path;
+
+ if( G_UNLIKELY( !path_str ) )
+ return FALSE;
+
+- path = fm_path_new(path_str);
+- if(!path) /* might be a malformed path */
+- return FALSE;
+- ret = fm_folder_view_chdir(fv, path);
+- fm_path_unref(path);
+- return ret;
++ path = fm_path_new_for_str(path_str);
++ if(!path) /* might be a malformed path */
++ return FALSE;
++ ret = fm_folder_view_chdir(fv, path);
++ fm_path_unref(path);
++ return ret;
+ }
+
+ static void on_folder_unmounted(FmFolder* folder, FmFolderView* fv)
+@@ -912,10 +912,10 @@ gboolean fm_folder_view_chdir(FmFolderView* fv, FmPath* path)
+ }
+ }
+
+- /* FIXME: the signal handler should be able to cancel the loading. */
+- g_signal_emit(fv, signals[CHDIR], 0, path);
+- if(fv->cwd)
+- fm_path_unref(fv->cwd);
++ /* FIXME: the signal handler should be able to cancel the loading. */
++ g_signal_emit(fv, signals[CHDIR], 0, path);
++ if(fv->cwd)
++ fm_path_unref(fv->cwd);
+ fv->cwd = fm_path_ref(path);
+
+ fv->folder = folder = fm_folder_get_for_path(path);
+@@ -1041,12 +1041,12 @@ gboolean on_btn_pressed(GtkWidget* view, GdkEventButton* evt, FmFolderView* fv)
+ if(!fv->model)
+ return FALSE;
+
+- /* FIXME: handle single click activation */
++ /* FIXME: handle single click activation */
+ if( evt->type == GDK_BUTTON_PRESS )
+ {
+- /* special handling for ExoIconView */
+- if(evt->button != 1)
+- {
++ /* special handling for ExoIconView */
++ if(evt->button != 1)
++ {
+ if(fv->mode==FM_FV_ICON_VIEW || fv->mode==FM_FV_COMPACT_VIEW || fv->mode==FM_FV_THUMBNAIL_VIEW)
+ {
+ /* select the item on right click for ExoIconView */
+@@ -1089,27 +1089,27 @@ gboolean on_btn_pressed(GtkWidget* view, GdkEventButton* evt, FmFolderView* fv)
+ gtk_tree_path_free(tp);
+ }
+ }
+- }
++ }
+
+- if(evt->button == 2) /* middle click */
+- type = FM_FV_MIDDLE_CLICK;
+- else if(evt->button == 3) /* right click */
+- type = FM_FV_CONTEXT_MENU;
++ if(evt->button == 2) /* middle click */
++ type = FM_FV_MIDDLE_CLICK;
++ else if(evt->button == 3) /* right click */
++ type = FM_FV_CONTEXT_MENU;
+ }
+
+- if( type != FM_FV_CLICK_NONE )
+- {
+- sels = fm_folder_view_get_selected_tree_paths(fv);
+- if( sels || type == FM_FV_CONTEXT_MENU )
+- {
+- item_clicked(fv, sels ? sels->data : NULL, type);
+- if(sels)
+- {
+- g_list_foreach(sels, (GFunc)gtk_tree_path_free, NULL);
+- g_list_free(sels);
+- }
+- }
+- }
++ if( type != FM_FV_CLICK_NONE )
++ {
++ sels = fm_folder_view_get_selected_tree_paths(fv);
++ if( sels || type == FM_FV_CONTEXT_MENU )
++ {
++ item_clicked(fv, sels ? sels->data : NULL, type);
++ if(sels)
++ {
++ g_list_foreach(sels, (GFunc)gtk_tree_path_free, NULL);
++ g_list_free(sels);
++ }
++ }
++ }
+ return FALSE;
+ }
+
+diff --git a/src/gtk/fm-gtk-utils.c b/src/gtk/fm-gtk-utils.c
+index 23b6f33..07df7d5 100644
+--- a/src/gtk/fm-gtk-utils.c
++++ b/src/gtk/fm-gtk-utils.c
+@@ -149,7 +149,7 @@ FmPath* fm_get_user_input_path(GtkWindow* parent, const char* title, const char*
+ }
+
+ str = _fm_user_input_dialog_run( dlg, GTK_ENTRY( entry ) );
+- path = fm_path_new(str);
++ path = fm_path_new_for_str(str);
+
+ g_free(path_str);
+ g_free(str);
+@@ -261,11 +261,9 @@ FmPath* fm_select_folder(GtkWindow* parent)
+ GTK_RESPONSE_OK, NULL);
+ if( gtk_dialog_run((GtkDialog*)chooser) == GTK_RESPONSE_OK )
+ {
+- char* file = gtk_file_chooser_get_filename(chooser);
+- if(!file)
+- file = gtk_file_chooser_get_uri(chooser);
+- path = fm_path_new(file);
+- g_free(file);
++ GFile* file = gtk_file_chooser_get_file(chooser);
++ path = fm_path_new_for_gfile(file);
++ g_object_unref(file);
+ }
+ else
+ path = NULL;
+diff --git a/src/gtk/fm-path-entry.c b/src/gtk/fm-path-entry.c
+index a57b58d..af60d03 100644
+--- a/src/gtk/fm-path-entry.c
++++ b/src/gtk/fm-path-entry.c
+@@ -163,7 +163,7 @@ static void fm_path_entry_changed(GtkEditable *editable)
+ if( !fm_path_equal_str(priv->path, original_key, key_dir_len) )
+ {
+ gchar* new_path = g_path_get_dirname(original_key);
+- FmPath *new_fm_path = fm_path_new(new_path);
++ FmPath *new_fm_path = fm_path_new_for_str(new_path);
+ g_free(new_path);
+ if( new_fm_path != NULL )
+ {
+--
+1.7.0.1
+
+
diff --git a/extra/libfm/PKGBUILD b/extra/libfm/PKGBUILD
new file mode 100644
index 000000000..ab7df7da9
--- /dev/null
+++ b/extra/libfm/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 110478 2011-02-19 16:45:55Z angvp $
+# Maintainer: Angel Velasquez <angvp@archlinux.org>
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+pkgname=libfm
+pkgver=0.1.14
+pkgrel=4
+pkgdesc="the core of next generation file manager PCManFM"
+url="http://pcmanfm.sourceforge.net/"
+arch=('i686' 'x86_64')
+license=('GPL')
+groups=('lxde')
+options=('!libtool')
+install=libfm.install
+depends=('gtk2' 'menu-cache' 'shared-mime-info' 'udisks')
+source=(http://downloads.sourceforge.net/pcmanfm/$pkgname-$pkgver.tar.gz
+ 0001-filename-with-spaces-not-supported.patch)
+md5sums=('d55e51dced6bb9ef46665243b079761f'
+ '22bf07665db6eb82989cc8111ef5c3bf')
+
+build() {
+ cd $srcdir/$pkgname-$pkgver
+ patch -p1 -i $srcdir/0001-filename-with-spaces-not-supported.patch
+ ./configure --prefix=/usr --sysconfdir=/etc --enable-udisks --with-gnu-ld
+ make
+}
+
+package() {
+ cd $srcdir/$pkgname-$pkgver
+ make DESTDIR=$pkgdir install
+}
diff --git a/extra/libfm/libfm.install b/extra/libfm/libfm.install
new file mode 100644
index 000000000..a2dcc622d
--- /dev/null
+++ b/extra/libfm/libfm.install
@@ -0,0 +1,14 @@
+post_install() {
+ /usr/bin/update-mime-database usr/share/mime > /dev/null
+ /usr/bin/update-desktop-database -q
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ post_install
+}
+
+