diff options
Diffstat (limited to 'extra/libfm')
-rw-r--r-- | extra/libfm/0001-filename-with-spaces-not-supported.patch | 345 | ||||
-rw-r--r-- | extra/libfm/PKGBUILD | 30 | ||||
-rw-r--r-- | extra/libfm/libfm.install | 14 |
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 +} + + |