[Goodies-commits] r2558 - thunar-svn-plugin/trunk/thunar-svn-plugin

Peter de Ridder peter at xfce.org
Sat Mar 17 22:07:25 CET 2007


Author: peter
Date: 2007-03-17 21:07:25 +0000 (Sat, 17 Mar 2007)
New Revision: 2558

Modified:
   thunar-svn-plugin/trunk/thunar-svn-plugin/tsp-provider.c
   thunar-svn-plugin/trunk/thunar-svn-plugin/tsp-svn-action.c
   thunar-svn-plugin/trunk/thunar-svn-plugin/tsp-svn-action.h
Log:
The svn sub menu shows the options based on the selection


Modified: thunar-svn-plugin/trunk/thunar-svn-plugin/tsp-provider.c
===================================================================
--- thunar-svn-plugin/trunk/thunar-svn-plugin/tsp-provider.c	2007-03-17 16:16:57 UTC (rev 2557)
+++ thunar-svn-plugin/trunk/thunar-svn-plugin/tsp-provider.c	2007-03-17 21:07:25 UTC (rev 2558)
@@ -227,6 +227,8 @@
   gboolean            parent_wc = FALSE;
 	gboolean            one_is_wc = FALSE;
 	gboolean            one_is_not_wc = FALSE;
+	gboolean            one_is_directory = FALSE;
+	gboolean            one_is_file = FALSE;
   GtkAction          *action;
   GList              *actions = NULL;
   GList              *lp;
@@ -248,15 +250,23 @@
 		if (!parent_wc && tsp_is_parent_working_copy (lp->data))
 			parent_wc = TRUE;
 
-		if (tsp_is_working_copy (lp->data))
+		if (thunarx_file_info_is_directory (lp->data))
 		{
-			one_is_wc = TRUE;
-			g_object_set_data(lp->data, TSP_SVN_WORKING_COPY, GINT_TO_POINTER(TRUE));
+			one_is_directory = TRUE;
+			if (tsp_is_working_copy (lp->data))
+			{
+				one_is_wc = TRUE;
+				//g_object_set_data(lp->data, TSP_SVN_WORKING_COPY, GINT_TO_POINTER(TRUE));
+			}
+			else
+			{
+				one_is_not_wc = TRUE;
+				//g_object_set_data(lp->data, TSP_SVN_WORKING_COPY, GINT_TO_POINTER(FALSE));
+			}
 		}
 		else
 		{
-			one_is_not_wc = TRUE;
-			g_object_set_data(lp->data, TSP_SVN_WORKING_COPY, GINT_TO_POINTER(FALSE));
+			one_is_file = TRUE;
 		}
 	}
 
@@ -274,7 +284,7 @@
 	if (parent_wc || one_is_wc)
 	{
 		/* append the svn submenu action */
-		action = tsp_svn_action_new ("Tsp::svn", _("SVN"));
+		action = tsp_svn_action_new ("Tsp::svn", _("SVN"), FALSE, one_is_directory, one_is_file, parent_wc, one_is_wc, one_is_not_wc);
 		actions = g_list_append (actions, action);
 	}
 
@@ -307,7 +317,7 @@
 	if (tsp_is_working_copy (folder))
 	{
 		/* append the svn submenu action */
-		action = tsp_svn_action_new ("Tsp::svn", _("SVN"));
+		action = tsp_svn_action_new ("Tsp::svn", _("SVN"), TRUE, FALSE, FALSE, TRUE, FALSE, FALSE);
 		actions = g_list_append (actions, action);
 	}
 	else

Modified: thunar-svn-plugin/trunk/thunar-svn-plugin/tsp-svn-action.c
===================================================================
--- thunar-svn-plugin/trunk/thunar-svn-plugin/tsp-svn-action.c	2007-03-17 16:16:57 UTC (rev 2557)
+++ thunar-svn-plugin/trunk/thunar-svn-plugin/tsp-svn-action.c	2007-03-17 21:07:25 UTC (rev 2558)
@@ -37,14 +37,38 @@
 struct _TspSvnAction
 {
 	GtkAction __parent__;
+
+	struct {
+		unsigned is_parent : 1;
+		unsigned is_directory : 1;
+		unsigned is_file : 1;
+		unsigned parent_version_control : 1;
+		unsigned version_control : 1;
+		unsigned no_version_control : 1;
+	} property;
 };
 
 
 
