]> www.fi.muni.cz Git - evince.git/commitdiff
Disconnect the widget event signal on finalize. Some code cleanups.
authorMarco Pesenti Gritti <marco@gnome.org>
Mon, 28 Feb 2005 21:53:42 +0000 (21:53 +0000)
committerMarco Pesenti Gritti <marco@src.gnome.org>
Mon, 28 Feb 2005 21:53:42 +0000 (21:53 +0000)
2005-02-28  Marco Pesenti Gritti  <marco@gnome.org>

        * ps/ps-document.c: (ps_document_widget_event),
        (ps_document_set_target), (ps_document_finalize),
        (ps_document_get_page):

        Disconnect the widget event signal on finalize.
        Some code cleanups.

ChangeLog
ps/ps-document.c

index d15f4a97c074097d7bfc0c82c5926c4d19116db8..5e27e074d7f928b3f7fb70767cae49c975d9f99e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2005-02-28  Marco Pesenti Gritti  <marco@gnome.org>
+
+       * ps/ps-document.c: (ps_document_widget_event),
+       (ps_document_set_target), (ps_document_finalize),
+       (ps_document_get_page):
+
+       Disconnect the widget event signal on finalize.
+       Some code cleanups.
+
 2005-02-28  Marco Pesenti Gritti  <marco@gnome.org>
 
        * ps/ps-document.c: (set_up_page):
index c0eb794f198a8d3a56ed77e44d423514393c6111..c1a94813fcf9e217daaa6e500f2aeb673d804caa 100644 (file)
@@ -216,6 +216,7 @@ static gint start_interpreter(PSDocument * gs);
 gboolean computeSize(void);
 static gboolean ps_document_set_page_size(PSDocument * gs, gint new_pagesize, gint pageid);
 static void ps_document_document_iface_init (EvDocumentIface *iface);
+static gboolean ps_document_goto_page(PSDocument * gs, gint page);
 
 static GObjectClass *parent_class = NULL;
 
@@ -388,6 +389,63 @@ ps_document_cleanup(PSDocument * gs)
   set_up_page(gs);
 }
 
+static gboolean
+ps_document_widget_event (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+       PSDocument *gs = (PSDocument *) data;
+
+       if(event->type != GDK_CLIENT_EVENT)
+               return FALSE;
+
+       gs->message_window = event->client.data.l[0];
+
+       if (event->client.message_type == gs_class->page_atom) {
+               LOG ("GS rendered the document");
+               gs->busy = FALSE;
+
+               if (gs->scaling) {
+                       ev_document_scale_changed (EV_DOCUMENT (gs));
+                       gs->scaling = FALSE;
+               } else {
+                       ev_document_page_changed (EV_DOCUMENT (gs));
+               }
+       }
+
+       return TRUE;
+}
+
+static void
+ps_document_set_target (EvDocument  *document,
+                       GdkDrawable *target)
+{
+       PSDocument *gs = PS_DOCUMENT (document);
+       GtkWidget *widget;
+       gpointer data;
+
+       if (gs->pstarget) {
+               gdk_window_get_user_data (gs->pstarget, &data);
+               g_return_if_fail (GTK_IS_WIDGET (data));
+
+               widget = GTK_WIDGET (data);
+               g_signal_handlers_disconnect_by_func
+                       (widget, ps_document_widget_event, document);
+       }
+
+       gs->pstarget = target;
+
+       if (gs->pstarget) {
+               gdk_window_get_user_data (gs->pstarget, &data);
+               g_return_if_fail (GTK_IS_WIDGET (data));
+
+               widget = GTK_WIDGET (data);
+               g_signal_connect (widget, "event",
+                                 G_CALLBACK (ps_document_widget_event),
+                                 document);
+       }
+
+       ps_document_goto_page (gs, gs->current_page);
+}
+
 static void
 ps_document_finalize (GObject * object)
 {
@@ -403,6 +461,8 @@ ps_document_finalize (GObject * object)
        ps_document_cleanup (gs);
        stop_interpreter (gs);
 
+       ps_document_set_target (EV_DOCUMENT (object), NULL);
+
        if(gs->input_buffer) {
                g_free(gs->input_buffer);
                gs->input_buffer = NULL;
@@ -1715,54 +1775,6 @@ ps_document_get_page (EvDocument  *document)
        return ps->current_page + 1;
 }
 
-static gboolean
-ps_document_widget_event (GtkWidget *widget, GdkEvent *event, gpointer data)
-{
-       PSDocument *gs = (PSDocument *) data;
-
-       if(event->type != GDK_CLIENT_EVENT)
-               return FALSE;
-
-       gs->message_window = event->client.data.l[0];
-
-       if (event->client.message_type == gs_class->page_atom) {
-               LOG ("GS rendered the document");
-               gs->busy = FALSE;
-
-               if (gs->scaling) {
-                       ev_document_scale_changed (EV_DOCUMENT (gs));
-                       gs->scaling = FALSE;
-               } else {
-                       ev_document_page_changed (EV_DOCUMENT (gs));
-               }
-       }
-
-       return TRUE;
-}
-
-static void
-ps_document_set_target (EvDocument  *document,
-                       GdkDrawable *target)
-{
-       PSDocument *gs = PS_DOCUMENT (document);
-       GtkWidget *widget;
-       gpointer data;
-
-       gs->pstarget = target;
-
-       if (gs->pstarget) {
-               gdk_window_get_user_data (gs->pstarget, &data);
-               g_return_if_fail (GTK_IS_WIDGET (data));
-
-               widget = GTK_WIDGET (data);
-               g_signal_connect (widget, "event",
-                                 G_CALLBACK (ps_document_widget_event),
-                                 document);
-       }
-
-       ps_document_goto_page (gs, gs->current_page);
-}
-
 static void
 ps_document_set_scale (EvDocument  *document,
                        double       scale)