[gnome-builder] devhelp-view: add split



commit 6314a3d6e57162939157c6836645cfd93c0dbb6f
Author: Sebastien Lafargue <slafargue gnome org>
Date:   Tue Mar 24 21:18:27 2015 +0100

    devhelp-view: add split

 data/ui/gb-devhelp-view.ui    |   15 +++++++-
 src/devhelp/gb-devhelp-view.c |   77 +++++++++++++++++++++++++++++++++++++++--
 2 files changed, 87 insertions(+), 5 deletions(-)
---
diff --git a/data/ui/gb-devhelp-view.ui b/data/ui/gb-devhelp-view.ui
index f5f2f1e..837a950 100644
--- a/data/ui/gb-devhelp-view.ui
+++ b/data/ui/gb-devhelp-view.ui
@@ -11,9 +11,20 @@
       </object>
     </child>
     <child>
-      <object class="WebKitWebView" id="web_view">
-        <property name="visible">true</property>
+      <object class="GtkPaned" id="paned">
         <property name="expand">true</property>
+        <property name="orientation">vertical</property>
+        <property name="visible">true</property>
+        <child>
+          <object class="WebKitWebView" id="web_view1">
+            <property name="visible">true</property>
+            <property name="expand">true</property>
+          </object>
+          <packing>
+          <property name="resize">true</property>
+          <property name="shrink">false</property>
+          </packing>
+        </child>
       </object>
     </child>
   </template>
diff --git a/src/devhelp/gb-devhelp-view.c b/src/devhelp/gb-devhelp-view.c
index 0cf3ca9..371dd40 100644
--- a/src/devhelp/gb-devhelp-view.c
+++ b/src/devhelp/gb-devhelp-view.c
@@ -30,7 +30,10 @@ struct _GbDevhelpViewPrivate
   GbDevhelpDocument *document;
 
   /* References owned by Gtk template */
-  WebKitWebView *web_view;
+  WebKitWebView     *web_view1;
+  WebKitWebView     *web_view2;
+
+  GtkPaned          *paned;
 };
 
 G_DEFINE_TYPE_WITH_PRIVATE (GbDevhelpView, gb_devhelp_view, GB_TYPE_VIEW)
@@ -71,7 +74,12 @@ gb_devhelp_view_notify_uri (GbDevhelpView     *view,
 
   uri = gb_devhelp_document_get_uri (document);
   if (uri)
-    webkit_web_view_load_uri (view->priv->web_view, uri);
+    {
+      webkit_web_view_load_uri (view->priv->web_view1, uri);
+
+      if (view->priv->web_view2 != NULL)
+        webkit_web_view_load_uri (view->priv->web_view2, uri);
+    }
 }
 
 static void
@@ -109,6 +117,66 @@ gb_devhelp_view_set_document (GbDevhelpView     *view,
     }
 }
 
+static GbView *
+gb_devhelp_view_create_split (GbView *view)
+{
+  GbDevhelpView *self = (GbDevhelpView *)view;
+  GbView *ret;
+
+  g_assert (GB_IS_DEVHELP_VIEW (self));
+
+  ret = g_object_new (GB_TYPE_DEVHELP_VIEW,
+                      "document", gb_devhelp_view_get_document (view),
+                      "visible", TRUE,
+                      NULL);
+
+  return ret;
+}
+
+static void
+gb_devhelp_view_set_split_view (GbView   *view,
+                                gboolean  split_view)
+{
+  GbDevhelpView *self = (GbDevhelpView *)view;
+  GbDevhelpViewPrivate *priv;
+
+  g_assert (GB_IS_DEVHELP_VIEW (self));
+
+  g_return_if_fail (GB_IS_DEVHELP_VIEW (view));
+
+  priv = self->priv;
+
+  if (split_view && (priv->web_view2 != NULL))
+    return;
+
+  if (!split_view && (priv->web_view2 == NULL))
+    return;
+
+  if (split_view)
+    {
+      priv->web_view2 = g_object_new (WEBKIT_TYPE_WEB_VIEW,
+                                      "visible", TRUE,
+                                      NULL);
+      gtk_container_add_with_properties (GTK_CONTAINER (priv->paned), GTK_WIDGET (priv->web_view2),
+                                         "shrink", FALSE,
+                                         "resize", TRUE,
+                                         NULL);
+      gtk_widget_grab_focus (GTK_WIDGET (priv->web_view2));
+
+      gb_devhelp_view_notify_uri (self,
+                                  NULL,
+                                  GB_DEVHELP_DOCUMENT (gb_devhelp_view_get_document (view)));
+    }
+  else
+    {
+      GtkWidget *copy = GTK_WIDGET (priv->web_view2);
+
+      priv->web_view2 = NULL;
+      gtk_container_remove (GTK_CONTAINER (priv->paned), copy);
+      gtk_widget_grab_focus (GTK_WIDGET (priv->web_view1));
+    }
+}
+
 static void
 gb_devhelp_view_finalize (GObject *object)
 {
@@ -168,6 +236,8 @@ gb_devhelp_view_class_init (GbDevhelpViewClass *klass)
   object_class->set_property = gb_devhelp_view_set_property;
 
   view_class->get_document = gb_devhelp_view_get_document;
+  view_class->create_split = gb_devhelp_view_create_split;
+  view_class->set_split_view =  gb_devhelp_view_set_split_view;
 
   gParamSpecs [PROP_DOCUMENT] =
     g_param_spec_object ("document",
@@ -178,7 +248,8 @@ gb_devhelp_view_class_init (GbDevhelpViewClass *klass)
   g_object_class_install_property (object_class, PROP_DOCUMENT, gParamSpecs [PROP_DOCUMENT]);
 
   GB_WIDGET_CLASS_TEMPLATE (klass, "gb-devhelp-view.ui");
-  GB_WIDGET_CLASS_BIND_PRIVATE (klass, GbDevhelpView, web_view);
+  GB_WIDGET_CLASS_BIND_PRIVATE (klass, GbDevhelpView, web_view1);
+  GB_WIDGET_CLASS_BIND_PRIVATE (klass, GbDevhelpView, paned);
 
   g_type_ensure (WEBKIT_TYPE_WEB_VIEW);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]