2008-08-11 Matthew Barnes <mbarnes@redhat.com> ** Fixes bug #546892 * e-util/e-icon-factory.c (e_icon_factory_get_image): Kill this function. Use gtk_image_new_from_icon_name(). * e-util/e-icon-factory.c (e_icon_factory_get_icon_list): Kill this function. Use gtk_window_set_icon_name(). * widgets/misc/e-activity-handler.c: * widgets/misc/e-task-widget.c: Purge the GdkPixbuf arguments from the API. We've been ignoring them since the spinner icon was added. * addressbook/gui/contact-editor/e-contact-editor-fullname.c: * addressbook/gui/contact-editor/e-contact-editor-im.c: * addressbook/gui/contact-editor/e-contact-editor-address.c: * calendar/gui/alarm-notify/alarm-notify-dialog.c: * calendar/gui/dialogs/alarm-dialog.c: * calendar/gui/dialogs/alarm-list-dialog.c: * calendar/gui/dialogs/cal-attachment-select-file.c: * calendar/gui/dialogs/changed-comp.c: * calendar/gui/dialogs/delete-error.c: * calendar/gui/dialogs/select-source-dialog.c: * mail/mail-send-recv.c: * mail/message-tag-followup.c: * widgets/misc/e-combo-button.c: * widgets/misc/e-info-label.c: * widgets/misc/e-url-entry.c: * widgets/misc/e-task-widget.c: Prefer gtk_window_set_icon_name() over gtk_window_set_icon_list(). * addressbook/gui/contact-editor/e-contact-editor-im.c: * calendar/gui/dialogs/event-page.c: * calendar/gui/e-timezone-entry.c: * e-util/e-gui-utils.c: * e-util/e-popup.c: * plugins/import-ics-attachments/icsimporter.c: * plugins/itip-formatter/itip-view.c: * mail/em-folder-browser.c: * mail/em-format-html-display.c: * mail/mail-send-recv.c: * mail/message-tag-followup.c: Prefer gtk_image_new_from_icon_name() over e_icon_factory_get_image(). * calendar/gui/alarm-notify/alarm-queue.c: * plugins/mail-notification/mail-notification.c: Prefer gtk_status_icon_set_from_icon_name() over gtk_status_icon_set_from_pixbuf(). * addressbook/gui/component/addressbook-view.c: * calendar/gui/e-calendar-table.c: * calendar/gui/e-calendar-view.c: * calendar/gui/e-memo-table.c: * mail/mail-mt.c: e_activity_handler_operation_started() no longer takes a GdkPixbuf. It was ignoring the pixbuf anyway ever since we added a spinner icon. svn path=/trunk/; revision=35958
194 lines
4.7 KiB
C
194 lines
4.7 KiB
C
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||
/* e-url-entry.c
|
||
*
|
||
* Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
|
||
*
|
||
* 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"
|
||
|
||
struct _EUrlEntryPrivate {
|
||
GtkWidget *entry;
|
||
GtkWidget *button;
|
||
};
|
||
|
||
static void class_init (EUrlEntryClass *class);
|
||
static void init (EUrlEntry *url_entry);
|
||
static void finalize (GObject *object);
|
||
|
||
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 gpointer parent_class = NULL;
|
||
|
||
|
||
GType
|
||
e_url_entry_get_type (void)
|
||
{
|
||
static GType type = 0;
|
||
|
||
if (G_UNLIKELY (type == 0)) {
|
||
static const GTypeInfo type_info = {
|
||
sizeof (EUrlEntryClass),
|
||
(GBaseInitFunc) NULL,
|
||
(GBaseFinalizeFunc) NULL,
|
||
(GClassInitFunc) class_init,
|
||
(GClassFinalizeFunc) NULL,
|
||
NULL, /* class_data */
|
||
sizeof (EUrlEntry),
|
||
0, /* n_preallocs */
|
||
(GInstanceInitFunc) init,
|
||
NULL /* value_table */
|
||
};
|
||
|
||
type = g_type_register_static (
|
||
GTK_TYPE_HBOX, "EUrlEntry", &type_info, 0);
|
||
}
|
||
|
||
return type;
|
||
}
|
||
|
||
static void
|
||
class_init (EUrlEntryClass *class)
|
||
{
|
||
GObjectClass *object_class;
|
||
GtkWidgetClass *widget_class;
|
||
|
||
parent_class = g_type_class_peek_parent (class);
|
||
|
||
object_class = G_OBJECT_CLASS (class);
|
||
object_class->finalize = finalize;
|
||
|
||
widget_class = GTK_WIDGET_CLASS (class);
|
||
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 = gtk_image_new_from_icon_name ("go-jump", GTK_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
|
||
finalize (GObject *object)
|
||
{
|
||
EUrlEntry *url_entry;
|
||
|
||
url_entry = E_URL_ENTRY (object);
|
||
if (url_entry->priv) {
|
||
g_free (url_entry->priv);
|
||
url_entry->priv = NULL;
|
||
}
|
||
|
||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||
}
|
||
|
||
/* 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');
|
||
}
|