* Support fullscreen values fullheight and fullwidth on pgtk @ 2022-06-01 14:57 Florian Rommel 2022-06-02 6:00 ` Po Lu 0 siblings, 1 reply; 21+ messages in thread From: Florian Rommel @ 2022-06-01 14:57 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1132 bytes --] This is a suggestion to support the values 'fullheight and 'fullwidth for the fullscreen frame parameter on pgtk. Background: I undecorate the frame when it is maximized or "tiled" (in Gnome) to the left or right (-> fullheight, currently not supported on pgtk - only with the X backend). The patch uses the GDK_WINDOW_STATE_*_TILED and GDK_WINDOW_STATE_*_RESIZABLE flags that are available since GTK 3.22.23. A value of 'fullheight is set if the top and the bottom edges are marked as tiled and not resizable; 'fullwidth is set if the left and right edges are marked as tiled and not resizable. So, is the introduced behavior correct? I think it is consistent with the description in the Emacs manual: "a fullwidth frame is as wide as possible, a fullheight frame is as tall as possible". On Gnome, it works as expected. Other desktop environments, such as KDE, Xfce or tiling window managers don't seem to support the GTK_WINDOW_STATE_*_{TILED/RESIZABLE} flags, so fullheight and fullwidth will still never be set there (however, this also seems to be the case with the Emacs X backend). Regards, Flo [-- Attachment #2: 0001-pgtk-Add-support-for-fullscreen-values-fullheight-an.patch --] [-- Type: text/x-patch, Size: 2714 bytes --] From 2ec3ee73cc7ce2a38ed69a938d858bba286aca8a Mon Sep 17 00:00:00 2001 From: Florian Rommel <mail@florommel.de> Date: Wed, 1 Jun 2022 16:13:21 +0200 Subject: [PATCH] pgtk: Add support for fullscreen values fullheight and fullwidth * src/pgtkterm.c (window_state_event): Set fullheight/fullweight parameter depending on new_window_state --- src/pgtkterm.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/pgtkterm.c b/src/pgtkterm.c index da958a6664..eee0df979b 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -5420,6 +5420,7 @@ window_state_event (GtkWidget *widget, gpointer *user_data) { struct frame *f = pgtk_any_window_to_frame (event->window_state.window); + GdkWindowState new_state = event->window_state.new_window_state; union buffered_input_event inev; EVENT_INIT (inev.ie); @@ -5428,7 +5429,7 @@ window_state_event (GtkWidget *widget, if (f) { - if (event->window_state.new_window_state & GDK_WINDOW_STATE_FOCUSED) + if (new_state & GDK_WINDOW_STATE_FOCUSED) { if (FRAME_ICONIFIED_P (f)) { @@ -5444,17 +5445,26 @@ window_state_event (GtkWidget *widget, } } - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_FULLSCREEN) + if (new_state & GDK_WINDOW_STATE_FULLSCREEN) store_frame_param (f, Qfullscreen, Qfullboth); - else if (event->window_state.new_window_state - & GDK_WINDOW_STATE_MAXIMIZED) + else if (new_state & GDK_WINDOW_STATE_MAXIMIZED) store_frame_param (f, Qfullscreen, Qmaximized); +#if GTK_CHECK_VERSION (3, 22, 23) + else if ((new_state & GDK_WINDOW_STATE_TOP_TILED) && + (new_state & GDK_WINDOW_STATE_BOTTOM_TILED) && + !(new_state & GDK_WINDOW_STATE_TOP_RESIZABLE) && + !(new_state & GDK_WINDOW_STATE_BOTTOM_RESIZABLE)) + store_frame_param (f, Qfullscreen, Qfullheight); + else if ((new_state & GDK_WINDOW_STATE_LEFT_TILED) && + (new_state & GDK_WINDOW_STATE_RIGHT_TILED) && + !(new_state & GDK_WINDOW_STATE_LEFT_RESIZABLE) && + !(new_state & GDK_WINDOW_STATE_RIGHT_RESIZABLE)) + store_frame_param (f, Qfullscreen, Qfullwidth); +#endif else store_frame_param (f, Qfullscreen, Qnil); - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_ICONIFIED) + if (new_state & GDK_WINDOW_STATE_ICONIFIED) SET_FRAME_ICONIFIED (f, true); else { @@ -5464,8 +5474,7 @@ window_state_event (GtkWidget *widget, SET_FRAME_ICONIFIED (f, false); } - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_STICKY) + if (new_state & GDK_WINDOW_STATE_STICKY) store_frame_param (f, Qsticky, Qt); else store_frame_param (f, Qsticky, Qnil); -- 2.36.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-06-01 14:57 Support fullscreen values fullheight and fullwidth on pgtk Florian Rommel @ 2022-06-02 6:00 ` Po Lu 2022-06-03 8:11 ` Florian Rommel 0 siblings, 1 reply; 21+ messages in thread From: Po Lu @ 2022-06-02 6:00 UTC (permalink / raw) To: Florian Rommel; +Cc: emacs-devel Florian Rommel <mail@florommel.de> writes: > This is a suggestion to support the values 'fullheight and 'fullwidth > for the fullscreen frame parameter on pgtk. > Background: I undecorate the frame when it is maximized or "tiled" (in > Gnome) to the left or right (-> fullheight, currently not supported on > pgtk - only with the X backend). > > The patch uses the GDK_WINDOW_STATE_*_TILED and > GDK_WINDOW_STATE_*_RESIZABLE flags that are available since GTK > 3.22.23. A value of 'fullheight is set if the top and the bottom edges > are marked as tiled and not resizable; 'fullwidth is set if the left > and right edges are marked as tiled and not resizable. > So, is the introduced behavior correct? I think it is consistent with > the description in the Emacs manual: "a fullwidth frame is as wide as > possible, a fullheight frame is as tall as possible". It seems reasonable enough to me, though GTK sets those state flags in situations in some situations that don't exactly correspond to _NET_WM_STATE_MAXIMIZED_HORZ and _NET_WM_STATE_MAXIMIZED_VERT, which are used by the X build. > On Gnome, it works as expected. Other desktop environments, such as > KDE, Xfce or tiling window managers don't seem to support the > GTK_WINDOW_STATE_*_{TILED/RESIZABLE} flags, so fullheight and fullwidth > will still never be set there (however, this also seems to be the case > with the Emacs X backend). > > Regards, > Flo Thanks, some comments below. > + GdkWindowState new_state = event->window_state.new_window_state; > union buffered_input_event inev; IMO it would look better to simply write: GdkWindowState new_state; and then place new_state = event->window_state.new_window_state; after all the variable declarations. > +#if GTK_CHECK_VERSION (3, 22, 23) > + else if ((new_state & GDK_WINDOW_STATE_TOP_TILED) && > + (new_state & GDK_WINDOW_STATE_BOTTOM_TILED) && > + !(new_state & GDK_WINDOW_STATE_TOP_RESIZABLE) && > + !(new_state & GDK_WINDOW_STATE_BOTTOM_RESIZABLE)) > + store_frame_param (f, Qfullscreen, Qfullheight); > + else if ((new_state & GDK_WINDOW_STATE_LEFT_TILED) && > + (new_state & GDK_WINDOW_STATE_RIGHT_TILED) && > + !(new_state & GDK_WINDOW_STATE_LEFT_RESIZABLE) && > + !(new_state & GDK_WINDOW_STATE_RIGHT_RESIZABLE)) > + store_frame_param (f, Qfullscreen, Qfullwidth); > +#endif I think we should just bump the version of GTK required for PGTK to 3.22, since users of older versions can use the regular X build. Our coding style is also to place the "&&" on the next line. Here and in other places, write: if (very_long_condition_here && other_very_long_condition_here) do_something (); instead of: if (very_long_condition_here && other_very_long_condition_here) do_something (); You also forgot to implement setting the `fullwidth' and `fullheight' states. It should be easy to implement in `set_fullscreen_state', though I admit I haven't looked very closely at that. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-06-02 6:00 ` Po Lu @ 2022-06-03 8:11 ` Florian Rommel 2022-06-03 8:23 ` Po Lu 0 siblings, 1 reply; 21+ messages in thread From: Florian Rommel @ 2022-06-03 8:11 UTC (permalink / raw) To: Po Lu; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 2070 bytes --] Thanks for your feedback. See the improved patch. On Thu, 2022-06-02 at 14:00 +0800, Po Lu wrote: > > > + GdkWindowState new_state = event->window_state.new_window_state; > > union buffered_input_event inev; > > IMO it would look better to simply write: > > GdkWindowState new_state; > > and then place > > new_state = event->window_state.new_window_state; > > after all the variable declarations. > > > +#if GTK_CHECK_VERSION (3, 22, 23) > > + else if ((new_state & GDK_WINDOW_STATE_TOP_TILED) && > > + (new_state & GDK_WINDOW_STATE_BOTTOM_TILED) && > > + !(new_state & GDK_WINDOW_STATE_TOP_RESIZABLE) && > > + !(new_state & GDK_WINDOW_STATE_BOTTOM_RESIZABLE)) > > + store_frame_param (f, Qfullscreen, Qfullheight); > > + else if ((new_state & GDK_WINDOW_STATE_LEFT_TILED) && > > + (new_state & GDK_WINDOW_STATE_RIGHT_TILED) && > > + !(new_state & GDK_WINDOW_STATE_LEFT_RESIZABLE) && > > + !(new_state & GDK_WINDOW_STATE_RIGHT_RESIZABLE)) > > + store_frame_param (f, Qfullscreen, Qfullwidth); > > +#endif > > I think we should just bump the version of GTK required for PGTK to > 3.22, since users of older versions can use the regular X build. Okay, I removed the version check. > > Our coding style is also to place the "&&" on the next line. Here and > in other places, write: > > if (very_long_condition_here > && other_very_long_condition_here) > do_something (); > > instead of: > > if (very_long_condition_here && > other_very_long_condition_here) > do_something (); Oh yes, I could have seen that in the existing code. > > You also forgot to implement setting the `fullwidth' and `fullheight' > states. It should be easy to implement in `set_fullscreen_state', > though I admit I haven't looked very closely at that. I am afraid that this is not possible because GTK does not seem to have a way for setting such states. As far as I can see, it is only possible to maximize a window and to set it to fullscreen (fullboth). [-- Attachment #2: v2-0001-pgtk-Add-support-for-fullscreen-values-fullheight.patch --] [-- Type: text/x-patch, Size: 2682 bytes --] From 19f0635273892643336eb5042cebf675d8a7fb94 Mon Sep 17 00:00:00 2001 From: Florian Rommel <mail@florommel.de> Date: Fri, 3 Jun 2022 03:03:03 +0200 Subject: [PATCH v2] pgtk: Add support for fullscreen values fullheight and fullwidth * src/pgtkterm.c (window_state_event): Set fullheight/fullweight parameter depending on new_window_state --- src/pgtkterm.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/pgtkterm.c b/src/pgtkterm.c index da958a6664..b816deba0a 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -5420,15 +5420,18 @@ window_state_event (GtkWidget *widget, gpointer *user_data) { struct frame *f = pgtk_any_window_to_frame (event->window_state.window); + GdkWindowState new_state; union buffered_input_event inev; + new_state = event->window_state.new_window_state; + EVENT_INIT (inev.ie); inev.ie.kind = NO_EVENT; inev.ie.arg = Qnil; if (f) { - if (event->window_state.new_window_state & GDK_WINDOW_STATE_FOCUSED) + if (new_state & GDK_WINDOW_STATE_FOCUSED) { if (FRAME_ICONIFIED_P (f)) { @@ -5444,17 +5447,24 @@ window_state_event (GtkWidget *widget, } } - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_FULLSCREEN) + if (new_state & GDK_WINDOW_STATE_FULLSCREEN) store_frame_param (f, Qfullscreen, Qfullboth); - else if (event->window_state.new_window_state - & GDK_WINDOW_STATE_MAXIMIZED) + else if (new_state & GDK_WINDOW_STATE_MAXIMIZED) store_frame_param (f, Qfullscreen, Qmaximized); + else if ((new_state & GDK_WINDOW_STATE_TOP_TILED) + && (new_state & GDK_WINDOW_STATE_BOTTOM_TILED) + && !(new_state & GDK_WINDOW_STATE_TOP_RESIZABLE) + && !(new_state & GDK_WINDOW_STATE_BOTTOM_RESIZABLE)) + store_frame_param (f, Qfullscreen, Qfullheight); + else if ((new_state & GDK_WINDOW_STATE_LEFT_TILED) + && (new_state & GDK_WINDOW_STATE_RIGHT_TILED) + && !(new_state & GDK_WINDOW_STATE_LEFT_RESIZABLE) + && !(new_state & GDK_WINDOW_STATE_RIGHT_RESIZABLE)) + store_frame_param (f, Qfullscreen, Qfullwidth); else store_frame_param (f, Qfullscreen, Qnil); - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_ICONIFIED) + if (new_state & GDK_WINDOW_STATE_ICONIFIED) SET_FRAME_ICONIFIED (f, true); else { @@ -5464,8 +5474,7 @@ window_state_event (GtkWidget *widget, SET_FRAME_ICONIFIED (f, false); } - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_STICKY) + if (new_state & GDK_WINDOW_STATE_STICKY) store_frame_param (f, Qsticky, Qt); else store_frame_param (f, Qsticky, Qnil); -- 2.36.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-06-03 8:11 ` Florian Rommel @ 2022-06-03 8:23 ` Po Lu 2022-06-03 18:42 ` Florian Rommel 0 siblings, 1 reply; 21+ messages in thread From: Po Lu @ 2022-06-03 8:23 UTC (permalink / raw) To: Florian Rommel; +Cc: emacs-devel Florian Rommel <mail@florommel.de> writes: > Okay, I removed the version check. Thanks, but you forgot to adjust this check in configure.ac: if test "${window_system}" = "x11"; then GTK_REQUIRED=3.10 else GTK_REQUIRED=3.20 fi and the announcement in etc/NEWS. > I am afraid that this is not possible because GTK does not seem to have > a way for setting such states. As far as I can see, it is only > possible to maximize a window and to set it to fullscreen (fullboth). Too bad, I guess a footnote should be added in the node "Size Parameters" in the Lisp reference manual. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-06-03 8:23 ` Po Lu @ 2022-06-03 18:42 ` Florian Rommel 2022-06-04 1:17 ` Po Lu 0 siblings, 1 reply; 21+ messages in thread From: Florian Rommel @ 2022-06-03 18:42 UTC (permalink / raw) To: Po Lu; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1041 bytes --] On Fri, 2022-06-03 at 16:23 +0800, Po Lu wrote: > > Okay, I removed the version check. > > Thanks, but you forgot to adjust this check in configure.ac: > > if test "${window_system}" = "x11"; then > GTK_REQUIRED=3.10 > else > GTK_REQUIRED=3.20 > fi > > and the announcement in etc/NEWS. Thank you, I fixed it. > > > I am afraid that this is not possible because GTK does not seem to have > > a way for setting such states. As far as I can see, it is only > > possible to maximize a window and to set it to fullscreen (fullboth). > > Too bad, I guess a footnote should be added in the node "Size > Parameters" in the Lisp reference manual. Currently, setting fullwidth or fullheight results in an temporary inconsistency till the next window_state_event arrives and resets the fullscreen parameter. In theory, we could reset the fullscreen parameter to the correct value directly in `set_fullscreen_state' by looking at the GtkWindow. But I'm not sure if that's a good idea. [-- Attachment #2: v3-0001-pgtk-Add-support-for-fullscreen-values-fullheight.patch --] [-- Type: text/x-patch, Size: 4914 bytes --] From 2e5c742f572c00d11263520d1a97f4f3ca2addbd Mon Sep 17 00:00:00 2001 From: Florian Rommel <mail@florommel.de> Date: Fri, 3 Jun 2022 03:03:03 +0200 Subject: [PATCH v3] pgtk: Add support for fullscreen values fullheight and fullwidth * src/pgtkterm.c (window_state_event): Support values fullheight and fullwidth for the fullscreen frame-parameter * doc/lispref/frames.texi (Size Parameters): Document inability to actively set hullheight/fullwidth for PGTK frames * configure.ac: Bump GTK version for PGTK * etc/NEWS: Announce GTK version change for PGTK --- configure.ac | 2 +- doc/lispref/frames.texi | 8 +++++--- etc/NEWS | 3 +++ src/pgtkterm.c | 27 ++++++++++++++++++--------- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/configure.ac b/configure.ac index ed8ec890ac..c25bcb2d60 100644 --- a/configure.ac +++ b/configure.ac @@ -2864,7 +2864,7 @@ AC_DEFUN if test "${window_system}" = "x11"; then GTK_REQUIRED=3.10 else - GTK_REQUIRED=3.20 + GTK_REQUIRED=3.22 fi GTK_MODULES="gtk+-3.0 >= $GTK_REQUIRED glib-2.0 >= $GLIB_REQUIRED" diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 9f7666ac63..56832e585a 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -1746,9 +1746,11 @@ Size Parameters @item fullscreen This parameter specifies whether to maximize the frame's width, height or both. Its value can be @code{fullwidth}, @code{fullheight}, -@code{fullboth}, or @code{maximized}. A @dfn{fullwidth} frame is as -wide as possible, a @dfn{fullheight} frame is as tall as possible, and -a @dfn{fullboth} frame is both as wide and as tall as possible. A +@code{fullboth}, or @code{maximized}.@footnote{On PGTK frames, setting +the values @code{fullheight} and @code{fullwidth} has no effect, only +reading is supported.} A @dfn{fullwidth} frame is as wide as +possible, a @dfn{fullheight} frame is as tall as possible, and a +@dfn{fullboth} frame is both as wide and as tall as possible. A @dfn{maximized} frame is like a ``fullboth'' frame, except that it usually keeps its title bar and the buttons for resizing and closing the frame. Also, maximized frames typically avoid hiding any task bar diff --git a/etc/NEWS b/etc/NEWS index 54bc6d80e1..1aa5f7e96f 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -24,6 +24,9 @@ applies, and please also update docstrings as needed. \f * Installation Changes in Emacs 29.1 ++++ +** Building Emacs with pure GTK now requires GTK 3.22. + +++ ** Emacs can be built with built-in support for accessing SQLite databases. This uses the popular sqlite3 library, and can be disabled by using diff --git a/src/pgtkterm.c b/src/pgtkterm.c index da958a6664..b816deba0a 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -5420,15 +5420,18 @@ window_state_event (GtkWidget *widget, gpointer *user_data) { struct frame *f = pgtk_any_window_to_frame (event->window_state.window); + GdkWindowState new_state; union buffered_input_event inev; + new_state = event->window_state.new_window_state; + EVENT_INIT (inev.ie); inev.ie.kind = NO_EVENT; inev.ie.arg = Qnil; if (f) { - if (event->window_state.new_window_state & GDK_WINDOW_STATE_FOCUSED) + if (new_state & GDK_WINDOW_STATE_FOCUSED) { if (FRAME_ICONIFIED_P (f)) { @@ -5444,17 +5447,24 @@ window_state_event (GtkWidget *widget, } } - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_FULLSCREEN) + if (new_state & GDK_WINDOW_STATE_FULLSCREEN) store_frame_param (f, Qfullscreen, Qfullboth); - else if (event->window_state.new_window_state - & GDK_WINDOW_STATE_MAXIMIZED) + else if (new_state & GDK_WINDOW_STATE_MAXIMIZED) store_frame_param (f, Qfullscreen, Qmaximized); + else if ((new_state & GDK_WINDOW_STATE_TOP_TILED) + && (new_state & GDK_WINDOW_STATE_BOTTOM_TILED) + && !(new_state & GDK_WINDOW_STATE_TOP_RESIZABLE) + && !(new_state & GDK_WINDOW_STATE_BOTTOM_RESIZABLE)) + store_frame_param (f, Qfullscreen, Qfullheight); + else if ((new_state & GDK_WINDOW_STATE_LEFT_TILED) + && (new_state & GDK_WINDOW_STATE_RIGHT_TILED) + && !(new_state & GDK_WINDOW_STATE_LEFT_RESIZABLE) + && !(new_state & GDK_WINDOW_STATE_RIGHT_RESIZABLE)) + store_frame_param (f, Qfullscreen, Qfullwidth); else store_frame_param (f, Qfullscreen, Qnil); - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_ICONIFIED) + if (new_state & GDK_WINDOW_STATE_ICONIFIED) SET_FRAME_ICONIFIED (f, true); else { @@ -5464,8 +5474,7 @@ window_state_event (GtkWidget *widget, SET_FRAME_ICONIFIED (f, false); } - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_STICKY) + if (new_state & GDK_WINDOW_STATE_STICKY) store_frame_param (f, Qsticky, Qt); else store_frame_param (f, Qsticky, Qnil); -- 2.36.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-06-03 18:42 ` Florian Rommel @ 2022-06-04 1:17 ` Po Lu 2022-06-04 14:03 ` Florian Rommel 0 siblings, 1 reply; 21+ messages in thread From: Po Lu @ 2022-06-04 1:17 UTC (permalink / raw) To: Florian Rommel; +Cc: emacs-devel Florian Rommel <mail@florommel.de> writes: > + GTK_REQUIRED=3.22 Shouldn't this be "3.22.23"? > +@code{fullboth}, or @code{maximized}.@footnote{On PGTK frames, setting > +the values @code{fullheight} and @code{fullwidth} has no effect, only > +reading is supported.} A @dfn{fullwidth} frame is as wide as > +possible, a @dfn{fullheight} frame is as tall as possible, and a I think the "only reading is supported" part is redundant. > ++++ > +** Building Emacs with pure GTK now requires GTK 3.22. No need: PGTK was introduced in Emacs 29, so please update the NEWS entry announcing its addition instead. Otherwise, LGTM. Thanks. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-06-04 1:17 ` Po Lu @ 2022-06-04 14:03 ` Florian Rommel 2022-06-05 1:06 ` Po Lu 0 siblings, 1 reply; 21+ messages in thread From: Florian Rommel @ 2022-06-04 14:03 UTC (permalink / raw) To: Po Lu; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 114 bytes --] On Sat, 2022-06-04 at 09:17 +0800, Po Lu wrote: > Otherwise, LGTM. Thanks. Okay, thanks for the patience. [-- Attachment #2: v4-0001-pgtk-Add-support-for-fullscreen-values-fullheight.patch --] [-- Type: text/x-patch, Size: 5678 bytes --] From 2f2b562054a4913995d517b73f189cc2055bd1f4 Mon Sep 17 00:00:00 2001 From: Florian Rommel <mail@florommel.de> Date: Fri, 3 Jun 2022 03:03:03 +0200 Subject: [PATCH v4] pgtk: Add support for fullscreen values fullheight and fullwidth * src/pgtkterm.c (window_state_event): Support values fullheight and fullwidth for the fullscreen frame-parameter * doc/lispref/frames.texi (Size Parameters): Document inability to actively set hullheight/fullwidth for PGTK frames * configure.ac: Bump GTK version for PGTK * etc/NEWS: Change GTK version in PGTK announcement --- configure.ac | 2 +- doc/lispref/frames.texi | 19 ++++++++++--------- etc/NEWS | 2 +- src/pgtkterm.c | 27 ++++++++++++++++++--------- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/configure.ac b/configure.ac index 313a1436b5..76244a5096 100644 --- a/configure.ac +++ b/configure.ac @@ -2865,7 +2865,7 @@ AC_DEFUN if test "${window_system}" = "x11"; then GTK_REQUIRED=3.10 else - GTK_REQUIRED=3.20 + GTK_REQUIRED=3.22.23 fi GTK_MODULES="gtk+-3.0 >= $GTK_REQUIRED glib-2.0 >= $GLIB_REQUIRED" diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 9f7666ac63..bbd025d6dd 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -1746,15 +1746,16 @@ Size Parameters @item fullscreen This parameter specifies whether to maximize the frame's width, height or both. Its value can be @code{fullwidth}, @code{fullheight}, -@code{fullboth}, or @code{maximized}. A @dfn{fullwidth} frame is as -wide as possible, a @dfn{fullheight} frame is as tall as possible, and -a @dfn{fullboth} frame is both as wide and as tall as possible. A -@dfn{maximized} frame is like a ``fullboth'' frame, except that it -usually keeps its title bar and the buttons for resizing and closing -the frame. Also, maximized frames typically avoid hiding any task bar -or panels displayed on the desktop. A ``fullboth'' frame, on the -other hand, usually omits the title bar and occupies the entire -available screen space. +@code{fullboth}, or @code{maximized}.@footnote{On PGTK frames, setting +the values @code{fullheight} and @code{fullwidth} has no effect.} A +@dfn{fullwidth} frame is as wide as possible, a @dfn{fullheight} frame +is as tall as possible, and a @dfn{fullboth} frame is both as wide and +as tall as possible. A @dfn{maximized} frame is like a ``fullboth'' +frame, except that it usually keeps its title bar and the buttons for +resizing and closing the frame. Also, maximized frames typically +avoid hiding any task bar or panels displayed on the desktop. A +``fullboth'' frame, on the other hand, usually omits the title bar and +occupies the entire available screen space. Full-height and full-width frames are more similar to maximized frames in this regard. However, these typically display an external diff --git a/etc/NEWS b/etc/NEWS index 850854edfa..fb37082a14 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -70,7 +70,7 @@ support from Lisp programs. +++ ** Emacs now supports being built with pure GTK. -To use this option, make sure the GTK 3 (version 3.20 or later) and +To use this option, make sure the GTK 3 (version 3.22.23 or later) and Cairo development files are installed, and configure Emacs with the option '--with-pgtk'. Unlike the default X and GTK build, the resulting Emacs binary will work on any underlying window system diff --git a/src/pgtkterm.c b/src/pgtkterm.c index da958a6664..b816deba0a 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -5420,15 +5420,18 @@ window_state_event (GtkWidget *widget, gpointer *user_data) { struct frame *f = pgtk_any_window_to_frame (event->window_state.window); + GdkWindowState new_state; union buffered_input_event inev; + new_state = event->window_state.new_window_state; + EVENT_INIT (inev.ie); inev.ie.kind = NO_EVENT; inev.ie.arg = Qnil; if (f) { - if (event->window_state.new_window_state & GDK_WINDOW_STATE_FOCUSED) + if (new_state & GDK_WINDOW_STATE_FOCUSED) { if (FRAME_ICONIFIED_P (f)) { @@ -5444,17 +5447,24 @@ window_state_event (GtkWidget *widget, } } - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_FULLSCREEN) + if (new_state & GDK_WINDOW_STATE_FULLSCREEN) store_frame_param (f, Qfullscreen, Qfullboth); - else if (event->window_state.new_window_state - & GDK_WINDOW_STATE_MAXIMIZED) + else if (new_state & GDK_WINDOW_STATE_MAXIMIZED) store_frame_param (f, Qfullscreen, Qmaximized); + else if ((new_state & GDK_WINDOW_STATE_TOP_TILED) + && (new_state & GDK_WINDOW_STATE_BOTTOM_TILED) + && !(new_state & GDK_WINDOW_STATE_TOP_RESIZABLE) + && !(new_state & GDK_WINDOW_STATE_BOTTOM_RESIZABLE)) + store_frame_param (f, Qfullscreen, Qfullheight); + else if ((new_state & GDK_WINDOW_STATE_LEFT_TILED) + && (new_state & GDK_WINDOW_STATE_RIGHT_TILED) + && !(new_state & GDK_WINDOW_STATE_LEFT_RESIZABLE) + && !(new_state & GDK_WINDOW_STATE_RIGHT_RESIZABLE)) + store_frame_param (f, Qfullscreen, Qfullwidth); else store_frame_param (f, Qfullscreen, Qnil); - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_ICONIFIED) + if (new_state & GDK_WINDOW_STATE_ICONIFIED) SET_FRAME_ICONIFIED (f, true); else { @@ -5464,8 +5474,7 @@ window_state_event (GtkWidget *widget, SET_FRAME_ICONIFIED (f, false); } - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_STICKY) + if (new_state & GDK_WINDOW_STATE_STICKY) store_frame_param (f, Qsticky, Qt); else store_frame_param (f, Qsticky, Qnil); -- 2.36.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-06-04 14:03 ` Florian Rommel @ 2022-06-05 1:06 ` Po Lu 2022-06-05 5:41 ` Eli Zaretskii 0 siblings, 1 reply; 21+ messages in thread From: Po Lu @ 2022-06-05 1:06 UTC (permalink / raw) To: Florian Rommel; +Cc: emacs-devel Florian Rommel <mail@florommel.de> writes: > Okay, thanks for the patience. Thanks. I forgot if you have copyright papers. Once Eli or Lars say they are in order, I will install this patch, though with changes to the commit message format. > From 2f2b562054a4913995d517b73f189cc2055bd1f4 Mon Sep 17 00:00:00 2001 > From: Florian Rommel <mail@florommel.de> > Date: Fri, 3 Jun 2022 03:03:03 +0200 > Subject: [PATCH v4] pgtk: Add support for fullscreen values fullheight and > fullwidth > > * src/pgtkterm.c (window_state_event): Support values fullheight and > fullwidth for the fullscreen frame-parameter > * doc/lispref/frames.texi (Size Parameters): Document inability to > actively set hullheight/fullwidth for PGTK frames > * configure.ac: Bump GTK version for PGTK > * etc/NEWS: Change GTK version in PGTK announcement > --- > configure.ac | 2 +- > doc/lispref/frames.texi | 19 ++++++++++--------- > etc/NEWS | 2 +- > src/pgtkterm.c | 27 ++++++++++++++++++--------- > 4 files changed, 30 insertions(+), 20 deletions(-) > > diff --git a/configure.ac b/configure.ac > index 313a1436b5..76244a5096 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -2865,7 +2865,7 @@ AC_DEFUN > if test "${window_system}" = "x11"; then > GTK_REQUIRED=3.10 > else > - GTK_REQUIRED=3.20 > + GTK_REQUIRED=3.22.23 > fi > GTK_MODULES="gtk+-3.0 >= $GTK_REQUIRED glib-2.0 >= $GLIB_REQUIRED" > > diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi > index 9f7666ac63..bbd025d6dd 100644 > --- a/doc/lispref/frames.texi > +++ b/doc/lispref/frames.texi > @@ -1746,15 +1746,16 @@ Size Parameters > @item fullscreen > This parameter specifies whether to maximize the frame's width, height > or both. Its value can be @code{fullwidth}, @code{fullheight}, > -@code{fullboth}, or @code{maximized}. A @dfn{fullwidth} frame is as > -wide as possible, a @dfn{fullheight} frame is as tall as possible, and > -a @dfn{fullboth} frame is both as wide and as tall as possible. A > -@dfn{maximized} frame is like a ``fullboth'' frame, except that it > -usually keeps its title bar and the buttons for resizing and closing > -the frame. Also, maximized frames typically avoid hiding any task bar > -or panels displayed on the desktop. A ``fullboth'' frame, on the > -other hand, usually omits the title bar and occupies the entire > -available screen space. > +@code{fullboth}, or @code{maximized}.@footnote{On PGTK frames, setting > +the values @code{fullheight} and @code{fullwidth} has no effect.} A > +@dfn{fullwidth} frame is as wide as possible, a @dfn{fullheight} frame > +is as tall as possible, and a @dfn{fullboth} frame is both as wide and > +as tall as possible. A @dfn{maximized} frame is like a ``fullboth'' > +frame, except that it usually keeps its title bar and the buttons for > +resizing and closing the frame. Also, maximized frames typically > +avoid hiding any task bar or panels displayed on the desktop. A > +``fullboth'' frame, on the other hand, usually omits the title bar and > +occupies the entire available screen space. > > Full-height and full-width frames are more similar to maximized > frames in this regard. However, these typically display an external > diff --git a/etc/NEWS b/etc/NEWS > index 850854edfa..fb37082a14 100644 > --- a/etc/NEWS > +++ b/etc/NEWS > @@ -70,7 +70,7 @@ support from Lisp programs. > > +++ > ** Emacs now supports being built with pure GTK. > -To use this option, make sure the GTK 3 (version 3.20 or later) and > +To use this option, make sure the GTK 3 (version 3.22.23 or later) and > Cairo development files are installed, and configure Emacs with the > option '--with-pgtk'. Unlike the default X and GTK build, the > resulting Emacs binary will work on any underlying window system > diff --git a/src/pgtkterm.c b/src/pgtkterm.c > index da958a6664..b816deba0a 100644 > --- a/src/pgtkterm.c > +++ b/src/pgtkterm.c > @@ -5420,15 +5420,18 @@ window_state_event (GtkWidget *widget, > gpointer *user_data) > { > struct frame *f = pgtk_any_window_to_frame (event->window_state.window); > + GdkWindowState new_state; > union buffered_input_event inev; > > + new_state = event->window_state.new_window_state; > + > EVENT_INIT (inev.ie); > inev.ie.kind = NO_EVENT; > inev.ie.arg = Qnil; > > if (f) > { > - if (event->window_state.new_window_state & GDK_WINDOW_STATE_FOCUSED) > + if (new_state & GDK_WINDOW_STATE_FOCUSED) > { > if (FRAME_ICONIFIED_P (f)) > { > @@ -5444,17 +5447,24 @@ window_state_event (GtkWidget *widget, > } > } > > - if (event->window_state.new_window_state > - & GDK_WINDOW_STATE_FULLSCREEN) > + if (new_state & GDK_WINDOW_STATE_FULLSCREEN) > store_frame_param (f, Qfullscreen, Qfullboth); > - else if (event->window_state.new_window_state > - & GDK_WINDOW_STATE_MAXIMIZED) > + else if (new_state & GDK_WINDOW_STATE_MAXIMIZED) > store_frame_param (f, Qfullscreen, Qmaximized); > + else if ((new_state & GDK_WINDOW_STATE_TOP_TILED) > + && (new_state & GDK_WINDOW_STATE_BOTTOM_TILED) > + && !(new_state & GDK_WINDOW_STATE_TOP_RESIZABLE) > + && !(new_state & GDK_WINDOW_STATE_BOTTOM_RESIZABLE)) > + store_frame_param (f, Qfullscreen, Qfullheight); > + else if ((new_state & GDK_WINDOW_STATE_LEFT_TILED) > + && (new_state & GDK_WINDOW_STATE_RIGHT_TILED) > + && !(new_state & GDK_WINDOW_STATE_LEFT_RESIZABLE) > + && !(new_state & GDK_WINDOW_STATE_RIGHT_RESIZABLE)) > + store_frame_param (f, Qfullscreen, Qfullwidth); > else > store_frame_param (f, Qfullscreen, Qnil); > > - if (event->window_state.new_window_state > - & GDK_WINDOW_STATE_ICONIFIED) > + if (new_state & GDK_WINDOW_STATE_ICONIFIED) > SET_FRAME_ICONIFIED (f, true); > else > { > @@ -5464,8 +5474,7 @@ window_state_event (GtkWidget *widget, > SET_FRAME_ICONIFIED (f, false); > } > > - if (event->window_state.new_window_state > - & GDK_WINDOW_STATE_STICKY) > + if (new_state & GDK_WINDOW_STATE_STICKY) > store_frame_param (f, Qsticky, Qt); > else > store_frame_param (f, Qsticky, Qnil); ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-06-05 1:06 ` Po Lu @ 2022-06-05 5:41 ` Eli Zaretskii 2022-06-05 10:41 ` Florian Rommel 0 siblings, 1 reply; 21+ messages in thread From: Eli Zaretskii @ 2022-06-05 5:41 UTC (permalink / raw) To: Po Lu; +Cc: mail, emacs-devel > From: Po Lu <luangruo@yahoo.com> > Cc: emacs-devel@gnu.org > Date: Sun, 05 Jun 2022 09:06:04 +0800 > > Florian Rommel <mail@florommel.de> writes: > > > Okay, thanks for the patience. > > Thanks. I forgot if you have copyright papers. Once Eli or Lars say > they are in order, I will install this patch, though with changes to the > commit message format. I don't see Florian's assignment on file, and don't see any indication of his paperwork in my archives. Florian, did you ever assign to the FSF your copyright for Emacs changes? If so, when was that? ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-06-05 5:41 ` Eli Zaretskii @ 2022-06-05 10:41 ` Florian Rommel 2022-07-03 11:08 ` Florian Rommel 0 siblings, 1 reply; 21+ messages in thread From: Florian Rommel @ 2022-06-05 10:41 UTC (permalink / raw) To: Eli Zaretskii, Po Lu; +Cc: emacs-devel On Sun, 2022-06-05 at 08:41 +0300, Eli Zaretskii wrote: > > I don't see Florian's assignment on file, and don't see any > indication > of his paperwork in my archives. Florian, did you ever assign to the > FSF your copyright for Emacs changes? If so, when was that? No, not yet. I just started the assignment process. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-06-05 10:41 ` Florian Rommel @ 2022-07-03 11:08 ` Florian Rommel 2022-07-03 11:37 ` Po Lu 0 siblings, 1 reply; 21+ messages in thread From: Florian Rommel @ 2022-07-03 11:08 UTC (permalink / raw) To: Eli Zaretskii, Po Lu; +Cc: emacs-devel On Sun, 2022-06-05 at 12:41 +0200, Florian Rommel wrote: > On Sun, 2022-06-05 at 08:41 +0300, Eli Zaretskii wrote: > > > > I don't see Florian's assignment on file, and don't see any > > indication > > of his paperwork in my archives. Florian, did you ever assign to the > > FSF your copyright for Emacs changes? If so, when was that? > > No, not yet. I just started the assignment process. > My copyright assignment is finally complete. The patch still applies and works on master. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-07-03 11:08 ` Florian Rommel @ 2022-07-03 11:37 ` Po Lu 2022-07-03 11:39 ` Florian Rommel 2022-07-03 13:17 ` Eli Zaretskii 0 siblings, 2 replies; 21+ messages in thread From: Po Lu @ 2022-07-03 11:37 UTC (permalink / raw) To: Florian Rommel; +Cc: Eli Zaretskii, emacs-devel Florian Rommel <mail@florommel.de> writes: > My copyright assignment is finally complete. The patch still applies > and works on master. Thanks. Eli, can you confirm this? I can't find the patch in my inbox either -- could you please send it again? ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-07-03 11:37 ` Po Lu @ 2022-07-03 11:39 ` Florian Rommel 2022-07-04 2:20 ` Po Lu 2022-07-03 13:17 ` Eli Zaretskii 1 sibling, 1 reply; 21+ messages in thread From: Florian Rommel @ 2022-07-03 11:39 UTC (permalink / raw) To: Po Lu; +Cc: Eli Zaretskii, emacs-devel [-- Attachment #1: Type: text/plain, Size: 159 bytes --] On Sun, 2022-07-03 at 19:37 +0800, Po Lu wrote: > I can't find the patch in my inbox either -- could you please send it > again? I attached the patch. [-- Attachment #2: v4-0001-pgtk-Add-support-for-fullscreen-values-fullheight.patch --] [-- Type: text/x-patch, Size: 5678 bytes --] From 2f2b562054a4913995d517b73f189cc2055bd1f4 Mon Sep 17 00:00:00 2001 From: Florian Rommel <mail@florommel.de> Date: Fri, 3 Jun 2022 03:03:03 +0200 Subject: [PATCH v4] pgtk: Add support for fullscreen values fullheight and fullwidth * src/pgtkterm.c (window_state_event): Support values fullheight and fullwidth for the fullscreen frame-parameter * doc/lispref/frames.texi (Size Parameters): Document inability to actively set hullheight/fullwidth for PGTK frames * configure.ac: Bump GTK version for PGTK * etc/NEWS: Change GTK version in PGTK announcement --- configure.ac | 2 +- doc/lispref/frames.texi | 19 ++++++++++--------- etc/NEWS | 2 +- src/pgtkterm.c | 27 ++++++++++++++++++--------- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/configure.ac b/configure.ac index 313a1436b5..76244a5096 100644 --- a/configure.ac +++ b/configure.ac @@ -2865,7 +2865,7 @@ AC_DEFUN if test "${window_system}" = "x11"; then GTK_REQUIRED=3.10 else - GTK_REQUIRED=3.20 + GTK_REQUIRED=3.22.23 fi GTK_MODULES="gtk+-3.0 >= $GTK_REQUIRED glib-2.0 >= $GLIB_REQUIRED" diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 9f7666ac63..bbd025d6dd 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -1746,15 +1746,16 @@ Size Parameters @item fullscreen This parameter specifies whether to maximize the frame's width, height or both. Its value can be @code{fullwidth}, @code{fullheight}, -@code{fullboth}, or @code{maximized}. A @dfn{fullwidth} frame is as -wide as possible, a @dfn{fullheight} frame is as tall as possible, and -a @dfn{fullboth} frame is both as wide and as tall as possible. A -@dfn{maximized} frame is like a ``fullboth'' frame, except that it -usually keeps its title bar and the buttons for resizing and closing -the frame. Also, maximized frames typically avoid hiding any task bar -or panels displayed on the desktop. A ``fullboth'' frame, on the -other hand, usually omits the title bar and occupies the entire -available screen space. +@code{fullboth}, or @code{maximized}.@footnote{On PGTK frames, setting +the values @code{fullheight} and @code{fullwidth} has no effect.} A +@dfn{fullwidth} frame is as wide as possible, a @dfn{fullheight} frame +is as tall as possible, and a @dfn{fullboth} frame is both as wide and +as tall as possible. A @dfn{maximized} frame is like a ``fullboth'' +frame, except that it usually keeps its title bar and the buttons for +resizing and closing the frame. Also, maximized frames typically +avoid hiding any task bar or panels displayed on the desktop. A +``fullboth'' frame, on the other hand, usually omits the title bar and +occupies the entire available screen space. Full-height and full-width frames are more similar to maximized frames in this regard. However, these typically display an external diff --git a/etc/NEWS b/etc/NEWS index 850854edfa..fb37082a14 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -70,7 +70,7 @@ support from Lisp programs. +++ ** Emacs now supports being built with pure GTK. -To use this option, make sure the GTK 3 (version 3.20 or later) and +To use this option, make sure the GTK 3 (version 3.22.23 or later) and Cairo development files are installed, and configure Emacs with the option '--with-pgtk'. Unlike the default X and GTK build, the resulting Emacs binary will work on any underlying window system diff --git a/src/pgtkterm.c b/src/pgtkterm.c index da958a6664..b816deba0a 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -5420,15 +5420,18 @@ window_state_event (GtkWidget *widget, gpointer *user_data) { struct frame *f = pgtk_any_window_to_frame (event->window_state.window); + GdkWindowState new_state; union buffered_input_event inev; + new_state = event->window_state.new_window_state; + EVENT_INIT (inev.ie); inev.ie.kind = NO_EVENT; inev.ie.arg = Qnil; if (f) { - if (event->window_state.new_window_state & GDK_WINDOW_STATE_FOCUSED) + if (new_state & GDK_WINDOW_STATE_FOCUSED) { if (FRAME_ICONIFIED_P (f)) { @@ -5444,17 +5447,24 @@ window_state_event (GtkWidget *widget, } } - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_FULLSCREEN) + if (new_state & GDK_WINDOW_STATE_FULLSCREEN) store_frame_param (f, Qfullscreen, Qfullboth); - else if (event->window_state.new_window_state - & GDK_WINDOW_STATE_MAXIMIZED) + else if (new_state & GDK_WINDOW_STATE_MAXIMIZED) store_frame_param (f, Qfullscreen, Qmaximized); + else if ((new_state & GDK_WINDOW_STATE_TOP_TILED) + && (new_state & GDK_WINDOW_STATE_BOTTOM_TILED) + && !(new_state & GDK_WINDOW_STATE_TOP_RESIZABLE) + && !(new_state & GDK_WINDOW_STATE_BOTTOM_RESIZABLE)) + store_frame_param (f, Qfullscreen, Qfullheight); + else if ((new_state & GDK_WINDOW_STATE_LEFT_TILED) + && (new_state & GDK_WINDOW_STATE_RIGHT_TILED) + && !(new_state & GDK_WINDOW_STATE_LEFT_RESIZABLE) + && !(new_state & GDK_WINDOW_STATE_RIGHT_RESIZABLE)) + store_frame_param (f, Qfullscreen, Qfullwidth); else store_frame_param (f, Qfullscreen, Qnil); - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_ICONIFIED) + if (new_state & GDK_WINDOW_STATE_ICONIFIED) SET_FRAME_ICONIFIED (f, true); else { @@ -5464,8 +5474,7 @@ window_state_event (GtkWidget *widget, SET_FRAME_ICONIFIED (f, false); } - if (event->window_state.new_window_state - & GDK_WINDOW_STATE_STICKY) + if (new_state & GDK_WINDOW_STATE_STICKY) store_frame_param (f, Qsticky, Qt); else store_frame_param (f, Qsticky, Qnil); -- 2.36.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-07-03 11:39 ` Florian Rommel @ 2022-07-04 2:20 ` Po Lu 2022-07-07 18:52 ` Florian Rommel 0 siblings, 1 reply; 21+ messages in thread From: Po Lu @ 2022-07-04 2:20 UTC (permalink / raw) To: Florian Rommel; +Cc: Eli Zaretskii, emacs-devel Florian Rommel <mail@florommel.de> writes: > On Sun, 2022-07-03 at 19:37 +0800, Po Lu wrote: >> I can't find the patch in my inbox either -- could you please send it >> again? > > I attached the patch. Thanks, now installed. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-07-04 2:20 ` Po Lu @ 2022-07-07 18:52 ` Florian Rommel 2022-07-08 2:30 ` Po Lu 0 siblings, 1 reply; 21+ messages in thread From: Florian Rommel @ 2022-07-07 18:52 UTC (permalink / raw) To: Po Lu; +Cc: Eli Zaretskii, emacs-devel [-- Attachment #1: Type: text/plain, Size: 729 bytes --] On Mon, 2022-07-04 at 10:20 +0800, Po Lu wrote: > Thanks, now installed. Unfortunately, I just discrovered that the change causes a problem with `toggle-frame-fullscreen'. `toggle-frame-fullscreen' saves the current window state and tries to restore it. Because GTK does not support setting fullheight or fullwidth (and we therefore ignore these values in (set-frame-parameter 'fullscreen)), we cannot change back once the fullscreen state changes from 'fullheight or 'fullwidth to 'fullboth. Apart from reverting the commit, we could fix this by setting the 'fullscreen parameter to nil and restoring the frame (this is the closest to fullheight and fullwidth we can get with gtk), see the attached patch. [-- Attachment #2: 0001-Fix-setting-fullscreen-frame-parameter-on-PGTK.patch --] [-- Type: text/x-patch, Size: 3327 bytes --] From 19a7e6ee3dfd94f59e58cf2032be91c7faff5b60 Mon Sep 17 00:00:00 2001 From: Florian Rommel <mail@florommel.de> Date: Thu, 7 Jul 2022 19:37:19 +0200 Subject: [PATCH] Fix setting fullscreen frame parameter on PGTK This fixes a problem with `toggle-frame-fullscreen' which tries to reset the previous value of the frame-parameter. * src/pgtkterm.c (set_fullscreen_state): Set fullscreen parameter to nil for fullheight and fullwidth. * doc/lispref/frames.texi (Size Parameters): Update documentation. --- doc/lispref/frames.texi | 19 ++++++++++--------- src/pgtkterm.c | 9 ++++----- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index ed56fa777d..52886ada90 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -1747,15 +1747,16 @@ Size Parameters This parameter specifies whether to maximize the frame's width, height or both. Its value can be @code{fullwidth}, @code{fullheight}, @code{fullboth}, or @code{maximized}.@footnote{On PGTK frames, setting -the values @code{fullheight} and @code{fullwidth} has no effect.} A -@dfn{fullwidth} frame is as wide as possible, a @dfn{fullheight} frame -is as tall as possible, and a @dfn{fullboth} frame is both as wide and -as tall as possible. A @dfn{maximized} frame is like a ``fullboth'' -frame, except that it usually keeps its title bar and the buttons for -resizing and closing the frame. Also, maximized frames typically -avoid hiding any task bar or panels displayed on the desktop. A -``fullboth'' frame, on the other hand, usually omits the title bar and -occupies the entire available screen space. +the values @code{fullheight} and @code{fullwidth} resets the parameter +to nil.} A @dfn{fullwidth} frame is as wide as possible, a +@dfn{fullheight} frame is as tall as possible, and a @dfn{fullboth} +frame is both as wide and as tall as possible. A @dfn{maximized} +frame is like a ``fullboth'' frame, except that it usually keeps its +title bar and the buttons for resizing and closing the frame. Also, +maximized frames typically avoid hiding any task bar or panels +displayed on the desktop. A ``fullboth'' frame, on the other hand, +usually omits the title bar and occupies the entire available screen +space. Full-height and full-width frames are more similar to maximized frames in this regard. However, these typically display an external diff --git a/src/pgtkterm.c b/src/pgtkterm.c index b283cef7cd..8e6985df35 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -4401,6 +4401,10 @@ set_fullscreen_state (struct frame *f) GtkWindow *widget = GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)); switch (f->want_fullscreen) { + case FULLSCREEN_WIDTH: + case FULLSCREEN_HEIGHT: + /* Not supported by gtk. + Set it to nil instead, to not break `toggle-frame-fullscreen' */ case FULLSCREEN_NONE: gtk_window_unfullscreen (widget); gtk_window_unmaximize (widget); @@ -4418,11 +4422,6 @@ set_fullscreen_state (struct frame *f) gtk_window_maximize (widget); store_frame_param (f, Qfullscreen, Qmaximized); break; - - case FULLSCREEN_WIDTH: - case FULLSCREEN_HEIGHT: - /* Not supported by gtk. Ignore them. */ - break; } f->want_fullscreen = FULLSCREEN_NONE; -- 2.37.0 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-07-07 18:52 ` Florian Rommel @ 2022-07-08 2:30 ` Po Lu 2022-07-08 5:49 ` Eli Zaretskii 0 siblings, 1 reply; 21+ messages in thread From: Po Lu @ 2022-07-08 2:30 UTC (permalink / raw) To: Florian Rommel; +Cc: Eli Zaretskii, emacs-devel Florian Rommel <mail@florommel.de> writes: > On Mon, 2022-07-04 at 10:20 +0800, Po Lu wrote: >> Thanks, now installed. > > Unfortunately, I just discrovered that the change causes a problem with > `toggle-frame-fullscreen'. > > `toggle-frame-fullscreen' saves the current window state and tries to > restore it. Because GTK does not support setting fullheight or > fullwidth (and we therefore ignore these values in (set-frame-parameter > 'fullscreen)), we cannot change back once the fullscreen state changes > from 'fullheight or 'fullwidth to 'fullboth. > > Apart from reverting the commit, we could fix this by setting the > 'fullscreen parameter to nil and restoring the frame (this is the > closest to fullheight and fullwidth we can get with gtk), see the > attached patch. Actually, I think we need a more general mechanism to report which `fullscreen' states can be set, and then to use that in `toggle-frame-fullscreen' (and other places that set the `fullscreen-restore' frame parameter.) So this: (if (memq fullscreen-restore '(maximized fullheight fullwidth)) would probably become (if (display-supports-fullscreen-p fullscreen-restore) WDYT? ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-07-08 2:30 ` Po Lu @ 2022-07-08 5:49 ` Eli Zaretskii 2022-07-08 6:34 ` Po Lu 0 siblings, 1 reply; 21+ messages in thread From: Eli Zaretskii @ 2022-07-08 5:49 UTC (permalink / raw) To: Po Lu; +Cc: mail, emacs-devel > From: Po Lu <luangruo@yahoo.com> > Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org > Date: Fri, 08 Jul 2022 10:30:16 +0800 > > Actually, I think we need a more general mechanism to report which > `fullscreen' states can be set, and then to use that in > `toggle-frame-fullscreen' (and other places that set the > `fullscreen-restore' frame parameter.) > > So this: > > (if (memq fullscreen-restore '(maximized fullheight fullwidth)) > > would probably become > > (if (display-supports-fullscreen-p fullscreen-restore) > > WDYT? If this is useful and makes the code clearer and easier to maintain, sure. But the display-*-p predicates need to be implemented for all the supported frame types, not just for PGTK and X. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-07-08 5:49 ` Eli Zaretskii @ 2022-07-08 6:34 ` Po Lu 2022-07-08 7:10 ` Eli Zaretskii 0 siblings, 1 reply; 21+ messages in thread From: Po Lu @ 2022-07-08 6:34 UTC (permalink / raw) To: Eli Zaretskii; +Cc: mail, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: > If this is useful and makes the code clearer and easier to maintain, > sure. But the display-*-p predicates need to be implemented for all > the supported frame types, not just for PGTK and X. Indeed, but on most other platforms we know beforehand which fullscreen parameters are supported, while on X it's actually necessary to ask the window manager first. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-07-08 6:34 ` Po Lu @ 2022-07-08 7:10 ` Eli Zaretskii 2022-07-08 7:37 ` Po Lu 0 siblings, 1 reply; 21+ messages in thread From: Eli Zaretskii @ 2022-07-08 7:10 UTC (permalink / raw) To: Po Lu; +Cc: mail, emacs-devel > From: Po Lu <luangruo@yahoo.com> > Cc: mail@florommel.de, emacs-devel@gnu.org > Date: Fri, 08 Jul 2022 14:34:43 +0800 > > Eli Zaretskii <eliz@gnu.org> writes: > > > If this is useful and makes the code clearer and easier to maintain, > > sure. But the display-*-p predicates need to be implemented for all > > the supported frame types, not just for PGTK and X. > > Indeed, but on most other platforms we know beforehand which fullscreen > parameters are supported, while on X it's actually necessary to ask the > window manager first. AFAIU, that just means the implementation on other platforms will be almost trivial. My point, though, is that it must have an implementation for all frame types, no matter how trivial, or else the predicate isn't worth having. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-07-08 7:10 ` Eli Zaretskii @ 2022-07-08 7:37 ` Po Lu 0 siblings, 0 replies; 21+ messages in thread From: Po Lu @ 2022-07-08 7:37 UTC (permalink / raw) To: Eli Zaretskii; +Cc: mail, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: > AFAIU, that just means the implementation on other platforms will be > almost trivial. That was the point I tried to make. > My point, though, is that it must have an implementation for all frame > types, no matter how trivial, or else the predicate isn't worth > having. Yes, thanks. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Support fullscreen values fullheight and fullwidth on pgtk 2022-07-03 11:37 ` Po Lu 2022-07-03 11:39 ` Florian Rommel @ 2022-07-03 13:17 ` Eli Zaretskii 1 sibling, 0 replies; 21+ messages in thread From: Eli Zaretskii @ 2022-07-03 13:17 UTC (permalink / raw) To: Po Lu; +Cc: mail, emacs-devel > From: Po Lu <luangruo@yahoo.com> > Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org > Date: Sun, 03 Jul 2022 19:37:36 +0800 > > Florian Rommel <mail@florommel.de> writes: > > > My copyright assignment is finally complete. The patch still applies > > and works on master. > > Thanks. Eli, can you confirm this? The assignment is not yet on file, but I received email from the copyright clerk saying that the assignment process is complete. So I think we are good in that department. ^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2022-07-08 7:37 UTC | newest] Thread overview: 21+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-06-01 14:57 Support fullscreen values fullheight and fullwidth on pgtk Florian Rommel 2022-06-02 6:00 ` Po Lu 2022-06-03 8:11 ` Florian Rommel 2022-06-03 8:23 ` Po Lu 2022-06-03 18:42 ` Florian Rommel 2022-06-04 1:17 ` Po Lu 2022-06-04 14:03 ` Florian Rommel 2022-06-05 1:06 ` Po Lu 2022-06-05 5:41 ` Eli Zaretskii 2022-06-05 10:41 ` Florian Rommel 2022-07-03 11:08 ` Florian Rommel 2022-07-03 11:37 ` Po Lu 2022-07-03 11:39 ` Florian Rommel 2022-07-04 2:20 ` Po Lu 2022-07-07 18:52 ` Florian Rommel 2022-07-08 2:30 ` Po Lu 2022-07-08 5:49 ` Eli Zaretskii 2022-07-08 6:34 ` Po Lu 2022-07-08 7:10 ` Eli Zaretskii 2022-07-08 7:37 ` Po Lu 2022-07-03 13:17 ` Eli Zaretskii
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).