|
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 |
|