evolution r34968 - in branches/mbarnes-composer: composer plugins/exchange-operations ui



Author: mbarnes
Date: Thu Feb  7 01:58:16 2008
New Revision: 34968
URL: http://svn.gnome.org/viewvc/evolution?rev=34968&view=rev

Log:
Kill evolution-composer-entries.xml.  One down...

Override the HTML editor's Cut / Copy / Paste / Select All methods
way more elegantly now with Bonobo crud out of the way.


Removed:
   branches/mbarnes-composer/ui/evolution-composer-entries.xml
Modified:
   branches/mbarnes-composer/composer/e-msg-composer.c
   branches/mbarnes-composer/plugins/exchange-operations/Makefile.am
   branches/mbarnes-composer/ui/Makefile.am

Modified: branches/mbarnes-composer/composer/e-msg-composer.c
==============================================================================
--- branches/mbarnes-composer/composer/e-msg-composer.c	(original)
+++ branches/mbarnes-composer/composer/e-msg-composer.c	Thu Feb  7 01:58:16 2008
@@ -1646,54 +1646,6 @@
 }
 
 static void
-menu_edit_cut_cb (BonoboUIComponent *uic, gpointer data, const char *path)
-{
-	EMsgComposer *composer = data;
-	EMsgComposerPrivate *p = composer->priv;
-
-	g_return_if_fail (p->focused_entry != NULL);
-
-	if (GTK_IS_ENTRY (p->focused_entry)) {
-		gtk_editable_cut_clipboard (GTK_EDITABLE (p->focused_entry));
-	} else {
-		/* happy happy joy joy, an EEntry. */
-		g_return_if_reached ();
-	}
-}
-
-static void
-menu_edit_copy_cb (BonoboUIComponent *uic, gpointer data, const char *path)
-{
-	EMsgComposer *composer = data;
-	EMsgComposerPrivate *p = composer->priv;
-
-	g_return_if_fail (p->focused_entry != NULL);
-
-	if (GTK_IS_ENTRY (p->focused_entry)) {
-		gtk_editable_copy_clipboard (GTK_EDITABLE (p->focused_entry));
-	} else {
-		/* happy happy joy joy, an EEntry. */
-		g_return_if_reached ();
-	}
-}
-
-static void
-menu_edit_paste_cb (BonoboUIComponent *uic, gpointer data, const char *path)
-{
-	EMsgComposer *composer = data;
-	EMsgComposerPrivate *p = composer->priv;
-
-	g_return_if_fail (p->focused_entry != NULL);
-
-	if (GTK_IS_ENTRY (p->focused_entry)) {
-		gtk_editable_paste_clipboard (GTK_EDITABLE (p->focused_entry));
-	} else {
-		/* happy happy joy joy, an EEntry. */
-		g_return_if_reached ();
-	}
-}
-
-static void
 menu_send_options_cb (BonoboUIComponent *component, gpointer data, const char *path)
 {
 	EMEvent *e = em_event_peek ();
@@ -1709,23 +1661,6 @@
 }
 
 static void
-menu_edit_select_all_cb (BonoboUIComponent *uic, gpointer data, const char *path)
-{
-	EMsgComposer *composer = data;
-	EMsgComposerPrivate *p = composer->priv;
-
-	g_return_if_fail (p->focused_entry != NULL);
-
-	if (GTK_IS_ENTRY (p->focused_entry)) {
-		gtk_editable_set_position (GTK_EDITABLE (p->focused_entry), -1);
-		gtk_editable_select_region (GTK_EDITABLE (p->focused_entry), 0, -1);
-	} else {
-		/* happy happy joy joy, an EEntry. */
-		g_return_if_reached ();
-	}
-}
-
-static void
 menu_edit_delete_all_cb (BonoboUIComponent *uic, gpointer data, const char *path)
 {
 #if 0  /* GTKHTML-EDITOR */
@@ -2028,10 +1963,6 @@
 
 	bonobo_ui_component_thaw (p->uic, NULL);
 
-	/* Create the UIComponent for the non-control entries */
-
-	p->entry_uic = bonobo_ui_component_new_default ();
-
 	/* Setup main menu plugin mechanism */
 	target = em_menu_target_new_widget (p->menu, (GtkWidget *)composer);
 	e_menu_update_target ((EMenu *)p->menu, target);
@@ -2237,143 +2168,6 @@
 }
 
 
