summaryrefslogtreecommitdiff
path: root/gtk/gtk_window.c
diff options
context:
space:
mode:
authorRob Kendrick <rjek@netsurf-browser.org>2006-07-25 20:55:10 +0000
committerRob Kendrick <rjek@netsurf-browser.org>2006-07-25 20:55:10 +0000
commit546efe6d6c2e9a8481c545988389962ac3e14459 (patch)
treeaa3143220324efa08d7ad973632d1d32af8762fa /gtk/gtk_window.c
parent000f7502ba5ff036883c6484ca36594fc9ffb469 (diff)
downloadnetsurf-546efe6d6c2e9a8481c545988389962ac3e14459.tar.gz
netsurf-546efe6d6c2e9a8481c545988389962ac3e14459.tar.bz2
Initial work on URL completion in nsgtk. Some problems still exist.
1. It works without the code that should be required to make it do so. Boggle. 2. It appears to include the URLs to images and other resources as well as pages 3. Although you can highlight a completion with the cursor keys, pressing enter on one doesn't work - you need to click on it with the mouse. svn path=/trunk/netsurf/; revision=2795
Diffstat (limited to 'gtk/gtk_window.c')
-rw-r--r--gtk/gtk_window.c36
1 files changed, 34 insertions, 2 deletions
diff --git a/gtk/gtk_window.c b/gtk/gtk_window.c
index 0a263f949..9e2deb81a 100644
--- a/gtk/gtk_window.c
+++ b/gtk/gtk_window.c
@@ -24,6 +24,7 @@
#include "netsurf/gtk/gtk_plotters.h"
#include "netsurf/gtk/gtk_window.h"
#include "netsurf/gtk/gtk_options.h"
+#include "netsurf/gtk/gtk_completion.h"
#include "netsurf/render/box.h"
#include "netsurf/render/font.h"
#include "netsurf/render/form.h"
@@ -94,6 +95,8 @@ gboolean nsgtk_window_expose_event(GtkWidget *widget,
GdkEventExpose *event, gpointer data);
gboolean nsgtk_window_url_keypress_event(GtkWidget *widget,
GdkEventKey *event, gpointer data);
+gboolean nsgtk_window_url_changed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data);
gboolean nsgtk_window_configure_event(GtkWidget *widget,
GdkEventConfigure *event, gpointer data);
gboolean nsgtk_window_motion_notify_event(GtkWidget *widget,
@@ -134,6 +137,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
GtkWidget *scrolled, *history_scrolled;
GtkWidget *drawing_area, *history_area;
GtkWidget *status_box;
+ GtkEntryCompletion *url_bar_completion;
g = malloc(sizeof *g);
if (!g) {
@@ -289,9 +293,9 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
gtk_widget_set_size_request(g->progress_bar, 64, 0);
gtk_box_pack_end(GTK_BOX(status_box), g->progress_bar, FALSE, FALSE, 0);
+ g->window = window;
gtk_widget_show(window);
- g->window = window;
g->url_bar = url_bar;
g->drawing_area = drawing_area;
g->bw = bw;
@@ -302,11 +306,30 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
else
g->scale = 1.0;
+ /* set up URL bar completion */
+
+ url_bar_completion = gtk_entry_completion_new();
+ gtk_entry_set_completion(GTK_ENTRY(url_bar), url_bar_completion);
+ gtk_entry_completion_set_match_func(url_bar_completion,
+ nsgtk_completion_match, NULL, NULL);
+ gtk_entry_completion_set_model(url_bar_completion,
+ GTK_TREE_MODEL(nsgtk_completion_list));
+ gtk_entry_completion_set_text_column(url_bar_completion, 0);
+ gtk_entry_completion_set_minimum_key_length(url_bar_completion, 1);
+ gtk_entry_completion_set_popup_completion(url_bar_completion, TRUE);
+ gtk_entry_completion_set_popup_set_width(url_bar_completion, TRUE);
+ gtk_entry_completion_set_popup_single_match(url_bar_completion, TRUE);
+
+
#define NS_SIGNAL_CONNECT(obj, sig, callback, ptr) \
g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr))
NS_SIGNAL_CONNECT(window, "destroy", nsgtk_window_destroy_event, g);
-
+
+ g_signal_connect(G_OBJECT(url_bar), "changed",
+ G_CALLBACK(nsgtk_window_url_changed), g);
+// g_signal_connect(G_OBJECT(url_bar_completion), "match-selected",
+// G_CALLBACK(nsgtk_window_completion_selected), g);
g_signal_connect(G_OBJECT(drawing_area), "expose_event",
G_CALLBACK(nsgtk_window_expose_event), g);
g_signal_connect(G_OBJECT(drawing_area), "configure_event",
@@ -576,6 +599,15 @@ gboolean nsgtk_window_url_keypress_event(GtkWidget *widget,
return TRUE;
}
+gboolean nsgtk_window_url_changed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data)
+{
+ struct gui_window *g = data;
+ const char *prefix;
+ prefix = gtk_entry_get_text(GTK_ENTRY(widget));
+ nsgtk_completion_update(prefix);
+}
+
gboolean nsgtk_window_keypress_event(GtkWidget *widget,
GdkEventKey *event,
gpointer data)