aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan D <[email protected]>2010-07-14 16:32:25 +0200
committerJan D <[email protected]>2010-07-14 16:32:25 +0200
commitcf28cebc2e93dbd2cd0e6eb2f1a9543a015a1235 (patch)
treef342da6952fb8e6e523fff9ef43f26fa2a641088 /src
parentebd3d6afa42948e3fb136583f12f9f72e7830ec5 (diff)
Fix menu bar activation with click for Motif/Lesstif.
* src/xdisp.c (pending_menu_activation): Remove extern declaration. (prepare_menu_bars): Remove setting of pending_menu_activation. * src/xmenu.c (pending_menu_activation): Remove. (x_activate_menubar): Set popup_activated_flag for Xt also. Remove setting of pending_menu_activation. (set_frame_menubar): Remove check of pending_menu_activation. Declare menubar_size before code. Correct spelling in comment. * src/xterm.c (xm_scroll_callback, x_process_timeouts): K&R => prototype. (SET_SAVED_KEY_EVENT): Remove (not used). (SET_SAVED_MENU_EVENT): Rename to SET_SAVED_BUTTON_EVENT and remove size parameter. (handle_one_xevent): Check popup_activated () for menu for Xt also. Remove #ifdef USE_GTK around finish = X_EVENT_DROP. Remove #ifdef USE_MOTIF code that did SET_SAVED_BUTTON_EVENT for ButtonRelease.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog20
-rw-r--r--src/xdisp.c7
-rw-r--r--src/xmenu.c21
-rw-r--r--src/xterm.c38
4 files changed, 30 insertions, 56 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 923ba3afaf..6ca09f99fe 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,23 @@
+2010-07-14 Jan Djärv <[email protected]>
+
+ * xterm.c (xm_scroll_callback, x_process_timeouts): K&R => prototype.
+ (SET_SAVED_KEY_EVENT): Remove (not used).
+ (SET_SAVED_MENU_EVENT): Rename to SET_SAVED_BUTTON_EVENT and
+ remove size parameter.
+ (handle_one_xevent): Check popup_activated () for menu for Xt also.
+ Remove #ifdef USE_GTK around finish = X_EVENT_DROP.
+ Remove #ifdef USE_MOTIF code that did SET_SAVED_BUTTON_EVENT for
+ ButtonRelease.
+
+ * xdisp.c (pending_menu_activation): Remove extern declaration.
+ (prepare_menu_bars): Remove setting of pending_menu_activation.
+
+ * xmenu.c (pending_menu_activation): Remove.
+ (x_activate_menubar): Set popup_activated_flag for Xt also. Remove
+ setting of pending_menu_activation.
+ (set_frame_menubar): Remove check of pending_menu_activation.
+ Declare menubar_size before code. Correct spelling in comment.
+
2010-07-14 Kenichi Handa <[email protected]>
* font.c (font_open_entity): Cancel previous change.
diff --git a/src/xdisp.c b/src/xdisp.c
index 3464efd643..53fba8caa9 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -271,7 +271,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \
|| defined(HAVE_NS) || defined (USE_GTK)
extern void set_frame_menubar (struct frame *f, int, int);
-extern int pending_menu_activation;
#endif
extern int interrupt_input;
@@ -9866,12 +9865,6 @@ prepare_menu_bars (void)
update_tool_bar (sf, 1);
#endif
}
-
- /* Motif needs this. See comment in xmenu.c. Turn it off when
- pending_menu_activation is not defined. */
-#ifdef USE_X_TOOLKIT
- pending_menu_activation = 0;
-#endif
}
diff --git a/src/xmenu.c b/src/xmenu.c
index b0bdbcfeca..4b99297e77 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -151,14 +151,6 @@ extern widget_value *xmalloc_widget_value (void);
extern widget_value *digest_single_submenu (int, int, int);
#endif
-/* This is set nonzero after the user activates the menu bar, and set
- to zero again after the menu bars are redisplayed by prepare_menu_bar.
- While it is nonzero, all calls to set_frame_menubar go deep.
-
- I don't understand why this is needed, but it does seem to be
- needed on Motif, according to Marcus Daniels <[email protected]>. */
-
-int pending_menu_activation;
#ifdef USE_X_TOOLKIT
@@ -670,6 +662,7 @@ x_activate_menubar (FRAME_PTR f)
set_frame_menubar (f, 0, 1);
BLOCK_INPUT;
+ popup_activated_flag = 1;
#ifdef USE_GTK
/* If we click outside any menu item, the menu bar still grabs.
So we send Press and the Release. If outside, grab is released.
@@ -681,15 +674,10 @@ x_activate_menubar (FRAME_PTR f)
f->output_data.x->saved_menu_event->type = ButtonPress;
XPutBackEvent (f->output_data.x->display_info->display,
f->output_data.x->saved_menu_event);
- popup_activated_flag = 1;
#else
XtDispatchEvent (f->output_data.x->saved_menu_event);
#endif
UNBLOCK_INPUT;
-#ifdef USE_MOTIF
- if (f->output_data.x->saved_menu_event->type == ButtonRelease)
- pending_menu_activation = 1;
-#endif
/* Ignore this if we get it a second time. */
f->output_data.x->saved_menu_event->type = 0;
@@ -991,8 +979,6 @@ set_frame_menubar (FRAME_PTR f, int first_time, int deep_p)
if (! menubar_widget)
deep_p = 1;
- else if (pending_menu_activation && !deep_p)
- deep_p = 1;
/* Make the first call for any given frame always go deep. */
else if (!f->output_data.x->saved_menu_event && !deep_p)
{
@@ -1274,10 +1260,11 @@ set_frame_menubar (FRAME_PTR f, int first_time, int deep_p)
}
{
+ int menubar_size;
if (f->output_data.x->menubar_widget)
XtRealizeWidget (f->output_data.x->menubar_widget);
- int menubar_size
+ menubar_size
= (f->output_data.x->menubar_widget
? (f->output_data.x->menubar_widget->core.height
+ f->output_data.x->menubar_widget->core.border_width)
@@ -1286,7 +1273,7 @@ set_frame_menubar (FRAME_PTR f, int first_time, int deep_p)
#if 1 /* Experimentally, we now get the right results
for -geometry -0-0 without this. 24 Aug 96, rms.
Maybe so, but the menu bar size is missing the pixels so the
- WM size hints are off by theses pixel. Jan D, oct 2009. */
+ WM size hints are off by these pixels. Jan D, oct 2009. */
#ifdef USE_LUCID
if (FRAME_EXTERNAL_MENU_BAR (f))
{
diff --git a/src/xterm.c b/src/xterm.c
index 2f581d9f59..e66845df26 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -4159,9 +4159,7 @@ x_scroll_bar_to_input_event (XEvent *event, struct input_event *ievent)
CALL_DATA is a pointer to a XmScrollBarCallbackStruct. */
static void
-xm_scroll_callback (widget, client_data, call_data)
- Widget widget;
- XtPointer client_data, call_data;
+xm_scroll_callback (Widget widget, XtPointer client_data, XtPointer call_data)
{
struct scroll_bar *bar = (struct scroll_bar *) client_data;
XmScrollBarCallbackStruct *cs = (XmScrollBarCallbackStruct *) call_data;
@@ -5546,22 +5544,18 @@ struct x_display_info *XTread_socket_fake_io_error;
static struct x_display_info *next_noop_dpyinfo;
-#define SET_SAVED_MENU_EVENT(size) \
+#define SET_SAVED_BUTTON_EVENT \
do \
{ \
if (f->output_data.x->saved_menu_event == 0) \
f->output_data.x->saved_menu_event \
= (XEvent *) xmalloc (sizeof (XEvent)); \
- memcpy (f->output_data.x->saved_menu_event, &event, size); \
+ *f->output_data.x->saved_menu_event = event; \
inev.ie.kind = MENU_BAR_ACTIVATE_EVENT; \
XSETFRAME (inev.ie.frame_or_window, f); \
} \
while (0)
-#define SET_SAVED_BUTTON_EVENT SET_SAVED_MENU_EVENT (sizeof (XButtonEvent))
-#define SET_SAVED_KEY_EVENT SET_SAVED_MENU_EVENT (sizeof (XKeyEvent))
-
-
enum
{
X_EVENT_NORMAL,
@@ -6755,14 +6749,12 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventp, int *finish,
Instead, save it away
and we will pass it to Xt from kbd_buffer_get_event.
That way, we can run some Lisp code first. */
- if (
+ if (! popup_activated ()
#ifdef USE_GTK
- ! popup_activated ()
/* Gtk+ menus only react to the first three buttons. */
&& event.xbutton.button < 3
- &&
#endif
- f && event.type == ButtonPress
+ && f && event.type == ButtonPress
/* Verify the event is really within the menu bar
and not just sent to it due to grabbing. */
&& event.xbutton.x >= 0
@@ -6773,30 +6765,13 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventp, int *finish,
{
SET_SAVED_BUTTON_EVENT;
XSETFRAME (last_mouse_press_frame, f);
-#ifdef USE_GTK
*finish = X_EVENT_DROP;
-#endif
}
else if (event.type == ButtonPress)
{
last_mouse_press_frame = Qnil;
goto OTHER;
}
-
-#ifdef USE_MOTIF /* This should do not harm for Lucid,
- but I am trying to be cautious. */
- else if (event.type == ButtonRelease)
- {
- if (!NILP (last_mouse_press_frame))
- {
- f = XFRAME (last_mouse_press_frame);
- if (f->output_data.x)
- SET_SAVED_BUTTON_EVENT;
- }
- else
- goto OTHER;
- }
-#endif /* USE_MOTIF */
else
goto OTHER;
#endif /* USE_X_TOOLKIT || USE_GTK */
@@ -10336,8 +10311,7 @@ x_delete_display (struct x_display_info *dpyinfo)
that slows us down. */
static void
-x_process_timeouts (timer)
- struct atimer *timer;
+x_process_timeouts (struct atimer *timer)
{
BLOCK_INPUT;
x_timeout_atimer_activated_flag = 0;