emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] trunk r117259: Use terminal-specific hooks to display popu


From: Dmitry Antipov
Subject: [Emacs-diffs] trunk r117259: Use terminal-specific hooks to display popup dialogs.
Date: Wed, 04 Jun 2014 14:59:48 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 117259
revision-id: address@hidden
parent: address@hidden
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Wed 2014-06-04 18:59:09 +0400
message:
  Use terminal-specific hooks to display popup dialogs.
  * termhooks.h (struct terminal): New field popup_dialog_hook.
  * menu.c (emulate_dialog_with_menu): New function, refactored from ...
  (Fx_popup_dialog): ... adjusted user.  Also remove old #if 0
  code and use popup_dialog_hook.
  * nsmenu.m (ns_popup_dialog): Make hook-compatible.
  * nsterm.h (ns_popup_dialog): Adjust prototype.
  * nsterm.m (ns_create_terminal):
  * w32term.c (w32_create_terminal):
  * xterm.c (x_create_terminal) [USE_X_TOOLKIT || USE_GTK]: Setup
  popup_dialog_hook.
modified:
  src/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1438
  src/menu.c                     menu.c-20091113204419-o5vbwnq5f7feedwu-8676
  src/nsmenu.m                   nsmenu.m-20091113204419-o5vbwnq5f7feedwu-8744
  src/nsterm.h                   nsterm.h-20091113204419-o5vbwnq5f7feedwu-8746
  src/nsterm.m                   nsterm.m-20091113204419-o5vbwnq5f7feedwu-8747
  src/termhooks.h                termhooks.h-20091113204419-o5vbwnq5f7feedwu-249
  src/w32term.c                  w32term.c-20091113204419-o5vbwnq5f7feedwu-950
  src/xterm.c                    xterm.c-20091113204419-o5vbwnq5f7feedwu-244
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2014-06-04 11:46:51 +0000
+++ b/src/ChangeLog     2014-06-04 14:59:09 +0000
@@ -1,3 +1,17 @@
+2014-06-04  Dmitry Antipov  <address@hidden>
+
+       Use terminal-specific hooks to display popup dialogs.
+       * termhooks.h (struct terminal): New field popup_dialog_hook.
+       * menu.c (emulate_dialog_with_menu): New function, refactored from ...
+       (Fx_popup_dialog): ... adjusted user.  Also remove old #if 0
+       code and use popup_dialog_hook.
+       * nsmenu.m (ns_popup_dialog): Make hook-compatible.
+       * nsterm.h (ns_popup_dialog): Adjust prototype.
+       * nsterm.m (ns_create_terminal):
+       * w32term.c (w32_create_terminal):
+       * xterm.c (x_create_terminal) [USE_X_TOOLKIT || USE_GTK]: Setup
+       popup_dialog_hook.
+
 2014-06-04  Eli Zaretskii  <address@hidden>
 
        * w32heap.c (report_temacs_memory_usage): Improve the report by

=== modified file 'src/menu.c'
--- a/src/menu.c        2014-06-04 04:58:31 +0000
+++ b/src/menu.c        2014-06-04 14:59:09 +0000
@@ -1434,6 +1434,38 @@
   return selection;
 }
 
