[evolution] EUrlEntry cleanups.



commit d9126cd9470657460f623d55bb558a6868700c7e
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sun Jun 23 17:55:05 2013 -0400

    EUrlEntry cleanups.

 e-util/e-url-entry.c |  158 +++++++++++++++++++++++--------------------------
 e-util/e-url-entry.h |    8 +--
 2 files changed, 76 insertions(+), 90 deletions(-)
---
diff --git a/e-util/e-url-entry.c b/e-util/e-url-entry.c
index 7752732..231ac19 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 af1b95d..6751f07 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)


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