>From a first look at it, this leaks all old GtkAlignment instances on every 
>page_widget_set_mode call.

Whoops, you're right. I misunderstood the purpose of gtk_widget_reparent.

Here's the patch v2.
diff --git a/zathura.c b/zathura.c
index 75aabc5..49a78b0 100644
--- a/zathura.c
+++ b/zathura.c
@@ -717,6 +717,7 @@ document_open(zathura_t* zathura, const char* path, const 
char* password,
       goto error_free;
     }
 
+    g_object_ref(page_widget);
     zathura->pages[page_id] = page_widget;
 
     g_signal_connect(G_OBJECT(page_widget), "text-selected",
@@ -951,7 +952,6 @@ document_close(zathura_t* zathura, bool keep_monitor)
   gtk_container_foreach(GTK_CONTAINER(zathura->ui.page_widget), 
remove_page_from_table, (gpointer) 1);
   for (unsigned int i = 0; i < 
zathura_document_get_number_of_pages(zathura->document); i++) {
     g_object_unref(zathura->pages[i]);
-    g_object_unref(zathura->pages[i]); // FIXME
   }
   free(zathura->pages);
   zathura->pages = NULL;
@@ -1068,9 +1068,18 @@ page_widget_set_mode(zathura_t* zathura, unsigned int 
page_padding,
     int x = (i + first_page_column - 1) % pages_per_row;
     int y = (i + first_page_column - 1) / pages_per_row;
 
-    zathura_page_t* page   = zathura_document_get_page(zathura->document, i);
-    GtkWidget* page_widget = zathura_page_get_widget(zathura, page);
-    gtk_grid_attach(GTK_GRID(zathura->ui.page_widget), page_widget, x, y, 1, 
1);
+    GtkWidget* page_widget = zathura->pages[i];
+
+    GtkWidget* align = gtk_alignment_new(0.5, 0.5, 0, 0);
+    GtkWidget* parent = gtk_widget_get_parent(page_widget);
+    if (parent)
+    {
+      gtk_container_remove(GTK_CONTAINER(parent), page_widget);
+      g_object_unref(parent);
+    }
+
+    gtk_container_add(GTK_CONTAINER(align), page_widget);
+    gtk_grid_attach(GTK_GRID(zathura->ui.page_widget), align, x, y, 1, 1);
   }
 
   gtk_widget_show_all(zathura->ui.page_widget);
_______________________________________________
zathura mailing list
zathura@lists.pwmt.org
http://lists.pwmt.org/mailman/listinfo/zathura

Reply via email to