diff options
Diffstat (limited to 'libnautilus-private/nautilus-undo-manager.c')
-rw-r--r-- | libnautilus-private/nautilus-undo-manager.c | 205 |
1 files changed, 87 insertions, 118 deletions
diff --git a/libnautilus-private/nautilus-undo-manager.c b/libnautilus-private/nautilus-undo-manager.c index 245d475b5..7da62f7cd 100644 --- a/libnautilus-private/nautilus-undo-manager.c +++ b/libnautilus-private/nautilus-undo-manager.c @@ -43,54 +43,48 @@ Nautilus_Undo_Manager global_undo_manager; enum { - UNDO_TRANSACTION_OCCURED, + UNDO_TRANSACTION_OCCURRED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL]; - typedef struct { POA_Nautilus_Undo_Manager servant; - gpointer bonobo_object; - - NautilusUndoManager *gtk_object; + NautilusUndoManager *bonobo_object; } impl_POA_Nautilus_Undo_Manager; /* GtkObject */ -static void nautilus_undo_manager_initialize_class (NautilusUndoManagerClass *class); -static void nautilus_undo_manager_initialize (NautilusUndoManager *item); -static void destroy (GtkObject *object); - -static void free_undo_manager_list (GList *list); -static GList *prune_undo_manager_list (GList *list, int items); +static void nautilus_undo_manager_initialize_class (NautilusUndoManagerClass *class); +static void nautilus_undo_manager_initialize (NautilusUndoManager *item); +static void destroy (GtkObject *object); +static void free_undo_manager_list (GList *list); +static GList *prune_undo_manager_list (GList *list, + int items); /* CORBA/Bonobo */ -static void impl_Nautilus_Undo_Manager__append (impl_POA_Nautilus_Undo_Manager *servant, - const Nautilus_Undo_Transaction transaction, - CORBA_Environment *ev); -static void impl_Nautilus_Undo_Manager__forget (impl_POA_Nautilus_Undo_Manager *servant, - const Nautilus_Undo_Transaction transaction, - CORBA_Environment *ev); -static void impl_Nautilus_Undo_Manager__undo (impl_POA_Nautilus_Undo_Manager *servant, - CORBA_Environment *ev); - - -static void nautilus_undo_manager_add_transaction (NautilusUndoManager *manager, - Nautilus_Undo_Transaction transaction); -static void nautilus_undo_manager_undo (NautilusUndoManager *manager); +static void impl_Nautilus_Undo_Manager__append (PortableServer_Servant servant, + const Nautilus_Undo_Transaction transaction, + CORBA_Environment *ev); +static void impl_Nautilus_Undo_Manager__forget (PortableServer_Servant servant, + const Nautilus_Undo_Transaction transaction, + CORBA_Environment *ev); +static void impl_Nautilus_Undo_Manager__undo (PortableServer_Servant servant, + CORBA_Environment *ev); +static void nautilus_undo_manager_add_transaction (NautilusUndoManager *manager, + Nautilus_Undo_Transaction transaction); +static void nautilus_undo_manager_undo (NautilusUndoManager *manager); NAUTILUS_DEFINE_CLASS_BOILERPLATE(NautilusUndoManager, nautilus_undo_manager, BONOBO_OBJECT_TYPE) POA_Nautilus_Undo_Manager__epv libnautilus_Nautilus_Undo_Manager_epv = { NULL, /* _private */ - (gpointer) &impl_Nautilus_Undo_Manager__append, - (gpointer) &impl_Nautilus_Undo_Manager__forget, - (gpointer) &impl_Nautilus_Undo_Manager__undo, + &impl_Nautilus_Undo_Manager__append, + &impl_Nautilus_Undo_Manager__forget, + &impl_Nautilus_Undo_Manager__undo, }; -static PortableServer_ServantBase__epv base_epv = { NULL, NULL, NULL }; - +static PortableServer_ServantBase__epv base_epv; static POA_Nautilus_Undo_Manager__vepv impl_Nautilus_Undo_Manager_vepv = { &base_epv, @@ -98,17 +92,16 @@ static POA_Nautilus_Undo_Manager__vepv impl_Nautilus_Undo_Manager_vepv = &libnautilus_Nautilus_Undo_Manager_epv }; - static void -impl_Nautilus_Undo_Manager__destroy(BonoboObject *obj, impl_POA_Nautilus_Undo_Manager *servant) +impl_Nautilus_Undo_Manager__destroy (BonoboObject *obj, impl_POA_Nautilus_Undo_Manager *servant) { PortableServer_ObjectId *objid; CORBA_Environment ev; void (*servant_destroy_func) (PortableServer_Servant servant, CORBA_Environment *ev); - CORBA_exception_init(&ev); + CORBA_exception_init (&ev); - servant_destroy_func = NAUTILUS_UNDO_MANAGER_CLASS (GTK_OBJECT (servant->gtk_object)->klass)->servant_destroy_func; + servant_destroy_func = NAUTILUS_UNDO_MANAGER_CLASS (GTK_OBJECT (servant->bonobo_object)->klass)->servant_destroy_func; objid = PortableServer_POA_servant_to_id (bonobo_poa (), servant, &ev); PortableServer_POA_deactivate_object (bonobo_poa (), objid, &ev); CORBA_free (objid); @@ -116,7 +109,7 @@ impl_Nautilus_Undo_Manager__destroy(BonoboObject *obj, impl_POA_Nautilus_Undo_Ma servant_destroy_func ((PortableServer_Servant) servant, &ev); g_free (servant); - CORBA_exception_free(&ev); + CORBA_exception_free (&ev); } static Nautilus_Undo_Manager @@ -135,7 +128,7 @@ impl_Nautilus_Undo_Manager__create (NautilusUndoManager *manager, CORBA_Environm servant->servant.vepv->Bonobo_Unknown_epv = bonobo_object_get_epv (); servant_init_func ((PortableServer_Servant) servant, ev); - servant->gtk_object = manager; + servant->bonobo_object = manager; retval = bonobo_object_activate_servant (BONOBO_OBJECT (manager), servant); @@ -144,62 +137,58 @@ impl_Nautilus_Undo_Manager__create (NautilusUndoManager *manager, CORBA_Environm return retval; } - static void -impl_Nautilus_Undo_Manager__append (impl_POA_Nautilus_Undo_Manager *servant, +impl_Nautilus_Undo_Manager__append (PortableServer_Servant servant, const Nautilus_Undo_Transaction undo_transaction, CORBA_Environment *ev) { NautilusUndoManager *manager; - g_assert (NAUTILUS_IS_UNDO_MANAGER (servant->gtk_object)); - manager = NAUTILUS_UNDO_MANAGER (servant->gtk_object); + manager = ((impl_POA_Nautilus_Undo_Manager *) servant)->bonobo_object; + g_assert (NAUTILUS_IS_UNDO_MANAGER (manager)); Nautilus_Undo_Transaction_ref (undo_transaction, ev); nautilus_undo_manager_add_transaction (manager, undo_transaction); } static void -impl_Nautilus_Undo_Manager__forget (impl_POA_Nautilus_Undo_Manager *servant, +impl_Nautilus_Undo_Manager__forget (PortableServer_Servant servant, const Nautilus_Undo_Transaction transaction, CORBA_Environment *ev) { NautilusUndoManager *manager; - g_assert (NAUTILUS_IS_UNDO_MANAGER (servant->gtk_object)); - manager = NAUTILUS_UNDO_MANAGER (servant->gtk_object); + manager = ((impl_POA_Nautilus_Undo_Manager *) servant)->bonobo_object; + g_assert (NAUTILUS_IS_UNDO_MANAGER (manager)); + + /* FIXME: Need to implement this. */ } static void -impl_Nautilus_Undo_Manager__undo (impl_POA_Nautilus_Undo_Manager *servant, CORBA_Environment *ev) +impl_Nautilus_Undo_Manager__undo (PortableServer_Servant servant, + CORBA_Environment *ev) { NautilusUndoManager *manager; - g_assert (NAUTILUS_IS_UNDO_MANAGER (servant->gtk_object)); - manager = NAUTILUS_UNDO_MANAGER (servant->gtk_object); - + manager = ((impl_POA_Nautilus_Undo_Manager *) servant)->bonobo_object; + g_assert (NAUTILUS_IS_UNDO_MANAGER (manager)); + nautilus_undo_manager_undo (manager); } - -/* nautilus_undo_manager_new */ NautilusUndoManager * nautilus_undo_manager_new (void) { - NautilusUndoManager *manager; - - manager = gtk_type_new (nautilus_undo_manager_get_type ()); - - return manager; + return gtk_type_new (nautilus_undo_manager_get_type ()); } - /* Object initialization function for the NautilusUndoManager */ static void nautilus_undo_manager_initialize (NautilusUndoManager *manager) { - CORBA_Environment ev; - CORBA_exception_init(&ev); + CORBA_Environment ev; + + CORBA_exception_init (&ev); manager->details = g_new0 (NautilusUndoManagerDetails, 1); @@ -214,8 +203,8 @@ nautilus_undo_manager_initialize (NautilusUndoManager *manager) manager->details->queue_depth = 1; bonobo_object_construct (BONOBO_OBJECT (manager), impl_Nautilus_Undo_Manager__create (manager, &ev)); - - CORBA_exception_free(&ev); + + CORBA_exception_free (&ev); } @@ -234,7 +223,7 @@ nautilus_undo_manager_initialize_class (NautilusUndoManagerClass *klass) klass->vepv = &impl_Nautilus_Undo_Manager_vepv; /* Setup signals */ - signals[UNDO_TRANSACTION_OCCURED] + signals[UNDO_TRANSACTION_OCCURRED] = gtk_signal_new ("undo_transaction_occurred", GTK_RUN_LAST, object_class->type, @@ -246,8 +235,6 @@ nautilus_undo_manager_initialize_class (NautilusUndoManagerClass *klass) gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); } - -/* nautilus_undo_manager_undo_last_transaction */ static void nautilus_undo_manager_undo (NautilusUndoManager *manager) { @@ -255,7 +242,7 @@ nautilus_undo_manager_undo (NautilusUndoManager *manager) CORBA_Object undo_transaction; CORBA_Environment ev; - CORBA_exception_init(&ev); + CORBA_exception_init (&ev); /* Verify we have a transaction to be undone */ if (manager->details->undo_list == NULL) { @@ -282,22 +269,22 @@ nautilus_undo_manager_undo (NautilusUndoManager *manager) } /* Fire off signal informing that an undo transaction has occurred */ - gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]); + gtk_signal_emit (GTK_OBJECT (manager), + signals[UNDO_TRANSACTION_OCCURRED]); - CORBA_exception_free(&ev); + CORBA_exception_free (&ev); } #if 0 -/* nautilus_undo_manager_redo_last_undone_transaction */ -static void +static void nautilus_undo_manager_redo (NautilusUndoManager *manager) -{ +{ GList *list; CORBA_Object redo_transaction; CORBA_Object undo_transaction; CORBA_Environment ev; - CORBA_exception_init(&ev); + CORBA_exception_init (&ev); /* Are we allowing redo operations? */ if (manager->details->enable_redo) { @@ -323,21 +310,21 @@ nautilus_undo_manager_redo (NautilusUndoManager *manager) Nautilus_Undo_Transaction_ref (undo_transaction, &ev); nautilus_undo_manager_add_transaction (manager, undo_transaction); - CORBA_exception_free(&ev); + CORBA_exception_free (&ev); } #endif -/* nautilus_undo_manager_add_undo_transaction */ static void -nautilus_undo_manager_add_transaction (NautilusUndoManager *manager, Nautilus_Undo_Transaction transaction) +nautilus_undo_manager_add_transaction (NautilusUndoManager *manager, + Nautilus_Undo_Transaction transaction) { int length; - g_return_if_fail (transaction != NULL); - + g_return_if_fail (NAUTILUS_IS_UNDO_MANAGER (manager)); + g_return_if_fail (transaction != CORBA_OBJECT_NIL); + /* Check and see if we are over our queue limit */ length = g_list_length (manager->details->undo_list); - if (length >= manager->details->queue_depth) { manager->details->undo_list = prune_undo_manager_list (manager->details->undo_list, @@ -348,7 +335,8 @@ nautilus_undo_manager_add_transaction (NautilusUndoManager *manager, Nautilus_Un manager->details->undo_list = g_list_append (manager->details->undo_list, transaction); /* Fire off signal informing that an undo transaction has occurred */ - gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]); + gtk_signal_emit (GTK_OBJECT (manager), + signals[UNDO_TRANSACTION_OCCURRED]); } /* nautilus_undo_manager_unregister_object @@ -356,7 +344,6 @@ nautilus_undo_manager_add_transaction (NautilusUndoManager *manager, Nautilus_Un * Remove any transaction with object as target from * the undo and redo queues */ - gboolean nautilus_undo_manager_unregister_object (GtkObject *object) { @@ -366,10 +353,10 @@ nautilus_undo_manager_unregister_object (GtkObject *object) GList *list; int index, length; Nautilus_Undo_Transaction transaction; -*/ CORBA_Environment ev; - CORBA_exception_init(&ev); + CORBA_exception_init (&ev); +*/ /* FIXME: We can't get a pointer to the actual undo manager, so this * needs to work through the CORBA interface to the undo manager. @@ -424,46 +411,33 @@ nautilus_undo_manager_unregister_object (GtkObject *object) if (success) { /* Fire off signal informing that a transaction has occurred */ - gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]); + gtk_signal_emit (GTK_OBJECT (manager), + signals[UNDO_TRANSACTION_OCCURRED]); } return success; } -/* nautilus_undo_manager_can_undo */ -gboolean +gboolean nautilus_undo_manager_can_undo (NautilusUndoManager *manager) { - if (manager != NULL) { - return (g_list_length (manager->details->undo_list) > 0); - } else { - return FALSE; - } + return manager != NULL + && manager->details->undo_list != NULL; } -/* nautilus_undo_manager_can_redo */ -gboolean +gboolean nautilus_undo_manager_can_redo (NautilusUndoManager *manager) { - if (manager->details->enable_redo) { - if (manager != NULL) { - return (g_list_length (manager->details->redo_list) > 0); - } else { - return FALSE; - } - } else { - return FALSE; - } + return manager != NULL + && manager->details->enable_redo + && manager->details->redo_list != NULL; } -/* destroy */ static void destroy (GtkObject *object) { NautilusUndoManager *manager; - g_return_if_fail (NAUTILUS_IS_UNDO_MANAGER (object)); - manager = NAUTILUS_UNDO_MANAGER (object); /* Clear lists */ @@ -477,40 +451,34 @@ destroy (GtkObject *object) * * Enable or disable redo functionality */ - void nautilus_undo_manager_enable_redo (NautilusUndoManager *manager, gboolean value) { - g_return_if_fail (manager != NULL); + g_return_if_fail (NAUTILUS_IS_UNDO_MANAGER (manager)); + g_return_if_fail (value == FALSE || value == TRUE); manager->details->enable_redo = value; /* Flush and free redo queue */ - g_list_free (manager->details->redo_list); + free_undo_manager_list (manager->details->redo_list); + manager->details->redo_list = NULL; } -/* nautilus_undo_manager_enable_redo - * - * Enable or disable redo functionality - */ void nautilus_undo_manager_set_queue_depth (NautilusUndoManager *manager, int depth) { int length; - /* Don't allow negative or zero queue depth */ - if (depth <= 0) { - g_warning ("NautilusUndoManager doesn not allow negative or zero length queue."); - return; - } + g_return_if_fail (NAUTILUS_IS_UNDO_MANAGER (manager)); + g_return_if_fail (depth > 0); manager->details->queue_depth = depth; - + /* Prune lists */ length = g_list_length (manager->details->undo_list); if (length > depth) { manager->details->undo_list = prune_undo_manager_list (manager->details->undo_list, - length - depth); + length - depth); } length = g_list_length (manager->details->redo_list); if (length > depth) { @@ -519,7 +487,8 @@ nautilus_undo_manager_set_queue_depth (NautilusUndoManager *manager, int depth) } /* Fire off signal informing that an undo transaction has occurred */ - gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]); + gtk_signal_emit (GTK_OBJECT (manager), + signals[UNDO_TRANSACTION_OCCURRED]); } /* free_undo_manager_list @@ -533,13 +502,13 @@ free_undo_manager_list (GList *list) Nautilus_Undo_Transaction transaction; CORBA_Environment ev; - CORBA_exception_init(&ev); + CORBA_exception_init (&ev); for (p = list; p != NULL; p = p->next) { transaction = p->data; Nautilus_Undo_Transaction_unref (transaction, &ev); } - CORBA_exception_free(&ev); + CORBA_exception_free (&ev); g_list_free (list); } @@ -665,7 +634,7 @@ nautilus_share_undo_manager (GtkObject *destination_object, nautilus_get_undo_manager (source_object)); } -/* Locates an undo manger for this bonobo control. +/* Locates an undo manager for this bonobo control. * The undo manager is supplied by an interface on * the control frame. The put that undo manager on * the Bonobo control's widget. |