[Goodies-commits] r4025 - in thunar-svn-plugin/trunk: . tsp-svn-helper

Peter de Ridder peter at xfce.org
Sat Mar 8 00:17:09 CET 2008


Author: peter
Date: 2008-03-07 23:17:09 +0000 (Fri, 07 Mar 2008)
New Revision: 4025

Added:
   thunar-svn-plugin/trunk/tsp-svn-helper/tsh-file-selection-dialog.c
   thunar-svn-plugin/trunk/tsp-svn-helper/tsh-file-selection-dialog.h
Modified:
   thunar-svn-plugin/trunk/configure.ac.in
   thunar-svn-plugin/trunk/tsp-svn-helper/Makefile.am
   thunar-svn-plugin/trunk/tsp-svn-helper/tsh-add.c
   thunar-svn-plugin/trunk/tsp-svn-helper/tsh-commit.c
   thunar-svn-plugin/trunk/tsp-svn-helper/tsh-common.c
   thunar-svn-plugin/trunk/tsp-svn-helper/tsh-common.h
   thunar-svn-plugin/trunk/tsp-svn-helper/tsh-delete.c
   thunar-svn-plugin/trunk/tsp-svn-helper/tsh-revert.c
   thunar-svn-plugin/trunk/tsp-svn-helper/tsh-status-dialog.c
Log:
Added a file selection dialog for some actions to change the file selection for the command

Modified: thunar-svn-plugin/trunk/configure.ac.in
===================================================================
--- thunar-svn-plugin/trunk/configure.ac.in	2008-03-07 05:48:33 UTC (rev 4024)
+++ thunar-svn-plugin/trunk/configure.ac.in	2008-03-07 23:17:09 UTC (rev 4025)
@@ -27,6 +27,7 @@
 dnl ***************************
 AC_COPYRIGHT([Copyright (c) 2006-2007 Peter de Ridder <peter at xfce.org>.])
 AC_INIT([thunar-svn-plugin], [tsp_version], [thunar-dev at xfce.org])
+AC_PREFIX_DEFAULT([$(pkg-config --variable prefix thunarx-1 || echo /usr/local)])
 AC_PREREQ([2.50])
 AC_CANONICAL_TARGET()
 

Modified: thunar-svn-plugin/trunk/tsp-svn-helper/Makefile.am
===================================================================
--- thunar-svn-plugin/trunk/tsp-svn-helper/Makefile.am	2008-03-07 05:48:33 UTC (rev 4024)
+++ thunar-svn-plugin/trunk/tsp-svn-helper/Makefile.am	2008-03-07 23:17:09 UTC (rev 4025)
@@ -62,6 +62,8 @@
 	tsh-notify-dialog.c						\
 	tsh-status-dialog.h						\
 	tsh-status-dialog.c						\
+	tsh-file-selection-dialog.h					\
+	tsh-file-selection-dialog.c					\
 	tsh-lock-dialog.h						\
 	tsh-lock-dialog.c						\
 	tsh-log-dialog.h						\

Modified: thunar-svn-plugin/trunk/tsp-svn-helper/tsh-add.c
===================================================================
--- thunar-svn-plugin/trunk/tsp-svn-helper/tsh-add.c	2008-03-07 05:48:33 UTC (rev 4024)
+++ thunar-svn-plugin/trunk/tsp-svn-helper/tsh-add.c	2008-03-07 23:17:09 UTC (rev 4025)
@@ -32,6 +32,7 @@
 
 #include "tsh-common.h"
 #include "tsh-dialog-common.h"
+#include "tsh-file-selection-dialog.h"
 #include "tsh-notify-dialog.h"
 
 #include "tsh-add.h"
@@ -108,6 +109,19 @@
 	GtkWidget *dialog;
 	struct thread_args *args;
 
