(Fix bug #314: Display URLs in statusbar on mouseover)

2001-06-05  Jason Leach  <jleach@ximian.com>

	(Fix bug #314: Display URLs in statusbar on mouseover)

	* mail-display.c (html_on_url): New function, callback for
	GtkHTML's "on_url" signal.

svn path=/trunk/; revision=10117
This commit is contained in:
Jason Leach
2001-06-05 17:42:42 +00:00
committed by Jacob Leach
parent 8f366de2a4
commit ce23de3eeb
2 changed files with 98 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2001-06-05 Jason Leach <jleach@ximian.com>
(Fix bug #314: Display URLs in statusbar on mouseover)
* mail-display.c (html_on_url): New function, callback for
GtkHTML's "on_url" signal.
2001-06-05 Radek Doulik <rodo@ximian.com>
* mail-format.c: make HTML and plain mails to have the same

View File

@ -905,7 +905,7 @@ ebook_callback (EBook *book, const gchar *addr, ECard *card, gpointer data)
static void
on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle,
gpointer user_data)
gpointer user_data)
{
MailDisplay *md = user_data;
GHashTable *urls;
@ -1577,6 +1577,93 @@ html_iframe_created (GtkWidget *w, GtkHTML *iframe, MailDisplay *mail_display)
GTK_SIGNAL_FUNC (html_enter_notify_event), mail_display);
}
static GNOME_Evolution_ShellView
retrieve_shell_view_interface_from_control (BonoboControl *control)
{
Bonobo_ControlFrame control_frame;
GNOME_Evolution_ShellView shell_view_interface;
CORBA_Environment ev;
control_frame = bonobo_control_get_control_frame (control);
if (control_frame == NULL)
return CORBA_OBJECT_NIL;
CORBA_exception_init (&ev);
shell_view_interface = Bonobo_Unknown_queryInterface (control_frame,
"IDL:GNOME/Evolution/ShellView:1.0",
&ev);
CORBA_exception_free (&ev);
if (shell_view_interface != CORBA_OBJECT_NIL)
gtk_object_set_data (GTK_OBJECT (control),
"mail_threads_shell_view_interface",
shell_view_interface);
else
g_warning ("Control frame doesn't have Evolution/ShellView.");
return shell_view_interface;
}
static void
set_status_message (const char *message, int busy)
{
EList *controls;
EIterator *it;
controls = folder_browser_factory_get_control_list ();
for (it = e_list_get_iterator (controls); e_iterator_is_valid (it); e_iterator_next (it)) {
BonoboControl *control;
GNOME_Evolution_ShellView shell_view_interface;
CORBA_Environment ev;
control = BONOBO_CONTROL (e_iterator_get (it));
shell_view_interface = gtk_object_get_data (GTK_OBJECT (control), "mail_threads_shell_view_interface");
if (shell_view_interface == CORBA_OBJECT_NIL)
shell_view_interface = retrieve_shell_view_interface_from_control (control);
CORBA_exception_init (&ev);
if (shell_view_interface != CORBA_OBJECT_NIL) {
if (message != NULL)
GNOME_Evolution_ShellView_setMessage (shell_view_interface,
message[0] ? message: "",
busy,
&ev);
}
CORBA_exception_free (&ev);
/* yeah we only set the first one. Why? Because it seems to leave
random ones lying around otherwise. Shrug. */
break;
}
gtk_object_unref (GTK_OBJECT(it));
}
/* For now show every url but possibly limit it to showing only http:
or ftp: urls */
static void
html_on_url (GtkHTML *html,
const char *url,
MailDisplay *mail_display)
{
static char *previous_url = NULL;
/* This all looks silly but yes, this is the proper way to mix
GtkHTML's on_url with BonoboUIComponent statusbar */
if (!url || (previous_url && (strcmp (url, previous_url) != 0)))
set_status_message ("", FALSE);
if (url) {
set_status_message (url, FALSE);
g_free (previous_url);
previous_url = g_strdup (url);
}
}
GtkWidget *
mail_display_new (void)
{
@ -1617,6 +1704,9 @@ mail_display_new (void)
GTK_SIGNAL_FUNC (html_enter_notify_event), mail_display);
gtk_signal_connect (GTK_OBJECT (html), "iframe_created",
GTK_SIGNAL_FUNC (html_iframe_created), mail_display);
gtk_signal_connect (GTK_OBJECT (html), "on_url",
GTK_SIGNAL_FUNC (html_on_url), mail_display);
#if 0
gtk_selection_add_target (GTK_WIDGET(html),
GDK_SELECTION_PRIMARY,