midori-websettings.c midori-websettings.h \
midori-preferences.c midori-preferences.h \
webSearch.c webSearch.h \
- helpers.c helpers.h \
sokoke.c sokoke.h \
- search.c search.h \
- global.h \
- ui.h
+ search.c search.h
+++ /dev/null
-/*
- Copyright (C) 2007 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 __GLOBAL_H__
-#define __GLOBAL_H__ 1
-
-#include "midori-websettings.h"
-#include <katze/katze.h>
-
-#include <gtk/gtk.h>
-#include <webkit/webkit.h>
-
-#include <glib/gi18n.h>
-
-// FIXME: Remove these globals
-
-GList* searchEngines; // Items of type 'SearchEngine'
-KatzeXbelItem* bookmarks;
-
-// Custom stock items
-
-// We should distribute these
-// Names should match with epiphany and/ or xdg spec
-/* NOTE: Those uncommented were replaced with remotely related icons
- in order to reduce the amount of warnings :D */
-
-#define STOCK_BOOKMARK GTK_STOCK_FILE // "stock_bookmark" "bookmark-web"
-#define STOCK_FORM_FILL GTK_STOCK_JUSTIFY_FILL // "insert-text" "form-fill"
-#define STOCK_NEWSFEED GTK_STOCK_INDEX
-
-// We assume that these legacy icon names are usually present
-
-#define STOCK_BOOKMARK_NEW "stock_add-bookmark"
-#define STOCK_HOMEPAGE GTK_STOCK_HOME
-#define STOCK_IMAGE "gnome-mime-image"
-#define STOCK_LOCK_OPEN "stock_lock-open"
-#define STOCK_LOCK_SECURE "stock_lock"
-#define STOCK_LOCK_BROKEN "stock_lock-broken"
-#define STOCK_NETWORK_OFFLINE "network-offline"
-#define STOCK_SCRIPT "stock_script"
-#define STOCK_SEND "stock_mail-send"
-#define STOCK_TAB_NEW "stock_new-tab"
-#define STOCK_THEME "gnome-settings-theme"
-#define STOCK_USER_TRASH "gnome-stock-trash"
-#define STOCK_WINDOW_NEW "stock_new-window"
-
-// For backwards compatibility
-
-#if !GTK_CHECK_VERSION(2, 10, 0)
-#define GTK_STOCK_SELECT_ALL "gtk-select-all"
-#endif
-#if !GTK_CHECK_VERSION(2, 8, 0)
-#define GTK_STOCK_FULLSCREEN "gtk-fullscreen"
-#define GTK_STOCK_LEAVE_FULLSCREEN "gtk-leave-fullscreen"
-#endif
-
-#endif /* !__GLOBAL_H__ */
+++ /dev/null
-/*
- Copyright (C) 2007 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 "helpers.h"
-
-#include "global.h"
-#include "search.h"
-#include "sokoke.h"
-
-#include "midori-webview.h"
-#include <katze/katze.h>
-
-#include <string.h>
-#include <webkit/webkit.h>
-
-GtkWidget* check_menu_item_new(const gchar* text
- , GCallback signal, gboolean sensitive, gboolean active, gpointer userdata)
-{
- GtkWidget* menuitem = gtk_check_menu_item_new_with_mnemonic(text);
- gtk_widget_set_sensitive(menuitem, sensitive && signal);
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), active);
- if(signal)
- g_signal_connect(menuitem, "activate", signal, userdata);
- return menuitem;
-}
-
-GtkWidget* radio_button_new(GtkRadioButton* radio_button, const gchar* label)
-{
- return gtk_radio_button_new_with_mnemonic_from_widget(radio_button, label);
-}
-
-void show_error(const gchar* text, const gchar* text2, MidoriBrowser* browser)
-{
- GtkWidget* dialog = gtk_message_dialog_new(
- browser ? GTK_WINDOW(browser) : NULL
- , 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, text);
- if(text2)
- gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), text2);
- gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy(dialog);
-}
-
-GdkPixbuf* load_web_icon(const gchar* icon, GtkIconSize size, GtkWidget* widget)
-{
- g_return_val_if_fail(GTK_IS_WIDGET(widget), NULL);
- GdkPixbuf* pixbuf = NULL;
- if(icon && *icon)
- {
- // TODO: We want to allow http as well, maybe also base64?
- const gchar* iconReady = g_str_has_prefix(icon, "file://") ? &icon[7] : icon;
- GtkStockItem stockItem;
- if(gtk_stock_lookup(icon, &stockItem))
- pixbuf = gtk_widget_render_icon(widget, iconReady, size, NULL);
- else
- {
- gint width; gint height;
- gtk_icon_size_lookup(size, &width, &height);
- pixbuf = gtk_icon_theme_load_icon(gtk_icon_theme_get_default()
- , icon, MAX(width, height), GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
- }
- if(!pixbuf)
- pixbuf = gdk_pixbuf_new_from_file_at_size(iconReady, 16, 16, NULL);
- }
- if(!pixbuf)
- pixbuf = gtk_widget_render_icon(widget, GTK_STOCK_FIND, size, NULL);
- return pixbuf;
-}
-
-void entry_setup_completion(GtkEntry* entry)
-{
- /* TODO: The current behavior works only with the beginning of strings
- But we want to match "localhost" with "loc" and "hos" */
- GtkEntryCompletion* completion = gtk_entry_completion_new();
- gtk_entry_completion_set_model(completion
- , GTK_TREE_MODEL(gtk_list_store_new(1, G_TYPE_STRING)));
- gtk_entry_completion_set_text_column(completion, 0);
- gtk_entry_completion_set_minimum_key_length(completion, 3);
- gtk_entry_set_completion(entry, completion);
- gtk_entry_completion_set_popup_completion(completion, FALSE); //...
-}
-
-void entry_completion_append(GtkEntry* entry, const gchar* text)
-{
- GtkEntryCompletion* completion = gtk_entry_get_completion(entry);
- GtkTreeModel* completion_store = gtk_entry_completion_get_model(completion);
- GtkTreeIter iter;
- gtk_list_store_insert(GTK_LIST_STORE(completion_store), &iter, 0);
- gtk_list_store_set(GTK_LIST_STORE(completion_store), &iter, 0, text, -1);
-}
-
-gchar* magic_uri(const gchar* uri, gboolean search)
-{
- // Add file:// if we have a local path
- if(g_path_is_absolute(uri))
- return g_strconcat("file://", uri, NULL);
- // Do we need to add a protocol?
- if(!strstr(uri, "://"))
- {
- // Do we have a domain, ip address or localhost?
- if(strchr(uri, '.') != NULL || !strcmp(uri, "localhost"))
- return g_strconcat("http://", uri, NULL);
- // We don't want to search? So return early.
- if(!search)
- return g_strdup(uri);
- gchar search[256];
- const gchar* searchUrl = NULL;
- // Do we have a keyword and a string?
- gchar** parts = g_strsplit(uri, " ", 2);
- if(parts[0] && parts[1])
- {
- guint n = g_list_length(searchEngines);
- guint i;
- for(i = 0; i < n; i++)
- {
- SearchEngine* searchEngine = (SearchEngine*)g_list_nth_data(searchEngines, i);
- if(!strcmp(search_engine_get_keyword(searchEngine), parts[0]))
- searchUrl = searchEngine->url;
- }
- if(searchUrl != NULL)
- g_snprintf(search, 255, searchUrl, parts[1]);
- }
- //g_strfreev(sParts);
- // We only have a word or there is no matching keyowrd, so search for it
- if(searchUrl == NULL)
- g_snprintf(search, 255, ""/*config->locationSearch*/, uri);
- return g_strdup(search);
- }
- return g_strdup(uri);
-}
-
-gchar* get_default_font(void)
-{
- GtkSettings* gtksettings = gtk_settings_get_default();
- gchar* defaultFont;
- g_object_get(gtksettings, "gtk-font-name", &defaultFont, NULL);
- return defaultFont;
-}
+++ /dev/null
-/*
- Copyright (C) 2007 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 __HELPERS_H__
-#define __HELPERS_H__ 1
-
-#include <gtk/gtk.h>
-
-#include "midori-browser.h"
-
-GtkWidget*
-check_menu_item_new(const gchar*, GCallback, gboolean, gboolean, gpointer);
-
-GtkWidget*
-radio_button_new(GtkRadioButton*, const gchar*);
-
-void
-show_error(const gchar*, const gchar*, MidoriBrowser*);
-
-GdkPixbuf*
-load_web_icon(const gchar*, GtkIconSize, GtkWidget*);
-
-void
-entry_setup_completion(GtkEntry*);
-
-void
-entry_completion_append(GtkEntry*, const gchar*);
-
-gchar*
-magic_uri(const gchar*, gboolean bSearch);
-
-gchar*
-get_default_font(void);
-
-#endif /* !__HELPERS_H__ */
#include "main.h"
-#include "global.h"
-#include "helpers.h"
#include "sokoke.h"
#include "search.h"
while(uri != NULL)
{
KatzeXbelItem* item = katze_xbel_bookmark_new();
- gchar* uriReady = magic_uri(uri, FALSE);
+ gchar* uriReady = sokoke_magic_uri (uri, NULL);
katze_xbel_bookmark_set_href(item, uriReady);
g_free(uriReady);
katze_xbel_folder_append_item(_session, item);
/*
- 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
See the file COPYING for the full license text.
*/
-#ifndef __MIDORI_H__
-#define __MIDORI_H__ 1
+#ifndef __MAIN_H__
+#define __MAIN_H__ 1
-#endif /* !__MIDORI_H__ */
+#include "midori-websettings.h"
+#include <katze/katze.h>
+
+#include <gtk/gtk.h>
+#include <webkit/webkit.h>
+
+#include <glib/gi18n.h>
+
+// FIXME: Remove these globals
+
+GList* searchEngines; // Items of type 'SearchEngine'
+KatzeXbelItem* bookmarks;
+
+// Custom stock items
+
+// We should distribute these
+// Names should match with epiphany and/ or xdg spec
+/* NOTE: Those uncommented were replaced with remotely related icons
+ in order to reduce the amount of warnings :D */
+
+#define STOCK_BOOKMARK GTK_STOCK_FILE // "stock_bookmark" "bookmark-web"
+#define STOCK_FORM_FILL GTK_STOCK_JUSTIFY_FILL // "insert-text" "form-fill"
+#define STOCK_NEWSFEED GTK_STOCK_INDEX
+
+// We assume that these legacy icon names are usually present
+
+#define STOCK_BOOKMARK_NEW "stock_add-bookmark"
+#define STOCK_HOMEPAGE GTK_STOCK_HOME
+#define STOCK_IMAGE "gnome-mime-image"
+#define STOCK_LOCK_OPEN "stock_lock-open"
+#define STOCK_LOCK_SECURE "stock_lock"
+#define STOCK_LOCK_BROKEN "stock_lock-broken"
+#define STOCK_NETWORK_OFFLINE "network-offline"
+#define STOCK_SCRIPT "stock_script"
+#define STOCK_SEND "stock_mail-send"
+#define STOCK_TAB_NEW "stock_new-tab"
+#define STOCK_THEME "gnome-settings-theme"
+#define STOCK_USER_TRASH "gnome-stock-trash"
+#define STOCK_WINDOW_NEW "stock_new-window"
+
+// For backwards compatibility
+
+#if !GTK_CHECK_VERSION(2, 10, 0)
+#define GTK_STOCK_SELECT_ALL "gtk-select-all"
+#endif
+#if !GTK_CHECK_VERSION(2, 8, 0)
+#define GTK_STOCK_FULLSCREEN "gtk-fullscreen"
+#define GTK_STOCK_LEAVE_FULLSCREEN "gtk-leave-fullscreen"
+#endif
+
+#endif /* !__MAIN_H__ */
#include "midori-browser.h"
-#include "global.h"
-#include "helpers.h"
#include "webSearch.h"
+#include "main.h"
#include "sokoke.h"
#include "midori-webview.h"
#include "midori-preferences.h"
GdkEventKey* event,
MidoriBrowser* browser)
{
+ MidoriBrowserPrivate* priv = browser->priv;
+ gchar* location_entry_search;
+
switch (event->keyval)
{
case GDK_ISO_Enter:
const gchar* uri = gtk_entry_get_text (GTK_ENTRY (widget));
if (uri)
{
- gchar* new_uri = magic_uri (uri, TRUE);
+ g_object_get (priv->settings, "location-entry-search",
+ &location_entry_search, NULL);
+ gchar* new_uri = sokoke_magic_uri (uri, location_entry_search);
+ g_free (location_entry_search);
// TODO: Use new_uri intermediately when completion is better
/* TODO Completion should be generated from history, that is
the uri as well as the title. */
- entry_completion_append (GTK_ENTRY (widget), uri);
+ sokoke_entry_append_completion (GTK_ENTRY (widget), uri);
GtkWidget* web_view = midori_browser_get_current_web_view (browser);
g_object_set (web_view, "uri", new_uri, NULL);
g_free (new_uri);
// Location
priv->location = sexy_icon_entry_new();
- entry_setup_completion (GTK_ENTRY (priv->location));
+ sokoke_entry_setup_completion (GTK_ENTRY (priv->location));
priv->location_icon = gtk_image_new ();
sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (priv->location)
, SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE (priv->location_icon));
// TODO: Make this actively resizable or enlarge to fit contents?
// FIXME: The interface is somewhat awkward and ought to be rethought
// TODO: Display "show in context menu" search engines as "completion actions"
- entry_setup_completion (GTK_ENTRY (priv->search));
+ sokoke_entry_setup_completion (GTK_ENTRY (priv->search));
g_object_connect (priv->search,
"signal::icon-released",
on_webSearch_icon_released, browser,
#include "midori-webview.h"
-#include "global.h"
+#include "main.h"
#include "sokoke.h"
#include <webkit/webkit.h>
"",
flags));
- g_object_class_install_property (gobject_class,
- PROP_SETTINGS,
- g_param_spec_object (
- "settings",
- "Settings",
- _("The associated settings"),
- MIDORI_TYPE_WEB_SETTINGS,
- G_PARAM_READWRITE));
+ g_object_class_override_property (gobject_class,
+ PROP_SETTINGS,
+ "settings");
g_type_class_add_private (class, sizeof (MidoriWebViewPrivate));
}
#include "sokoke.h"
+#include "search.h"
+
#include "config.h"
+#include "main.h"
#include <string.h>
#ifdef HAVE_UNISTD_H
#include <glib/gi18n.h>
#include <glib/gprintf.h>
+gchar*
+sokoke_magic_uri (const gchar* uri, const gchar* default_search_uri)
+{
+ // Add file:// if we have a local path
+ if (g_path_is_absolute (uri))
+ return g_strconcat ("file://", uri, NULL);
+ // Do we need to add a protocol?
+ if (!strstr (uri, "://"))
+ {
+ // Do we have a domain, ip address or localhost?
+ if (strchr (uri, '.') != NULL || !strcmp (uri, "localhost"))
+ return g_strconcat ("http://", uri, NULL);
+ // We don't want to search? So return early.
+ if (!default_search_uri)
+ return g_strdup (uri);
+ gchar* search;
+ const gchar* search_uri = NULL;
+ // Do we have a keyword and a string?
+ gchar** parts = g_strsplit (uri, " ", 2);
+ if (parts[0] && parts[1])
+ {
+ guint n = g_list_length (searchEngines);
+ guint i;
+ for (i = 0; i < n; i++)
+ {
+ SearchEngine* search_engine = (SearchEngine*)g_list_nth_data (
+ searchEngines, i);
+ if (!strcmp (search_engine_get_keyword (search_engine),
+ parts[0]))
+ search_uri = search_engine->url;
+ }
+ if (search_uri)
+ search = g_strdup_printf (search_uri, parts[1]);
+ }
+ // We only have a word or there is no matching keyword, so search for it
+ if (!search_uri)
+ search = g_strdup_printf (default_search_uri, uri);
+ return search;
+ }
+ return g_strdup (uri);
+}
+
+void
+sokoke_entry_setup_completion (GtkEntry* entry)
+{
+ /* TODO: The current behavior works only with the beginning of strings
+ But we want to match "localhost" with "loc" and "hos" */
+ GtkEntryCompletion* completion = gtk_entry_completion_new ();
+ gtk_entry_completion_set_model (completion,
+ GTK_TREE_MODEL (gtk_list_store_new (1, G_TYPE_STRING)));
+ gtk_entry_completion_set_text_column (completion, 0);
+ gtk_entry_completion_set_minimum_key_length (completion, 3);
+ gtk_entry_set_completion (entry, completion);
+ gtk_entry_completion_set_popup_completion (completion, FALSE); //...
+}
+
+void
+sokoke_entry_append_completion (GtkEntry* entry, const gchar* text)
+{
+ GtkEntryCompletion* completion = gtk_entry_get_completion (entry);
+ GtkTreeModel* completion_store = gtk_entry_completion_get_model (completion);
+ GtkTreeIter iter;
+ gtk_list_store_insert (GTK_LIST_STORE (completion_store), &iter, 0);
+ gtk_list_store_set (GTK_LIST_STORE (completion_store), &iter, 0, text, -1);
+}
+
#if SOKOKE_DEBUG > 1
#define UNIMPLEMENTED g_print(" * Unimplemented: %s\n", G_STRFUNC);
#else
// Many themes need this hack for small toolbars to work
#define GTK_ICON_SIZE_SMALL_TOOLBAR GTK_ICON_SIZE_BUTTON
+gchar*
+sokoke_magic_uri (const gchar* uri,
+ const gchar* search);
+
+void
+sokoke_entry_setup_completion (GtkEntry* entry);
+
+void
+sokoke_entry_append_completion (GtkEntry* entry,
+ const gchar* text);
+
typedef enum {
SOKOKE_MENU_POSITION_CURSOR = 0,
SOKOKE_MENU_POSITION_LEFT,
#include "webSearch.h"
-#include "global.h"
-#include "helpers.h"
#include "search.h"
+
+#include "main.h"
#include "sokoke.h"
#include <string.h>
#include <gdk/gdkkeysyms.h>
#include <glib/gi18n.h>
+static GdkPixbuf*
+load_web_icon (const gchar* icon, GtkIconSize size, GtkWidget* widget)
+{
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+ GdkPixbuf* pixbuf = NULL;
+ if (icon && *icon)
+ {
+ // TODO: We want to allow http as well, maybe also base64?
+ const gchar* icon_ready = g_str_has_prefix (icon, "file://")
+ ? &icon[7] : icon;
+ GtkStockItem stock_id;
+ if (gtk_stock_lookup (icon, &stock_id))
+ pixbuf = gtk_widget_render_icon (widget, icon_ready, size, NULL);
+ else
+ {
+ gint width, height;
+ gtk_icon_size_lookup (size, &width, &height);
+ if (gtk_widget_has_screen (widget))
+ {
+ GdkScreen* screen = gtk_widget_get_screen (widget);
+ pixbuf = gtk_icon_theme_load_icon (
+ gtk_icon_theme_get_for_screen (screen), icon,
+ MAX (width, height), GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
+ }
+ }
+ if (!pixbuf)
+ pixbuf = gdk_pixbuf_new_from_file_at_size (icon_ready, 16, 16, NULL);
+ }
+ if (!pixbuf)
+ pixbuf = gtk_widget_render_icon (widget, GTK_STOCK_FIND, size, NULL);
+ return pixbuf;
+}
+
void update_searchEngine(guint index, GtkWidget* search)
{
guint n = g_list_length(searchEngines);
search = g_strdup_printf(url, keywords);
else
search = g_strconcat(url, " ", keywords, NULL);
- entry_completion_append(GTK_ENTRY(widget), keywords);
+ sokoke_entry_append_completion(GTK_ENTRY(widget), keywords);
GtkWidget* webView = midori_browser_get_current_web_view(browser);
webkit_web_view_open(WEBKIT_WEB_VIEW(webView), search);
g_free(search);