+  dialog = tsh_file_selection_dialog_new (_("Add"), NULL, 0, files, TSH_FILE_SELECTION_FLAG_RECURSIVE|TSH_FILE_SELECTION_FLAG_UNVERSIONED, ctx, pool);
+	if(gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK)
+  {
+    gtk_widget_destroy (dialog);
+    return NULL;
+  }
+  g_strfreev (files);
+  files = tsh_file_selection_dialog_get_files (TSH_FILE_SELECTION_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+
+  if(!files)
+    return NULL;
+
 	dialog = tsh_notify_dialog_new (_("Add"), NULL, 0);
   g_signal_connect(dialog, "cancel-clicked", tsh_cancel, NULL);
 	tsh_dialog_start (GTK_DIALOG (dialog), TRUE);

Modified: thunar-svn-plugin/trunk/tsp-svn-helper/tsh-commit.c
===================================================================
--- thunar-svn-plugin/trunk/tsp-svn-helper/tsh-commit.c	2008-03-07 05:48:33 UTC (rev 4024)
+++ thunar-svn-plugin/trunk/tsp-svn-helper/tsh-commit.c	2008-03-07 23:17:09 UTC (rev 4025)
@@ -32,6 +32,7 @@
 
 #include "tsh-common.h"
 #include "tsh-dialog-common.h"
+#include "tsh-file-selection-dialog.h"
 #include "tsh-notify-dialog.h"
 #include "tsh-log-message-dialog.h"
 
@@ -120,6 +121,19 @@
 	GtkWidget *dialog;
 	struct thread_args *args;
 
+  dialog = tsh_file_selection_dialog_new (_("Commit"), NULL, 0, files, TSH_FILE_SELECTION_FLAG_RECURSIVE|TSH_FILE_SELECTION_FLAG_MODIFIED/*|TSH_FILE_SELECTION_FLAG_UNVERSIONED*/, ctx, pool);
+	if(gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK)
+  {
+    gtk_widget_destroy (dialog);
+    return NULL;
+  }
+  g_strfreev (files);
+  files = tsh_file_selection_dialog_get_files (TSH_FILE_SELECTION_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+
+  if(!files)
+    return NULL;
+
 	dialog = tsh_notify_dialog_new (_("Commit"), NULL, 0);
   g_signal_connect(dialog, "cancel-clicked", tsh_cancel, NULL);
 	tsh_dialog_start (GTK_DIALOG (dialog), TRUE);

Modified: thunar-svn-plugin/trunk/tsp-svn-helper/tsh-common.c
===================================================================
--- thunar-svn-plugin/trunk/tsp-svn-helper/tsh-common.c	2008-03-07 05:48:33 UTC (rev 4024)
+++ thunar-svn-plugin/trunk/tsp-svn-helper/tsh-common.c	2008-03-07 23:17:09 UTC (rev 4025)
@@ -542,7 +542,7 @@
   return _(state_string);
 }
 
-static const gchar *
+const gchar *
 tsh_status_to_string(enum svn_wc_status_kind status)
 {
   static const gchar const * const status_table[] = {

Modified: thunar-svn-plugin/trunk/tsp-svn-helper/tsh-common.h
===================================================================
--- thunar-svn-plugin/trunk/tsp-svn-helper/tsh-common.h	2008-03-07 05:48:33 UTC (rev 4024)
+++ thunar-svn-plugin/trunk/tsp-svn-helper/tsh-common.h	2008-03-07 23:17:09 UTC (rev 4025)
@@ -33,6 +33,8 @@
 
 gchar       *tsh_strerror  (svn_error_t *);
 
+const gchar *tsh_status_to_string(enum svn_wc_status_kind status);
+
 gchar *tsh_is_working_copy (const gchar *, apr_pool_t *);
 
 G_END_DECLS

Modified: thunar-svn-plugin/trunk/tsp-svn-helper/tsh-delete.c
===================================================================
--- thunar-svn-plugin/trunk/tsp-svn-helper/tsh-delete.c	2008-03-07 05:48:33 UTC (rev 4024)
+++ thunar-svn-plugin/trunk/tsp-svn-helper/tsh-delete.c	2008-03-07 23:17:09 UTC (rev 4025)
@@ -32,6 +32,7 @@
 
 #include "tsh-common.h"
 #include "tsh-dialog-common.h"
+#include "tsh-file-selection-dialog.h"
 #include "tsh-notify-dialog.h"
 #include "tsh-log-message-dialog.h"
 
@@ -120,6 +121,19 @@
 	GtkWidget *dialog;
 	struct thread_args *args;
 
+  dialog = tsh_file_selection_dialog_new (_("Delete"), NULL, 0, files, TSH_FILE_SELECTION_FLAG_RECURSIVE|TSH_FILE_SELECTION_FLAG_MODIFIED|TSH_FILE_SELECTION_FLAG_UNCHANGED, ctx, pool);
+	if(gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK)
+  {
+    gtk_widget_destroy (dialog);
+    return NULL;
+  }
+  g_strfreev (files);
+  files = tsh_file_selection_dialog_get_files (TSH_FILE_SELECTION_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+
+  if(!files)
+    return NULL;
+
 	dialog = tsh_notify_dialog_new (_("Delete"), NULL, 0);
   g_signal_connect(dialog, "cancel-clicked", tsh_cancel, NULL);
 	tsh_dialog_start (GTK_DIALOG (dialog), TRUE);

Added: thunar-svn-plugin/trunk/tsp-svn-helper/tsh-file-selection-dialog.c
===================================================================
--- thunar-svn-plugin/trunk/tsp-svn-helper/tsh-file-selection-dialog.c	                        (rev 0)
+++ thunar-svn-plugin/trunk/tsp-svn-helper/tsh-file-selection-dialog.c	2008-03-07 23:17:09 UTC (rev 4025)
@@ -0,0 +1,332 @@
+/*-
+ * Copyright (c) 2006 Peter de Ridder <peter at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs.h>
+#include <gtk/gtk.h>
+
+#include <subversion-1/svn_client.h>
+#include <subversion-1/svn_pools.h>
+
+#include "tsh-common.h"
+#include "tsh-file-selection-dialog.h"
+
+static void tsh_file_selection_status_func2 (void *, const char *, svn_wc_status2_t *);
+static void selection_cell_toggled (GtkCellRendererToggle *, gchar *, gpointer);
+static void selection_all_toggled (GtkToggleButton *, gpointer);
+
+struct _TshFileSelectionDialog
+{
+	GtkDialog dialog;
+
+	GtkWidget *tree_view;
+  GtkWidget *all;
+
+  TshFileSelectionFlags flags;
+};
+
+struct _TshFileSelectionDialogClass
+{
+	GtkDialogClass dialog_class;
+};
+
+G_DEFINE_TYPE (TshFileSelectionDialog, tsh_file_selection_dialog, GTK_TYPE_DIALOG)
+
+enum {
+  SIGNAL_CANCEL = 0,
+  SIGNAL_REFRESH,
+  SIGNAL_COUNT
+};
+
+static guint signals[SIGNAL_COUNT];
+
+static void
+tsh_file_selection_dialog_class_init (TshFileSelectionDialogClass *klass)
+{
+  signals[SIGNAL_CANCEL] = g_signal_new("cancel-clicked",
+    G_OBJECT_CLASS_TYPE (klass),
+    G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+    0, NULL, NULL,
+    g_cclosure_marshal_VOID__VOID,
+    G_TYPE_NONE, 0);
+  signals[SIGNAL_REFRESH] = g_signal_new("refresh-clicked",
+    G_OBJECT_CLASS_TYPE (klass),
+    G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+    0, NULL, NULL,
+    g_cclosure_marshal_VOID__VOID,
+    G_TYPE_NONE, 0);
+}
+
+enum {
+	COLUMN_PATH = 0,
+  COLUMN_TEXT_STAT,
+  COLUMN_PROP_STAT,
+	COLUMN_SELECTION,
+	COLUMN_COUNT
+};
+
+static void
+tsh_file_selection_dialog_init (TshFileSelectionDialog *dialog)
+{
+	GtkWidget *tree_view;
+	GtkWidget *scroll_window;
+	GtkWidget *all;
+	GtkCellRenderer *renderer;
+	GtkTreeModel *model;
+
+	scroll_window = gtk_scrolled_window_new (NULL, NULL);
+	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+	dialog->tree_view = tree_view = gtk_tree_view_new ();
+
+	renderer = gtk_cell_renderer_toggle_new ();
+  g_signal_connect (renderer, "toggled", G_CALLBACK (selection_cell_toggled), dialog);
+	gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+	                                             -1, "", renderer,
+                                               "active", COLUMN_SELECTION,
+                                               NULL);
+
+	renderer = gtk_cell_renderer_text_new ();
+	gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+	                                             -1, _("Path"), renderer,
+                                               "text", COLUMN_PATH,
+                                               NULL);
+	
+	renderer = gtk_cell_renderer_text_new ();
+	gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+	                                             -1, ("State"), renderer,
+                                               "text", COLUMN_TEXT_STAT,
+                                               NULL);
+	
+	renderer = gtk_cell_renderer_text_new ();
+	gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+	                                             -1, ("Prop state"), renderer,
+                                               "text", COLUMN_PROP_STAT,
+                                               NULL);
+
+	model = GTK_TREE_MODEL (gtk_list_store_new (COLUMN_COUNT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN));
+
+	gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), model);
+
+	g_object_unref (model);
+
+	gtk_container_add (GTK_CONTAINER (scroll_window), tree_view);
+	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), scroll_window, TRUE, TRUE, 0);
+	gtk_widget_show (tree_view);
+	gtk_widget_show (scroll_window);
+
+	dialog->all = all = gtk_check_button_new_with_label (_("Select/Unselect all"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (all), TRUE);
+  gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (all), TRUE);
+  g_signal_connect (all, "toggled", G_CALLBACK (selection_all_toggled), dialog);
+	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), all, FALSE, FALSE, 0);
+	gtk_widget_show (all);
+
+	gtk_window_set_title (GTK_WINDOW (dialog), _("Status"));
+
+	gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+	                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+	                        GTK_STOCK_OK, GTK_RESPONSE_OK,
+	                        NULL);
+	gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1);
+	gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+
+	gtk_window_set_default_size (GTK_WINDOW (dialog), 300, 200);
+}
+
+GtkWidget*
+tsh_file_selection_dialog_new (const gchar *title, GtkWindow *parent, GtkDialogFlags flags, gchar **files, TshFileSelectionFlags selection_flags, svn_client_ctx_t *ctx, apr_pool_t *pool)
+{
+  svn_opt_revision_t revision;
+	svn_error_t *err;
+  apr_pool_t *subpool;
+
+	TshFileSelectionDialog *dialog = g_object_new (TSH_TYPE_FILE_SELECTION_DIALOG, NULL);
+
+	if(title)
+		gtk_window_set_title (GTK_WINDOW(dialog), title);
+
+	if(parent)
+		gtk_window_set_transient_for (GTK_WINDOW(dialog), parent);
+
+	if(flags & GTK_DIALOG_MODAL)
+		gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);
+
+	if(flags & GTK_DIALOG_DESTROY_WITH_PARENT)
+		gtk_window_set_destroy_with_parent (GTK_WINDOW(dialog), TRUE);
+
+	if(flags & GTK_DIALOG_NO_SEPARATOR)
+		gtk_dialog_set_has_separator (GTK_DIALOG(dialog), FALSE);
+
+  dialog->flags = selection_flags;
+
+  subpool = svn_pool_create (pool);
+
+  revision.kind = svn_opt_revision_head;
+  if(files)
+  {
+    while (*files)
+    {
+      if((err = svn_client_status2(NULL, *files, &revision, tsh_file_selection_status_func2, dialog, selection_flags&TSH_FILE_SELECTION_FLAG_RECURSIVE, selection_flags&TSH_FILE_SELECTION_FLAG_UNCHANGED, FALSE, selection_flags&TSH_FILE_SELECTION_FLAG_IGNORED, TRUE, ctx, subpool)))
+      {
+        svn_pool_destroy (subpool);
+
+        gtk_widget_unref(GTK_WIDGET(dialog));
+
+        svn_error_clear(err);
+        return NULL;
+      }
+      files++;
+    }
+  }
+  else
+  {
+    if((err = svn_client_status2(NULL, "", &revision, tsh_file_selection_status_func2, dialog, selection_flags&TSH_FILE_SELECTION_FLAG_RECURSIVE, selection_flags&TSH_FILE_SELECTION_FLAG_UNCHANGED, FALSE, selection_flags&TSH_FILE_SELECTION_FLAG_IGNORED, TRUE, ctx, subpool)))
+    {
+      svn_pool_destroy (subpool);
+
+      gtk_widget_unref(GTK_WIDGET(dialog));
+
+      svn_error_clear(err);
+      return NULL;
+    }
+  }
+  svn_pool_destroy (subpool);
+
+	return GTK_WIDGET(dialog);
+}
+
+gchar**
+tsh_file_selection_dialog_get_files (TshFileSelectionDialog *dialog)
+{
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  gchar **files, **files_iter;
+  guint count = 0;
+  gboolean selection;
+
+  g_return_val_if_fail (TSH_IS_FILE_SELECTION_DIALOG (dialog), NULL);
+
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->tree_view));
+
+  if (gtk_tree_model_get_iter_first (model, &iter))
+  {
+    do {
+      gtk_tree_model_get (model, &iter,
+                          COLUMN_SELECTION, &selection,
+                          -1);
+      if (selection)
+        count++;
+    } while (gtk_tree_model_iter_next (model, &iter));
+  }
+
+  if (!count)
+    return NULL;
+
+  files_iter = files = g_new(gchar *, count+1);
+
+  if (gtk_tree_model_get_iter_first (model, &iter))
+  {
+    do {
+      gtk_tree_model_get (model, &iter,
+                          COLUMN_SELECTION, &selection,
+                          -1);
+      if (selection)
+      {
+        gtk_tree_model_get (model, &iter,
+                            COLUMN_PATH, files_iter,
+                            -1);
+        files_iter++;
+      }
+    } while (gtk_tree_model_iter_next (model, &iter));
+  }
+
+  *files_iter = NULL;
+
+  return files;
+}
+
+static void tsh_file_selection_status_func2(void *baton, const char *path, svn_wc_status2_t *status)
+{
+	TshFileSelectionDialog *dialog = TSH_FILE_SELECTION_DIALOG (baton);
+
+  if (dialog->flags & (status->entry?(TSH_FILE_SELECTION_FLAG_MODIFIED|TSH_FILE_SELECTION_FLAG_UNCHANGED|TSH_FILE_SELECTION_FLAG_IGNORED):TSH_FILE_SELECTION_FLAG_UNVERSIONED))
+  {
+    GtkTreeModel *model;
+    GtkTreeIter iter;
+
+    model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->tree_view));
+
+    gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+    gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+                        COLUMN_PATH, path,
+                        COLUMN_TEXT_STAT, tsh_status_to_string(status->text_status),
+                        COLUMN_PROP_STAT, tsh_status_to_string(status->prop_status),
+                        COLUMN_SELECTION, TRUE,
+                        -1);
+  }
+}
+
+static void selection_cell_toggled (GtkCellRendererToggle *renderer, gchar *path, gpointer user_data)
+{
+	TshFileSelectionDialog *dialog = TSH_FILE_SELECTION_DIALOG (user_data);
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  gboolean selection;
+
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->tree_view));
+
+  gtk_tree_model_get_iter_from_string (model, &iter, path);
+
+  gtk_tree_model_get (model, &iter,
+                      COLUMN_SELECTION, &selection,
+                      -1);
+  gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+                      COLUMN_SELECTION, !selection,
+                      -1);
+
+  gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (dialog->all), TRUE);
+}
+
+static void selection_all_toggled (GtkToggleButton *button, gpointer user_data)
+{
+	TshFileSelectionDialog *dialog = TSH_FILE_SELECTION_DIALOG (user_data);
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  gboolean selection;
+
+  gtk_toggle_button_set_inconsistent (button, FALSE);
+  
+  selection = gtk_toggle_button_get_active (button);
+
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->tree_view));
+
+  if (gtk_tree_model_get_iter_first (model, &iter))
+  {
+    do {
+      gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+                          COLUMN_SELECTION, selection,
+                          -1);
+    } while (gtk_tree_model_iter_next (model, &iter));
+  }
+}
+

Added: thunar-svn-plugin/trunk/tsp-svn-helper/tsh-file-selection-dialog.h
===================================================================
--- thunar-svn-plugin/trunk/tsp-svn-helper/tsh-file-selection-dialog.h	                        (rev 0)
+++ thunar-svn-plugin/trunk/tsp-svn-helper/tsh-file-selection-dialog.h	2008-03-07 23:17:09 UTC (rev 4025)
@@ -0,0 +1,59 @@
+/*-
+ * Copyright (c) 2006 Peter de Ridder <peter at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __TSH_FILE_SELECTION_DIALOG_H__
+#define __TSH_FILE_SELECTION_DIALOG_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS;
+
+typedef enum {
+  TSH_FILE_SELECTION_FLAG_RECURSIVE   = 1<<0,
+  TSH_FILE_SELECTION_FLAG_MODIFIED    = 1<<1,
+  TSH_FILE_SELECTION_FLAG_UNVERSIONED = 1<<2,
+  TSH_FILE_SELECTION_FLAG_UNCHANGED   = 1<<3,
+  TSH_FILE_SELECTION_FLAG_IGNORED     = 1<<4
+} TshFileSelectionFlags;
+
+typedef struct _TshFileSelectionDialogClass TshFileSelectionDialogClass;
+typedef struct _TshFileSelectionDialog      TshFileSelectionDialog;
+
+#define TSH_TYPE_FILE_SELECTION_DIALOG            (tsh_file_selection_dialog_get_type ())
+#define TSH_FILE_SELECTION_DIALOG(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), TSH_TYPE_FILE_SELECTION_DIALOG, TshFileSelectionDialog))
+#define TSH_FILE_SELECTION_DIALOG_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), TSH_TYPE_FILE_SELECTION_DIALOG, TshFileSelectionDialogClass))
+#define TSH_IS_FILE_SELECTION_DIALOG(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TSH_TYPE_FILE_SELECTION_DIALOG))
+#define TSH_IS_FILE_SELECTION_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TSH_TYPE_FILE_SELECTION_DIALOG))
+#define TSH_FILE_SELECTION_DIALOG_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), TSH_TYPE_FILE_SELECTION_DIALOG, TshFileSelectionDialogClass))
+
+GType      tsh_file_selection_dialog_get_type   (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+GtkWidget* tsh_file_selection_dialog_new        (const gchar *title,
+                                                 GtkWindow *parent,
+                                                 GtkDialogFlags flags,
+                                                 gchar **files,
+                                                 TshFileSelectionFlags selection_flags,
+                                                 svn_client_ctx_t *ctx,
+                                                 apr_pool_t *pool) G_GNUC_MALLOC G_GNUC_INTERNAL;
+
+gchar**    tsh_file_selection_dialog_get_files  (TshFileSelectionDialog *dialog);
+
+G_END_DECLS;
+
+#endif /* !__TSH_FILE_SELECTION_DIALOG_H__ */

Modified: thunar-svn-plugin/trunk/tsp-svn-helper/tsh-revert.c
===================================================================
--- thunar-svn-plugin/trunk/tsp-svn-helper/tsh-revert.c	2008-03-07 05:48:33 UTC (rev 4024)
+++ thunar-svn-plugin/trunk/tsp-svn-helper/tsh-revert.c	2008-03-07 23:17:09 UTC (rev 4025)
@@ -32,6 +32,7 @@
 
 #include "tsh-common.h"
 #include "tsh-dialog-common.h"
+#include "tsh-file-selection-dialog.h"
 #include "tsh-notify-dialog.h"
 
 #include "tsh-revert.h"
@@ -106,6 +107,19 @@
 	GtkWidget *dialog;
 	struct thread_args *args;
 
+  dialog = tsh_file_selection_dialog_new (_("Revert"), NULL, 0, files, TSH_FILE_SELECTION_FLAG_RECURSIVE|TSH_FILE_SELECTION_FLAG_MODIFIED, ctx, pool);
+	if(gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK)
+  {
+    gtk_widget_destroy (dialog);
+    return NULL;
+  }
+  g_strfreev (files);
+  files = tsh_file_selection_dialog_get_files (TSH_FILE_SELECTION_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+
+  if(!files)
+    return NULL;
+
 	dialog = tsh_notify_dialog_new (_("Revert"), NULL, 0);
   g_signal_connect(dialog, "cancel-clicked", tsh_cancel, NULL);
 	tsh_dialog_start (GTK_DIALOG (dialog), TRUE);

Modified: thunar-svn-plugin/trunk/tsp-svn-helper/tsh-status-dialog.c
===================================================================
--- thunar-svn-plugin/trunk/tsp-svn-helper/tsh-status-dialog.c	2008-03-07 05:48:33 UTC (rev 4024)
+++ thunar-svn-plugin/trunk/tsp-svn-helper/tsh-status-dialog.c	2008-03-07 23:17:09 UTC (rev 4025)
@@ -109,7 +109,7 @@
 	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
 	dialog->tree_view = tree_view = gtk_tree_view_new ();
-	
+
 	renderer = gtk_cell_renderer_text_new ();
 	gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
 	                                             -1, _("Path"),




More information about the Goodies-commits mailing list