[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