]> spindle.queued.net Git - midori/commitdiff
Fix Back and Forward sensitivity
authorChristian Dywan <christian@twotoasts.de>
Sun, 28 Sep 2008 09:00:31 +0000 (11:00 +0200)
committerChristian Dywan <christian@twotoasts.de>
Sun, 28 Sep 2008 09:00:31 +0000 (11:00 +0200)
midori/midori-view.c

index 14986c9b706e27d6d64df5441d1142c4dc41d55a..aa17c8dd9bcdf1b0c56093faac8152f03f2e3c59 100644 (file)
@@ -57,6 +57,8 @@ struct _MidoriView
     gboolean can_copy_clipboard;
     gboolean can_paste_clipboard;
     gfloat zoom_level;
+    gboolean can_go_back;
+    gboolean can_go_forward;
     MidoriWebSettings* settings;
     GtkWidget* web_view;
     gboolean window_object_cleared;
@@ -564,7 +566,8 @@ static void
 midori_view_notify_load_status_cb (MidoriView* view,
                                    GParamSpec  pspec)
 {
-    g_object_get (G_OBJECT (view), "load-status", &view->load_status, NULL);
+    view->can_go_back = midori_view_can_go_back (view);
+    view->can_go_forward = midori_view_can_go_forward (view);
 
     if (midori_view_is_socket (view))
     {
@@ -574,7 +577,11 @@ midori_view_notify_load_status_cb (MidoriView* view,
     }
 
     if (midori_view_is_plug (view))
+    {
         send_command (view, "load-status", int_to_str (view->load_status));
+        send_command (view, "can-go-back", int_to_str (view->can_go_back));
+        send_command (view, "can-go-forward", int_to_str (view->can_go_forward));
+    }
 
     if (!midori_view_is_plug (view))
         if (view->load_status == MIDORI_LOAD_COMMITTED)
@@ -585,8 +592,6 @@ static void
 midori_view_notify_progress_cb (MidoriView* view,
                                 GParamSpec  pspec)
 {
-    g_object_get (G_OBJECT (view), "progress", &view->progress, NULL);
-
     if (midori_view_is_plug (view))
         send_command (view, "progress", float_to_str (view->progress));
 }
@@ -675,6 +680,14 @@ receive_status (MidoriView*  view,
         view->zoom_level = atof (&command[11]);
         g_object_notify (G_OBJECT (view), "zoom-level");
     }
+    else if (!strncmp (command, "can-go-back ", 12))
+    {
+        view->can_go_back = atoi (&command[12]);
+    }
+    else if (!strncmp (command, "can-go-forward ", 15))
+    {
+        view->can_go_forward = atoi (&command[15]);
+    }
     else if (!strncmp (command, "statusbar-text ", 15))
     {
         g_object_set (view, "statusbar-text", &command[15], NULL);
@@ -2347,8 +2360,6 @@ midori_view_can_##what (MidoriView* view) \
 can_do (zoom_in)
 can_do (zoom_out)
 can_do (reload)
-can_do (go_back)
-can_do (go_forward)
 can_do (print)
 #if HAVE_GIO
     can_do (view_source)
@@ -2398,6 +2409,25 @@ midori_view_stop_loading (MidoriView* view)
         webkit_web_view_stop_loading (WEBKIT_WEB_VIEW (view->web_view));
 }
 
+/**
+ * midori_view_can_go_back
+ * @view: a #MidoriView
+ *
+ * Determines whether the view can go back.
+ **/
+gboolean
+midori_view_can_go_back (MidoriView* view)
+{
+    g_return_val_if_fail (MIDORI_IS_VIEW (view), FALSE);
+
+    if (midori_view_is_socket (view))
+        return view->can_go_back;
+    else if (view->web_view)
+        return webkit_web_view_can_go_back (WEBKIT_WEB_VIEW (view->web_view));
+    else
+        return FALSE;
+}
+
 /**
  * midori_view_go_back
  * @view: a #MidoriView
@@ -2415,6 +2445,25 @@ midori_view_go_back (MidoriView* view)
         webkit_web_view_go_back (WEBKIT_WEB_VIEW (view->web_view));
 }
 
+/**
+ * midori_view_can_go_forward
+ * @view: a #MidoriView
+ *
+ * Determines whether the view can go forward.
+ **/
+gboolean
+midori_view_can_go_forward (MidoriView* view)
+{
+    g_return_val_if_fail (MIDORI_IS_VIEW (view), FALSE);
+
+    if (midori_view_is_socket (view))
+        return view->can_go_forward;
+    else if (view->web_view)
+        return webkit_web_view_can_go_forward (WEBKIT_WEB_VIEW (view->web_view));
+    else
+        return FALSE;
+}
+
 /**
  * midori_view_go_forward
  * @view: a #MidoriView