Patch contributed by Kris Rietveld (kris@imendio.com)
authorAlejandro G. Castro <alex@igalia.com>
Mon, 8 Sep 2008 10:02:12 +0000 (10:02 +0000)
committerAlejandro G. Castro <alex@igalia.com>
Mon, 8 Sep 2008 10:02:12 +0000 (10:02 +0000)
* src/hildon-pannable-area.c,
(hildon_pannable_area_get_topmost): replaced the get_geometry with
get_size and get_position, this saves an X server roundtrip.

ChangeLog
examples/hildon-pannable-area-touch-list-example.c
src/hildon-pannable-area.c

index 5a6cf08..ac3c9bb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-09-02  Alejandro G. Castro         <alex@igalia.com>
+
+       Patch contributed by Kris Rietveld (kris@imendio.com)
+
+       * src/hildon-pannable-area.c,
+       (hildon_pannable_area_get_topmost): replaced the get_geometry with
+       get_size and get_position, this saves an X server roundtrip.
+
 2008-09-05  Alberto Garcia  <agarcia@igalia.com>
 
        * doc/hildon-docs.sgml
index 901cab1..b016281 100644 (file)
@@ -34,6 +34,24 @@ enum
   EDIT_MODE     = 1 << 2
 };
 
+static gboolean add_item(gpointer user_data)
+{
+    GtkListStore *store = GTK_LIST_STORE(user_data);
+    static gint index = 0;    
+    gchar *str = NULL;
+
+    str = g_strdup_printf ("\nRow %d\n", index);
+    gtk_list_store_insert_with_values (store, NULL, index, 0, str, -1);
+    g_free (str);
+
+    index++;
+    if(index < 800)
+    {
+        return TRUE;
+    }
+    return FALSE;
+}
+
 
 static GtkTreeModel *
 create_model (void)
@@ -43,14 +61,7 @@ create_model (void)
 
   store = gtk_list_store_new (1, G_TYPE_STRING);
 
-  for (i = 0; i < 50; i++)
-    {
-      gchar *str;
-
-      str = g_strdup_printf ("\nRow %d\n", i);
-      gtk_list_store_insert_with_values (store, NULL, i, 0, str, -1);
-      g_free (str);
-    }
+  g_timeout_add(20, add_item, store);
 
   return GTK_TREE_MODEL (store);
 }
@@ -108,6 +119,8 @@ create_tree_view (HildonUIMode  mode,
                 "weight", PANGO_WEIGHT_BOLD,
                 NULL);
 
+  gtk_cell_renderer_set_fixed_size(renderer, 840, 70);
+
   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
                                                0, "Column 0",
                                                renderer,
@@ -122,6 +135,7 @@ create_tree_view_window (GtkWidget *button,
                          gpointer   user_data)
 {
   const char *name;
+  GtkWidget *vbox;
   GtkWidget *window;
   GtkWidget *sw;
   GtkWidget *tree_view;
@@ -132,9 +146,18 @@ create_tree_view_window (GtkWidget *button,
                     G_CALLBACK (gtk_widget_destroy), window);
   gtk_container_set_border_width (GTK_CONTAINER (window), 6);
 
-  sw = hildon_pannable_area_new ();
+  vbox = gtk_vbox_new(FALSE, 0);
+
+  sw = gtk_scrolled_window_new(NULL, NULL);
+      //hildon_pannable_area_new ();
   gtk_container_add (GTK_CONTAINER (window), sw);
 
+  /*hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(sw),
+                                         vbox);*/
+
+  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw),
+                                        vbox);
+  
   if ((GPOINTER_TO_INT (user_data) & NORMAL_MODE) == NORMAL_MODE)
     {
       mode = HILDON_UI_MODE_NORMAL;
@@ -157,8 +180,8 @@ create_tree_view_window (GtkWidget *button,
   g_signal_connect (tree_view, "row-insensitive",
                     G_CALLBACK (row_insensitive_callback), NULL);
 
-  gtk_widget_set_size_request (tree_view, 480, 800);
-  gtk_container_add (GTK_CONTAINER (sw), tree_view);
+  gtk_widget_set_size_request (sw, 480, 800);
+  gtk_box_pack_start(GTK_BOX(vbox), tree_view, TRUE, TRUE, 0);
 
   gtk_widget_show_all (window);
 }
@@ -175,10 +198,11 @@ main (int argc, char **argv)
 
   gtk_init (&argc, &argv);
 
+  /*
   gtk_rc_parse_string ("style \"fremantle-widget\" {\n"
                        "  GtkWidget::hildon-mode = 1\n"
                        "} widget \"*.fremantle-widget\" style \"fremantle-widget\"");
-
+*/
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   g_signal_connect (window, "delete-event",
                     G_CALLBACK (gtk_main_quit), NULL);
index 14453fd..35b900b 100644 (file)
@@ -1237,7 +1237,8 @@ hildon_pannable_area_get_topmost (GdkWindow * window,
       GdkWindow *child = (GdkWindow *) c->data;
       gint wx, wy;
 
-      gdk_window_get_geometry (child, &wx, &wy, &width, &height, NULL);
+      gdk_drawable_get_size (GDK_DRAWABLE (child), &width, &height);
+      gdk_window_get_position (child, &wx, &wy);
 
       if (((x >= wx) && (x < (wx + width)) && (y >= wy)
            && (y < (wy + height))) && (gdk_window_is_visible (child))) {