Blame src/e-util/e-url-entry.c

Packit Service de44cd
/*
Packit Service de44cd
 * e-url-entry.c
Packit Service de44cd
 *
Packit Service de44cd
 * This program is free software; you can redistribute it and/or modify it
Packit Service de44cd
 * under the terms of the GNU Lesser General Public License as published by
Packit Service de44cd
 * the Free Software Foundation.
Packit Service de44cd
 *
Packit Service de44cd
 * This program is distributed in the hope that it will be useful, but
Packit Service de44cd
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
Packit Service de44cd
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
Packit Service de44cd
 * for more details.
Packit Service de44cd
 *
Packit Service de44cd
 * You should have received a copy of the GNU Lesser General Public License
Packit Service de44cd
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
Packit Service de44cd
 *
Packit Service de44cd
 */
Packit Service de44cd
Packit Service de44cd
#include "evolution-config.h"
Packit Service de44cd
Packit Service de44cd
#include "e-url-entry.h"
Packit Service de44cd
Packit Service de44cd
#include <gtk/gtk.h>
Packit Service de44cd
#include <glib/gi18n.h>
Packit Service de44cd
Packit Service de44cd
#include "e-misc-utils.h"
Packit Service de44cd
Packit Service de44cd
#define E_URL_ENTRY_GET_PRIVATE(obj) \
Packit Service de44cd
	(G_TYPE_INSTANCE_GET_PRIVATE \
Packit Service de44cd
	((obj), E_TYPE_URL_ENTRY, EUrlEntryPrivate))
Packit Service de44cd
Packit Service de44cd
#define ICON_POSITION GTK_ENTRY_ICON_SECONDARY
Packit Service de44cd
Packit Service de44cd
G_DEFINE_TYPE (
Packit Service de44cd
	EUrlEntry,
Packit Service de44cd
	e_url_entry,
Packit Service de44cd
	GTK_TYPE_ENTRY)
Packit Service de44cd
Packit Service de44cd
static gboolean
Packit Service de44cd
url_entry_text_to_sensitive (GBinding *binding,
Packit Service de44cd
                             const GValue *source_value,
Packit Service de44cd
                             GValue *target_value,
Packit Service de44cd
                             gpointer user_data)
Packit Service de44cd
{
Packit Service de44cd
	const gchar *text;
Packit Service de44cd
	gboolean sensitive = FALSE;
Packit Service de44cd
Packit Service de44cd
	text = g_value_get_string (source_value);
Packit Service de44cd
Packit Service de44cd
	if (text != NULL) {
Packit Service de44cd
		gchar *scheme;
Packit Service de44cd
Packit Service de44cd
		/* Skip leading whitespace. */
Packit Service de44cd
		while (g_ascii_isspace (*text))
Packit Service de44cd
			text++;
Packit Service de44cd
Packit Service de44cd
		scheme = g_uri_parse_scheme (text);
Packit Service de44cd
		sensitive = (scheme != NULL);
Packit Service de44cd
		g_free (scheme);
Packit Service de44cd
	}
Packit Service de44cd
Packit Service de44cd
	g_value_set_boolean (target_value, sensitive);
Packit Service de44cd
Packit Service de44cd
	return TRUE;
Packit Service de44cd
}
Packit Service de44cd
Packit Service de44cd
static void
Packit Service de44cd
url_entry_icon_release_cb (GtkEntry *entry,
Packit Service de44cd
                           GtkEntryIconPosition icon_position,
Packit Service de44cd
                           GdkEvent *event)
Packit Service de44cd
{
Packit Service de44cd
	gpointer toplevel;
Packit Service de44cd
Packit Service de44cd
	toplevel = gtk_widget_get_toplevel (GTK_WIDGET (entry));
Packit Service de44cd
	toplevel = gtk_widget_is_toplevel (toplevel) ? toplevel : NULL;
Packit Service de44cd
Packit Service de44cd
	if (icon_position == ICON_POSITION) {
Packit Service de44cd
		const gchar *text;
Packit Service de44cd
Packit Service de44cd
		text = gtk_entry_get_text (entry);
Packit Service de44cd
		g_return_if_fail (text != NULL);
Packit Service de44cd
Packit Service de44cd
		/* Skip leading whitespace. */
Packit Service de44cd
		while (g_ascii_isspace (*text))
Packit Service de44cd
			text++;
Packit Service de44cd
Packit Service de44cd
		e_show_uri (toplevel, text);
Packit Service de44cd
	}
Packit Service de44cd
}
Packit Service de44cd
Packit Service de44cd
static void
Packit Service de44cd
e_url_entry_class_init (EUrlEntryClass *class)
Packit Service de44cd
{
Packit Service de44cd
}
Packit Service de44cd
Packit Service de44cd
static void
Packit Service de44cd
e_url_entry_init (EUrlEntry *url_entry)
Packit Service de44cd
{
Packit Service de44cd
	GtkEntry *entry;
Packit Service de44cd
Packit Service de44cd
	entry = GTK_ENTRY (url_entry);
Packit Service de44cd
Packit Service de44cd
	gtk_entry_set_icon_from_icon_name (
Packit Service de44cd
		entry, ICON_POSITION, "go-jump");
Packit Service de44cd
Packit Service de44cd
	gtk_entry_set_icon_tooltip_text (
Packit Service de44cd
		entry, ICON_POSITION, _("Click here to open the URL"));
Packit Service de44cd
Packit Service de44cd
	gtk_entry_set_placeholder_text (entry, _("Enter a URL here"));
Packit Service de44cd
Packit Service de44cd
	/* XXX GtkEntryClass has no "icon_release" method pointer to
Packit Service de44cd
	 *     override, so instead we have to connect to the signal. */
Packit Service de44cd
	g_signal_connect (
Packit Service de44cd
		url_entry, "icon-release",
Packit Service de44cd
		G_CALLBACK (url_entry_icon_release_cb), NULL);
Packit Service de44cd
Packit Service de44cd
	e_binding_bind_property_full (
Packit Service de44cd
		url_entry, "text",
Packit Service de44cd
		url_entry, "secondary-icon-sensitive",
Packit Service de44cd
		G_BINDING_SYNC_CREATE,
Packit Service de44cd
		url_entry_text_to_sensitive,
Packit Service de44cd
		(GBindingTransformFunc) NULL,
Packit Service de44cd
		NULL, (GDestroyNotify) NULL);
Packit Service de44cd
}
Packit Service de44cd
Packit Service de44cd
GtkWidget *
Packit Service de44cd
e_url_entry_new (void)
Packit Service de44cd
{
Packit Service de44cd
	return g_object_new (E_TYPE_URL_ENTRY, NULL);
Packit Service de44cd
}
Packit Service de44cd