summaryrefslogtreecommitdiff
path: root/gtk/gtk_window.c
diff options
context:
space:
mode:
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)