all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#60510: 30.0.50; [PATCH] Do not put pointer on first menu item in no-toolkit build
@ 2023-01-03 10:03 Manuel Giraud
  2023-01-03 12:48 ` Eli Zaretskii
  2023-01-03 13:24 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 2 replies; 7+ messages in thread
From: Manuel Giraud @ 2023-01-03 10:03 UTC (permalink / raw)
  To: 60510

[-- Attachment #1: Type: text/plain, Size: 333 bytes --]


Hi,

In no-toolkit build, when a menu appears the mouse pointer is on the
first menu entry by default.  This means that a quick mouse
click/release will select this first entry.  This patch, let the pointer
on the menu title by default.  It seems to me to be a better default
compared to what lucid build does for instance.  WDYT?


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-oldXMenu-Internal.c-_XMTransToOrigin-Don-t-move-to-t.patch --]
[-- Type: text/x-patch, Size: 948 bytes --]

From a39c62a9c99df57fa5abe06409bd73270a1d4ebb Mon Sep 17 00:00:00 2001
From: Manuel Giraud <manuel@ledu-giraud.fr>
Date: Mon, 2 Jan 2023 22:07:58 +0100
Subject: [PATCH] * oldXMenu/Internal.c (_XMTransToOrigin): Don't move to the
 first selection.

---
 oldXMenu/Internal.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/oldXMenu/Internal.c b/oldXMenu/Internal.c
index cf4960cd113..65b61602fd2 100644
--- a/oldXMenu/Internal.c
+++ b/oldXMenu/Internal.c
@@ -853,10 +853,10 @@ _XMTransToOrigin(Display *display, register XMenu *menu, register XMPane *p_ptr,
 	l_orig_y = y_pos - (menu->s_height >> 1);
 
 	/*
-	 * Then translate to the upper left of the current pane window.
+	 * Then translate to the upper left of the current pane
+	 * window.  Do not move y to the first selection.
 	 */
 	l_orig_x -= (s_ptr->window_x + menu->p_bdr_width);
-	l_orig_y -= (s_ptr->window_y + menu->p_bdr_width);
     }
 
     /*
-- 
2.39.0


[-- Attachment #3: Type: text/plain, Size: 8105 bytes --]



In GNU Emacs 30.0.50 (build 1, x86_64-unknown-openbsd7.2, cairo version
 1.17.6) of 2023-01-02 built on computer
Repository revision: a39c62a9c99df57fa5abe06409bd73270a1d4ebb
Repository branch: mgi/menu-title
Windowing system distributor 'The X.Org Foundation', version 11.0.12101004
System Description: OpenBSD computer 7.2 GENERIC.MP#903 amd64

Configured using:
 'configure --prefix=/home/manuel/emacs --bindir=/home/manuel/bin
 --with-x-toolkit=no --without-sound --without-compress-install
 CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib'

Configured features:
CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON
LCMS2 LIBOTF LIBXML2 MODULES NOTIFY KQUEUE OLDXMENU PDUMPER PNG RSVG
SQLITE3 THREADS TIFF TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM ZLIB

Important settings:
  value of $LC_ALL: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Dired by name

Minor modes in effect:
  gnus-dired-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  display-time-mode: t
  display-battery-mode: t
  server-mode: t
  shell-dirtrack-mode: t
  repeat-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  buffer-read-only: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/home/manuel/.emacs.d/elpa/ef-themes-0.10.0/theme-loaddefs hides /home/manuel/emacs/share/emacs/30.0.50/lisp/theme-loaddefs
/home/manuel/.emacs.d/elpa/transient-0.3.7/transient hides /home/manuel/emacs/share/emacs/30.0.50/lisp/transient

Features:
(shadow emacsbug dabbrev modus-vivendi-deuteranopia-theme
modus-operandi-deuteranopia-theme modus-vivendi-tinted-theme
modus-operandi-tinted-theme modus-vivendi-theme tabify cus-start
cl-print descr-text goto-addr bug-reference ibuf-ext ibuffer
ibuffer-loaddefs help-fns radix-tree view wdired nnselect gnus-search
vc-hg vc-bzr tramp-cache time-stamp tramp-sh shr-color mailalias
misearch multi-isearch sort gnus-cite mail-extr textsec uni-scripts
idna-mapping ucs-normalize uni-confusable textsec-check gnus-async
gnus-bcklg gnus-ml gnus-topic mm-archive qp utf-7 net-utils pulse
url-http url-gw url-cache url-auth imap rfc2104 nndoc nndraft nnmh
nnfolder nnml gnus-agent gnus-srvr gnus-score score-mode nnvirtual nntp
gnus-cache nnrss mm-url w3m doc-view jka-compr image-mode exif w3m-hist
w3m-fb bookmark-w3m w3m-ems w3m-favicon w3m-image tab-line w3m-proc
w3m-util sh-script smie treesit executable network-stream nsm vc-git
vc-dispatcher vc-svn whitespace gnus-dired magit-patch magit-extras
face-remap magit-bookmark magit-submodule magit-obsolete magit-blame
magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch
magit-clone magit-remote magit-commit magit-sequence magit-notes
magit-worktree magit-tag magit-merge magit-branch magit-reset
magit-files magit-refs magit-status magit magit-repos magit-apply
magit-wip magit-log which-func imenu magit-diff smerge-mode diff
diff-mode git-commit log-edit pcvs-util add-log magit-core
magit-autorevert autorevert filenotify magit-margin magit-transient
magit-process with-editor magit-mode transient magit-git magit-section
magit-utils dash paredit edmacro time battery exwm-randr xcb-randr
exwm-config exwm exwm-input xcb-keysyms xcb-xkb exwm-manage
exwm-floating xcb-cursor xcb-render exwm-layout exwm-workspace exwm-core
xcb-ewmh xcb-icccm xcb xcb-xproto xcb-types xcb-debug kmacro server
stimmung-themes modus-operandi-theme modus-themes ytdious osm mingus
libmpdee reporter edebug debug backtrace transmission diary-lib
diary-loaddefs color calc-bin calc-ext calc calc-loaddefs rect calc-macs
w3m-load mu4e mu4e-org mu4e-main mu4e-view mu4e-headers mu4e-compose
mu4e-draft mu4e-actions smtpmail mu4e-search mu4e-lists mu4e-bookmarks
mu4e-mark mu4e-message flow-fill mule-util hl-line mu4e-contacts
mu4e-update mu4e-folders mu4e-server mu4e-context mu4e-vars mu4e-helpers
mu4e-config bookmark ido supercite regi ebdb-message ebdb-gnus gnus-msg
gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum shr
pixel-fill kinsoku url-file svg dom gnus-group gnus-undo gnus-start
gnus-dbus gnus-cloud nnimap nnmail mail-source utf7 nnoo gnus-spec
gnus-int gnus-range message sendmail yank-media puny rfc822 mml mml-sec
epa epg rfc6068 epg-config mm-decode mm-bodies mm-encode mail-parse
rfc2231 rfc2047 rfc2045 ietf-drums gmm-utils mailheader gnus-win gnus
nnheader gnus-util mail-utils range mm-util mail-prsvr ebdb-mua ebdb-com
crm ebdb-format ebdb mailabbrev eieio-opt cl-extra help-mode speedbar
ezimage dframe eieio-base pcase timezone org ob ob-tangle ob-ref ob-lob
ob-table ob-exp org-macro org-src ob-comint org-pcomplete org-list
org-footnote org-faces org-entities ob-emacs-lisp ob-core ob-eval
org-cycle org-table ol org-fold org-fold-core org-keys oc org-loaddefs
find-func cal-menu calendar cal-loaddefs org-version org-compat org-macs
visual-basic-mode cl web-mode derived disp-table erlang-start
smart-tabs-mode skeleton cc-mode cc-fonts cc-guess cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs slime-asdf grep slime-tramp
tramp tramp-loaddefs trampver tramp-integration cus-edit cus-load
wid-edit files-x tramp-compat rx shell pcomplete parse-time iso8601
time-date ls-lisp format-spec slime-fancy slime-indentation
slime-cl-indent cl-indent slime-trace-dialog slime-fontifying-fu
slime-package-fu slime-references slime-compiler-notes-tree advice
slime-scratch slime-presentations bridge slime-macrostep macrostep
slime-mdot-fu slime-enclosing-context slime-fuzzy slime-fancy-trace
slime-fancy-inspector slime-c-p-c slime-editing-commands slime-autodoc
slime-repl slime-parse slime compile text-property-search etags fileloop
generator xref project arc-mode archive-mode noutline outline icons pp
comint ansi-osc ansi-color ring hyperspec thingatpt slime-autoloads
dired-aux dired-x dired dired-loaddefs notifications dbus xml repeat
easy-mmode stimmung-themes-autoloads rust-mode-autoloads ebdb-autoloads
magit-autoloads debbugs-autoloads git-commit-autoloads
magit-section-autoloads ef-themes-autoloads with-editor-autoloads
paredit-autoloads dash-autoloads ytdious-autoloads
transmission-autoloads transient-autoloads exwm-autoloads
hyperbole-autoloads detached-autoloads info package browse-url url
url-proxy url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x
map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc
iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win
term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer nadvice seq simple cl-generic indonesian philippine
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads dbusbind kqueue lcms2 dynamic-setting system-font-setting
font-render-setting cairo xinput2 x multi-tty make-network-process
emacs)

Memory information:
((conses 16 1043349 404008)
 (symbols 48 74133 18)
 (strings 32 356163 11156)
 (string-bytes 1 10535845)
 (vectors 16 187417)
 (vector-slots 8 3603012 150343)
 (floats 8 647 583)
 (intervals 56 17957 2468)
 (buffers 984 53))

-- 
Manuel Giraud

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* bug#60510: 30.0.50; [PATCH] Do not put pointer on first menu item in no-toolkit build
  2023-01-03 10:03 bug#60510: 30.0.50; [PATCH] Do not put pointer on first menu item in no-toolkit build Manuel Giraud
@ 2023-01-03 12:48 ` Eli Zaretskii
  2023-01-03 13:09   ` Manuel Giraud
  2023-01-03 13:24 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 7+ messages in thread
From: Eli Zaretskii @ 2023-01-03 12:48 UTC (permalink / raw)
  To: Manuel Giraud; +Cc: 60510

> From: Manuel Giraud <manuel@ledu-giraud.fr>
> Date: Tue, 03 Jan 2023 11:03:31 +0100
> 
> In no-toolkit build, when a menu appears the mouse pointer is on the
> first menu entry by default.  This means that a quick mouse
> click/release will select this first entry.  This patch, let the pointer
> on the menu title by default.  It seems to me to be a better default
> compared to what lucid build does for instance.  WDYT?

This is age-old behavior, common also with TTY menus.  We should at
least change all of them.  And frankly, I'm not sure we should change
it, after so many years.  Someone might depend on this behavior.





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#60510: 30.0.50; [PATCH] Do not put pointer on first menu item in no-toolkit build
  2023-01-03 12:48 ` Eli Zaretskii
