]> spindle.queued.net Git - midori/commitdiff
Alt + Enter in the location should issue a new tab
authorDale Whittaker <dayul@users.sf.net>
Sun, 31 Aug 2008 01:21:29 +0000 (03:21 +0200)
committerChristian Dywan <christian@twotoasts.de>
Sun, 31 Aug 2008 01:21:29 +0000 (03:21 +0200)
midori/midori-browser.c
midori/midori-locationaction.c

index 78aff86f64b71615f0a2ac1fdfab2b864fe2416a..7c761bc2b7176d5cf87a73396ad48bda4fb9ebe9 100644 (file)
@@ -2030,10 +2030,12 @@ _action_location_reset_uri (GtkAction*     action,
 static void
 _action_location_submit_uri (GtkAction*     action,
                              const gchar*   uri,
+                             gboolean       new_tab,
                              MidoriBrowser* browser)
 {
     gchar* location_entry_search;
     gchar* new_uri;
+    gint n;
 
     g_object_get (browser->settings, "location-entry-search",
                   &location_entry_search, NULL);
@@ -2043,7 +2045,13 @@ _action_location_submit_uri (GtkAction*     action,
     else if (!new_uri)
         new_uri = g_strdup (location_entry_search);
     g_free (location_entry_search);
-    _midori_browser_open_uri (browser, new_uri);
+    if (new_tab)
+    {
+        n = midori_browser_add_uri (browser, new_uri);
+        midori_browser_set_current_page (browser, n);
+    }
+    else
+        _midori_browser_open_uri (browser, new_uri);
     g_free (new_uri);
     gtk_widget_grab_focus (midori_browser_get_current_tab (browser));
 }
index 503740b8a425dee47d30f012f00b2d61aa576916..6a45992e6212d384297daa32280348b04141e922 100644 (file)
@@ -76,6 +76,42 @@ static void
 midori_location_action_disconnect_proxy (GtkAction* action,
                                          GtkWidget* proxy);
 
+static void
+midori_cclosure_marshal_VOID__STRING_BOOLEAN (GClosure*     closure,
+                                              GValue*       return_value,
+                                              guint         n_param_values,
+                                              const GValue* param_values,
+                                              gpointer      invocation_hint,
+                                              gpointer      marshal_data)
+{
+    typedef void(*GMarshalFunc_VOID__STRING_BOOLEAN) (gpointer      data1,
+                                                      const gchar*  arg_1,
+                                                      gboolean      arg_2,
+                                                      gpointer      data2);
+    register GMarshalFunc_VOID__STRING_BOOLEAN callback;
+    register GCClosure* cc = (GCClosure*) closure;
+    register gpointer data1, data2;
+
+    g_return_if_fail (n_param_values == 3);
+
+    if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+        data1 = closure->data;
+        data2 = g_value_peek_pointer (param_values + 0);
+    }
+    else
+    {
+        data1 = g_value_peek_pointer (param_values + 0);
+        data2 = closure->data;
+    }
+    callback = (GMarshalFunc_VOID__STRING_BOOLEAN) (marshal_data
+        ? marshal_data : cc->callback);
+    callback (data1,
+              g_value_get_string (param_values + 1),
+              g_value_get_boolean (param_values + 2),
+              data2);
+}
+
 static void
 midori_location_action_class_init (MidoriLocationActionClass* class)
 {
@@ -126,9 +162,10 @@ midori_location_action_class_init (MidoriLocationActionClass* class)
                                         0,
                                         0,
                                         NULL,
-                                        g_cclosure_marshal_VOID__STRING,
-                                        G_TYPE_NONE, 1,
-                                        G_TYPE_STRING);
+                                        midori_cclosure_marshal_VOID__STRING_BOOLEAN,
+                                        G_TYPE_NONE, 2,
+                                        G_TYPE_STRING,
+                                        G_TYPE_BOOLEAN);
 
     gobject_class = G_OBJECT_CLASS (class);
     gobject_class->finalize = midori_location_action_finalize;
@@ -285,7 +322,8 @@ midori_location_action_key_press_event_cb (GtkWidget*   widget,
     {
         if ((uri = gtk_entry_get_text (GTK_ENTRY (widget))))
         {
-            g_signal_emit (action, signals[SUBMIT_URI], 0, uri);
+            g_signal_emit (action, signals[SUBMIT_URI], 0, uri,
+                (event->state & GDK_MOD1_MASK) ? TRUE : FALSE);
             return TRUE;
         }
     }