-/* GObject methods.  */
-
-static void
-msg_composer_finalize (GObject *object)
-{
-	EMsgComposer *composer = E_MSG_COMPOSER (object);
-	EMsgComposerPrivate *p = composer->priv;
-
-	if (p->extra_hdr_names) {
-		gint i;
-
-		for (i = 0; i < p->extra_hdr_names->len; i++) {
-			g_free (p->extra_hdr_names->pdata[i]);
-			g_free (p->extra_hdr_values->pdata[i]);
-		}
-		g_ptr_array_free (p->extra_hdr_names, TRUE);
-		g_ptr_array_free (p->extra_hdr_values, TRUE);
-	}
-
-	g_hash_table_destroy (p->inline_images);
-	g_hash_table_destroy (p->inline_images_by_url);
-
-	g_free (p->charset);
-	g_free (p->mime_type);
-	g_free (p->mime_body);
-
-	if (p->redirect)
-		camel_object_unref (p->redirect);
-
-	/* Chain up to parent's finalize () method. */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-msg_composer_dispose (GObject *object)
-{
-	/* When destroy () is called, the contents of the window
-	 * (including the remote editor control) will already have
-	 * been destroyed, so we have to do this here.
-	 */
-	autosave_manager_unregister (E_MSG_COMPOSER (object));
-
-	/* Chain up to parent's dispose () method. */
-	G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-/* GtkObject methods */
-static void
-msg_composer_destroy (GtkObject *object)
-{
-	EMsgComposer *composer = (EMsgComposer *)object;
-	EMsgComposerPrivate *p = composer->priv;
-	CORBA_Environment ev;
-
-	CORBA_exception_init (&ev);
-
-#if 0 /* GTKHTML-EDITOR */
-	if (p->menu) {
-		e_menu_update_target ((EMenu *)p->menu, NULL);
-		g_object_unref (p->menu);
-		p->menu = NULL;
-	}
-#endif
-
-	if (p->load) {
-		gtk_widget_destroy (p->load);
-		p->load = NULL;
-	}
-
-	if (p->saveas) {
-		gtk_widget_destroy (p->saveas);
-		p->saveas = NULL;
-	}
-
-#if 0 /* GTKHTML-EDITOR */
-	if (p->uic) {
-		bonobo_object_unref (BONOBO_OBJECT (p->uic));
-		p->uic = NULL;
-	}
-
-	if (p->entry_uic) {
-		bonobo_object_unref (BONOBO_OBJECT (p->entry_uic));
-		p->entry_uic = NULL;
-	}
-#endif
-
-	/* FIXME?  I assume the Bonobo widget will get destroyed
-	   normally?  */
-	if (p->address_dialog != NULL) {
-		gtk_widget_destroy (p->address_dialog);
-		p->address_dialog = NULL;
-	}
-
-	if (p->header_table != NULL) {
-		gtk_widget_destroy (p->header_table);
-		p->header_table = NULL;
-	}
-
-	if (p->notify_id) {
-		GConfClient *gconf = gconf_client_get_default ();
-		gconf_client_notify_remove (gconf, p->notify_id);
-		p->notify_id = 0;
-		g_object_unref (gconf);
-	}
-
-#if 0 /* GTKHTML-EDITOR */
-	if (p->persist_stream_interface != CORBA_OBJECT_NIL) {
-		Bonobo_Unknown_unref (p->persist_stream_interface, &ev);
-		CORBA_Object_release (p->persist_stream_interface, &ev);
-		p->persist_stream_interface = CORBA_OBJECT_NIL;
-	}
-
-	if (p->persist_file_interface != CORBA_OBJECT_NIL) {
-		Bonobo_Unknown_unref (p->persist_file_interface, &ev);
-		CORBA_Object_release (p->persist_file_interface, &ev);
-		p->persist_file_interface = CORBA_OBJECT_NIL;
-	}
-
-	if (p->eeditor_engine != CORBA_OBJECT_NIL) {
-		Bonobo_Unknown_unref (p->eeditor_engine, &ev);
-		CORBA_Object_release (p->eeditor_engine, &ev);
-		p->eeditor_engine = CORBA_OBJECT_NIL;
-	}
-
-	CORBA_exception_free (&ev);
-
-	if (p->eeditor_listener) {
-		bonobo_object_unref (p->eeditor_listener);
-		p->eeditor_listener = NULL;
-	}
-#endif
-
-	/* Chain up to parent's destroy () method. */
-	GTK_OBJECT_CLASS (parent_class)->destroy (object);
-}
-
-
 /* show the help menu item of the composer */
 static void
 e_msg_composer_show_help (EMsgComposer *composer)
@@ -2389,17 +2183,6 @@
 }
 
 
-/* GtkWidget methods.  */
-
-static int
-msg_composer_delete_event (GtkWidget *widget,
-	                   GdkEventAny *event)
-{
-	do_exit (E_MSG_COMPOSER (widget));
-
-	return TRUE;
-}
-
 static void
 attach_message (EMsgComposer *composer, CamelMimeMessage *msg)
 {
@@ -2752,11 +2535,222 @@
 }
 
 static void
+msg_composer_dispose (GObject *object)
+{
+	/* When destroy () is called, the contents of the window
+	 * (including the remote editor control) will already have
+	 * been destroyed, so we have to do this here.
+	 */
+	autosave_manager_unregister (E_MSG_COMPOSER (object));
+
+	/* Chain up to parent's dispose () method. */
+	G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+msg_composer_finalize (GObject *object)
+{
+	EMsgComposer *composer = E_MSG_COMPOSER (object);
+	EMsgComposerPrivate *p = composer->priv;
+
+	if (p->extra_hdr_names) {
+		gint i;
+
+		for (i = 0; i < p->extra_hdr_names->len; i++) {
+			g_free (p->extra_hdr_names->pdata[i]);
+			g_free (p->extra_hdr_values->pdata[i]);
+		}
+		g_ptr_array_free (p->extra_hdr_names, TRUE);
+		g_ptr_array_free (p->extra_hdr_values, TRUE);
+	}
+
+	g_hash_table_destroy (p->inline_images);
+	g_hash_table_destroy (p->inline_images_by_url);
+
+	g_free (p->charset);
+	g_free (p->mime_type);
+	g_free (p->mime_body);
+
+	if (p->redirect)
+		camel_object_unref (p->redirect);
+
+	/* Chain up to parent's finalize () method. */
+	G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+msg_composer_destroy (GtkObject *object)
+{
+	EMsgComposer *composer = (EMsgComposer *)object;
+	EMsgComposerPrivate *p = composer->priv;
+	CORBA_Environment ev;
+
+	CORBA_exception_init (&ev);
+
+#if 0 /* GTKHTML-EDITOR */
+	if (p->menu) {
+		e_menu_update_target ((EMenu *)p->menu, NULL);
+		g_object_unref (p->menu);
+		p->menu = NULL;
+	}
+#endif
+
+	if (p->load) {
+		gtk_widget_destroy (p->load);
+		p->load = NULL;
+	}
+
+	if (p->saveas) {
+		gtk_widget_destroy (p->saveas);
+		p->saveas = NULL;
+	}
+
+#if 0 /* GTKHTML-EDITOR */
+	if (p->uic) {
+		bonobo_object_unref (BONOBO_OBJECT (p->uic));
+		p->uic = NULL;
+	}
+#endif
+
+	/* FIXME?  I assume the Bonobo widget will get destroyed
+	   normally?  */
+	if (p->address_dialog != NULL) {
+		gtk_widget_destroy (p->address_dialog);
+		p->address_dialog = NULL;
+	}
+
+	if (p->header_table != NULL) {
+		gtk_widget_destroy (p->header_table);
+		p->header_table = NULL;
+	}
+
+	if (p->notify_id) {
+		GConfClient *gconf = gconf_client_get_default ();
+		gconf_client_notify_remove (gconf, p->notify_id);
+		p->notify_id = 0;
+		g_object_unref (gconf);
+	}
+
+#if 0 /* GTKHTML-EDITOR */
+	if (p->persist_stream_interface != CORBA_OBJECT_NIL) {
+		Bonobo_Unknown_unref (p->persist_stream_interface, &ev);
+		CORBA_Object_release (p->persist_stream_interface, &ev);
+		p->persist_stream_interface = CORBA_OBJECT_NIL;
+	}
+
+	if (p->persist_file_interface != CORBA_OBJECT_NIL) {
+		Bonobo_Unknown_unref (p->persist_file_interface, &ev);
+		CORBA_Object_release (p->persist_file_interface, &ev);
+		p->persist_file_interface = CORBA_OBJECT_NIL;
+	}
+
+	if (p->eeditor_engine != CORBA_OBJECT_NIL) {
+		Bonobo_Unknown_unref (p->eeditor_engine, &ev);
+		CORBA_Object_release (p->eeditor_engine, &ev);
+		p->eeditor_engine = CORBA_OBJECT_NIL;
+	}
+
+	CORBA_exception_free (&ev);
+
+	if (p->eeditor_listener) {
+		bonobo_object_unref (p->eeditor_listener);
+		p->eeditor_listener = NULL;
+	}
+#endif
+
+	/* Chain up to parent's destroy () method. */
+	GTK_OBJECT_CLASS (parent_class)->destroy (object);
+}
+
+static gint
+msg_composer_delete_event (GtkWidget *widget,
+	                   GdkEventAny *event)
+{
+	do_exit (E_MSG_COMPOSER (widget));
+
+	return TRUE;
+}
+
+static void
+msg_composer_cut (GtkhtmlEditor *editor)
+{
+	EMsgComposer *composer;
+	GtkWidget *parent;
+	GtkWidget *widget;
+
+	composer = E_MSG_COMPOSER (editor);
+	widget = gtk_window_get_focus (GTK_WINDOW (editor));
+	parent = gtk_widget_get_parent (widget);
+
+	if (parent == composer->priv->header_table)
+		gtk_editable_cut_clipboard (GTK_EDITABLE (widget));
+	else
+		/* Chain up to the parent's cut() method. */
+		GTKHTML_EDITOR_CLASS (parent_class)->cut (editor);
+}
+
+static void
+msg_composer_copy (GtkhtmlEditor *editor)
+{
+	EMsgComposer *composer;
+	GtkWidget *parent;
+	GtkWidget *widget;
+
+	composer = E_MSG_COMPOSER (editor);
+	widget = gtk_window_get_focus (GTK_WINDOW (editor));
+	parent = gtk_widget_get_parent (widget);
+
+	if (parent == composer->priv->header_table)
+		gtk_editable_copy_clipboard (GTK_EDITABLE (widget));
+	else
+		/* Chain up to the parent's copy() method. */
+		GTKHTML_EDITOR_CLASS (parent_class)->copy (editor);
+}
+
+static void
+msg_composer_paste (GtkhtmlEditor *editor)
+{
+	EMsgComposer *composer;
+	GtkWidget *parent;
+	GtkWidget *widget;
+
+	composer = E_MSG_COMPOSER (editor);
+	widget = gtk_window_get_focus (GTK_WINDOW (editor));
+	parent = gtk_widget_get_parent (widget);
+
+	if (parent == composer->priv->header_table)
+		gtk_editable_paste_clipboard (GTK_EDITABLE (widget));
+	else
+		/* Chain up to the parent's paste() method. */
+		GTKHTML_EDITOR_CLASS (parent_class)->paste (editor);
+}
+
+static void
+msg_composer_select_all (GtkhtmlEditor *editor)
+{
+	EMsgComposer *composer;
+	GtkWidget *parent;
+	GtkWidget *widget;
+
+	composer = E_MSG_COMPOSER (editor);
+	widget = gtk_window_get_focus (GTK_WINDOW (editor));
+	parent = gtk_widget_get_parent (widget);
+
+	if (parent == composer->priv->header_table) {
+		gtk_editable_set_position (GTK_EDITABLE (widget), -1);
+		gtk_editable_select_region (GTK_EDITABLE (widget), 0, -1);
+	} else
+		/* Chain up to the parent's select_all() method. */
+		GTKHTML_EDITOR_CLASS (parent_class)->select_all (editor);
+}
+
+static void
 msg_composer_class_init (EMsgComposerClass *class)
 {
 	GObjectClass *object_class;
 	GtkObjectClass *gtk_object_class;
 	GtkWidgetClass *widget_class;
+	GtkhtmlEditorClass *editor_class;
 	gint ii;
 
 	for (ii = 0; ii < G_N_ELEMENTS (drag_info); ii++)
@@ -2776,6 +2770,12 @@
 	widget_class = GTK_WIDGET_CLASS (class);
 	widget_class->delete_event = msg_composer_delete_event;
 
+	editor_class = GTKHTML_EDITOR_CLASS (class);
+	editor_class->cut = msg_composer_cut;
+	editor_class->copy = msg_composer_copy;
+	editor_class->paste = msg_composer_paste;
+	editor_class->select_all = msg_composer_select_all;
+
 	signals[SEND] =
 		g_signal_new ("send",
 			      E_TYPE_MSG_COMPOSER,
@@ -3034,104 +3034,6 @@
 	return FALSE;
 }
 
-
-/* Verbs for non-control entries */
-static BonoboUIVerb entry_verbs [] = {
-	BONOBO_UI_VERB ("EditCut", menu_edit_cut_cb),
-	BONOBO_UI_VERB ("EditCopy", menu_edit_copy_cb),
-	BONOBO_UI_VERB ("EditPaste", menu_edit_paste_cb),
-	BONOBO_UI_VERB ("EditSelectAll", menu_edit_select_all_cb),
-	BONOBO_UI_VERB_END
-};
-
-/* All this snot is so that Cut/Copy/Paste work. */
-static gboolean
-composer_entry_focus_in_event_cb (GtkWidget *widget, GdkEventFocus *event, gpointer user_data)
-{
-#if 0 /* GTKHTML-EDITOR */
-	EMsgComposer *composer = user_data;
-	EMsgComposerPrivate *p = composer->priv;
-	BonoboUIContainer *container;
-	char *xmlfile;
-
-	p->focused_entry = widget;
-
-	container = bonobo_window_get_ui_container (BONOBO_WINDOW (composer));
-	bonobo_ui_component_set_container (p->entry_uic, bonobo_object_corba_objref (BONOBO_OBJECT (container)), NULL);
-
-	bonobo_ui_component_add_verb_list_with_data (p->entry_uic, entry_verbs, composer);
-
-	bonobo_ui_component_freeze (p->entry_uic, NULL);
-
-	xmlfile = g_build_filename (EVOLUTION_UIDIR, "evolution-composer-entries.xml", NULL);
-	bonobo_ui_util_set_ui (p->entry_uic, PREFIX,
-			       xmlfile,
-			       "evolution-composer-entries", NULL);
-	g_free (xmlfile);
-
-	bonobo_ui_component_thaw (p->entry_uic, NULL);
-#endif /* GTKHTML-EDITOR */
-
-	return FALSE;
-}
-
-static gboolean
-composer_entry_focus_out_event_cb (GtkWidget *widget, GdkEventFocus *event, gpointer user_data)
-{
-#if 0 /* GTKHTML-EDITOR */
-	EMsgComposer *composer = user_data;
-	EMsgComposerPrivate *p = composer->priv;
-
-	g_return_val_if_fail (p->focused_entry == widget, FALSE);
-	p->focused_entry = NULL;
-
-	bonobo_ui_component_unset_container (p->entry_uic, NULL);
-#endif /* GTKHTML-EDITOR */
-
-	return FALSE;
-}
-
-static void
-setup_cut_copy_paste (EMsgComposer *composer)
-{
-	EComposerHeaderTable *table;
-	GtkWidget *entry;
-
-	/* XXX Shouldn't EComposerHeader be handling this? */
-
-	table = e_msg_composer_get_header_table (composer);
-
-	entry = e_composer_header_table_get_header (
-		table, E_COMPOSER_HEADER_SUBJECT)->input_widget;
-	g_signal_connect (entry, "focus_in_event", G_CALLBACK (composer_entry_focus_in_event_cb), composer);
-	g_signal_connect (entry, "focus_out_event", G_CALLBACK (composer_entry_focus_out_event_cb), composer);
-
-	entry = e_composer_header_table_get_header (
-		table, E_COMPOSER_HEADER_REPLY_TO)->input_widget;
-	g_signal_connect (entry, "focus_in_event", G_CALLBACK (composer_entry_focus_in_event_cb), composer);
-	g_signal_connect (entry, "focus_out_event", G_CALLBACK (composer_entry_focus_out_event_cb), composer);
-
-	entry = e_composer_header_table_get_header (
-		table, E_COMPOSER_HEADER_TO)->input_widget;
-	g_signal_connect (entry, "focus_in_event", G_CALLBACK (composer_entry_focus_in_event_cb), composer);
-	g_signal_connect (entry, "focus_out_event", G_CALLBACK (composer_entry_focus_out_event_cb), composer);
-
-	entry = e_composer_header_table_get_header (
-		table, E_COMPOSER_HEADER_CC)->input_widget;
-	g_signal_connect (entry, "focus_in_event", G_CALLBACK (composer_entry_focus_in_event_cb), composer);
-	g_signal_connect (entry, "focus_out_event", G_CALLBACK (composer_entry_focus_out_event_cb), composer);
-
-	entry = e_composer_header_table_get_header (
-		table, E_COMPOSER_HEADER_BCC)->input_widget;
-	g_signal_connect (entry, "focus_in_event", G_CALLBACK (composer_entry_focus_in_event_cb), composer);
-	g_signal_connect (entry, "focus_out_event", G_CALLBACK (composer_entry_focus_out_event_cb), composer);
-
-	entry = e_composer_header_table_get_header (
-		table, E_COMPOSER_HEADER_POST_TO)->input_widget;
-	g_signal_connect (entry, "focus_in_event", G_CALLBACK (composer_entry_focus_in_event_cb), composer);
-	g_signal_connect (entry, "focus_out_event", G_CALLBACK (composer_entry_focus_out_event_cb), composer);
-}
-
 static void
 composer_settings_update (GConfClient *gconf, guint cnxn_id, GConfEntry *entry, gpointer data)
 {
@@ -3527,8 +3429,6 @@
 	}
 #endif /* GTKHTML-EDITOR */
 
-	setup_cut_copy_paste (composer);
-
 	g_signal_connect (composer, "map", (GCallback) map_default_cb, NULL);
 
 	e_composer_autosave_register (composer);

Modified: branches/mbarnes-composer/plugins/exchange-operations/Makefile.am
==============================================================================
--- branches/mbarnes-composer/plugins/exchange-operations/Makefile.am	(original)
+++ branches/mbarnes-composer/plugins/exchange-operations/Makefile.am	Thu Feb  7 01:58:16 2008
@@ -5,6 +5,7 @@
 	-I$(top_builddir)/composer			\
 	-I$(top_builddir)/mail				\
 	$(CAMEL_EXCHANGE_CFLAGS)                        \
+	$(EVOLUTION_MAIL_CFLAGS)			\
 	-DEVOLUTION_GLADEDIR=\""$(gladedir)"\"          \
 	-DCONNECTOR_GLADEDIR=\""$(gladedir)"\"
 
@@ -54,7 +55,8 @@
 	$(top_builddir)/calendar/gui/libevolution-calendar.la 	\
 	$(top_builddir)/mail/libevolution-mail.la 		\
 	$(top_builddir)/addressbook/gui/component/libevolution-addressbook.la \
-	$(CAMEL_EXCHANGE_LIBS)
+	$(CAMEL_EXCHANGE_LIBS)					\
+	$(EVOLUTION_MAIL_LIBS)
 
 liborg_gnome_exchange_operations_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
 

Modified: branches/mbarnes-composer/ui/Makefile.am
==============================================================================
--- branches/mbarnes-composer/ui/Makefile.am	(original)
+++ branches/mbarnes-composer/ui/Makefile.am	Thu Feb  7 01:58:16 2008
@@ -2,7 +2,6 @@
 	evolution.xml				\
 	evolution-addressbook.xml		\
 	evolution-calendar.xml			\
-	evolution-composer-entries.xml		\
 	evolution-mail-message.xml		\
 	evolution-mail-list.xml			\
 	evolution-mail-global.xml		\



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]