@ 2023-01-03 13:09   ` Manuel Giraud
  2023-01-03 13:25     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-01-03 13:30     ` Eli Zaretskii
  0 siblings, 2 replies; 7+ messages in thread
From: Manuel Giraud @ 2023-01-03 13:09 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Manuel Giraud, 60510

Eli Zaretskii <eliz@gnu.org> writes:

[...]

> This is age-old behavior, common also with TTY menus.  We should at
> least change all of them.  And frankly, I'm not sure we should change
> it, after so many years.  Someone might depend on this behavior.

Yes, as this is part of oldXMenu, I suspected that.

So more generally, I kind of like the no toolkit backend but I want to
be able to modify it (my pipe dream being able to use emacs face
machinery to write to those menus).  What would be my best bet here?
Rewrite a plain X11 backend from scratch?

Best regards,
-- 
Manuel Giraud





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#60510: 30.0.50; [PATCH] Do not put pointer on first menu item in no-toolkit build
  2023-01-03 10:03 bug#60510: 30.0.50; [PATCH] Do not put pointer on first menu item in no-toolkit build Manuel Giraud
  2023-01-03 12:48 ` Eli Zaretskii
@ 2023-01-03 13:24 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 0 replies; 7+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-01-03 13:24 UTC (permalink / raw)
  To: Manuel Giraud; +Cc: 60510

Manuel Giraud <manuel@ledu-giraud.fr> writes:

> Hi,
>
> In no-toolkit build, when a menu appears the mouse pointer is on the
> first menu entry by default.  This means that a quick mouse
> click/release will select this first entry.  This patch, let the pointer
> on the menu title by default.  It seems to me to be a better default
> compared to what lucid build does for instance.  WDYT?

No, please don't, I object very strongly to changing behavior,
especially that which has been in the XMenu library since the beginning
of time.

In general, it is not the role of Emacs to dictate what its toolkit or
menu library does.  That part of oldXMenu should never be changed, at
least until we decide to write a new no-toolkit menu library.

Thanks.





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#60510: 30.0.50; [PATCH] Do not put pointer on first menu item in no-toolkit build
  2023-01-03 13:09   ` Manuel Giraud