+enum {
+	PROPERTY_IS_PARENT = 1,
+	PROPERTY_IS_DIRECTORY,
+	PROPERTY_IS_FILE,
+	PROPERTY_PARENT_VERSION_CONTROL,
+	PROPERTY_VERSION_CONTROL,
+	PROPERTY_NO_VERSION_CONTROL
+};
+
+
+
 static GtkWidget *tsp_svn_action_create_menu_item (GtkAction *action);
 
 
 
+static void tsp_svn_action_set_property (GObject*, guint, const GValue*, GParamSpec*);
+
+
+
 G_DEFINE_TYPE (TspSvnAction, tsp_svn_action, GTK_TYPE_ACTION)
 
 
@@ -52,9 +76,30 @@
 static void
 tsp_svn_action_class_init (TspSvnActionClass *klass)
 {
+	GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 	GtkActionClass *gtkaction_class = GTK_ACTION_CLASS (klass);
 
+	gobject_class->set_property = tsp_svn_action_set_property;
+
 	gtkaction_class->create_menu_item = tsp_svn_action_create_menu_item;
+
+	g_object_class_install_property (gobject_class, PROPERTY_IS_PARENT,
+		g_param_spec_boolean ("is-parent", "", "", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+
+	g_object_class_install_property (gobject_class, PROPERTY_IS_DIRECTORY,
+		g_param_spec_boolean ("is-directory", "", "", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+
+	g_object_class_install_property (gobject_class, PROPERTY_IS_FILE,
+		g_param_spec_boolean ("is-file", "", "", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+
+	g_object_class_install_property (gobject_class, PROPERTY_PARENT_VERSION_CONTROL,
+		g_param_spec_boolean ("parent-version-control", "", "", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+
+	g_object_class_install_property (gobject_class, PROPERTY_VERSION_CONTROL,
+		g_param_spec_boolean ("version-control", "", "", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+
+	g_object_class_install_property (gobject_class, PROPERTY_NO_VERSION_CONTROL,
+		g_param_spec_boolean ("no-version-control", "", "", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
 }
 
 
@@ -62,13 +107,25 @@
 static void
 tsp_svn_action_init (TspSvnAction *self)
 {
+	self->property.is_parent = 0;
+	self->property.is_directory = 0;
+	self->property.is_file = 0;
+	self->property.parent_version_control = 0;
+	self->property.version_control = 0;
+	self->property.no_version_control = 0;
 }
 
 
 
 GtkAction *
 tsp_svn_action_new (const gchar *name,
-                    const gchar *label)
+                    const gchar *label,
+										gboolean is_parent,
+										gboolean is_directory,
+										gboolean is_file,
+										gboolean parent_version_control,
+										gboolean version_control,
+										gboolean no_version_control)
 {
 	g_return_val_if_fail(name, NULL);
 	g_return_val_if_fail(label, NULL);
@@ -77,30 +134,70 @@
 	                     "hide-if-empty", FALSE,
 											 "name", name,
 											 "label", label,
+											 "is-parent", is_parent,
+											 "is-directory", is_directory,
+											 "is-file", is_file,
+											 "parent-version-control", parent_version_control,
+											 "version-control", version_control,
+											 "no-version-control", no_version_control,
 											 NULL);
 }
 
 
 
+static void
+tsp_svn_action_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
+{
+	switch (property_id)
+	{
+		case PROPERTY_IS_PARENT:
+			TSP_SVN_ACTION (object)->property.is_parent = g_value_get_boolean (value)?1:0;
+		break;
+		case PROPERTY_IS_DIRECTORY:
+			TSP_SVN_ACTION (object)->property.is_directory = g_value_get_boolean (value)?1:0;
+		break;
+		case PROPERTY_IS_FILE:
+			TSP_SVN_ACTION (object)->property.is_file = g_value_get_boolean (value)?1:0;
+		break;
+		case PROPERTY_PARENT_VERSION_CONTROL:
+			TSP_SVN_ACTION (object)->property.parent_version_control = g_value_get_boolean (value)?1:0;
+		break;
+		case PROPERTY_VERSION_CONTROL:
+			TSP_SVN_ACTION (object)->property.version_control = g_value_get_boolean (value)?1:0;
+		break;
+		case PROPERTY_NO_VERSION_CONTROL:
+			TSP_SVN_ACTION (object)->property.no_version_control = g_value_get_boolean (value)?1:0;
+		break;
+	}
+}
+
+
 static GtkWidget *
 tsp_svn_action_create_menu_item (GtkAction *action)
 {
 	GtkWidget *item;
 	GtkWidget *menu;
 	GtkWidget *subitem;
+	TspSvnAction *tsp_action = TSP_SVN_ACTION (action);
 
 	item = GTK_ACTION_CLASS(tsp_svn_action_parent_class)->create_menu_item (action);
 
 	menu = gtk_menu_new ();
 	gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
 	/* No version control */
-	subitem = gtk_menu_item_new_with_label (_("Add"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control && tsp_action->property.no_version_control && !tsp_action->property.is_parent) 
+	{
+		subitem = gtk_menu_item_new_with_label (_("Add"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 	/* Version control (file) */
-	subitem = gtk_menu_item_new_with_label (_("Blame"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control && tsp_action->property.version_control && tsp_action->property.is_file) 
+	{
+		subitem = gtk_menu_item_new_with_label (_("Blame"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 /* No need
 	subitem = gtk_menu_item_new_with_label (_("Cat"));
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
@@ -110,49 +207,73 @@
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
 	gtk_widget_show(subitem);
 *//* Version control (parent) */
-	subitem = gtk_menu_item_new_with_label (_("Cleanup"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control && tsp_action->property.is_parent) 
+	{
+		subitem = gtk_menu_item_new_with_label (_("Cleanup"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 	/* Version control (all) */
-	subitem = gtk_menu_item_new_with_label (_("Commit"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control || (tsp_action->property.version_control && !tsp_action->property.is_parent) )
+	{
+		subitem = gtk_menu_item_new_with_label (_("Commit"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 /* Ehmm ...
 	subitem = gtk_menu_item_new_with_label (_("Copy"));
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
 	gtk_widget_show(subitem);
 *//* Version control (no parent) */
-	subitem = gtk_menu_item_new_with_label (_("Delete"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control && tsp_action->property.version_control && !tsp_action->property.is_parent) 
+	{
+		subitem = gtk_menu_item_new_with_label (_("Delete"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 	/* Version control (file) */
-	subitem = gtk_menu_item_new_with_label (_("Diff"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control && tsp_action->property.version_control && tsp_action->property.is_file) 
+	{
+		subitem = gtk_menu_item_new_with_label (_("Diff"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 	/* Version control */
-	subitem = gtk_menu_item_new_with_label (_("Export"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control || (tsp_action->property.version_control && !tsp_action->property.is_parent))
+	{
+		subitem = gtk_menu_item_new_with_label (_("Export"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 /* Not here
 	subitem = gtk_menu_item_new_with_label (_("Import"));
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
 	gtk_widget_show(subitem);
 *//* Version control (all) */
-	subitem = gtk_menu_item_new_with_label (_("Info"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control || (tsp_action->property.version_control && tsp_action->property.is_parent))
+	{
+		subitem = gtk_menu_item_new_with_label (_("Info"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 /* Ehmm...
 	subitem = gtk_menu_item_new_with_label (_("List"));
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
 	gtk_widget_show(subitem);
 *//* Version control (all) */
-	subitem = gtk_menu_item_new_with_label (_("Lock"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control || (tsp_action->property.version_control && tsp_action->property.is_parent))
+	{
+		subitem = gtk_menu_item_new_with_label (_("Lock"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 	/* Version control (all) */
-	subitem = gtk_menu_item_new_with_label (_("Log"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control || (tsp_action->property.version_control && tsp_action->property.is_parent))
+	{
+		subitem = gtk_menu_item_new_with_label (_("Log"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 /* Ehmm ...
 	subitem = gtk_menu_item_new_with_label (_("Merge"));
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
@@ -172,36 +293,56 @@
 	subitem = gtk_menu_item_new_with_label (_("List Properties"));
 	subitem = gtk_menu_item_new_with_label (_("Set Properties"));
 *//* Version control */
-	subitem = gtk_menu_item_new_with_label (_("Edit Properties"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
-
+	if (tsp_action->property.parent_version_control || (tsp_action->property.version_control && tsp_action->property.is_parent))
+	{
+		subitem = gtk_menu_item_new_with_label (_("Edit Properties"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 /* Changed
 	subitem = gtk_menu_item_new_with_label (_("Mark Resolved"));
 *//* Version control (file) */
-	subitem = gtk_menu_item_new_with_label (_("Resolve"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control && tsp_action->property.version_control && tsp_action->property.is_file)
+	{
+		subitem = gtk_menu_item_new_with_label (_("Resolve"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 	/* Version control (all) */
-	subitem = gtk_menu_item_new_with_label (_("Revert"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control || (tsp_action->property.version_control && tsp_action->property.is_parent))
+	{
+		subitem = gtk_menu_item_new_with_label (_("Revert"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 	/* Version control (all) */
-	subitem = gtk_menu_item_new_with_label (_("Status"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control || (tsp_action->property.version_control && tsp_action->property.is_parent))
+	{
+		subitem = gtk_menu_item_new_with_label (_("Status"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 	/* Version control (parent) */
-	subitem = gtk_menu_item_new_with_label (_("Switch"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.version_control && tsp_action->property.is_parent)
+	{
+		subitem = gtk_menu_item_new_with_label (_("Switch"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 	/* Version control (all) */
-	subitem = gtk_menu_item_new_with_label (_("Unlock"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control || (tsp_action->property.version_control && tsp_action->property.is_parent))
+	{
+		subitem = gtk_menu_item_new_with_label (_("Unlock"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 	/* Version control (all) */
-	subitem = gtk_menu_item_new_with_label (_("Update"));
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
-	gtk_widget_show(subitem);
+	if (tsp_action->property.parent_version_control || (tsp_action->property.version_control && tsp_action->property.is_parent))
+	{
+		subitem = gtk_menu_item_new_with_label (_("Update"));
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), subitem);
+		gtk_widget_show(subitem);
+	}
 
 	return item;
 }

Modified: thunar-svn-plugin/trunk/thunar-svn-plugin/tsp-svn-action.h
===================================================================
--- thunar-svn-plugin/trunk/thunar-svn-plugin/tsp-svn-action.h	2007-03-17 16:16:57 UTC (rev 2557)
+++ thunar-svn-plugin/trunk/thunar-svn-plugin/tsp-svn-action.h	2007-03-17 21:07:25 UTC (rev 2558)
@@ -36,8 +36,14 @@
 
 GType      tsp_svn_action_get_type (void) G_GNUC_CONST G_GNUC_INTERNAL;
 
-GtkAction *tsp_svn_action_new      (const gchar *name,
-                                    const gchar *label) G_GNUC_MALLOC G_GNUC_INTERNAL;
+GtkAction *tsp_svn_action_new      (const gchar*,
+                                    const gchar*,
+																		gboolean,
+																		gboolean,
+																		gboolean,
+																		gboolean,
+																		gboolean,
+																		gboolean) G_GNUC_MALLOC G_GNUC_INTERNAL;
 
 G_END_DECLS;
 




More information about the Goodies-commits mailing list