[Xfce4-commits] <xfce4-dict:master> Drop SexyIconEntry and use the icon features of GtkEntry directly
Enrico Tröger
noreply at xfce.org
Sat May 5 01:22:05 CEST 2012
Updating branch refs/heads/master
to 509f8c0e2878a9ac169fe84b75dbfb3004b0b319 (commit)
from 2bc550388cf3bcee3d67a7fcd423457fa2b24419 (commit)
commit 509f8c0e2878a9ac169fe84b75dbfb3004b0b319
Author: Enrico Tröger <enrico.troeger at uvena.de>
Date: Sat May 5 01:19:42 2012 +0200
Drop SexyIconEntry and use the icon features of GtkEntry directly
Also drop XfdSearchEntry which is now also obsolete when using the icon features of GtkEntry.
lib/Makefile.am | 4 -
lib/common.c | 3 +-
lib/gui.c | 31 +-
lib/searchentry.c | 147 ------
lib/searchentry.h | 56 ---
lib/sexy-icon-entry.c | 967 --------------------------------------
lib/sexy-icon-entry.h | 100 ----
panel-plugin/xfce4-dict-plugin.c | 17 +-
8 files changed, 28 insertions(+), 1297 deletions(-)
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 5eac26f..15e26f9 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -13,10 +13,6 @@ libdict_la_SOURCES = \
libdict.h \
prefs.c \
prefs.h \
- sexy-icon-entry.c \
- sexy-icon-entry.h \
- searchentry.c \
- searchentry.h \
speedreader.c \
speedreader.h \
spell.c \
diff --git a/lib/common.c b/lib/common.c
index 2a2967e..6154ec8 100644
--- a/lib/common.c
+++ b/lib/common.c
@@ -40,7 +40,6 @@
#include "spell.h"
#include "dictd.h"
#include "gui.h"
-#include "searchentry.h"
@@ -245,7 +244,7 @@ void dict_search_word(DictData *dd, const gchar *word)
}
/* remove leading and trailing spaces */
g_strstrip(dd->searched_word);
- xfd_search_entry_prepend_text(XFD_SEARCH_ENTRY(dd->main_combo), dd->searched_word);
+ gtk_combo_box_prepend_text(GTK_COMBO_BOX(dd->main_combo), dd->searched_word);
dict_gui_clear_text_buffer(dd);
diff --git a/lib/gui.c b/lib/gui.c
index 75c3a2c..6ffb2f7 100644
--- a/lib/gui.c
+++ b/lib/gui.c
@@ -34,8 +34,6 @@
#include "common.h"
#include "gui.h"
-#include "sexy-icon-entry.h"
-#include "searchentry.h"
#include "inline-icon.h"
#include "speedreader.h"
@@ -499,17 +497,18 @@ static void entry_activate_cb(GtkEntry *entry, DictData *dd)
}
-static void entry_icon_pressed_cb(SexyIconEntry *entry, gint icon_pos, gint button, DictData *dd)
+static void entry_icon_release_cb(GtkEntry *entry, GtkEntryIconPosition icon_pos,
+ GdkEventButton *event, DictData *dd)
{
- if (button != 1)
+ if (event->button != 1)
return;
- if (icon_pos == SEXY_ICON_ENTRY_PRIMARY)
+ if (icon_pos == GTK_ENTRY_ICON_PRIMARY)
{
entry_activate_cb(NULL, dd);
gtk_widget_grab_focus(dd->main_entry);
}
- else if (icon_pos == SEXY_ICON_ENTRY_SECONDARY)
+ else if (icon_pos == GTK_ENTRY_ICON_SECONDARY)
{
dict_gui_clear_text_buffer(dd);
gtk_entry_set_text(GTK_ENTRY(dd->main_entry), "");
@@ -521,11 +520,14 @@ static void entry_icon_pressed_cb(SexyIconEntry *entry, gint icon_pos, gint butt
static void combo_changed_cb(GtkComboBox *combo, DictData *dd)
{
- gchar *text = gtk_combo_box_get_active_text(combo);
-
- dict_search_word(dd, text);
+ GtkTreeIter iter;
- g_free(text);
+ if (gtk_combo_box_get_active_iter(combo, &iter))
+ {
+ gchar *text = gtk_combo_box_get_active_text(combo);
+ dict_search_word(dd, text);
+ g_free(text);
+ }
}
@@ -755,15 +757,18 @@ void dict_gui_create_main_window(DictData *dd)
gtk_widget_show(label_box);
gtk_box_pack_start(GTK_BOX(entry_box), label_box, TRUE, TRUE, 5);
- dd->main_combo = xfd_search_entry_new(_("Search term"));
+ dd->main_combo = gtk_combo_box_entry_new_text();
gtk_widget_show(dd->main_combo);
gtk_box_pack_start(GTK_BOX(label_box), dd->main_combo, TRUE, TRUE, 0);
- g_signal_connect(dd->main_combo, "active-changed", G_CALLBACK(combo_changed_cb), dd);
+ g_signal_connect(dd->main_combo, "changed", G_CALLBACK(combo_changed_cb), dd);
dd->main_entry = gtk_bin_get_child(GTK_BIN(dd->main_combo));
+ gtk_entry_set_text(GTK_ENTRY(dd->main_entry), _("Search term"));
+ gtk_entry_set_icon_from_stock(GTK_ENTRY(dd->main_entry), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_FIND);
+ gtk_entry_set_icon_from_stock(GTK_ENTRY(dd->main_entry), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR);
g_signal_connect(dd->main_entry, "changed", G_CALLBACK(entry_changed_cb), dd);
g_signal_connect(dd->main_entry, "activate", G_CALLBACK(entry_activate_cb), dd);
- g_signal_connect(dd->main_entry, "icon_released", G_CALLBACK(entry_icon_pressed_cb), dd);
+ g_signal_connect(dd->main_entry, "icon-release", G_CALLBACK(entry_icon_release_cb), dd);
g_signal_connect(dd->main_entry, "button-press-event", G_CALLBACK(entry_button_press_cb), dd);
update_search_button(dd, entry_box);
diff --git a/lib/searchentry.c b/lib/searchentry.c
deleted file mode 100644
index 2d2b6f9..0000000
--- a/lib/searchentry.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/* $Id$
- *
- * Copyright 2008-2011 Enrico Tröger <enrico(at)xfce(dot)org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU 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 Library General Public License for more details.
- *
- * You should have received a copy of the GNU 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.
- */
-
-
-/* Subclass of a GtkComboBoxEntry which embeds a SexyIconEntry instead of
- * a plain GtkEntry. */
-
-
-#include <gtk/gtk.h>
-#include <string.h>
-#include "searchentry.h"
-#include "sexy-icon-entry.h"
-
-
-enum
-{
- ACTIVE_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-
-G_DEFINE_TYPE(XfdSearchEntry, xfd_search_entry, GTK_TYPE_COMBO_BOX_ENTRY)
-
-
-static void xfd_search_entry_class_init(XfdSearchEntryClass *klass)
-{
- signals[ACTIVE_CHANGED] = g_signal_new("active-changed",
- G_TYPE_FROM_CLASS (klass),
- (GSignalFlags) (G_SIGNAL_RUN_LAST),
- 0,
- 0,
- NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-}
-
-
-static void combo_changed_cb(GtkComboBox *combo_box, gpointer data)
-{
- GtkTreeIter iter;
-
- if (gtk_combo_box_get_active_iter(combo_box, &iter))
- {
- g_signal_emit(XFD_SEARCH_ENTRY(combo_box), signals[ACTIVE_CHANGED], 0);
- }
-}
-
-
-static void xfd_search_entry_init(XfdSearchEntry *self)
-{
- GtkWidget *entry;
- GtkCellRenderer *text_renderer;
-
- /* we want the widget to have appears-as-list applied
- * (code and idea stolen from Midori, thanks Christian) */
- gtk_rc_parse_string("style \"xfd-search-entry-style\" {\n"
- " GtkComboBox::appears-as-list = 1\n }\n"
- "widget_class \"*XfdSearchEntry\" "
- "style \"xfd-search-entry-style\"\n");
-
- entry = sexy_icon_entry_new_full("gtk-find", "gtk-clear");
-
- gtk_widget_show(entry);
- gtk_container_add(GTK_CONTAINER(self), entry);
-
- text_renderer = gtk_cell_renderer_text_new();
- gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(self), text_renderer, TRUE);
-
- gtk_combo_box_set_active(GTK_COMBO_BOX(self), -1);
-
- g_signal_connect(self, "changed", G_CALLBACK(combo_changed_cb), NULL);
-}
-
-
-GtkWidget *xfd_search_entry_new(const gchar *text)
-{
- GtkWidget *widget;
- GtkListStore *store;
-
- store = gtk_list_store_new(1, G_TYPE_STRING);
-
- widget = g_object_new(XFD_SEARCH_ENTRY_TYPE, "model", store, "text-column", 0, NULL);
-
- gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(widget))), text);
-
- g_object_unref(store);
-
- return widget;
-}
-
-
-void xfd_search_entry_prepend_text(XfdSearchEntry *search_entry, const gchar *text)
-{
- GtkTreeIter iter;
- GtkListStore *store;
- GtkTreeModel *model;
- gint i, len;
- gchar *str;
-
- g_return_if_fail(GTK_IS_COMBO_BOX(search_entry));
- g_return_if_fail(text != NULL);
-
- model = gtk_combo_box_get_model(GTK_COMBO_BOX(search_entry));
- store = GTK_LIST_STORE(model);
-
- /* check whether 'text' is already in the model */
- len = gtk_tree_model_iter_n_children(model, NULL);
- for (i = 0; i < len; i++)
- {
- if (gtk_tree_model_iter_nth_child(model, &iter, NULL, i))
- {
- gtk_tree_model_get(model, &iter, 0, &str, -1);
- if (str != NULL && strcmp(str, text) == 0)
- {
- /* if we found 'text' in the model, move it to the top of the list and return */
- gtk_list_store_move_after(store, &iter, NULL);
-
- g_free(str);
- return;
- }
- g_free(str);
- }
- }
-
- /* add 'text' to the model/store */
- gtk_list_store_prepend(store, &iter);
- gtk_list_store_set(store, &iter, 0, text, -1);
-}
-
diff --git a/lib/searchentry.h b/lib/searchentry.h
deleted file mode 100644
index 1bd5a10..0000000
--- a/lib/searchentry.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* $Id$
- *
- * Copyright 2006-2011 Enrico Tröger <enrico(at)xfce(dot)org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU 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 Library General Public License for more details.
- *
- * You should have received a copy of the GNU 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.
- */
-
-
-
-#ifndef __SEARCHENTRY_H__
-#define __SEARCHENTRY_H__
-
-G_BEGIN_DECLS
-
-#define XFD_SEARCH_ENTRY_TYPE (xfd_search_entry_get_type())
-#define XFD_SEARCH_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),\
- XFD_SEARCH_ENTRY_TYPE, XfdSearchEntry))
-#define XFD_SEARCH_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),\
- XFD_SEARCH_ENTRY_TYPE, XfdSearchEntryClass))
-#define IS_XFD_SEARCH_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),\
- XFD_SEARCH_ENTRY_TYPE))
-#define IS_XFD_SEARCH_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),\
- XFD_SEARCH_ENTRY_TYPE))
-
-typedef struct _XfdSearchEntry XfdSearchEntry;
-typedef struct _XfdSearchEntryClass XfdSearchEntryClass;
-
-struct _XfdSearchEntry
-{
- GtkComboBoxEntry parent;
-};
-
-struct _XfdSearchEntryClass
-{
- GtkComboBoxEntryClass parent_class;
-};
-
-GType xfd_search_entry_get_type (void);
-GtkWidget* xfd_search_entry_new (const gchar *text);
-void xfd_search_entry_prepend_text (XfdSearchEntry *search_entry, const gchar *text);
-
-G_END_DECLS
-
-#endif /* __SEARCHENTRY_H__ */
diff --git a/lib/sexy-icon-entry.c b/lib/sexy-icon-entry.c
deleted file mode 100644
index 80fe92a..0000000
--- a/lib/sexy-icon-entry.c
+++ /dev/null
@@ -1,967 +0,0 @@
-/*
- * @file libsexy/sexy-icon-entry.c Entry widget
- *
- * @Copyright (C) 2004-2006 Christian Hammond.
- *
- * 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 "sexy-icon-entry.h"
-#include <string.h>
-#include <gtk/gtk.h>
-
-#define ICON_MARGIN 2
-#define MAX_ICONS 2
-
-#define IS_VALID_ICON_ENTRY_POSITION(pos) \
- ((pos) == SEXY_ICON_ENTRY_PRIMARY || \
- (pos) == SEXY_ICON_ENTRY_SECONDARY)
-
-typedef struct
-{
- GtkImage *icon;
- gboolean highlight;
- gboolean hovered;
- GdkWindow *window;
-
-} SexyIconInfo;
-
-struct _SexyIconEntryPriv
-{
- SexyIconInfo icons[MAX_ICONS];
-
- gulong icon_released_id;
-};
-
-enum
-{
- ICON_PRESSED,
- ICON_RELEASED,
- LAST_SIGNAL
-};
-
-static void sexy_icon_entry_class_init(SexyIconEntryClass *klass);
-static void sexy_icon_entry_editable_init(GtkEditableClass *iface);
-static void sexy_icon_entry_init(SexyIconEntry *entry);
-static void sexy_icon_entry_finalize(GObject *obj);
-static void sexy_icon_entry_destroy(GtkObject *obj);
-static void sexy_icon_entry_map(GtkWidget *widget);
-static void sexy_icon_entry_unmap(GtkWidget *widget);
-static void sexy_icon_entry_realize(GtkWidget *widget);
-static void sexy_icon_entry_unrealize(GtkWidget *widget);
-static void sexy_icon_entry_size_request(GtkWidget *widget,
- GtkRequisition *requisition);
-static void sexy_icon_entry_size_allocate(GtkWidget *widget,
- GtkAllocation *allocation);
-static gint sexy_icon_entry_expose(GtkWidget *widget, GdkEventExpose *event);
-static gint sexy_icon_entry_enter_notify(GtkWidget *widget,
- GdkEventCrossing *event);
-static gint sexy_icon_entry_leave_notify(GtkWidget *widget,
- GdkEventCrossing *event);
-static gint sexy_icon_entry_button_press(GtkWidget *widget,
- GdkEventButton *event);
-static gint sexy_icon_entry_button_release(GtkWidget *widget,
- GdkEventButton *event);
-
-static GtkEntryClass *parent_class = NULL;
-static guint signals[LAST_SIGNAL] = {0};
-
-G_DEFINE_TYPE_EXTENDED(SexyIconEntry, sexy_icon_entry, GTK_TYPE_ENTRY,
- 0,
- G_IMPLEMENT_INTERFACE(GTK_TYPE_EDITABLE,
- sexy_icon_entry_editable_init));
-
-static void
-sexy_icon_entry_class_init(SexyIconEntryClass *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 = sexy_icon_entry_finalize;
-
- object_class->destroy = sexy_icon_entry_destroy;
-
- widget_class->map = sexy_icon_entry_map;
- widget_class->unmap = sexy_icon_entry_unmap;
- widget_class->realize = sexy_icon_entry_realize;
- widget_class->unrealize = sexy_icon_entry_unrealize;
- widget_class->size_request = sexy_icon_entry_size_request;
- widget_class->size_allocate = sexy_icon_entry_size_allocate;
- widget_class->expose_event = sexy_icon_entry_expose;
- widget_class->enter_notify_event = sexy_icon_entry_enter_notify;
- widget_class->leave_notify_event = sexy_icon_entry_leave_notify;
- widget_class->button_press_event = sexy_icon_entry_button_press;
- widget_class->button_release_event = sexy_icon_entry_button_release;
-
- /**
- * SexyIconEntry::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.
- */
- signals[ICON_PRESSED] =
- g_signal_new("icon_pressed",
- G_TYPE_FROM_CLASS(gobject_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET(SexyIconEntryClass, icon_pressed),
- NULL, NULL,
- gtk_marshal_VOID__INT_INT,
- G_TYPE_NONE, 2,
- G_TYPE_INT,
- G_TYPE_INT);
-
- /**
- * SexyIconEntry::icon-released:
- * @entry: The entry on which the signal is emitted.
- * @icon_pos: The position of the clicked icon.
- * @button: The mouse button clicked.
- *
- * The ::icon-released signal is emitted on the button release from a
- * mouse click.
- */
- signals[ICON_RELEASED] =
- g_signal_new("icon_released",
- G_TYPE_FROM_CLASS(gobject_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET(SexyIconEntryClass, icon_released),
- NULL, NULL,
- gtk_marshal_VOID__INT_INT,
- G_TYPE_NONE, 2,
- G_TYPE_INT,
- G_TYPE_INT);
-}
-
-static void
-sexy_icon_entry_editable_init(GtkEditableClass *iface)
-{
-};
-
-static void
-sexy_icon_entry_init(SexyIconEntry *entry)
-{
- entry->priv = g_new0(SexyIconEntryPriv, 1);
-}
-
-static void
-sexy_icon_entry_finalize(GObject *obj)
-{
- SexyIconEntry *entry;
-
- g_return_if_fail(obj != NULL);
- g_return_if_fail(SEXY_IS_ICON_ENTRY(obj));
-
- entry = SEXY_ICON_ENTRY(obj);
-
- g_free(entry->priv);
-
- if (G_OBJECT_CLASS(parent_class)->finalize)
- G_OBJECT_CLASS(parent_class)->finalize(obj);
-}
-
-static void
-sexy_icon_entry_destroy(GtkObject *obj)
-{
- SexyIconEntry *entry;
-
- entry = SEXY_ICON_ENTRY(obj);
-
- sexy_icon_entry_set_icon(entry, SEXY_ICON_ENTRY_PRIMARY, NULL);
- sexy_icon_entry_set_icon(entry, SEXY_ICON_ENTRY_SECONDARY, NULL);
-
- if (GTK_OBJECT_CLASS(parent_class)->destroy)
- GTK_OBJECT_CLASS(parent_class)->destroy(obj);
-}
-
-static void
-sexy_icon_entry_map(GtkWidget *widget)
-{
- if (GTK_WIDGET_REALIZED(widget) && !GTK_WIDGET_MAPPED(widget))
- {
- SexyIconEntry *entry = SEXY_ICON_ENTRY(widget);
- int i;
-
- GTK_WIDGET_CLASS(parent_class)->map(widget);
-
- for (i = 0; i < MAX_ICONS; i++)
- {
- if (entry->priv->icons[i].icon != NULL)
- gdk_window_show(entry->priv->icons[i].window);
- }
- }
-}
-
-static void
-sexy_icon_entry_unmap(GtkWidget *widget)
-{
- if (GTK_WIDGET_MAPPED(widget))
- {
- SexyIconEntry *entry = SEXY_ICON_ENTRY(widget);
- int i;
-
- for (i = 0; i < MAX_ICONS; i++)
- {
- if (entry->priv->icons[i].icon != NULL)
- gdk_window_hide(entry->priv->icons[i].window);
- }
-
- GTK_WIDGET_CLASS(parent_class)->unmap(widget);
- }
-}
-
-static gint
-get_icon_width(SexyIconEntry *entry, SexyIconEntryPosition icon_pos)
-{
- GtkRequisition requisition;
- gint menu_icon_width;
- gint width;
- SexyIconInfo *icon_info = &entry->priv->icons[icon_pos];
-
- if (icon_info->icon == NULL)
- return 0;
-
- gtk_widget_size_request(GTK_WIDGET(icon_info->icon), &requisition);
- gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &menu_icon_width, NULL);
-
- width = MAX(requisition.width, menu_icon_width);
-
- return width;
-}
-
-static void
-get_borders(SexyIconEntry *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(SexyIconEntry *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(SexyIconEntry *icon_entry,
- gboolean left,
- GtkAllocation *widget_alloc,
- GtkAllocation *text_area_alloc,
- GtkAllocation *allocation,
- SexyIconEntryPosition *icon_pos)
-{
- gboolean rtl;
-
- rtl = (gtk_widget_get_direction(GTK_WIDGET(icon_entry)) ==
- GTK_TEXT_DIR_RTL);
-
- if (left)
- *icon_pos = (rtl ? SEXY_ICON_ENTRY_SECONDARY : SEXY_ICON_ENTRY_PRIMARY);
- else
- *icon_pos = (rtl ? SEXY_ICON_ENTRY_PRIMARY : SEXY_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
-sexy_icon_entry_realize(GtkWidget *widget)
-{
- SexyIconEntry *entry = SEXY_ICON_ENTRY(widget);
- GdkWindowAttr attributes;
- gint attributes_mask;
- int i;
-
- 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++)
- {
- SexyIconInfo *icon_info;
-
- icon_info = &entry->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
-sexy_icon_entry_unrealize(GtkWidget *widget)
-{
- SexyIconEntry *entry = SEXY_ICON_ENTRY(widget);
- int i;
-
- GTK_WIDGET_CLASS(parent_class)->unrealize(widget);
-
- for (i = 0; i < MAX_ICONS; i++)
- {
- SexyIconInfo *icon_info = &entry->priv->icons[i];
-
- gdk_window_destroy(icon_info->window);
- icon_info->window = NULL;
- }
-}
-
-static void
-sexy_icon_entry_size_request(GtkWidget *widget, GtkRequisition *requisition)
-{
- GtkEntry *gtkentry;
- SexyIconEntry *entry;
- gint icon_widths = 0;
- int i;
-
- gtkentry = GTK_ENTRY(widget);
- entry = SEXY_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(SexyIconEntry *icon_entry, GtkAllocation *widget_alloc)
-{
- SexyIconEntryPosition left_icon_pos;
- SexyIconEntryPosition right_icon_pos;
- GtkAllocation left_icon_alloc;
- GtkAllocation right_icon_alloc;
- GtkAllocation text_area_alloc;
- gint y;
-
- 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(icon_entry->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(icon_entry->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
-sexy_icon_entry_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
-{
- g_return_if_fail(SEXY_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(SEXY_ICON_ENTRY(widget), allocation);
-}
-
-static GdkPixbuf *
-get_pixbuf_from_icon(SexyIconEntry *entry, SexyIconEntryPosition icon_pos)
-{
- GdkPixbuf *pixbuf = NULL;
- const gchar *stock_id;
- SexyIconInfo *icon_info = &entry->priv->icons[icon_pos];
- GtkIconSize size;
- int w, h;
-
- switch (gtk_image_get_storage_type(GTK_IMAGE(icon_info->icon)))
- {
- case GTK_IMAGE_PIXBUF:
- pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(icon_info->icon));
- g_object_ref(pixbuf);
- break;
-
- case GTK_IMAGE_STOCK:
- gtk_image_get_stock(GTK_IMAGE(icon_info->icon), (char**)&stock_id, &size);
- pixbuf = gtk_widget_render_icon(GTK_WIDGET(entry),
- stock_id, size, NULL);
- break;
-
- case GTK_IMAGE_ICON_NAME:
- gtk_image_get_icon_name (GTK_IMAGE(icon_info->icon), &stock_id, &size);
- gtk_icon_size_lookup (size, &w, &h);
- pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), stock_id, size, 0, NULL);
- break;
-
- default:
- return NULL;
- }
-
- return 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, SexyIconEntryPosition icon_pos)
-{
- SexyIconEntry *entry = SEXY_ICON_ENTRY(widget);
- SexyIconInfo *icon_info = &entry->priv->icons[icon_pos];
- GdkPixbuf *pixbuf;
- gint x, y, width, height;
-
- if (icon_info->icon == 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->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
-sexy_icon_entry_expose(GtkWidget *widget, GdkEventExpose *event)
-{
- SexyIconEntry *entry;
-
- g_return_val_if_fail(SEXY_IS_ICON_ENTRY(widget), FALSE);
- g_return_val_if_fail(event != NULL, FALSE);
-
- entry = SEXY_ICON_ENTRY(widget);
-
- if (GTK_WIDGET_DRAWABLE(widget))
- {
- gboolean found = FALSE;
- int i;
-
- for (i = 0; i < MAX_ICONS && !found; i++)
- {
- SexyIconInfo *icon_info = &entry->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 void
-update_icon(GObject *obj, GParamSpec *param, SexyIconEntry *entry)
-{
- if (param != NULL)
- {
- const char *name = g_param_spec_get_name(param);
-
- if (strcmp(name, "pixbuf") && strcmp(name, "stock") &&
- strcmp(name, "image") && strcmp(name, "pixmap") &&
- strcmp(name, "icon-set") && strcmp(name, "pixbuf-animation") &&
- strcmp(name, "icon-name"))
- {
- return;
- }
- }
-
- gtk_widget_queue_resize(GTK_WIDGET(entry));
-}
-
-static gint
-sexy_icon_entry_enter_notify(GtkWidget *widget, GdkEventCrossing *event)
-{
- SexyIconEntry *entry = SEXY_ICON_ENTRY(widget);
- int i;
-
- for (i = 0; i < MAX_ICONS; i++)
- {
- if (event->window == entry->priv->icons[i].window)
- {
- if (sexy_icon_entry_get_icon_highlight(entry, i))
- {
- entry->priv->icons[i].hovered = TRUE;
-
- update_icon(NULL, NULL, entry);
-
- break;
- }
- }
- }
-
- return FALSE;
-}
-
-static gint
-sexy_icon_entry_leave_notify(GtkWidget *widget, GdkEventCrossing *event)
-{
- SexyIconEntry *entry = SEXY_ICON_ENTRY(widget);
- int i;
-
- for (i = 0; i < MAX_ICONS; i++)
- {
- if (event->window == entry->priv->icons[i].window)
- {
- if (sexy_icon_entry_get_icon_highlight(entry, i))
- {
- entry->priv->icons[i].hovered = FALSE;
-
- update_icon(NULL, NULL, entry);
-
- break;
- }
- }
- }
-
- return FALSE;
-}
-
-static gint
-sexy_icon_entry_button_press(GtkWidget *widget, GdkEventButton *event)
-{
- SexyIconEntry *entry = SEXY_ICON_ENTRY(widget);
- int i;
-
- for (i = 0; i < MAX_ICONS; i++)
- {
- if (event->window == entry->priv->icons[i].window)
- {
- if (event->button == 1 &&
- sexy_icon_entry_get_icon_highlight(entry, i))
- {
- entry->priv->icons[i].hovered = FALSE;
-
- update_icon(NULL, NULL, entry);
- }
-
- 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
-sexy_icon_entry_button_release(GtkWidget *widget, GdkEventButton *event)
-{
- SexyIconEntry *entry = SEXY_ICON_ENTRY(widget);
- int i;
-
- for (i = 0; i < MAX_ICONS; i++)
- {
- GdkWindow *icon_window = entry->priv->icons[i].window;
-
- if (event->window == icon_window)
- {
- int width, height;
- gdk_drawable_get_size(icon_window, &width, &height);
-
- if (event->button == 1 &&
- sexy_icon_entry_get_icon_highlight(entry, i) &&
- event->x >= 0 && event->y >= 0 &&
- event->x <= width && event->y <= height)
- {
- entry->priv->icons[i].hovered = TRUE;
-
- update_icon(NULL, NULL, entry);
- }
-
- 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;
-}
-
-/**
- * sexy_icon_entry_new
- *
- * Creates a new SexyIconEntry widget.
- *
- * Returns a new #SexyIconEntry.
- */
-GtkWidget *
-sexy_icon_entry_new(void)
-{
- return GTK_WIDGET(g_object_new(SEXY_TYPE_ICON_ENTRY, NULL));
-}
-
-
-GtkWidget *sexy_icon_entry_new_full(const gchar *stock_id_pri, const gchar *stock_id_sec)
-{
- GtkWidget *icon;
- SexyIconEntry *entry;
-
- entry = g_object_new(SEXY_TYPE_ICON_ENTRY, NULL);
-
- if (stock_id_pri != NULL)
- {
- icon = gtk_image_new_from_stock(stock_id_pri, GTK_ICON_SIZE_MENU);
- gtk_widget_show(icon);
- sexy_icon_entry_set_icon(SEXY_ICON_ENTRY(entry), SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE(icon));
- sexy_icon_entry_set_icon_highlight(SEXY_ICON_ENTRY(entry), SEXY_ICON_ENTRY_PRIMARY, TRUE);
- }
-
- if (stock_id_sec != NULL)
- {
- icon = gtk_image_new_from_stock(stock_id_sec, GTK_ICON_SIZE_MENU);
- gtk_widget_show(icon);
- sexy_icon_entry_set_icon(SEXY_ICON_ENTRY(entry), SEXY_ICON_ENTRY_SECONDARY, GTK_IMAGE(icon));
- sexy_icon_entry_set_icon_highlight(SEXY_ICON_ENTRY(entry), SEXY_ICON_ENTRY_SECONDARY, TRUE);
- }
-
- return GTK_WIDGET(entry);
-}
-
-
-/**
- * sexy_icon_entry_set_icon
- * @entry: A #SexyIconEntry.
- * @position: Icon position.
- * @icon: A #GtkImage to set as the icon.
- *
- * Sets the icon shown in the entry
- */
-void
-sexy_icon_entry_set_icon(SexyIconEntry *entry, SexyIconEntryPosition icon_pos,
- GtkImage *icon)
-{
- SexyIconInfo *icon_info;
-
- g_return_if_fail(entry != NULL);
- g_return_if_fail(SEXY_IS_ICON_ENTRY(entry));
- g_return_if_fail(IS_VALID_ICON_ENTRY_POSITION(icon_pos));
- g_return_if_fail(icon == NULL || GTK_IS_IMAGE(icon));
-
- icon_info = &entry->priv->icons[icon_pos];
-
- if (icon == icon_info->icon)
- return;
-
- if (icon_pos == SEXY_ICON_ENTRY_SECONDARY &&
- entry->priv->icon_released_id != 0)
- {
- g_signal_handler_disconnect(entry, entry->priv->icon_released_id);
- entry->priv->icon_released_id = 0;
- }
-
- if (icon == NULL)
- {
- if (icon_info->icon != NULL)
- {
- gtk_widget_destroy(GTK_WIDGET(icon_info->icon));
- icon_info->icon = 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->icon == NULL)
- gdk_window_show(icon_info->window);
-
- g_signal_connect(G_OBJECT(icon), "notify",
- G_CALLBACK(update_icon), entry);
-
- icon_info->icon = icon;
- g_object_ref(icon);
- }
-
- update_icon(NULL, NULL, entry);
-}
-
-/**
- * sexy_icon_entry_set_icon_highlight
- * @entry: A #SexyIconEntry;
- * @position: Icon position.
- * @highlight: TRUE if the icon should highlight on mouse-over
- *
- * Determines whether the icon will highlight on mouse-over.
- */
-void
-sexy_icon_entry_set_icon_highlight(SexyIconEntry *entry,
- SexyIconEntryPosition icon_pos,
- gboolean highlight)
-{
- SexyIconInfo *icon_info;
-
- g_return_if_fail(entry != NULL);
- g_return_if_fail(SEXY_IS_ICON_ENTRY(entry));
- g_return_if_fail(IS_VALID_ICON_ENTRY_POSITION(icon_pos));
-
- icon_info = &entry->priv->icons[icon_pos];
-
- if (icon_info->highlight == highlight)
- return;
-
- icon_info->highlight = highlight;
-}
-
-/**
- * sexy_icon_entry_get_icon
- * @entry: A #SexyIconEntry.
- * @position: Icon position.
- *
- * Retrieves the image used for the icon
- *
- * Returns: A #GtkImage.
- */
-GtkImage *
-sexy_icon_entry_get_icon(const SexyIconEntry *entry,
- SexyIconEntryPosition icon_pos)
-{
- g_return_val_if_fail(entry != NULL, NULL);
- g_return_val_if_fail(SEXY_IS_ICON_ENTRY(entry), NULL);
- g_return_val_if_fail(IS_VALID_ICON_ENTRY_POSITION(icon_pos), NULL);
-
- return entry->priv->icons[icon_pos].icon;
-}
-
-/**
- * sexy_icon_entry_get_icon_highlight
- * @entry: A #SexyIconEntry.
- * @position: Icon position.
- *
- * Retrieves whether entry will highlight the icon on mouseover.
- *
- * Returns: TRUE if icon highlights.
- */
-gboolean
-sexy_icon_entry_get_icon_highlight(const SexyIconEntry *entry,
- SexyIconEntryPosition icon_pos)
-{
- g_return_val_if_fail(entry != NULL, FALSE);
- g_return_val_if_fail(SEXY_IS_ICON_ENTRY(entry), FALSE);
- g_return_val_if_fail(IS_VALID_ICON_ENTRY_POSITION(icon_pos), FALSE);
-
- return entry->priv->icons[icon_pos].highlight;
-}
diff --git a/lib/sexy-icon-entry.h b/lib/sexy-icon-entry.h
deleted file mode 100644
index f136bc2..0000000
--- a/lib/sexy-icon-entry.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * @file libsexy/sexy-icon-entry.h Entry widget
- *
- * @Copyright (C) 2004-2006 Christian Hammond.
- *
- * 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.
- */
-#ifndef _SEXY_ICON_ENTRY_H_
-#define _SEXY_ICON_ENTRY_H_
-
-typedef struct _SexyIconEntry SexyIconEntry;
-typedef struct _SexyIconEntryClass SexyIconEntryClass;
-typedef struct _SexyIconEntryPriv SexyIconEntryPriv;
-
-#include <gtk/gtkentry.h>
-#include <gtk/gtkimage.h>
-
-#define SEXY_TYPE_ICON_ENTRY (sexy_icon_entry_get_type())
-#define SEXY_ICON_ENTRY(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), SEXY_TYPE_ICON_ENTRY, SexyIconEntry))
-#define SEXY_ICON_ENTRY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), SEXY_TYPE_ICON_ENTRY, SexyIconEntryClass))
-#define SEXY_IS_ICON_ENTRY(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), SEXY_TYPE_ICON_ENTRY))
-#define SEXY_IS_ICON_ENTRY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), SEXY_TYPE_ICON_ENTRY))
-#define SEXY_ICON_ENTRY_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), SEXY_TYPE_ICON_ENTRY, SexyIconEntryClass))
-
-typedef enum
-{
- SEXY_ICON_ENTRY_PRIMARY,
- SEXY_ICON_ENTRY_SECONDARY
-
-} SexyIconEntryPosition;
-
-struct _SexyIconEntry
-{
- GtkEntry parent_object;
-
- SexyIconEntryPriv *priv;
-
- void (*gtk_reserved1)(void);
- void (*gtk_reserved2)(void);
- void (*gtk_reserved3)(void);
- void (*gtk_reserved4)(void);
-};
-
-struct _SexyIconEntryClass
-{
- GtkEntryClass parent_class;
-
- /* Signals */
- void (*icon_pressed)(SexyIconEntry *entry, SexyIconEntryPosition icon_pos,
- int button);
- void (*icon_released)(SexyIconEntry *entry, SexyIconEntryPosition icon_pos,
- int button);
-
- void (*gtk_reserved1)(void);
- void (*gtk_reserved2)(void);
- void (*gtk_reserved3)(void);
- void (*gtk_reserved4)(void);
-};
-
-G_BEGIN_DECLS
-
-GType sexy_icon_entry_get_type(void);
-
-GtkWidget *sexy_icon_entry_new(void);
-GtkWidget *sexy_icon_entry_new_full(const gchar *stock_id_pri, const gchar *stock_id_sec);
-
-void sexy_icon_entry_set_icon(SexyIconEntry *entry,
- SexyIconEntryPosition position,
- GtkImage *icon);
-
-void sexy_icon_entry_set_icon_highlight(SexyIconEntry *entry,
- SexyIconEntryPosition position,
- gboolean highlight);
-
-GtkImage *sexy_icon_entry_get_icon(const SexyIconEntry *entry,
- SexyIconEntryPosition position);
-
-gboolean sexy_icon_entry_get_icon_highlight(const SexyIconEntry *entry,
- SexyIconEntryPosition position);
-G_END_DECLS
-
-#endif /* _SEXY_ICON_ENTRY_H_ */
diff --git a/panel-plugin/xfce4-dict-plugin.c b/panel-plugin/xfce4-dict-plugin.c
index 1b3198b..6389ef0 100644
--- a/panel-plugin/xfce4-dict-plugin.c
+++ b/panel-plugin/xfce4-dict-plugin.c
@@ -1,6 +1,6 @@
/* $Id$
*
- * Copyright 2006-2011 Enrico Tröger <enrico(at)xfce(dot)org>
+ * Copyright 2006-2012 Enrico Tröger <enrico(at)xfce(dot)org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -38,7 +38,6 @@
#include <string.h>
#include "libdict.h"
-#include "sexy-icon-entry.h"
typedef struct
@@ -348,17 +347,18 @@ static void entry_activate_cb(GtkEntry *entry, DictPanelData *dpd)
}
-static void entry_icon_pressed_cb(SexyIconEntry *entry, gint pos, gint button, DictPanelData *dpd)
+static void entry_icon_release_cb(GtkEntry *entry, GtkEntryIconPosition icon_pos,
+ GdkEventButton *event, DictPanelData *dpd)
{
- if (button != 1)
+ if (event->button != 1)
return;
- if (pos == SEXY_ICON_ENTRY_PRIMARY)
+ if (icon_pos == GTK_ENTRY_ICON_PRIMARY)
{
entry_activate_cb(NULL, dpd);
gtk_widget_grab_focus(dpd->dd->main_entry);
}
- else if (pos == SEXY_ICON_ENTRY_SECONDARY)
+ else if (icon_pos == GTK_ENTRY_ICON_SECONDARY)
{
dict_gui_clear_text_buffer(dpd->dd);
gtk_entry_set_text(GTK_ENTRY(dpd->dd->main_entry), "");
@@ -461,10 +461,11 @@ static void dict_plugin_construct(XfcePanelPlugin *plugin)
g_signal_connect(dpd->dd->pref_menu_item, "activate", G_CALLBACK(dict_plugin_properties_dialog), dpd);
/* panel entry */
- dpd->dd->panel_entry = sexy_icon_entry_new_full(NULL, "gtk-clear");
+ dpd->dd->panel_entry = gtk_entry_new();
+ gtk_entry_set_icon_from_stock(GTK_ENTRY(dpd->dd->panel_entry), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR);
gtk_entry_set_width_chars(GTK_ENTRY(dpd->dd->panel_entry), 25);
gtk_entry_set_text(GTK_ENTRY(dpd->dd->panel_entry), _("Search term"));
- g_signal_connect(dpd->dd->panel_entry, "icon_released", G_CALLBACK(entry_icon_pressed_cb), dpd);
+ g_signal_connect(dpd->dd->panel_entry, "icon-release", G_CALLBACK(entry_icon_release_cb), dpd);
g_signal_connect(dpd->dd->panel_entry, "activate", G_CALLBACK(entry_activate_cb), dpd);
g_signal_connect(dpd->dd->panel_entry, "button-press-event", G_CALLBACK(entry_buttonpress_cb), dpd);
g_signal_connect(dpd->dd->panel_entry, "changed", G_CALLBACK(entry_changed_cb), dpd);
More information about the Xfce4-commits
mailing list