@ 2023-01-03 13:25     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-01-03 13:30     ` Eli Zaretskii
  1 sibling, 0 replies; 7+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-01-03 13:25 UTC (permalink / raw)
  To: Manuel Giraud; +Cc: Eli Zaretskii, 60510

Manuel Giraud <manuel@ledu-giraud.fr> writes:

> So more generally, I kind of like the no toolkit backend but I want to
> be able to modify it (my pipe dream being able to use emacs face
> machinery to write to those menus).  What would be my best bet here?
> Rewrite a plain X11 backend from scratch?

To write a new X menu library, yes.





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#60510: 30.0.50; [PATCH] Do not put pointer on first menu item in no-toolkit build
  2023-01-03 13:09   ` Manuel Giraud
  2023-01-03 13:25     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-01-03 13:30     ` Eli Zaretskii
  2023-01-03 13:57       ` Manuel Giraud
  1 sibling, 1 reply; 7+ messages in thread
From: Eli Zaretskii @ 2023-01-03 13:30 UTC (permalink / raw)
  To: Manuel Giraud; +Cc: 60510

> From: Manuel Giraud <manuel@ledu-giraud.fr>
> Cc: Manuel Giraud <manuel@ledu-giraud.fr>,  60510@debbugs.gnu.org
> Date: Tue, 03 Jan 2023 14:09:26 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> [...]
> 
> > This is age-old behavior, common also with TTY menus.  We should at
> > least change all of them.  And frankly, I'm not sure we should change
> > it, after so many years.  Someone might depend on this behavior.
> 
> Yes, as this is part of oldXMenu, I suspected that.
> 
> So more generally, I kind of like the no toolkit backend but I want to
> be able to modify it (my pipe dream being able to use emacs face
> machinery to write to those menus).  What would be my best bet here?
> Rewrite a plain X11 backend from scratch?

