]> spindle.queued.net Git - midori/commitdiff
Require GTK+ 2.16 or later
authorChristian Dywan <christian@twotoasts.de>
Thu, 19 Jul 2012 23:22:38 +0000 (01:22 +0200)
committerChristian Dywan <christian@twotoasts.de>
Thu, 19 Jul 2012 23:22:38 +0000 (01:22 +0200)
15 files changed:
README
extensions/addons.c
extensions/cookie-manager/cookie-manager-page.c
extensions/tab-panel.c
katze/gtk3-compat.c
katze/gtk3-compat.h
katze/katze-utils.c
midori/gtkiconentry.c
midori/gtkiconentry.h
midori/midori-browser.c
midori/midori-locationaction.c
midori/midori-view.c
midori/sokoke.c
toolbars/midori-findbar.c
wscript

diff --git a/README b/README
index 88f8a39642af4f9ff47495c1e96c2f473631e9a3..cc78dc95d2408792e9d1fc47ff70f56e7994357b 100644 (file)
--- a/README
+++ b/README
@@ -11,10 +11,10 @@ Midori is a lightweight web browser.
 * Straightforward bookmark management.
 * Customizable interface, extensions written in C and Vala.
 
-Requirements: GLib 2.22, GTK+ 2.10, WebkitGTK+ 1.1.17, libXML2,
+Requirements: GLib 2.22, GTK+ 2.16, WebkitGTK+ 1.1.17, libXML2,
               libsoup 2.27.90, sqlite 3.0, Vala 0.14
 
-Optional: GTK+ 3.0, Unique 0.9, libnotify
+Optional: GTK+ 3.0, Unique 0.9, libnotify, gcr
 
 For installation instructions read INSTALL.
 
index ad705a118e20c7a75f782cccb8ae690836bbdecc..5cfce23d626b9d229b388e843d5e69274bc0e3e9 100644 (file)
@@ -336,23 +336,13 @@ addons_button_add_clicked_cb (GtkToolItem* toolitem,
         if (!g_file_test (path, G_FILE_TEST_EXISTS))
             katze_mkdir_with_parents (path, 0700);
 
-        #if !GTK_CHECK_VERSION (2, 14, 0)
-        files = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (dialog));
-        #else
         files = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (dialog));
