]> git.armaanb.net Git - chorizo.git/blobdiff - shortcuts.c
draft 8
[chorizo.git] / shortcuts.c
index 382e4c0ccca37ee3c8d89df0f579219f6ef90713..e881cdcbbababa31a66954104838292ce5b1e0b6 100644 (file)
@@ -80,40 +80,33 @@ key_common(GtkWidget *widget, GdkEvent *event, gpointer data)
                                client_destroy(NULL, c);
                                return TRUE;
                        } else if (GDK_KEY_1 == key) {
-                               gtk_notebook_set_current_page(
-                                       GTK_NOTEBOOK(mw.notebook), 0);
+                               change_tab(0, c);
                                return TRUE;
                        } else if (GDK_KEY_2 == key) {
-                               gtk_notebook_set_current_page(
-                                       GTK_NOTEBOOK(mw.notebook), 1);
+                               change_tab(1, c);
                                return TRUE;
                        } else if (GDK_KEY_3 == key) {
-                               gtk_notebook_set_current_page(
-                                       GTK_NOTEBOOK(mw.notebook), 2);
+                               change_tab(2, c);
                                return TRUE;
                        } else if (GDK_KEY_4 == key) {
-                               gtk_notebook_set_current_page(
-                                       GTK_NOTEBOOK(mw.notebook), 3);
+                               change_tab(3, c);
                                return TRUE;
                        } else if (GDK_KEY_5 == key) {
-                               gtk_notebook_set_current_page(
-                                       GTK_NOTEBOOK(mw.notebook), 4);
+                               change_tab(4, c);
                                return TRUE;
                        } else if (GDK_KEY_6 == key) {
-                               gtk_notebook_set_current_page(
-                                       GTK_NOTEBOOK(mw.notebook), 5);
+                               change_tab(5, c);
                                return TRUE;
                        } else if (GDK_KEY_7 == key) {
+                               change_tab(6, c);
                                gtk_notebook_set_current_page(
                                        GTK_NOTEBOOK(mw.notebook), 6);
                                return TRUE;
                        } else if (GDK_KEY_8 == key) {
-                               gtk_notebook_set_current_page(
-                                       GTK_NOTEBOOK(mw.notebook), 7);
+                               change_tab(7, c);
                                return TRUE;
                        } else if (GDK_KEY_9 == key) {
-                               gtk_notebook_set_current_page(
-                                       GTK_NOTEBOOK(mw.notebook), 8);
+                               change_tab(8, c);
                                return TRUE;
                        } else if (GDK_KEY_u == key) {
                                gtk_notebook_prev_page(
@@ -201,6 +194,13 @@ key_common(GtkWidget *widget, GdkEvent *event, gpointer data)
        return FALSE;
 }
 
+void
+change_tab(int idx, struct Client *c)
+{
+       gtk_notebook_set_current_page(GTK_NOTEBOOK(mw.notebook), idx);
+       gtk_widget_grab_focus(GTK_WIDGET(c->web_view));
+}
+
 void
 reorder_current_tab(int target)
 {
@@ -245,6 +245,9 @@ key_wsearch(GtkWidget *widget, GdkEvent *event, gpointer data)
        if (key_common(widget, event, data)) return TRUE;
 
        if (event->type == GDK_KEY_PRESS) {
+               guint mask = gtk_accelerator_get_default_mod_mask();
+               gboolean shifted = ((((GdkEventKey *)event)->state & mask) ==
+                                   GDK_SHIFT_MASK);
                int key = ((GdkEventKey *)event)->keyval;
                if ((GDK_KEY_KP_Enter == key) || (GDK_KEY_Return == key)) {
                        const gchar *t =
@@ -254,10 +257,14 @@ key_wsearch(GtkWidget *widget, GdkEvent *event, gpointer data)
                        if (!f) allocfail();
 
                        snprintf(f, len + 1, "%s%s", cfg_search_engine, t);
-                       webkit_web_view_load_uri(WEBKIT_WEB_VIEW(c->web_view),
-                                                f);
+                       if (shifted) {
+                               client_new(f, NULL);
+                       } else {
+                               webkit_web_view_load_uri(
+                                       WEBKIT_WEB_VIEW(c->web_view), f);
+                               gtk_widget_grab_focus(c->web_view);
+                       }
                        g_free(f);
-                       gtk_widget_grab_focus(c->web_view);
                        return TRUE;
                }
        }
@@ -272,12 +279,22 @@ key_location(GtkWidget *widget, GdkEvent *event, gpointer data)
        if (key_common(widget, event, data)) return TRUE;
 
        if (event->type == GDK_KEY_PRESS) {
+               guint mask = gtk_accelerator_get_default_mod_mask();
+               gboolean shifted = ((((GdkEventKey *)event)->state & mask) ==
+                                   GDK_SHIFT_MASK);
                int key = ((GdkEventKey *)event)->keyval;
+
                if ((GDK_KEY_KP_Enter == key) || (GDK_KEY_Return == key)) {
                        gtk_widget_grab_focus(c->web_view);
                        t = gtk_entry_get_text(GTK_ENTRY(c->location));
-                       webkit_web_view_load_uri(WEBKIT_WEB_VIEW(c->web_view),
-                                                ensure_uri_scheme(t));
+                       if (shifted) {
+                               switch_tab = TRUE;
+                               client_new(t, NULL);
+                       } else {
+                               webkit_web_view_load_uri(
+                                       WEBKIT_WEB_VIEW(c->web_view),
+                                       ensure_uri_scheme(t));
+                       }
                        return TRUE;
                } else if (GDK_KEY_Escape == key) {
                        t = webkit_web_view_get_uri(