Introduce WebItem, first step of refactoring web search
This commit is contained in:
parent
8e8e9f3663
commit
f2aff5f290
8 changed files with 535 additions and 248 deletions
|
@ -18,6 +18,7 @@ bin_PROGRAMS = \
|
|||
|
||||
midori_SOURCES = \
|
||||
main.c main.h \
|
||||
midori-item.c midori-item.h \
|
||||
midori-app.c midori-app.h \
|
||||
midori-browser.c midori-browser.h \
|
||||
midori-panel.c midori-panel.h \
|
||||
|
|
|
@ -62,7 +62,7 @@ midori_trash_class_init (MidoriTrashClass* class)
|
|||
{
|
||||
signals[INSERTED] = g_signal_new (
|
||||
"inserted",
|
||||
G_TYPE_FROM_CLASS(class),
|
||||
G_TYPE_FROM_CLASS (class),
|
||||
(GSignalFlags)(G_SIGNAL_RUN_LAST),
|
||||
G_STRUCT_OFFSET (MidoriTrashClass, inserted),
|
||||
0,
|
||||
|
@ -73,7 +73,7 @@ midori_trash_class_init (MidoriTrashClass* class)
|
|||
|
||||
signals[REMOVED] = g_signal_new (
|
||||
"removed",
|
||||
G_TYPE_FROM_CLASS(class),
|
||||
G_TYPE_FROM_CLASS (class),
|
||||
(GSignalFlags)(G_SIGNAL_RUN_LAST),
|
||||
G_STRUCT_OFFSET (MidoriTrashClass, removed),
|
||||
0,
|
||||
|
@ -93,7 +93,7 @@ midori_trash_class_init (MidoriTrashClass* class)
|
|||
PROP_LIMIT,
|
||||
g_param_spec_uint (
|
||||
"limit",
|
||||
"Limit",
|
||||
_("Limit"),
|
||||
_("The maximum number of items"),
|
||||
0, G_MAXUINT, 10,
|
||||
flags));
|
||||
|
|
367
midori/midori-webitem.c
Normal file
367
midori/midori-webitem.c
Normal file
|
@ -0,0 +1,367 @@
|
|||
/*
|
||||
Copyright (C) 2008 Christian Dywan <christian@twotoasts.de>
|
||||
|
||||
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.1 of the License, or (at your option) any later version.
|
||||
|
||||
See the file COPYING for the full license text.
|
||||
*/
|
||||
|
||||
#include "midori-webitem.h"
|
||||
|
||||
#include <glib/gi18n.h>
|
||||
#include <katze/katze.h>
|
||||
|
||||
struct _MidoriWebItem
|
||||
{
|
||||
GObject parent_instance;
|
||||
|
||||
gchar* name;
|
||||
gchar* description;
|
||||
gchar* uri;
|
||||
gchar* icon;
|
||||
gchar* token;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (MidoriWebItem, midori_web_item, G_TYPE_OBJECT)
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
|
||||
PROP_NAME,
|
||||
PROP_DESCRIPTION,
|
||||
PROP_URI,
|
||||
PROP_ICON,
|
||||
PROP_TOKEN
|
||||
};
|
||||
|
||||
static void
|
||||
midori_web_item_finalize (GObject* object);
|
||||
|
||||
static void
|
||||
midori_web_item_set_property (GObject* object,
|
||||
guint prop_id,
|
||||
const GValue* value,
|
||||
GParamSpec* pspec);
|
||||
|
||||
static void
|
||||
midori_web_item_get_property (GObject* object,
|
||||
guint prop_id,
|
||||
GValue* value,
|
||||
GParamSpec* pspec);
|
||||
|
||||
static void
|
||||
midori_web_item_class_init (MidoriWebItemClass* class)
|
||||
{
|
||||
GObjectClass* gobject_class = G_OBJECT_CLASS (class);
|
||||
gobject_class->finalize = midori_web_item_finalize;
|
||||
gobject_class->set_property = midori_web_item_set_property;
|
||||
gobject_class->get_property = midori_web_item_get_property;
|
||||
|
||||
GParamFlags flags = G_PARAM_READWRITE | G_PARAM_CONSTRUCT;
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_NAME,
|
||||
g_param_spec_string (
|
||||
"name",
|
||||
_("Name"),
|
||||
_("The name of the web item"),
|
||||
NULL,
|
||||
flags));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_DESCRIPTION,
|
||||
g_param_spec_string (
|
||||
"description",
|
||||
_("Description"),
|
||||
_("The description of the web item"),
|
||||
NULL,
|
||||
flags));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_URI,
|
||||
g_param_spec_string (
|
||||
"uri",
|
||||
_("URI"),
|
||||
_("The URI of the web item"),
|
||||
NULL,
|
||||
flags));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_ICON,
|
||||
g_param_spec_string (
|
||||
"icon",
|
||||
_("Icon"),
|
||||
_("The icon of the web item"),
|
||||
NULL,
|
||||
flags));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_TOKEN,
|
||||
g_param_spec_string (
|
||||
"token",
|
||||
_("Token"),
|
||||
_("The token of the web item"),
|
||||
NULL,
|
||||
flags));
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
midori_web_item_init (MidoriWebItem* web_item)
|
||||
{
|
||||
// Nothing to do here
|
||||
}
|
||||
|
||||
static void
|
||||
midori_web_item_finalize (GObject* object)
|
||||
{
|
||||
G_OBJECT_CLASS (midori_web_item_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
midori_web_item_set_property (GObject* object,
|
||||
guint prop_id,
|
||||
const GValue* value,
|
||||
GParamSpec* pspec)
|
||||
{
|
||||
MidoriWebItem* web_item = MIDORI_WEB_ITEM (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_NAME:
|
||||
web_item->name = g_value_dup_string (value);
|
||||
break;
|
||||
case PROP_DESCRIPTION:
|
||||
web_item->description = g_value_dup_string (value);
|
||||
break;
|
||||
case PROP_URI:
|
||||
web_item->uri = g_value_dup_string (value);
|
||||
break;
|
||||
case PROP_ICON:
|
||||
web_item->icon = g_value_dup_string (value);
|
||||
break;
|
||||
case PROP_TOKEN:
|
||||
web_item->token = g_value_dup_string (value);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
midori_web_item_get_property (GObject* object,
|
||||
guint prop_id,
|
||||
GValue* value,
|
||||
GParamSpec* pspec)
|
||||
{
|
||||
MidoriWebItem* web_item = MIDORI_WEB_ITEM (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_NAME:
|
||||
g_value_set_string (value, web_item->name);
|
||||
break;
|
||||
case PROP_DESCRIPTION:
|
||||
g_value_set_string (value, web_item->description);
|
||||
break;
|
||||
case PROP_URI:
|
||||
g_value_set_string (value, web_item->uri);
|
||||
break;
|
||||
case PROP_ICON:
|
||||
g_value_set_string (value, web_item->icon);
|
||||
break;
|
||||
case PROP_TOKEN:
|
||||
g_value_set_string (value, web_item->token);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* midori_web_item_new:
|
||||
*
|
||||
* Creates a new #MidoriWebItem.
|
||||
*
|
||||
* Return value: a new #MidoriWebItem
|
||||
**/
|
||||
MidoriWebItem*
|
||||
midori_web_item_new (void)
|
||||
{
|
||||
MidoriWebItem* web_item = g_object_new (MIDORI_TYPE_WEB_ITEM,
|
||||
NULL);
|
||||
|
||||
return web_item;
|
||||
}
|
||||
|
||||
/**
|
||||
* midori_web_item_get_name:
|
||||
* @web_item: a #MidoriWebItem
|
||||
*
|
||||
* Retrieves the name of @web_item.
|
||||
*
|
||||
* Return value: the name of the web item
|
||||
**/
|
||||
const gchar*
|
||||
midori_web_item_get_name (MidoriWebItem* web_item)
|
||||
{
|
||||
g_return_val_if_fail (MIDORI_IS_WEB_ITEM (web_item), NULL);
|
||||
|
||||
return web_item->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* midori_web_item_set_name:
|
||||
* @web_item: a #MidoriWebItem
|
||||
* @name: a string
|
||||
*
|
||||
* Sets the name of @web_item.
|
||||
**/
|
||||
void
|
||||
midori_web_item_set_name (MidoriWebItem* web_item,
|
||||
const gchar* name)
|
||||
{
|
||||
g_return_if_fail (MIDORI_IS_WEB_ITEM (web_item));
|
||||
|
||||
katze_assign (web_item->name, g_strdup (name));
|
||||
g_object_notify (G_OBJECT (web_item), "name");
|
||||
}
|
||||
|
||||
/**
|
||||
* midori_web_item_get_description:
|
||||
* @web_item: a #MidoriWebItem
|
||||
*
|
||||
* Retrieves the description of @web_item.
|
||||
*
|
||||
* Return value: the description of the web item
|
||||
**/
|
||||
const gchar*
|
||||
midori_web_item_get_description (MidoriWebItem* web_item)
|
||||
{
|
||||
g_return_val_if_fail (MIDORI_IS_WEB_ITEM (web_item), NULL);
|
||||
|
||||
return web_item->description;
|
||||
}
|
||||
|
||||
/**
|
||||
* midori_web_item_set_description:
|
||||
* @web_item: a #MidoriWebItem
|
||||
* @description: a string
|
||||
*
|
||||
* Sets the description of @web_item.
|
||||
**/
|
||||
void
|
||||
midori_web_item_set_description (MidoriWebItem* web_item,
|
||||
const gchar* description)
|
||||
{
|
||||
g_return_if_fail (MIDORI_IS_WEB_ITEM (web_item));
|
||||
|
||||
katze_assign (web_item->description, g_strdup (description));
|
||||
g_object_notify (G_OBJECT (web_item), "description");
|
||||
}
|
||||
|
||||
/**
|
||||
* midori_web_item_get_uri:
|
||||
* @web_item: a #MidoriWebItem
|
||||
*
|
||||
* Retrieves the URI of @web_item.
|
||||
*
|
||||
* Return value: the URI of the web item
|
||||
**/
|
||||
const gchar*
|
||||
midori_web_item_get_uri (MidoriWebItem* web_item)
|
||||
{
|
||||
g_return_val_if_fail (MIDORI_IS_WEB_ITEM (web_item), NULL);
|
||||
|
||||
return web_item->uri;
|
||||
}
|
||||
|
||||
/**
|
||||
* midori_web_item_set_uri:
|
||||
* @web_item: a #MidoriWebItem
|
||||
* @uri: a string
|
||||
*
|
||||
* Sets the URI of @web_item.
|
||||
**/
|
||||
void
|
||||
midori_web_item_set_uri (MidoriWebItem* web_item,
|
||||
const gchar* uri)
|
||||
{
|
||||
g_return_if_fail (MIDORI_IS_WEB_ITEM (web_item));
|
||||
|
||||
katze_assign (web_item->uri, g_strdup (uri));
|
||||
g_object_notify (G_OBJECT (web_item), "uri");
|
||||
}
|
||||
|
||||
/**
|
||||
* midori_web_item_get_icon:
|
||||
* @web_item: a #MidoriWebItem
|
||||
*
|
||||
* Retrieves the icon of @web_item.
|
||||
*
|
||||
* Return value: the icon of the web item
|
||||
**/
|
||||
const gchar*
|
||||
midori_web_item_get_icon (MidoriWebItem* web_item)
|
||||
{
|
||||
g_return_val_if_fail (MIDORI_IS_WEB_ITEM (web_item), NULL);
|
||||
|
||||
return web_item->icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* midori_web_item_set_icon:
|
||||
* @web_item: a #MidoriWebItem
|
||||
* @icon: a string
|
||||
*
|
||||
* Sets the icon of @web_item.
|
||||
**/
|
||||
void
|
||||
midori_web_item_set_icon (MidoriWebItem* web_item,
|
||||
const gchar* icon)
|
||||
{
|
||||
g_return_if_fail (MIDORI_IS_WEB_ITEM (web_item));
|
||||
|
||||
katze_assign (web_item->icon, g_strdup (icon));
|
||||
g_object_notify (G_OBJECT (web_item), "icon");
|
||||
}
|
||||
|
||||
/**
|
||||
* midori_web_item_get_token:
|
||||
* @web_item: a #MidoriWebItem
|
||||
*
|
||||
* Retrieves the token of @web_item.
|
||||
*
|
||||
* Return value: the token of the web item
|
||||
**/
|
||||
const gchar*
|
||||
midori_web_item_get_token (MidoriWebItem* web_item)
|
||||
{
|
||||
g_return_val_if_fail (MIDORI_IS_WEB_ITEM (web_item), NULL);
|
||||
|
||||
return web_item->token;
|
||||
}
|
||||
|
||||
/**
|
||||
* midori_web_item_set_token:
|
||||
* @web_item: a #MidoriWebItem
|
||||
* @token: a string
|
||||
*
|
||||
* Sets the token of @web_item.
|
||||
**/
|
||||
void
|
||||
midori_web_item_set_token (MidoriWebItem* web_item,
|
||||
const gchar* token)
|
||||
{
|
||||
g_return_if_fail (MIDORI_IS_WEB_ITEM (web_item));
|
||||
|
||||
katze_assign (web_item->token, g_strdup (token));
|
||||
g_object_notify (G_OBJECT (web_item), "token");
|
||||
}
|
83
midori/midori-webitem.h
Normal file
83
midori/midori-webitem.h
Normal file
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
Copyright (C) 2008 Christian Dywan <christian@twotoasts.de>
|
||||
|
||||
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.1 of the License, or (at your option) any later version.
|
||||
|
||||
See the file COPYING for the full license text.
|
||||
*/
|
||||
|
||||
#ifndef __MIDORI_WEB_ITEM_H__
|
||||
#define __MIDORI_WEB_ITEM_H__
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define MIDORI_TYPE_WEB_ITEM \
|
||||
(midori_web_item_get_type ())
|
||||
#define MIDORI_WEB_ITEM(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_CAST ((obj), MIDORI_TYPE_WEB_ITEM, MidoriWebItem))
|
||||
#define MIDORI_WEB_ITEM_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_CAST ((klass), MIDORI_TYPE_WEB_ITEM, MidoriWebItemClass))
|
||||
#define MIDORI_IS_WEB_ITEM(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIDORI_TYPE_WEB_ITEM))
|
||||
#define MIDORI_IS_WEB_ITEM_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE ((klass), MIDORI_TYPE_WEB_ITEM))
|
||||
#define MIDORI_WEB_ITEM_GET_CLASS(obj) \
|
||||
(G_TYPE_INSTANCE_GET_CLASS ((obj), MIDORI_TYPE_WEB_ITEM, MidoriWebItemClass))
|
||||
|
||||
typedef struct _MidoriWebItem MidoriWebItem;
|
||||
typedef struct _MidoriWebItemClass MidoriWebItemClass;
|
||||
|
||||
struct _MidoriWebItemClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
GType
|
||||
midori_web_item_get_type (void);
|
||||
|
||||
MidoriWebItem*
|
||||
midori_web_item_new (void);
|
||||
|
||||
const gchar*
|
||||
midori_web_item_get_name (MidoriWebItem* web_item);
|
||||
|
||||
void
|
||||
midori_web_item_set_name (MidoriWebItem* web_item,
|
||||
const gchar* name);
|
||||
|
||||
const gchar*
|
||||
midori_web_item_get_description (MidoriWebItem* web_item);
|
||||
|
||||
void
|
||||
midori_web_item_set_description (MidoriWebItem* web_item,
|
||||
const gchar* description);
|
||||
|
||||
const gchar*
|
||||
midori_web_item_get_uri (MidoriWebItem* web_item);
|
||||
|
||||
void
|
||||
midori_web_item_set_uri (MidoriWebItem* web_item,
|
||||
const gchar* uri);
|
||||
|
||||
const gchar*
|
||||
midori_web_item_get_icon (MidoriWebItem* web_item);
|
||||
|
||||
void
|
||||
midori_web_item_set_icon (MidoriWebItem* web_item,
|
||||
const gchar* icon);
|
||||
|
||||
const gchar*
|
||||
midori_web_item_get_token (MidoriWebItem* web_item);
|
||||
|
||||
void
|
||||
midori_web_item_set_token (MidoriWebItem* web_item,
|
||||
const gchar* token);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __MIDORI_WEB_ITEM_H__ */
|
164
midori/search.c
164
midori/search.c
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2007 Christian Dywan <christian@twotoasts.de>
|
||||
Copyright (C) 2007-2008 Christian Dywan <christian@twotoasts.de>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -11,11 +11,9 @@
|
|||
|
||||
#include "search.h"
|
||||
|
||||
#include "sokoke.h"
|
||||
#include <katze/katze.h>
|
||||
#include "midori-webitem.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "sokoke.h"
|
||||
|
||||
GList* search_engines_new(void)
|
||||
{
|
||||
|
@ -24,7 +22,7 @@ GList* search_engines_new(void)
|
|||
|
||||
void search_engines_free(GList* searchEngines)
|
||||
{
|
||||
g_list_foreach(searchEngines, (GFunc)search_engine_free, NULL);
|
||||
g_list_foreach(searchEngines, (GFunc)g_object_unref, NULL);
|
||||
g_list_free(searchEngines);
|
||||
}
|
||||
|
||||
|
@ -40,14 +38,19 @@ gboolean search_engines_from_file(GList** searchEngines, const gchar* filename
|
|||
guint i;
|
||||
for(i = 0; engines[i] != NULL; i++)
|
||||
{
|
||||
SearchEngine* engine = search_engine_new();
|
||||
search_engine_set_short_name(engine, engines[i]);
|
||||
engine->description = g_key_file_get_string(keyFile, engines[i], "description", NULL);
|
||||
engine->url = g_key_file_get_string(keyFile, engines[i], "url", NULL);
|
||||
engine->inputEncoding = g_key_file_get_string(keyFile, engines[i], "input-encoding", NULL);
|
||||
engine->icon = g_key_file_get_string(keyFile, engines[i], "icon", NULL);
|
||||
engine->keyword = g_key_file_get_string(keyFile, engines[i], "keyword", NULL);
|
||||
*searchEngines = g_list_prepend(*searchEngines, engine);
|
||||
MidoriWebItem* web_item = midori_web_item_new ();
|
||||
guint j, n_properties;
|
||||
GParamSpec** pspecs = g_object_class_list_properties (
|
||||
G_OBJECT_GET_CLASS (web_item), &n_properties);
|
||||
for (j = 0; j < n_properties; j++)
|
||||
{
|
||||
const gchar* property = g_param_spec_get_name (pspecs[j]);
|
||||
gchar* value = g_key_file_get_string (keyFile, engines[i],
|
||||
property, NULL);
|
||||
g_object_set (web_item, property, value, NULL);
|
||||
g_free (value);
|
||||
}
|
||||
*searchEngines = g_list_prepend(*searchEngines, web_item);
|
||||
}
|
||||
*searchEngines = g_list_reverse(*searchEngines);
|
||||
g_strfreev(engines);
|
||||
|
@ -71,129 +74,22 @@ gboolean search_engines_to_file(GList* searchEngines, const gchar* filename
|
|||
guint i;
|
||||
for(i = 0; i < n; i++)
|
||||
{
|
||||
SearchEngine* engine = (SearchEngine*)g_list_nth_data(searchEngines, i);
|
||||
const gchar* name = search_engine_get_short_name(engine);
|
||||
key_file_set_string(keyFile, name, "description", engine->description);
|
||||
key_file_set_string(keyFile, name, "url", engine->url);
|
||||
key_file_set_string(keyFile, name, "input-encoding", engine->inputEncoding);
|
||||
key_file_set_string(keyFile, name, "icon", engine->icon);
|
||||
key_file_set_string(keyFile, name, "keyword", engine->keyword);
|
||||
MidoriWebItem* web_item = (MidoriWebItem*)g_list_nth_data(searchEngines, i);
|
||||
const gchar* name = midori_web_item_get_name (web_item);
|
||||
guint j, n_properties;
|
||||
GParamSpec** pspecs = g_object_class_list_properties (
|
||||
G_OBJECT_GET_CLASS (web_item), &n_properties);
|
||||
for (j = 0; j < n_properties; j++)
|
||||
{
|
||||
const gchar* property = g_param_spec_get_name (pspecs[j]);
|
||||
gchar* value;
|
||||
g_object_get (web_item, property, &value, NULL);
|
||||
key_file_set_string (keyFile, name, property, value);
|
||||
g_free (value);
|
||||
}
|
||||
}
|
||||
gboolean bSaved = sokoke_key_file_save_to_file(keyFile, filename, error);
|
||||
g_key_file_free(keyFile);
|
||||
|
||||
return bSaved;
|
||||
}
|
||||
|
||||
SearchEngine* search_engine_new()
|
||||
{
|
||||
SearchEngine* engine = g_new0(SearchEngine, 1);
|
||||
engine->shortName = g_strdup("");
|
||||
return engine;
|
||||
}
|
||||
|
||||
void search_engine_free(SearchEngine* engine)
|
||||
{
|
||||
g_return_if_fail(engine);
|
||||
g_free(engine->shortName);
|
||||
g_free(engine->description);
|
||||
g_free(engine->url);
|
||||
g_free(engine->inputEncoding);
|
||||
g_free(engine->icon);
|
||||
g_free(engine->keyword);
|
||||
g_free(engine);
|
||||
}
|
||||
|
||||
SearchEngine* search_engine_copy(SearchEngine* engine)
|
||||
{
|
||||
g_return_val_if_fail(engine, NULL);
|
||||
SearchEngine* copy = search_engine_new();
|
||||
search_engine_set_short_name(copy, engine->shortName);
|
||||
search_engine_set_description(copy, engine->description);
|
||||
search_engine_set_url(copy, engine->url);
|
||||
search_engine_set_input_encoding(copy, engine->inputEncoding);
|
||||
search_engine_set_icon(copy, engine->icon);
|
||||
search_engine_set_keyword(copy, engine->keyword);
|
||||
return engine;
|
||||
}
|
||||
|
||||
GType search_engine_get_type()
|
||||
{
|
||||
static GType type = 0;
|
||||
if(!type)
|
||||
type = g_pointer_type_register_static("search_engine");
|
||||
return type;
|
||||
}
|
||||
|
||||
G_CONST_RETURN gchar* search_engine_get_short_name(SearchEngine* engine)
|
||||
{
|
||||
g_return_val_if_fail(engine, NULL);
|
||||
return engine->shortName;
|
||||
}
|
||||
|
||||
G_CONST_RETURN gchar* search_engine_get_description(SearchEngine* engine)
|
||||
{
|
||||
g_return_val_if_fail(engine, NULL);
|
||||
return engine->description;
|
||||
}
|
||||
|
||||
G_CONST_RETURN gchar* search_engine_get_url(SearchEngine* engine)
|
||||
{
|
||||
g_return_val_if_fail(engine, NULL);
|
||||
return engine->url;
|
||||
}
|
||||
|
||||
G_CONST_RETURN gchar* search_engine_get_input_encoding(SearchEngine* engine)
|
||||
{
|
||||
g_return_val_if_fail(engine, NULL);
|
||||
return engine->inputEncoding;
|
||||
}
|
||||
|
||||
G_CONST_RETURN gchar* search_engine_get_icon(SearchEngine* engine)
|
||||
{
|
||||
g_return_val_if_fail(engine, NULL);
|
||||
return engine->icon;
|
||||
}
|
||||
|
||||
G_CONST_RETURN gchar* search_engine_get_keyword(SearchEngine* engine)
|
||||
{
|
||||
g_return_val_if_fail(engine, NULL);
|
||||
return engine->keyword;
|
||||
}
|
||||
|
||||
void search_engine_set_short_name(SearchEngine* engine, const gchar* shortName)
|
||||
{
|
||||
g_return_if_fail(engine);
|
||||
g_return_if_fail(shortName);
|
||||
katze_assign(engine->shortName, g_strdup(shortName));
|
||||
}
|
||||
|
||||
void search_engine_set_description(SearchEngine* engine, const gchar* description)
|
||||
{
|
||||
g_return_if_fail(engine);
|
||||
katze_assign(engine->description, g_strdup(description));
|
||||
}
|
||||
|
||||
void search_engine_set_url(SearchEngine* engine, const gchar* url)
|
||||
{
|
||||
g_return_if_fail(engine);
|
||||
katze_assign(engine->url, g_strdup(url));
|
||||
}
|
||||
|
||||
void search_engine_set_input_encoding(SearchEngine* engine, const gchar* inputEncoding)
|
||||
{
|
||||
g_return_if_fail(engine);
|
||||
katze_assign(engine->inputEncoding, g_strdup(inputEncoding));
|
||||
}
|
||||
|
||||
void search_engine_set_icon(SearchEngine* engine, const gchar* icon)
|
||||
{
|
||||
g_return_if_fail(engine);
|
||||
katze_assign(engine->icon, g_strdup(icon));
|
||||
}
|
||||
|
||||
void search_engine_set_keyword(SearchEngine* engine, const gchar* keyword)
|
||||
{
|
||||
g_return_if_fail(engine);
|
||||
katze_assign(engine->keyword, g_strdup(keyword));
|
||||
}
|
||||
|
|
|
@ -15,17 +15,6 @@
|
|||
#include <glib.h>
|
||||
#include <glib-object.h>
|
||||
|
||||
// Note: This structure is entirely private.
|
||||
typedef struct
|
||||
{
|
||||
gchar* shortName;
|
||||
gchar* description;
|
||||
gchar* url;
|
||||
gchar* inputEncoding;
|
||||
gchar* icon;
|
||||
gchar* keyword;
|
||||
} SearchEngine;
|
||||
|
||||
GList*
|
||||
search_engines_new(void);
|
||||
|
||||
|
@ -38,54 +27,4 @@ search_engines_from_file(GList**, const gchar*, GError**);
|
|||
gboolean
|
||||
search_engines_to_file(GList*, const gchar*, GError**);
|
||||
|
||||
SearchEngine*
|
||||
search_engine_new(void);
|
||||
|
||||
void
|
||||
search_engine_free(SearchEngine*);
|
||||
|
||||
SearchEngine*
|
||||
search_engine_copy(SearchEngine*);
|
||||
|
||||
GType
|
||||
search_engine_get_type();
|
||||
|
||||
#define G_TYPE_SEARCH_ENGINE search_engine_get_type()
|
||||
|
||||
G_CONST_RETURN gchar*
|
||||
search_engine_get_short_name(SearchEngine*);
|
||||
|
||||
G_CONST_RETURN gchar*
|
||||
search_engine_get_description(SearchEngine*);
|
||||
|
||||
G_CONST_RETURN gchar*
|
||||
search_engine_get_url(SearchEngine*);
|
||||
|
||||
G_CONST_RETURN gchar*
|
||||
search_engine_get_input_encoding(SearchEngine*);
|
||||
|
||||
G_CONST_RETURN gchar*
|
||||
search_engine_get_icon(SearchEngine*);
|
||||
|
||||
G_CONST_RETURN gchar*
|
||||
search_engine_get_keyword(SearchEngine*);
|
||||
|
||||
void
|
||||
search_engine_set_short_name(SearchEngine*, const gchar*);
|
||||
|
||||
void
|
||||
search_engine_set_description(SearchEngine*, const gchar*);
|
||||
|
||||
void
|
||||
search_engine_set_url(SearchEngine*, const gchar*);
|
||||
|
||||
void
|
||||
search_engine_set_input_encoding(SearchEngine*, const gchar*);
|
||||
|
||||
void
|
||||
search_engine_set_icon(SearchEngine*, const gchar*);
|
||||
|
||||
void
|
||||
search_engine_set_keyword(SearchEngine*, const gchar*);
|
||||
|
||||
#endif /* !__SEARCH_H__ */
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
#include "sokoke.h"
|
||||
|
||||
#include "search.h"
|
||||
#include "midori-webitem.h"
|
||||
|
||||
#include "config.h"
|
||||
#include "main.h"
|
||||
|
@ -57,11 +57,10 @@ sokoke_magic_uri (const gchar* uri, const gchar* default_search_uri)
|
|||
guint i;
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
SearchEngine* search_engine = (SearchEngine*)g_list_nth_data (
|
||||
MidoriWebItem* web_item = (MidoriWebItem*)g_list_nth_data (
|
||||
searchEngines, i);
|
||||
if (!strcmp (search_engine_get_keyword (search_engine),
|
||||
parts[0]))
|
||||
search_uri = search_engine->url;
|
||||
if (!strcmp (midori_web_item_get_token (web_item), parts[0]))
|
||||
search_uri = midori_web_item_get_uri (web_item);
|
||||
}
|
||||
if (search_uri)
|
||||
search = g_strdup_printf (search_uri, parts[1]);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2007 Christian Dywan <christian@twotoasts.de>
|
||||
Copyright (C) 2007-2008 Christian Dywan <christian@twotoasts.de>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -16,6 +16,8 @@
|
|||
#include "main.h"
|
||||
#include "sokoke.h"
|
||||
|
||||
#include "midori-webitem.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
#include <glib/gi18n.h>
|
||||
|
@ -66,14 +68,14 @@ void update_searchEngine(guint index, GtkWidget* search)
|
|||
// Reset in case the index is out of range
|
||||
if(index >= n)
|
||||
index = 0;
|
||||
SearchEngine* engine = (SearchEngine*)g_list_nth_data(searchEngines, index);
|
||||
GdkPixbuf* pixbuf = load_web_icon(search_engine_get_icon(engine)
|
||||
, GTK_ICON_SIZE_MENU, search);
|
||||
MidoriWebItem* web_item = (MidoriWebItem*)g_list_nth_data (searchEngines, index);
|
||||
GdkPixbuf* pixbuf = load_web_icon (midori_web_item_get_icon (web_item),
|
||||
GTK_ICON_SIZE_MENU, search);
|
||||
sexy_icon_entry_set_icon(SEXY_ICON_ENTRY(search)
|
||||
, SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE(gtk_image_new_from_pixbuf(pixbuf)));
|
||||
g_object_unref(pixbuf);
|
||||
sokoke_entry_set_default_text(GTK_ENTRY(search)
|
||||
, search_engine_get_short_name(engine));
|
||||
sokoke_entry_set_default_text (GTK_ENTRY (search),
|
||||
midori_web_item_get_name (web_item));
|
||||
// config->searchEngine = index;
|
||||
}
|
||||
}
|
||||
|
@ -95,11 +97,11 @@ void on_webSearch_icon_released(GtkWidget* widget, SexyIconEntryPosition* pos
|
|||
guint i;
|
||||
for(i = 0; i < n; i++)
|
||||
{
|
||||
SearchEngine* engine = (SearchEngine*)g_list_nth_data(searchEngines, i);
|
||||
menuitem = gtk_image_menu_item_new_with_label(
|
||||
search_engine_get_short_name(engine));
|
||||
GdkPixbuf* pixbuf = load_web_icon(search_engine_get_icon(engine)
|
||||
, GTK_ICON_SIZE_MENU, menuitem);
|
||||
MidoriWebItem* web_item = (MidoriWebItem*)g_list_nth_data (searchEngines, i);
|
||||
menuitem = gtk_image_menu_item_new_with_label (
|
||||
midori_web_item_get_name (web_item));
|
||||
GdkPixbuf* pixbuf = load_web_icon (midori_web_item_get_icon (web_item),
|
||||
GTK_ICON_SIZE_MENU, menuitem);
|
||||
GtkWidget* icon = gtk_image_new_from_pixbuf(pixbuf);
|
||||
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), icon);
|
||||
g_object_unref(pixbuf);
|
||||
|
@ -134,12 +136,12 @@ static void on_webSearch_engines_render_icon(GtkTreeViewColumn* column
|
|||
, GtkCellRenderer* renderer, GtkTreeModel* model, GtkTreeIter* iter
|
||||
, GtkWidget* treeview)
|
||||
{
|
||||
SearchEngine* searchEngine;
|
||||
gtk_tree_model_get(model, iter, ENGINES_COL_ENGINE, &searchEngine, -1);
|
||||
MidoriWebItem* web_item;
|
||||
gtk_tree_model_get(model, iter, ENGINES_COL_ENGINE, &web_item, -1);
|
||||
|
||||
// TODO: Would it be better to not do this on every redraw?
|
||||
const gchar* icon = search_engine_get_icon(searchEngine);
|
||||
if(icon)
|
||||
const gchar* icon = midori_web_item_get_icon (web_item);
|
||||
if (icon)
|
||||
{
|
||||
GdkPixbuf* pixbuf = load_web_icon(icon, GTK_ICON_SIZE_DND, treeview);
|
||||
g_object_set(renderer, "pixbuf", pixbuf, NULL);
|
||||
|
@ -154,10 +156,10 @@ static void on_webSearch_engines_render_text(GtkTreeViewColumn* column
|
|||
, GtkCellRenderer* renderer, GtkTreeModel* model, GtkTreeIter* iter
|
||||
, GtkWidget* treeview)
|
||||
{
|
||||
SearchEngine* searchEngine;
|
||||
gtk_tree_model_get(model, iter, ENGINES_COL_ENGINE, &searchEngine, -1);
|
||||
const gchar* name = search_engine_get_short_name(searchEngine);
|
||||
const gchar* description = search_engine_get_description(searchEngine);
|
||||
MidoriWebItem* web_item;
|
||||
gtk_tree_model_get(model, iter, ENGINES_COL_ENGINE, &web_item, -1);
|
||||
const gchar* name = midori_web_item_get_name (web_item);
|
||||
const gchar* description = midori_web_item_get_description (web_item);
|
||||
gchar* markup = g_markup_printf_escaped("<b>%s</b>\n%s", name, description);
|
||||
g_object_set(renderer, "markup", markup, NULL);
|
||||
g_free(markup);
|
||||
|
@ -196,12 +198,12 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
|
|||
gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), 5);
|
||||
GtkSizeGroup* sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
|
||||
|
||||
SearchEngine* searchEngine;
|
||||
MidoriWebItem* web_item;
|
||||
GtkTreeModel* liststore;
|
||||
GtkTreeIter iter;
|
||||
if(newEngine)
|
||||
{
|
||||
searchEngine = search_engine_new();
|
||||
web_item = midori_web_item_new ();
|
||||
gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog)
|
||||
, GTK_RESPONSE_ACCEPT, FALSE);
|
||||
}
|
||||
|
@ -209,7 +211,7 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
|
|||
{
|
||||
GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(webSearch->treeview));
|
||||
gtk_tree_selection_get_selected(selection, &liststore, &iter);
|
||||
gtk_tree_model_get(liststore, &iter, ENGINES_COL_ENGINE, &searchEngine, -1);
|
||||
gtk_tree_model_get(liststore, &iter, ENGINES_COL_ENGINE, &web_item, -1);
|
||||
}
|
||||
|
||||
GtkWidget* hbox = gtk_hbox_new(FALSE, 8);
|
||||
|
@ -223,7 +225,7 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
|
|||
gtk_entry_set_activates_default(GTK_ENTRY(entry_shortName), TRUE);
|
||||
if(!newEngine)
|
||||
gtk_entry_set_text(GTK_ENTRY(entry_shortName)
|
||||
, search_engine_get_short_name(searchEngine));
|
||||
, STR_NON_NULL (midori_web_item_get_name (web_item)));
|
||||
gtk_box_pack_start(GTK_BOX(hbox), entry_shortName, TRUE, TRUE, 0);
|
||||
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
|
||||
gtk_widget_show_all(hbox);
|
||||
|
@ -237,7 +239,7 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
|
|||
gtk_entry_set_activates_default(GTK_ENTRY(entry_description), TRUE);
|
||||
if(!newEngine)
|
||||
gtk_entry_set_text(GTK_ENTRY(entry_description)
|
||||
, STR_NON_NULL(search_engine_get_description(searchEngine)));
|
||||
, STR_NON_NULL (midori_web_item_get_description (web_item)));
|
||||
gtk_box_pack_start(GTK_BOX(hbox), entry_description, TRUE, TRUE, 0);
|
||||
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
|
||||
gtk_widget_show_all(hbox);
|
||||
|
@ -251,7 +253,7 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
|
|||
gtk_entry_set_activates_default(GTK_ENTRY(entry_url), TRUE);
|
||||
if(!newEngine)
|
||||
gtk_entry_set_text(GTK_ENTRY(entry_url)
|
||||
, STR_NON_NULL(search_engine_get_url(searchEngine)));
|
||||
, STR_NON_NULL (midori_web_item_get_uri (web_item)));
|
||||
gtk_box_pack_start(GTK_BOX(hbox), entry_url, TRUE, TRUE, 0);
|
||||
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
|
||||
gtk_widget_show_all(hbox);
|
||||
|
@ -265,7 +267,7 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
|
|||
gtk_entry_set_activates_default(GTK_ENTRY(entry_icon), TRUE);
|
||||
if(!newEngine)
|
||||
gtk_entry_set_text(GTK_ENTRY(entry_icon)
|
||||
, STR_NON_NULL(search_engine_get_icon(searchEngine)));
|
||||
, STR_NON_NULL (midori_web_item_get_icon (web_item)));
|
||||
gtk_box_pack_start(GTK_BOX(hbox), entry_icon, TRUE, TRUE, 0);
|
||||
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
|
||||
gtk_widget_show_all(hbox);
|
||||
|
@ -279,7 +281,7 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
|
|||
gtk_entry_set_activates_default(GTK_ENTRY(entry_keyword), TRUE);
|
||||
if(!newEngine)
|
||||
gtk_entry_set_text(GTK_ENTRY(entry_keyword)
|
||||
, STR_NON_NULL(search_engine_get_keyword(searchEngine)));
|
||||
, STR_NON_NULL(midori_web_item_get_token (web_item)));
|
||||
gtk_box_pack_start(GTK_BOX(hbox), entry_keyword, TRUE, TRUE, 0);
|
||||
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
|
||||
gtk_widget_show_all(hbox);
|
||||
|
@ -287,27 +289,27 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
|
|||
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
|
||||
if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
search_engine_set_short_name(searchEngine
|
||||
midori_web_item_set_name (web_item
|
||||
, gtk_entry_get_text(GTK_ENTRY(entry_shortName)));
|
||||
search_engine_set_description(searchEngine
|
||||
midori_web_item_set_description (web_item
|
||||
, gtk_entry_get_text(GTK_ENTRY(entry_description)));
|
||||
search_engine_set_url(searchEngine
|
||||
midori_web_item_set_uri (web_item
|
||||
, gtk_entry_get_text(GTK_ENTRY(entry_url)));
|
||||
/*search_engine_set_input_encoding(searchEngine
|
||||
, gtk_entry_get_text(GTK_ENTRY(entry_inputEncoding)));*/
|
||||
search_engine_set_icon(searchEngine
|
||||
midori_web_item_set_icon (web_item
|
||||
, gtk_entry_get_text(GTK_ENTRY(entry_icon)));
|
||||
search_engine_set_keyword(searchEngine
|
||||
midori_web_item_set_token (web_item
|
||||
, gtk_entry_get_text(GTK_ENTRY(entry_keyword)));
|
||||
|
||||
if(newEngine)
|
||||
{
|
||||
searchEngines = g_list_append(searchEngines, searchEngine);
|
||||
searchEngines = g_list_append(searchEngines, web_item);
|
||||
liststore = gtk_tree_view_get_model(GTK_TREE_VIEW(webSearch->treeview));
|
||||
gtk_list_store_append(GTK_LIST_STORE(liststore), &iter);
|
||||
}
|
||||
gtk_list_store_set(GTK_LIST_STORE(liststore), &iter
|
||||
, ENGINES_COL_ENGINE, searchEngine, -1);
|
||||
, ENGINES_COL_ENGINE, web_item, -1);
|
||||
webSearch_toggle_edit_buttons(TRUE, webSearch);
|
||||
}
|
||||
gtk_widget_destroy(dialog);
|
||||
|
@ -329,11 +331,11 @@ static void on_webSearch_remove(GtkWidget* widget, CWebSearch* webSearch)
|
|||
GtkTreeModel* liststore;
|
||||
GtkTreeIter iter;
|
||||
gtk_tree_selection_get_selected(selection, &liststore, &iter);
|
||||
SearchEngine* searchEngine;
|
||||
gtk_tree_model_get(liststore, &iter, ENGINES_COL_ENGINE, &searchEngine, -1);
|
||||
MidoriWebItem* web_item;
|
||||
gtk_tree_model_get(liststore, &iter, ENGINES_COL_ENGINE, &web_item, -1);
|
||||
gtk_list_store_remove(GTK_LIST_STORE(liststore), &iter);
|
||||
search_engine_free(searchEngine);
|
||||
searchEngines = g_list_remove(searchEngines, searchEngine);
|
||||
g_object_unref (web_item);
|
||||
searchEngines = g_list_remove (searchEngines, web_item);
|
||||
//update_searchEngine(config->searchEngine, webSearch->browser);
|
||||
webSearch_toggle_edit_buttons(g_list_nth(searchEngines, 0) != NULL, webSearch);
|
||||
// FIXME: we want to allow undo of some kind
|
||||
|
@ -370,7 +372,7 @@ GtkWidget* webSearch_manageSearchEngines_dialog_new(MidoriBrowser* browser)
|
|||
GtkTreeViewColumn* column;
|
||||
GtkCellRenderer* renderer_text; GtkCellRenderer* renderer_pixbuf;
|
||||
GtkListStore* liststore = gtk_list_store_new(ENGINES_COL_N
|
||||
, G_TYPE_SEARCH_ENGINE);
|
||||
, MIDORI_TYPE_WEB_ITEM);
|
||||
GtkWidget* treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore));
|
||||
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
|
||||
column = gtk_tree_view_column_new();
|
||||
|
@ -393,9 +395,9 @@ GtkWidget* webSearch_manageSearchEngines_dialog_new(MidoriBrowser* browser)
|
|||
guint i;
|
||||
for(i = 0; i < n; i++)
|
||||
{
|
||||
SearchEngine* searchEngine = (SearchEngine*)g_list_nth_data(searchEngines, i);
|
||||
MidoriWebItem* web_item = (MidoriWebItem*)g_list_nth_data (searchEngines, i);
|
||||
gtk_list_store_insert_with_values(GTK_LIST_STORE(liststore), NULL, i
|
||||
, ENGINES_COL_ENGINE, searchEngine, -1);
|
||||
, ENGINES_COL_ENGINE, web_item, -1);
|
||||
}
|
||||
g_object_unref(liststore);
|
||||
CWebSearch* webSearch = g_new0(CWebSearch, 1);
|
||||
|
@ -459,10 +461,10 @@ gboolean on_webSearch_scroll(GtkWidget* webView, GdkEventScroll* event, MidoriBr
|
|||
void on_webSearch_activate(GtkWidget* widget, MidoriBrowser* browser)
|
||||
{
|
||||
const gchar* keywords = gtk_entry_get_text(GTK_ENTRY(widget));
|
||||
gchar* url;
|
||||
SearchEngine* searchEngine = (SearchEngine*)g_list_nth_data(searchEngines, 0/*config->searchEngine*/);
|
||||
if(searchEngine)
|
||||
url = searchEngine->url;
|
||||
const gchar* url;
|
||||
MidoriWebItem* web_item = (MidoriWebItem*)g_list_nth_data (searchEngines, 0/*config->searchEngine*/);
|
||||
if (web_item)
|
||||
url = midori_web_item_get_uri (web_item);
|
||||
else // The location search is our fallback
|
||||
url = "";//config->locationSearch;
|
||||
gchar* search;
|
||||
|
|
Loading…
Reference in a new issue