From 2e5c742f572c00d11263520d1a97f4f3ca2addbd Mon Sep 17 00:00:00 2001 From: Florian Rommel 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. * 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