summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShaun McCance <shaunm@gnome.org>2014-06-23 20:10:08 -0400
committerShaun McCance <shaunm@gnome.org>2014-06-23 20:10:08 -0400
commit1e97db75c33d4027651233ecdc8c7f463f52923a (patch)
treec397f5f5552a0563a74038f8ac3c798608c6b69d
parentaf27bf16ee95cbf9d4cf7793145e24fa02423984 (diff)
downloadyelp-3.13.3.tar.gz
Build fixes3.13.3
-rw-r--r--libyelp/Makefile.am2
-rw-r--r--libyelp/yelp-location-entry.c1648
-rw-r--r--libyelp/yelp-location-entry.h79
-rw-r--r--po/POTFILES.in1
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/test-location-entry.c325
-rw-r--r--tests/test-view.c1
7 files changed, 1 insertions, 2059 deletions
diff --git a/libyelp/Makefile.am b/libyelp/Makefile.am
index 1314060e..75606e0a 100644
--- a/libyelp/Makefile.am
+++ b/libyelp/Makefile.am
@@ -60,9 +60,9 @@ libyelp_headers = \
yelp-document.h \
yelp-help-list.h \
yelp-info-document.h \
- yelp-location-entry.h \
yelp-mallard-document.h \
yelp-man-document.h \
+ yelp-search-entry.h \
yelp-settings.h \
yelp-simple-document.h \
yelp-sqlite-storage.h \
diff --git a/libyelp/yelp-location-entry.c b/libyelp/yelp-location-entry.c
deleted file mode 100644
index 30bc01b6..00000000
--- a/libyelp/yelp-location-entry.c
+++ /dev/null
@@ -1,1648 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2009 Shaun McCance <shaunm@gnome.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
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Shaun McCance <shaunm@gnome.org>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-
-#include "yelp-location-entry.h"
-#include "yelp-marshal.h"
-#include "yelp-settings.h"
-
-/**
- * SECTION:yelp-location-entry
- * @short_description: A location entry with history and search
- * @include: yelp.h
- *
- * #YelpLocationEntry is a #GtkComboBox designed to show the current location,
- * provide a drop-down menu of previous locations, and allow the user to perform
- * searches.
- *
- * The #GtkTreeModel used by a #YelpLocationEntry is expected to have at least
- * four columns: #GtkComboBox::entry-text-column contains the displayed name
- * of the location, #YelpLocationEntry::desc-column contains a description
- * for each entry, #YelpLocationEntry::icon-column contains an icon name for
- * the location, and #YelpLocationEntry::flags-column contains a bit field
- * of #YelpLocationEntryFlags. These columns are specified when creating a
- * #YelpLocationEntry widget with yelp_location_entry_new_with_model().
- *
- * Usually, a single row in the #GtkTreeModel corresponds to a location. When
- * a user selects a row from the drop-down menu, the icon and text for that
- * row will be placed in the embedded text entry, and the
- * #YelpLocationEntry:location-selected signal will be emitted.
- *
- * If a row has the %YELP_LOCATION_ENTRY_IS_SEARCH flag set, selecting that
- * row will not emit the #YelpLocationEntry::location-selected signal. Instead,
- * the #YelpLocationEntry widget will be placed into search mode, as if by a
- * call to yelp_location_entry_start_search().
- *
- * When a row has the %YELP_LOCATION_ENTRY_CAN_BOOKMARK flag set, an icon
- * will be displayed in the secondary icon position of the embedded text
- * entry allowing the user to bookmark the location. Clicking this icon
- * will cause the FIXME signal to be emitted.
- **/
-
-static void location_entry_constructed (GObject *object);
-static void location_entry_dispose (GObject *object);
-static void location_entry_finalize (GObject *object);
-static void location_entry_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-static void location_entry_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-
-/* Signals */
-static void location_entry_location_selected (YelpLocationEntry *entry);
-static void location_entry_search_activated (YelpLocationEntry *entry);
-static void location_entry_bookmark_clicked (YelpLocationEntry *entry);
-
-/* Utilities */
-static void location_entry_start_search (YelpLocationEntry *entry,
- gboolean clear);
-static void location_entry_cancel_search (YelpLocationEntry *entry);
-static void location_entry_set_entry (YelpLocationEntry *entry,
- gboolean emit);
-static gboolean location_entry_start_pulse (gpointer data);
-static gboolean location_entry_pulse (gpointer data);
-static void location_entry_set_completion (YelpLocationEntry *entry,
- GtkTreeModel *model);
-
-
-/* GtkTreeModel callbacks */
-static void history_row_changed (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer user_data);
-/* GtkComboBox callbacks */
-static void combo_box_changed_cb (GtkComboBox *widget,
- gpointer user_data);
-static gboolean combo_box_row_separator_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer user_data);
-/* GtkEntry callbacks */
-static gboolean entry_focus_in_cb (GtkWidget *widget,
- GdkEventFocus *event,
- gpointer user_data);
-static gboolean entry_focus_out_cb (GtkWidget *widget,
- GdkEventFocus *event,
- gpointer user_data);
-static void entry_activate_cb (GtkEntry *text_entry,
- gpointer user_data);
-static void entry_icon_press_cb (GtkEntry *gtkentry,
- GtkEntryIconPosition icon_pos,
- GdkEvent *event,
- YelpLocationEntry *entry);
-static gboolean entry_key_press_cb (GtkWidget *widget,
- GdkEventKey *event,
- YelpLocationEntry *entry);
-/* GtkCellLayout callbacks */
-static void cell_set_text_cell (GtkCellLayout *layout,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- YelpLocationEntry *entry);
-static void cell_set_bookmark_icon (GtkCellLayout *layout,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- YelpLocationEntry *entry);
-/* GtkEntryCompletion callbacks */
-static void cell_set_completion_bookmark_icon (GtkCellLayout *layout,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- YelpLocationEntry *entry);
-static void cell_set_completion_text_cell (GtkCellLayout *layout,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- YelpLocationEntry *entry);
-static gboolean entry_match_func (GtkEntryCompletion *completion,
- const gchar *key,
- GtkTreeIter *iter,
- YelpLocationEntry *entry);
-static gint entry_completion_sort (GtkTreeModel *model,
- GtkTreeIter *iter1,
- GtkTreeIter *iter2,
- gpointer user_data);
-static gboolean entry_match_selected (GtkEntryCompletion *completion,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- YelpLocationEntry *entry);
-/* YelpView callbacks */
-static void view_loaded (YelpView *view,
- YelpLocationEntry *entry);
-static void view_uri_selected (YelpView *view,
- GParamSpec *pspec,
- YelpLocationEntry *entry);
-static void view_page_title (YelpView *view,
- GParamSpec *pspec,
- YelpLocationEntry *entry);
-static void view_page_desc (YelpView *view,
- GParamSpec *pspec,
- YelpLocationEntry *entry);
-static void view_page_icon (YelpView *view,
- GParamSpec *pspec,
- YelpLocationEntry *entry);
-/* YelpBookmarks callbacks */
-static void bookmarks_changed (YelpBookmarks *bookmarks,
- const gchar *doc_uri,
- YelpLocationEntry *entry);
-
-
-
-typedef struct _YelpLocationEntryPrivate YelpLocationEntryPrivate;
-struct _YelpLocationEntryPrivate
-{
- YelpView *view;
- YelpBookmarks *bookmarks;
- GtkTreeRowReference *row;
- gchar *completion_uri;
-
- /* do not free below */
- GtkWidget *text_entry;
- GtkCellRenderer *icon_cell;
- GtkListStore *history;
- GtkEntryCompletion *completion;
-
- gboolean enable_search;
- gboolean view_uri_selected;
- gboolean search_mode;
- guint pulse;
- gulong bookmarks_changed;
-
- gboolean icon_is_clear;
-};
-
-enum {
- LOCATION_ENTRY_IS_LOADING = 1 << 0,
- LOCATION_ENTRY_IS_SEPARATOR = 1 << 1,
- LOCATION_ENTRY_IS_SEARCH = 1 << 2
-};
-
-enum {
- HISTORY_COL_TITLE,
- HISTORY_COL_DESC,
- HISTORY_COL_ICON,
- HISTORY_COL_URI,
- HISTORY_COL_DOC,
- HISTORY_COL_PAGE,
- HISTORY_COL_FLAGS,
- HISTORY_COL_TERMS
-};
-
-enum {
- COMPLETION_COL_TITLE,
- COMPLETION_COL_DESC,
- COMPLETION_COL_ICON,
- COMPLETION_COL_PAGE,
- COMPLETION_COL_FLAGS
-};
-
-enum {
- COMPLETION_FLAG_ACTIVATE_SEARCH = 1<<0
-};
-
-enum {
- LOCATION_SELECTED,
- SEARCH_ACTIVATED,
- BOOKMARK_CLICKED,
- LAST_SIGNAL
-};
-
-enum {
- PROP_0,
- PROP_VIEW,
- PROP_BOOKMARKS,
- PROP_ENABLE_SEARCH
-};
-
-static GHashTable *completions;
-
-static guint location_entry_signals[LAST_SIGNAL] = {0,};
-
-#define MAX_HISTORY 8
-
-G_DEFINE_TYPE (YelpLocationEntry, yelp_location_entry, GTK_TYPE_COMBO_BOX)
-#define GET_PRIV(object) (G_TYPE_INSTANCE_GET_PRIVATE((object), YELP_TYPE_LOCATION_ENTRY, YelpLocationEntryPrivate))
-
-static void
-yelp_location_entry_class_init (YelpLocationEntryClass *klass)
-{
- GObjectClass *object_class;
-
- klass->location_selected = location_entry_location_selected;
- klass->search_activated = location_entry_search_activated;
- klass->bookmark_clicked = location_entry_bookmark_clicked;
-
- object_class = G_OBJECT_CLASS (klass);
-
- object_class->constructed = location_entry_constructed;
- object_class->dispose = location_entry_dispose;
- object_class->finalize = location_entry_finalize;
- object_class->get_property = location_entry_get_property;
- object_class->set_property = location_entry_set_property;
-
- /**
- * YelpLocationEntry::location-selected
- * @widget: The #YelpLocationEntry for which the signal was emitted.
- * @user_data: User data set when the handler was connected.
- *
- * This signal will be emitted whenever a user selects a normal row from the
- * drop-down menu. Note that if a row has the flag %YELP_LOCATION_ENTRY_IS_SEARCH,
- * clicking the row will cause @widget to enter search mode, and this signal
- * will not be emitted.
- **/
- location_entry_signals[LOCATION_SELECTED] =
- g_signal_new ("location-selected",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (YelpLocationEntryClass, location_selected),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- /**
- * YelpLocationEntry::search-activated
- * @widget: The #YelpLocationEntry for which the signal was emitted.
- * @text: The search text.
- * @user_data: User data set when the handler was connected.
- *
- * This signal will be emitted whenever the user activates a search, generally
- * by pressing <keycap>Enter</keycap> in the embedded text entry while @widget
- * is in search mode.
- **/
- location_entry_signals[SEARCH_ACTIVATED] =
- g_signal_new ("search-activated",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (YelpLocationEntryClass, search_activated),
- NULL, NULL,
- g_cclosure_marshal_VOID__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- /**
- * YelpLocationEntry::bookmark-clicked
- * @widget: The #YelpLocationEntry for which the signal was emitted.
- * @user_data: User data set when the handler was connected.
- *
- * This signal will be emitted whenever a user clicks the bookmark icon
- * embedded in the location entry.
- **/
- location_entry_signals[BOOKMARK_CLICKED] =
- g_signal_new ("bookmark-clicked",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (YelpLocationEntryClass, bookmark_clicked),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- /**
- * YelpLocationEntry:view
- *
- * The YelpView instance that this location entry controls.
- **/
- g_object_class_install_property (object_class,
- PROP_VIEW,
- g_param_spec_object ("view",
- _("View"),
- _("A YelpView instance to control"),
- YELP_TYPE_VIEW,
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * YelpLocationEntry:bookmarks
- *
- * An instance of an implementation of YelpBookmarks to provide
- * bookmark information for this location entry.
- **/
- g_object_class_install_property (object_class,
- PROP_BOOKMARKS,
- g_param_spec_object ("bookmarks",
- _("Bookmarks"),
- _("A YelpBookmarks implementation instance"),
- YELP_TYPE_BOOKMARKS,
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * YelpLocationEntry:enable-search
- *
- * Whether the location entry can act as a search entry. If search is not
- * enabled, the user will not be able to initiate a search by clicking in
- * the embedded text entry or selecting a search row in the drop-down menu.
- **/
- g_object_class_install_property (object_class,
- PROP_ENABLE_SEARCH,
- g_param_spec_boolean ("enable-search",
- N_("Enable Search"),
- N_("Whether the location entry can be used as a search field"),
- TRUE,
- G_PARAM_CONSTRUCT |
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- g_type_class_add_private ((GObjectClass *) klass,
- sizeof (YelpLocationEntryPrivate));
-
- completions = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
-}
-
-static void
-yelp_location_entry_init (YelpLocationEntry *entry)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- priv->search_mode = FALSE;
- g_object_set (entry, "entry-text-column", HISTORY_COL_TITLE, NULL);
-}
-
-static void
-location_entry_constructed (GObject *object)
-{
- GtkCellRenderer *bookmark_cell;
- GList *cells;
- GtkTreeIter iter;
- YelpLocationEntryPrivate *priv = GET_PRIV (object);
-
- /* Set up the text entry child */
- priv->text_entry = gtk_bin_get_child (GTK_BIN (object));
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_PRIMARY,
- "help-browser");
- gtk_entry_set_icon_activatable (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_PRIMARY,
- FALSE);
- gtk_entry_set_icon_activatable (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- TRUE);
- gtk_editable_set_editable (GTK_EDITABLE (priv->text_entry),
- priv->enable_search);
- if (!priv->enable_search) {
- priv->search_mode = FALSE;
- location_entry_set_entry ((YelpLocationEntry *) object, FALSE);
- }
-
- /* Set up the history model */
- priv->history = gtk_list_store_new (8,
- G_TYPE_STRING, /* title */
- G_TYPE_STRING, /* desc */
- G_TYPE_STRING, /* icon */
- G_TYPE_STRING, /* uri */
- G_TYPE_STRING, /* doc */
- G_TYPE_STRING, /* page */
- G_TYPE_INT, /* flags */
- G_TYPE_STRING /* search terms */
- );
- g_signal_connect (priv->history, "row-changed",
- G_CALLBACK (history_row_changed),
- object);
- g_object_set (object, "model", priv->history, NULL);
- if (priv->enable_search) {
- gtk_list_store_append (priv->history, &iter);
- gtk_list_store_set (priv->history, &iter,
- HISTORY_COL_FLAGS, LOCATION_ENTRY_IS_SEPARATOR,
- -1);
- gtk_list_store_append (priv->history, &iter);
- gtk_list_store_set (priv->history, &iter,
- HISTORY_COL_ICON, "edit-find-symbolic",
- HISTORY_COL_TITLE, _("Search…"),
- HISTORY_COL_FLAGS, LOCATION_ENTRY_IS_SEARCH,
- -1);
- }
-
- /* Set up the history drop-down */
- /* Trying to get the text to line up with the text in the GtkEntry.
- * The text cell is the zeroeth cell right now, since we haven't
- * yet called reorder. I realize using a guesstimate pixel value
- * won't be perfect all the time, but 4 looks niceish.
- */
- cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (object));
- g_object_set (cells->data, "xpad", 4, NULL);
- gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (object),
- GTK_CELL_RENDERER (cells->data),
- (GtkCellLayoutDataFunc) cell_set_text_cell,
- object, NULL);
- g_object_set (cells->data, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
- g_list_free (cells);
-
- priv->icon_cell = gtk_cell_renderer_pixbuf_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (object), priv->icon_cell, FALSE);
- g_object_set (priv->icon_cell, "yalign", 0.2, NULL);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (object),
- priv->icon_cell,
- "icon-name",
- HISTORY_COL_ICON,
- NULL);
- gtk_cell_layout_reorder (GTK_CELL_LAYOUT (object), priv->icon_cell, 0);
-
- if (priv->bookmarks) {
- bookmark_cell = gtk_cell_renderer_pixbuf_new ();
- gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (object), bookmark_cell, FALSE);
- gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (object),
- bookmark_cell,
- (GtkCellLayoutDataFunc) cell_set_bookmark_icon,
- object, NULL);
- }
- gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (object),
- (GtkTreeViewRowSeparatorFunc)
- combo_box_row_separator_func,
- object, NULL);
- /* Without this, you get a warning about the popup widget
- * being NULL the firt time you click the arrow.
- */
- gtk_widget_show_all (GTK_WIDGET (object));
-
- /* Connect signals */
- g_signal_connect (object, "changed",
- G_CALLBACK (combo_box_changed_cb), NULL);
-
- g_signal_connect (priv->text_entry, "focus-in-event",
- G_CALLBACK (entry_focus_in_cb), object);
- g_signal_connect (priv->text_entry, "focus-out-event",
- G_CALLBACK (entry_focus_out_cb), object);
- g_signal_connect (priv->text_entry, "icon-press",
- G_CALLBACK (entry_icon_press_cb), object);
- g_signal_connect (priv->text_entry, "key-press-event",
- G_CALLBACK (entry_key_press_cb), object);
- g_signal_connect (priv->text_entry, "activate",
- G_CALLBACK (entry_activate_cb), object);
-
- if (priv->bookmarks)
- priv->bookmarks_changed = g_signal_connect (priv->bookmarks,
- "bookmarks-changed",
- G_CALLBACK (bookmarks_changed),
- object);
-
- g_signal_connect (priv->view, "loaded", G_CALLBACK (view_loaded), object);
- g_signal_connect (priv->view, "notify::yelp-uri", G_CALLBACK (view_uri_selected), object);
- g_signal_connect (priv->view, "notify::page-title", G_CALLBACK (view_page_title), object);
- g_signal_connect (priv->view, "notify::page-desc", G_CALLBACK (view_page_desc), object);
- g_signal_connect (priv->view, "notify::page-icon", G_CALLBACK (view_page_icon), object);
-}
-
-static void
-location_entry_dispose (GObject *object)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (object);
-
- if (priv->view) {
- g_object_unref (priv->view);
- priv->view = NULL;
- }
-
- if (priv->bookmarks_changed) {
- g_signal_handler_disconnect (priv->bookmarks, priv->bookmarks_changed);
- priv->bookmarks_changed = 0;
- }
-
- if (priv->bookmarks) {
- g_object_unref (priv->bookmarks);
- priv->bookmarks = NULL;
- }
-
- if (priv->row) {
- gtk_tree_row_reference_free (priv->row);
- priv->row = NULL;
- }
-
- if (priv->pulse > 0) {
- g_source_remove (priv->pulse);
- priv->pulse = 0;
- }
-
- G_OBJECT_CLASS (yelp_location_entry_parent_class)->dispose (object);
-}
-
-static void
-location_entry_finalize (GObject *object)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (object);
-
- g_free (priv->completion_uri);
-
- G_OBJECT_CLASS (yelp_location_entry_parent_class)->finalize (object);
-}
-
-static void
-location_entry_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (object);
-
- switch (prop_id) {
- case PROP_VIEW:
- g_value_set_object (value, priv->view);
- break;
- case PROP_BOOKMARKS:
- g_value_set_object (value, priv->bookmarks);
- break;
- case PROP_ENABLE_SEARCH:
- g_value_set_boolean (value, priv->enable_search);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-location_entry_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (object);
-
- switch (prop_id) {
- case PROP_VIEW:
- priv->view = g_value_dup_object (value);
- break;
- case PROP_BOOKMARKS:
- priv->bookmarks = g_value_dup_object (value);
- break;
- case PROP_ENABLE_SEARCH:
- priv->enable_search = g_value_get_boolean (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-location_entry_location_selected (YelpLocationEntry *entry)
-{
- GtkTreeIter iter;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- if (priv->view_uri_selected)
- return;
-
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (entry), &iter)) {
- gchar *uri;
- gtk_tree_model_get (GTK_TREE_MODEL (priv->history), &iter,
- HISTORY_COL_URI, &uri,
- -1);
- yelp_view_load (priv->view, uri);
- g_free (uri);
- }
-}
-
-static void
-location_entry_search_activated (YelpLocationEntry *entry)
-{
- YelpUri *base, *uri;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- g_object_get (priv->view, "yelp-uri", &base, NULL);
- if (base == NULL)
- return;
- uri = yelp_uri_new_search (base,
- gtk_entry_get_text (GTK_ENTRY (priv->text_entry)));
- g_object_unref (base);
- yelp_view_load_uri (priv->view, uri);
- gtk_widget_grab_focus (GTK_WIDGET (priv->view));
-}
-
-static void
-location_entry_bookmark_clicked (YelpLocationEntry *entry)
-{
- YelpUri *uri;
- gchar *doc_uri, *page_id;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- g_object_get (priv->view,
- "yelp-uri", &uri,
- "page-id", &page_id,
- NULL);
- doc_uri = yelp_uri_get_document_uri (uri);
- if (priv->bookmarks && doc_uri && page_id) {
- if (!yelp_bookmarks_is_bookmarked (priv->bookmarks, doc_uri, page_id)) {
- gchar *icon, *title;
- g_object_get (priv->view,
- "page-icon", &icon,
- "page-title", &title,
- NULL);
- yelp_bookmarks_add_bookmark (priv->bookmarks, doc_uri, page_id, icon, title);
- g_free (icon);
- g_free (title);
- }
- else {
- yelp_bookmarks_remove_bookmark (priv->bookmarks, doc_uri, page_id);
- }
- }
- g_free (doc_uri);
- g_free (page_id);
- g_object_unref (uri);
-}
-
-static void
-location_entry_start_search (YelpLocationEntry *entry,
- gboolean clear)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- if (!priv->enable_search)
- return;
- if (clear && !priv->search_mode) {
- const gchar *icon = gtk_entry_get_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_PRIMARY);
- if (!g_str_equal (icon, "folder-saved-search"))
- gtk_entry_set_text (GTK_ENTRY (priv->text_entry), "");
- }
- priv->search_mode = TRUE;
- location_entry_set_entry (entry, FALSE);
- gtk_widget_grab_focus (priv->text_entry);
-}
-
-static void
-location_entry_cancel_search (YelpLocationEntry *entry)
-{
- gboolean ret;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
- GdkEventFocus *event = g_new0 (GdkEventFocus, 1);
- priv->search_mode = FALSE;
- location_entry_set_entry (entry, FALSE);
- event->type = GDK_FOCUS_CHANGE;
- event->window = gtk_widget_get_window (GTK_WIDGET (entry));
- event->send_event = FALSE;
- event->in = FALSE;
- g_signal_emit_by_name (entry, "focus-out-event", event, &ret);
- g_free (event);
- /* Hack: This makes the popup disappear when you hit Esc. */
- if (priv->completion) {
- g_object_ref (priv->completion);
- gtk_entry_set_completion (GTK_ENTRY (priv->text_entry), NULL);
- gtk_entry_set_completion (GTK_ENTRY (priv->text_entry),
- priv->completion);
- g_object_unref (priv->completion);
- }
- gtk_editable_select_region (GTK_EDITABLE (priv->text_entry), 0, 0);
-}
-
-static void
-location_entry_set_completion (YelpLocationEntry *entry,
- GtkTreeModel *model)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
- GList *cells;
- GtkCellRenderer *icon_cell, *bookmark_cell;
-
- priv->completion = gtk_entry_completion_new ();
- gtk_entry_completion_set_minimum_key_length (priv->completion, 3);
- gtk_entry_completion_set_model (priv->completion, model);
- gtk_entry_completion_set_text_column (priv->completion, COMPLETION_COL_TITLE);
- gtk_entry_completion_set_match_func (priv->completion,
- (GtkEntryCompletionMatchFunc) entry_match_func,
- entry, NULL);
- g_signal_connect (priv->completion, "match-selected",
- G_CALLBACK (entry_match_selected), entry);
-
- cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (priv->completion));
- g_object_set (cells->data, "xpad", 4, NULL);
- gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (priv->completion),
- GTK_CELL_RENDERER (cells->data),
- (GtkCellLayoutDataFunc) cell_set_completion_text_cell,
- entry, NULL);
- g_object_set (cells->data, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
- g_list_free (cells);
-
- icon_cell = gtk_cell_renderer_pixbuf_new ();
- g_object_set (priv->icon_cell, "yalign", 0.2, NULL);
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (priv->completion), icon_cell, FALSE);
- gtk_cell_layout_reorder (GTK_CELL_LAYOUT (priv->completion), icon_cell, 0);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (priv->completion),
- icon_cell,
- "icon-name",
- COMPLETION_COL_ICON,
- NULL);
- if (priv->bookmarks) {
- bookmark_cell = gtk_cell_renderer_pixbuf_new ();
- gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (priv->completion), bookmark_cell, FALSE);
- gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (priv->completion),
- bookmark_cell,
- (GtkCellLayoutDataFunc) cell_set_completion_bookmark_icon,
- entry, NULL);
- }
- gtk_entry_set_completion (GTK_ENTRY (priv->text_entry),
- priv->completion);
-}
-
-static void
-location_entry_set_entry (YelpLocationEntry *entry, gboolean emit)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
- GtkTreeModel *model = gtk_combo_box_get_model (GTK_COMBO_BOX (entry));
- GtkTreePath *path = NULL;
- GtkTreeIter iter;
- gchar *icon_name;
-
- if (priv->search_mode) {
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_PRIMARY,
- "edit-find-symbolic");
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- "edit-clear-symbolic");
- gtk_entry_set_icon_tooltip_text (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- _("Clear the search text"));
- priv->icon_is_clear = TRUE;
- return;
- }
- else {
- priv->icon_is_clear = FALSE;
- }
-
-
- if (priv->row)
- path = gtk_tree_row_reference_get_path (priv->row);
-
- if (path) {
- gchar *text, *doc_uri, *page_id;
- gint flags;
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter,
- HISTORY_COL_TITLE, &text,
- HISTORY_COL_ICON, &icon_name,
- HISTORY_COL_FLAGS, &flags,
- HISTORY_COL_DOC, &doc_uri,
- HISTORY_COL_PAGE, &page_id,
- -1);
- if (flags & LOCATION_ENTRY_IS_LOADING) {
- /* Would be nice to have a "loading" icon. I was using image-loading,
- * but it look out of place with symbolic page icons. Plus, using
- * image-loading-symbolic shows a broken image, because GtkEntry
- * doesn't correctly use symbolic icons as of GNOME 3.0.
- */
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_PRIMARY,
- "yelp-page-symbolic");
- if (priv->pulse == 0)
- priv->pulse = g_timeout_add (500, location_entry_start_pulse, entry);
- }
- else {
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_PRIMARY,
- icon_name);
- }
- if (priv->bookmarks && doc_uri && page_id) {
- GdkPixbuf *pixbuf;
- if (!yelp_bookmarks_is_bookmarked (priv->bookmarks, doc_uri, page_id)) {
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- "yelp-bookmark-add-symbolic");
- gtk_entry_set_icon_tooltip_text (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- _("Bookmark this page"));
- }
- else {
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- "yelp-bookmark-remove-symbolic");
- gtk_entry_set_icon_tooltip_text (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- _("Remove bookmark"));
- }
- }
- else {
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- NULL);
- }
- g_free (doc_uri);
- g_free (page_id);
- gtk_entry_set_text (GTK_ENTRY (priv->text_entry), text);
- if (emit)
- g_signal_emit (entry, location_entry_signals[LOCATION_SELECTED], 0);
- g_free (text);
- gtk_tree_path_free (path);
- }
- else {
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_PRIMARY,
- "help-browser");
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- NULL);
- }
-}
-
-static gboolean
-location_entry_start_pulse (gpointer data)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (data);
- priv->pulse = g_timeout_add (80, location_entry_pulse, data);
- return FALSE;
-}
-
-static gboolean
-location_entry_pulse (gpointer data)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (data);
- GtkTreeModel *model;
- GtkTreePath *path;
- GtkTreeIter iter;
- gint flags;
-
- model = gtk_tree_row_reference_get_model (priv->row);
- path = gtk_tree_row_reference_get_path (priv->row);
- if (path) {
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter,
- HISTORY_COL_FLAGS, &flags,
- -1);
- gtk_tree_path_free (path);
- }
-
- if (flags & LOCATION_ENTRY_IS_LOADING && !priv->search_mode) {
- gtk_entry_progress_pulse (GTK_ENTRY (priv->text_entry));
- }
- else {
- gtk_entry_set_progress_fraction (GTK_ENTRY (priv->text_entry), 0.0);
- priv->pulse = 0;
- }
-
- return flags & LOCATION_ENTRY_IS_LOADING;
-}
-
-static void
-combo_box_changed_cb (GtkComboBox *widget,
- gpointer user_data)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (widget);
- GtkTreeIter iter;
- GtkTreeModel *model;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget));
-
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter)) {
- gint flags;
- gtk_tree_model_get (model, &iter,
- HISTORY_COL_FLAGS, &flags,
- -1);
- if (flags & LOCATION_ENTRY_IS_SEARCH) {
- location_entry_start_search ((YelpLocationEntry *) widget, TRUE);
- }
- else {
- GtkTreePath *cur, *path;
- path = gtk_tree_model_get_path (model, &iter);
- if (priv->row) {
- cur = gtk_tree_row_reference_get_path (priv->row);
- if (gtk_tree_path_compare (cur, path) == 0) {
- gtk_tree_path_free (cur);
- gtk_tree_path_free (path);
- return;
- }
- gtk_tree_path_free (cur);
- gtk_tree_row_reference_free (priv->row);
- }
- priv->row = gtk_tree_row_reference_new (model, path);
- gtk_tree_path_free (path);
- priv->search_mode = FALSE;
- location_entry_set_entry ((YelpLocationEntry *) widget, TRUE);
- }
- }
-}
-
-static gboolean
-combo_box_row_separator_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (user_data);
- gint flags;
- gtk_tree_model_get (model, iter,
- HISTORY_COL_FLAGS, &flags,
- -1);
- return (flags & LOCATION_ENTRY_IS_SEPARATOR);
-}
-
-static void
-history_row_changed (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- /* FIXME: Should we bother checking path/iter against priv->row?
- It doesn't really make a difference, since set_entry is pretty much
- safe to call whenever. Does it make a performance impact?
- */
- location_entry_set_entry (YELP_LOCATION_ENTRY (user_data), FALSE);
-}
-
-static gboolean
-entry_focus_in_cb (GtkWidget *widget,
- GdkEventFocus *event,
- gpointer user_data)
-{
- GtkEntry *text_entry = GTK_ENTRY (widget);
- YelpLocationEntryPrivate *priv = GET_PRIV (user_data);
-
- if (priv->enable_search && !priv->search_mode)
- location_entry_start_search ((YelpLocationEntry *) user_data, TRUE);
-
- return FALSE;
-}
-
-static gboolean
-entry_focus_out_cb (GtkWidget *widget,
- GdkEventFocus *event,
- gpointer user_data)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (user_data);
-
- if (gtk_entry_get_text_length (GTK_ENTRY (widget)) == 0) {
- priv->search_mode = FALSE;
- location_entry_set_entry ((YelpLocationEntry *) user_data, FALSE);
- }
-
- return FALSE;
-}
-
-static void
-entry_activate_cb (GtkEntry *text_entry,
- gpointer user_data)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (user_data);
- gchar *text = g_strdup (gtk_entry_get_text (text_entry));
-
- if (!priv->enable_search)
- return;
-
- if (!priv->search_mode || text == NULL || strlen(text) == 0)
- return;
-
- g_signal_emit (user_data, location_entry_signals[SEARCH_ACTIVATED], 0, text);
-
- g_free (text);
-}
-
-static void
-entry_icon_press_cb (GtkEntry *gtkentry,
- GtkEntryIconPosition icon_pos,
- GdkEvent *event,
- YelpLocationEntry *entry)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- if (icon_pos == GTK_ENTRY_ICON_SECONDARY) {
- if (priv->icon_is_clear)
- location_entry_cancel_search (entry);
- else
- g_signal_emit (entry, location_entry_signals[BOOKMARK_CLICKED], 0);
- }
-}
-
-static gboolean
-entry_key_press_cb (GtkWidget *widget,
- GdkEventKey *event,
- YelpLocationEntry *entry)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
- if (event->keyval == GDK_KEY_Escape) {
- location_entry_cancel_search (entry);
- return TRUE;
- }
- else if (!priv->search_mode) {
- location_entry_start_search (entry, FALSE);
- }
-
- return FALSE;
-}
-
-static void
-cell_set_text_cell (GtkCellLayout *layout,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- YelpLocationEntry *entry)
-{
- gchar *title, *desc, *color, *text;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- gtk_tree_model_get (model, iter,
- HISTORY_COL_TITLE, &title,
- HISTORY_COL_DESC, &desc,
- -1);
- if (desc) {
- color = yelp_settings_get_color (yelp_settings_get_default (),
- YELP_SETTINGS_COLOR_TEXT_LIGHT);
- text = g_markup_printf_escaped ("<span size='larger'>%s</span>\n<span color='%s'>%s</span>",
- title, color, desc);
- g_free (color);
- g_free (desc);
- }
- else {
- text = g_markup_printf_escaped ("<span size='larger'>%s</span>", title);
- }
-
- g_object_set (cell, "markup", text, NULL);
- g_free (text);
- g_free (title);
-}
-
-static void
-cell_set_bookmark_icon (GtkCellLayout *layout,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- YelpLocationEntry *entry)
-{
- gint flags;
- gchar *doc_uri, *page_id;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- if (priv->bookmarks == NULL) {
- g_object_set (cell, "icon-name", NULL, NULL);
- return;
- }
-
- gtk_tree_model_get (model, iter, HISTORY_COL_FLAGS, &flags, -1);
- if (flags & (LOCATION_ENTRY_IS_SEPARATOR | LOCATION_ENTRY_IS_SEARCH)) {
- g_object_set (cell, "icon-name", NULL, NULL);
- return;
- }
-
- gtk_tree_model_get (model, iter,
- HISTORY_COL_DOC, &doc_uri,
- HISTORY_COL_PAGE, &page_id,
- -1);
- if (doc_uri && page_id &&
- yelp_bookmarks_is_bookmarked (priv->bookmarks, doc_uri, page_id))
- g_object_set (cell, "icon-name", "yelp-bookmark-remove-symbolic", NULL);
- else
- g_object_set (cell, "icon-name", NULL, NULL);
-
- g_free (doc_uri);
- g_free (page_id);
-}
-
-static void
-cell_set_completion_bookmark_icon (GtkCellLayout *layout,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- YelpLocationEntry *entry)
-{
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- if (priv->completion_uri) {
- gchar *page_id = NULL;
- gtk_tree_model_get (model, iter,
- COMPLETION_COL_PAGE, &page_id,
- -1);
-
- if (page_id && yelp_bookmarks_is_bookmarked (priv->bookmarks,
- priv->completion_uri, page_id))
- g_object_set (cell, "icon-name", "yelp-bookmark-remove-symbolic", NULL);
- else
- g_object_set (cell, "icon-name", NULL, NULL);
-
- g_free (page_id);
- }
-}
-
-static void
-cell_set_completion_text_cell (GtkCellLayout *layout,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- YelpLocationEntry *entry)
-{
- gchar *title, *desc, *color, *text;
- gint flags;
- GList *cells, *cur;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- gtk_tree_model_get (model, iter, COMPLETION_COL_FLAGS, &flags, -1);
- if (flags & COMPLETION_FLAG_ACTIVATE_SEARCH) {
- title = g_strdup_printf (_("Search for “%s”"),
- gtk_entry_get_text (GTK_ENTRY (priv->text_entry)));
- text = g_markup_printf_escaped ("<span size='larger' font_weight='bold'>%s</span>", title);
- g_object_set (cell, "markup", text, NULL);
- g_free (text);
- g_free (title);
-
- color = yelp_settings_get_color (yelp_settings_get_default (),
- YELP_SETTINGS_COLOR_YELLOW_BASE);
- cells = gtk_cell_layout_get_cells (layout);
- for (cur = cells; cur; cur = cur->next) {
- g_object_set (cur->data,
- "cell-background", color,
- "cell-background-set", TRUE,
- NULL);
- }
- g_list_free (cells);
- g_free (color);
- return;
- }
-
- gtk_tree_model_get (model, iter,
- COMPLETION_COL_TITLE, &title,
- COMPLETION_COL_DESC, &desc,
- -1);
- if (desc) {
- color = yelp_settings_get_color (yelp_settings_get_default (),
- YELP_SETTINGS_COLOR_TEXT_LIGHT);
- text = g_markup_printf_escaped ("<span size='larger'>%s</span>\n<span color='%s'>%s</span>",
- title, color, desc);
- g_free (color);
- g_free (desc);
- }
- else {
- text = g_markup_printf_escaped ("<span size='larger'>%s</span>", title);
- }
-
- g_object_set (cell, "markup", text, NULL);
- g_free (text);
- g_free (title);
-
- cells = gtk_cell_layout_get_cells (layout);
- for (cur = cells; cur; cur = cur->next)
- g_object_set (cur->data, "cell-background-set", FALSE, NULL);
- g_list_free (cells);
-}
-
-static gboolean
-entry_match_func (GtkEntryCompletion *completion,
- const gchar *key,
- GtkTreeIter *iter,
- YelpLocationEntry *entry)
-{
- gint stri;
- gchar *title, *desc, *titlecase = NULL, *desccase = NULL;
- gboolean ret = FALSE;
- gchar **strs;
- gint flags;
- GtkTreeModel *model = gtk_entry_completion_get_model (completion);
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
- static GRegex *nonword = NULL;
-
- if (nonword == NULL)
- nonword = g_regex_new ("\\W", 0, 0, NULL);
- if (nonword == NULL)
- return FALSE;
-
- gtk_tree_model_get (model, iter, COMPLETION_COL_FLAGS, &flags, -1);
- if (flags & COMPLETION_FLAG_ACTIVATE_SEARCH)
- return TRUE;
-
- gtk_tree_model_get (model, iter,
- COMPLETION_COL_TITLE, &title,
- COMPLETION_COL_DESC, &desc,
- -1);
- if (title) {
- titlecase = g_utf8_casefold (title, -1);
- g_free (title);
- }
- if (desc) {
- desccase = g_utf8_casefold (desc, -1);
- g_free (desc);
- }
-
- strs = g_regex_split (nonword, key, 0);
- ret = TRUE;
- for (stri = 0; strs[stri]; stri++) {
- if (!titlecase || !strstr (titlecase, strs[stri])) {
- if (!desccase || !strstr (desccase, strs[stri])) {
- ret = FALSE;
- break;
- }
- }
- }
-
- g_free (titlecase);
- g_free (desccase);
- g_strfreev (strs);
-
- return ret;
-}
-
-static gint
-entry_completion_sort (GtkTreeModel *model,
- GtkTreeIter *iter1,
- GtkTreeIter *iter2,
- gpointer user_data)
-{
- gint ret = 0;
- gint flags1, flags2;
- gchar *key1, *key2;
-
- gtk_tree_model_get (model, iter1, COMPLETION_COL_FLAGS, &flags1, -1);
- gtk_tree_model_get (model, iter2, COMPLETION_COL_FLAGS, &flags2, -1);
- if (flags1 & COMPLETION_FLAG_ACTIVATE_SEARCH)
- return 1;
- else if (flags2 & COMPLETION_FLAG_ACTIVATE_SEARCH)
- return -1;
-
- gtk_tree_model_get (model, iter1, COMPLETION_COL_ICON, &key1, -1);
- gtk_tree_model_get (model, iter2, COMPLETION_COL_ICON, &key2, -1);
- ret = yelp_settings_cmp_icons (key1, key2);
- g_free (key1);
- g_free (key2);
-
- if (ret)
- return ret;
-
- gtk_tree_model_get (model, iter1, COMPLETION_COL_TITLE, &key1, -1);
- gtk_tree_model_get (model, iter2, COMPLETION_COL_TITLE, &key2, -1);
- if (key1 && key2)
- ret = g_utf8_collate (key1, key2);
- else if (key2 == NULL)
- return -1;
- else if (key1 == NULL)
- return 1;
- g_free (key1);
- g_free (key2);
-
- return ret;
-}
-
-static gboolean
-entry_match_selected (GtkEntryCompletion *completion,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- YelpLocationEntry *entry)
-{
- YelpUri *base, *uri;
- gchar *page, *xref;
- gint flags;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- gtk_tree_model_get (model, iter, COMPLETION_COL_FLAGS, &flags, -1);
- if (flags & COMPLETION_FLAG_ACTIVATE_SEARCH) {
- entry_activate_cb (GTK_ENTRY (priv->text_entry), entry);
- return TRUE;
- }
-
- g_object_get (priv->view, "yelp-uri", &base, NULL);
- gtk_tree_model_get (model, iter, COMPLETION_COL_PAGE, &page, -1);
-
- xref = g_strconcat ("xref:", page, NULL);
- uri = yelp_uri_new_relative (base, xref);
-
- yelp_view_load_uri (priv->view, uri);
-
- g_free (page);
- g_free (xref);
- g_object_unref (uri);
- g_object_unref (base);
-
- gtk_widget_grab_focus (GTK_WIDGET (priv->view));
- return TRUE;
-}
-
-static void
-view_loaded (YelpView *view,
- YelpLocationEntry *entry)
-{
- gchar **ids;
- gint i;
- GtkTreeIter iter;
- gint flags;
- YelpUri *uri;
- gchar *doc_uri, *page_id;
- GtkTreeModel *completion;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
- YelpDocument *document = yelp_view_get_document (view);
-
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->history), &iter);
- gtk_tree_model_get (GTK_TREE_MODEL (priv->history), &iter,
- HISTORY_COL_FLAGS, &flags,
- -1);
- if (flags & LOCATION_ENTRY_IS_LOADING) {
- flags = flags & ~LOCATION_ENTRY_IS_LOADING;
- gtk_list_store_set (priv->history, &iter, HISTORY_COL_FLAGS, flags, -1);
- }
-
- g_object_get (view,
- "yelp-uri", &uri,
- "page-id", &page_id,
- NULL);
- doc_uri = yelp_uri_get_document_uri (uri);
- gtk_list_store_set (priv->history, &iter,
- HISTORY_COL_DOC, doc_uri,
- HISTORY_COL_PAGE, page_id,
- -1);
- g_free (page_id);
-
- if ((priv->completion_uri == NULL) ||
- !g_str_equal (doc_uri, priv->completion_uri)) {
- completion = (GtkTreeModel *) g_hash_table_lookup (completions, doc_uri);
- if (completion == NULL) {
- GtkListStore *base = gtk_list_store_new (5,
- G_TYPE_STRING, /* title */
- G_TYPE_STRING, /* desc */
- G_TYPE_STRING, /* icon */
- G_TYPE_STRING, /* uri */
- G_TYPE_INT /* flags */
- );
- completion = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (base));
- gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (completion),
- entry_completion_sort,
- NULL, NULL);
- g_hash_table_insert (completions, g_strdup (doc_uri), completion);
- if (document != NULL) {
- GtkTreeIter iter;
- ids = yelp_document_list_page_ids (document);
- for (i = 0; ids[i]; i++) {
- gchar *title, *desc, *icon;
- gtk_list_store_insert (GTK_LIST_STORE (base), &iter, 0);
- title = yelp_document_get_page_title (document, ids[i]);
- desc = yelp_document_get_page_desc (document, ids[i]);
- icon = yelp_document_get_page_icon (document, ids[i]);
- gtk_list_store_set (base, &iter,
- COMPLETION_COL_TITLE, title,
- COMPLETION_COL_DESC, desc,
- COMPLETION_COL_ICON, icon,
- COMPLETION_COL_PAGE, ids[i],
- -1);
- g_free (icon);
- g_free (desc);
- g_free (title);
- }
- g_strfreev (ids);
- gtk_list_store_insert (GTK_LIST_STORE (base), &iter, 0);
- gtk_list_store_set (base, &iter,
- COMPLETION_COL_ICON, "edit-find-symbolic",
- COMPLETION_COL_FLAGS, COMPLETION_FLAG_ACTIVATE_SEARCH,
- -1);
- }
- g_object_unref (base);
- }
- g_free (priv->completion_uri);
- priv->completion_uri = doc_uri;
- location_entry_set_completion (entry, completion);
- }
-
- g_object_unref (uri);
-}
-
-static void
-view_uri_selected (YelpView *view,
- GParamSpec *pspec,
- YelpLocationEntry *entry)
-{
- GtkTreeIter iter;
- gchar *iter_uri;
- gboolean cont;
- YelpUri *uri;
- gchar *struri, *doc_uri;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- g_object_get (G_OBJECT (view), "yelp-uri", &uri, NULL);
- if (uri == NULL)
- return;
-
- struri = yelp_uri_get_canonical_uri (uri);
-
- cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->history), &iter);
- while (cont) {
- gtk_tree_model_get (GTK_TREE_MODEL (priv->history), &iter,
- HISTORY_COL_URI, &iter_uri,
- -1);
- if (iter_uri && g_str_equal (struri, iter_uri)) {
- g_free (iter_uri);
- break;
- }
- else {
- g_free (iter_uri);
- cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->history), &iter);
- }
- }
- if (cont) {
- GtkTreeIter first;
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->history), &first);
- gtk_list_store_move_before (priv->history, &iter, &first);
- }
- else {
- gint num;
- GtkTreeIter last;
- gtk_list_store_prepend (priv->history, &iter);
- gtk_list_store_set (priv->history, &iter,
- HISTORY_COL_TITLE, _("Loading"),
- HISTORY_COL_ICON, "help-contents",
- HISTORY_COL_URI, struri,
- HISTORY_COL_FLAGS, LOCATION_ENTRY_IS_LOADING,
- -1);
- /* Limit to MAX_HISTORY entries. There are two extra for the search entry
- * and the separator above it.
- */
- num = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->history), NULL);
- if (num > MAX_HISTORY + 2) {
- if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (priv->history),
- &last, NULL,
- num - 3)) {
- gtk_list_store_remove (priv->history, &last);
- }
- }
- }
- priv->view_uri_selected = TRUE;
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (entry), &iter);
- priv->view_uri_selected = FALSE;
-
- g_free (struri);
- g_object_unref (uri);
-}
-
-static void
-view_page_title (YelpView *view,
- GParamSpec *pspec,
- YelpLocationEntry *entry)
-{
- GtkTreeIter first;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->history), &first)) {
- gchar *title, *frag = NULL;
- YelpViewState state;
- YelpUri *uri;
-
- g_object_get (view,
- "page-title", &title,
- "state", &state,
- NULL);
- if (title == NULL)
- return;
-
- if (state != YELP_VIEW_STATE_ERROR) {
- YelpUri *uri;
- g_object_get (view, "yelp-uri", &uri, NULL);
- frag = yelp_uri_get_frag_id (uri);
- g_object_unref (uri);
- }
-
- if (frag) {
- gchar *tmp = g_strdup_printf ("%s (#%s)", title, frag);
- gtk_list_store_set (priv->history, &first,
- HISTORY_COL_TITLE, tmp,
- -1);
- g_free (tmp);
- g_free (frag);
- }
- else {
- gtk_list_store_set (priv->history, &first,
- HISTORY_COL_TITLE, title,
- -1);
- }
- g_free (title);
- }
-}
-
-static void
-view_page_desc (YelpView *view,
- GParamSpec *pspec,
- YelpLocationEntry *entry)
-{
- GtkTreeIter first;
- gchar *desc;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- g_object_get (view, "page-desc", &desc, NULL);
- if (desc == NULL)
- return;
-
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->history), &first))
- gtk_list_store_set (priv->history, &first,
- HISTORY_COL_DESC, desc,
- -1);
- g_free (desc);
-}
-
-static void
-view_page_icon (YelpView *view,
- GParamSpec *pspec,
- YelpLocationEntry *entry)
-{
- GtkTreeIter first;
- gchar *icon;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- g_object_get (view, "page-icon", &icon, NULL);
- if (icon == NULL)
- return;
-
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->history), &first))
- gtk_list_store_set (priv->history, &first,
- HISTORY_COL_ICON, icon,
- -1);
- g_free (icon);
-}
-
-static void
-bookmarks_changed (YelpBookmarks *bookmarks,
- const gchar *doc_uri,
- YelpLocationEntry *entry)
-{
- GtkTreePath *path;
- YelpLocationEntryPrivate *priv = GET_PRIV (entry);
-
- if (priv->row)
- path = gtk_tree_row_reference_get_path (priv->row);
-
- if (path) {
- GtkTreeIter iter;
- gchar *this_uri, *page_id;
- gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->history), &iter, path);
- gtk_tree_model_get (GTK_TREE_MODEL (priv->history), &iter,
- HISTORY_COL_DOC, &this_uri,
- HISTORY_COL_PAGE, &page_id,
- -1);
- if (this_uri && g_str_equal (this_uri, doc_uri) && page_id) {
- if (!yelp_bookmarks_is_bookmarked (priv->bookmarks, doc_uri, page_id)) {
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- "yelp-bookmark-add-symbolic");
- gtk_entry_set_icon_tooltip_text (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- _("Bookmark this page"));
- }
- else {
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- "yelp-bookmark-remove-symbolic");
- gtk_entry_set_icon_tooltip_text (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- _("Remove bookmark"));
- }
- }
- else {
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry),
- GTK_ENTRY_ICON_SECONDARY,
- NULL);
- }
- g_free (this_uri);
- g_free (page_id);
- }
-}
-
-/**
- * yelp_location_entry_new:
- * @view: A #YelpView.
- *
- * Creates a new #YelpLocationEntry widget to control @view.
- *
- * Returns: A new #YelpLocationEntry.
- **/
-GtkWidget*
-yelp_location_entry_new (YelpView *view,
- YelpBookmarks *bookmarks)
-{
- GtkWidget *ret;
- g_return_val_if_fail (YELP_IS_VIEW (view), NULL);
-
- ret = GTK_WIDGET (g_object_new (YELP_TYPE_LOCATION_ENTRY,
- "has-entry", TRUE,
- "view", view,
- "bookmarks", bookmarks,
- NULL));
-
- return ret;
-}
-
-/**
- * yelp_location_entry_start_search:
- * @entry: A #YelpLocationEntry.
- *
- * Puts @entry into search mode. This focuses the entry and clears its text
- * contents. When the user activates the search, the
- * #YelpLocationEntry::search-activated signal will be emitted.
- **/
-void
-yelp_location_entry_start_search (YelpLocationEntry *entry)
-{
- location_entry_start_search (entry, TRUE);
-}
diff --git a/libyelp/yelp-location-entry.h b/libyelp/yelp-location-entry.h
deleted file mode 100644
index f2b410a8..00000000
--- a/libyelp/yelp-location-entry.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2009 Shaun McCance <shaunm@gnome.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
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Shaun McCance <shaunm@gnome.org>
- */
-
-#ifndef __YELP_LOCATION_ENTRY_H__
-#define __YELP_LOCATION_ENTRY_H__
-
-#include <gtk/gtk.h>
-
-#include "yelp-bookmarks.h"
-#include "yelp-view.h"
-
-G_BEGIN_DECLS
-
-#define YELP_TYPE_LOCATION_ENTRY (yelp_location_entry_get_type ())
-#define YELP_LOCATION_ENTRY(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), YELP_TYPE_LOCATION_ENTRY, \
- YelpLocationEntry))
-#define YELP_LOCATION_ENTRY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), YELP_TYPE_LOCATION_ENTRY, \
- YelpLocationEntryClass))
-#define YELP_IS_LOCATION_ENTRY(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), YELP_TYPE_LOCATION_ENTRY))
-#define YELP_IS_LOCATION_ENTRY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), YELP_TYPE_LOCATION_ENTRY))
-#define YELP_LOCATION_ENTRY_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS((obj), YELP_TYPE_LOCATION_ENTRY, \
- YelpLocationEntryClass))
-
-/**
- * YelpLocationEntry:
- **/
-typedef struct _YelpLocationEntry YelpLocationEntry;
-typedef struct _YelpLocationEntryClass YelpLocationEntryClass;
-
-struct _YelpLocationEntry
-{
- GtkComboBox parent;
-};
-
-struct _YelpLocationEntryClass
-{
- GtkComboBoxClass parent;
-
- void (* location_selected) (YelpLocationEntry *entry);
- void (* search_activated) (YelpLocationEntry *entry);
- void (* bookmark_clicked) (YelpLocationEntry *entry);
-
- /* Padding for future expansion */
- void (*_gtk_reserved0) (void);
- void (*_gtk_reserved1) (void);
- void (*_gtk_reserved2) (void);
- void (*_gtk_reserved3) (void);
-};
-
-GType yelp_location_entry_get_type (void);
-GtkWidget * yelp_location_entry_new (YelpView *window,
- YelpBookmarks *bookmarks);
-void yelp_location_entry_start_search (YelpLocationEntry *entry);
-
-G_END_DECLS
-
-#endif /* __YELP_LOCATION_ENTRY_H__ */
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 7d6c9daf..3bf74903 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -9,7 +9,6 @@ libyelp/yelp-document.c
libyelp/yelp-error.c
libyelp/yelp-help-list.c
libyelp/yelp-info-document.c
-libyelp/yelp-location-entry.c
libyelp/yelp-lzma-decompressor.c
libyelp/yelp-magic-decompressor.c
libyelp/yelp-mallard-document.c
diff --git a/tests/Makefile.am b/tests/Makefile.am
index f8d436bd..7da92f12 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -14,7 +14,6 @@ check_PROGRAMS = \
test-transform \
test-uri \
test-view
-# test-location-entry
if ENABLE_LZMA
check_PROGRAMS += test-lzma
@@ -28,9 +27,6 @@ test_bz2_CFLAGS = $(YELP_COMMON_CFLAGS)
test_bz2_LDADD = $(YELP_COMMON_LDADD)
endif
-test_location_entry_CFLAGS = $(YELP_COMMON_CFLAGS)
-test_location_entry_LDADD = $(YELP_COMMON_LDADD)
-
test_magic_CFLAGS = $(YELP_COMMON_CFLAGS)
test_magic_LDADD = $(YELP_COMMON_LDADD)
diff --git a/tests/test-location-entry.c b/tests/test-location-entry.c
deleted file mode 100644
index 0b4c8510..00000000
--- a/tests/test-location-entry.c
+++ /dev/null
@@ -1,325 +0,0 @@
-#include <gtk/gtk.h>
-#include "yelp-location-entry.h"
-
-enum {
- COL_TITLE,
- COL_DESC,
- COL_ICON,
- COL_FLAGS,
- COL_URI,
- COL_TERMS
-};
-
-YelpLocationEntry *entry;
-GtkListStore *event_list;
-
-static gboolean
-loading_callback (gpointer data)
-{
- GtkTreeRowReference *row = (GtkTreeRowReference *) data;
- GtkTreePath *path = gtk_tree_row_reference_get_path (row);
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- model = gtk_tree_row_reference_get_model (row);
- gtk_tree_model_get_iter (model, &iter, path);
-
- gtk_list_store_set (GTK_LIST_STORE (model), &iter,
- COL_TITLE, "Desktop Help",
- COL_DESC, "Get help with your desktop",
- COL_ICON, "gnome-main-menu",
- COL_FLAGS, YELP_LOCATION_ENTRY_CAN_BOOKMARK,
- -1);
- gtk_tree_path_free (path);
- gtk_tree_row_reference_free (row);
- return FALSE;
-}
-
-static void
-check_clicked (GtkToggleButton *button, gpointer user_data)
-{
- YelpLocationEntry *entry = YELP_LOCATION_ENTRY (user_data);
- g_object_set (G_OBJECT (entry), "enable-search",
- gtk_toggle_button_get_active (button), NULL);
-}
-
-static void
-search_clicked (GtkToggleButton *button, gpointer user_data)
-{
- YelpLocationEntry *entry = YELP_LOCATION_ENTRY (user_data);
- yelp_location_entry_start_search (entry);
-}
-
-static void
-button_clicked (GtkButton *button, gpointer user_data)
-{
- GtkListStore *model = GTK_LIST_STORE (user_data);
- const gchar *label = gtk_button_get_label (button);
- GtkTreeIter iter;
- gchar *uri = NULL, *icon, *title, *desc;
- gboolean loading = FALSE;
-
- if (g_str_equal (label, "Empathy"))
- {
- uri = "help:empathy";
- icon = "empathy";
- desc = "Send and receive messages";
- }
- else if (g_str_equal (label, "Calculator"))
- {
- uri = "help:gcalctool";
- icon = "accessories-calculator";
- desc = "Perform calculations";
- }
- else if (g_str_equal (label, "Terminal"))
- {
- uri = "help:gnome-terminal";
- icon = "gnome-terminal";
- desc = "Use the command line";
- }
- else if (g_str_equal (label, "Slow-loading document"))
- {
- uri = "help:gnumeric";
- icon = NULL;
- loading = TRUE;
- desc = NULL;
- }
-
- if (uri)
- {
- gchar *iter_uri;
- gboolean cont;
- cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter);
- while (cont)
- {
- gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
- COL_URI, &iter_uri,
- -1);
- if (iter_uri && g_str_equal (uri, iter_uri))
- {
- g_free (iter_uri);
- break;
- }
- else
- {
- g_free (iter_uri);
- cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (model), &iter);
- }
- }
- if (cont)
- {
- GtkTreeIter first;
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &first);
- gtk_list_store_move_before (model, &iter, &first);
- }
- else
- {
- gtk_list_store_prepend (model, &iter);
- if (!loading)
- {
- title = g_strconcat (label, " Help", NULL);
- }
- else
- {
- GtkTreePath *path;
- GtkTreeRowReference *row;
- title = g_strdup ("Loading...");
- path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter);
- row = gtk_tree_row_reference_new (GTK_TREE_MODEL (model), path);
- gtk_tree_path_free (path);
- g_timeout_add_seconds (5, loading_callback, row);
- }
- gtk_list_store_set (model, &iter,
- COL_TITLE, title,
- COL_DESC, desc,
- COL_ICON, icon,
- COL_FLAGS, YELP_LOCATION_ENTRY_CAN_BOOKMARK | (loading ? YELP_LOCATION_ENTRY_IS_LOADING : 0),
- COL_URI, uri,
- -1);
- g_free (title);
- }
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (entry), &iter);
- }
-}
-
-static void
-location_selected_cb (GtkEntry *entry, gpointer user_data)
-{
- GtkTreeModel *model;
- GtkTreeIter iter, first;
- gchar *title, *icon;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (entry));
- gtk_combo_box_get_active_iter (GTK_COMBO_BOX (entry), &iter);
- gtk_tree_model_get_iter_first (model, &first);
-
- gtk_list_store_move_before (GTK_LIST_STORE (model), &iter, &first);
-
- gtk_tree_model_get (model, &iter,
- COL_TITLE, &title,
- COL_ICON, &icon,
- -1);
-
- gtk_list_store_prepend (event_list, &iter);
- gtk_list_store_set (event_list, &iter,
- 0, icon,
- 1, title,
- -1);
- g_free (icon);
- g_free (title);
-}
-
-static void
-search_activated_cb (GtkEntry *entry, gchar *text, gpointer user_data)
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
- gchar *curtitle = NULL;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (entry));
-
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter)) {
- gchar *uri;
- gtk_tree_model_get (model, &iter,
- COL_URI, &uri,
- -1);
- if (uri) {
- if (g_str_equal (uri, "search:"))
- gtk_tree_model_get (model, &iter,
- COL_DESC, &curtitle,
- -1);
- else
- gtk_tree_model_get (model, &iter,
- COL_TITLE, &curtitle,
- -1);
- g_free (uri);
- }
- }
-
- if (curtitle == NULL)
- curtitle = g_strdup ("in all documents");
-
- gtk_list_store_prepend (GTK_LIST_STORE (model), &iter);
- gtk_list_store_set (GTK_LIST_STORE (model), &iter,
- COL_ICON, "folder-saved-search",
- COL_TITLE, text,
- COL_DESC, curtitle,
- COL_FLAGS, 0,
- COL_URI, "search:",
- -1);
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (entry), &iter);
- g_free (curtitle);
-}
-
-int
-main (int argc, char **argv)
-{
- GtkWidget *window, *vbox, *scroll, *list, *hbox, *button;
- GtkTreeViewColumn *col;
- GtkCellRenderer *cell;
- GtkListStore *model;
- GtkTreeIter iter;
-
- gtk_init (&argc, &argv);
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_default_size (GTK_WINDOW (window), 450, 600);
- gtk_container_set_border_width (GTK_CONTAINER (window), 6);
-
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_container_add (GTK_CONTAINER (window), vbox);
-
- model = gtk_list_store_new (6,
- G_TYPE_STRING, /* title */
- G_TYPE_STRING, /* desc */
- G_TYPE_STRING, /* icon */
- G_TYPE_INT, /* flags */
- G_TYPE_STRING, /* uri */
- G_TYPE_STRING /* search terms */
- );
- gtk_list_store_append (model, &iter);
- gtk_list_store_set (model, &iter,
- COL_FLAGS, YELP_LOCATION_ENTRY_IS_SEPARATOR,
- -1);
- gtk_list_store_append (model, &iter);
- gtk_list_store_set (model, &iter,
- COL_ICON, "system-search",
- COL_TITLE, "Search...",
- COL_FLAGS, YELP_LOCATION_ENTRY_IS_SEARCH,
- -1);
-
- entry = (YelpLocationEntry *) yelp_location_entry_new_with_model (GTK_TREE_MODEL (model),
- COL_TITLE,
- COL_DESC,
- COL_ICON,
- COL_FLAGS);
- g_signal_connect (entry, "location-selected",
- G_CALLBACK (location_selected_cb), NULL);
- g_signal_connect (entry, "search-activated",
- G_CALLBACK (search_activated_cb), NULL);
- gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (entry), FALSE, FALSE, 0);
-
- scroll = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0);
- event_list = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
- list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (event_list));
- col = gtk_tree_view_column_new ();
- gtk_tree_view_append_column (GTK_TREE_VIEW (list), col);
- cell = gtk_cell_renderer_pixbuf_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (col), cell, FALSE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (col), cell,
- "icon-name", 0,
- NULL);
- cell = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (col), cell, TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (col), cell,
- "text", 1,
- NULL);
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (list), FALSE);
- gtk_container_add (GTK_CONTAINER (scroll), list);
-
- hbox = gtk_hbox_new (TRUE, 6);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- button = gtk_check_button_new_with_label ("Enable search");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
- g_signal_connect (button, "clicked",
- G_CALLBACK (check_clicked), entry);
- gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
-
- button = gtk_button_new_with_label ("Search");
- g_signal_connect (button, "clicked",
- G_CALLBACK (search_clicked), entry);
- gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0);
-
- hbox = gtk_hbox_new (TRUE, 6);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- button = gtk_button_new_with_label ("Empathy");
- g_signal_connect (button, "clicked",
- G_CALLBACK (button_clicked), model);
- gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
-
- button = gtk_button_new_with_label ("Calculator");
- g_signal_connect (button, "clicked",
- G_CALLBACK (button_clicked), model);
- gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
-
- button = gtk_button_new_with_label ("Terminal");
- g_signal_connect (button, "clicked",
- G_CALLBACK (button_clicked), model);
- gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
-
- button = gtk_button_new_with_label ("Slow-loading document");
- g_signal_connect (button, "clicked",
- G_CALLBACK (button_clicked), model);
- gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
-
- gtk_widget_show_all (GTK_WIDGET (window));
- gtk_widget_grab_focus (list);
-
- gtk_main ();
-}
diff --git a/tests/test-view.c b/tests/test-view.c
index 7059d5ce..76c48a34 100644
--- a/tests/test-view.c
+++ b/tests/test-view.c
@@ -21,7 +21,6 @@
#include <gtk/gtk.h>
#include <webkit/webkit.h>
-#include "yelp-location-entry.h"
#include "yelp-view.h"
#include "yelp-uri.h"
#include "yelp-simple-document.h"