From 9cb6b7b21b40fc1491c488641446b75427ee88a8 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 3 Nov 2020 06:56:11 -0500 Subject: [PATCH] import gnome-session-3.28.1-10.el8 --- ...sion-selector-show-cursor-explicitly.patch | 124 ++++++++++++++++++ SOURCES/com.redhat.Kiosk.Script.desktop | 5 + .../com.redhat.Kiosk.WindowManager.desktop | 13 ++ SOURCES/com.redhat.Kiosk.desktop | 6 + SOURCES/redhat-kiosk | 26 ++++ SOURCES/redhat-kiosk.session | 3 + SPECS/gnome-session.spec | 46 ++++++- 7 files changed, 220 insertions(+), 3 deletions(-) create mode 100644 SOURCES/0001-session-selector-show-cursor-explicitly.patch create mode 100644 SOURCES/com.redhat.Kiosk.Script.desktop create mode 100644 SOURCES/com.redhat.Kiosk.WindowManager.desktop create mode 100644 SOURCES/com.redhat.Kiosk.desktop create mode 100755 SOURCES/redhat-kiosk create mode 100644 SOURCES/redhat-kiosk.session diff --git a/SOURCES/0001-session-selector-show-cursor-explicitly.patch b/SOURCES/0001-session-selector-show-cursor-explicitly.patch new file mode 100644 index 0000000..2977d81 --- /dev/null +++ b/SOURCES/0001-session-selector-show-cursor-explicitly.patch @@ -0,0 +1,124 @@ +From 06271eea2a12970fbe73b3d3f2c6ae5d79339379 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 29 Jun 2020 15:15:48 -0400 +Subject: [PATCH] session-selector: show cursor explicitly + +Normally the window manager would show the cursor at start up, but +the session selector runs when no window manager is present. + +This commit makes the session selector explicitly set a cursor, so +users can interact with the dialog using the mouse. +--- + tools/gnome-session-selector.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/tools/gnome-session-selector.c b/tools/gnome-session-selector.c +index 71892c43..9225639e 100644 +--- a/tools/gnome-session-selector.c ++++ b/tools/gnome-session-selector.c +@@ -594,60 +594,61 @@ auto_save_next_session_if_needed (void) + static int + compare_sessions (GtkTreeModel *model, + GtkTreeIter *a, + GtkTreeIter *b, + gpointer data) + { + char *name_a, *name_b; + int result; + + gtk_tree_model_get (model, a, 0, &name_a, -1); + gtk_tree_model_get (model, b, 0, &name_b, -1); + + result = g_utf8_collate (name_a, name_b); + + g_free (name_a); + g_free (name_b); + + return result; + } + + static void + on_map (GtkWidget *widget, + gpointer data) + { + gdk_window_focus (gtk_widget_get_window (widget), GDK_CURRENT_TIME); + } + + int + main (int argc, char *argv[]) + { ++ GdkCursor *cursor; + GtkWidget *window; + GtkWidget *widget; + GtkCellRenderer *cell; + GtkTreeViewColumn *column; + GtkTreeSelection *selection; + GError *error; + + if (getenv ("SESSION_MANAGER") != NULL) + return 1; + + gtk_init (&argc, &argv); + if (argc > 1) { + g_print ("create and select session\n"); + if (!create_and_select_session (argv[1])) + return 1; + else + return 0; + } + + builder = gtk_builder_new (); + gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE); + + error = NULL; + if (!gtk_builder_add_from_file (builder, GTKBUILDER_DIR "/" "session-selector.ui", &error)) { + g_warning ("Could not load file 'session-selector.ui': %s", error->message); + exit (1); + } + + window = (GtkWidget *) gtk_builder_get_object (builder, "main-window"); + +@@ -663,36 +664,40 @@ main (int argc, char *argv[]) + session_list = (GtkWidget *) gtk_builder_get_object (builder, "session-list"); + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (session_list)); + gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); + + populate_session_list (session_list); + + cell = gtk_cell_renderer_text_new (); + g_signal_connect (cell, "edited", G_CALLBACK (on_row_edited), NULL); + + column = gtk_tree_view_column_new_with_attributes ("", cell, "text", 0, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (session_list), GTK_TREE_VIEW_COLUMN (column)); + + g_signal_connect (session_list, "row-activated", G_CALLBACK (on_row_activated), NULL); + + g_signal_connect (selection, "changed", + G_CALLBACK (on_selection_changed), NULL); + + widget = (GtkWidget *) gtk_builder_get_object (builder, "new-session"); + g_signal_connect (widget, "clicked", G_CALLBACK (on_new_session_clicked), NULL); + widget = (GtkWidget *) gtk_builder_get_object (builder, "remove-session"); + g_signal_connect (widget, "clicked", G_CALLBACK (on_remove_session_clicked), NULL); + widget = (GtkWidget *) gtk_builder_get_object (builder, "rename-session"); + g_signal_connect (widget, "clicked", G_CALLBACK (on_rename_session_clicked), NULL); + widget = (GtkWidget *) gtk_builder_get_object (builder, "continue-button"); + g_signal_connect (widget, "clicked", G_CALLBACK (on_continue_clicked), NULL); + + g_signal_connect (window, "map", G_CALLBACK (on_map), NULL); + gtk_widget_show (window); + ++ cursor = gdk_cursor_new_from_name (gtk_widget_get_display (window), ++ "default"); ++ gdk_window_set_cursor (gtk_widget_get_window (window), cursor); ++ + gtk_main (); + + auto_save_next_session_if_needed (); + + return 0; + } +-- +2.26.0 + diff --git a/SOURCES/com.redhat.Kiosk.Script.desktop b/SOURCES/com.redhat.Kiosk.Script.desktop new file mode 100644 index 0000000..8eb08d0 --- /dev/null +++ b/SOURCES/com.redhat.Kiosk.Script.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Name=Kiosk +Type=Application +Exec=redhat-kiosk + diff --git a/SOURCES/com.redhat.Kiosk.WindowManager.desktop b/SOURCES/com.redhat.Kiosk.WindowManager.desktop new file mode 100644 index 0000000..29aa7b3 --- /dev/null +++ b/SOURCES/com.redhat.Kiosk.WindowManager.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Type=Application +Name=Mutter +Comment=Window manager +Exec=/usr/bin/mutter +Categories=GNOME;GTK;Core; +OnlyShowIn=GNOME; +NoDisplay=true +X-GNOME-Autostart-Phase=DisplayServer +X-GNOME-Provides=windowmanager; +X-GNOME-Autostart-Notify=true +X-GNOME-AutoRestart=false +X-GNOME-HiddenUnderSystemd=true diff --git a/SOURCES/com.redhat.Kiosk.desktop b/SOURCES/com.redhat.Kiosk.desktop new file mode 100644 index 0000000..2684a46 --- /dev/null +++ b/SOURCES/com.redhat.Kiosk.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Name=Kiosk +Comment=Kiosk mode +Exec=/usr/bin/gnome-session --session=redhat-kiosk +DesktopNames=Red-Hat-Kiosk;GNOME; + diff --git a/SOURCES/redhat-kiosk b/SOURCES/redhat-kiosk new file mode 100755 index 0000000..154df7c --- /dev/null +++ b/SOURCES/redhat-kiosk @@ -0,0 +1,26 @@ +#!/bin/sh + +if [ ! -e ~/.local/bin/redhat-kiosk ]; then + mkdir -p ~/.local/bin ~/.config + cat > ~/.local/bin/redhat-kiosk << EOF +#!/bin/sh +# This script is located in ~/.local/bin. +# It's provided as an example script to show how +# the kiosk session works. At the moment, the script +# just starts a text editor open to itself, but it +# should get customized to instead start a full screen +# application designed for the kiosk deployment. +# The "while true" bit just makes sure the application gets +# restarted if it dies for whatever reason. + +while true; do + gedit ~/.local/bin/redhat-kiosk +done + +EOF + + chmod +x ~/.local/bin/redhat-kiosk + touch ~/.config/gnome-initial-setup-done +fi + +exec ~/.local/bin/redhat-kiosk "$@" diff --git a/SOURCES/redhat-kiosk.session b/SOURCES/redhat-kiosk.session new file mode 100644 index 0000000..7e7fdbe --- /dev/null +++ b/SOURCES/redhat-kiosk.session @@ -0,0 +1,3 @@ +[GNOME Session] +Name=Kiosk +RequiredComponents=com.redhat.Kiosk.WindowManager;com.redhat.Kiosk.Script; diff --git a/SPECS/gnome-session.spec b/SPECS/gnome-session.spec index bf1e840..43e49f7 100644 --- a/SPECS/gnome-session.spec +++ b/SPECS/gnome-session.spec @@ -9,7 +9,7 @@ Name: gnome-session Version: 3.28.1 -Release: 8%{?dist} +Release: 10%{?dist} Summary: GNOME session manager License: GPLv2+ @@ -17,6 +17,13 @@ URL: http://www.gnome.org Source0: http://download.gnome.org/sources/gnome-session/3.28/%{name}-%{version}.tar.xz Source1: gnome.desktop Source2: gnome-xorg.desktop +Source3: com.redhat.Kiosk.WindowManager.desktop +Source4: com.redhat.Kiosk.Script.desktop +Source5: com.redhat.Kiosk.desktop +Source6: redhat-kiosk.session +Source7: redhat-kiosk + +Patch0: 0001-gnome-session-don-t-validate-shell-before-using-it.patch # Blacklist NV30: https://bugzilla.redhat.com/show_bug.cgi?id=745202 Patch1: gnome-session-3.3.92-nv30.patch @@ -24,6 +31,8 @@ Patch3: gnome-session-3.6.2-swrast.patch # https://bugzilla.gnome.org/show_bug.cgi?id=772421 Patch4: 0001-check-accelerated-gles-Use-eglGetPlatformDisplay-EXT.patch +Patch10001: 0001-session-selector-show-cursor-explicitly.patch + BuildRequires: meson BuildRequires: gcc BuildRequires: pkgconfig(egl) @@ -64,8 +73,6 @@ Requires: dbus-x11 Conflicts: gnome-settings-daemon < 3.27.90 -Patch0: 0001-gnome-session-don-t-validate-shell-before-using-it.patch - %description gnome-session manages a GNOME desktop or GDM login session. It starts up the other core GNOME components and handles logout and saving the session. @@ -85,6 +92,17 @@ Requires: xorg-x11-server-Xwayland%{?_isa} %description wayland-session Desktop file to add GNOME on wayland to display manager session menu. +%package kiosk-session +Summary: Desktop file for mutter based kiosk session +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: mutter +Recommends: gedit +Recommends: gnome-terminal +Recommends: gnome-control-center + +%description kiosk-session +Desktop file to add basic session used for setting up kiosk applications. + %prep %autosetup -p1 @@ -105,6 +123,12 @@ cp $RPM_SOURCE_DIR/gnome.desktop $RPM_BUILD_ROOT%{_datadir}/wayland-sessions cp $RPM_SOURCE_DIR/gnome-xorg.desktop $RPM_BUILD_ROOT%{_datadir}/xsessions cp $RPM_SOURCE_DIR/gnome-xorg.desktop $RPM_BUILD_ROOT%{_datadir}/xsessions/gnome.desktop +install -D $RPM_SOURCE_DIR/com.redhat.Kiosk.WindowManager.desktop -t $RPM_BUILD_ROOT/%{_datadir}/applications +install -D $RPM_SOURCE_DIR/com.redhat.Kiosk.Script.desktop -t $RPM_BUILD_ROOT%{_datadir}/applications +install -D $RPM_SOURCE_DIR/com.redhat.Kiosk.desktop -t $RPM_BUILD_ROOT%{_datadir}/xsessions +install -D $RPM_SOURCE_DIR/redhat-kiosk.session -t $RPM_BUILD_ROOT%{_datadir}/gnome-session/sessions +install -D $RPM_SOURCE_DIR/redhat-kiosk -t $RPM_BUILD_ROOT%{_bindir} + %find_lang %{po_package} %ldconfig_scriptlets @@ -115,6 +139,13 @@ cp $RPM_SOURCE_DIR/gnome-xorg.desktop $RPM_BUILD_ROOT%{_datadir}/xsessions/gnome %files wayland-session %{_datadir}/wayland-sessions/* +%files kiosk-session +%{_datadir}/applications/com.redhat.Kiosk.WindowManager.desktop +%{_datadir}/applications/com.redhat.Kiosk.Script.desktop +%{_datadir}/xsessions/com.redhat.Kiosk.desktop +%{_datadir}/gnome-session/sessions/redhat-kiosk.session +%{_bindir}/redhat-kiosk + %files -f %{po_package}.lang %doc AUTHORS NEWS README %license COPYING @@ -131,6 +162,15 @@ cp $RPM_SOURCE_DIR/gnome-xorg.desktop $RPM_BUILD_ROOT%{_datadir}/xsessions/gnome %{_datadir}/glib-2.0/schemas/org.gnome.SessionManager.gschema.xml %changelog +* Mon Jun 29 2020 Ray Strode - 3.28.1-10 +- Show cursor explicitly from session selector + Resolves: #1624430 + +* Tue May 19 2020 Ray Strode - 3.28.1-9 +- Add kiosk-session subpackage to help users set up RHEL for + kiosk/point-of-sale use. + Resolves: #1739556 + * Wed Nov 20 2019 Tomas Pelka - 3.28.1-8 - rebuild and version bump to avoid future conflict with z-stream version Resolves: #1745147