/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/* e-url-entry.c
 *
 * Copyright (C) 2002  JP Rosevear
 *
 * 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
 * version 2 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this program; if not, write to the
 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 *
 * Author: JP Rosevear
 */

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <gtk/gtk.h>
#include <libgnome/gnome-url.h>
#include <glib/gi18n.h>
#include "e-url-entry.h"
#include <e-util/e-icon-factory.h>

struct _EUrlEntryPrivate {
	GtkWidget *entry;
	GtkWidget *button;
};

static void class_init (EUrlEntryClass *klass);
static void init (EUrlEntry *url_entry);
static void destroy (GtkObject *obj);

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

static GtkHBoxClass *parent_class = NULL;


GtkType
e_url_entry_get_type (void)
{
  static GtkType type = 0;

  if (type == 0)
    {
      static const GtkTypeInfo info =
      {
        "EUrlEntry",
        sizeof (EUrlEntry),
        sizeof (EUrlEntryClass),
        (GtkClassInitFunc) class_init,
        (GtkObjectInitFunc) init,
        /* reserved_1 */ NULL,
        /* reserved_2 */ NULL,
        (GtkClassInitFunc) NULL,
      };

      type = gtk_type_unique (gtk_hbox_get_type (), &info);
    }

  return type;
}

static void
class_init (EUrlEntryClass *klass)
{
	GtkObjectClass *object_class;
	GtkWidgetClass *widget_class;

	object_class = GTK_OBJECT_CLASS (klass);
	widget_class = GTK_WIDGET_CLASS (klass);

	parent_class = g_type_class_ref(gtk_hbox_get_type ());

	object_class->destroy = destroy;

	widget_class->mnemonic_activate = mnemonic_activate;
}


static void
init (EUrlEntry *url_entry)
{
	EUrlEntryPrivate *priv;
	GtkWidget *pixmap;

	priv = g_new0 (EUrlEntryPrivate, 1);
	url_entry->priv = priv;

	priv->entry = gtk_entry_new ();
	gtk_box_pack_start (GTK_BOX (url_entry), priv->entry, TRUE, TRUE, 0);
	priv->button = gtk_button_new ();
	gtk_widget_set_sensitive (priv->button, FALSE);
	gtk_box_pack_start (GTK_BOX (url_entry), priv->button, FALSE, FALSE, 0);
	atk_object_set_name (gtk_widget_get_accessible (priv->button), _("Click here to go to URL"));
	pixmap = e_icon_factory_get_image ("go-jump", E_ICON_SIZE_BUTTON);
	gtk_container_add (GTK_CONTAINER (priv->button), pixmap);
	gtk_widget_show (pixmap);

	gtk_widget_show (priv->button);
	gtk_widget_show (priv->entry);

	g_signal_connect (priv->button, "clicked",
			  G_CALLBACK (button_clicked_cb), url_entry);
	g_signal_connect (priv->entry, "changed",
			  G_CALLBACK (entry_changed_cb), url_entry);
}

static void
destroy (GtkObject *obj)
{
	EUrlEntry *url_entry;

	url_entry = E_URL_ENTRY (obj);
	if (url_entry->priv) {
		g_free (url_entry->priv);
		url_entry->priv = NULL;
	}

	GTK_OBJECT_CLASS (parent_class)->destroy (obj);
}

/* GtkWidget::mnemonic_activate() handler for the EUrlEntry */
static gboolean
mnemonic_activate (GtkWidget *widget, gboolean group_cycling)
{
	EUrlEntry *url_entry;
	EUrlEntryPrivate *priv;

	url_entry = E_URL_ENTRY (widget);
	priv = url_entry->priv;

	return gtk_widget_mnemonic_activate (priv->entry, group_cycling);
}



GtkWidget *
e_url_entry_new (void)
{
	return g_object_new (E_TYPE_URL_ENTRY, NULL);
}


GtkWidget *
e_url_entry_get_entry (EUrlEntry *url_entry)
{
	EUrlEntryPrivate *priv;

	g_return_val_if_fail (url_entry != NULL, NULL);
	g_return_val_if_fail (E_IS_URL_ENTRY (url_entry), NULL);

	priv = url_entry->priv;

	return priv->entry;
}

static void
button_clicked_cb (GtkWidget *widget, gpointer data)
{
	EUrlEntry *url_entry;
	EUrlEntryPrivate *priv;

	url_entry = E_URL_ENTRY (data);
	priv = url_entry->priv;

	gnome_url_show (gtk_entry_get_text (GTK_ENTRY (priv->entry)), NULL);
}