Sorry, I don't understand: AFAIK oldXMenu is not used by any build
other than the no-toolkit build.  So why cannot you modify it?

What I wrote above doesn't prevent anyone from making changes, I was
just thinking aloud whether we should make this particular change.

To answer your more general question: to use faces, you must use the
Emacs display code to generate the glyphs and deliver them to the
glass.  Basically, you must abandon oldXMenu and re-implement the
menus using the Emacs display code.  The main problem here is that
menus are drop-down, i.e., they overlap stuff already on the glass,
and Emacs currently doesn't allow that.  (TTY menus pull that trick,
but they can only get away because all the characters have the same
dimensions on TTY frames, something that is not true for X display,
assuming you want to use font parts of the faces, not just their
colors.)  So you'd need some other trick here, maybe using child
frames?





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#60510: 30.0.50; [PATCH] Do not put pointer on first menu item in no-toolkit build
  2023-01-03 13:30     ` Eli Zaretskii
@ 2023-01-03 13:57       ` Manuel Giraud
  0 siblings, 0 replies; 7+ messages in thread
From: Manuel Giraud @ 2023-01-03 13:57 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Manuel Giraud, 60510

Eli Zaretskii <eliz@gnu.org> writes:

[...]

> Sorry, I don't understand: AFAIK oldXMenu is not used by any build
> other than the no-toolkit build.  So why cannot you modify it?
>
> What I wrote above doesn't prevent anyone from making changes, I was
> just thinking aloud whether we should make this particular change.

Yes but if this simple functional change cannot make it into oldXMenu I
don't think that any other will do.  But it might be a good thing: as
you and Po Lu pointed out, oldXMenu is this way since the dawn of time
so it should stay as is forever.

I'd like to tackle having another no toolkit backend but I don't know if
I'm up to such a task.

> To answer your more general question: to use faces, you must use the
> Emacs display code to generate the glyphs and deliver them to the
> glass.  Basically, you must abandon oldXMenu and re-implement the
> menus using the Emacs display code.  The main problem here is that
> menus are drop-down, i.e., they overlap stuff already on the glass,
> and Emacs currently doesn't allow that.  (TTY menus pull that trick,
> but they can only get away because all the characters have the same
> dimensions on TTY frames, something that is not true for X display,
> assuming you want to use font parts of the faces, not just their
> colors.)  So you'd need some other trick here, maybe using child
> frames?

When I said it was a pipe dream :-)
-- 
Manuel Giraud





^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-01-03 13:57 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-03 10:03 bug#60510: 30.0.50; [PATCH] Do not put pointer on first menu item in no-toolkit build Manuel Giraud
2023-01-03 12:48 ` Eli Zaretskii
2023-01-03 13:09   ` Manuel Giraud
2023-01-03 13:25     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-01-03 13:30     ` Eli Zaretskii
2023-01-03 13:57       ` Manuel Giraud
2023-01-03 13:24 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.