metacity r4133 - in trunk: . src/core



Author: tthurman
Date: Wed Feb 11 05:26:58 2009
New Revision: 4133
URL: http://svn.gnome.org/viewvc/metacity?rev=4133&view=rev

Log:
        Session must be saved before display close, and display
        shouldn't close during shutdown if it's already closed.
        Can't believe we don't have a bug about this already...
	* src/core/display-private.h:
	* src/core/display.c:
	* src/core/main.c:
	* src/core/session.c:



Modified:
   trunk/ChangeLog
   trunk/src/core/display-private.h
   trunk/src/core/display.c
   trunk/src/core/main.c
   trunk/src/core/session.c

Modified: trunk/src/core/display-private.h
==============================================================================
--- trunk/src/core/display-private.h	(original)
+++ trunk/src/core/display-private.h	Wed Feb 11 05:26:58 2009
@@ -329,7 +329,7 @@
 void          meta_display_grab                (MetaDisplay *display);
 void          meta_display_ungrab              (MetaDisplay *display);
 
-void          meta_display_unmanage_screen     (MetaDisplay *display,
+void          meta_display_unmanage_screen     (MetaDisplay **display,
                                                 MetaScreen  *screen,
                                                 guint32      timestamp);
 

Modified: trunk/src/core/display.c
==============================================================================
--- trunk/src/core/display.c	(original)
+++ trunk/src/core/display.c	Wed Feb 11 05:26:58 2009
@@ -4762,10 +4762,13 @@
       meta_verbose ("Got selection clear for screen %d on display %s\n",
                     screen->number, display->name);
       
-      meta_display_unmanage_screen (display, 
+      meta_display_unmanage_screen (&display, 
                                     screen,
                                     event->xselectionclear.time);
 
+      if (!display)
+        the_display = NULL;
+
       /* display and screen may both be invalid memory... */
       
       return;
@@ -4787,10 +4790,12 @@
 }
 
 void
-meta_display_unmanage_screen (MetaDisplay *display,
+meta_display_unmanage_screen (MetaDisplay **displayp,
                               MetaScreen  *screen,
                               guint32      timestamp)
 {
+  MetaDisplay *display = *displayp;
+
   meta_verbose ("Unmanaging screen %d on display %s\n",
                 screen->number, display->name);
   
@@ -4800,7 +4805,10 @@
   display->screens = g_slist_remove (display->screens, screen);
 
   if (display->screens == NULL)
-    meta_display_close (display, timestamp);
+    {
+      meta_display_close (display, timestamp);
+      *displayp = NULL;
+    }
 }
 
 void

Modified: trunk/src/core/main.c
==============================================================================
--- trunk/src/core/main.c	(original)
+++ trunk/src/core/main.c	Wed Feb 11 05:26:58 2009
@@ -353,10 +353,13 @@
 static void
 meta_finalize (void)
 {
-  meta_display_close (meta_get_display (),
-                      CurrentTime); /* I doubt correct timestamps matter here */
+  MetaDisplay *display = meta_get_display();
 
   meta_session_shutdown ();
+
+  if (display)
+    meta_display_close (display,
+                        CurrentTime); /* I doubt correct timestamps matter here */
 }
 
 static void

Modified: trunk/src/core/session.c
==============================================================================
--- trunk/src/core/session.c	(original)
+++ trunk/src/core/session.c	Wed Feb 11 05:26:58 2009
@@ -376,6 +376,14 @@
   SmProp *props[1];
   char hint = SmRestartIfRunning;
 
+  if (!meta_get_display ())
+    {
+      meta_verbose ("Cannot close session because there is no display");
+      return;
+    }
+
+  warn_about_lame_clients_and_finish_interact (FALSE);
+
   if (session_connection == NULL)
     return;
   



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