static void
entry_changed_cb (GtkEditable *editable, gpointer data)
{
	EUrlEntry *url_entry;
	EUrlEntryPrivate *priv;
	const char *url;

	url_entry = E_URL_ENTRY (data);
	priv = url_entry->priv;

	url = gtk_entry_get_text (GTK_ENTRY (priv->entry));
	gtk_widget_set_sensitive (priv->button, url != NULL && *url != '\0');
}
21Q1</option>
<option value='branches/RELEASE_8_4_0'>branches/RELEASE_8_4_0</option>
<option value='branches/RELENG_2_1_0'>branches/RELENG_2_1_0</option>
<option value='branches/RELENG_2_2'>branches/RELENG_2_2</option>
<option value='branches/RELENG_9_1_0'>branches/RELENG_9_1_0</option>
<option value='branches/RELENG_9_2_0'>branches/RELENG_9_2_0</option>
<option value='dependabot/npm_and_yarn/devel/electron4/files/eslint-utils-1.4.3'>dependabot/npm_and_yarn/devel/electron4/files/eslint-utils-1.4.3</option>
<option value='dependabot/npm_and_yarn/devel/electron4/files/lodash-4.17.15'>dependabot/npm_and_yarn/devel/electron4/files/lodash-4.17.15</option>
<option value='dependabot/npm_and_yarn/devel/electron4/files/lodash.merge-4.6.2'>dependabot/npm_and_yarn/devel/electron4/files/lodash.merge-4.6.2</option>
<option value='dependabot/npm_and_yarn/devel/electron4/files/lodash.template-4.5.0'>dependabot/npm_and_yarn/devel/electron4/files/lodash.template-4.5.0</option>
<option value='dependabot/npm_and_yarn/devel/electron4/files/minimist-1.2.2'>dependabot/npm_and_yarn/devel/electron4/files/minimist-1.2.2</option>
<option value='dependabot/npm_and_yarn/devel/electron4/files/mixin-deep-1.3.2'>dependabot/npm_and_yarn/devel/electron4/files/mixin-deep-1.3.2</option>
<option value='main' selected='selected'>main</option>
<option value='master'>master</option>
<option value='svn_head'>svn_head</option>
</select> <input type='submit' value='switch'/></form></td></tr>
<tr><td class='sub'>FreeBSD Ports (https://github.com/freebsd/freebsd-ports)</td><td class='sub right'></td></tr></table>
<table class='tabs'><tr><td>
<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/about/'>about</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/'>summary</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/refs/?id=359fcf18da3ffa1bd213f98b0018b4e4d22b9ce2'>refs</a><a class='active' href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/x11-toolkits/py-gtk2'>log</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/tree/x11-toolkits/py-gtk2?id=359fcf18da3ffa1bd213f98b0018b4e4d22b9ce2'>tree</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=359fcf18da3ffa1bd213f98b0018b4e4d22b9ce2'>commit</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/diff/x11-toolkits/py-gtk2?id=359fcf18da3ffa1bd213f98b0018b4e4d22b9ce2'>diff</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/stats/x11-toolkits/py-gtk2'>stats</a></td><td class='form'><form class='right' method='get' action='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/x11-toolkits/py-gtk2'>
<input type='hidden' name='id' value='359fcf18da3ffa1bd213f98b0018b4e4d22b9ce2'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/?id=359fcf18da3ffa1bd213f98b0018b4e4d22b9ce2'>root</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/x11-toolkits?id=359fcf18da3ffa1bd213f98b0018b4e4d22b9ce2'>x11-toolkits</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/x11-toolkits/py-gtk2?id=359fcf18da3ffa1bd213f98b0018b4e4d22b9ce2'>py-gtk2</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th></th><th class='left'>Commit message (<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/x11-toolkits/py-gtk2?id=359fcf18da3ffa1bd213f98b0018b4e4d22b9ce2&amp;showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Age</th><th class='left'>Files</th><th class='left'>Lines</th></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=e1c6649edf48e1cb8863aca8abf8d880a2f0c31c'>- Remove WITH_FBSD10_FIX, is no longer needed</a></td><td>Martin Wilke</td><td><span title='2011-11-09 23:26:04 +0800'>2011-11-09</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+0</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=f7d2c3ea3e037a0e21af4b04c3a17c5cf394207e'>Fix build on FreeBSD 10</a></td><td>Koop Mast</td><td><span title='2011-10-30 06:53:25 +0800'>2011-10-30</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=989772c9ac17dbf61d27a16069c9a6a83b5b0c2c'>The vast majority of pkg-descr files had the following format when they</a></td><td>Doug Barton</td><td><span title='2011-10-24 17:11:38 +0800'>2011-10-24</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=6f6fbe4bdf9851de1eb6ebef5287e3007846045e'>- Add LDFLAGS to CONFIGURE_ENV and MAKE_ENV (as it was done with LDFLAGS)</a></td><td>Dmitry Marakasov</td><td><span title='2011-09-24 06:26:39 +0800'>2011-09-24</span></td><td>1</td><td><span class='deletions'>-7</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=59f9ae20c705cd4c0114ebb463ea1bb8eafaa6df'>Also update these to there latest stable versions.</a></td><td>Koop Mast</td><td><span title='2011-07-30 17:26:59 +0800'>2011-07-30</span></td><td>4</td><td><span class='deletions'>-28</span>/<span class='insertions'>+18</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=4ed31e1af788e2e1c47b24cce14728aad707dd35'>- Kick MD5 support</a></td><td>Martin Wilke</td><td><span title='2011-07-03 02:18:48 +0800'>2011-07-03</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+0</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=45b47603e1777051d393c7a55ae4d5430e1d0710'>Fix CPU hogging when subprocess terminates.</a></td><td>Koop Mast</td><td><span title='2011-02-28 19:31:37 +0800'>2011-02-28</span></td><td>2</td><td><span class='deletions'>-1</span>/<span class='insertions'>+16</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=3680f27ebff58ece429c4e032f9ad84fb1372114'>Presenting GNOME 2.32.1 for FreeBSD. The offical release notes for this</a></td><td>Koop Mast</td><td><span title='2010-11-20 23:37:08 +0800'>2010-11-20</span></td><td>4</td><td><span class='deletions'>-6</span>/<span class='insertions'>+27</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=e9f130dc430236e9fe94eba1cfcb97803a13d526'>Correct typo.</a></td><td>Joe Marcus Clarke</td><td><span title='2010-06-01 03:48:04 +0800'>2010-06-01</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=8d837132c7954ce8a9f54a814b670237ca156d10'>Bounce PORTREVISION for gettext-related ports.  Have fun, ya'll.</a></td><td>Ade Lovett</td><td><span title='2010-05-31 10:01:56 +0800'>2010-05-31</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=8903287a848d4f2405e06ebc0e1b49d34e03ad30'>Bump portrevision for last chance, since dependancy list changed for default</a></td><td>Koop Mast</td><td><span title='2010-05-17 19:17:08 +0800'>2010-05-17</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=45f3157a88ad828628706cc83694074b83f72ab1'>Make numpy optional, defaulting to off. Because it depends gcc44.</a></td><td>Koop Mast</td><td><span title='2010-05-17 17:40:21 +0800'>2010-05-17</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+15</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=24bfc42687672aeecf50fa74f8b802eea24148ec'>Correct depend on Numpy instead of Numeric.</a></td><td>Koop Mast</td><td><span title='2010-05-17 06:07:20 +0800'>2010-05-17</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=48e62d9a379cd45a15f6ae89d564f81b3c13d16e'>Presenting GNOME 2.30.1 for FreeBSD. The offical release notes for this</a></td><td>Koop Mast</td><td><span title='2010-05-11 05:19:08 +0800'>2010-05-11</span></td><td>3</td><td><span class='deletions'>-6</span>/<span class='insertions'>+9</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=de78af3ac53da4687d22975cd2e236a0668d9a0d'>- update to 1.4.1</a></td><td>Dirk Meyer</td><td><span title='2010-03-28 14:47:48 +0800'>2010-03-28</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=ca9c60461cb276ee2afe18260afc8dec97c1b6f8'>- update to jpeg-8</a></td><td>Dirk Meyer</td><td><span title='2010-02-05 19:46:55 +0800'>2010-02-05</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=f76d32b8e89fed7c0e459c1a7fe7a4b57661b01c'>Presenting GNOME 2.28.1 for FreeBSD.  The official release notes for this</a></td><td>Joe Marcus Clarke</td><td><span title='2009-11-29 04:06:37 +0800'>2009-11-29</span></td><td>3</td><td><span class='deletions'>-9</span>/<span class='insertions'>+13</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=a694f84aaa43d20bd32568bd6978018df6255448'>Add a unique LATEST_LINK.</a></td><td>Joe Marcus Clarke</td><td><span title='2009-08-23 01:19:22 +0800'>2009-08-23</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/x11-toolkits/py-gtk2?id=eca78ec61b7c6c87d59106128bee6ac57b1bdbb5'>- bump all port that indirectly depends on libjpeg and have not yet been bump...</a></td><td>Dirk Meyer</td><td><span title='2009-07-31 21:57:52 +0800'>2009-07-31</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>