-        #endif
-
         while (files)
         {
             GFile* src_file;
             GError* error = NULL;
 
-            #if !GTK_CHECK_VERSION (2, 14, 0)
-            src_file = g_file_new_for_path (files);
-            #else
             src_file = files->data;
-            #endif
-
             if (G_IS_FILE (src_file))
             {
                 GFile* dest_file;
index d21d128d20268b37e77f1d96dced9f0221f775d1..422b3db1ad59772a5086ef4847ce42ba52ab902b 100644 (file)
@@ -702,7 +702,6 @@ static gchar *cm_get_domain_description_text(const gchar *domain, gint cookie_co
 }
 
 
-#if GTK_CHECK_VERSION(2, 12, 0)
 static gboolean cm_tree_query_tooltip(GtkWidget *widget, gint x, gint y, gboolean keyboard_mode,
                                                                          GtkTooltip *tooltip, CookieManagerPage *cmp)
 {
@@ -731,8 +730,6 @@ static gboolean cm_tree_query_tooltip(GtkWidget *widget, gint x, gint y, gboolea
 
        return FALSE;
 }
-#endif
-
 
 static gboolean cm_filter_match(const gchar *haystack, const gchar *needle)
 {
@@ -1045,10 +1042,8 @@ static GtkWidget *cm_tree_prepare(CookieManagerPage *cmp)
        g_signal_connect(treeview, "popup-menu", G_CALLBACK(cm_tree_popup_menu_cb), cmp);
 
        /* tooltips */
-#if GTK_CHECK_VERSION(2, 12, 0)
        gtk_widget_set_has_tooltip(treeview, TRUE);
        g_signal_connect(treeview, "query-tooltip", G_CALLBACK(cm_tree_query_tooltip), cmp);
-#endif
 
        /* drag'n'drop */
        gtk_tree_view_enable_model_drag_source(
index 24600dfc0c5032fe6d7c64785cb8f8ad98481cdd..44e23e6a3fceb1ad6bb25d162219c42c31a26590 100644 (file)
@@ -143,7 +143,6 @@ midori_extension_cursor_or_row_changed_cb (GtkTreeView*     treeview,
     /* Nothing to do */
 }
 
-#if GTK_CHECK_VERSION (2, 12, 0)
 static gboolean
 tab_panel_treeview_query_tooltip_cb (GtkWidget*  treeview,
                                      gint        x,
@@ -171,7 +170,6 @@ tab_panel_treeview_query_tooltip_cb (GtkWidget*  treeview,
 
     return TRUE;
 }
-#endif
 
 static void
 midori_extension_row_activated_cb (GtkTreeView*       treeview,
@@ -534,11 +532,9 @@ tab_panel_app_add_browser_cb (MidoriApp*       app,
     treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
     gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
     gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (treeview), FALSE);
-    #if GTK_CHECK_VERSION (2, 12, 0)
     g_signal_connect (treeview, "query-tooltip",
         G_CALLBACK (tab_panel_treeview_query_tooltip_cb), NULL);
     gtk_widget_set_has_tooltip (treeview, TRUE);
-    #endif
     column = gtk_tree_view_column_new ();
     renderer_pixbuf = gtk_cell_renderer_pixbuf_new ();
     gtk_tree_view_column_pack_start (column, renderer_pixbuf, FALSE);
index 8be809144af9f033ff18d6c069003a0cd0b28bc2..9586aac851aa30afa81b480920187d8014b5293e 100644 (file)
@@ -110,41 +110,3 @@ gtk_entry_get_placeholder_text (GtkEntry* entry)
 }
 #endif
 
-#if !GTK_CHECK_VERSION (2, 12, 0)
-
-void
-gtk_widget_set_has_tooltip (GtkWidget* widget,
-                            gboolean   has_tooltip)
-{
-    /* Do nothing */
-}
-
-void
-gtk_widget_set_tooltip_text (GtkWidget*   widget,
-                             const gchar* text)
-{
-    if (text && *text)
-    {
-        static GtkTooltips* tooltips = NULL;
-        if (G_UNLIKELY (!tooltips))
-            tooltips = gtk_tooltips_new ();
-        gtk_tooltips_set_tip (tooltips, widget, text, NULL);
-    }
-}
-
-void
-gtk_tool_item_set_tooltip_text (GtkToolItem* toolitem,
-                                const gchar* text)
-{
-    if (text && *text)
-    {
-        static GtkTooltips* tooltips = NULL;
-        if (G_UNLIKELY (!tooltips))
-            tooltips = gtk_tooltips_new ();
-
-        gtk_tool_item_set_tooltip (toolitem, tooltips, text, NULL);
-    }
-}
-
-#endif
-
index 71a1ef19285e8f6fceb78a3360713af116e19331..12981b1a49fb62f96aacf11a0ab381984e6bc8d7 100644 (file)
@@ -39,25 +39,6 @@ G_BEGIN_DECLS
     #define g_format_size(sz) g_format_size_for_display ((goffset)sz)
 #endif
 
-#if !GTK_CHECK_VERSION (2, 14, 0)
-    #define gtk_dialog_get_content_area(dlg) dlg->vbox
-    #define gtk_dialog_get_action_area(dlg) dlg->action_area
-    #define gtk_widget_get_window(wdgt) wdgt->window
-    #define gtk_adjustment_get_page_size(adj) adj->page_size
-    #define gtk_adjustment_get_upper(adj) adj->upper
-    #define gtk_adjustment_get_lower(adj) adj->lower
-    #define gtk_adjustment_get_value(adj) adj->value
-#endif
-
-#if !GTK_CHECK_VERSION (2, 16, 0)
-    #define GTK_ACTIVATABLE GTK_WIDGET
-    #define gtk_activatable_get_related_action gtk_widget_get_action
-    #define gtk_menu_item_set_label(menuitem, label) \
-        gtk_label_set_label (GTK_LABEL (GTK_BIN (menuitem)->child), \
-                             label ? label : "");
-    #define gtk_image_menu_item_set_always_show_image(menuitem, yesno) ()
-#endif
-
 #if !GTK_CHECK_VERSION (2, 18, 0)
     #define gtk_widget_is_toplevel(widget) GTK_WIDGET_TOPLEVEL (widget)
     #define gtk_widget_has_focus(widget) GTK_WIDGET_HAS_FOCUS (widget)
@@ -95,22 +76,6 @@ G_BEGIN_DECLS
     const gchar* gtk_entry_get_placeholder_text (GtkEntry* entry);
 #endif
 
-#if !GTK_CHECK_VERSION(2, 12, 0)
-
-void
-gtk_widget_set_has_tooltip             (GtkWidget*         widget,
-                                        gboolean           has_tooltip);
-
-void
-gtk_widget_set_tooltip_text            (GtkWidget*         widget,
-                                        const gchar*       text);
-
-void
-gtk_tool_item_set_tooltip_text         (GtkToolItem*       toolitem,
-                                        const gchar*       text);
-
-#endif
-
 #if !GTK_CHECK_VERSION (2, 24 ,0)
     #define gtk_combo_box_text_append_text gtk_combo_box_append_text
     #define gtk_combo_box_text_new gtk_combo_box_new_text
index 9b41d81510f1ea9f98cbc492c62974f509699602..6842581b473947c1d8c85a3e8ef359c6ffa32d92 100644 (file)
@@ -277,7 +277,6 @@ proxy_combo_box_changed_cb (GtkComboBox* button,
 
     if (custom_value)
     {
-        #if GTK_CHECK_VERSION (2, 12, 0)
         if (value == custom_value)
             gtk_widget_set_tooltip_text (GTK_WIDGET (button), NULL);
         else
@@ -286,7 +285,6 @@ proxy_combo_box_changed_cb (GtkComboBox* button,
             gtk_widget_set_tooltip_text (GTK_WIDGET (button), custom_text);
             g_free (custom_text);
         }
-        #endif
     }
 }
 #endif
@@ -523,14 +521,8 @@ katze_property_proxy (gpointer     object,
             string = g_strdup (G_PARAM_SPEC_STRING (pspec)->default_value);
         gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (widget),
                                   string ? string : "");
-        #if GTK_CHECK_VERSION (2, 12, 0)
         g_signal_connect (widget, "file-set",
                           G_CALLBACK (proxy_uri_file_set_cb), object);
-        #else
-        if (pspec->flags & G_PARAM_WRITABLE)
-            g_signal_connect (widget, "selection-changed",
-                              G_CALLBACK (proxy_uri_file_set_cb), object);
-        #endif
     }
     else if (type == G_TYPE_PARAM_STRING && (_hint == I_("font")
         || _hint == I_("font-monospace")))
@@ -819,10 +811,8 @@ katze_property_proxy (gpointer     object,
                 g_object_set_data_full (G_OBJECT (entry), "property",
                                         g_strdup (custom), g_free);
             }
-            #if GTK_CHECK_VERSION (2, 12, 0)
             else
                 gtk_widget_set_tooltip_text (widget, custom_text);
-            #endif
 
             g_free (custom_text);
 
@@ -837,10 +827,8 @@ katze_property_proxy (gpointer     object,
         widget = gtk_label_new (gettext (nick));
     g_free (string);
 
-    #if GTK_CHECK_VERSION (2, 12, 0)
     if (!gtk_widget_get_tooltip_text (widget))
         gtk_widget_set_tooltip_text (widget, g_param_spec_get_blurb (pspec));
-    #endif
     gtk_widget_set_sensitive (widget, pspec->flags & G_PARAM_WRITABLE);
 
     g_object_set_data_full (G_OBJECT (widget), "property",
@@ -888,9 +876,7 @@ katze_property_label (gpointer     object,
 
     nick = g_param_spec_get_nick (pspec);
     widget = gtk_label_new (nick);
-    #if GTK_CHECK_VERSION (2, 12, 0)
     gtk_widget_set_tooltip_text (widget, g_param_spec_get_blurb (pspec));
-    #endif
     gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
 
     return widget;
@@ -1583,10 +1569,8 @@ katze_uri_entry_new (GtkWidget* other_widget)
 {
     GtkWidget* entry = gtk_entry_new ();
 
-    #if GTK_CHECK_VERSION (2, 16, 0)
     gtk_entry_set_icon_from_gicon (GTK_ENTRY (entry), GTK_ENTRY_ICON_PRIMARY,
         g_themed_icon_new_with_default_fallbacks ("text-html-symbolic"));
-    #endif
     g_signal_connect (entry, "changed",
         G_CALLBACK (katze_uri_entry_changed_cb), other_widget);
     return entry;
index 6e5b97bac187de02538cb7720242a6911f8055fb..c15ac1f64dfe2c08022a7f46cbef7a41c5377bb6 100644 (file)
@@ -1,27 +1,5 @@
-/*
- * Copyright (C) 2004-2006 Christian Hammond.
- * Copyright (C) 2008 Cody Russell  <bratsche@gnome.org>
- *
- * This library 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 library 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 library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA  02111-1307, USA.
- */
-
 #include "gtkiconentry.h"
 
-#if GTK_CHECK_VERSION (2, 16, 0)
-
 void
 gtk_icon_entry_set_icon_from_pixbuf (GtkEntry*            entry,
                                      GtkEntryIconPosition position,
@@ -36,1906 +14,3 @@ gtk_icon_entry_set_icon_from_pixbuf (GtkEntry*            entry,
     gtk_entry_set_icon_activatable (entry, position, activatable);
 }
 
-#else
-
-#include <string.h>
-
-#if GTK_CHECK_VERSION (2, 14, 0)
-#define _GTK_IMAGE_GICON GTK_IMAGE_GICON
-#else
-#define _GTK_IMAGE_GICON 8
-#endif
-
-#ifndef GTK_PARAM_READABLE
-#define GTK_PARAM_READABLE G_PARAM_READABLE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB
-#endif
-
-#ifndef GTK_PARAM_WRITABLE
-#define GTK_PARAM_WRITABLE G_PARAM_WRITABLE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB
-#endif
-
-#ifndef GTK_PARAM_READWRITE
-#define GTK_PARAM_READWRITE G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB
-#endif
-
-#define P_(s) (s)
-
-#define ICON_MARGIN 2
-#define MAX_ICONS 2
-
-#define IS_VALID_ICON_ENTRY_POSITION(pos) \
-       ((pos) == GTK_ICON_ENTRY_PRIMARY || \
-        (pos) == GTK_ICON_ENTRY_SECONDARY)
-
-typedef struct
-{
-  GdkPixbuf *pixbuf;
-  gboolean highlight;
-  gboolean hovered;
-  GdkWindow *window;
-  gchar *tooltip_text;
-  GdkCursorType cursor_type;
-  gboolean custom_cursor;
-  GtkImageType storage_type;
-  GIcon *gicon;
-  gchar *icon_name;
-  gboolean insensitive;
-} EntryIconInfo;
-
-struct _GtkIconEntryPrivate
-{
-  gdouble fraction;
-  EntryIconInfo icons[MAX_ICONS];
-
-  gulong icon_released_id;
-};
-
-enum
-{
-  ICON_PRESSED,
-  ICON_RELEASED,
-  LAST_SIGNAL
-};
-
-enum
-{
-  PROP_0,
-  PROP_PIXBUF_PRIMARY,
-  PROP_PIXBUF_SECONDARY,
-  PROP_STOCK_PRIMARY,
-  PROP_STOCK_SECONDARY,
-  PROP_ICON_NAME_PRIMARY,
-  PROP_ICON_NAME_SECONDARY,
-  PROP_GICON_PRIMARY,
-  PROP_GICON_SECONDARY,
-  PROP_SENSITIVITY_PRIMARY,
-  PROP_SENSITIVITY_SECONDARY
-};
-
-static void gtk_icon_entry_editable_init     (GtkEditableClass     *iface);
-static void gtk_icon_entry_finalize          (GObject              *obj);
-static void gtk_icon_entry_dispose           (GObject              *obj);
-static void gtk_icon_entry_map               (GtkWidget            *widget);
-static void gtk_icon_entry_unmap             (GtkWidget            *widget);
-static void gtk_icon_entry_realize           (GtkWidget            *widget);
-static void gtk_icon_entry_unrealize         (GtkWidget            *widget);
-static void gtk_icon_entry_size_request      (GtkWidget            *widget,
-                                             GtkRequisition       *requisition);
-static void gtk_icon_entry_size_allocate     (GtkWidget            *widget,
-                                             GtkAllocation        *allocation);
-static gint gtk_icon_entry_expose            (GtkWidget            *widget,
-                                             GdkEventExpose       *event);
-static gint gtk_icon_entry_enter_notify      (GtkWidget            *widget,
-                                             GdkEventCrossing     *event);
-static gint gtk_icon_entry_leave_notify      (GtkWidget            *widget,
-                                             GdkEventCrossing     *event);
-static gint gtk_icon_entry_button_press      (GtkWidget            *widget,
-                                             GdkEventButton       *event);
-static gint gtk_icon_entry_button_release    (GtkWidget            *widget,
-                                             GdkEventButton       *event);
-static void gtk_icon_entry_set_property      (GObject              *object,
-                                             guint                 prop_id,
-                                             const GValue         *value,
-                                             GParamSpec           *pspec);
-static void gtk_icon_entry_get_property      (GObject              *object,
-                                             guint                 prop_id,
-                                             GValue               *value,
-                                             GParamSpec           *pspec);
-static void gtk_icon_entry_style_set         (GtkWidget            *widget,
-                                             GtkStyle             *prev_style);
-static void gtk_icon_entry_set_icon_internal (GtkIconEntry         *entry,
-                                             GtkIconEntryPosition  icon_pos,
-                                             GdkPixbuf            *pixbuf);
-static void icon_theme_changed               (GtkIconEntry         *entry);
-
-
-static GtkEntryClass *parent_class = NULL;
-static guint signals[LAST_SIGNAL] = {0};
-
-G_DEFINE_TYPE_EXTENDED (GtkIconEntry, gtk_icon_entry, GTK_TYPE_ENTRY,
-                       0,
-                       G_IMPLEMENT_INTERFACE (GTK_TYPE_EDITABLE,
-                                              gtk_icon_entry_editable_init));
-
-static void
-gtk_icon_entry_class_init (GtkIconEntryClass *klass)
-{
-  GObjectClass *gobject_class;
-  GtkObjectClass *object_class;
-  GtkWidgetClass *widget_class;
-  GtkEntryClass *entry_class;
-
-  parent_class = g_type_class_peek_parent(klass);
-
-  gobject_class = G_OBJECT_CLASS(klass);
-  object_class  = GTK_OBJECT_CLASS(klass);
-  widget_class  = GTK_WIDGET_CLASS(klass);
-  entry_class   = GTK_ENTRY_CLASS(klass);
-
-  gobject_class->finalize = gtk_icon_entry_finalize;
-  gobject_class->dispose = gtk_icon_entry_dispose;
-  gobject_class->set_property = gtk_icon_entry_set_property;
-  gobject_class->get_property = gtk_icon_entry_get_property;
-
-  widget_class->map = gtk_icon_entry_map;
-  widget_class->unmap = gtk_icon_entry_unmap;
-  widget_class->realize = gtk_icon_entry_realize;
-  widget_class->unrealize = gtk_icon_entry_unrealize;
-  widget_class->size_request = gtk_icon_entry_size_request;
-  widget_class->size_allocate = gtk_icon_entry_size_allocate;
-  widget_class->expose_event = gtk_icon_entry_expose;
-  widget_class->enter_notify_event = gtk_icon_entry_enter_notify;
-  widget_class->leave_notify_event = gtk_icon_entry_leave_notify;
-  widget_class->button_press_event = gtk_icon_entry_button_press;
-  widget_class->button_release_event = gtk_icon_entry_button_release;
-  widget_class->style_set = gtk_icon_entry_style_set;
-
-  /**
-   * GtkIconEntry::icon-pressed:
-   * @entry: The entry on which the signal is emitted.
-   * @icon_pos: The position of the clicked icon.
-   * @button: The mouse button clicked.
-   *
-   * The ::icon-pressed signal is emitted when an icon is clicked.
-   */
-  if (!(signals[ICON_PRESSED] = g_signal_lookup ("icon-pressed", GTK_TYPE_ENTRY)))
-  signals[ICON_PRESSED] =
-    g_signal_new ("icon-pressed",
-                 G_TYPE_FROM_CLASS (gobject_class),
-                 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-                 G_STRUCT_OFFSET (GtkIconEntryClass, icon_pressed),
-                 NULL, NULL,
-                 gtk_marshal_VOID__INT_INT,
-                 G_TYPE_NONE, 2,
-                 G_TYPE_INT,
-                 G_TYPE_INT);
-
-  /**
-   * GtkIconEntry::icon-release:
-   * @entry: The entry on which the signal is emitted.
-   * @icon_pos: The position of the clicked icon.
-   * @button: The mouse button clicked.
-   *
-   * The ::icon-release signal is emitted on the button release from a
-   * mouse click.
-   */
-  if (!(signals[ICON_RELEASED] = g_signal_lookup ("icon-release", GTK_TYPE_ENTRY)))
-  signals[ICON_RELEASED] =
-    g_signal_new ("icon-release",
-                 G_TYPE_FROM_CLASS (gobject_class),
-                 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-                 G_STRUCT_OFFSET (GtkIconEntryClass, icon_released),
-                 NULL, NULL,
-                 gtk_marshal_VOID__INT_INT,
-                 G_TYPE_NONE, 2,
-                 G_TYPE_INT,
-                 G_TYPE_INT);
-
-  /**
-   * GtkIconEntry:pixbuf-primary:
-   *
-   * An image to use as the primary icon for the entry.
-   */
-  g_object_class_install_property (gobject_class,
-                                  PROP_PIXBUF_PRIMARY,
-                                  g_param_spec_object ("pixbuf-primary",
-                                                       P_("Primary pixbuf"),
-                                                       P_("Primary pixbuf for the entry"),
-                                                       GDK_TYPE_PIXBUF,
-                                                       GTK_PARAM_READWRITE));
-
-  /**
-   * GtkIconEntry:pixbuf-secondary:
-   *
-   * An image to use as the secondary icon for the entry.
-   */
-  g_object_class_install_property (gobject_class,
-                                  PROP_PIXBUF_SECONDARY,
-                                  g_param_spec_object ("pixbuf-secondary",
-                                                       P_("Secondary pixbuf"),
-                                                       P_("Secondary pixbuf for the entry"),
-                                                       GDK_TYPE_PIXBUF,
-                                                       GTK_PARAM_READWRITE));
-
-  g_object_class_install_property (gobject_class,
-                                  PROP_STOCK_PRIMARY,
-                                  g_param_spec_string ("stock-primary",
-                                                       P_("Primary stock ID"),
-                                                       P_("Stock ID for primary icon"),
-                                                       NULL,
-                                                       GTK_PARAM_WRITABLE));
-
-  g_object_class_install_property (gobject_class,
-                                  PROP_STOCK_SECONDARY,
-                                  g_param_spec_string ("stock-secondary",
-                                                       P_("Secondary stock ID"),
-                                                       P_("Stock ID for secondary icon"),
-                                                       NULL,
-                                                       GTK_PARAM_WRITABLE));
-
-  g_object_class_install_property (gobject_class,
-                                  PROP_ICON_NAME_PRIMARY,
-                                  g_param_spec_string ("icon-name-primary",
-                                                       P_("Primary icon name"),
-                                                       P_("Icon name for primary icon"),
-                                                       NULL,
-                                                       GTK_PARAM_WRITABLE));
-
-  g_object_class_install_property (gobject_class,
-                                  PROP_ICON_NAME_SECONDARY,
-                                  g_param_spec_string ("icon-name-secondary",
-                                                       P_("Secondary icon name"),
-                                                       P_("Icon name for secondary icon"),
-                                                       NULL,
-                                                       GTK_PARAM_WRITABLE));
-
-  g_object_class_install_property (gobject_class,
-                                  PROP_GICON_PRIMARY,
-                                  g_param_spec_object ("gicon-primary",
-                                                       P_("Primary GIcon"),
-                                                       P_("GIcon for primary icon"),
-                                                       G_TYPE_ICON,
-                                                       GTK_PARAM_READWRITE));
-
-  g_object_class_install_property (gobject_class,
-                                  PROP_GICON_SECONDARY,
-                                  g_param_spec_object ("gicon-secondary",
-                                                       P_("Secondary GIcon"),
-                                                       P_("GIcon for secondary icon"),
-                                                       G_TYPE_ICON,
-                                                       GTK_PARAM_READWRITE));
-
-  g_type_class_add_private (klass, sizeof (GtkIconEntryPrivate));
-}
-
-static void
-gtk_icon_entry_editable_init (GtkEditableClass *iface)
-{
-};
-
-/* GTK+/ GtkEntry internal helper function
-   Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
-   Modified by the GTK+ Team and others 1997-2000
-   Copied from Gtk+ 2.13, whitespace adjusted */
-static void
-gtk_entry_get_pixel_ranges (GtkEntry  *entry,
-                            gint     **ranges,
-                            gint      *n_ranges)
-{
-  gint start_char, end_char;
-
-  if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry),
-                                         &start_char, &end_char))
-    {
-      PangoLayout *layout = gtk_entry_get_layout (entry);
-      PangoLayoutLine *line = pango_layout_get_lines (layout)->data;
-      const char *text = pango_layout_get_text (layout);
-      gsize start_index = g_utf8_offset_to_pointer (text, start_char) - text;
-      gsize end_index = g_utf8_offset_to_pointer (text, end_char) - text;
-      gint real_n_ranges, i;
-
-      pango_layout_line_get_x_ranges (line,
-          start_index, end_index, ranges, &real_n_ranges);
-
-      if (ranges)
-        {
-          gint *r = *ranges;
-
-          for (i = 0; i < real_n_ranges; ++i)
-            {
-              r[2 * i + 1] = (r[2 * i + 1] - r[2 * i]) / PANGO_SCALE;
-              r[2 * i] = r[2 * i] / PANGO_SCALE;
-            }
-        }
-
-      if (n_ranges)
-        *n_ranges = real_n_ranges;
-    }
-  else
-    {
-      if (n_ranges)
-        *n_ranges = 0;
-      if (ranges)
-        *ranges = NULL;
-    }
-}
-
-/* GTK+/ GtkEntry internal helper function
-   Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
-   Modified by the GTK+ Team and others 1997-2000
-   Copied from Gtk+ 2.13, whitespace adjusted
-   Code adjusted to not rely on internal qdata */
-static void
-_gtk_entry_effective_inner_border (GtkEntry  *entry,
-                                   GtkBorder *border)
-{
-  static const GtkBorder default_inner_border = { 2, 2, 2, 2 };
-  GtkBorder *tmp_border;
-
-  tmp_border = (GtkBorder*) gtk_entry_get_inner_border (entry);
-
-  if (tmp_border)
-    {
-      *border = *tmp_border;
-      return;
-    }
-
-  gtk_widget_style_get (GTK_WIDGET (entry), "inner-border", &tmp_border, NULL);
-
-  if (tmp_border)
-    {
-      *border = *tmp_border;
-      gtk_border_free (tmp_border);
-      return;
-    }
-
-  *border = default_inner_border;
-}
-
-static void
-gtk_entry_borders (GtkEntry* entry,
-                   gint*     xborder,
-                   gint*     yborder,
-                   gboolean* interior_focus,
-                   gint*     focus_width)
-{
-  GtkWidget *widget = GTK_WIDGET (entry);
-
-  if (entry->has_frame)
-    {
-      *xborder = widget->style->xthickness;
-      *yborder = widget->style->ythickness;
-    }
-  else
-    {
-      *xborder = 0;
-      *yborder = 0;
-    }
-
-  gtk_widget_style_get (widget, "interior-focus", interior_focus,
-                        "focus-line-width", focus_width, NULL);
-
-  if (interior_focus)
-    {
-      *xborder += *focus_width;
-      *yborder += *focus_width;
-    }
-}
-
-/* GTK+/ GtkEntry internal helper function
-   Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
-   Modified by the GTK+ Team and others 1997-2000
-   Copied from Gtk+ 2.13, whitespace adjusted */
-static void
-gtk_entry_get_text_area_size (GtkEntry *entry,
-                              gint     *x,
-                              gint     *y,
-                              gint     *width,
-                              gint     *height)
-{
-  gint frame_height;
-  gint xborder, yborder;
-  gboolean interior_focus;
-  gint focus_width;
-  GtkRequisition requisition;
-  GtkWidget *widget = GTK_WIDGET (entry);
-
-  gtk_widget_get_child_requisition (widget, &requisition);
-  gtk_entry_borders (entry, &xborder, &yborder, &interior_focus, &focus_width);
-
-  if (GTK_WIDGET_REALIZED (widget))
-    gdk_drawable_get_size (widget->window, NULL, &frame_height);
-  else
-    frame_height = requisition.height;
-
-  if (GTK_WIDGET_HAS_FOCUS (widget) && interior_focus)
-      frame_height -= 2 * focus_width;
-
-  if (x)
-    *x = xborder;
-
-  if (y)
-    *y = frame_height / 2 - (requisition.height - yborder * 2) / 2;
-
-  if (width)
-    *width = GTK_WIDGET (entry)->allocation.width - xborder * 2;
-
-  if (height)
-    *height = requisition.height - yborder * 2;
-}
-
-/* GTK+/ GtkEntry internal helper function
-   Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
-   Modified by the GTK+ Team and others 1997-2000
-   Copied from Gtk+ 2.13, whitespace adjusted */
-static void
-get_layout_position (GtkEntry *entry,
-                     gint     *x,
-                     gint     *y)
-{
-  PangoLayout *layout;
-  PangoRectangle logical_rect;
-  gint area_width, area_height;
-  GtkBorder inner_border;
-  gint y_pos;
-  PangoLayoutLine *line;
-
-  layout = gtk_entry_get_layout (entry);
-
-  gtk_entry_get_text_area_size (entry, NULL, NULL, &area_width, &area_height);
-  _gtk_entry_effective_inner_border (entry, &inner_border);
-
-  area_height = PANGO_SCALE *
-                (area_height - inner_border.top - inner_border.bottom);
-
-  line = pango_layout_get_lines (layout)->data;
-  pango_layout_line_get_extents (line, NULL, &logical_rect);
-
-  /* Align primarily for locale's ascent/descent */
-  y_pos = ((area_height - entry->ascent - entry->descent) / 2 +
-           entry->ascent + logical_rect.y);
-
-  /* Now see if we need to adjust to fit in actual drawn string */
-  if (logical_rect.height > area_height)
-    y_pos = (area_height - logical_rect.height) / 2;
-  else if (y_pos < 0)
-    y_pos = 0;
-  else if (y_pos + logical_rect.height > area_height)
-    y_pos = area_height - logical_rect.height;
-
-  y_pos = inner_border.top + y_pos / PANGO_SCALE;
-
-  if (x)
-    *x = inner_border.left - entry->scroll_offset;
-
-  if (y)
-    *y = y_pos;
-}
-
-/* GTK+/ GtkEntry internal helper function
-   Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
-   Modified by the GTK+ Team and others 1997-2000
-   Copied from Gtk+ 2.13, whitespace adjusted
-   Code adjusted to not rely on internal _gtk_entry_ensure_layout */
-static void
-gtk_entry_draw_text (GtkEntry *entry)
-{
-  GtkWidget *widget;
-
-  if (!entry->visible && entry->invisible_char == 0)
-    return;
-
-  if (GTK_WIDGET_DRAWABLE (entry))
-    {
-      PangoLayout *layout = gtk_entry_get_layout (entry);
-      cairo_t *cr;
-      gint x, y;
-      gint start_pos, end_pos;
-
-      widget = GTK_WIDGET (entry);
-
-      get_layout_position (entry, &x, &y);
-
-      cr = gdk_cairo_create (entry->text_area);
-
-      cairo_move_to (cr, x, y);
-      gdk_cairo_set_source_color (cr, &widget->style->text [widget->state]);
-      pango_cairo_show_layout (cr, layout);
-
-      if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry),
-                                             &start_pos, &end_pos))
-        {
-          gint *ranges;
-          gint n_ranges, i;
-          PangoRectangle logical_rect;
-          GdkColor *selection_color, *text_color;
-          GtkBorder inner_border;
-
-          pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
-          gtk_entry_get_pixel_ranges (entry, &ranges, &n_ranges);
-
-          if (GTK_WIDGET_HAS_FOCUS (entry))
-            {
-              selection_color = &widget->style->base [GTK_STATE_SELECTED];
-              text_color = &widget->style->text [GTK_STATE_SELECTED];
-            }
-          else
-            {
-              selection_color = &widget->style->base [GTK_STATE_ACTIVE];
-              text_color = &widget->style->text [GTK_STATE_ACTIVE];
-            }
-
-          _gtk_entry_effective_inner_border (entry, &inner_border);
-
-          for (i = 0; i < n_ranges; ++i)
-            cairo_rectangle (cr,
-                             inner_border.left -
-                             entry->scroll_offset + ranges[2 * i],
-                             y,
-                             ranges[2 * i + 1],
-                             logical_rect.height);
-
-          cairo_clip (cr);
-
-          gdk_cairo_set_source_color (cr, selection_color);
-          cairo_paint (cr);
-
-          cairo_move_to (cr, x, y);
-          gdk_cairo_set_source_color (cr, text_color);
-          pango_cairo_show_layout (cr, layout);
-
-          g_free (ranges);
-        }
-
-      cairo_destroy (cr);
-    }
-}
-
-static gboolean
-entry_expose_event (GtkWidget*      entry,
-                    GdkEventExpose* event,
-                    GtkIconEntry*   icon_entry)
-{
-  GtkIconEntryPrivate *priv;
-  GdkWindow* text_area;
-  gint width, height;
-
-  priv = icon_entry->priv;
-  text_area = GTK_ENTRY (entry)->text_area;
-  gdk_drawable_get_size (text_area, &width, &height);
-
-  if (priv->fraction > 0.0)
-  {
-      gtk_paint_box (entry->style, text_area,
-                     GTK_STATE_SELECTED, GTK_SHADOW_OUT,
-                     &event->area, entry, "entry-progress",
-                     0, 0, priv->fraction * width, height);
-      gtk_entry_draw_text (GTK_ENTRY (entry));
-  }
-  return FALSE;
-}
-
-static void
-gtk_icon_entry_init (GtkIconEntry *entry)
-{
-  entry->priv = G_TYPE_INSTANCE_GET_PRIVATE (entry, GTK_TYPE_ICON_ENTRY,
-                                             GtkIconEntryPrivate);
-
-  g_signal_connect_after (entry, "expose-event",
-    G_CALLBACK (entry_expose_event), entry);
-}
-
-static void
-gtk_icon_entry_finalize (GObject *obj)
-{
-  GtkIconEntry *entry;
-
-  g_return_if_fail (obj != NULL);
-  g_return_if_fail (GTK_IS_ICON_ENTRY(obj));
-
-  entry = GTK_ICON_ENTRY (obj);
-
-  G_OBJECT_CLASS (parent_class)->finalize (obj);
-}
-
-static void
-gtk_icon_entry_dispose (GObject *obj)
-{
-  GtkIconEntry *entry;
-
-  entry = GTK_ICON_ENTRY (obj);
-
-  gtk_icon_entry_set_icon_from_pixbuf (entry, GTK_ICON_ENTRY_PRIMARY, NULL);
-  gtk_icon_entry_set_icon_from_pixbuf (entry, GTK_ICON_ENTRY_SECONDARY, NULL);
-
-  G_OBJECT_CLASS (parent_class)->dispose (obj);
-}
-
-static void
-gtk_icon_entry_map (GtkWidget *widget)
-{
-  GtkIconEntryPrivate *priv;
-  GdkCursor *cursor;
-
-  if (GTK_WIDGET_REALIZED (widget) && !GTK_WIDGET_MAPPED (widget))
-    {
-      int i;
-
-      GTK_WIDGET_CLASS (parent_class)->map (widget);
-
-      priv = GTK_ICON_ENTRY (widget)->priv;
-
-      for (i = 0; i < MAX_ICONS; i++)
-       {
-         if (priv->icons[i].pixbuf != NULL)
-           gdk_window_show (priv->icons[i].window);
-
-         if (priv->icons[i].custom_cursor == TRUE && !priv->icons[i].insensitive)
-           {
-             cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget),
-                                                  priv->icons[i].cursor_type);
-
-             gdk_window_set_cursor (priv->icons[i].window, cursor);
-             gdk_cursor_unref (cursor);
-           }
-       }
-
-      GTK_WIDGET_CLASS (parent_class)->map (widget);
-    }
-}
-
-static void
-gtk_icon_entry_unmap (GtkWidget *widget)
-{
-  GtkIconEntryPrivate *priv;
-
-  if (GTK_WIDGET_MAPPED (widget))
-    {
-      int i;
-
-      priv = GTK_ICON_ENTRY (widget)->priv;
-
-      for (i = 0; i < MAX_ICONS; i++)
-       {
-         if (priv->icons[i].pixbuf != NULL)
-           {
-             gdk_window_hide (priv->icons[i].window);
-           }
-       }
-
-      GTK_WIDGET_CLASS (parent_class)->unmap (widget);
-    }
-}
-
-static void
-gtk_icon_entry_set_property (GObject      *object,
-                            guint         prop_id,
-                            const GValue *value,
-                            GParamSpec   *pspec)
-{
-  GtkIconEntry *entry = GTK_ICON_ENTRY (object);
-
-  switch (prop_id)
-    {
-    case PROP_PIXBUF_PRIMARY:
-      gtk_icon_entry_set_icon_from_pixbuf (entry,
-                                          GTK_ICON_ENTRY_PRIMARY,
-                                          g_value_get_object (value));
-      break;
-
-    case PROP_PIXBUF_SECONDARY:
-      gtk_icon_entry_set_icon_from_pixbuf (entry,
-                                          GTK_ICON_ENTRY_SECONDARY,
-                                          g_value_get_object (value));
-      break;
-
-    case PROP_STOCK_PRIMARY:
-      gtk_icon_entry_set_icon_from_stock (entry,
-                                         GTK_ICON_ENTRY_PRIMARY,
-                                         g_value_get_string (value));
-      break;
-
-    case PROP_STOCK_SECONDARY:
-      gtk_icon_entry_set_icon_from_stock (entry,
-                                         GTK_ICON_ENTRY_SECONDARY,
-                                         g_value_get_string (value));
-      break;
-
-    case PROP_ICON_NAME_PRIMARY:
-      gtk_icon_entry_set_icon_from_icon_name (entry,
-                                             GTK_ICON_ENTRY_PRIMARY,
-                                             g_value_get_string (value));
-      break;
-
-    case PROP_ICON_NAME_SECONDARY:
-      gtk_icon_entry_set_icon_from_icon_name (entry,
-                                             GTK_ICON_ENTRY_SECONDARY,
-                                             g_value_get_string (value));
-      break;
-
-    case PROP_GICON_PRIMARY:
-      gtk_icon_entry_set_icon_from_gicon (entry,
-                                         GTK_ICON_ENTRY_PRIMARY,
-                                         g_value_get_object (value));
-      break;
-
-    case PROP_GICON_SECONDARY:
-      gtk_icon_entry_set_icon_from_gicon (entry,
-                                         GTK_ICON_ENTRY_SECONDARY,
-                                         g_value_get_object (value));
-      break;
-    }
-}
-
-static void
-gtk_icon_entry_get_property (GObject      *object,
-                            guint         prop_id,
-                            GValue       *value,
-                            GParamSpec   *pspec)
-{
-  GtkIconEntry *entry = GTK_ICON_ENTRY (object);
-
-  switch (prop_id)
-    {
-    case PROP_PIXBUF_PRIMARY:
-      g_value_set_object (value,
-                         gtk_icon_entry_get_pixbuf (entry,
-                                                    GTK_ICON_ENTRY_PRIMARY));
-      break;
-
-    case PROP_PIXBUF_SECONDARY:
-      g_value_set_object (value,
-                         gtk_icon_entry_get_pixbuf (entry,
-                                                    GTK_ICON_ENTRY_SECONDARY));
-      break;
-
-    case PROP_GICON_PRIMARY:
-      g_value_set_object (value,
-                         gtk_icon_entry_get_gicon (entry,
-                                                   GTK_ICON_ENTRY_PRIMARY));
-      break;
-
-    case PROP_GICON_SECONDARY:
-      g_value_set_object (value,
-                         gtk_icon_entry_get_gicon (entry,
-                                                   GTK_ICON_ENTRY_SECONDARY));
-    }
-}
-
-static gint
-get_icon_width (GtkIconEntry *entry, GtkIconEntryPosition icon_pos)
-{
-  gint menu_icon_width;
-  gint width;
-  GtkIconEntryPrivate *priv;
-  EntryIconInfo *icon_info;
-
-  priv = entry->priv;
-  icon_info = &priv->icons[icon_pos];
-
-  if (icon_info->pixbuf == NULL)
-    return 0;
-
-  gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &menu_icon_width, NULL);
-
-  width = MAX (gdk_pixbuf_get_width (icon_info->pixbuf), menu_icon_width);
-
-  return width;
-}
-
-static void
-get_borders (GtkIconEntry *entry, gint *xborder, gint *yborder)
-{
-  GtkWidget *widget = GTK_WIDGET (entry);
-  gint focus_width;
-  gboolean interior_focus;
-
-  gtk_widget_style_get (widget,
-                       "interior-focus", &interior_focus,
-                       "focus-line-width", &focus_width,
-                       NULL);
-
-  if (gtk_entry_get_has_frame (GTK_ENTRY (entry)))
-    {
-      *xborder = widget->style->xthickness;
-      *yborder = widget->style->ythickness;
-    }
-  else
-    {
-      *xborder = 0;
-      *yborder = 0;
-    }
-
-  if (!interior_focus)
-    {
-      *xborder += focus_width;
-      *yborder += focus_width;
-    }
-}
-
-static void
-get_text_area_size (GtkIconEntry *entry, GtkAllocation *alloc)
-{
-  GtkWidget *widget = GTK_WIDGET (entry);
-  GtkRequisition requisition;
-  gint xborder, yborder;
-
-  gtk_widget_get_child_requisition (widget, &requisition);
-  get_borders (entry, &xborder, &yborder);
-
-  alloc->x      = xborder;
-  alloc->y      = yborder;
-  alloc->width  = widget->allocation.width - xborder * 2;
-  alloc->height = requisition.height       - yborder * 2;
-}
-
-static void
-get_icon_allocation (GtkIconEntry *icon_entry,
-                    gboolean left,
-                    GtkAllocation *widget_alloc,
-                    GtkAllocation *text_area_alloc,
-                    GtkAllocation *allocation,
-                    GtkIconEntryPosition *icon_pos)
-{
-  gboolean rtl;
-
-  rtl = (gtk_widget_get_direction (GTK_WIDGET (icon_entry)) ==
-        GTK_TEXT_DIR_RTL);
-
-  if (left)
-    *icon_pos = (rtl ? GTK_ICON_ENTRY_SECONDARY : GTK_ICON_ENTRY_PRIMARY);
-  else
-    *icon_pos = (rtl ? GTK_ICON_ENTRY_PRIMARY : GTK_ICON_ENTRY_SECONDARY);
-
-  allocation->y = text_area_alloc->y;
-  allocation->width = get_icon_width(icon_entry, *icon_pos);
-  allocation->height = text_area_alloc->height;
-
-  if (left)
-    {
-      allocation->x = text_area_alloc->x + ICON_MARGIN;
-    }
-  else
-    {
-      allocation->x = text_area_alloc->x + text_area_alloc->width -
-       allocation->width - ICON_MARGIN;
-    }
-}
-
-static void
-gtk_icon_entry_realize (GtkWidget *widget)
-{
-  GtkIconEntry *entry;
-  GtkIconEntryPrivate *priv;
-  GdkWindowAttr attributes;
-  gint attributes_mask;
-  int i;
-
-  entry = GTK_ICON_ENTRY (widget);
-  priv = entry->priv;
-
-  GTK_WIDGET_CLASS (parent_class)->realize (widget);
-
-  attributes.x = 0;
-  attributes.y = 0;
-  attributes.width = 1;
-  attributes.height = 1;
-  attributes.window_type = GDK_WINDOW_CHILD;
-  attributes.wclass = GDK_INPUT_OUTPUT;
-  attributes.visual = gtk_widget_get_visual (widget);
-  attributes.colormap = gtk_widget_get_colormap (widget);
-  attributes.event_mask = gtk_widget_get_events (widget);
-  attributes.event_mask |=
-    (GDK_EXPOSURE_MASK
-     | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
-     | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
-
-  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-
-  for (i = 0; i < MAX_ICONS; i++)
-    {
-      EntryIconInfo *icon_info;
-
-      icon_info = &priv->icons[i];
-      icon_info->window = gdk_window_new (widget->window, &attributes,
-                                         attributes_mask);
-      gdk_window_set_user_data (icon_info->window, widget);
-
-      gdk_window_set_background (icon_info->window,
-                                &widget->style->base[GTK_WIDGET_STATE(widget)]);
-    }
-
-  gtk_widget_queue_resize (widget);
-}
-
-static void
-gtk_icon_entry_unrealize (GtkWidget *widget)
-{
-  GtkIconEntry *entry;
-  GtkIconEntryPrivate *priv;
-  int i;
-
-  entry = GTK_ICON_ENTRY (widget);
-  priv = entry->priv;
-
-  GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
-
-  for (i = 0; i < MAX_ICONS; i++)
-    {
-      EntryIconInfo *icon_info = &priv->icons[i];
-
-      gdk_window_destroy (icon_info->window);
-      icon_info->window = NULL;
-    }
-}
-
-static void
-gtk_icon_entry_size_request (GtkWidget *widget, GtkRequisition *requisition)
-{
-  GtkEntry *gtkentry;
-  GtkIconEntry *entry;
-  gint icon_widths = 0;
-  int i;
-
-  gtkentry = GTK_ENTRY(widget);
-  entry    = GTK_ICON_ENTRY(widget);
-
-  for (i = 0; i < MAX_ICONS; i++)
-    {
-      int icon_width = get_icon_width (entry, i);
-
-      if (icon_width > 0)
-       {
-         icon_widths += icon_width + ICON_MARGIN;
-       }
-    }
-
-  GTK_WIDGET_CLASS (parent_class)->size_request (widget, requisition);
-
-  if (icon_widths > requisition->width)
-    requisition->width += icon_widths;
-}
-
-static void
-place_windows (GtkIconEntry *icon_entry, GtkAllocation *widget_alloc)
-{
-  GtkIconEntryPosition left_icon_pos;
-  GtkIconEntryPosition right_icon_pos;
-  GtkAllocation left_icon_alloc;
-  GtkAllocation right_icon_alloc;
-  GtkAllocation text_area_alloc;
-  GtkIconEntryPrivate *priv;
-  gint y;
-
-  priv = icon_entry->priv;
-
-  get_text_area_size (icon_entry, &text_area_alloc);
-  
-  /* DJW center text/icon
-   * TODO flicker needs to be eliminated
-   */
-  gdk_window_get_geometry (GTK_ENTRY (icon_entry)->text_area, NULL, &y, NULL, NULL, NULL);
-  text_area_alloc.y = y;
-
-  get_icon_allocation (icon_entry, TRUE, widget_alloc, &text_area_alloc,
-                      &left_icon_alloc, &left_icon_pos);
-  get_icon_allocation (icon_entry, FALSE, widget_alloc, &text_area_alloc,
-                      &right_icon_alloc, &right_icon_pos);
-
-  if (left_icon_alloc.width > 0)
-    {
-      text_area_alloc.x = left_icon_alloc.x + left_icon_alloc.width + ICON_MARGIN;
-    }
-
-  if (right_icon_alloc.width > 0)
-    {
-      text_area_alloc.width -= right_icon_alloc.width + ICON_MARGIN;
-    }
-
-  text_area_alloc.width -= text_area_alloc.x;
-
-  gdk_window_move_resize (priv->icons[left_icon_pos].window,
-                         left_icon_alloc.x, left_icon_alloc.y,
-                         left_icon_alloc.width, left_icon_alloc.height);
-
-  gdk_window_move_resize (priv->icons[right_icon_pos].window,
-                         right_icon_alloc.x, right_icon_alloc.y,
-                         right_icon_alloc.width, right_icon_alloc.height);
-
-  gdk_window_move_resize (GTK_ENTRY (icon_entry)->text_area,
-                         text_area_alloc.x, text_area_alloc.y,
-                         text_area_alloc.width, text_area_alloc.height);
-}
-
-static void
-gtk_icon_entry_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
-{
-  g_return_if_fail (GTK_IS_ICON_ENTRY(widget));
-  g_return_if_fail (allocation != NULL);
-
-  widget->allocation = *allocation;
-
-  GTK_WIDGET_CLASS (parent_class)->size_allocate (widget, allocation);
-
-  if (GTK_WIDGET_REALIZED (widget))
-    place_windows (GTK_ICON_ENTRY (widget), allocation);
-}
-
-static GdkPixbuf *
-get_pixbuf_from_icon (GtkIconEntry *entry, GtkIconEntryPosition icon_pos)
-{
-  EntryIconInfo *icon_info;
-  GtkIconEntryPrivate *priv;
-
-  priv = entry->priv;
-  icon_info = &priv->icons[icon_pos];
-
-  g_object_ref (icon_info->pixbuf);
-
-  return icon_info->pixbuf;
-}
-
-/* Kudos to the gnome-panel guys. */
-static void
-colorshift_pixbuf (GdkPixbuf *dest, GdkPixbuf *src, int shift)
-{
-  gint i, j;
-  gint width, height, has_alpha, src_rowstride, dest_rowstride;
-  guchar *target_pixels;
-  guchar *original_pixels;
-  guchar *pix_src;
-  guchar *pix_dest;
-  int val;
-  guchar r, g, b;
-
-  has_alpha       = gdk_pixbuf_get_has_alpha (src);
-  width           = gdk_pixbuf_get_width (src);
-  height          = gdk_pixbuf_get_height (src);
-  src_rowstride   = gdk_pixbuf_get_rowstride (src);
-  dest_rowstride  = gdk_pixbuf_get_rowstride (dest);
-  original_pixels = gdk_pixbuf_get_pixels (src);
-  target_pixels   = gdk_pixbuf_get_pixels (dest);
-
-  for (i = 0; i < height; i++)
-    {
-      pix_dest = target_pixels   + i * dest_rowstride;
-      pix_src  = original_pixels + i * src_rowstride;
-
-      for (j = 0; j < width; j++)
-       {
-         r = *(pix_src++);
-         g = *(pix_src++);
-         b = *(pix_src++);
-
-         val = r + shift;
-         *(pix_dest++) = CLAMP(val, 0, 255);
-
-         val = g + shift;
-         *(pix_dest++) = CLAMP(val, 0, 255);
-
-         val = b + shift;
-         *(pix_dest++) = CLAMP(val, 0, 255);
-
-         if (has_alpha)
-           *(pix_dest++) = *(pix_src++);
-       }
-    }
-}
-
-static void
-draw_icon (GtkWidget *widget, GtkIconEntryPosition icon_pos)
-{
-  GtkIconEntry *entry;
-  GtkIconEntryPrivate *priv;
-  EntryIconInfo *icon_info;
-  GdkPixbuf *pixbuf;
-  gint x, y, width, height;
-
-  entry = GTK_ICON_ENTRY (widget);
-  priv = entry->priv;
-  icon_info = &priv->icons[icon_pos];
-
-  if (icon_info->pixbuf == NULL || !GTK_WIDGET_REALIZED (widget))
-    return;
-
-  if ((pixbuf = get_pixbuf_from_icon (entry, icon_pos)) == NULL)
-    return;
-
-  gdk_drawable_get_size (icon_info->window, &width, &height);
-
-  if (width == 1 || height == 1)
-    {
-      /*
-       * size_allocate hasn't been called yet. These are the default values.
-       */
-      return;
-    }
-
-  if (gdk_pixbuf_get_height (pixbuf) > height)
-    {
-      GdkPixbuf *temp_pixbuf;
-      int scale;
-
-      scale = height - (2 * ICON_MARGIN);
-
-      temp_pixbuf = gdk_pixbuf_scale_simple (pixbuf, scale, scale,
-                                            GDK_INTERP_BILINEAR);
-
-      g_object_unref (pixbuf);
-
-      pixbuf = temp_pixbuf;
-    }
-
-  x = (width  - gdk_pixbuf_get_width(pixbuf)) / 2;
-  y = (height - gdk_pixbuf_get_height(pixbuf)) / 2;
-
-  if (icon_info->insensitive)
-    {
-      GdkPixbuf *temp_pixbuf;
-
-      temp_pixbuf = gdk_pixbuf_copy (pixbuf);
-
-      gdk_pixbuf_saturate_and_pixelate (pixbuf,
-                                       temp_pixbuf,
-                                       0.8f,
-                                       TRUE);
-      g_object_unref (pixbuf);
-      pixbuf = temp_pixbuf;
-    }
-  else if (icon_info->hovered)
-    {
-      GdkPixbuf *temp_pixbuf;
-
-      temp_pixbuf = gdk_pixbuf_copy (pixbuf);
-
-      colorshift_pixbuf (temp_pixbuf, pixbuf, 30);
-
-      g_object_unref (pixbuf);
-
-      pixbuf = temp_pixbuf;
-    }
-
-  gdk_draw_pixbuf (icon_info->window, widget->style->black_gc, pixbuf,
-                  0, 0, x, y, -1, -1,
-                  GDK_RGB_DITHER_NORMAL, 0, 0);
-
-  g_object_unref (pixbuf);
-}
-
-static gint
-gtk_icon_entry_expose (GtkWidget *widget, GdkEventExpose *event)
-{
-  GtkIconEntry *entry;
-  GtkIconEntryPrivate *priv;
-
-  g_return_val_if_fail (GTK_IS_ICON_ENTRY (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  entry = GTK_ICON_ENTRY (widget);
-  priv = entry->priv;
-
-  if (GTK_WIDGET_DRAWABLE (widget))
-    {
-      gboolean found = FALSE;
-      int i;
-
-      for (i = 0; i < MAX_ICONS && !found; i++)
-       {
-         EntryIconInfo *icon_info = &priv->icons[i];
-
-         if (event->window == icon_info->window)
-           {
-             gint width;
-             GtkAllocation text_area_alloc;
-
-             get_text_area_size (entry, &text_area_alloc);
-             gdk_drawable_get_size (icon_info->window, &width, NULL);
-
-             gtk_paint_flat_box (widget->style, icon_info->window,
-                                 GTK_WIDGET_STATE (widget), GTK_SHADOW_NONE,
-                                 NULL, widget, "entry_bg",
-                                 0, 0, width, text_area_alloc.height);
-
-             draw_icon (widget, i);
-
-             found = TRUE;
-           }
-       }
-
-      if (!found)
-       GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);
-    }
-
-  return FALSE;
-}
-
-static gint
-gtk_icon_entry_enter_notify (GtkWidget *widget, GdkEventCrossing *event)
-{
-  GtkIconEntry *entry;
-  GtkIconEntryPrivate *priv;
-  int i;
-
-  entry = GTK_ICON_ENTRY (widget);
-  priv = entry->priv;
-
-  for (i = 0; i < MAX_ICONS; i++)
-    {
-      if (event->window == priv->icons[i].window)
-       {
-         if (gtk_icon_entry_get_icon_highlight (entry, i))
-           {
-             priv->icons[i].hovered = TRUE;
-
-             if (priv->icons[i].tooltip_text != NULL)
-               {
-                 gtk_widget_set_tooltip_text (widget,
-                                              priv->icons[i].tooltip_text);
-                 gtk_widget_set_has_tooltip (widget, TRUE);
-               } else {
-                 gtk_widget_set_has_tooltip (widget, FALSE);
-               }
-
-             gtk_widget_queue_draw (widget);
-
-             break;
-           }
-       }
-    }
-
-  return FALSE;
-}
-
-static gint
-gtk_icon_entry_leave_notify (GtkWidget *widget, GdkEventCrossing *event)
-{
-  GtkIconEntry *entry;
-  GtkIconEntryPrivate *priv;
-  int i;
-
-  entry = GTK_ICON_ENTRY (widget);
-  priv = entry->priv;
-
-  for (i = 0; i < MAX_ICONS; i++)
-    {
-      if (event->window == priv->icons[i].window)
-       {
-         if (gtk_icon_entry_get_icon_highlight (entry, i))
-           {
-             priv->icons[i].hovered = FALSE;
-
-             gtk_widget_set_has_tooltip (widget, FALSE);
-             gtk_widget_queue_draw (widget);
-
-             break;
-           }
-       }
-    }
-
-  return FALSE;
-}
-
-static gint
-gtk_icon_entry_button_press (GtkWidget *widget, GdkEventButton *event)
-{
-  GtkIconEntry *entry;
-  GtkIconEntryPrivate *priv;
-  int i;
-
-  entry = GTK_ICON_ENTRY (widget);
-  priv = entry->priv;
-
-  for (i = 0; i < MAX_ICONS; i++)
-    {
-      if (event->window == priv->icons[i].window)
-       {
-         if (event->button == 1 && gtk_icon_entry_get_icon_highlight (entry, i))
-           {
-             priv->icons[i].hovered = FALSE;
-
-             gtk_widget_queue_draw (widget);
-           }
-
-         g_signal_emit (entry, signals[ICON_PRESSED], 0, i, event->button);
-
-         return TRUE;
-       }
-    }
-
-  if (GTK_WIDGET_CLASS (parent_class)->button_press_event)
-    return GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, event);
-
-  return FALSE;
-}
-
-static gint
-gtk_icon_entry_button_release (GtkWidget *widget, GdkEventButton *event)
-{
-  GtkIconEntry *entry;
-  GtkIconEntryPrivate *priv;
-  int i;
-
-  entry = GTK_ICON_ENTRY (widget);
-  priv = entry->priv;
-
-  for (i = 0; i < MAX_ICONS; i++)
-    {
-      GdkWindow *icon_window = priv->icons[i].window;
-
-      if (event->window == icon_window)
-       {
-         int width, height;
-         gdk_drawable_get_size (icon_window, &width, &height);
-
-         if (event->button == 1 &&
-             gtk_icon_entry_get_icon_highlight (entry, i) &&
-             event->x >= 0     && event->y >= 0 &&
-             event->x <= width && event->y <= height)
-           {
-             priv->icons[i].hovered = TRUE;
-
-             gtk_widget_queue_draw (widget);
-           }
-
-         g_signal_emit (entry, signals[ICON_RELEASED], 0, i, event->button);
-
-         return TRUE;
-       }
-    }
-
-  if (GTK_WIDGET_CLASS (parent_class)->button_release_event)
-    return GTK_WIDGET_CLASS (parent_class)->button_release_event (widget, event);
-
-  return FALSE;
-}
-
-static void
-gtk_icon_entry_style_set (GtkWidget *widget, GtkStyle *prev_style)
-{
-  GtkIconEntry *icon_entry;
-
-  icon_entry = GTK_ICON_ENTRY (widget);
-
-  if (GTK_WIDGET_CLASS (gtk_icon_entry_parent_class)->style_set)
-    GTK_WIDGET_CLASS (gtk_icon_entry_parent_class)->style_set (widget, prev_style);
-
-  icon_theme_changed (icon_entry);
-}
-
-static void
-icon_theme_changed (GtkIconEntry *entry)
-{
-  GtkIconEntryPrivate *priv;
-  int i;
-
-  priv = entry->priv;
-
-  for (i = 0; i < MAX_ICONS; i++)
-    {
-      if (priv->icons[i].storage_type == GTK_IMAGE_ICON_NAME)
-       {
-         g_object_unref (priv->icons[i].pixbuf);
-         priv->icons[i].pixbuf = NULL;
-
-         gtk_icon_entry_set_icon_from_icon_name (entry, i, priv->icons[i].icon_name);
-       }
-      else if (priv->icons[i].storage_type == _GTK_IMAGE_GICON)
-       {
-         g_object_unref (priv->icons[i].pixbuf);
-         priv->icons[i].pixbuf = NULL;
-
-         gtk_icon_entry_set_icon_from_gicon (entry, i, priv->icons[i].gicon);
-       }
-    }
-
-  gtk_widget_queue_draw (GTK_WIDGET (entry));
-}
-
-static void
-gtk_icon_entry_set_icon_internal (GtkIconEntry *entry,
-                                  GtkIconEntryPosition icon_pos,
-                                  GdkPixbuf *pixbuf)
-{                                 
-  EntryIconInfo *icon_info;         
-  GtkIconEntryPrivate *priv;      
-  
-  g_return_if_fail (entry != NULL);
-  g_return_if_fail (GTK_IS_ICON_ENTRY (entry));
-  g_return_if_fail (IS_VALID_ICON_ENTRY_POSITION (icon_pos));
-  
-  priv = entry->priv;
-  icon_info = &priv->icons[icon_pos];
-  
-  if (pixbuf == icon_info->pixbuf)
-    return; 
-    
-  if (icon_pos == GTK_ICON_ENTRY_SECONDARY &&
-      priv->icon_released_id != 0)
-    { 
-      g_signal_handler_disconnect (entry, priv->icon_released_id);
-      priv->icon_released_id = 0; 
-    } 
-    
-  if (pixbuf == NULL)
-    {
-      if (icon_info->pixbuf != NULL)
-       {
-         g_object_unref (icon_info->pixbuf);
-         icon_info->pixbuf = NULL;
-          
-         /* Explicitly check, as the pointer may become invalidated
-          * during destruction.
-          */
-         if (icon_info->window != NULL && GDK_IS_WINDOW (icon_info->window))
-           gdk_window_hide (icon_info->window);
-       } 
-    }   
-  else
-    {
-      if (icon_info->window != NULL && icon_info->pixbuf == NULL)
-       gdk_window_show (icon_info->window);
-
-      icon_info->pixbuf = pixbuf;
-      g_object_ref (pixbuf);
-    }
-
-  gtk_widget_queue_draw (GTK_WIDGET (entry));
-}
-
-/**
- * gtk_icon_entry_new
- *
- * Creates a new GtkIconEntry widget.
- *
- * Returns a new #GtkIconEntry.
- */
-GtkWidget *
-gtk_icon_entry_new (void)
-{
-  return GTK_WIDGET (g_object_new (GTK_TYPE_ICON_ENTRY, NULL));
-}
-
-/**
- * gtk_icon_entry_set_icon_from_pixbuf
- * @entry: A #GtkIconEntry.
- * @position: Icon position.
- * @pixbuf: A #GdkPixbuf.
- *
- * Sets the icon shown in the specified position using a pixbuf.
- */
-void
-gtk_icon_entry_set_icon_from_pixbuf (GtkIconEntry *entry,
-                                    GtkIconEntryPosition icon_pos,
-                                    GdkPixbuf *pixbuf)
-{
-  EntryIconInfo *icon_info;
-  GtkIconEntryPrivate *priv;
-
-  g_return_if_fail (entry != NULL);
-  g_return_if_fail (GTK_IS_ICON_ENTRY (entry));
-  g_return_if_fail (IS_VALID_ICON_ENTRY_POSITION (icon_pos));
-
-  priv = entry->priv;
-  icon_info = &priv->icons[icon_pos];
-
-  if (pixbuf == icon_info->pixbuf)
-    return;
-
-  if (icon_pos == GTK_ICON_ENTRY_SECONDARY &&
-      priv->icon_released_id != 0)
-    {
-      g_signal_handler_disconnect (entry, priv->icon_released_id);
-      priv->icon_released_id = 0;
-    }
-
-  if (pixbuf == NULL)
-    {
-      if (icon_info->pixbuf != NULL)
-       {
-         g_object_unref (icon_info->pixbuf);
-         icon_info->pixbuf = NULL;
-
-         /* Explicitly check, as the pointer may become invalidated
-          * during destruction.
-          */
-         if (icon_info->window != NULL && GDK_IS_WINDOW (icon_info->window))
-           gdk_window_hide (icon_info->window);
-       }
-    }
-  else
-    {
-      if (icon_info->window != NULL && icon_info->pixbuf == NULL)
-       gdk_window_show (icon_info->window);
-
-      icon_info->pixbuf = pixbuf;
-      g_object_ref (pixbuf);
-    }
-
-  gtk_widget_queue_draw (GTK_WIDGET (entry));
-}
-
-/**
- * gtk_icon_entry_set_icon_from_stock
- * @entry: A #GtkIconEntry.
- * @position: Icon position.
- * @stock_id: The name of the stock item.
- *
- * Sets the icon shown in the entry at the specified position from a stock image.
- */
-void
-gtk_icon_entry_set_icon_from_stock (GtkIconEntry *entry,
-                                   GtkIconEntryPosition icon_pos,
-                                   const gchar *stock_id)
-{
-  GdkPixbuf *pixbuf;
-
-  /* FIXME: Due to a bug in GtkIconEntry we need to set a non-NULL icon */
-  if (! stock_id)
-    stock_id = GTK_STOCK_INFO;
-
-  pixbuf = gtk_widget_render_icon (GTK_WIDGET (entry),
-                                  stock_id,
-                                  GTK_ICON_SIZE_MENU,
-                                  NULL);
-
-  gtk_icon_entry_set_icon_internal (entry,
-                                    icon_pos,
-                                    pixbuf);
-}
-
-/**
- * gtk_icon_entry_set_icon_from_icon_name
- * @entry: A #GtkIconEntry;
- * @icon_pos: The position at which to set the icon
- * @icon_name: An icon name
- *
- * Sets the icon shown in the entry at the specified position from the current
- * icon theme.  If the icon name isn't known, a "broken image" icon will be
- * displayed instead.  If the current icon theme is changed, the icon will be
- * updated appropriately.
- */
-void
-gtk_icon_entry_set_icon_from_icon_name (GtkIconEntry *entry,
-                                       GtkIconEntryPosition icon_pos,
-                                       const gchar *icon_name)
-{
-  GdkPixbuf *pixbuf = NULL;
-  EntryIconInfo *icon_info;
-  GtkIconEntryPrivate *priv;
-  GdkScreen *screen;
-  GtkIconTheme *icon_theme;
-  GtkSettings *settings;
-  gint width, height;
-  GError *error = NULL;
-
-  g_return_if_fail (entry != NULL);
-  g_return_if_fail (GTK_IS_ICON_ENTRY (entry));
-  g_return_if_fail (IS_VALID_ICON_ENTRY_POSITION (icon_pos));
-
-  priv = entry->priv;
-  icon_info = &priv->icons[icon_pos];
-
-  screen = gtk_widget_get_screen (GTK_WIDGET (entry));
-  icon_theme = gtk_icon_theme_get_for_screen (screen);
-  settings = gtk_settings_get_for_screen (screen);
-
-  if (icon_name != NULL)
-    {
-      gtk_icon_size_lookup_for_settings (settings,
-                                        GTK_ICON_SIZE_MENU,
-                                        &width, &height);
-
-      pixbuf = gtk_icon_theme_load_icon (icon_theme,
-                                        icon_name,
-                                        MIN (width, height), 0, &error);
-
-      if (pixbuf == NULL)
-       {
-         g_error_free (error);
-         pixbuf = gtk_widget_render_icon (GTK_WIDGET (entry),
-                                          GTK_STOCK_MISSING_IMAGE,
-                                          GTK_ICON_SIZE_MENU,
-                                          NULL);
-       }
-    }
-
-  gtk_icon_entry_set_icon_internal (entry,
-                                   icon_pos,
-                                   pixbuf);
-}
-
-/**
- * gtk_icon_entry_set_icon_from_gicon
- * @entry: A #GtkIconEntry;
- * @icon_pos: The position at which to set the icon
- * @icon: The icon to set
- *
- * Sets the icon shown in the entry at the specified position from the current
- * icon theme.  If the icon isn't known, a "broken image" icon will be displayed
- * instead.  If the current icon theme is changed, the icon will be updated
- * appropriately.
- */
-void
-gtk_icon_entry_set_icon_from_gicon (const GtkIconEntry *entry,
-                                   GtkIconEntryPosition icon_pos,
-                                   GIcon *icon)
-{
-  GdkPixbuf *pixbuf = NULL;
-  GtkIconEntryPrivate *priv;
-  EntryIconInfo *icon_info;
-  GdkScreen *screen;
-  GtkIconTheme *icon_theme;
-  GtkSettings *settings;
-  gint width, height;
-  GError *error = NULL;
-  GtkIconInfo *info;
-
-  priv = entry->priv;
-  icon_info = &priv->icons[icon_pos];
-
-  screen = gtk_widget_get_screen (GTK_WIDGET (entry));
-  icon_theme = gtk_icon_theme_get_for_screen (screen);
-  settings = gtk_settings_get_for_screen (screen);
-
-  if (icon != NULL)
-    {
-      gtk_icon_size_lookup_for_settings (settings,
-                                        GTK_ICON_SIZE_MENU,
-                                        &width, &height);
-
-      #if GTK_CHECK_VERSION (2, 14, 0)
-      info = gtk_icon_theme_lookup_by_gicon (icon_theme,
-                                            icon,
-                                            MIN (width, height), 0);
-      #else
-      info = NULL;
-      #endif
-      pixbuf = gtk_icon_info_load_icon (info, &error);
-      if (pixbuf == NULL)
-       {
-         g_error_free (error);
-         pixbuf = gtk_widget_render_icon (GTK_WIDGET (entry),
-                                          GTK_STOCK_MISSING_IMAGE,
-                                          GTK_ICON_SIZE_MENU,
-                                          NULL);
-       }
-    }
-
-  gtk_icon_entry_set_icon_internal ((GtkIconEntry*)entry,
-                                   icon_pos,
-                                   pixbuf);
-}
-
-/**
- * gtk_icon_entry_set_cursor
- * @entry: A #GtkIconEntry;
- * @icon_pos: The position at which to set the cursor
- * @cursor_type: A #GdkCursorType; describing the cursor to set
- *
- * Sets an alternate mouse cursor used for the specified icon.
- */
-void
-gtk_icon_entry_set_cursor (const GtkIconEntry *entry,
-                          GtkIconEntryPosition icon_pos,
-                          GdkCursorType cursor_type)
-{
-  EntryIconInfo *icon_info;
-  GtkIconEntryPrivate *priv;
-  GdkCursor *cursor;
-
-  priv = entry->priv;
-  icon_info = &priv->icons[icon_pos];
-
-  icon_info->cursor_type = cursor_type;
-  icon_info->custom_cursor = TRUE;
-
-  if (GTK_WIDGET_REALIZED (GTK_WIDGET (entry)))
-    {
-      cursor = gdk_cursor_new_for_display (gtk_widget_get_display (GTK_WIDGET (entry)),
-                                          cursor_type);
-
-      gdk_window_set_cursor (icon_info->window, cursor);
-      gdk_cursor_unref (cursor);
-    }
-}
-
-/**
- * gtk_icon_entry_set_icon_highlight
- * @entry: A #GtkIconEntry;
- * @position: Icon position.
- * @highlight: TRUE if the icon should highlight on mouse-over
- *
- * Determines whether the icon will highlight on mouse-over.
- */
-void
-gtk_icon_entry_set_icon_highlight (const GtkIconEntry *entry,
-                                  GtkIconEntryPosition icon_pos,
-                                  gboolean highlight)
-{
-  EntryIconInfo *icon_info;
-  GtkIconEntryPrivate *priv;
-
-  priv = entry->priv;
-
-  g_return_if_fail (entry != NULL);
-  g_return_if_fail (GTK_IS_ICON_ENTRY (entry));
-  g_return_if_fail (IS_VALID_ICON_ENTRY_POSITION (icon_pos));
-
-  icon_info = &priv->icons[icon_pos];
-
-  if (icon_info->highlight == highlight)
-    return;
-
-  icon_info->highlight = highlight;
-}
-
-/**
- * gtk_icon_entry_get_pixbuf
- * @entry: A #GtkIconEntry.
- * @position: Icon position.
- *
- * Retrieves the image used for the icon.  Unlike the other methods of setting
- * and getting icon data, this method will work regardless of whether the icon
- * was set using a #GdkPixbuf, a #GIcon, a stock item, or an icon name.
- *
- * Returns: A #GdkPixbuf, or NULL if no icon is set for this position.
- */
-GdkPixbuf *
-gtk_icon_entry_get_pixbuf (const GtkIconEntry *entry,
-                          GtkIconEntryPosition icon_pos)
-{
-  GtkIconEntryPrivate *priv;
-
-  g_return_val_if_fail (entry != NULL, NULL);
-  g_return_val_if_fail (GTK_IS_ICON_ENTRY (entry), NULL);
-  g_return_val_if_fail (IS_VALID_ICON_ENTRY_POSITION (icon_pos), NULL);
-
-  priv = entry->priv;
-
-  return priv->icons[icon_pos].pixbuf;
-}
-
-/**
- * gtk_icon_entry_get_gicon
- * @entry: A #GtkIconEntry
- * @position: Icon position.
- *
- * Retrieves the GIcon used for the icon, or NULL if there is no icon or if
- * the icon was set by some other method (e.g., by stock, pixbuf, or icon name).
- *
- * Returns: A #GIcon, or NULL if no icon is set or if the icon is not a GIcon.
- */
-GIcon *
-gtk_icon_entry_get_gicon (const GtkIconEntry *entry,
-                         GtkIconEntryPosition icon_pos)
-{
-  GtkIconEntryPrivate *priv;
-  EntryIconInfo *icon_info;
-
-  g_return_val_if_fail (entry != NULL, NULL);
-  g_return_val_if_fail (GTK_IS_ICON_ENTRY (entry), NULL);
-  g_return_val_if_fail (IS_VALID_ICON_ENTRY_POSITION (icon_pos), NULL);
-
-  priv = entry->priv;
-  icon_info = &priv->icons[icon_pos];
-
-  return icon_info->storage_type == _GTK_IMAGE_GICON ? icon_info->gicon : NULL;
-}
-
-/**
- * gtk_icon_entry_get_icon_highlight
- * @entry: A #GtkIconEntry.
- * @position: Icon position.
- *
- * Retrieves whether entry will highlight the icon on mouseover.
- *
- * Returns: TRUE if icon highlights.
- */
-gboolean
-gtk_icon_entry_get_icon_highlight (const GtkIconEntry *entry,
-                                  GtkIconEntryPosition icon_pos)
-{
-  GtkIconEntryPrivate *priv;
-
-  g_return_val_if_fail (entry != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_ICON_ENTRY (entry), FALSE);
-  g_return_val_if_fail (IS_VALID_ICON_ENTRY_POSITION (icon_pos), FALSE);
-
-  priv = entry->priv;
-
-  return priv->icons[icon_pos].highlight;
-}
-
-/**
- * gtk_icon_entry_set_tooltip
- * @entry: A #GtkIconEntry.
- * @position: Icon position.
- * @text: The text to be used for the tooltip.
- *
- * Sets the tooltip text used for the specified icon.
- */
-void
-gtk_icon_entry_set_tooltip (const GtkIconEntry *entry,
-                           GtkIconEntryPosition icon_pos,
-                           const gchar *text)
-{
-  EntryIconInfo *icon_info;
-  GtkIconEntryPrivate *priv;
-  gchar *new_tooltip;
-
-  g_return_if_fail (entry != NULL);
-  g_return_if_fail (GTK_IS_ICON_ENTRY (entry));
-  g_return_if_fail (IS_VALID_ICON_ENTRY_POSITION (icon_pos));
-
-  priv = entry->priv;
-
-  icon_info = &priv->icons[icon_pos];
-
-  new_tooltip = g_strdup (text);
-  if (icon_info->tooltip_text != NULL)
-    g_free (icon_info->tooltip_text);
-  icon_info->tooltip_text = new_tooltip;
-}
-
-const gchar*
-gtk_icon_entry_get_icon_tooltip (const GtkIconEntry *entry,
-                                  GtkIconEntryPosition icon_pos)
-{
-  g_return_val_if_fail (entry != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_ICON_ENTRY (entry), FALSE);
-  g_return_val_if_fail (IS_VALID_ICON_ENTRY_POSITION (icon_pos), FALSE);
-
-  return entry->priv->icons[icon_pos].tooltip_text;
-}
-
-/**
- * gtk_icon_entry_set_icon_sensitive
- * @entry: A #GtkIconEntry.
- * @position: Icon position.
- * @sensitive: Specifies whether the icon should appear sensitive or insensitive.
- *
- * Sets the sensitivity for the specified icon.
- */
-void
-gtk_icon_entry_set_icon_sensitive (const GtkIconEntry *icon_entry,
-                                  GtkIconEntryPosition icon_pos,
-                                  gboolean sensitive)
-{
-  EntryIconInfo *icon_info;
-  GtkIconEntryPrivate *priv;
-
-  g_return_if_fail (icon_entry != NULL);
-  g_return_if_fail (GTK_IS_ICON_ENTRY (icon_entry));
-  g_return_if_fail (IS_VALID_ICON_ENTRY_POSITION (icon_pos));
-
-  priv = icon_entry->priv;
-
-  icon_info = &priv->icons[icon_pos];
-
-  icon_info->insensitive = !sensitive;
-
-  if (icon_info->custom_cursor == TRUE && GTK_WIDGET_REALIZED (GTK_WIDGET (icon_entry)))
-    {
-      GdkCursor *cursor = gdk_cursor_new_for_display (gtk_widget_get_display (GTK_WIDGET (icon_entry)),
-                                                     sensitive ? icon_info->cursor_type : GDK_ARROW);
-      gdk_window_set_cursor (icon_info->window, cursor);
-      gdk_cursor_unref (cursor);
-    }
-}
-
-void
-gtk_icon_entry_set_progress_fraction (GtkIconEntry *icon_entry,
-                                      gdouble       fraction)
-{
-  GtkIconEntryPrivate *priv;
-
-  g_return_if_fail (GTK_IS_ICON_ENTRY (icon_entry));
-
-  priv = icon_entry->priv;
-  priv->fraction = CLAMP (fraction, 0.0, 1.0);
-
-  if (GTK_ENTRY (icon_entry)->text_area)
-    gdk_window_invalidate_rect (GTK_ENTRY (icon_entry)->text_area, NULL, FALSE);
-}
-
-#endif
index 76019d577461c8115311342255fa3be8bb88efbe..daa1819d1dc442332bb6d99f4ce3ec22c2b11446 100644 (file)
@@ -26,7 +26,6 @@
 
 G_BEGIN_DECLS
 
-#if GTK_CHECK_VERSION (2, 16, 0)
     #define GtkIconEntry GtkEntry
     #define GtkIconEntryPosition GtkEntryIconPosition
     #define GTK_ICON_ENTRY_PRIMARY GTK_ENTRY_ICON_PRIMARY
@@ -45,99 +44,6 @@ G_BEGIN_DECLS
     #define gtk_icon_entry_get_tooltip gtk_entry_get_icon_tooltip_text
     #define gtk_icon_entry_set_icon_highlight gtk_entry_set_icon_activatable
     #define gtk_icon_entry_set_progress_fraction gtk_entry_set_progress_fraction
-#else
-
-#define GTK_TYPE_ICON_ENTRY (gtk_icon_entry_get_type())
-#define GTK_ICON_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_ICON_ENTRY, GtkIconEntry))
-#define GTK_ICON_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_ICON_ENTRY, GtkIconEntryClass))
-#define GTK_IS_ICON_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_ICON_ENTRY))
-#define GTK_IS_ICON_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_ICON_ENTRY))
-#define GTK_ICON_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_ICON_ENTRY, GtkIconEntryClass))
-
-typedef enum
-{
-  GTK_ICON_ENTRY_PRIMARY,
-  GTK_ICON_ENTRY_SECONDARY
-} GtkIconEntryPosition;
-
-typedef struct _GtkIconEntry        GtkIconEntry;
-typedef struct _GtkIconEntryClass   GtkIconEntryClass;
-typedef struct _GtkIconEntryPrivate GtkIconEntryPrivate;
-
-struct _GtkIconEntry
-{
-  GtkEntry parent_object;
-
-  GtkIconEntryPrivate* priv;
-};
-
-struct _GtkIconEntryClass
-{
-  GtkEntryClass parent_class;
-
-  /* Signals */
-  void (*icon_pressed) (GtkIconEntry *entry,
-                       GtkIconEntryPosition icon_pos,
-                       int button);
-  void (*icon_released) (GtkIconEntry *entry,
-                        GtkIconEntryPosition icon_pos,
-                        int button);
-
-  void (*gtk_reserved1) (void);
-  void (*gtk_reserved2) (void);
-  void (*gtk_reserved3) (void);
-  void (*gtk_reserved4) (void);
-};
-
-GType      gtk_icon_entry_get_type                (void) G_GNUC_CONST;
-
-GtkWidget* gtk_icon_entry_new                     (void);
-
-void       gtk_icon_entry_set_icon_from_pixbuf    (GtkIconEntry *entry,
-                                                  GtkIconEntryPosition icon_pos,
-                                                  GdkPixbuf *pixbuf);
-void       gtk_icon_entry_set_icon_from_stock     (GtkIconEntry *entry,
-                                                  GtkIconEntryPosition icon_pos,
-                                                  const gchar *stock_id);
-void       gtk_icon_entry_set_icon_from_icon_name (GtkIconEntry *entry,
-                                                  GtkIconEntryPosition icon_pos,
-                                                  const gchar *icon_name);
-
-void       gtk_icon_entry_set_icon_from_gicon     (const GtkIconEntry *entry,
-                                                  GtkIconEntryPosition icon_pos,
-                                                  GIcon *icon);
-
-GdkPixbuf* gtk_icon_entry_get_pixbuf              (const GtkIconEntry *entry,
-                                                  GtkIconEntryPosition icon_pos);
-
-GIcon*     gtk_icon_entry_get_gicon               (const GtkIconEntry *entry,
-                                                  GtkIconEntryPosition icon_pos);
-
-void       gtk_icon_entry_set_icon_highlight      (const GtkIconEntry *entry,
-                                                  GtkIconEntryPosition icon_pos,
-                                                  gboolean highlight);
-
-gboolean   gtk_icon_entry_get_icon_highlight      (const GtkIconEntry *entry,
-                                                  GtkIconEntryPosition icon_pos);
-
-void       gtk_icon_entry_set_cursor              (const GtkIconEntry *icon_entry,
-                                                  GtkIconEntryPosition icon_pos,
-                                                  GdkCursorType cursor_type);
-
-const gchar* gtk_icon_entry_get_tooltip            (const GtkIconEntry *icon_entry,
-                                                  GtkIconEntryPosition icon_pos);
-void       gtk_icon_entry_set_tooltip             (const GtkIconEntry *icon_entry,
-                                                  GtkIconEntryPosition icon_pos,
-                                                  const gchar *text);
-
-void       gtk_icon_entry_set_icon_sensitive      (const GtkIconEntry *icon_entry,
-                                                  GtkIconEntryPosition icon_pos,
-                                                  gboolean sensitive);
-
-void       gtk_icon_entry_set_progress_fraction    (GtkIconEntry *icon_entry,
-                                                    gdouble       fraction);
-
-#endif
 
 G_END_DECLS
 
index da96043eb877abc6583a92f212f8b8ca7fe5516e..a7579c0974fc4ccf63696ee44de254a4aaf75063 100644 (file)
@@ -2658,11 +2658,7 @@ _action_compact_add_activate (GtkAction*     action,
         g_free (label);
         gtk_widget_set_name (button, "GtkButton-thumb");
         gtk_box_pack_start (box, button, TRUE, TRUE, 4);
-        #if GTK_CHECK_VERSION (2, 16, 0)
         gtk_activatable_set_related_action (GTK_ACTIVATABLE (button), action);
-        #else
-        gtk_action_connect_proxy (action, button);
-        #endif
         g_signal_connect_swapped (button, "clicked",
                                   G_CALLBACK (gtk_widget_destroy), dialog);
     }
index 1c509ca0fd91efb885ece121bc48fb04f0a5efa4..c615fb72c34b78e3ecad96e5a1dd4caeb9e0c7d6 100644 (file)
@@ -1342,13 +1342,8 @@ midori_location_action_icon_released_cb (GtkWidget*           widget,
         content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
         #endif
         hbox = gtk_hbox_new (FALSE, 0);
-        #if GTK_CHECK_VERSION (2, 16, 0)
         gtk_box_pack_start (GTK_BOX (hbox), gtk_image_new_from_gicon (
             gtk_entry_get_icon_gicon (GTK_ENTRY (widget), icon_pos), GTK_ICON_SIZE_DIALOG), FALSE, FALSE, 0);
-        #else
-        gtk_box_pack_start (GTK_BOX (hbox),
-            gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION, GTK_ICON_SIZE_DIALOG), FALSE, FALSE, 0);
-        #endif
         gtk_box_pack_start (GTK_BOX (hbox),
             gtk_label_new (gtk_icon_entry_get_tooltip (GTK_ICON_ENTRY (widget), icon_pos)), FALSE, FALSE, 0);
         gtk_box_pack_start (GTK_BOX (content_area), hbox, FALSE, FALSE, 0);
@@ -1920,36 +1915,24 @@ midori_location_action_set_security_hint (MidoriLocationAction* location_action,
 
         if (hint == MIDORI_SECURITY_UNKNOWN)
         {
-            #if GTK_CHECK_VERSION (2, 16, 0)
             gchar* icon_names[] = { "channel-insecure-symbolic", "lock-insecure", "dialog-information", NULL };
             gtk_entry_set_icon_from_gicon (GTK_ENTRY (entry), GTK_ICON_ENTRY_PRIMARY,
                 g_themed_icon_new_from_names (icon_names, -1));
-            #else
-            gtk_icon_entry_set_icon_from_stock (GTK_ICON_ENTRY (entry), GTK_ICON_ENTRY_PRIMARY, GTK_STOCK_INFO);
-            #endif
             gtk_icon_entry_set_tooltip (GTK_ICON_ENTRY (entry),
                 GTK_ICON_ENTRY_PRIMARY, _("Not verified"));
         }
         else if (hint == MIDORI_SECURITY_TRUSTED)
         {
-            #if GTK_CHECK_VERSION (2, 16, 0)
             gchar* icon_names[] = { "channel-secure-symbolic", "lock-secure", "locked", NULL };
             gtk_entry_set_icon_from_gicon (GTK_ENTRY (entry), GTK_ICON_ENTRY_PRIMARY,
                 g_themed_icon_new_from_names (icon_names, -1));
-            #else
-            gtk_icon_entry_set_icon_from_stock (GTK_ICON_ENTRY (entry), GTK_ICON_ENTRY_PRIMARY, GTK_STOCK_DIALOG_AUTHENTICATION);
-            #endif
             gtk_icon_entry_set_tooltip (GTK_ICON_ENTRY (entry),
                 GTK_ICON_ENTRY_PRIMARY, _("Verified and encrypted connection"));
         }
         else if (hint == MIDORI_SECURITY_NONE)
         {
-            #if GTK_CHECK_VERSION (2, 16, 0)
             gtk_entry_set_icon_from_gicon (GTK_ENTRY (entry), GTK_ICON_ENTRY_PRIMARY,
                 g_themed_icon_new_with_default_fallbacks ("text-html-symbolic"));
-            #else
-            gtk_icon_entry_set_icon_from_icon_name (GTK_ICON_ENTRY (entry), GTK_ICON_ENTRY_PRIMARY, STOCK_URL);
-            #endif
             gtk_icon_entry_set_tooltip (GTK_ICON_ENTRY (entry),
                 GTK_ICON_ENTRY_PRIMARY, _("Open, unencrypted connection"));
         }
index 16acf824b04d5e23d2420f03fee2cbda6198e7f6..71c44a5f4984924eb1c7b161372ae6bcb04198c8 100644 (file)
@@ -3038,10 +3038,8 @@ webkit_web_view_download_requested_cb (GtkWidget*      web_view,
     WebKitWebDataSource* datasource;
     WebKitNetworkRequest* request;
     GString* details;
-    #if GTK_CHECK_VERSION (2, 14, 0)
     GIcon* icon;
     GtkWidget* image;
-    #endif
     gchar* title;
     GdkScreen* screen;
     GtkIconTheme* icon_theme;
@@ -3064,14 +3062,12 @@ webkit_web_view_download_requested_cb (GtkWidget*      web_view,
         content_type = g_content_type_from_mime_type ("application/octet-stream");
     mime_type = g_content_type_get_mime_type (content_type);
     description = g_content_type_get_description (content_type);
-    #if GTK_CHECK_VERSION (2, 14, 0)
     icon = g_content_type_get_icon (content_type);
     g_themed_icon_append_name (G_THEMED_ICON (icon), "text-html");
     image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_DIALOG);
     g_object_unref (icon);
     gtk_widget_show (image);
     gtk_message_dialog_set_image (GTK_MESSAGE_DIALOG (dialog), image);
-    #endif
     g_free (content_type);
 
     details = g_string_sized_new (20 * 4);
index 2dfc6e117aba1291f8056b693a594000b4fe3dc1..ce3ea4ca8a49551a311ecf121ee133c0836aaa72 100644 (file)
@@ -197,7 +197,6 @@ sokoke_show_uri_with_mime_type (GdkScreen*   screen,
         !g_str_has_prefix (uri, "file://"));
     g_free (content_type);
     files = g_list_prepend (NULL, file);
-    #if GTK_CHECK_VERSION (2, 14, 0)
     #if GTK_CHECK_VERSION (3, 0, 0)
     context = gdk_display_get_app_launch_context (gdk_screen_get_display (screen));
     #else
@@ -205,9 +204,6 @@ sokoke_show_uri_with_mime_type (GdkScreen*   screen,
     #endif
     gdk_app_launch_context_set_screen (context, screen);
     gdk_app_launch_context_set_timestamp (context, timestamp);
-    #else
-    context = g_app_launch_context_new ();
-    #endif
 
     success = g_app_info_launch (app_info, files, context, error);
 
@@ -314,13 +310,8 @@ sokoke_show_uri (GdkScreen*   screen,
 
     sokoke_recursive_fork_protection (uri, TRUE);
 
-    #if GTK_CHECK_VERSION (2, 14, 0)
     if (gtk_show_uri (screen, uri, timestamp, error))
         return TRUE;
-    #else
-    if (g_app_info_launch_default_for_uri (uri, NULL, NULL))
-        return TRUE;
-    #endif
 
     #if !GLIB_CHECK_VERSION (2, 28, 0)
     info = sokoke_default_for_uri (uri, &scheme);
index 89a5d342225e0e759518fb8b8dac8c082835c7e8..6e5435fea6ad5386b687a871fee2b676142de57a 100644 (file)
@@ -52,15 +52,10 @@ midori_findbar_set_icon (MidoriFindbar*       findbar,
 {
     if (icon_name != NULL)
     {
-        #if GTK_CHECK_VERSION (2, 16, 0)
         gchar* symbolic_icon_name = g_strconcat (icon_name, "-symbolic", NULL);
         gtk_entry_set_icon_from_gicon (GTK_ENTRY (findbar->find_text), icon_pos,
             g_themed_icon_new_with_default_fallbacks (symbolic_icon_name));
         g_free (symbolic_icon_name);
-        #else
-        gtk_icon_entry_set_icon_from_icon_name (GTK_ICON_ENTRY (findbar->find_text),
-                                                icon_pos, icon_name);
-        #endif
     }
     else
         gtk_icon_entry_set_icon_from_icon_name (GTK_ICON_ENTRY (findbar->find_text),
diff --git a/wscript b/wscript
index 45d46f2265c8d910d0e5428aca5c50180d05b5d9..1623b3c88c6cab0d60cae64449240663fe9e4ef2 100644 (file)
--- a/wscript
+++ b/wscript
@@ -259,7 +259,7 @@ def configure (conf):
             check_pkg ('javascriptcoregtk-3.0', '1.5.1', args=args)
         conf.env.append_value ('VALAFLAGS', '-D HAVE_GTK3')
     else:
-        check_pkg ('gtk+-2.0', '2.10.0', var='GTK')
+        check_pkg ('gtk+-2.0', '2.16.0', var='GTK')
         check_pkg ('webkit-1.0', '1.1.17', args=args)
         if check_version (conf.check_cfg (modversion='webkit-1.0'), 1, 5, 1):
             check_pkg ('javascriptcoregtk-1.0', '1.5.1', args=args)