aboutsummaryrefslogtreecommitdiffstats
path: root/e-util
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2013-06-24 05:55:05 +0800
committerMatthew Barnes <mbarnes@redhat.com>2013-06-24 07:30:55 +0800
commitd9126cd9470657460f623d55bb558a6868700c7e (patch)
tree799a754673c05646d63780e5e21f658af2e8d23a /e-util
parent4eabb2d9b8285ba601e05014c5c7981417131ca9 (diff)
downloadgsoc2013-evolution-d9126cd9470657460f623d55bb558a6868700c7e.tar.gz
gsoc2013-evolution-d9126cd9470657460f623d55bb558a6868700c7e.tar.zst
gsoc2013-evolution-d9126cd9470657460f623d55bb558a6868700c7e.zip
EUrlEntry cleanups.
Diffstat (limited to 'e-util')
-rw-r--r--e-util/e-url-entry.c158
-rw-r--r--e-util/e-url-entry.h8
2 files changed, 76 insertions, 90 deletions
diff --git a/e-util/e-url-entry.c b/e-util/e-url-entry.c
index 7752732ccc..231ac19dfe 100644
--- a/e-util/e-url-entry.c
+++ b/e-util/e-url-entry.c
@@ -1,4 +1,6 @@
/*
+ * e-url-entry.c
+ *
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
@@ -12,12 +14,6 @@
* You should have received a copy of the GNU Lesser General Public
* License along with the program; if not, see <http://www.gnu.org/licenses/>
*
- *
- * Authors:
- * JP Rosevear <jpr@novell.com>
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
*/
#ifdef HAVE_CONFIG_H
@@ -40,120 +36,114 @@ struct _EUrlEntryPrivate {
GtkWidget *button;
};
-static void button_clicked_cb (GtkWidget *widget, gpointer data);
-static void entry_changed_cb (GtkEditable *editable, gpointer data);
-
-static gboolean mnemonic_activate (GtkWidget *widget, gboolean group_cycling);
-
G_DEFINE_TYPE (
EUrlEntry,
e_url_entry,
GTK_TYPE_HBOX)
-static void
-e_url_entry_class_init (EUrlEntryClass *class)
+static gboolean
+url_entry_text_to_sensitive (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
{
- GtkWidgetClass *widget_class;
+ const gchar *text;
+ gboolean sensitive;
- g_type_class_add_private (class, sizeof (EUrlEntryPrivate));
+ text = g_value_get_string (source_value);
+ sensitive = (text != NULL && *text != '\0');
+ g_value_set_boolean (target_value, sensitive);
- widget_class = GTK_WIDGET_CLASS (class);
- widget_class->mnemonic_activate = mnemonic_activate;
+ return TRUE;
}
static void
-e_url_entry_init (EUrlEntry *url_entry)
+url_entry_button_clicked_cb (GtkButton *button,
+ EUrlEntry *url_entry)
{
- GtkWidget *pixmap;
+ const gchar *text;
+ gpointer toplevel;
- url_entry->priv = E_URL_ENTRY_GET_PRIVATE (url_entry);
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (url_entry));
+ toplevel = gtk_widget_is_toplevel (toplevel) ? toplevel : NULL;
- url_entry->priv->entry = gtk_entry_new ();
- gtk_box_pack_start (
- GTK_BOX (url_entry), url_entry->priv->entry, TRUE, TRUE, 0);
- url_entry->priv->button = gtk_button_new ();
- gtk_widget_set_sensitive (url_entry->priv->button, FALSE);
- gtk_box_pack_start (
- GTK_BOX (url_entry), url_entry->priv->button, FALSE, FALSE, 0);
- atk_object_set_name (
- gtk_widget_get_accessible (url_entry->priv->button),
- _("Click here to go to URL"));
- pixmap = gtk_image_new_from_icon_name ("go-jump", GTK_ICON_SIZE_BUTTON);
- gtk_container_add (GTK_CONTAINER (url_entry->priv->button), pixmap);
- gtk_widget_show (pixmap);
-
- gtk_widget_show (url_entry->priv->button);
- gtk_widget_show (url_entry->priv->entry);
+ text = gtk_entry_get_text (GTK_ENTRY (url_entry->priv->entry));
- g_signal_connect (
- url_entry->priv->button, "clicked",
- G_CALLBACK (button_clicked_cb), url_entry);
- g_signal_connect (
- url_entry->priv->entry, "changed",
- G_CALLBACK (entry_changed_cb), url_entry);
+ e_show_uri (toplevel, text);
}
-/* GtkWidget::mnemonic_activate() handler for the EUrlEntry */
static gboolean
-mnemonic_activate (GtkWidget *widget,
- gboolean group_cycling)
+url_entry_mnemonic_activate (GtkWidget *widget,
+ gboolean group_cycling)
{
- EUrlEntry *url_entry;
- EUrlEntryPrivate *priv;
+ GtkWidget *entry;
- url_entry = E_URL_ENTRY (widget);
- priv = url_entry->priv;
+ entry = e_url_entry_get_entry (E_URL_ENTRY (widget));
- return gtk_widget_mnemonic_activate (priv->entry, group_cycling);
-}
-
-GtkWidget *
-e_url_entry_new (void)
-{
- return g_object_new (E_TYPE_URL_ENTRY, NULL);
+ return gtk_widget_mnemonic_activate (entry, group_cycling);
}
-GtkWidget *
-e_url_entry_get_entry (EUrlEntry *url_entry)
+static void
+e_url_entry_class_init (EUrlEntryClass *class)
{
- EUrlEntryPrivate *priv;
-
- g_return_val_if_fail (url_entry != NULL, NULL);
- g_return_val_if_fail (E_IS_URL_ENTRY (url_entry), NULL);
+ GtkWidgetClass *widget_class;
- priv = url_entry->priv;
+ g_type_class_add_private (class, sizeof (EUrlEntryPrivate));
- return priv->entry;
+ widget_class = GTK_WIDGET_CLASS (class);
+ widget_class->mnemonic_activate = url_entry_mnemonic_activate;
}
static void
-button_clicked_cb (GtkWidget *widget,
- gpointer data)
+e_url_entry_init (EUrlEntry *url_entry)
{
- EUrlEntry *url_entry;
- EUrlEntryPrivate *priv;
- const gchar *uri;
+ GtkWidget *widget;
- url_entry = E_URL_ENTRY (data);
- priv = url_entry->priv;
+ url_entry->priv = E_URL_ENTRY_GET_PRIVATE (url_entry);
- uri = gtk_entry_get_text (GTK_ENTRY (priv->entry));
+ widget = gtk_entry_new ();
+ gtk_entry_set_placeholder_text (
+ GTK_ENTRY (widget), _("Enter a URL here"));
+ gtk_box_pack_start (GTK_BOX (url_entry), widget, TRUE, TRUE, 0);
+ url_entry->priv->entry = widget; /* do not reference */
+ gtk_widget_show (widget);
+
+ widget = gtk_button_new ();
+ gtk_container_add (
+ GTK_CONTAINER (widget),
+ gtk_image_new_from_stock (
+ GTK_STOCK_JUMP_TO,
+ GTK_ICON_SIZE_BUTTON));
+ gtk_widget_set_tooltip_text (
+ widget, _("Click here to open the URL"));
+ gtk_box_pack_start (GTK_BOX (url_entry), widget, FALSE, FALSE, 0);
+ url_entry->priv->button = widget; /* do not reference */
+ gtk_widget_show_all (widget);
- /* FIXME Pass a parent window. */
- e_show_uri (NULL, uri);
+ g_signal_connect (
+ widget, "clicked",
+ G_CALLBACK (url_entry_button_clicked_cb), url_entry);
+
+ g_object_bind_property_full (
+ url_entry->priv->entry, "text",
+ url_entry->priv->button, "sensitive",
+ G_BINDING_SYNC_CREATE,
+ url_entry_text_to_sensitive,
+ (GBindingTransformFunc) NULL,
+ NULL, (GDestroyNotify) NULL);
}
-static void
-entry_changed_cb (GtkEditable *editable,
- gpointer data)
+GtkWidget *
+e_url_entry_new (void)
{
- EUrlEntry *url_entry;
- EUrlEntryPrivate *priv;
- const gchar *url;
+ return g_object_new (E_TYPE_URL_ENTRY, NULL);
+}
- url_entry = E_URL_ENTRY (data);
- priv = url_entry->priv;
+GtkWidget *
+e_url_entry_get_entry (EUrlEntry *url_entry)
+{
+ g_return_val_if_fail (E_IS_URL_ENTRY (url_entry), NULL);
- url = gtk_entry_get_text (GTK_ENTRY (priv->entry));
- gtk_widget_set_sensitive (priv->button, url != NULL && *url != '\0');
+ return url_entry->priv->entry;
}
+
diff --git a/e-util/e-url-entry.h b/e-util/e-url-entry.h
index af1b95d639..6751f07755 100644
--- a/e-util/e-url-entry.h
+++ b/e-util/e-url-entry.h
@@ -1,4 +1,6 @@
/*
+ * e-url-entry.h
+ *
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
@@ -12,12 +14,6 @@
* You should have received a copy of the GNU Lesser General Public
* License along with the program; if not, see <http://www.gnu.org/licenses/>
*
- *
- * Authors:
- * JP Rosevear <jpr@novell.com>
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
*/
#if !defined (__E_UTIL_H_INSIDE__) && !defined (LIBEUTIL_COMPILATION)