emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r109794: * nsmenu.m (initWithContentR


From: Jan D.
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r109794: * nsmenu.m (initWithContentRect:styleMask:backing:defer:): Initialize
Date: Mon, 27 Aug 2012 20:53:10 +0200
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 109794
fixes bug: http://debbugs.gnu.org/12258
committer: Jan D. <address@hidden>
branch nick: trunk
timestamp: Mon 2012-08-27 20:53:10 +0200
message:
  * nsmenu.m (initWithContentRect:styleMask:backing:defer:): Initialize
  dialog_return.
  (windowShouldClose:): Use stop instead of stopModalWithCode.
  (clicked:): Ditto, and also set dialog_return.
  (timeout_handler:): Use stop instead of abortModal.  Send a dummy
  event.
  (runDialogAt:): Make ret Lisp_Object.  Set it from dialog_return when
  modal loop returns.
  
  * nsterm.h (NSPanel): New class variable dialog_return.
modified:
  src/ChangeLog
  src/nsmenu.m
  src/nsterm.h
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2012-08-27 17:23:48 +0000
+++ b/src/ChangeLog     2012-08-27 18:53:10 +0000
@@ -1,3 +1,16 @@
+2012-08-27  Jan Djärv  <address@hidden>
+
+       * nsterm.h (NSPanel): New class variable dialog_return.
+
+       * nsmenu.m (initWithContentRect:styleMask:backing:defer:): Initialize
+       dialog_return.
+       (windowShouldClose:): Use stop instead of stopModalWithCode.
+       (clicked:): Ditto, and also set dialog_return (Bug#12258).
+       (timeout_handler:): Use stop instead of abortModal.  Send a dummy
+       event.
+       (runDialogAt:): Make ret Lisp_Object.  Set it from dialog_return when
+       modal loop returns.
+
 2012-08-27  Paul Eggert  <address@hidden>
 
        * composite.c, data.c, dbusbind.c, dired.c: Use bool for booleans.

=== modified file 'src/nsmenu.m'
--- a/src/nsmenu.m      2012-08-17 21:52:15 +0000
+++ b/src/nsmenu.m      2012-08-27 18:53:10 +0000
@@ -1497,6 +1497,7 @@
   FlippedView *contentView;
   NSImage *img;
 
+  dialog_return   = Qundefined;
   area.origin.x   = 3*SPACER;
   area.origin.y   = 2*SPACER;
   area.size.width = ICONSIZE;
@@ -1584,7 +1585,7 @@
 
 - (BOOL)windowShouldClose: (id)sender
 {
-  [NSApp stopModalWithCode: XHASH (Qnil)]; // FIXME: BIG UGLY HACK!!
+  [NSApp stop:self];
   return NO;
 }
 
@@ -1673,7 +1674,11 @@
 
   seltag = [[sellist objectAtIndex: 0] tag];
   if (seltag != XHASH (Qundefined)) // FIXME: BIG UGLY HACK!!
-    [NSApp stopModalWithCode: seltag];
+    {
+      dialog_return = seltag;
+      [NSApp stop:self];
+    }
+
   return self;
 }
 
@@ -1756,13 +1761,27 @@
  
 - (void)timeout_handler: (NSTimer *)timedEntry
 {
+  NSEvent *nxev = [NSEvent otherEventWithType: NSApplicationDefined
+                            location: NSMakePoint (0, 0)
+                       modifierFlags: 0
+                           timestamp: 0
+                        windowNumber: [[NSApp mainWindow] windowNumber]
+                             context: [NSApp context]
+                             subtype: 0
+                               data1: 0
+                               data2: 0];
+
   timer_fired = 1;
-  [NSApp abortModal];
+  /* We use sto because stopModal/abortModal out of the main loop does not
+     seem to work in 10.6.  But as we use stop we must send a real event so
+     the stop is seen and acted upon.  */
+  [NSApp stop:self];
+  [NSApp postEvent: nxev atStart: NO];
 }
 
 - (Lisp_Object)runDialogAt: (NSPoint)p
 {
-  NSInteger ret = 0;
+  Lisp_Object ret = Qundefined;
 
   while (popup_activated_flag)
     {
@@ -1781,7 +1800,9 @@
                                        forMode: NSModalPanelRunLoopMode];
         }
       timer_fired = 0;
+      dialog_return = Qundefined;
       ret = [NSApp runModalForWindow: self];
+      ret = dialog_return;
       if (! timer_fired)
         {
           if (tmo != nil) [tmo invalidate]; /* Cancels timer */

=== modified file 'src/nsterm.h'
--- a/src/nsterm.h      2012-08-16 06:40:57 +0000
+++ b/src/nsterm.h      2012-08-27 18:53:10 +0000
@@ -196,6 +196,7 @@
    NSMatrix *matrix;
    int rows, cols;
    int timer_fired;
+   Lisp_Object dialog_return;
    }
 - initFromContents: (Lisp_Object)menu isQuestion: (BOOL)isQ;
 - addButton: (char *)str value: (Lisp_Object)val row: (int)row;


reply via email to

[Prev in Thread] Current Thread [Next in Thread]