1 #include <webkit2/webkit2.h>
7 key_common(GtkWidget *widget, GdkEvent *event, gpointer data)
9 WebKitPrintOperation *operation;
11 struct Client *c = (struct Client *)data;
14 if (event->type == GDK_KEY_PRESS) {
15 guint mask = gtk_accelerator_get_default_mod_mask();
16 int key = ((GdkEventKey *)event)->keyval;
17 if ((((GdkEventKey *)event)->state & mask) ==
19 const char *uri = webkit_web_view_get_uri(
20 WEBKIT_WEB_VIEW(c->web_view));
23 downloadmanager_show();
26 webkit_web_view_go_back(
27 WEBKIT_WEB_VIEW(c->web_view));
30 webkit_web_view_go_forward(
31 WEBKIT_WEB_VIEW(c->web_view));
34 gtk_widget_grab_focus(c->location);
37 operation = webkit_print_operation_new(
38 WEBKIT_WEB_VIEW(c->web_view));
40 gtk_widget_get_toplevel(mw.win);
41 webkit_print_operation_run_dialog(
42 operation, GTK_WINDOW(toplevel));
46 gtk_widget_grab_focus(c->web_view);
49 GTK_ENTRY(c->location), uri);
50 webkit_web_view_run_javascript(
51 WEBKIT_WEB_VIEW(c->web_view),
52 "window.getSelection()"
54 "document.activeElement.blur();",
56 gtk_widget_hide(c->isearch_box);
57 gtk_editable_set_position(
58 GTK_EDITABLE(c->location), -1);
59 gtk_editable_set_position(
60 GTK_EDITABLE(c->wsearch), -1);
63 webkit_web_view_reload_bypass_cache(
64 WEBKIT_WEB_VIEW(c->web_view));
67 for (int i = 0; i <= cfg_scroll_lines - 1;
69 event->key.keyval = GDK_KEY_Down;
74 for (int i = 0; i <= cfg_scroll_lines - 1;
76 event->key.keyval = GDK_KEY_Up;
84 client_destroy(NULL, c);
106 gtk_notebook_set_current_page(
107 GTK_NOTEBOOK(mw.notebook), 6);
116 gtk_notebook_prev_page(
117 GTK_NOTEBOOK(mw.notebook));
120 muted = webkit_web_view_get_is_muted(
121 WEBKIT_WEB_VIEW(c->web_view));
122 webkit_web_view_set_is_muted(
123 WEBKIT_WEB_VIEW(c->web_view), !muted);
124 changed_title(G_OBJECT(c->web_view), NULL, c);
128 client_new(cfg_home_uri, NULL);
130 case GDK_KEY_bracketleft:
134 gtk_notebook_next_page(
135 GTK_NOTEBOOK(mw.notebook));
138 gtk_widget_grab_focus(c->wsearch);
141 now = webkit_web_view_get_zoom_level(
142 WEBKIT_WEB_VIEW(c->web_view));
143 webkit_web_view_set_zoom_level(
144 WEBKIT_WEB_VIEW(c->web_view),
148 now = webkit_web_view_get_zoom_level(
149 WEBKIT_WEB_VIEW(c->web_view));
150 webkit_web_view_set_zoom_level(
151 WEBKIT_WEB_VIEW(c->web_view),
155 webkit_web_view_set_zoom_level(
156 WEBKIT_WEB_VIEW(c->web_view), 1);
159 } else if ((((GdkEventKey *)event)->state & mask) ==
160 (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) {
162 case GDK_KEY_ISO_Left_Tab:
163 gtk_notebook_prev_page(
164 GTK_NOTEBOOK(mw.notebook));
170 reorder_current_tab(1);
173 reorder_current_tab(2);
175 case GDK_KEY_numbersign:
176 reorder_current_tab(3);
179 reorder_current_tab(4);
181 case GDK_KEY_percent:
182 reorder_current_tab(5);
184 case GDK_KEY_asciicircum:
185 reorder_current_tab(6);
187 case GDK_KEY_ampersand:
188 reorder_current_tab(7);
190 case GDK_KEY_asterisk:
191 reorder_current_tab(8);
193 case GDK_KEY_parenleft:
194 reorder_current_tab(9);
203 change_tab(int idx, struct Client *c)
205 gtk_notebook_set_current_page(GTK_NOTEBOOK(mw.notebook), idx);
206 gtk_widget_grab_focus(GTK_WIDGET(c->web_view));
210 reorder_current_tab(int target)
212 gtk_notebook_reorder_child(
213 GTK_NOTEBOOK(mw.notebook),
214 gtk_notebook_get_nth_page(GTK_NOTEBOOK(mw.notebook),
215 gtk_notebook_get_current_page(
216 GTK_NOTEBOOK(mw.notebook))),
221 key_isearch(GtkWidget *widget, GdkEvent *event, gpointer data)
223 struct Client *c = (struct Client *)data;
224 if (key_common(widget, event, data)) return TRUE;
226 if (event->type == GDK_KEY_PRESS) {
227 int key = ((GdkEventKey *)event)->keyval;
230 (((GdkEventKey *)event)->state & GDK_SHIFT_MASK)
234 case GDK_KEY_KP_Enter:
238 isearch(c, direction);
242 gtk_widget_hide(c->isearch_box);
243 gtk_widget_grab_focus(c->web_view);
251 key_wsearch(GtkWidget *widget, GdkEvent *event, gpointer data)
253 struct Client *c = (struct Client *)data;
254 if (key_common(widget, event, data)) return TRUE;
256 if (event->type == GDK_KEY_PRESS) {
257 guint mask = gtk_accelerator_get_default_mod_mask();
258 gboolean shifted = ((((GdkEventKey *)event)->state & mask) ==
260 int key = ((GdkEventKey *)event)->keyval;
261 if ((GDK_KEY_KP_Enter == key) || (GDK_KEY_Return == key)) {
263 gtk_entry_get_text(GTK_ENTRY(c->wsearch));
264 int len = strlen(cfg_search_engine) + strlen(t);
265 gchar *f = malloc(len + 1);
268 snprintf(f, len + 1, "%s%s", cfg_search_engine, t);
272 webkit_web_view_load_uri(
273 WEBKIT_WEB_VIEW(c->web_view), f);
274 gtk_widget_grab_focus(c->web_view);
284 key_location(GtkWidget *widget, GdkEvent *event, gpointer data)
286 struct Client *c = (struct Client *)data;
288 if (key_common(widget, event, data)) return TRUE;
290 if (event->type == GDK_KEY_PRESS) {
291 guint mask = gtk_accelerator_get_default_mod_mask();
292 gboolean shifted = ((((GdkEventKey *)event)->state & mask) ==
294 int key = ((GdkEventKey *)event)->keyval;
296 case GDK_KEY_KP_Enter:
298 gtk_widget_grab_focus(c->web_view);
299 t = gtk_entry_get_text(GTK_ENTRY(c->location));
304 webkit_web_view_load_uri(
305 WEBKIT_WEB_VIEW(c->web_view),
306 ensure_uri_scheme(t));
310 t = webkit_web_view_get_uri(
311 WEBKIT_WEB_VIEW(c->web_view));
312 gtk_entry_set_text(GTK_ENTRY(c->location),
313 (t == NULL) ? "" : t);
320 key_tablabel(GtkWidget *widget, GdkEvent *event, gpointer data)
322 GdkScrollDirection direction;
323 if (event->type == GDK_BUTTON_RELEASE) {
324 switch (((GdkEventButton *)event)->button) {
326 client_destroy(NULL, data);
329 } else if (event->type == GDK_SCROLL) {
330 gdk_event_get_scroll_direction(event, &direction);
333 gtk_notebook_prev_page(GTK_NOTEBOOK(mw.notebook));
335 case GDK_SCROLL_DOWN:
336 gtk_notebook_next_page(GTK_NOTEBOOK(mw.notebook));
347 key_web_view(GtkWidget *widget, GdkEvent *event, gpointer data)
349 struct Client *c = (struct Client *)data;
352 if (key_common(c->web_view, event, data)) return TRUE;
354 if (event->type == GDK_KEY_PRESS) {
355 if (((GdkEventKey *)event)->keyval == GDK_KEY_Escape) {
356 webkit_web_view_stop_loading(
357 WEBKIT_WEB_VIEW(c->web_view));
358 gtk_entry_set_progress_fraction(GTK_ENTRY(c->location),
361 } else if (event->type == GDK_SCROLL) {
362 event->scroll.delta_y *= cfg_scroll_lines;
363 if (((GdkEventScroll *)event)->state & GDK_CONTROL_MASK) {
364 gdk_event_get_scroll_deltas(event, &dx, &dy);
365 z = webkit_web_view_get_zoom_level(
366 WEBKIT_WEB_VIEW(c->web_view));
369 webkit_web_view_set_zoom_level(
370 WEBKIT_WEB_VIEW(c->web_view), z);