emacs-devel
[Top][All Lists]
Advanced

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

Re: Support fullscreen values fullheight and fullwidth on pgtk


From: Po Lu
Subject: Re: Support fullscreen values fullheight and fullwidth on pgtk
Date: Sun, 05 Jun 2022 09:06:04 +0800
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.91 (gnu/linux)

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);


reply via email to

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