+/* If F's terminal is not capable to display popup dialog,
+   emulate it with a menu.  */
+
+static Lisp_Object
+emulate_dialog_with_menu (struct frame *f, Lisp_Object contents)
+{
+  Lisp_Object x, y, frame, newpos, prompt = Fcar (contents);
+  int x_coord, y_coord;
+
+  if (FRAME_WINDOW_P (f))
+    {
+      x_coord = FRAME_PIXEL_WIDTH (f);
+      y_coord = FRAME_PIXEL_HEIGHT (f);
+    }
+  else
+    {
+      x_coord = FRAME_COLS (f);
+      /* Center the title at frame middle.  (TTY menus have
+        their upper-left corner at the given position.)  */
+      if (STRINGP (prompt))
+       x_coord -= SCHARS (prompt);
+      y_coord = FRAME_LINES (f);
+    }
+  
+  XSETFRAME (frame, f);
+  XSETINT (x, x_coord / 2);
+  XSETINT (y, y_coord / 2);
+  newpos = list2 (list2 (x, y), frame);
+
+  return Fx_popup_menu (newpos, list2 (prompt, contents));
+}
+
 DEFUN ("x-popup-dialog", Fx_popup_dialog, Sx_popup_dialog, 2, 3, 0,
        doc: /* Pop up a dialog box and return user's selection.
 POSITION specifies which frame to use.
@@ -1466,24 +1498,7 @@
   if (EQ (position, Qt)
       || (CONSP (position) && (EQ (XCAR (position), Qmenu_bar)
                               || EQ (XCAR (position), Qtool_bar))))
-    {
-#if 0 /* Using the frame the mouse is on may not be right.  */
-      /* Use the mouse's current position.  */
-      struct frame *new_f = SELECTED_FRAME ();
-      Lisp_Object bar_window;
-      enum scroll_bar_part part;
-      Time time;
-      Lisp_Object x, y;
-
-      (*mouse_position_hook) (&new_f, 1, &bar_window, &part, &x, &y, &time);
-
-      if (new_f != 0)
-       XSETFRAME (window, new_f);
-      else
-       window = selected_window;
-#endif
-      window = selected_window;
-    }
+    window = selected_window;
   else if (CONSP (position))
     {
       Lisp_Object tem = XCAR (position);
@@ -1525,51 +1540,18 @@
      string contents, because Fredisplay may GC and relocate them.  */
   Fredisplay (Qt);
 
-#if defined USE_X_TOOLKIT || defined USE_GTK
-  if (FRAME_WINDOW_P (f))
-    return xw_popup_dialog (f, header, contents);
-#endif
+  /* Display the popup dialog by a terminal-specific hook ... */
+  if (FRAME_TERMINAL (f)->popup_dialog_hook)
+    {
+      Lisp_Object selection
+       = FRAME_TERMINAL (f)->popup_dialog_hook (f, header, contents);
 #ifdef HAVE_NTGUI
-  if (FRAME_W32_P (f))
-    {
-      Lisp_Object selection = w32_popup_dialog (f, header, contents);
-
       if (!EQ (selection, Qunsupported__w32_dialog))
-       return selection;
+#endif 
+      return selection;
     }
-#endif
-#ifdef HAVE_NS
-  if (FRAME_NS_P (f))
-    return ns_popup_dialog (position, header, contents);
-#endif
-  /* Display a menu with these alternatives
-     in the middle of frame F.  */
-  {
-    Lisp_Object x, y, frame, newpos, prompt;
-    int x_coord, y_coord;
-
-    prompt = Fcar (contents);
-    if (FRAME_WINDOW_P (f))
-      {
-       x_coord = FRAME_PIXEL_WIDTH (f);
-       y_coord = FRAME_PIXEL_HEIGHT (f);
-      }
-    else
-      {
-       x_coord = FRAME_COLS (f);
-       /* Center the title at frame middle.  (TTY menus have their
-          upper-left corner at the given position.)  */
-       if (STRINGP (prompt))
-         x_coord -= SCHARS (prompt);
-       y_coord = FRAME_LINES (f);
-      }
-    XSETFRAME (frame, f);
-    XSETINT (x, x_coord / 2);
-    XSETINT (y, y_coord / 2);
-    newpos = list2 (list2 (x, y), frame);
-
-    return Fx_popup_menu (newpos, list2 (prompt, contents));
-  }
+  /* ... or emulate it with a menu.  */
+  return emulate_dialog_with_menu (f, contents);
 }
 
 void

=== modified file 'src/nsmenu.m'
--- a/src/nsmenu.m      2014-06-04 04:58:31 +0000
+++ b/src/nsmenu.m      2014-06-04 14:59:09 +0000
@@ -1428,11 +1428,10 @@
 
 
 Lisp_Object
-ns_popup_dialog (Lisp_Object position, Lisp_Object header, Lisp_Object 
contents)
+ns_popup_dialog (struct frame *f, Lisp_Object header, Lisp_Object contents)
 {
   id dialog;
   Lisp_Object window, tem, title;
-  struct frame *f;
   NSPoint p;
   BOOL isQ;
   NSAutoreleasePool *pool;
@@ -1441,41 +1440,6 @@
 
   isQ = NILP (header);
 
-  if (EQ (position, Qt)
-      || (CONSP (position) && (EQ (XCAR (position), Qmenu_bar)
-                               || EQ (XCAR (position), Qtool_bar))))
-    {
-      window = selected_window;
-    }
-  else if (CONSP (position))
-    {
-      Lisp_Object tem;
-      tem = Fcar (position);
-      if (XTYPE (tem) == Lisp_Cons)
-        window = Fcar (Fcdr (position));
-      else
-        {
-          tem = Fcar (Fcdr (position));  /* EVENT_START (position) */
-          window = Fcar (tem);      /* POSN_WINDOW (tem) */
-        }
-    }
-  else if (WINDOWP (position) || FRAMEP (position))
-    {
-      window = position;
-    }
-  else
-    window = Qnil;
-
-  if (FRAMEP (window))
-    f = XFRAME (window);
-  else if (WINDOWP (window))
-    {
-      CHECK_LIVE_WINDOW (window);
-      f = XFRAME (WINDOW_FRAME (XWINDOW (window)));
-    }
-  else
-    CHECK_WINDOW (window);
-
   check_window_system (f);
 
   p.x = (int)f->left_pos + ((int)FRAME_COLUMN_WIDTH (f) * f->text_cols)/2;

=== modified file 'src/nsterm.h'
--- a/src/nsterm.h      2014-05-26 11:16:47 +0000
+++ b/src/nsterm.h      2014-06-04 14:59:09 +0000
@@ -855,7 +855,7 @@
 extern Lisp_Object find_and_return_menu_selection (struct frame *f,
                                                    bool keymaps,
                                                    void *client_data);
-extern Lisp_Object ns_popup_dialog (Lisp_Object position, Lisp_Object header,
+extern Lisp_Object ns_popup_dialog (struct frame *, Lisp_Object header,
                                     Lisp_Object contents);
 
 #define NSAPP_DATA2_RUNASSCRIPT 10

=== modified file 'src/nsterm.m'
--- a/src/nsterm.m      2014-06-04 04:58:31 +0000
+++ b/src/nsterm.m      2014-06-04 14:59:09 +0000
@@ -4165,6 +4165,7 @@
   terminal->frame_raise_lower_hook = ns_frame_raise_lower;
   terminal->fullscreen_hook = ns_fullscreen_hook;
   terminal->menu_show_hook = ns_menu_show;
+  terminal->popup_dialog_hook = ns_popup_dialog;
   terminal->set_vertical_scroll_bar_hook = ns_set_vertical_scroll_bar;
   terminal->condemn_scroll_bars_hook = ns_condemn_scroll_bars;
   terminal->redeem_scroll_bar_hook = ns_redeem_scroll_bar;

=== modified file 'src/termhooks.h'
--- a/src/termhooks.h   2014-06-04 04:58:31 +0000
+++ b/src/termhooks.h   2014-06-04 14:59:09 +0000
@@ -482,6 +482,10 @@
   Lisp_Object (*menu_show_hook) (struct frame *f, int x, int y, int menuflags,
                                 Lisp_Object title, const char **error_name);
 
+  /* This hook is called to display popup dialog.  */
+  Lisp_Object (*popup_dialog_hook) (struct frame *f, Lisp_Object header,
+                                   Lisp_Object contents);
+
   /* Scroll bar hooks.  */
 
   /* The representation of scroll bars is determined by the code which

=== modified file 'src/w32term.c'
--- a/src/w32term.c     2014-06-04 04:58:31 +0000
+++ b/src/w32term.c     2014-06-04 14:59:09 +0000
@@ -6274,6 +6274,7 @@
   terminal->frame_raise_lower_hook = w32_frame_raise_lower;
   terminal->fullscreen_hook = w32fullscreen_hook;
   terminal->menu_show_hook = w32_menu_show;
+  terminal->popup_dialog_hook = w32_popup_dialog;
   terminal->set_vertical_scroll_bar_hook = w32_set_vertical_scroll_bar;
   terminal->condemn_scroll_bars_hook = w32_condemn_scroll_bars;
   terminal->redeem_scroll_bar_hook = w32_redeem_scroll_bar;

=== modified file 'src/xterm.c'
--- a/src/xterm.c       2014-06-04 04:58:31 +0000
+++ b/src/xterm.c       2014-06-04 14:59:09 +0000
@@ -10533,6 +10533,9 @@
   terminal->frame_raise_lower_hook = XTframe_raise_lower;
   terminal->fullscreen_hook = XTfullscreen_hook;
   terminal->menu_show_hook = x_menu_show;
+#if defined (USE_X_TOOLKIT) || defined (USE_GTK)
+  terminal->popup_dialog_hook = xw_popup_dialog;
+#endif  
   terminal->set_vertical_scroll_bar_hook = XTset_vertical_scroll_bar;
   terminal->condemn_scroll_bars_hook = XTcondemn_scroll_bars;
   terminal->redeem_scroll_bar_hook = XTredeem_scroll_bar;


reply via email to

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