[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r117259: Use terminal-specific hooks to display popup dialogs.,
Dmitry Antipov <=